X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserv_extensions.c;h=421824a9b0ce156b4f90b44b837ba41a7668883c;hb=3403c39cad2dba8c99c587501f4663f6a288f75f;hp=67fd4034ea44e7c79d9e83a2b13c3a8256cceacd;hpb=bbd4ff8d011098fa7ab99a3837c16173c9f1cb6e;p=citadel.git diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 67fd4034e..421824a9b 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -53,19 +53,6 @@ struct ProtoFunctionHook { HashList *ProtoHookList = NULL; -struct DirectoryServiceHook { - int (*handler) (char *cn, char *ou, void **object); - int cmd; - char *module; - struct DirectoryServiceHook *next; -} *DirectoryServiceHookList = NULL; - -struct DirectoryObject { - char *module; - void *object; - struct DirectoryObject *next; -}; - #define ERR_PORT (1 << 1) @@ -1024,134 +1011,6 @@ int PerformXmsgHooks(char *sender, char *sender_email, char *recp, char *msg) } - - -int CtdlRegisterDirectoryServiceFunc(int (*func)(char *cn, char *ou, void **object), int cmd, char *module) -{ - struct DirectoryServiceHook *newfcn; - - newfcn = DirectoryServiceHookList; - while (newfcn) - { - if (newfcn->cmd == cmd && !strcmp(newfcn->module, module)) - { - CtdlLogPrintf(CTDL_ERR, "Directory service function already handled by module %s\n", module); - return -1; - } - newfcn = newfcn->next; - } - - newfcn = (struct DirectoryServiceHook *) malloc (sizeof(struct DirectoryServiceHook)); - newfcn->handler = func; - newfcn->cmd = cmd; - newfcn->module = module; - newfcn->next = DirectoryServiceHookList; - DirectoryServiceHookList = newfcn; - - CtdlLogPrintf(CTDL_INFO, "Registered a new directory service function from module %s\n", module); - return 0; -} - -int CtdlDoDirectoryServiceFunc(char *cn, char *ou, void **object, char *module, int cmd) -{ - struct DirectoryServiceHook *curfcn; - struct DirectoryObject *our_object_list = NULL; - struct DirectoryObject *newobject = NULL; - struct DirectoryObject *oldobject = NULL; - - - curfcn = DirectoryServiceHookList; - if (object) - our_object_list = (struct DirectoryObject *) *object; - - while (curfcn) - { - if (curfcn->cmd == cmd) - { - if (!module) - { - if (cmd == DIRECTORY_CREATE_OBJECT) - { - newobject = (struct DirectoryObject*) malloc (sizeof(struct DirectoryObject)); - newobject->module = curfcn->module; - newobject->object = NULL; - newobject->next = our_object_list; - our_object_list = newobject; - } - if (our_object_list) - { - for(newobject = our_object_list; newobject; newobject=newobject->next) - { - if (!strcmp(newobject->module, curfcn->module)) - (void) curfcn->handler(cn, ou, &newobject->object); - } - } - else - (void) curfcn->handler(cn, ou, NULL); - - continue; - } - else - { - if(!strcmp(curfcn->module, module)) - { - if (cmd == DIRECTORY_CREATE_OBJECT) - { - newobject = (struct DirectoryObject*) malloc (sizeof(struct DirectoryObject)); - newobject->module = module; - newobject->object = NULL; - newobject->next = our_object_list; - our_object_list = newobject; - } - if (our_object_list) - { - for(newobject = our_object_list; newobject; newobject=newobject->next) - { - if (!strcmp(newobject->module, curfcn->module)) - (void) curfcn->handler(cn, ou, &newobject->object); - } - } - else - (void) (curfcn->handler(cn, ou, NULL)); - - break; - } - } - } - curfcn=curfcn->next; - } - if (our_object_list) - { - *object = our_object_list; - if (cmd == DIRECTORY_FREE_OBJECT) - { // The objects pointed to by the list should have been freed by the module that created it - for(newobject = our_object_list; newobject; ) - { - oldobject=newobject; - newobject=newobject->next; - free(oldobject); - } - *object=NULL; - } - } - return 0; -} - -void CtdlDestroyDirectoryServiceFuncs(void) -{ - struct DirectoryServiceHook *cur, *next; - - cur = DirectoryServiceHookList; - DirectoryServiceHookList = NULL; - while (cur) - { - next = cur->next; - CtdlLogPrintf(CTDL_INFO, "Destroyed directory service function for module %s.\n", cur->module); - free(cur); - cur = next; - } -} - /* * Dirty hack until we impliment a hook mechanism for this */