mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-23 10:35:40 +08:00
Allow to specify binding address for RADIUS
This commit is contained in:
parent
edaee895e6
commit
a8b000b7f1
@ -554,6 +554,7 @@ int radsend(struct clientparam * param, int auth, int stop){
|
|||||||
}
|
}
|
||||||
else remsock = radiuslist[loop].logsock;
|
else remsock = radiuslist[loop].logsock;
|
||||||
*/
|
*/
|
||||||
|
so._bind(param->remsock,(struct sockaddr *)&radiuslist[loop].localaddr,SASIZE(&radiuslist[loop].localaddr));
|
||||||
len = so._sendto(remsock, (char *)&packet, total_length, 0,
|
len = so._sendto(remsock, (char *)&packet, total_length, 0,
|
||||||
(struct sockaddr *)&saremote, sizeof(saremote));
|
(struct sockaddr *)&saremote, sizeof(saremote));
|
||||||
if(len != ntohs(packet.length)){
|
if(len != ntohs(packet.length)){
|
||||||
|
@ -1329,13 +1329,19 @@ static int h_radius(int argc, unsigned char **argv){
|
|||||||
if(strlen(argv[1]) > 63) argv[1][63] = 0;
|
if(strlen(argv[1]) > 63) argv[1][63] = 0;
|
||||||
strcpy(radiussecret, argv[1]);
|
strcpy(radiussecret, argv[1]);
|
||||||
for( nradservers=0; nradservers < MAXRADIUS && nradservers < argc -2; nradservers++){
|
for( nradservers=0; nradservers < MAXRADIUS && nradservers < argc -2; nradservers++){
|
||||||
|
char *s = 0;
|
||||||
|
if(strchr(argv[nradservers + 2], '/')){
|
||||||
|
*s = 0;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
if( !getip46(46, argv[nradservers + 2], (struct sockaddr *)&radiuslist[nradservers].authaddr)) return 1;
|
if( !getip46(46, argv[nradservers + 2], (struct sockaddr *)&radiuslist[nradservers].authaddr)) return 1;
|
||||||
|
if( s && !getip46(46, s, (struct sockaddr *)&radiuslist[nradservers].localaddr)) return 2;
|
||||||
if(!*SAPORT(&radiuslist[nradservers].authaddr))*SAPORT(&radiuslist[nradservers].authaddr) = htons(1812);
|
if(!*SAPORT(&radiuslist[nradservers].authaddr))*SAPORT(&radiuslist[nradservers].authaddr) = htons(1812);
|
||||||
port = ntohs(*SAPORT(&radiuslist[nradservers].authaddr));
|
port = ntohs(*SAPORT(&radiuslist[nradservers].authaddr));
|
||||||
radiuslist[nradservers].logaddr = radiuslist[nradservers].authaddr;
|
radiuslist[nradservers].logaddr = radiuslist[nradservers].authaddr;
|
||||||
*SAPORT(&radiuslist[nradservers].logaddr) = htons(port+1);
|
*SAPORT(&radiuslist[nradservers].logaddr) = htons(port+1);
|
||||||
/*
|
/*
|
||||||
bindaddr = conf.intsa;
|
bindaddr = radiuslist[nradservers].localaddr;
|
||||||
if ((radiuslist[nradservers].logsock = so._socket(SASOCK(&radiuslist[nradservers].logaddr), SOCK_DGRAM, 0)) < 0) return 2;
|
if ((radiuslist[nradservers].logsock = so._socket(SASOCK(&radiuslist[nradservers].logaddr), SOCK_DGRAM, 0)) < 0) return 2;
|
||||||
if (so._bind(radiuslist[nradservers].logsock, (struct sockaddr *)&bindaddr, SASIZE(&bindaddr))) return 3;
|
if (so._bind(radiuslist[nradservers].logsock, (struct sockaddr *)&bindaddr, SASIZE(&bindaddr))) return 3;
|
||||||
*/
|
*/
|
||||||
|
@ -320,9 +320,9 @@ extern struct commands commandhandlers[];
|
|||||||
|
|
||||||
extern struct radserver {
|
extern struct radserver {
|
||||||
#ifdef NOIPV6
|
#ifdef NOIPV6
|
||||||
struct sockaddr_in authaddr, logaddr;
|
struct sockaddr_in authaddr, logaddr, localaddr;
|
||||||
#else
|
#else
|
||||||
struct sockaddr_in6 authaddr, logaddr;
|
struct sockaddr_in6 authaddr, logaddr, localaddr;
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
SOCKET logsock;
|
SOCKET logsock;
|
||||||
|
@ -61,7 +61,7 @@ void * threadfunc (void *p) {
|
|||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
sigset_t mask;
|
sigset_t mask;
|
||||||
sigfillset(&mask);
|
sigfillset(&mask);
|
||||||
pthread_sigmask(SIG_SETMASK, &mask, NULL);
|
if(param->srv->service != S_UDPPM)pthread_sigmask(SIG_SETMASK, &mask, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
((struct clientparam *) p)->srv->pf((struct clientparam *)p);
|
((struct clientparam *) p)->srv->pf((struct clientparam *)p);
|
||||||
|
Loading…
Reference in New Issue
Block a user