]> code.citadel.org Git - citadel.git/blobdiff - citadel/serv_vcard.c
* Add specific error codes for every command on the wire protocol, so that
[citadel.git] / citadel / serv_vcard.c
index 9e2b3381585086e2b7f98a98c3062563163c86cb..c1c30c670572f9d49cfd26e4dfb150fd499e47fa 100644 (file)
@@ -174,7 +174,7 @@ void vcard_add_to_directory(long msgnum, void *data) {
        }
 
 #ifdef HAVE_LDAP
-       ctdl_vcard_to_ldap(msg);
+       ctdl_vcard_to_ldap(msg, V2L_WRITE);
 #endif
 
        CtdlFreeMessage(msg);
@@ -193,7 +193,7 @@ void cmd_igab(char *argbuf) {
 
         if (getroom(&CC->room, ADDRESS_BOOK_ROOM) != 0) {
                 getroom(&CC->room, hold_rm);
-               cprintf("%d cannot get address book room\n", ERROR);
+               cprintf("%d cannot get address book room\n", ERROR + ROOM_NOT_FOUND);
                return;
         }
 
@@ -517,7 +517,7 @@ void cmd_regi(char *argbuf) {
        char tmpcountry[SIZ];
 
        if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
+               cprintf("%d Not logged in.\n",ERROR + NOT_LOGGED_IN);
                return;
        }
 
@@ -573,7 +573,7 @@ void cmd_greg(char *argbuf)
        extract(who, argbuf, 0);
 
        if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR+NOT_LOGGED_IN);
+               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
                return;
        }
 
@@ -581,12 +581,12 @@ void cmd_greg(char *argbuf)
 
        if ((CC->user.axlevel < 6) && (strcasecmp(who,CC->curr_user))) {
                cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
+                       ERROR + HIGHER_ACCESS_REQUIRED);
                return;
        }
 
        if (getuser(&usbuf, who) != 0) {
-               cprintf("%d '%s' not found.\n", ERROR+NO_SUCH_USER, who);
+               cprintf("%d '%s' not found.\n", ERROR + NO_SUCH_USER, who);
                return;
        }
 
@@ -731,6 +731,9 @@ void vcard_delete_remove(char *room, long msgnum) {
                        */
                        vcard_extract_internet_addresses(msg,
                                                        CtdlDirectoryDelUser);
+#ifdef HAVE_LDAP
+                       ctdl_vcard_to_ldap(msg, V2L_DELETE);
+#endif
                }
                ptr = strchr((char *)ptr, '\n');
                if (ptr != NULL) ++ptr;
@@ -754,7 +757,7 @@ void cmd_qdir(char *argbuf) {
 
        if (CtdlDirectoryLookup(citadel_addr, internet_addr) != 0) {
                cprintf("%d %s was not found.\n",
-                       ERROR+NO_SUCH_USER, internet_addr);
+                       ERROR + NO_SUCH_USER, internet_addr);
                return;
        }
 
@@ -819,6 +822,8 @@ void vcard_session_login_hook(void) {
 
 char *serv_vcard_init(void)
 {
+       struct ctdlroom qr;
+
        CtdlRegisterSessionHook(vcard_session_startup_hook, EVT_START);
        CtdlRegisterSessionHook(vcard_session_login_hook, EVT_LOGIN);
        CtdlRegisterMessageHook(vcard_upload_beforesave, EVT_BEFORESAVE);
@@ -831,6 +836,16 @@ char *serv_vcard_init(void)
        CtdlRegisterProtoHook(cmd_qdir, "QDIR", "Query Directory");
        CtdlRegisterUserHook(vcard_purge, EVT_PURGEUSER);
        CtdlRegisterNetprocHook(vcard_extract_from_network);
+
+       /* Create the Global ADdress Book room if necessary */
        create_room(ADDRESS_BOOK_ROOM, 3, "", 0, 1, 0);
+
+       /* Set expiration policy to manual; otherwise objects will be lost! */
+       if (!lgetroom(&qr, ADDRESS_BOOK_ROOM)) {
+               qr.QRep.expire_mode = EXPIRE_MANUAL;
+               qr.QRdefaultview = 2;   /* 2 = address book view */
+               lputroom(&qr);
+       }
+
        return "$Id$";
 }