X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserv_extensions.c;h=df80cc845424658f94cfc7c5d4f3d706824f8aaa;hb=f1ee61891901850ebbdee1e9440b363dc6df540a;hp=54eaecd536a4233921a9ca72cefd15ad9b0be69f;hpb=d62a8c8ef6806683067f0c25f243b67206f787a1;p=citadel.git diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 54eaecd53..df80cc845 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -1,6 +1,22 @@ /* * Citadel Dynamic Loading Module * Written by Brian Costello + * + * Copyright (c) 1987-2011 by the citadel.org team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -12,6 +28,7 @@ #include #include #include +#include #include #include "citadel.h" #include "server.h" @@ -109,8 +126,8 @@ void LogPrintMessages(long err) snprintf(Message, n * SIZ, ErrGeneral, Short, Where, List, Hint, DetailList); - CtdlLogPrintf(0,Message); - CtdlLogPrintf(0,ErrSubject); + syslog(LOG_EMERG,Message); + syslog(LOG_EMERG,ErrSubject); quickie_message("Citadel", NULL, NULL, AIDEROOM, Message, FMT_FIXED, ErrSubject); if (errormessages!=NULL) free (errormessages); errormessages = NULL; @@ -189,7 +206,7 @@ int DLoader_Exec_Cmd(char *cmdbuf) return 0; } -int FourHash(const char *key, long length) +long FourHash(const char *key, long length) { int i; int ret = 0; @@ -225,7 +242,7 @@ void CtdlRegisterProtoHook(void (*handler) (char *), char *cmd, char *desc) p->desc = desc; Put(ProtoHookList, cmd, 4, p, NULL); - CtdlLogPrintf(CTDL_INFO, "Registered server command %s (%s)\n", cmd, desc); + syslog(LOG_INFO, "Registered server command %s (%s)\n", cmd, desc); } void CtdlDestroyProtoHooks(void) @@ -246,7 +263,7 @@ void CtdlRegisterCleanupHook(void (*fcn_ptr) (void)) newfcn->h_function_pointer = fcn_ptr; CleanupHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new cleanup function\n"); + syslog(LOG_INFO, "Registered a new cleanup function\n"); } @@ -258,7 +275,7 @@ void CtdlUnregisterCleanupHook(void (*fcn_ptr) (void)) /* This will also remove duplicates if any */ while (cur != NULL && fcn_ptr == cur->h_function_pointer) { - CtdlLogPrintf(CTDL_INFO, "Unregistered cleanup function\n"); + syslog(LOG_INFO, "Unregistered cleanup function\n"); p = cur->next; if (cur == CleanupHookTable) { CleanupHookTable = p; @@ -276,7 +293,7 @@ void CtdlDestroyCleanupHooks(void) cur = CleanupHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed cleanup function\n"); + syslog(LOG_INFO, "Destroyed cleanup function\n"); p = cur->next; free(cur); cur = p; @@ -297,7 +314,7 @@ void CtdlRegisterSessionHook(void (*fcn_ptr) (void), int EventType) newfcn->eventtype = EventType; SessionHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new session function (type %d)\n", + syslog(LOG_INFO, "Registered a new session function (type %d)\n", EventType); } @@ -311,7 +328,7 @@ void CtdlUnregisterSessionHook(void (*fcn_ptr) (void), int EventType) while (cur != NULL && fcn_ptr == cur->h_function_pointer && EventType == cur->eventtype) { - CtdlLogPrintf(CTDL_INFO, "Unregistered session function (type %d)\n", + syslog(LOG_INFO, "Unregistered session function (type %d)\n", EventType); p = cur->next; if (cur == SessionHookTable) { @@ -330,7 +347,7 @@ void CtdlDestroySessionHooks(void) cur = SessionHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed session function\n"); + syslog(LOG_INFO, "Destroyed session function\n"); p = cur->next; free(cur); cur = p; @@ -351,7 +368,7 @@ void CtdlRegisterUserHook(void (*fcn_ptr) (struct ctdluser *), int EventType) newfcn->eventtype = EventType; UserHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new user function (type %d)\n", + syslog(LOG_INFO, "Registered a new user function (type %d)\n", EventType); } @@ -365,7 +382,7 @@ void CtdlUnregisterUserHook(void (*fcn_ptr) (struct ctdluser *), int EventType) while (cur != NULL && fcn_ptr == cur->h_function_pointer && EventType == cur->eventtype) { - CtdlLogPrintf(CTDL_INFO, "Unregistered user function (type %d)\n", + syslog(LOG_INFO, "Unregistered user function (type %d)\n", EventType); p = cur->next; if (cur == UserHookTable) { @@ -384,7 +401,7 @@ void CtdlDestroyUserHooks(void) cur = UserHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed user function \n"); + syslog(LOG_INFO, "Destroyed user function \n"); p = cur->next; free(cur); cur = p; @@ -406,7 +423,7 @@ void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *), newfcn->eventtype = EventType; MessageHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new message function (type %d)\n", + syslog(LOG_INFO, "Registered a new message function (type %d)\n", EventType); } @@ -421,7 +438,7 @@ void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *), while (cur != NULL && handler == cur->h_function_pointer && EventType == cur->eventtype) { - CtdlLogPrintf(CTDL_INFO, "Unregistered message function (type %d)\n", + syslog(LOG_INFO, "Unregistered message function (type %d)\n", EventType); p = cur->next; if (cur == MessageHookTable) { @@ -440,7 +457,7 @@ void CtdlDestroyMessageHook(void) cur = MessageHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed message function (type %d)\n", cur->eventtype); + syslog(LOG_INFO, "Destroyed message function (type %d)\n", cur->eventtype); p = cur->next; free(cur); cur = p; @@ -459,7 +476,7 @@ void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) newfcn->fcn_ptr = fcn_ptr; RoomHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new room function\n"); + syslog(LOG_INFO, "Registered a new room function\n"); } @@ -469,7 +486,7 @@ void CtdlUnregisterRoomHook(int (*fcn_ptr)(struct ctdlroom *)) for (cur = RoomHookTable; cur != NULL; cur = cur->next) { while (cur != NULL && fcn_ptr == cur->fcn_ptr) { - CtdlLogPrintf(CTDL_INFO, "Unregistered room function\n"); + syslog(LOG_INFO, "Unregistered room function\n"); p = cur->next; if (cur == RoomHookTable) { RoomHookTable = p; @@ -488,7 +505,7 @@ void CtdlDestroyRoomHooks(void) cur = RoomHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed room function\n"); + syslog(LOG_INFO, "Destroyed room function\n"); p = cur->next; free(cur); cur = p; @@ -506,7 +523,7 @@ void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ) newfcn->h_function_pointer = handler; NetprocHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new netproc function\n"); + syslog(LOG_INFO, "Registered a new netproc function\n"); } @@ -518,7 +535,7 @@ void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ) /* This will also remove duplicates if any */ while (cur != NULL && handler == cur->h_function_pointer ) { - CtdlLogPrintf(CTDL_INFO, "Unregistered netproc function\n"); + syslog(LOG_INFO, "Unregistered netproc function\n"); p = cur->next; if (cur == NetprocHookTable) { NetprocHookTable = p; @@ -536,7 +553,7 @@ void CtdlDestroyNetprocHooks(void) cur = NetprocHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed netproc function\n"); + syslog(LOG_INFO, "Destroyed netproc function\n"); p = cur->next; free(cur); cur = p; @@ -555,7 +572,7 @@ void CtdlRegisterDeleteHook(void (*handler)(char *, long) ) newfcn->h_function_pointer = handler; DeleteHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new delete function\n"); + syslog(LOG_INFO, "Registered a new delete function\n"); } @@ -567,7 +584,7 @@ void CtdlUnregisterDeleteHook(void (*handler)(char *, long) ) /* This will also remove duplicates if any */ while (cur != NULL && handler == cur->h_function_pointer ) { - CtdlLogPrintf(CTDL_INFO, "Unregistered delete function\n"); + syslog(LOG_INFO, "Unregistered delete function\n"); p = cur->next; if (cur == DeleteHookTable) { DeleteHookTable = p; @@ -584,7 +601,7 @@ void CtdlDestroyDeleteHooks(void) cur = DeleteHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed delete function\n"); + syslog(LOG_INFO, "Destroyed delete function\n"); p = cur->next; free(cur); cur = p; @@ -606,7 +623,7 @@ void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int safestrncpy(newfcn->content_type, content_type, sizeof newfcn->content_type); FixedOutputTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new fixed output function for %s\n", newfcn->content_type); + syslog(LOG_INFO, "Registered a new fixed output function for %s\n", newfcn->content_type); } @@ -617,7 +634,7 @@ void CtdlUnregisterFixedOutputHook(char *content_type) for (cur = FixedOutputTable; cur != NULL; cur = cur->next) { /* This will also remove duplicates if any */ while (cur != NULL && (!strcasecmp(content_type, cur->content_type))) { - CtdlLogPrintf(CTDL_INFO, "Unregistered fixed output function for %s\n", content_type); + syslog(LOG_INFO, "Unregistered fixed output function for %s\n", content_type); p = cur->next; if (cur == FixedOutputTable) { FixedOutputTable = p; @@ -635,7 +652,7 @@ void CtdlDestroyFixedOutputHooks(void) cur = FixedOutputTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed fixed output function for %s\n", cur->content_type); + syslog(LOG_INFO, "Destroyed fixed output function for %s\n", cur->content_type); p = cur->next; free(cur); cur = p; @@ -672,7 +689,7 @@ void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int o newfcn->order = order; newfcn->h_function_pointer = fcn_ptr; XmsgHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new x-msg function (priority %d)\n", order); + syslog(LOG_INFO, "Registered a new x-msg function (priority %d)\n", order); } @@ -685,7 +702,7 @@ void CtdlUnregisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int while (cur != NULL && fcn_ptr == cur->h_function_pointer && order == cur->order) { - CtdlLogPrintf(CTDL_INFO, "Unregistered x-msg function " + syslog(LOG_INFO, "Unregistered x-msg function " "(priority %d)\n", order); p = cur->next; if (cur == XmsgHookTable) { @@ -704,7 +721,7 @@ void CtdlDestroyXmsgHooks(void) cur = XmsgHookTable; while (cur != NULL) { - CtdlLogPrintf(CTDL_INFO, "Destroyed x-msg function " + syslog(LOG_INFO, "Destroyed x-msg function " "(priority %d)\n", cur->order); p = cur->next; @@ -743,7 +760,7 @@ void CtdlRegisterServiceHook(int tcp_port, snprintf(message, SIZ, "Unix domain socket '%s': ", sockpath); } else if (tcp_port <= 0) { /* port -1 to disable */ - CtdlLogPrintf(CTDL_INFO, "Service %s has been manually disabled, skipping\n", ServiceName); + syslog(LOG_INFO, "Service %s has been manually disabled, skipping\n", ServiceName); free (message); free(newfcn); return; @@ -760,13 +777,12 @@ void CtdlRegisterServiceHook(int tcp_port, if (newfcn->msock > 0) { ServiceHookTable = newfcn; strcat(message, "registered."); - CtdlLogPrintf(CTDL_INFO, "%s\n", message); + syslog(LOG_INFO, "%s\n", message); } else { AddPortError(message, error); strcat(message, "FAILED."); - CtdlLogPrintf(CTDL_CRIT, "%s\n", message); - free(error); + syslog(LOG_CRIT, "%s\n", message); free(newfcn); } free(message); @@ -793,12 +809,12 @@ void CtdlUnregisterServiceHook(int tcp_port, char *sockpath, tcp_port == cur->tcp_port) { close(cur->msock); if (sockpath) { - CtdlLogPrintf(CTDL_INFO, "Closed UNIX domain socket %s\n", + syslog(LOG_INFO, "Closed UNIX domain socket %s\n", sockpath); } else if (tcp_port) { - CtdlLogPrintf(CTDL_INFO, "Closed TCP port %d\n", tcp_port); + syslog(LOG_INFO, "Closed TCP port %d\n", tcp_port); } else { - CtdlLogPrintf(CTDL_INFO, "Unregistered service \"%s\"\n", cur->ServiceName); + syslog(LOG_INFO, "Unregistered service \"%s\"\n", cur->ServiceName); } p = cur->next; if (cur == ServiceHookTable) { @@ -824,11 +840,11 @@ void CtdlShutdownServiceHooks(void) close(cur->msock); cur->msock = -1; if (cur->sockpath != NULL){ - CtdlLogPrintf(CTDL_INFO, "[%s] Closed UNIX domain socket %s\n", + syslog(LOG_INFO, "[%s] Closed UNIX domain socket %s\n", cur->ServiceName, cur->sockpath); } else { - CtdlLogPrintf(CTDL_INFO, "[%s] closing service\n", + syslog(LOG_INFO, "[%s] closing service\n", cur->ServiceName); } } @@ -845,12 +861,12 @@ void CtdlDestroyServiceHook(void) { close(cur->msock); if (cur->sockpath) { - CtdlLogPrintf(CTDL_INFO, "Closed UNIX domain socket %s\n", + syslog(LOG_INFO, "Closed UNIX domain socket %s\n", cur->sockpath); } else if (cur->tcp_port) { - CtdlLogPrintf(CTDL_INFO, "Closed TCP port %d\n", cur->tcp_port); + syslog(LOG_INFO, "Closed TCP port %d\n", cur->tcp_port); } else { - CtdlLogPrintf(CTDL_INFO, "Destroyed service \"%s\"\n", cur->ServiceName); + syslog(LOG_INFO, "Destroyed service \"%s\"\n", cur->ServiceName); } p = cur->next; free(cur); @@ -874,7 +890,7 @@ void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), c newfcn->fcn_ptr = fcn_ptr; SearchFunctionHookTable = newfcn; - CtdlLogPrintf(CTDL_INFO, "Registered a new search function (%s)\n", name); + syslog(LOG_INFO, "Registered a new search function (%s)\n", name); } void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), char *name) @@ -883,7 +899,7 @@ void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), for (cur = SearchFunctionHookTable; cur != NULL; cur = cur->next) { while (fcn_ptr && (cur->fcn_ptr == fcn_ptr) && name && !strcmp(name, cur->name)) { - CtdlLogPrintf(CTDL_INFO, "Unregistered search function(%s)\n", name); + syslog(LOG_INFO, "Unregistered search function(%s)\n", name); p = cur->next; if (cur == SearchFunctionHookTable) { SearchFunctionHookTable = p; @@ -894,6 +910,19 @@ void CtdlUnregisterSearchFuncHook(void (*fcn_ptr)(int *, long **, const char *), } } +void CtdlDestroySearchHooks(void) +{ + struct SearchFunctionHook *cur, *p; + + cur = SearchFunctionHookTable; + SearchFunctionHookTable = NULL; + while (cur != NULL) { + p = cur->next; + free(cur); + cur = p; + } +} + void CtdlModuleDoSearch(int *num_msgs, long **search_msgs, const char *search_string, const char *func_name) { struct SearchFunctionHook *fcn = NULL; @@ -940,11 +969,11 @@ int PerformMessageHooks(struct CtdlMessage *msg, int EventType) /* Other code may elect to protect this message from server-side * handlers; if this is the case, don't do anything. - CtdlLogPrintf(CTDL_DEBUG, "** Event type is %d, flags are %d\n", + syslog(LOG_DEBUG, "** Event type is %d, flags are %d\n", EventType, msg->cm_flags); */ if (msg->cm_flags & CM_SKIP_HOOKS) { - CtdlLogPrintf(CTDL_DEBUG, "Skipping hooks\n"); + syslog(LOG_DEBUG, "Skipping hooks\n"); return(0); } @@ -970,7 +999,7 @@ int PerformRoomHooks(struct ctdlroom *target_room) struct RoomFunctionHook *fcn; int total_retval = 0; - CtdlLogPrintf(CTDL_DEBUG, "Performing room hooks for <%s>\n", target_room->QRname); + syslog(LOG_DEBUG, "Performing room hooks for <%s>\n", target_room->QRname); for (fcn = RoomHookTable; fcn != NULL; fcn = fcn->next) { total_retval = total_retval + (*fcn->fcn_ptr) (target_room);