diff --git a/src/authradius.c b/src/authradius.c index c66586c..6434f0c 100644 --- a/src/authradius.c +++ b/src/authradius.c @@ -162,11 +162,7 @@ -struct radserver radiuslist[MAXRADIUS]; - static int ntry = 0; -int nradservers = 0; -char radiussecret[64]=""; _3proxy_mutex_t rad_mutex; @@ -310,7 +306,7 @@ int radsend(struct clientparam * param, int auth, int stop){ char buf[64]; - if(!nradservers) { + if(!conf.nradservers) { return 4; } @@ -510,7 +506,7 @@ int radsend(struct clientparam * param, int auth, int stop){ memcpy(ptr, param->password, len); rad_pwencode((char *)ptr, &len, - radiussecret, + conf.radiussecret, (char *)packet.vector); *(ptr-1) = len + 2; ptr+=len; @@ -521,17 +517,17 @@ int radsend(struct clientparam * param, int auth, int stop){ packet.length = htons(total_length); if(!auth){ - len = strlen(radiussecret); - memcpy(ptr,radiussecret,len); + len = strlen(conf.radiussecret); + memcpy(ptr,conf.radiussecret,len); md5_calc(packet.vector, (u_char *)&packet, total_length + len); } memcpy(vector, packet.vector, AUTH_VECTOR_LEN); - for (loop = 0; loop < nradservers && loop < MAXRADIUS; loop++) { + for (loop = 0; loop < conf.nradservers && loop < MAXRADIUS; loop++) { SOCKET remsock; - saremote = auth?radiuslist[loop].authaddr : radiuslist[loop].logaddr; + saremote = auth?conf.radiuslist[loop].authaddr : conf.radiuslist[loop].logaddr; #ifdef NOIPV6 if(*SAFAMILY(&saremote)!= AF_INET) { continue; @@ -552,9 +548,9 @@ int radsend(struct clientparam * param, int auth, int stop){ remsock = sockfd; /* } - else remsock = radiuslist[loop].logsock; + else remsock = conf.radiuslist[loop].logsock; */ - so._bind(so.state, remsock,(struct sockaddr *)&radiuslist[loop].localaddr,SASIZE(&radiuslist[loop].localaddr)); + so._bind(so.state, remsock,(struct sockaddr *)&conf.radiuslist[loop].localaddr,SASIZE(&conf.radiuslist[loop].localaddr)); len = so._sendto(so.state, remsock, (char *)&packet, total_length, 0, (struct sockaddr *)&saremote, sizeof(saremote)); if(len != ntohs(packet.length)){ @@ -586,7 +582,7 @@ int radsend(struct clientparam * param, int auth, int stop){ continue; } - if (calc_replydigest((char *)&rpacket, (char *)packet.vector, radiussecret, + if (calc_replydigest((char *)&rpacket, (char *)packet.vector, conf.radiussecret, data_len) ){ continue; } diff --git a/src/common.c b/src/common.c index 0edf0ea..83bceb2 100644 --- a/src/common.c +++ b/src/common.c @@ -296,7 +296,6 @@ struct extparam conf = { .delimchar = '@', }; -int numservers=0; char* NULLADDR="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; diff --git a/src/conf.c b/src/conf.c index 7316194..0b87c63 100644 --- a/src/conf.c +++ b/src/conf.c @@ -675,16 +675,16 @@ static int h_flushusers(int argc, unsigned char **argv){ static int h_nserver(int argc, unsigned char **argv){ char *str; - if(numservers < MAXNSERVERS) { + if(conf.numservers < MAXNSERVERS) { if((str = strchr((char *)argv[1], '/'))) *str = 0; - *SAPORT(&nservers[numservers].addr) = htons(53); - if(parsehost(46, argv[1], (struct sockaddr *)&nservers[numservers].addr)) return 1; + *SAPORT(&conf.nservers[conf.numservers].addr) = htons(53); + if(parsehost(46, argv[1], (struct sockaddr *)&conf.nservers[conf.numservers].addr)) return 1; if(str) { - nservers[numservers].usetcp = strstr(str + 1, "tcp")? 1:0; + conf.nservers[conf.numservers].usetcp = strstr(str + 1, "tcp")? 1:0; *str = '/'; } - numservers++; + conf.numservers++; } resolvfunc = myresolver; @@ -696,10 +696,10 @@ static int h_authnserver(int argc, unsigned char **argv){ if((str = strchr((char *)argv[1], '/'))) *str = 0; - if(parsehost(46, argv[1], (struct sockaddr *)&authnserver.addr)) return 1; - *SAPORT(&authnserver.addr) = htons(53); + if(parsehost(46, argv[1], (struct sockaddr *)&conf.authnserver.addr)) return 1; + *SAPORT(&conf.authnserver.addr) = htons(53); if(str) { - authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; + conf.authnserver.usetcp = strstr(str + 1, "tcp")? 1:0; *str = '/'; } return 0; @@ -1773,21 +1773,21 @@ static int h_delimchar(int argc, unsigned char **argv){ static int h_radius(int argc, unsigned char **argv){ uint16_t port; - memset(radiuslist, 0, sizeof(radiuslist)); + memset(conf.radiuslist, 0, sizeof(conf.radiuslist)); if(strlen((char *)argv[1]) > 63) argv[1][63] = 0; - strcpy(radiussecret, (char *)argv[1]); - for( nradservers=0; nradservers < MAXRADIUS && nradservers < argc -2; nradservers++){ + strcpy(conf.radiussecret, (char *)argv[1]); + for( conf.nradservers=0; conf.nradservers < MAXRADIUS && conf.nradservers < argc -2; conf.nradservers++){ char *s = 0; - if((s=strchr((char *)argv[nradservers + 2], '/'))){ + if((s=strchr((char *)argv[conf.nradservers + 2], '/'))){ *s = 0; s++; } - if( !getip46(46, argv[nradservers + 2], (struct sockaddr *)&radiuslist[nradservers].authaddr)) return 1; - if( s && !getip46(46, (unsigned char *)s, (struct sockaddr *)&radiuslist[nradservers].localaddr)) return 2; - if(!*SAPORT(&radiuslist[nradservers].authaddr))*SAPORT(&radiuslist[nradservers].authaddr) = htons(1812); - port = ntohs(*SAPORT(&radiuslist[nradservers].authaddr)); - radiuslist[nradservers].logaddr = radiuslist[nradservers].authaddr; - *SAPORT(&radiuslist[nradservers].logaddr) = htons(port+1); + if( !getip46(46, argv[conf.nradservers + 2], (struct sockaddr *)&conf.radiuslist[conf.nradservers].authaddr)) return 1; + if( s && !getip46(46, (unsigned char *)s, (struct sockaddr *)&conf.radiuslist[conf.nradservers].localaddr)) return 2; + if(!*SAPORT(&conf.radiuslist[conf.nradservers].authaddr))*SAPORT(&conf.radiuslist[conf.nradservers].authaddr) = htons(1812); + port = ntohs(*SAPORT(&conf.radiuslist[conf.nradservers].authaddr)); + conf.radiuslist[conf.nradservers].logaddr = conf.radiuslist[conf.nradservers].authaddr; + *SAPORT(&conf.radiuslist[conf.nradservers].logaddr) = htons(port+1); } return 0; } @@ -2419,7 +2419,7 @@ void freeconf(struct extparam *confp){ confp->maxchild = DEFAULT_MAXCHILD; confp->backlog = 0; resolvfunc = NULL; - numservers = 0; + conf.numservers = 0; acl = confp->acl; confp->acl = NULL; diff --git a/src/dnspr.c b/src/dnspr.c index 551a2a6..b321b49 100644 --- a/src/dnspr.c +++ b/src/dnspr.c @@ -145,17 +145,17 @@ void * dnsprchild(struct clientparam* param) { } else ip = 0; } - if(!ip && numservers){ - if((param->remsock=param->srv->so._socket(param->sostate, SASOCK(&nservers[0].addr), nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { + if(!ip && conf.numservers){ + if((param->remsock=param->srv->so._socket(param->sostate, SASOCK(&conf.nservers[0].addr), conf.nservers[0].usetcp? SOCK_STREAM:SOCK_DGRAM, conf.nservers[0].usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) { RETURN(818); } memset(¶m->sinsl, 0, sizeof(param->sinsl)); - *SAFAMILY(¶m->sinsl) = *SAFAMILY(&nservers[0].addr); + *SAFAMILY(¶m->sinsl) = *SAFAMILY(&conf.nservers[0].addr); if(bindwithrange(param, param->remsock, ¶m->sinsl, param->extport)) { RETURN(819); } - param->sinsr = nservers[0].addr; - if(nservers[0].usetcp) { + param->sinsr = conf.nservers[0].addr; + if(conf.nservers[0].usetcp) { if(connectwithpoll(param, param->remsock,(struct sockaddr *)¶m->sinsr,SASIZE(¶m->sinsr),param->srv->timeouts[CONNECT_TO])) RETURN(830); buf-=2; *(unsigned short*)buf = htons(i); @@ -180,7 +180,7 @@ void * dnsprchild(struct clientparam* param) { } param->statssrv64 += len; param->nreads++; - if(nservers[0].usetcp) { + if(conf.nservers[0].usetcp) { unsigned short us; us = ntohs(*(unsigned short *)buf); if(us > 4096) RETURN(833); diff --git a/src/plugins.c b/src/plugins.c index e414059..f134d9d 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -45,7 +45,7 @@ struct symbol symbols[] = { {symbols+18, "ipauth", (void *) ipauth}, {symbols+19, "strongauth", (void *) strongauth}, {symbols+20, "checkACL", (void *) checkACL}, - {symbols+21, "nservers", (void *) nservers}, + {symbols+21, "nservers", (void *) conf.nservers}, {symbols+22, "udpresolve", (void *) udpresolve}, {symbols+23, "bandlim_mutex", (void *) &bandlim_mutex}, {symbols+24, "tc_mutex", (void *) &tc_mutex}, @@ -87,7 +87,7 @@ static void * findbyname(const char *name){ struct pluginlink pluginlink = { {symbols, "", NULL}, &conf, - nservers, + conf.nservers, &linenum, authfuncs, commandhandlers, diff --git a/src/proxy.h b/src/proxy.h index 6be4219..50af07c 100644 --- a/src/proxy.h +++ b/src/proxy.h @@ -34,7 +34,6 @@ #define MAXUSERNAME 128 #define _PASSWORD_LEN 256 -#define MAXNSERVERS 5 #define DEFAULT_MAXCHILD 500 /* How much of a connection's buffer is read into at once: all of it, or @@ -203,7 +202,6 @@ size_t threadstacksize(int extra); #include "structures.h" -#define MAXRADIUS 5 #define DEFLOGFORMAT "G%y%m%d%H%M%S.%. %p %E %U %C:%c %R:%r %O %I %h %T" @@ -298,8 +296,6 @@ int handleredirect(struct clientparam * param, struct ace * acentry); int scanaddr(const unsigned char *s, uint32_t * ip, uint32_t * mask); int myinet_ntop(int af, void *src, char *dst, socklen_t size); -extern struct nserver nservers[MAXNSERVERS]; -extern struct nserver authnserver; uint32_t getip(unsigned char *name); uint32_t getip46(int family, unsigned char *name, struct sockaddr *sa); int afdetect(unsigned char *name); @@ -502,12 +498,6 @@ void make_un(const unsigned char *path, struct sockaddr_un * sun); #endif -extern struct radserver { - PROXYSOCKADDRTYPE authaddr, logaddr, localaddr; -} radiuslist[MAXRADIUS]; - -extern char radiussecret[64]; -extern int nradservers; extern struct socketoptions { int opt; char * optname; diff --git a/src/resolve.c b/src/resolve.c index 4b296a8..532076a 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1,7 +1,5 @@ #include "proxy.h" -struct nserver nservers[MAXNSERVERS] = {{{0},0}, {{0},0}, {{0},0}, {{0},0}, {{0},0}}; -struct nserver authnserver; static int dnsqmatch(const unsigned char *a, const unsigned char *b, int len){ int i; @@ -28,7 +26,7 @@ uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_ if((af == AF_INET6) && (retval = hashresolv(&dns6_table, name, value, retttl))) { return retval; } - n = (makeauth && !SAISNULL(&authnserver.addr))? 1 : numservers; + n = (makeauth && !SAISNULL(&conf.authnserver.addr))? 1 : conf.numservers; for(i=0; i