diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2012-04-07 15:10:21 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2012-04-07 15:10:21 +0200 |
commit | c64203c7f2c886712c33c21de7e0e53b7939a883 (patch) | |
tree | ec46ee2f3f19b5b883a5d4b306abbc7db164eb7c /runtime/cfsysline.c | |
parent | d53016962da179c52ad22600bd54ffd58f86a81c (diff) | |
download | rsyslog-c64203c7f2c886712c33c21de7e0e53b7939a883.tar.gz rsyslog-c64203c7f2c886712c33c21de7e0e53b7939a883.tar.bz2 rsyslog-c64203c7f2c886712c33c21de7e0e53b7939a883.zip |
permit size modifiers (k,m,g,...) in integer config parameters
Thanks to Jo Rhett for the suggestion.
Diffstat (limited to 'runtime/cfsysline.c')
-rw-r--r-- | runtime/cfsysline.c | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/runtime/cfsysline.c b/runtime/cfsysline.c index 4997e0fb..36e586c1 100644 --- a/runtime/cfsysline.c +++ b/runtime/cfsysline.c @@ -154,36 +154,6 @@ finalize_it: } -/* Parse a number from the configuration line. - * rgerhards, 2007-07-31 - */ -static rsRetVal doGetInt(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *pVal) -{ - uchar *p; - DEFiRet; - int64 i; - - assert(pp != NULL); - assert(*pp != NULL); - - CHKiRet(parseIntVal(pp, &i)); - p = *pp; - - if(pSetHdlr == NULL) { - /* we should set value directly to var */ - *((int*)pVal) = (int) i; - } else { - /* we set value via a set function */ - CHKiRet(pSetHdlr(pVal, (int) i)); - } - - *pp = p; - -finalize_it: - RETiRet; -} - - /* Parse a size from the configuration line. This is basically an integer * syntax, but modifiers may be added after the integer (e.g. 1k to mean * 1024). The size must immediately follow the number. Note that the @@ -237,7 +207,44 @@ finalize_it: } -/* Parse and interpet a $FileCreateMode and $umask line. This function +/* Parse a number from the configuration line. + * rgerhards, 2007-07-31 + */ +static rsRetVal doGetInt(uchar **pp, rsRetVal (*pSetHdlr)(void*, uid_t), void *pVal) +{ + uchar *p; + DEFiRet; + int64 i; + uchar errMsg[256]; /* for dynamic error messages */ + + assert(pp != NULL); + assert(*pp != NULL); + + CHKiRet(doGetSize(pp, NULL,&i)); + p = *pp; + if(i > 2147483648ll) { /*2^31*/ + snprintf((char*) errMsg, sizeof(errMsg)/sizeof(uchar), + "value %lld too large for integer argument.", i); + errmsg.LogError(0, RS_RET_INVALID_VALUE, "%s", errMsg); + ABORT_FINALIZE(RS_RET_INVALID_VALUE); + } + + if(pSetHdlr == NULL) { + /* we should set value directly to var */ + *((int*)pVal) = (int) i; + } else { + /* we set value via a set function */ + CHKiRet(pSetHdlr(pVal, (int) i)); + } + + *pp = p; + +finalize_it: + RETiRet; +} + + +/* Parse and interpret a $FileCreateMode and $umask line. This function * pulls the creation mode and, if successful, stores it * into the global variable so that the rest of rsyslogd * opens files with that mode. Any previous value will be |