From 289b88fe10145e2a91753d57d1eb0605f13e4049 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Sat, 20 Apr 2002 03:00:01 +0000 Subject: [PATCH] * One more fix for the RENAME command wrt namespaces. --- citadel/ChangeLog | 4 +++- citadel/imap_tools.c | 5 ++++- citadel/room_ops.c | 21 +++++++++++++++++---- citadel/serv_imap.c | 6 ++++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 0b4a36147..d409a3645 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -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 Fri Jul 10 1998 Art Cancro * Initial CVS import - diff --git a/citadel/imap_tools.c b/citadel/imap_tools.c index f6c66689a..d14f97ead 100644 --- a/citadel/imap_tools.c +++ b/citadel/imap_tools.c @@ -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); diff --git a/citadel/room_ops.c b/citadel/room_ops.c index a2e7db3b9..a2f1224f6 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -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; diff --git a/citadel/serv_imap.c b/citadel/serv_imap.c index e34d7421c..9a32cac6b 100644 --- a/citadel/serv_imap.c +++ b/citadel/serv_imap.c @@ -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); -- 2.39.2