diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index bf7cd921dadf926718466bdc0ede6e64f4bc033a..2f312f213d523f7b4425c8cd730109d5b04b0d0d 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -124,7 +124,7 @@ BOOL direxist(char *dir) BOOL dir_op(scfg_t* cfg, user_t* user, client_t* client, uint dirnum) { - return(user->level>=SYSOP_LEVEL || user->exempt&FLAG('R') + return(user->level>=SYSOP_LEVEL || (cfg->dir[dirnum]->op_ar[0] && chk_ar(cfg,cfg->dir[dirnum]->op_ar,user,client))); } @@ -4067,7 +4067,7 @@ static void ctrl_thread(void* arg) continue; } - if(delecmd && !dir_op(&scfg,&user,&client,dir)) { + if(delecmd && !dir_op(&scfg,&user,&client,dir) && !(user.exempt&FLAG('R'))) { lprintf(LOG_WARNING,"%04d !%s has insufficient access to delete files in /%s/%s" ,sock,user.alias ,scfg.lib[scfg.dir[dir]->lib]->sname @@ -4270,13 +4270,25 @@ static void ctrl_thread(void* arg) append=(strnicmp(cmd,"APPE",4)==0); - if(!chk_ar(&scfg,scfg.dir[dir]->ul_ar,&user,&client)) { - lprintf(LOG_WARNING,"%04d !%s has insufficient access to upload to /%s/%s" - ,sock,user.alias - ,scfg.lib[scfg.dir[dir]->lib]->sname - ,scfg.dir[dir]->code_suffix); - sockprintf(sock,"553 Insufficient access."); - continue; + if(!dir_op(&scfg,&user,&client,dir) && !(user.exempt&FLAG('U'))) { + if(!chk_ar(&scfg,scfg.dir[dir]->ul_ar,&user,&client)) { + lprintf(LOG_WARNING,"%04d !%s cannot upload to /%s/%s (insufficient access)" + ,sock,user.alias + ,scfg.lib[scfg.dir[dir]->lib]->sname + ,scfg.dir[dir]->code_suffix); + sockprintf(sock,"553 Insufficient access."); + continue; + } + + if(scfg.dir[dir]->maxfiles && getfiles(&scfg,dir)>=scfg.dir[dir]->maxfiles) { + lprintf(LOG_WARNING,"%04d !%s cannot upload to /%s/%s (directory full: %u files)" + ,sock,user.alias + ,scfg.lib[scfg.dir[dir]->lib]->sname + ,scfg.dir[dir]->code_suffix + ,getfiles(&scfg,dir)); + sockprintf(sock,"553 Directory full."); + continue; + } } if(*p=='-' || strcspn(p,ILLEGAL_FILENAME_CHARS)!=strlen(p) diff --git a/text/menu/exempt.asc b/text/menu/exempt.asc index 17790cf67754e23307279c3e16515f7dcb4ff1bb..30eb907da9d19419b15b2883f65f6334a8e985df 100644 --- a/text/menu/exempt.asc +++ b/text/menu/exempt.asc @@ -4,4 +4,4 @@ C=Chat Page J=Chat Cost Q=Quiet/Anon Node X=Xtrn Program Cost D=Download Cost K= R=Remove Files Y= E=Expire by Time L=Logons S=NetMail Cost Z= F=CR/FR/RR NetMail M=Modem Rate T=Time Online -G=Multiple Nodes N=Node Locking U= +G=Multiple Nodes N=Node Locking U=Upload Files