]> code.citadel.org Git - citadel.git/commitdiff
* Implement proper access control for deleting messages from IMAP
authorArt Cancro <ajc@citadel.org>
Sat, 10 Mar 2001 17:29:08 +0000 (17:29 +0000)
committerArt Cancro <ajc@citadel.org>
Sat, 10 Mar 2001 17:29:08 +0000 (17:29 +0000)
citadel/ChangeLog
citadel/imap_store.c
citadel/msgbase.c
citadel/msgbase.h

index 6ef26fda25ab68ddc0ad059861e273cda0caeb7f..d88a4734f67a55c5185a1f545fb3753b128afad8 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 573.110  2001/03/10 17:29:07  ajc
+ * Implement proper access control for deleting messages from IMAP
+
  Revision 573.109  2001/03/07 04:02:27  ajc
  * Fixed some small IMAP bugs
 
@@ -2441,3 +2444,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 921648acccff5c93744d58b7e2846dfd09e68f2f..d688bcc2304719714e15c0421408156ab3278f53 100644 (file)
@@ -91,7 +91,9 @@ void imap_do_store(int num_items, char **itemlist) {
                striplt(flag);
 
                if (!strcasecmp(flag, "\\Deleted")) {
+                 if (CtdlDoIHavePermissionToDeleteMessagesFromThisRoom()) {
                        bits_to_twiddle |= IMAP_DELETED;
+                 }
                }
        }
        
index 7cadf16f8230875e4d72a972ed33e32bc23b99da..1386611178a7a34ae9b87019fd0b471fd9ffb461 100644 (file)
@@ -2314,6 +2314,23 @@ int CtdlDeleteMessages(char *room_name,          /* which room */
 
 
 
+/*
+ * Check whether the current user has permission to delete messages from
+ * the current room (returns 1 for yes, 0 for no)
+ */
+int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void) {
+       getuser(&CC->usersupp, CC->curr_user);
+       if ((CC->usersupp.axlevel < 6)
+           && (CC->usersupp.usernum != CC->quickroom.QRroomaide)
+           && ((CC->quickroom.QRflags & QR_MAILBOX) == 0)
+           && (!(CC->internal_pgm))) {
+               return(0);
+       }
+       return(1);
+}
+
+
+
 /*
  * Delete message from current room
  */
@@ -2322,11 +2339,7 @@ void cmd_dele(char *delstr)
        long delnum;
        int num_deleted;
 
-       getuser(&CC->usersupp, CC->curr_user);
-       if ((CC->usersupp.axlevel < 6)
-           && (CC->usersupp.usernum != CC->quickroom.QRroomaide)
-           && ((CC->quickroom.QRflags & QR_MAILBOX) == 0)
-           && (!(CC->internal_pgm))) {
+       if (CtdlDoIHavePermissionToDeleteMessagesFromThisRoom() == 0) {
                cprintf("%d Higher access required.\n",
                        ERROR + HIGHER_ACCESS_REQUIRED);
                return;
index 7fd3cba41b0ad51dfe952fe987f8bf46b88723b1..eed4c17e13f35e6ed4617c7537999c09803baae8 100644 (file)
@@ -101,3 +101,4 @@ int CtdlOutputPreLoadedMsg(struct CtdlMessage *,
                int do_proto,           /* do Citadel protocol responses? */
                int crlf);
 int CtdlCopyMsgToRoom(long msgnum, char *dest);
+int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void);