From 004206b7ebfcea09018eedf600f355e56d587c01 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 18 Jan 2007 04:35:52 +0000 Subject: [PATCH] * CtdlCheckRoomAccess() now sets a new bit UA_ADMINALLOWED if the user is an Aide or the Room Aide * Used the above in IMAP ACL... --- citadel/imap_acl.c | 56 ++++++++++++++++++++++------------------------ citadel/ipcdef.h | 1 + citadel/room_ops.c | 7 ++++++ 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/citadel/imap_acl.c b/citadel/imap_acl.c index af497d3d9..dc694ad5b 100644 --- a/citadel/imap_acl.c +++ b/citadel/imap_acl.c @@ -129,41 +129,39 @@ void imap_getacl(int num_parms, char *parms[]) { * r - read (SELECT the mailbox, perform STATUS) * s - keep seen/unseen information across sessions (set or clear \SEEN flag * via STORE, also set \SEEN during APPEND/COPY/ FETCH BODY[...]) + * e - perform EXPUNGE and expunge as a part of CLOSE */ if ( (ra & UA_KNOWN) /* known rooms */ || ((ra & UA_GOTOALLOWED) && (ra & UA_ZAPPED)) /* zapped rooms */ ) { - strcat(rights, "l"); - strcat(rights, "r"); - strcat(rights, "s"); + strcat(rights, "l"); + strcat(rights, "r"); + strcat(rights, "s"); + strcat(rights, "e"); + + /* Only output the remaining flags if the room is known */ + + /* w - write (set or clear arbitrary flags; not supported in Citadel) */ + + /* i - insert (perform APPEND, COPY into mailbox) */ + /* p - post (send mail to submission address for mailbox - not enforced) */ + if (ra & UA_POSTALLOWED) { + strcat(rights, "i"); + strcat(rights, "p"); + } + + /* k - create mailboxes in this hierarchy */ + + /* t - delete messages (set/clear \Deleted flag) */ + + /* a - administer (perform SETACL/DELETEACL/GETACL/LISTRIGHTS) */ + /* x - delete mailbox (DELETE mailbox, old mailbox name in RENAME) */ + if (ra & UA_ADMINALLOWED) { + strcat(rights, "a"); + strcat(rights, "x"); + } } - /* w - write (set or clear flags other than \SEEN and \DELETED via - * STORE, also set them during APPEND/COPY) - */ - /* Never granted in Citadel because our store doesn't support other flags */ - - /* i - insert (perform APPEND, COPY into mailbox) - * p - post (send mail to submission address for mailbox, not enforced by IMAP) - */ - if (ra & UA_POSTALLOWED) { - strcat(rights, "i"); - strcat(rights, "p"); - } - - /* k - create mailboxes (CREATE new sub-mailboxes in any - * implementation-defined hierarchy, parent mailbox for the new - * mailbox name in RENAME) */ - - /* x - delete mailbox (DELETE mailbox, old mailbox name in RENAME) */ - - /* t - delete messages (set or clear \DELETED flag via STORE, set - * \DELETED flag during APPEND/COPY) */ - - /* e - perform EXPUNGE and expunge as a part of CLOSE */ - - /* a - administer (perform SETACL/DELETEACL/GETACL/LISTRIGHTS) */ - if (strlen(rights) > 0) { cprintf(" "); imap_strout(temp.fullname); diff --git a/citadel/ipcdef.h b/citadel/ipcdef.h index 285ae75f0..5e3330c44 100644 --- a/citadel/ipcdef.h +++ b/citadel/ipcdef.h @@ -79,6 +79,7 @@ extern "C" { #define UA_HASNEWMSGS 8 #define UA_ZAPPED 16 #define UA_POSTALLOWED 32 +#define UA_ADMINALLOWED 64 #ifdef __cplusplus } diff --git a/citadel/room_ops.c b/citadel/room_ops.c index 66cc97892..107cfc64b 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -166,6 +166,13 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf, retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED; } + /* Aides and Room Aides have admin privileges */ + if ( (userbuf->axlevel >= 6) + || (userbuf->usernum == roombuf->QRroomaide) + ) { + retval = retval | UA_ADMINALLOWED; + } + NEWMSG: /* By the way, we also check for the presence of new messages */ if (is_msg_in_sequence_set(vbuf.v_seen, roombuf->QRhighest) == 0) { retval = retval | UA_HASNEWMSGS; -- 2.39.2