From: pcarana Date: Thu, 28 Feb 2019 15:34:59 +0000 (-0600) Subject: Add intervals validation X-Git-Tag: v0.0.2~52^2~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ccdeae1e9649a93f794187d0de272d6ca9dd31b;p=thirdparty%2FFORT-validator.git Add intervals validation --- diff --git a/src/configuration.c b/src/configuration.c index ff5093a3..b1ff5d19 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -26,6 +26,14 @@ #define DEFAULT_RETRY_INTERVAL 600 #define DEFAULT_EXPIRE_INTERVAL 7200 +/* Protocol timing parameters ranges */ +#define MIN_REFRESH_INTERVAL 1 +#define MAX_REFRESH_INTERVAL 86400 +#define MIN_RETRY_INTERVAL 1 +#define MAX_RETRY_INTERVAL 7200 +#define MIN_EXPIRE_INTERVAL 600 +#define MAX_EXPIRE_INTERVAL 172800 + struct rtr_config { /** The listener address of the RTR server. */ struct addrinfo *address; @@ -83,6 +91,27 @@ config_cleanup(void) free(config.vrps_location); } +static int +load_interval(json_t *parent, char const *name, int default_value, + int *result, int min_value, int max_value) +{ + int error; + + error = json_get_int(parent, name, default_value, result); + if (error) { + err(error, "Invalid value for interval '%s'", name); + return error; + } + + if (*result < min_value || max_value < *result) { + err(-EINVAL, "Interval '%s' (%d) out of range, must be from %d to %d", + name, *result, min_value, max_value); + return -EINVAL; + } + + return 0; +} + static int handle_json(json_t *root) { @@ -138,22 +167,24 @@ handle_json(json_t *root) return -EINVAL; } - error = json_get_int(interval, OPTNAME_RTR_INTERVAL_REFRESH, - DEFAULT_REFRESH_INTERVAL, &refresh_interval); + error = load_interval(interval, OPTNAME_RTR_INTERVAL_REFRESH, + DEFAULT_REFRESH_INTERVAL, &refresh_interval, + MIN_REFRESH_INTERVAL, MAX_REFRESH_INTERVAL); if (error) return error; - error = json_get_int(interval, OPTNAME_RTR_INTERVAL_RETRY, - DEFAULT_RETRY_INTERVAL, &retry_interval); + error = load_interval(interval, OPTNAME_RTR_INTERVAL_RETRY, + DEFAULT_RETRY_INTERVAL, &retry_interval, + MIN_RETRY_INTERVAL, MAX_RETRY_INTERVAL); if (error) return error; - error = json_get_int(interval, OPTNAME_RTR_INTERVAL_EXPIRE, - DEFAULT_EXPIRE_INTERVAL, &expire_interval); + error = load_interval(interval, OPTNAME_RTR_INTERVAL_EXPIRE, + DEFAULT_EXPIRE_INTERVAL, &expire_interval, + MIN_EXPIRE_INTERVAL, MAX_EXPIRE_INTERVAL); if (error) return error; - /* TODO Add range validations https://tools.ietf.org/html/rfc8210#section-6 */ config.refresh_interval = refresh_interval; config.retry_interval = retry_interval; config.expire_interval = expire_interval;