diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-10-23 17:29:04 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-10-23 17:29:04 +0200 |
commit | 5cddb0533b53f8acfa36a65a4337ff368aa980de (patch) | |
tree | 3843f5d24c817c5ff7f0c60f05025abce80e864a | |
parent | 9cd8a73cb633a1e4e8b4babd0708d5640aa91445 (diff) | |
download | rsyslog-5cddb0533b53f8acfa36a65a4337ff368aa980de.tar.gz rsyslog-5cddb0533b53f8acfa36a65a4337ff368aa980de.tar.bz2 rsyslog-5cddb0533b53f8acfa36a65a4337ff368aa980de.zip |
fix VAR handling in script grammar and code
The $-var designator is now correctly stripped off the varname.
-rw-r--r-- | grammar/lexer.l | 2 | ||||
-rw-r--r-- | grammar/rainerscript.c | 3 | ||||
-rw-r--r-- | runtime/msg.c | 4 | ||||
-rw-r--r-- | runtime/msg.h | 5 | ||||
-rw-r--r-- | runtime/ruleset.c | 2 |
5 files changed, 5 insertions, 11 deletions
diff --git a/grammar/lexer.l b/grammar/lexer.l index d254d47e..e024526a 100644 --- a/grammar/lexer.l +++ b/grammar/lexer.l @@ -129,7 +129,7 @@ int fileno(FILE *stream); <EXPR>0[0-7]+ | /* octal number */ <EXPR>0x[0-7a-f] | /* hex number, following rule is dec; strtoll handles all! */ <EXPR>([1-9][0-9]*|0) { yylval.n = strtoll(yytext, NULL, 0); return NUMBER; } -<EXPR>\$[$!./]{0,1}[a-z][!a-z0-9\-_\.]* { yylval.s = strdup(yytext); return VAR; } +<EXPR>\$[$!./]{0,1}[a-z][!a-z0-9\-_\.]* { yylval.s = strdup(yytext+1); return VAR; } <EXPR>\'([^'\\]|\\['"\\$bntr]|\\x[0-9a-f][0-9a-f]|\\[0-7][0-7][0-7])*\' { yytext[yyleng-1] = '\0'; unescapeStr((uchar*)yytext+1, yyleng-2); diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c index 774e033f..1b9cda96 100644 --- a/grammar/rainerscript.c +++ b/grammar/rainerscript.c @@ -2554,8 +2554,7 @@ cnfvarNew(char *name) struct cnfvar *var; if((var = malloc(sizeof(struct cnfvar))) != NULL) { var->nodetype = 'V'; - var->name = strdup(name+1); - free(name); + var->name = name; msgPropDescrFill(&var->prop, (uchar*)var->name, strlen(var->name)); } return var; diff --git a/runtime/msg.c b/runtime/msg.c index 3690a8b4..c9ac507e 100644 --- a/runtime/msg.c +++ b/runtime/msg.c @@ -4068,9 +4068,9 @@ msgSetJSONFromVar(msg_t *pMsg, uchar *varname, struct var *v) ABORT_FINALIZE(RS_RET_ERR); } /* we always know strlen(varname) > 2 */ - if(varname[1] == '!') + if(varname[0] == '!') msgAddJSONObj(pMsg, varname+1, json, &pMsg->json); - else if(varname[1] == '.') + else if(varname[0] == '.') msgAddJSONObj(pMsg, varname+1, json, &pMsg->localvars); else { /* global - '/' */ pthread_rwlock_wrlock(&glblVars_rwlock); diff --git a/runtime/msg.h b/runtime/msg.h index fd890822..a2392a20 100644 --- a/runtime/msg.h +++ b/runtime/msg.h @@ -217,11 +217,6 @@ rsRetVal jsonFind(struct json_object *jroot, msgPropDescr_t *pProp, struct json_ rsRetVal msgPropDescrFill(msgPropDescr_t *pProp, uchar *name, int nameLen); void msgPropDescrDestruct(msgPropDescr_t *pProp); -static inline rsRetVal -msgUnsetJSON(msg_t *pMsg, uchar *varname) { - return msgDelJSON(pMsg, varname+1); -} - static inline int msgGetProtocolVersion(msg_t *pM) { diff --git a/runtime/ruleset.c b/runtime/ruleset.c index b7055eac..15e9e5ea 100644 --- a/runtime/ruleset.c +++ b/runtime/ruleset.c @@ -261,7 +261,7 @@ execUnset(struct cnfstmt *stmt, batch_t *pBatch, sbool *active) for(i = 0 ; i < batchNumMsgs(pBatch) && !*(pBatch->pbShutdownImmediate) ; ++i) { if( pBatch->eltState[i] != BATCH_STATE_DISC && (active == NULL || active[i])) { - msgUnsetJSON(pBatch->pElem[i].pMsg, stmt->d.s_unset.varname); + msgDelJSON(pBatch->pElem[i].pMsg, stmt->d.s_unset.varname); } } RETiRet; |