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