From 5216a8f9f99e87dc8d00cbe72a54fdeb9737e831 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 27 Dec 2001 16:28:42 +0000 Subject: [PATCH] Added new ARS keyword: SHELL, for testing user's selected command shell. --- src/sbbs3/ars.c | 8 ++++++-- src/sbbs3/ars_defs.h | 1 + src/sbbs3/chk_ar.cpp | 17 ++++++++++++++--- src/sbbs3/userdat.c | 13 ++++++++++++- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/sbbs3/ars.c b/src/sbbs3/ars.c index 8c0bca5aa8..003a1e0d78 100644 --- a/src/sbbs3/ars.c +++ b/src/sbbs3/ars.c @@ -392,8 +392,12 @@ uchar* arstr(ushort* count, char* str, scfg_t* cfg) else if(!strnicmp(str+i,"FILE_CMDS",9)) { artype=AR_FILE_CMDS; i+=8; } + else if(!strnicmp(str+i,"SHELL",5)) { + artype=AR_SHELL; + i+=4; } if(n!=i) /* one of the above */ - continue; } + continue; + } if(not) ar[j++]=AR_NOT; @@ -472,7 +476,7 @@ uchar* arstr(ushort* count, char* str, scfg_t* cfg) break; } while(isdigit(str[i+1])) i++; continue; } - if(artype==AR_SUBCODE || artype==AR_DIRCODE) { + if(artype==AR_SUBCODE || artype==AR_DIRCODE || artype==AR_SHELL) { for(n=0;n<8 && str[i] && str[i]!=SP diff --git a/src/sbbs3/ars_defs.h b/src/sbbs3/ars_defs.h index 71eeeca857..e2eb58d477 100644 --- a/src/sbbs3/ars_defs.h +++ b/src/sbbs3/ars_defs.h @@ -107,6 +107,7 @@ enum { /* Access requirement binaries */ ,AR_WIN32 ,AR_UNIX ,AR_LINUX + ,AR_SHELL }; #endif /* Don't add anything after this line */ diff --git a/src/sbbs3/chk_ar.cpp b/src/sbbs3/chk_ar.cpp index 8ee5b4006f..3558dcce4c 100644 --- a/src/sbbs3/chk_ar.cpp +++ b/src/sbbs3/chk_ar.cpp @@ -267,7 +267,7 @@ bool sbbs_t::ar_exp(uchar **ptrptr, user_t* user) break; case AR_SUBCODE: if(cursubnum>=cfg.total_subs - || strcmp(cfg.sub[cursubnum]->code,(char*)*ptrptr)) + || stricmp(cfg.sub[cursubnum]->code,(char*)*ptrptr)) result=_not; else result=!_not; @@ -302,7 +302,7 @@ bool sbbs_t::ar_exp(uchar **ptrptr, user_t* user) break; case AR_DIRCODE: if(curdirnum>=cfg.total_dirs - || strcmp(cfg.dir[curdirnum]->code,(char *)*ptrptr)) + || stricmp(cfg.dir[curdirnum]->code,(char *)*ptrptr)) result=_not; else result=!_not; @@ -491,7 +491,18 @@ bool sbbs_t::ar_exp(uchar **ptrptr, user_t* user) if(!result) { noaccess_str=text[NoAccessSex]; noaccess_val=n; } - break; } } + break; + case AR_SHELL: + if(user->shell>=cfg.total_shells + || stricmp(cfg.shell[user->shell]->code,(char*)*ptrptr)) + result=_not; + else + result=!_not; + while(*(*ptrptr)) + (*ptrptr)++; + break; + } + } return(result); } diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index 488998e719..64ac9460e7 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -1089,7 +1089,18 @@ static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user) result=not; else result=!not; - break; } } + break; + case AR_SHELL: + if(user->shell>=cfg->total_shells + || stricmp(cfg->shell[user->shell]->code,(char*)*ptrptr)) + result=not; + else + result=!not; + while(*(*ptrptr)) + (*ptrptr)++; + break; + } + } return(result); } -- GitLab