Skip to content
Snippets Groups Projects
Commit 638d0419 authored by rswindell's avatar rswindell
Browse files

Added support to chk_ar() for GROUP, SUB, SUBCODE, LIB, DIR, and DIRCODE

ARS keywords. These require that user->cursub and user->curdir are initialized
with the proper internal code associated with the current sub/dir of the user.
These ARS keywords were previously only supported in the chk_ar internal to the
Telnet/RLogin server (chk_ar.cpp).
parent b497ee85
No related branches found
No related tags found
No related merge requests found
......@@ -1773,6 +1773,9 @@ static void receive_thread(void* arg)
if(xfer.desc!=NULL && *xfer.desc!=0)
SAFECOPY(f.desc,xfer.desc);
/* Necessary for DIR and LIB ARS keyword support in subsequent chk_ar()'s */
SAFECOPY(xfer.user->curdir, scfg.dir[f.dir]->code);
/* FILE_ID.DIZ support */
p=strrchr(f.name,'.');
if(p!=NULL && scfg.dir[f.dir]->misc&DIR_DIZ) {
......
......@@ -1246,6 +1246,46 @@ int DLLCALL putnmsg(scfg_t* cfg, int num, char *strin)
return(0);
}
static int getdirnum(scfg_t* cfg, char* code)
{
size_t i;
for(i=0;i<cfg->total_dirs;i++)
if(stricmp(cfg->dir[i]->code,code)==0)
return(i);
return(-1);
}
static int getlibnum(scfg_t* cfg, char* code)
{
size_t i;
for(i=0;i<cfg->total_dirs;i++)
if(stricmp(cfg->dir[i]->code,code)==0)
return(cfg->dir[i]->lib);
return(-1);
}
static int getsubnum(scfg_t* cfg, char* code)
{
size_t i;
for(i=0;i<cfg->total_subs;i++)
if(stricmp(cfg->sub[i]->code,code)==0)
return(i);
return(-1);
}
static int getgrpnum(scfg_t* cfg, char* code)
{
size_t i;
for(i=0;i<cfg->total_subs;i++)
if(stricmp(cfg->sub[i]->code,code)==0)
return(cfg->sub[i]->grp);
return(-1);
}
static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user)
{
BOOL result,not,or,equal;
......@@ -1446,28 +1486,67 @@ static BOOL ar_exp(scfg_t* cfg, uchar **ptrptr, user_t* user)
(*ptrptr)++;
break;
case AR_GROUP:
result=not;
if(user==NULL)
result=not;
else {
l=getgrpnum(cfg,user->cursub);
if((equal && l!=i) || (!equal && l<i))
result=not;
else
result=!not;
}
(*ptrptr)++;
break;
case AR_SUB:
result=not;
if(user==NULL)
result=not;
else {
l=getsubnum(cfg,user->cursub);
if((equal && l!=i) || (!equal && l<i))
result=not;
else
result=!not;
}
(*ptrptr)++;
break;
case AR_SUBCODE:
if(user!=NULL && stricmp(user->cursub,(char *)*ptrptr)==0)
result=!not;
else
result=not;
result=not;
while(*(*ptrptr))
(*ptrptr)++;
break;
case AR_LIB:
result=not;
if(user==NULL)
result=not;
else {
l=getlibnum(cfg,user->curdir);
if((equal && l!=i) || (!equal && l<i))
result=not;
else
result=!not;
}
(*ptrptr)++;
break;
case AR_DIR:
result=not;
if(user==NULL)
result=not;
else {
l=getdirnum(cfg,user->curdir);
if((equal && l!=i) || (!equal && l<i))
result=not;
else
result=!not;
}
(*ptrptr)++;
break;
case AR_DIRCODE:
result=not;
if(user!=NULL && stricmp(user->curdir,(char *)*ptrptr)==0)
result=!not;
else
result=not;
while(*(*ptrptr))
(*ptrptr)++;
break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment