-/* $Id$ */
+/*
+ * $Id$
+ *
+ * Server functions which perform operations on user objects.
+ *
+ */
#include "sysdep.h"
#include <errno.h>
#include "config.h"
#include "dynloader.h"
#include "tools.h"
+#include "citserver.h"
/*
( (cdbus->len > sizeof(struct usersupp)) ?
sizeof(struct usersupp) : cdbus->len) );
cdb_free(cdbus);
+
+ if (usbuf->version < 573) {
+ CC->usersupp.moderation_filter = config.c_default_filter;
+ }
+
return(0);
}
}
lowercase_name[sizeof(lowercase_name)-1] = 0;
- usbuf->version = config.c_setup_level;
+ usbuf->version = REV_LEVEL;
cdb_store(CDB_USERSUPP,
lowercase_name, strlen(lowercase_name),
usbuf, sizeof(struct usersupp));
* 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);
/* Run any cleanup routines registered by loadable modules */
PerformSessionHooks(EVT_LOGIN);
- usergoto(BASEROOM,0); /* Enter the lobby */
+ usergoto(BASEROOM, 0, NULL, NULL); /* Enter the lobby */
rec_log(CL_LOGIN,CC->curr_user);
}
}
close(pipev[0]);
- write(pipev[1], buf, sprintf(buf, "%u\n", uid));
+ write(pipev[1], buf, sprintf(buf, "%lu\n", (unsigned long)uid));
write(pipev[1], pass, strlen(pass));
write(pipev[1], "\n", 1);
close(pipev[1]);
(CC->logged_in) = 1;
/* These are the default flags on new accounts */
- CC->usersupp.flags =
- US_NEEDVALID|US_LASTOLD|US_DISAPPEAR|US_PAGINATOR|US_FLOORS;
+ CC->usersupp.flags = US_LASTOLD|US_DISAPPEAR|US_PAGINATOR|US_FLOORS;
CC->usersupp.timescalled = 0;
CC->usersupp.posted = 0;
CC->usersupp.USscreenwidth = 80;
CC->usersupp.USscreenheight = 24;
time(&CC->usersupp.lastcall);
+ CC->usersupp.moderation_filter = config.c_default_filter;
/* fetch a new user number */
CC->usersupp.usernum = get_new_user_number();
*/
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;
* 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\n",
+ cprintf("%d %d|%d|%d|%d\n",
OK,
CC->usersupp.USscreenwidth,
CC->usersupp.USscreenheight,
- (CC->usersupp.flags & US_USER_SET)
+ (CC->usersupp.flags & US_USER_SET),
+ CC->usersupp.moderation_filter
);
}
*/
void cmd_setu(char *new_parms)
{
+ int new_mod;
- if (num_parms(new_parms)!=3) {
+ 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);
CC->usersupp.flags = CC->usersupp.flags & (~US_USER_SET);
CC->usersupp.flags = CC->usersupp.flags |
(extract_int(new_parms,2) & US_USER_SET);
+
+ if (num_parms(new_parms) >= 4) {
+ new_mod = extract_int(new_parms, 3);
+ lprintf(9, "new_mod extracted to %d\n", new_mod);
+
+ /* Aides cannot set the filter level lower than -100 */
+ if (new_mod < (-100) ) new_mod = -100;
+
+ /* Normal users cannot set the filter level lower than -63 */
+ if ( (new_mod < (-63)) && (CC->usersupp.axlevel < 6) )
+ new_mod = -63;
+
+ /* Nobody can set the filter level higher than +63 */
+ if (new_mod > 63) new_mod = 63;
+
+ CC->usersupp.moderation_filter = new_mod;
+ lprintf(9, "new_mod processed to %d\n", new_mod);
+ }
+
lputuser(&CC->usersupp);
cprintf("%d Ok\n",OK);
}
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;
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);
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);
CtdlSetRelationship(&vbuf, &CC->usersupp, &CC->quickroom);
lputuser(&CC->usersupp);
cprintf("%d Ok\n",OK);
- usergoto(BASEROOM, 0);
+ usergoto(BASEROOM, 0, NULL, NULL);
}
/*
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);
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);
/*
* Traverse the user file...
*/
-void ForEachUser(void (*CallBack)(struct usersupp *EachUser)) {
+void ForEachUser(void (*CallBack)(struct usersupp *EachUser, void *out_data),
+ void *in_data) {
struct usersupp usbuf;
struct cdbdata *cdbus;
( (cdbus->len > sizeof(struct usersupp)) ?
sizeof(struct usersupp) : cdbus->len) );
cdb_free(cdbus);
- (*CallBack)(&usbuf);
+ (*CallBack)(&usbuf, in_data);
}
}
/*
* List one user (this works with cmd_list)
*/
-void ListThisUser(struct usersupp *usbuf) {
+void ListThisUser(struct usersupp *usbuf, void *data) {
if (usbuf->axlevel > 0) {
if ((CC->usersupp.axlevel>=6)
||((usbuf->flags&US_UNLISTED)==0)
*/
void cmd_list(void) {
cprintf("%d \n",LISTING_FOLLOWS);
- ForEachUser(ListThisUser);
+ ForEachUser(ListThisUser, NULL);
cprintf("000\n");
}
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;
}
-/*
- * enter user bio
- */
-void cmd_ebio(void) {
- char buf[256];
- FILE *fp;
-
- if (!(CC->logged_in)) {
- cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
- return;
- }
-
- sprintf(buf,"./bio/%ld",CC->usersupp.usernum);
- fp = fopen(buf,"w");
- if (fp == NULL) {
- cprintf("%d Cannot create file\n",ERROR);
- return;
- }
- cprintf("%d \n",SEND_LISTING);
- while(client_gets(buf), strcmp(buf,"000")) {
- fprintf(fp,"%s\n",buf);
- }
- fclose(fp);
- }
-
-/*
- * read user bio
- */
-void cmd_rbio(char *cmdbuf)
-{
- struct usersupp ruser;
- char buf[256];
- FILE *fp;
-
- extract(buf,cmdbuf,0);
- if (getuser(&ruser,buf)!=0) {
- cprintf("%d No such user.\n",ERROR+NO_SUCH_USER);
- return;
- }
- sprintf(buf,"./bio/%ld",ruser.usernum);
-
- fp = fopen(buf,"r");
- if (fp == NULL) {
- cprintf("%d %s has no bio on file.\n",
- ERROR+FILE_NOT_FOUND,ruser.fullname);
- return;
- }
- cprintf("%d \n",LISTING_FOLLOWS);
- while (fgets(buf,256,fp)!=NULL) cprintf("%s",buf);
- fclose(fp);
- cprintf("000\n");
- }
-
-/*
- * list of users who have entered bios
- */
-void cmd_lbio(void) {
- char buf[256];
- FILE *ls;
- struct usersupp usbuf;
-
- ls=popen("cd ./bio; ls","r");
- if (ls==NULL) {
- cprintf("%d Cannot open listing.\n",ERROR+FILE_NOT_FOUND);
- return;
- }
-
- cprintf("%d\n",LISTING_FOLLOWS);
- while (fgets(buf,255,ls)!=NULL)
- if (getuserbynumber(&usbuf,atol(buf))==0)
- cprintf("%s\n",usbuf.fullname);
- pclose(ls);
- cprintf("000\n");
- }
-
-
/*
* Administrative Get User Parameters
*/
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) {
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) {