Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
eduroam
radsecproxy
Commits
07238516
Commit
07238516
authored
Apr 26, 2012
by
Linus Nordberg
Browse files
Add experimental code for dynamic discovery (only if ENABLE_EXPERIMENTAL_DYNDISC).
Patch from Ralf Paffrath <paffrath@dfn.de>.
parent
c6d33673
Changes
2
Hide whitespace changes
Inline
Side-by-side
radsecproxy.c
View file @
07238516
...
...
@@ -327,8 +327,13 @@ void freeserver(struct server *server, uint8_t destroymutex) {
if
(
server
->
rbios
)
freebios
(
server
->
rbios
);
free
(
server
->
dynamiclookuparg
);
if
(
server
->
ssl
)
SSL_free
(
server
->
ssl
);
if
(
server
->
ssl
)
{
#if defined ENABLE_EXPERIMENTAL_DYNDISC
if
(
server
->
sock
>=
0
)
close
(
server
->
sock
);
#endif
SSL_free
(
server
->
ssl
);
}
if
(
destroymutex
)
{
pthread_mutex_destroy
(
&
server
->
lock
);
pthread_cond_destroy
(
&
server
->
newrq_cond
);
...
...
@@ -768,7 +773,12 @@ int hasdynamicserver(struct list *srvconfs) {
struct
list_node
*
entry
;
for
(
entry
=
list_first
(
srvconfs
);
entry
;
entry
=
list_next
(
entry
))
if
(((
struct
clsrvconf
*
)
entry
->
data
)
->
dynamiclookupcommand
)
#if defined ENABLE_EXPERIMENTAL_DYNDISC
if
(((
struct
clsrvconf
*
)
entry
->
data
)
->
dynamiclookupcommand
||
((
struct
clsrvconf
*
)
entry
->
data
)
->
servers
->
in_use
)
#else
if
(((
struct
clsrvconf
*
)
entry
->
data
)
->
dynamiclookupcommand
)
#endif
return
1
;
return
0
;
}
...
...
@@ -1764,12 +1774,17 @@ void *clientwr(void *arg) {
dynconffail
=
1
;
server
->
dynstartup
=
0
;
server
->
dynfailing
=
1
;
#if defined ENABLE_EXPERIMENTAL_DYNDISC
pthread_mutex_unlock
(
&
server
->
lock
);
#endif
debug
(
DBG_WARN
,
"%s: dynamicconfig(%s) failed, sleeping %ds"
,
__func__
,
server
->
conf
->
name
,
ZZZ
);
sleep
(
ZZZ
);
goto
errexit
;
}
#if defined ENABLE_EXPERIMENTAL_DYNDISC
pthread_mutex_unlock
(
&
server
->
lock
);
#endif
/* FIXME: Is resolving not always done by compileserverconfig(),
* either as part of static configuration setup or by
* dynamicconfig() above? */
...
...
@@ -1798,6 +1813,9 @@ void *clientwr(void *arg) {
goto
errexit
;
}
server
->
connectionok
=
1
;
#if defined ENABLE_EXPERIMENTAL_DYNDISC
server
->
in_use
=
1
;
#endif
if
(
pthread_create
(
&
clientrdth
,
NULL
,
conf
->
pdef
->
clientconnreader
,
(
void
*
)
server
))
{
debugerrno
(
errno
,
DBG_ERR
,
"clientwr: pthread_create failed"
);
goto
errexit
;
...
...
@@ -1907,6 +1925,9 @@ void *clientwr(void *arg) {
}
}
errexit:
#if defined ENABLE_EXPERIMENTAL_DYNDISC
server
->
in_use
=
0
;
#endif
conf
->
servers
=
NULL
;
if
(
server
->
dynamiclookuparg
)
{
removeserversubrealms
(
realms
,
conf
);
...
...
@@ -2201,12 +2222,28 @@ struct list *createsubrealmservers(struct realm *realm, struct list *srvconfs) {
srvconf
->
servers
->
dynstartup
=
1
;
debug
(
DBG_DBG
,
"%s: new client writer for %s"
,
__func__
,
srvconf
->
servers
->
conf
->
name
);
#if defined ENABLE_EXPERIMENTAL_DYNDISC
pthread_mutex_lock
(
&
srvconf
->
servers
->
lock
);
#endif
if
(
pthread_create
(
&
clientth
,
NULL
,
clientwr
,
(
void
*
)(
srvconf
->
servers
)))
{
#if defined ENABLE_EXPERIMENTAL_DYNDISC
pthread_mutex_unlock
(
&
srvconf
->
servers
->
lock
);
#endif
debugerrno
(
errno
,
DBG_ERR
,
"pthread_create failed"
);
freeserver
(
srvconf
->
servers
,
1
);
srvconf
->
servers
=
NULL
;
#if defined ENABLE_EXPERIMENTAL_DYNDISC
conf
=
srvconf
;
continue
;
#endif
}
else
pthread_detach
(
clientth
);
#if defined ENABLE_EXPERIMENTAL_DYNDISC
/* If clientwr() could not find a NAPTR we have to
* wait for dynfailing=1 what is set in clientwr(). */
pthread_mutex_lock
(
&
srvconf
->
servers
->
lock
);
#endif
}
conf
=
srvconf
;
}
...
...
radsecproxy.h
View file @
07238516
...
...
@@ -164,6 +164,9 @@ struct server {
uint8_t
lostrqs
;
uint8_t
dynstartup
;
uint8_t
dynfailing
;
#if defined ENABLE_EXPERIMENTAL_DYNDISC
uint8_t
in_use
;
#endif
char
*
dynamiclookuparg
;
int
nextid
;
struct
timeval
lastrcv
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment