From 94dd133a951d4736fd5258d14fc12aec602b95b7 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Sat, 6 Aug 2011 21:09:43 +0000 Subject: [PATCH] Added 'U' (Upload Files) exemption, allows uploads to any directory (regardless of configured upload requirements) and exceed the "max files" settings per dir. --- src/sbbs3/ftpsrvr.c | 30 +++++++++++++++++++++--------- text/menu/exempt.asc | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index bf7cd921da..2f312f213d 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 17790cf677..30eb907da9 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 -- GitLab