Skip to content

Commit

Permalink
add per server source for udp
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabian Mauchle committed Oct 17, 2019
1 parent ab15747 commit b4580a4
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 36 deletions.
37 changes: 19 additions & 18 deletions radsecproxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -2518,28 +2518,29 @@ int confserver_cb(struct gconffile **cf, void *arg, char *block, char *opt, char
}

if (!getgenericconfig(cf, block,
"type", CONF_STR, &conftype,
"host", CONF_MSTR, &conf->hostsrc,
"type", CONF_STR, &conftype,
"host", CONF_MSTR, &conf->hostsrc,
"IPv4Only", CONF_BLN, &ipv4only,
"IPv6Only", CONF_BLN, &ipv6only,
"port", CONF_STR, &conf->portsrc,
"secret", CONF_STR_NOESC, &conf->confsecret,
"port", CONF_STR, &conf->portsrc,
"source", CONF_MSTR, &conf->source,
"secret", CONF_STR_NOESC, &conf->confsecret,
#if defined(RADPROT_TLS) || defined(RADPROT_DTLS)
"tls", CONF_STR, &conf->tls,
"MatchCertificateAttribute", CONF_STR, &conf->matchcertattr,
"CertificateNameCheck", CONF_BLN, &conf->certnamecheck,
"tls", CONF_STR, &conf->tls,
"MatchCertificateAttribute", CONF_STR, &conf->matchcertattr,
"CertificateNameCheck", CONF_BLN, &conf->certnamecheck,
#endif
"addTTL", CONF_LINT, &addttl,
"tcpKeepalive", CONF_BLN, &conf->keepalive,
"rewrite", CONF_STR, &rewriteinalias,
"rewriteIn", CONF_STR, &conf->confrewritein,
"rewriteOut", CONF_STR, &conf->confrewriteout,
"StatusServer", CONF_STR, &statusserver,
"RetryInterval", CONF_LINT, &retryinterval,
"RetryCount", CONF_LINT, &retrycount,
"DynamicLookupCommand", CONF_STR, &conf->dynamiclookupcommand,
"LoopPrevention", CONF_BLN, &conf->loopprevention,
NULL
"addTTL", CONF_LINT, &addttl,
"tcpKeepalive", CONF_BLN, &conf->keepalive,
"rewrite", CONF_STR, &rewriteinalias,
"rewriteIn", CONF_STR, &conf->confrewritein,
"rewriteOut", CONF_STR, &conf->confrewriteout,
"StatusServer", CONF_STR, &statusserver,
"RetryInterval", CONF_LINT, &retryinterval,
"RetryCount", CONF_LINT, &retrycount,
"DynamicLookupCommand", CONF_STR, &conf->dynamiclookupcommand,
"LoopPrevention", CONF_BLN, &conf->loopprevention,
NULL
)) {
debug(DBG_ERR, "configuration error");
goto errexit;
Expand Down
1 change: 1 addition & 0 deletions radsecproxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ struct clsrvconf {
int hostaf;
char *portsrc;
struct list *hostports;
char **source;
char *confsecret;
uint8_t *secret;
int secret_len;
Expand Down
47 changes: 29 additions & 18 deletions udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,27 +317,38 @@ void addclientudp(struct client *client) {
}

void addserverextraudp(struct clsrvconf *conf) {
struct addrinfo *source = NULL;

assert(list_first(conf->hostports) != NULL);

if(conf->source) {
source = resolvepassiveaddrinfo(conf->source, AF_UNSPEC, NULL, protodefs.socktype);
if(!source)
debug(DBG_WARN, "addserver: could not resolve source address to bind for server %s, using default", conf->name);
}

switch (((struct hostportres *)list_first(conf->hostports)->data)->addrinfo->ai_family) {
case AF_INET:
if (client4_sock < 0) {
client4_sock = bindtoaddr(srcres, AF_INET, 0);
if (client4_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client4_sock;
break;
case AF_INET6:
if (client6_sock < 0) {
client6_sock = bindtoaddr(srcres, AF_INET6, 0);
if (client6_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client6_sock;
break;
default:
debugx(1, DBG_ERR, "addserver: unsupported address family");
case AF_INET:
if (client4_sock < 0) {
client4_sock = bindtoaddr(source ? source : srcres, AF_INET, 0);
if (client4_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client4_sock;
break;
case AF_INET6:
if (client6_sock < 0) {
client6_sock = bindtoaddr(source ? source : srcres, AF_INET6, 0);
if (client6_sock < 0)
debugx(1, DBG_ERR, "addserver: failed to create client socket for server %s", conf->name);
}
conf->servers->sock = client6_sock;
break;
default:
debugx(1, DBG_ERR, "addserver: unsupported address family");
}
if (source)
freeaddrinfo(source);
}

void initextraudp() {
Expand Down

0 comments on commit b4580a4

Please sign in to comment.