]> code.citadel.org Git - citadel.git/blobdiff - citadel/room_ops.c
Replaced some of the 'autoconverted - document me' strings
[citadel.git] / citadel / room_ops.c
index 135fcbd2fa0e0ae4e8605cde8e6976a4a6be3ba3..c6801b6d352b2d7f4c4e665eedd9fa71d64add9f 100644 (file)
@@ -52,28 +52,43 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf,
 {
        int retval = 0;
        visit vbuf;
+       int is_me = 0;
+       int is_guest = 0;
+
+       if (userbuf == &CC->user) {
+               is_me = 1;
+       }
+
+       if ((is_me) && (config.c_guest_logins) && (!CC->logged_in)) {
+               is_guest = 1;
+       }
 
        /* for internal programs, always do everything */
        if (((CC->internal_pgm)) && (roombuf->QRflags & QR_INUSE)) {
-               retval = (UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED);
+               retval = (UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED | UA_REPLYALLOWED);
                vbuf.v_view = 0;
                goto SKIP_EVERYTHING;
        }
 
        /* If guest mode is enabled, always grant access to the Lobby */
-       if ( (!CC->logged_in) && (config.c_guest_logins) && (!strcasecmp(roombuf->QRname, BASEROOM)) ) {
+       if ((is_guest) && (!strcasecmp(roombuf->QRname, BASEROOM))) {
                retval = (UA_KNOWN | UA_GOTOALLOWED);
                vbuf.v_view = 0;
                goto SKIP_EVERYTHING;
        }
 
        /* Locate any applicable user/room relationships */
-       CtdlGetRelationship(&vbuf, userbuf, roombuf);
+       if (is_guest) {
+               memset(&vbuf, 0, sizeof vbuf);
+       }
+       else {
+               CtdlGetRelationship(&vbuf, userbuf, roombuf);
+       }
 
        /* Force the properties of the Aide room */
        if (!strcasecmp(roombuf->QRname, config.c_aideroom)) {
                if (userbuf->axlevel >= AxAideU) {
-                       retval = UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED;
+                       retval = UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED | UA_REPLYALLOWED;
                } else {
                        retval = 0;
                }
@@ -115,11 +130,11 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf,
        /* Also, mailbox owners can delete their messages */
        if (roombuf->QRflags & QR_MAILBOX) {
                if (userbuf->usernum == atol(roombuf->QRname)) {
-                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED;
+                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED | UA_REPLYALLOWED;
                }
                /* An explicit match means the user belongs in this room */
                if (vbuf.v_flags & V_ACCESS) {
-                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED;
+                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_DELETEALLOWED | UA_REPLYALLOWED;
                }
        }
 
@@ -132,17 +147,30 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf,
                 * - It is a read-only room
                 */
                int post_allowed = 1;
-               if (CC->user.axlevel < AxProbU) post_allowed = 0;
-               if ((CC->user.axlevel < AxNetU) && (CC->room.QRflags & QR_NETWORK)) post_allowed = 0;
-               if (roombuf->QRflags & QR_READONLY) post_allowed = 0;
+               int reply_allowed = 1;
+               if (userbuf->axlevel < AxProbU) {
+                       post_allowed = 0;
+                       reply_allowed = 0;
+               }
+               if ((userbuf->axlevel < AxNetU) && (roombuf->QRflags & QR_NETWORK)) {
+                       post_allowed = 0;
+                       reply_allowed = 0;
+               }
+               if (roombuf->QRflags & QR_READONLY) {
+                       post_allowed = 0;
+                       reply_allowed = 0;
+               }
                if (post_allowed) {
-                       retval = retval | UA_POSTALLOWED;
+                       retval = retval | UA_POSTALLOWED | UA_REPLYALLOWED;
+               }
+               if (reply_allowed) {
+                       retval = retval | UA_REPLYALLOWED;
                }
 
                /* If "collaborative deletion" is active for this room, any user who can post
                 * is also allowed to delete
                 */
-               if (CC->room.QRflags2 & QR2_COLLABDEL) {
+               if (roombuf->QRflags2 & QR2_COLLABDEL) {
                        if (retval & UA_POSTALLOWED) {
                                retval = retval | UA_DELETEALLOWED;
                        }
@@ -162,17 +190,17 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf,
        }
        /* If user is explicitly locked out of this room, deny everything */
        if (vbuf.v_flags & V_LOCKOUT) {
-               retval = retval & ~UA_KNOWN & ~UA_GOTOALLOWED & ~UA_POSTALLOWED;
+               retval = retval & ~UA_KNOWN & ~UA_GOTOALLOWED & ~UA_POSTALLOWED & ~UA_REPLYALLOWED;
        }
 
        /* Aides get access to all private rooms */
        if ( (userbuf->axlevel >= AxAideU)
           && ((roombuf->QRflags & QR_MAILBOX) == 0) ) {
                if (vbuf.v_flags & V_FORGET) {
-                       retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED;
+                       retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED | UA_REPLYALLOWED;
                }
                else {
-                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED;
+                       retval = retval | UA_KNOWN | UA_GOTOALLOWED | UA_POSTALLOWED | UA_REPLYALLOWED;
                }
        }
 
@@ -181,14 +209,14 @@ void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf,
         */
        if ( (userbuf->axlevel >= AxAideU)
           && (roombuf->QRflags & QR_MAILBOX) ) {
-               retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED;
+               retval = retval | UA_GOTOALLOWED | UA_POSTALLOWED | UA_REPLYALLOWED;
        }
 
        /* Aides and Room Aides have admin privileges */
        if ( (userbuf->axlevel >= AxAideU)
           || (userbuf->usernum == roombuf->QRroomaide)
           ) {
-               retval = retval | UA_ADMINALLOWED | UA_DELETEALLOWED | UA_POSTALLOWED;
+               retval = retval | UA_ADMINALLOWED | UA_DELETEALLOWED | UA_POSTALLOWED | UA_REPLYALLOWED;
        }
 
 NEWMSG:        /* By the way, we also check for the presence of new messages */
@@ -680,10 +708,7 @@ void cmd_lrms(char *argbuf)
 
        if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
 
-       if (CtdlGetUser(&CC->user, CC->curr_user)) {
-               cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
-               return;
-       }
+       CtdlGetUser(&CC->user, CC->curr_user);
        cprintf("%d Accessible rooms:\n", LISTING_FOLLOWS);
 
        CtdlForEachRoom(cmd_lrms_backend, &FloorBeingSearched);
@@ -718,10 +743,7 @@ void cmd_lkra(char *argbuf)
 
        if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
        
-       if (CtdlGetUser(&CC->user, CC->curr_user)) {
-               cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
-               return;
-       }
+       CtdlGetUser(&CC->user, CC->curr_user);
        cprintf("%d Known rooms:\n", LISTING_FOLLOWS);
 
        CtdlForEachRoom(cmd_lkra_backend, &FloorBeingSearched);
@@ -787,10 +809,7 @@ void cmd_lkrn(char *argbuf)
 
        if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
        
-       if (CtdlGetUser(&CC->user, CC->curr_user)) {
-               cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
-               return;
-       }
+       CtdlGetUser(&CC->user, CC->curr_user);
        cprintf("%d Rooms w/ new msgs:\n", LISTING_FOLLOWS);
 
        CtdlForEachRoom(cmd_lkrn_backend, &FloorBeingSearched);
@@ -826,10 +845,7 @@ void cmd_lkro(char *argbuf)
 
        if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
        
-       if (CtdlGetUser(&CC->user, CC->curr_user)) {
-               cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
-               return;
-       }
+       CtdlGetUser(&CC->user, CC->curr_user);
        cprintf("%d Rooms w/o new msgs:\n", LISTING_FOLLOWS);
 
        CtdlForEachRoom(cmd_lkro_backend, &FloorBeingSearched);
@@ -865,10 +881,7 @@ void cmd_lzrm(char *argbuf)
 
        if (CtdlAccessCheck(ac_logged_in_or_guest)) return;
        
-       if (CtdlGetUser(&CC->user, CC->curr_user)) {
-               cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
-               return;
-       }
+       CtdlGetUser(&CC->user, CC->curr_user);
        cprintf("%d Zapped rooms:\n", LISTING_FOLLOWS);
 
        CtdlForEachRoom(cmd_lzrm_backend, &FloorBeingSearched);
@@ -1177,9 +1190,10 @@ void cmd_whok(char *cmdbuf)
                cdb_free(cdbus);
 
                CtdlRoomAccess(&CC->room, &temp, &ra, NULL);
-               if ((CC->room.QRflags & QR_INUSE)
-                   && (ra & UA_KNOWN)
-                   )
+               if ((!IsEmptyStr(temp.fullname)) && 
+                   (CC->room.QRflags & QR_INUSE) &&
+                   (ra & UA_KNOWN)
+                       )
                        cprintf("%s\n", temp.fullname);
        }
        cprintf("000\n");
@@ -2246,22 +2260,22 @@ void cmd_eflr(char *argbuf)
 CTDL_MODULE_INIT(room_ops)
 {
        if (!threading) {
-               CtdlRegisterProtoHook(cmd_lrms, "LRMS", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_lkra, "LKRA", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_lkro, "LKRO", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "Autoconverted. TODO: document me.");
+               CtdlRegisterProtoHook(cmd_lrms, "LRMS", "List rooms");
+               CtdlRegisterProtoHook(cmd_lkra, "LKRA", "List all known rooms");
+               CtdlRegisterProtoHook(cmd_lkrn, "LKRN", "List known rooms with new messages");
+               CtdlRegisterProtoHook(cmd_lkro, "LKRO", "List known rooms without new messages");
+               CtdlRegisterProtoHook(cmd_lzrm, "LZRM", "List zapped rooms");
                CtdlRegisterProtoHook(cmd_lprm, "LPRM", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_goto, "GOTO", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_whok, "WHOK", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_rdir, "RDIR", "Autoconverted. TODO: document me.");
+               CtdlRegisterProtoHook(cmd_goto, "GOTO", "Goto a named room");
+               CtdlRegisterProtoHook(cmd_whok, "WHOK", "List users who know this room");
+               CtdlRegisterProtoHook(cmd_rdir, "RDIR", "List files in room directory");
                CtdlRegisterProtoHook(cmd_getr, "GETR", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_setr, "SETR", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_geta, "GETA", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_seta, "SETA", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_rinf, "RINF", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_kill, "KILL", "Autoconverted. TODO: document me.");
-               CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Autoconverted. TODO: document me.");
+               CtdlRegisterProtoHook(cmd_cre8, "CRE8", "Create a new room");
                CtdlRegisterProtoHook(cmd_einf, "EINF", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_lflr, "LFLR", "Autoconverted. TODO: document me.");
                CtdlRegisterProtoHook(cmd_cflr, "CFLR", "Autoconverted. TODO: document me.");