void
SiteArrayAdd(sitearr, name, Level, sessions)
SiteArray *sitearr;
char *name;
Accesslevel Level;
int sessions;
{
Site *temp;
temp = SiteNew();
SiteSet(temp, name, Level, sessions);
SiteArrPush(sitearr, temp);
SiteDestroy(temp);
return;
}
/*
* Find the default access level
*/
Accesslevel
SiteDefAccess(sitearr)
SiteArray *sitearr;
{
int i;
Site *temp;
for (i=0; i< DAgetTop(sitearr); i++) {
temp = SiteArrgetEntry(sitearr, i);
if (strcmp(SITEgetDomain(temp), "default") == 0)
return(SITEgetLevel(temp));
}
return(ACC_UNKNOWN);
}
/*
* Tries to find a match in sitearr for "hostname" or ipnum, then tests the
* accesslevel against "mask".
*
* If it finds it, it returns the result of the search
*
* If it doesn't it tests agains the "default" item
*
*/
AccessResult
SiteAccess(sitearr, hostname, ipnum, mask, sessions)
SiteArray *sitearr;
char *hostname;
char *ipnum;
Accesslevel mask;
int sessions;
{
int i;
Site *temp;
Accesslevel defaccess = ACC_FULL, level;
int defmaxsess = -1;
int maxsess;
if (hostname == NULL && ipnum == NULL)
/*** ??? We need to compare *something* ***/
return(SITE_UNDEF);
for (i=0; i< DAgetTop(sitearr); i++) {
temp = SiteArrgetEntry(sitearr, i);
Debug("Testing for %s\n", STRget(temp->domain));
if (strcmp(SITEgetDomain(temp), "default") == 0) {
defaccess = SITEgetLevel(temp);
defmaxsess = SITEmaxsessions(temp);
} else if (SITEisnum(temp) == TRUE) {
/*** Check for a match with the domain name
from the beginning ***/
int iplen, domainlen;
/*** don't compare if incoming name is shorter than domain ***/
if (domainlen <= namelen)
if (strcasecmp((hostname+namelen-domainlen),
SITEgetDomain(temp))==0)
break;
}
}
if (i == DAgetTop(sitearr)) {
/*** Hmmm, didn't find a match, return "default" val ***/
level = defaccess;
maxsess = defmaxsess;
} else {
/** Otherwise we found a match.. **/
level = SITEgetLevel(temp);
maxsess = SITEmaxsessions(temp);
}
if (sessions > 0) {
if (maxsess < sessions && maxsess > 0)
return(SITE_TOOBUSY);
}
if ((level & mask) == mask)
return(SITE_OK);
else
return(SITE_NOACCESS);
if (namep == name)
return(FALSE); /*** bad line ***/
while (*inputline != '\0') {
if (*inputline == ' ' || *inputline == '\t' || *inputline == ',') {
inputline++;
if (*inputline == '!')
inputline++;
switch (*inputline) {
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
/** Maxsessions **/
while (*inputline <= '9' && '0' <= *inputline) {
maxsess = maxsess * 10 + (*inputline - '0');
inputline++;
}