* When deleting a vCard from the Global Address Book room, remove the
authorArt Cancro <ajc@citadel.org>
Thu, 31 Jan 2002 05:13:45 +0000 (05:13 +0000)
committerArt Cancro <ajc@citadel.org>
Thu, 31 Jan 2002 05:13:45 +0000 (05:13 +0000)
  corresponding address in the directory.  (Not tested.)

citadel/ChangeLog
citadel/internet_addressing.c
citadel/internet_addressing.h
citadel/serv_vcard.c

index 77d5a415cfdf96ba86701da482478605504f6bab..4ba7f6739dcd5fd20768511d9814990813dc64f5 100644 (file)
@@ -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 <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import 
+
index 3063395025593de3801027dba132f5856a93a906..d0d575a0c63feda5a4aa91bd723632cd32039eaf 100644 (file)
@@ -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);
index bf78e5dba01bfd0c472788d80acfe00afcae4a8f..d873b972dd5bf738c6192ff63b27f761d3a10316 100644 (file)
@@ -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);
index 4f487561f275f441ab3afeb396fabeb9e8913e53..7982075b52f626dda41683c9624b306c0c5b17b0 100644 (file)
@@ -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$";
 }