From: Art Cancro Date: Thu, 10 Jan 2002 04:29:28 +0000 (+0000) Subject: * Minor updates for directory service X-Git-Tag: v7.86~6618 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=775ae84fdece926d05fd0d8d313bd4d06ff473f9 * Minor updates for directory service --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index a420d530f..97543b6b9 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,7 @@ $Log$ + Revision 590.52 2002/01/10 04:29:28 ajc + * Minor updates for directory service + Revision 590.51 2002/01/09 23:12:40 ajc * Allow users to zap mailbox rooms @@ -3121,4 +3124,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import - diff --git a/citadel/database.c b/citadel/database.c index c9e4264bc..f4050722a 100644 --- a/citadel/database.c +++ b/citadel/database.c @@ -95,6 +95,12 @@ void defrag_databases(void) gdbm_reorganize(gdbms[CDB_FLOORTAB]); end_critical_section(S_DATABASE); end_critical_section(S_FLOORTAB); + + /* defrag the directory */ + lprintf(7, "Defragmenting the directory\n"); + begin_critical_section(S_DIRECTORY); + gdbm_reorganize(gdbms[CDB_DIRECTORY]); + end_critical_section(S_DIRECTORY); } @@ -161,6 +167,13 @@ void open_databases(void) gdbm_strerror(gdbm_errno)); exit(1); } + gdbms[CDB_DIRECTORY] = gdbm_open("data/directory.gdbm", 0, + GDBM_WRCREAT, 0600, NULL); + if (gdbms[CDB_DIRECTORY] == NULL) { + lprintf(2, "Cannot open directory: %s\n", + gdbm_strerror(gdbm_errno)); + exit(1); + } /* end_critical_section(S_DATABASE); */ diff --git a/citadel/serv_vcard.c b/citadel/serv_vcard.c index d3c571d2c..c577aaa38 100644 --- a/citadel/serv_vcard.c +++ b/citadel/serv_vcard.c @@ -114,7 +114,7 @@ void vcard_extract_internet_addresses(struct CtdlMessage *msg, * Back end function for cmd_igab() * FIXME use a callback that actually writes to the database, dumbass... */ -void vcard_igab_backend(long msgnum, void *data) { +void vcard_add_to_directory(long msgnum, void *data) { struct CtdlMessage *msg; msg = CtdlFetchMessage(msgnum); @@ -152,7 +152,7 @@ void cmd_igab(char *argbuf) { /* We want the last (and probably only) vcard in this room */ CtdlForEachMessage(MSGS_ALL, 0, (-127), "text/x-vcard", - NULL, vcard_igab_backend, NULL); + NULL, vcard_add_to_directory, NULL); getroom(&CC->quickroom, hold_rm); /* return to saved room */ cprintf("000\n"); @@ -264,9 +264,13 @@ int vcard_upload_aftersave(struct CtdlMessage *msg) { I = atol(msg->cm_fields['I']); if (I < 0L) return(0); + /* Put it in the Global Address Book room... */ CtdlSaveMsgPointerInRoom(ADDRESS_BOOK_ROOM, I, (SM_VERIFY_GOODNESS | SM_DO_REPL_CHECK) ); + /* ...and also in the directory database. */ + vcard_add_to_directory(I, NULL); + return(0); } diff --git a/citadel/server.h b/citadel/server.h index 1a1655ae6..86fcf4e38 100644 --- a/citadel/server.h +++ b/citadel/server.h @@ -205,6 +205,7 @@ enum { S_WORKER_LIST, S_HOUSEKEEPING, S_NTTLIST, + S_DIRECTORY, MAX_SEMAPHORES }; @@ -245,6 +246,7 @@ enum { CDB_FLOORTAB, /* floor index */ CDB_MSGLISTS, /* room message lists */ CDB_VISIT, /* user/room relationships */ + CDB_DIRECTORY, /* address book directory */ MAXCDB /* total number of CDB's defined */ };