$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.
Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
* Initial CVS import
+
/*
- * 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);
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);
+/*
+ * 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
*/
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$";
}