permit size modifiers (k,m,g,...) in integer config parameters
authorRainer Gerhards <rgerhards@adiscon.com>
Sat, 7 Apr 2012 13:10:21 +0000 (15:10 +0200)
committerRainer Gerhards <rgerhards@adiscon.com>
Sat, 7 Apr 2012 13:10:21 +0000 (15:10 +0200)
Thanks to Jo Rhett for the suggestion.

ChangeLog
doc/rsyslog_conf_global.html
runtime/cfsysline.c

index 35ff376..524d9bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 ---------------------------------------------------------------------------
 Version 5.9.6  [V5-DEVEL], 2012-03-??
+- permit size modifiers (k,m,g,...) in integer config parameters
+  Thanks to Jo Rhett for the suggestion.
 - bugfix: imklog invalidly computed facility and severity
   closes: http://bugzilla.adiscon.com/show_bug.cgi?id=313
 - added configuration directive to disable octet-counted framing
index e24b0c1..8cfdd30 100644 (file)
@@ -317,7 +317,7 @@ not be reset.
 </li>
 <li><a href="rsconf1_umask.html">$UMASK</a></li>
 </ul>
-<p><b>Where &lt;size_nbr&gt; is specified above,</b>
+<p><b>Where &lt;size_nbr&gt; or integers are specified above,</b>
 modifiers can be used after the number part. For example, 1k means
 1024. Supported are k(ilo), m(ega), g(iga), t(era), p(eta) and e(xa).
 Lower case letters refer to the traditional binary defintion (e.g. 1m
@@ -325,7 +325,7 @@ equals 1,048,576) whereas upper case letters refer to their new
 1000-based definition (e.g 1M equals 1,000,000).</p>
 <p>Numbers may include '.' and ',' for readability. So you can
 for example specify either "1000" or "1,000" with the same result.
-Please note that rsyslogd simply ignores the punctuation. Form it's
+Please note that rsyslogd simply ignores the punctuation. From it's
 point of view, "1,,0.0.,.,0" also has the value 1000. </p>
 
 <p>[<a href="manual.html">manual index</a>]
index 4997e0f..36e586c 100644 (file)
@@ -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