From: Art Cancro Date: Thu, 31 Jan 2002 05:13:45 +0000 (+0000) Subject: * When deleting a vCard from the Global Address Book room, remove the X-Git-Tag: v7.86~6564 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=597ec847a219282252316bff2e04ad6b5264c88e * When deleting a vCard from the Global Address Book room, remove the corresponding address in the directory. (Not tested.) --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 77d5a415c..4ba7f6739 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,8 @@ $Log$ + Revision 590.96 2002/01/31 05:13:44 ajc + * When deleting a vCard from the Global Address Book room, remove the + corresponding address in the directory. (Not tested.) + Revision 590.95 2002/01/30 19:03:41 ajc * Added a new DeleteFunctionHook type of thing. These get called when a message is being deleted from a room. @@ -3274,3 +3278,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import + diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 306339502..d0d575a0c 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -598,9 +598,12 @@ void CtdlDirectoryAddUser(char *internet_addr, char *citadel_addr) { /* - * Delete an Internet e-mail address from the directory + * Delete an Internet e-mail address from the directory. + * + * (NOTE: we don't actually use or need the citadel_addr variable; it's merely + * here because the callback API expects to be able to send it.) */ -void CtdlDirectoryDelUser(char *internet_addr) { +void CtdlDirectoryDelUser(char *internet_addr, char *citadel_addr) { char key[SIZ]; directory_key(key, internet_addr); diff --git a/citadel/internet_addressing.h b/citadel/internet_addressing.h index bf78e5dba..d873b972d 100644 --- a/citadel/internet_addressing.h +++ b/citadel/internet_addressing.h @@ -20,7 +20,7 @@ char *rfc822_fetch_field(char *rfc822, char *fieldname); int IsDirectory(char *addr); void CtdlDirectoryInit(void); void CtdlDirectoryAddUser(char *internet_addr, char *citadel_addr); -void CtdlDirectoryDelUser(char *internet_addr); +void CtdlDirectoryDelUser(char *internet_addr, char *citadel_addr); int CtdlDirectoryLookup(char *target, char *internet_addr); struct CtdlMessage *convert_internet_message(char *rfc822); int CtdlHostAlias(char *fqdn); diff --git a/citadel/serv_vcard.c b/citadel/serv_vcard.c index 4f487561f..7982075b5 100644 --- a/citadel/serv_vcard.c +++ b/citadel/serv_vcard.c @@ -586,6 +586,30 @@ int vcard_extract_from_network(struct CtdlMessage *msg, char *target_room) { +/* + * When a vCard is being removed from the Global Address Book room, remove it + * from the directory as well. + */ +void vcard_delete_remove(char *room, long msgnum) { + struct CtdlMessage *msg; + + if (msgnum <= 0L) return; + + if (strcasecmp(room, ADDRESS_BOOK_ROOM)) { + return; + } + + msg = CtdlFetchMessage(msgnum); + if (msg != NULL) { + vcard_extract_internet_addresses(msg, CtdlDirectoryDelUser); + } + + CtdlFreeMessage(msg); +} + + + + /* * Session startup, allocate some per-session data */ @@ -600,12 +624,13 @@ char *Dynamic_Module_Init(void) CtdlRegisterSessionHook(vcard_session_startup_hook, EVT_START); CtdlRegisterMessageHook(vcard_upload_beforesave, EVT_BEFORESAVE); CtdlRegisterMessageHook(vcard_upload_aftersave, EVT_AFTERSAVE); + CtdlRegisterDeleteHook(vcard_delete_remove); CtdlRegisterProtoHook(cmd_regi, "REGI", "Enter registration info"); CtdlRegisterProtoHook(cmd_greg, "GREG", "Get registration info"); CtdlRegisterProtoHook(cmd_igab, "IGAB", "Initialize Global Address Book"); CtdlRegisterUserHook(vcard_purge, EVT_PURGEUSER); - create_room(ADDRESS_BOOK_ROOM, 3, "", 0, 1); CtdlRegisterNetprocHook(vcard_extract_from_network); + create_room(ADDRESS_BOOK_ROOM, 3, "", 0, 1); return "$Id$"; }