* One more fix for the RENAME command wrt namespaces.
authorArt Cancro <ajc@citadel.org>
Sat, 20 Apr 2002 03:00:01 +0000 (03:00 +0000)
committerArt Cancro <ajc@citadel.org>
Sat, 20 Apr 2002 03:00:01 +0000 (03:00 +0000)
citadel/ChangeLog
citadel/imap_tools.c
citadel/room_ops.c
citadel/serv_imap.c

index 0b4a361474abafccfd2ec7fd95f857a516d0a0a2..d409a3645ff7d294379d62fb8a1d529494ded88d 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 591.13  2002/04/20 03:00:01  ajc
+ * One more fix for the RENAME command wrt namespaces.
+
  Revision 591.12  2002/04/18 18:44:36  nbryant
  don't use libtool -avoid-version for libcitserver - this might help for
  OpenBSD
@@ -3614,4 +3617,3 @@ 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 f6c66689aead2784718422cd96d4f8173f69e364..d14f97ead758e437e8389f426b3f26669f30f02e 100644 (file)
@@ -140,7 +140,6 @@ int imap_roomname(char *rbuf, int bufsize, char *foldername)
        int levels;
        char floorname[SIZ];
        char roomname[SIZ];
-       char buf[SIZ];
        int i;
        struct floor *fl;
        int ret = (-1);
@@ -185,12 +184,16 @@ int imap_roomname(char *rbuf, int bufsize, char *foldername)
                if (rbuf[i] == '|') rbuf[i] = '/';
        }
 
+
+/*** This doesn't work.
+       char buf[SIZ];
        if (ret & IR_MAILBOX) {
                if (atol(rbuf) == 0L) {
                        strcpy(buf, rbuf);
                        sprintf(rbuf, "%010ld.%s", CC->usersupp.usernum, buf);
                }
        }
+ ***/
 
        lprintf(9, "(That translates to \"%s\")\n", rbuf);
        return(ret);
index a2e7db3b97a24fb73aeec902bd55a9527810fc73..a2f1224f6b5a104cd22df64fe6a77b536a040d67 100644 (file)
@@ -1008,8 +1008,8 @@ void cmd_getr(void)
  * You can also specify which floor to move the room to, or specify -1 to
  * keep the room on the same floor it was on.
  *
- * This function is unaware of namespaces.  If you are renaming a mailbox
- * room, you must supply the namespace prefix in both the old and new names!
+ * If you are renaming a mailbox room, you must supply the namespace prefix
+ * in *at least* the old name!
  */
 int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) {
        int old_floor = 0;
@@ -1018,7 +1018,7 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) {
        int ret = 0;
        struct floor *fl;
        struct floor flbuf;
-
+       long owner = 0L;
 
        lprintf(9, "CtdlRenameRoom(%s, %s, %d)\n",
                old_name, new_name, new_floor);
@@ -1052,7 +1052,20 @@ int CtdlRenameRoom(char *old_name, char *new_name, int new_floor) {
        }
 
        else {
-               safestrncpy(qrbuf.QRname, new_name, sizeof(qrbuf.QRname));
+               /* Rename it */
+               if (qrbuf.QRflags & QR_MAILBOX) {
+                       owner = atol(qrbuf.QRname);
+               }
+               if ( (owner > 0L) && (atol(new_name) == 0L) ) {
+                       snprintf(qrbuf.QRname, sizeof(qrbuf.QRname),
+                                       "%010ld.%s", owner, new_name);
+               }
+               else {
+                       safestrncpy(qrbuf.QRname, new_name,
+                                               sizeof(qrbuf.QRname));
+               }
+
+               /* Take care of floor stuff */
                old_floor = qrbuf.QRfloor;
                if (new_floor < 0) {
                        new_floor = old_floor;
index e34d7421c98482ef45d0316b7a62b27b6b4b1dd1..9a32cac6bd5c937d6db983130def3f3a3ca2ae95 100644 (file)
@@ -923,7 +923,6 @@ void imap_rename(int num_parms, char *parms[]) {
                char newfoldername[SIZ];
                char newroomname[ROOMNAMELEN];
                int newfloor;
-               int r;
        
                imap_mailboxname(foldername, sizeof foldername, qrbuf);
        
@@ -998,7 +997,10 @@ void imap_rename(int num_parms, char *parms[]) {
                while (irl != NULL) {
                        r = CtdlRenameRoom(irl->irl_oldroom,
                                irl->irl_newroom, irl->irl_newfloor);
-                       /* FIXME handle error returns */
+                       if (r != crr_ok) {
+                               /* FIXME handle error returns better */
+                               lprintf(5, "CtdlRenameRoom() error %d\n", r);
+                       }
                        irlp = irl;
                        irl = irl->next;
                        phree(irlp);