mirror of
https://github.com/3proxy/3proxy.git
synced 2026-10-16 00:25:48 +08:00
Keep the name servers and RADIUS servers in conf
nservers, numservers and authnserver (resolve.c, common.c) and radiuslist, nradservers and radiussecret (authradius.c) were globals of their own; they are configuration, set by nserver, authnserver and radius, and now live in struct extparam with the rest of it. MAXNSERVERS, MAXRADIUS and struct radserver move to structures.h, which plugins include without proxy.h. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
18c0ebda0f
commit
3b2d664563
@ -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;
|
||||
}
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
38
src/conf.c
38
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;
|
||||
|
||||
|
||||
12
src/dnspr.c
12
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);
|
||||
|
||||
@ -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,
|
||||
|
||||
10
src/proxy.h
10
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;
|
||||
|
||||
@ -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<n; i++){
|
||||
unsigned short nq, na;
|
||||
unsigned char b[4098], *buf, *s1, *s2;
|
||||
@ -51,13 +49,13 @@ uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_
|
||||
memset(sinsr, 0, sizeof(addr));
|
||||
|
||||
|
||||
if(makeauth && !SAISNULL(&authnserver.addr)){
|
||||
usetcp = authnserver.usetcp;
|
||||
*SAFAMILY(sinsl) = *SAFAMILY(&authnserver.addr);
|
||||
if(makeauth && !SAISNULL(&conf.authnserver.addr)){
|
||||
usetcp = conf.authnserver.usetcp;
|
||||
*SAFAMILY(sinsl) = *SAFAMILY(&conf.authnserver.addr);
|
||||
}
|
||||
else {
|
||||
usetcp = nservers[i].usetcp;
|
||||
*SAFAMILY(sinsl) = *SAFAMILY(&nservers[i].addr);
|
||||
usetcp = conf.nservers[i].usetcp;
|
||||
*SAFAMILY(sinsl) = *SAFAMILY(&conf.nservers[i].addr);
|
||||
}
|
||||
if((sock=so._socket(so.state, SASOCK(sinsl), usetcp?SOCK_STREAM:SOCK_DGRAM, usetcp?IPPROTO_TCP:IPPROTO_UDP)) == INVALID_SOCKET) break;
|
||||
if(so._bind(so.state, sock,(struct sockaddr *)sinsl,SASIZE(sinsl))){
|
||||
@ -65,11 +63,11 @@ uint32_t udpresolve(int af, unsigned char * name, unsigned char * value, uint32_
|
||||
so._closesocket(so.state, sock);
|
||||
break;
|
||||
}
|
||||
if(makeauth && !SAISNULL(&authnserver.addr)){
|
||||
*sinsr = authnserver.addr;
|
||||
if(makeauth && !SAISNULL(&conf.authnserver.addr)){
|
||||
*sinsr = conf.authnserver.addr;
|
||||
}
|
||||
else {
|
||||
*sinsr = nservers[i].addr;
|
||||
*sinsr = conf.nservers[i].addr;
|
||||
}
|
||||
if(usetcp){
|
||||
if(connectwithpoll(NULL, sock,(struct sockaddr *)sinsr,SASIZE(sinsr),conf.timeouts[CONNECT_TO])) {
|
||||
|
||||
@ -488,7 +488,13 @@ struct nserver {
|
||||
PROXYSOCKADDRTYPE addr;
|
||||
int usetcp;
|
||||
};
|
||||
extern int numservers;
|
||||
|
||||
#define MAXNSERVERS 5
|
||||
#define MAXRADIUS 5
|
||||
|
||||
struct radserver {
|
||||
PROXYSOCKADDRTYPE authaddr, logaddr, localaddr;
|
||||
};
|
||||
|
||||
typedef void * (* PROXYFUNC)(struct clientparam *);
|
||||
|
||||
@ -886,6 +892,11 @@ struct extparam {
|
||||
time_t logtime, time;
|
||||
unsigned logdumpsrv, logdumpcli;
|
||||
char delimchar;
|
||||
struct nserver nservers[MAXNSERVERS], authnserver;
|
||||
int numservers;
|
||||
struct radserver radiuslist[MAXRADIUS];
|
||||
int nradservers;
|
||||
char radiussecret[64];
|
||||
};
|
||||
|
||||
struct property {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user