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)
char *ErrPortWhere = "Admin->System Preferences->Network.\n\nThe failed ports and sockets are: ";
char *ErrPortHint = "If you want citadel to provide you with that functionality, "
"check the output of \"netstat -lnp\" on linux Servers or \"netstat -na\" on *BSD"
-" and stop the programm, that binds these ports. You should eventually remove "
+" and stop the programm, that binds these ports.\n You should eventually remove "
" their initscripts in /etc/init.d so that you won't get this trouble once more.\n"
" After that goto Administration -> Shutdown Citadel to make Citadel retry to bind this port.\n";
const unsigned char *ptr = (const unsigned char*)key;
for (i = 0; i < 4; i++, ptr ++)
- ret = (ret << 8) | *ptr;
+ ret = (ret << 8) |
+ ( ((*ptr >= 'a') &&
+ (*ptr <= 'z'))?
+ *ptr - 'a' + 'A':
+ *ptr);
return ret;
}
}
-
-
-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
*/