* Replaced most of the very repetitive and very redundant access level checks
authorArt Cancro <ajc@citadel.org>
Sat, 3 Jun 2000 05:47:58 +0000 (05:47 +0000)
committerArt Cancro <ajc@citadel.org>
Sat, 3 Jun 2000 05:47:58 +0000 (05:47 +0000)
  in most commands with a single API call:  CtdlAccessLevelCheck()
* serv_moderate.c: added (not finished)

citadel/ChangeLog
citadel/Makefile.in
citadel/citserver.c
citadel/citserver.h
citadel/file_ops.c
citadel/room_ops.c
citadel/serv_expire.c
citadel/serv_moderate.c [new file with mode: 0644]
citadel/serv_rwho.c
citadel/user_ops.c

index 0698c9edbd691ada3f7dea86e3a9c3a1272272cf..fd655c3597b58f91595cdc5647a0a1def3aa1b6f 100644 (file)
@@ -1,4 +1,9 @@
  $Log$
+ Revision 572.3  2000/06/03 05:47:57  ajc
+ * Replaced most of the very repetitive and very redundant access level checks
+   in most commands with a single API call:  CtdlAccessLevelCheck()
+ * serv_moderate.c: added (not finished)
+
  Revision 572.2  2000/06/02 03:38:50  ajc
  * Bind unix socket prior to TCP socket for citadel protocol
  * Fixed bug in sendcommand.c which was causing it to crash on attach
@@ -1894,3 +1899,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
        * Initial CVS import 
+
index 22f59ade51e468ffe74bee48dda6ca4fd5dff15d..058f05b19b9e4507edb69f29ba49d6509e901a5b 100644 (file)
@@ -31,6 +31,7 @@ SERV_MODULES=modules/serv_chat$(SO) modules/serv_vcard$(SO) \
        modules/serv_smtp$(SO) modules/serv_pop3$(SO) \
        modules/serv_inetcfg$(SO) \
        modules/serv_rwho$(SO) \
+       modules/serv_moderate$(SO) \
        modules/serv_bio$(SO) \
        modules/serv_expire$(SO) $(SERV_ICQ)
 UTIL_TARGETS=aidepost netmailer netproc netsetup msgform readlog rcit \
@@ -83,7 +84,7 @@ SOURCES=aidepost.c citadel.c citmail.c citserver.c client_chat.c commands.c \
        auth.c chkpwd.c client_icq.c html.c vcard.c serv_upgrade.c \
        serv_smtp.c serv_pop3.c internet_addressing.c parsedate.c genstamp.c \
        domain.c clientsocket.c serv_inetcfg.c serv_rwho.c serv_bio.c \
-       client_passwords.c
+       serv_moderate.c client_passwords.c
 
 DEP_FILES=$(SOURCES:.c=.d)
 
@@ -171,6 +172,12 @@ modules/serv_rwho.so: serv_rwho.mo
 modules/serv_rwho.mo: serv_rwho.mo
        ln -f serv_rwho.mo modules
 
+modules/serv_moderate.so: serv_moderate.mo
+       $(LINK_SHARED) -o modules/serv_moderate.so serv_moderate.mo
+
+modules/serv_moderate.mo: serv_moderate.mo
+       ln -f serv_moderate.mo modules
+
 modules/serv_bio.so: serv_bio.mo
        $(LINK_SHARED) -o modules/serv_bio.so serv_bio.mo
 
index 2ed7016c1c04fd1354afa51c1edc5b702f65dc0e..c5417bedecb85dc29517358b776deec5860f2a36 100644 (file)
@@ -511,11 +511,7 @@ void cmd_emsg(char *mname)
        char *dirs[2];
        int a;
 
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to edit system messages.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        extract(buf,mname,0);
        for (a=0; a<strlen(buf); ++a) {         /* security measure */
@@ -577,6 +573,42 @@ void GenerateRoomDisplay(char *real_room,
 
 }
 
+/*
+ * Convenience function.
+ */
+int CtdlAccessCheck(int required_level) {
+
+       if (CC->internal_pgm) return(0);
+       if (required_level >= ac_internal) {
+               cprintf("%d This is not a user-level command.\n",
+                       ERROR+HIGHER_ACCESS_REQUIRED);
+               return(-1);
+       }
+
+       if (CC->usersupp.axlevel >= 6) return(0);
+       if (required_level >= ac_aide) {
+               cprintf("%d This command requires Aide access.\n",
+                       ERROR+HIGHER_ACCESS_REQUIRED);
+               return(-1);
+       }
+
+       if (is_room_aide()) return(0);
+       if (required_level >= ac_room_aide) {
+               cprintf("%d This command requires Aide or Room Aide access.\n",
+                       ERROR + HIGHER_ACCESS_REQUIRED);
+               return(-1);
+       }
+
+       if (CC->logged_in) return(0);
+       if (required_level >= ac_logged_in) {
+               cprintf("%d Not logged in.\n", ERROR+NOT_LOGGED_IN);
+               return(-1);
+       }
+
+       /* shhh ... succeed quietly */
+       return(0);
+}
+
 
 
 /*
@@ -588,16 +620,7 @@ void cmd_term(char *cmdbuf)
        struct CitContext *ccptr;
        int found_it = 0;
 
-       if (!CC->logged_in) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to terminate sessions.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        session_num = extract_int(cmdbuf, 0);
        if (session_num == CC->cs_pid) {
@@ -669,16 +692,8 @@ void cmd_ipgm(char *argbuf)
  * Shut down the server
  */
 void cmd_down(void) {
-       if (!CC->logged_in) {
-               cprintf("%d Not logged in.\n", ERROR+NOT_LOGGED_IN);
-               return;
-               }
 
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to shut down the server.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        cprintf("%d Shutting down server.  Goodbye.\n", OK);
        master_cleanup();
@@ -691,16 +706,7 @@ void cmd_scdn(char *argbuf)
 {
        int new_state;
 
-       if (!CC->logged_in) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to schedule a shutdown.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        new_state = extract_int(argbuf, 0);
        if ((new_state == 0) || (new_state == 1)) {
index 8c58229511a54a25073827d5cb84043efae2cc29..1e6543f4269830ebb2a77045316b5693bc91e098 100644 (file)
@@ -31,3 +31,19 @@ void GenerateRoomDisplay(char *real_room,
                         struct CitContext *viewer);
 extern int do_defrag;
 char CtdlCheckExpress(void);
+
+int CtdlAccessCheck(int);
+
+/* 'required access level' values which may be passed to CtdlAccessCheck()
+ */
+enum {
+       ac_none,
+       ac_logged_in,
+       ac_room_aide,
+       ac_aide,
+       ac_internal
+};
+
+
+
+
index 9c121825bc5ab1959f1a66f1f6f4beaf9d4cb826..5bbe1a77a5dc122de4001fa5288aeec432c7bdbb 100644 (file)
 #include "room_ops.h"
 #include "msgbase.h"
 #include "tools.h"
+#include "citserver.h"
 
 void cmd_delf(char *filename)
 {
        char pathname[64];
        int a;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
-
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -76,16 +67,7 @@ void cmd_movf(char *cmdbuf)
        extract(filename,cmdbuf,0);
        extract(newroom,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -150,16 +132,7 @@ void cmd_netf(char *cmdbuf)
        extract(filename,cmdbuf,0);
        extract(destsys,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -254,10 +227,7 @@ void cmd_open(char *cmdbuf)
 
        extract(filename,cmdbuf,0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -361,10 +331,7 @@ void cmd_uopn(char *cmdbuf)
        extract(CC->upl_file,cmdbuf,0);
        extract(CC->upl_comment,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
index ffc406940e9f3151e1fa5447dcedd203111eeee9..9219639c6f37f7bac2107b3091b9efa613473275 100644 (file)
@@ -443,10 +443,8 @@ void cmd_lrms(char *argbuf)
        if (strlen(argbuf) > 0)
                FloorBeingSearched = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+
        if (getuser(&CC->usersupp, CC->curr_user)) {
                cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
                return;
@@ -480,10 +478,8 @@ void cmd_lkra(char *argbuf)
        if (strlen(argbuf) > 0)
                FloorBeingSearched = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+       
        if (getuser(&CC->usersupp, CC->curr_user)) {
                cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
                return;
@@ -519,10 +515,8 @@ void cmd_lkrn(char *argbuf)
        if (strlen(argbuf) > 0)
                FloorBeingSearched = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+       
        if (getuser(&CC->usersupp, CC->curr_user)) {
                cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
                return;
@@ -558,10 +552,8 @@ void cmd_lkro(char *argbuf)
        if (strlen(argbuf) > 0)
                FloorBeingSearched = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+       
        if (getuser(&CC->usersupp, CC->curr_user)) {
                cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
                return;
@@ -597,10 +589,8 @@ void cmd_lzrm(char *argbuf)
        if (strlen(argbuf) > 0)
                FloorBeingSearched = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+       
        if (getuser(&CC->usersupp, CC->curr_user)) {
                cprintf("%d Can't locate user!\n", ERROR + INTERNAL_ERROR);
                return;
@@ -712,10 +702,7 @@ void cmd_goto(char *gargs)
        char towhere[256];
        char password[256];
 
-       if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
-               cprintf("%d not logged in\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        extract(towhere, gargs, 0);
        extract(password, gargs, 1);
@@ -788,17 +775,9 @@ void cmd_whok(void)
        struct usersupp temp;
        struct cdbdata *cdbus;
 
-       if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
        getuser(&CC->usersupp, CC->curr_user);
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
-       if ((!is_room_aide()) && (!(CC->internal_pgm))) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
        cprintf("%d Who knows room:\n", LISTING_FOLLOWS);
        cdb_rewind(CDB_USERSUPP);
        while (cdbus = cdb_next_item(CDB_USERSUPP), cdbus != NULL) {
@@ -826,10 +805,8 @@ void cmd_rdir(void)
        FILE *ls, *fd;
        struct stat statbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+       
        getroom(&CC->quickroom, CC->quickroom.QRname);
        getuser(&CC->usersupp, CC->curr_user);
 
@@ -888,15 +865,7 @@ void cmd_rdir(void)
  */
 void cmd_getr(void)
 {
-       if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if ((!is_room_aide()) && (!(CC->internal_pgm))) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        /********
        if (is_noneditable(&CC->quickroom)) {
@@ -929,16 +898,7 @@ void cmd_setr(char *args)
        int new_order = 0;
        int ne = 0;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
-
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if (is_noneditable(&CC->quickroom)) {
                ne = 1;
@@ -1044,10 +1004,8 @@ void cmd_geta(void)
 {
        struct usersupp usbuf;
 
-       if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+
        if (is_noneditable(&CC->quickroom)) {
                cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE);
                return;
@@ -1070,15 +1028,8 @@ void cmd_seta(char *new_ra)
        char buf[256];
        int post_notice;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_room_aide)) return;
+
        if (getuser(&usbuf, new_ra) != 0) {
                newu = (-1L);
        } else {
@@ -1188,15 +1139,8 @@ void cmd_kill(char *argbuf)
 
        kill_ok = extract_int(argbuf, 0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_room_aide)) return;
+
        if (is_noneditable(&CC->quickroom)) {
                cprintf("%d Can't edit this room.\n", ERROR + NOT_HERE);
                return;
@@ -1329,10 +1273,7 @@ void cmd_cre8(char *args)
                }
        }
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if (CC->usersupp.axlevel < config.c_createax) {
                cprintf("%d You need higher access to create rooms.\n",
@@ -1402,15 +1343,8 @@ void cmd_einf(char *ok)
        char infofilename[256];
        char buf[256];
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_room_aide)) return;
+
        if (atoi(ok) == 0) {
                cprintf("%d Ok.\n", OK);
                return;
@@ -1448,15 +1382,7 @@ void cmd_lflr(void)
        int a;
        struct floor flbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       /* if (getuser(&CC->usersupp,CC->curr_user)) {
-          cprintf("%d Can't locate user!\n",ERROR+INTERNAL_ERROR);
-          return;
-          }
-        */
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        cprintf("%d Known floors:\n", LISTING_FOLLOWS);
 
@@ -1489,15 +1415,8 @@ void cmd_cflr(char *argbuf)
        cflr_ok = extract_int(argbuf, 1);
 
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You need higher access to create rooms.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_aide)) return;
+
        for (a = 0; a < MAXFLOORS; ++a) {
                getfloor(&flbuf, a);
 
@@ -1548,16 +1467,8 @@ void cmd_kflr(char *argbuf)
        floor_to_delete = extract_int(argbuf, 0);
        kflr_ok = extract_int(argbuf, 1);
 
+       if (CtdlAccessCheck(ac_aide)) return;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You need higher access to delete floors.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
        lgetfloor(&flbuf, floor_to_delete);
 
        delete_ok = 1;
@@ -1601,15 +1512,9 @@ void cmd_eflr(char *argbuf)
                cprintf("%d Usage error.\n", ERROR);
                return;
        }
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN);
-               return;
-       }
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You need higher access to edit floors.\n",
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+
+       if (CtdlAccessCheck(ac_aide)) return;
+
        floor_num = extract_int(argbuf, 0);
        lgetfloor(&flbuf, floor_num);
        if ((flbuf.f_flags & F_INUSE) == 0) {
index 8b78baedbdcba0caae21b370531bfca781e08bc3..f8f2366e182d96b36a96d42ec14c0159ffc780a6 100644 (file)
@@ -499,17 +499,7 @@ void cmd_expi(char *argbuf) {
        char cmd[256];
        int retval;
 
-
-       if ((!(CC->logged_in))&&(!(CC->internal_pgm))) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-       }
-
-       if ((!is_room_aide()) && (!(CC->internal_pgm)) ) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        extract(cmd, argbuf, 0);
        if (!strcasecmp(cmd, "users")) {
@@ -569,11 +559,7 @@ void cmd_fsck(char *argbuf) {
        struct roomref *ptr;
        int realcount;
 
-       if ( (!CC->logged_in) || (CC->usersupp.axlevel < 6) ) {
-               cprintf("%d Higher access required\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        /* Lame way of checking whether anyone else is doing this now */
        if (rr != NULL) {
diff --git a/citadel/serv_moderate.c b/citadel/serv_moderate.c
new file mode 100644 (file)
index 0000000..c9e08c7
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * $Id$
+ *
+ *
+ */
+
+#include "sysdep.h"
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <pwd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <limits.h>
+#include "citadel.h"
+#include "server.h"
+#include <time.h>
+#include "sysdep_decls.h"
+#include "citserver.h"
+#include "support.h"
+#include "config.h"
+#include "control.h"
+#include "dynloader.h"
+#include "room_ops.h"
+#include "user_ops.h"
+#include "policy.h"
+#include "database.h"
+#include "msgbase.h"
+#include "tools.h"
+
+
+
+/*
+ * moderate a message
+ */
+void cmd_mmod(char *argbuf) {
+       long msgnum;
+       int newlevel;
+
+       /* user must be at least a Room Aide to moderate */
+       if (CtdlAccessCheck(ac_room_aide)) return;
+
+       msgnum = extract_long(argbuf, 0);
+       newlevel = extract_int(argbuf, 1);
+
+       if ( (newlevel < (-63)) || (newlevel > (+63)) ) {
+               cprintf("%d %d is not a valid moderation level.\n",
+                       newlevel, ERROR+ILLEGAL_VALUE);
+       }
+
+       cprintf("%d FIXME ... actually do this!!!!!!!!\n", OK);
+}
+
+
+char *Dynamic_Module_Init(void)
+{
+        CtdlRegisterProtoHook(cmd_mmod, "MMOD", "Moderate a message");
+        return "$Id$";
+}
index 7519c3175ebe66e625e8d2ad9200f13499f33bb7..3c7979e0799001fbb45f70e4760177b125280852 100644 (file)
@@ -170,11 +170,7 @@ void cmd_uchg(char *argbuf)
 
        extract(newusername, argbuf, 0);
 
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to masquerade your name.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-       }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        if (strlen(newusername) > 0) {
                CC->cs_flags &= ~CS_STEALTH;
@@ -204,16 +200,7 @@ void cmd_stel(char *cmdbuf)
        requested_mode = extract_int(cmdbuf,0);
        if (requested_mode !=0) requested_mode = 1;
 
-       if (!CC->logged_in) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d You must be an Aide to use stealth mode.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        if (CC->cs_flags & CS_STEALTH) {
                if (requested_mode == 0)
index d8c09642d6b9915690802f7d32af7feb8d6eb4d2..5b2e4776725142dc9ba1f5ba3bf448caa54ee17b 100644 (file)
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "dynloader.h"
 #include "tools.h"
+#include "citserver.h"
 
 
 /*
@@ -213,6 +214,9 @@ int is_aide(void) {
  * Is the user currently logged in an Aide *or* the room aide for this room?
  */
 int is_room_aide(void) {
+
+       if (!CC->logged_in) return(0);
+
        if ( (CC->usersupp.axlevel >= 6)
           || (CC->quickroom.QRroomaide == CC->usersupp.usernum) ) {
                return(1);
@@ -714,10 +718,8 @@ void cmd_newu(char *cmdbuf)
  */
 void cmd_setp(char *new_pw)
 {
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
+
        if (CC->usersupp.uid != BBSUID) {
                cprintf("%d Not allowed.  Use the 'passwd' command.\n",ERROR);
                return;
@@ -739,10 +741,9 @@ void cmd_setp(char *new_pw)
  * get user parameters
  */
 void cmd_getu(void) {
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+
+       if (CtdlAccessCheck(ac_logged_in)) return;
+
        getuser(&CC->usersupp,CC->curr_user);
        cprintf("%d %d|%d|%d|%d\n",
                OK,
@@ -760,14 +761,13 @@ void cmd_setu(char *new_parms)
 {
        int new_mod;
 
+       if (CtdlAccessCheck(ac_logged_in)) return;
+
        if (num_parms(new_parms) < 3) {
                cprintf("%d Usage error.\n",ERROR);
                return;
                }       
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+
        lgetuser(&CC->usersupp,CC->curr_user);
        CC->usersupp.USscreenwidth = extract_int(new_parms,0);
        CC->usersupp.USscreenheight = extract_int(new_parms,1);
@@ -805,10 +805,7 @@ void cmd_slrp(char *new_ptr)
        long newlr;
        struct visit vbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if (!strncasecmp(new_ptr,"highest",7)) {
                newlr = CC->quickroom.QRhighest;
@@ -838,16 +835,7 @@ void cmd_invt_kick(char *iuser, int op)
        char bbb[256];
        struct visit vbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (is_room_aide()==0) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if (lgetuser(&USscratch,iuser)!=0) {
                cprintf("%d No such user.\n",ERROR);
@@ -892,10 +880,7 @@ void cmd_invt_kick(char *iuser, int op)
 void cmd_forg(void) {
        struct visit vbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if (is_aide()) {
                cprintf("%d Aides cannot forget rooms.\n",ERROR);
@@ -921,16 +906,7 @@ void cmd_gnur(void) {
        struct cdbdata *cdbus;
        struct usersupp usbuf;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        if ((CitControl.MMflags&MM_VALID)==0) {
                cprintf("%d There are no unvalidated users.\n",OK);
@@ -981,16 +957,7 @@ void cmd_vali(char *v_args)
        extract(user,v_args,0);
        newax = extract_int(v_args,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (CC->usersupp.axlevel < 6) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        if (lgetuser(&userbuf,user)!=0) {
                cprintf("%d '%s' not found.\n",ERROR+NO_SUCH_USER,user);
@@ -1078,10 +1045,7 @@ void cmd_chek(void) {
        int regis = 0;
        int vali = 0;
        
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        getuser(&CC->usersupp,CC->curr_user); /* no lock is needed here */
        if ((REGISCALL!=0)&&((CC->usersupp.flags&US_REGIS)==0)) regis = 1;
@@ -1122,12 +1086,7 @@ void cmd_agup(char *cmdbuf) {
        struct usersupp usbuf;
        char requested_user[256];
 
-       if ( (CC->internal_pgm==0)
-          && ( (CC->logged_in == 0) || (is_aide()==0) ) ) {
-               cprintf("%d Higher access required.\n", 
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        extract(requested_user, cmdbuf, 0);
        if (getuser(&usbuf, requested_user) != 0) {
@@ -1160,12 +1119,7 @@ void cmd_asup(char *cmdbuf) {
        int newax;
        int deleted = 0;
        
-       if ( (CC->internal_pgm==0)
-          && ( (CC->logged_in == 0) || (is_aide()==0) ) ) {
-               cprintf("%d Higher access required.\n", 
-                       ERROR + HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_aide)) return;
 
        extract(requested_user, cmdbuf, 0);
        if (lgetuser(&usbuf, requested_user) != 0) {