diff --git a/config.l b/config.l index c4b1de6..97afd86 100644 --- a/config.l +++ b/config.l @@ -29,7 +29,7 @@ LONGCOMMENT "/*" %% /* BEGIN RULES SECTION */ -{NUMBER} { yylval.i = atoi(yytext); } +{NUMBER} { yylval.i = atoi(yytext); return TYPE_NUMBER; } {VALUE} { yytext[yyleng - 1] = '\0'; /* Kill the trailing quote */ yytext++; /* Kill the leading quote */ diff --git a/config.y b/config.y index 3d60ed7..81a8e5a 100644 --- a/config.y +++ b/config.y @@ -105,21 +105,31 @@ KeyPair: KeyType '=' TYPE_VALUE { free($3); } | KeyType '=' TYPE_NUMBER { + if (!myconfig) + myconfig = calloc(1, sizeof(struct dg_config)); + switch ($1) { case TYPE_SUID: - if (!myconfig->shed_user && getpwuid($3) != NULL) - myconfig->shed_uid = $3; - else - fprintf(stderr, "%s: no such uid %lu\n", config, $3); + if (!myconfig->shed_user) + { + if (getpwuid($3) != NULL) + myconfig->shed_uid = $3; + else + fprintf(stderr, "%s: no such uid %lu\n", config, $3); + } break; case TYPE_SGID: - if (!myconfig->shed_group && getgrgid($3) != NULL) - myconfig->shed_gid = $3; - else - fprintf(stderr, "%s: no such gid %lu\n", config, $3); + if (!myconfig->shed_group) + { + if (getgrgid($3) != NULL) + myconfig->shed_gid = $3; + else + fprintf(stderr, "%s: no such gid %lu\n", config, $3); + } + break; case TYPE_MAX: