Skip to content

Commit

Permalink
Merge pull request #670 from spbnick/fr_timeval_bound_check
Browse files Browse the repository at this point in the history
Add FR_TIMEVAL_BOUND_CHECK
  • Loading branch information
alandekok committed May 30, 2014
2 parents a6d903e + afaa5f6 commit d050f6f
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 34 deletions.
11 changes: 11 additions & 0 deletions src/include/conffile.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,17 @@ do {\

#define FR_INTEGER_BOUND_CHECK(_name, _var, _op, _bound) FR_INTEGER_COND_CHECK(_name, _var, (_var _op _bound), _bound)

#define FR_TIMEVAL_BOUND_CHECK(_name, _var, _op, _bound_sec, _bound_usec)\
do {\
struct timeval _bound = {_bound_sec, _bound_usec};\
if (!timercmp(_var, &_bound, _op)) {\
WARN("WARNING: Ignoring \"" _name " = %d.%.06d\", forcing to \"" _name " = %d.%06d\"",\
(int)(_var)->tv_sec, (int)(_var)->tv_usec,\
(int)_bound.tv_sec, (int)_bound.tv_usec);\
*_var = _bound;\
}\
} while (0)

typedef struct CONF_PARSER {
char const *name;
int type; //!< PW_TYPE_STRING, etc.
Expand Down
21 changes: 4 additions & 17 deletions src/main/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -745,23 +745,10 @@ static RADCLIENT *client_parse(CONF_SECTION *cs, int in_server)
break;
}

if (!c->response_window.tv_sec) {
uint32_t tmp = c->response_window.tv_usec; /* which isn't an integer */

FR_INTEGER_BOUND_CHECK("response_window microseconds", tmp, >=, 1000);
c->response_window.tv_usec = tmp;

} else {
int tmp = (int)c->response_window.tv_sec; /* which isn't an integer */

FR_INTEGER_BOUND_CHECK("response_window", tmp, <=, 60);
FR_INTEGER_BOUND_CHECK("response_window", tmp, <=, (int)main_config.max_request_time);

if (c->response_window.tv_sec != tmp) {
c->response_window.tv_sec = tmp;
c->response_window.tv_usec = 0;
}
}
FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, >=, 0, 1000);
FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=, 60, 0);
FR_TIMEVAL_BOUND_CHECK("response_window", &c->response_window, <=,
main_config.max_request_time, 0);

#ifdef WITH_DYNAMIC_CLIENTS
if (c->client_server) {
Expand Down
21 changes: 4 additions & 17 deletions src/main/realms.c
Original file line number Diff line number Diff line change
Expand Up @@ -659,23 +659,10 @@ static int home_server_add(realm_config_t *rc, CONF_SECTION *cs)
FR_INTEGER_BOUND_CHECK("ping_interval", home->ping_interval, >=, 6);
FR_INTEGER_BOUND_CHECK("ping_interval", home->ping_interval, <=, 120);

if (!home->response_window.tv_sec) {
uint32_t tmp = home->response_window.tv_usec; /* which isn't an integer */

FR_INTEGER_BOUND_CHECK("response_window microseconds", tmp, >=, 1000);
home->response_window.tv_usec = tmp;

} else {
int tmp = (int)home->response_window.tv_sec; /* which isn't an integer */

FR_INTEGER_BOUND_CHECK("response_window", tmp, <=, 60);
FR_INTEGER_BOUND_CHECK("response_window", tmp, <=, (int)main_config.max_request_time);

if (home->response_window.tv_sec != tmp) {
home->response_window.tv_sec = tmp;
home->response_window.tv_usec = 0;
}
}
FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, >=, 0, 1000);
FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, <=, 60, 0);
FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, <=,
main_config.max_request_time, 0);

/*
* Track the minimum response window, so that we can
Expand Down

0 comments on commit d050f6f

Please sign in to comment.