X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=dtls.c;h=8be677eaf8d23a99751ff520c22518bda91aeb99;hb=refs%2Fheads%2Fmaint-1.6;hp=d99c55de585299adc2a4c696551d4cf900a36fc4;hpb=eff1f8d633fa2b07396e1d1f82043823d6916ba2;p=libradsec.git diff --git a/dtls.c b/dtls.c index d99c55d..8be677e 100644 --- a/dtls.c +++ b/dtls.c @@ -26,7 +26,6 @@ #include #include #include -#include "list.h" #include "hash.h" #include "radsecproxy.h" @@ -47,7 +46,7 @@ void initextradtls(); static const struct protodefs protodefs = { "dtls", - "mysecret", /* secretdefault */ + "radsec", /* secretdefault */ SOCK_DGRAM, /* socktype */ "2083", /* portdefault */ REQUEST_RETRY_COUNT, /* retrycountdefault */ @@ -100,7 +99,9 @@ struct dtlsservernewparams { void dtlssetsrcres() { if (!srcres) - srcres = resolvepassiveaddrinfo(protoopts ? protoopts->sourcearg : NULL, NULL, protodefs.socktype); + srcres = + resolvepassiveaddrinfo(protoopts ? protoopts->sourcearg : NULL, + AF_UNSPEC, NULL, protodefs.socktype); } int udp2bio(int s, struct gqueue *q, int cnt) { @@ -308,7 +309,7 @@ void dtlsserverrd(struct client *client) { debug(DBG_DBG, "dtlsserverrd: starting for %s", addr2string(client->addr)); - if (pthread_create(&dtlsserverwrth, NULL, dtlsserverwr, (void *)client)) { + if (pthread_create(&dtlsserverwrth, &pthread_attr, dtlsserverwr, (void *)client)) { debug(DBG_ERR, "dtlsserverrd: pthread_create failed"); return; } @@ -353,6 +354,7 @@ void *dtlsservernew(void *arg) { X509 *cert = NULL; SSL_CTX *ctx = NULL; uint8_t delay = 60; + struct tls *accepted_tls = NULL; debug(DBG_DBG, "dtlsservernew: starting"); conf = find_clconf(handle, (struct sockaddr *)¶ms->addr, NULL); @@ -366,10 +368,11 @@ void *dtlsservernew(void *arg) { cert = verifytlscert(ssl); if (!cert) goto exit; + accepted_tls = conf->tlsconf; } while (conf) { - if (verifyconfcert(cert, conf)) { + if (accepted_tls == conf->tlsconf && verifyconfcert(cert, conf)) { X509_free(cert); client = addclient(conf, 1); if (client) { @@ -509,7 +512,7 @@ void *udpdtlsserverrd(void *arg) { if (udp2bio(s, params->sesscache->rbios, cnt)) { debug(DBG_DBG, "udpdtlsserverrd: got DTLS in UDP from %s", addr2string((struct sockaddr *)&from)); - if (!pthread_create(&dtlsserverth, NULL, dtlsservernew, (void *)params)) { + if (!pthread_create(&dtlsserverth, &pthread_attr, dtlsservernew, (void *)params)) { pthread_detach(dtlsserverth); cacheexpire(sessioncache, &lastexpiry); continue; @@ -698,10 +701,10 @@ void initextradtls() { } if (client4_sock >= 0) - if (pthread_create(&cl4th, NULL, udpdtlsclientrd, (void *)&client4_sock)) + if (pthread_create(&cl4th, &pthread_attr, udpdtlsclientrd, (void *)&client4_sock)) debugx(1, DBG_ERR, "pthread_create failed"); if (client6_sock >= 0) - if (pthread_create(&cl6th, NULL, udpdtlsclientrd, (void *)&client6_sock)) + if (pthread_create(&cl6th, &pthread_attr, udpdtlsclientrd, (void *)&client6_sock)) debugx(1, DBG_ERR, "pthread_create failed"); } #else