]> granicus.if.org Git - sudo/commitdiff
Set safe_cmnd after sudoers_lookup() if it has not been set.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:28:55 +0000 (21:28 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 24 Nov 2004 21:28:55 +0000 (21:28 +0000)
Previously it was set by sudo "ALL" in the parser but at that point
the fully-qualified pathname has not yet been found.

gram.c
gram.y
sudo.c

diff --git a/gram.c b/gram.c
index ad63699609d06e3a64294d0c816e0a8afd00dd1c..94bd7b7059b765b170f180fceb2784ef7d3a92fa 100644 (file)
--- a/gram.c
+++ b/gram.c
@@ -596,7 +596,7 @@ short *yyss;
 short *yysslim;
 YYSTYPE *yyvs;
 int yystacksize;
-#line 501 "gram.y"
+#line 498 "gram.y"
 /*
  * Add a list of defaults structures to the defaults list.
  * The binding, if non-NULL, specifies a list of hosts, users, or
@@ -1249,19 +1249,16 @@ case 57:
 #line 383 "gram.y"
 {
                            NEW_MEMBER(yyval.member, NULL, ALL);
-                           if (safe_cmnd)
-                               free(safe_cmnd);
-                           safe_cmnd = estrdup(user_cmnd);
                        }
 break;
 case 58:
-#line 389 "gram.y"
+#line 386 "gram.y"
 {
                            NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS);
                        }
 break;
 case 59:
-#line 392 "gram.y"
+#line 389 "gram.y"
 {
                            struct sudo_command *c = emalloc(sizeof(*c));
                            c->cmnd = yyvsp[0].command.cmnd;
@@ -1270,7 +1267,7 @@ case 59:
                        }
 break;
 case 62:
-#line 404 "gram.y"
+#line 401 "gram.y"
 {
                            char *s;
                            if ((s = alias_add(yyvsp[-2].string, HOSTALIAS, yyvsp[0].member)) != NULL) {
@@ -1280,14 +1277,14 @@ case 62:
                        }
 break;
 case 64:
-#line 414 "gram.y"
+#line 411 "gram.y"
 {
                            LIST_APPEND(yyvsp[-2].member, yyvsp[0].member);
                            yyval.member = yyvsp[-2].member;
                        }
 break;
 case 67:
-#line 424 "gram.y"
+#line 421 "gram.y"
 {
                            char *s;
                            if ((s = alias_add(yyvsp[-2].string, CMNDALIAS, yyvsp[0].member)) != NULL) {
@@ -1297,14 +1294,14 @@ case 67:
                        }
 break;
 case 69:
-#line 434 "gram.y"
+#line 431 "gram.y"
 {
                            LIST_APPEND(yyvsp[-2].member, yyvsp[0].member);
                            yyval.member = yyvsp[-2].member;
                        }
 break;
 case 72:
-#line 444 "gram.y"
+#line 441 "gram.y"
 {
                            char *s;
                            if ((s = alias_add(yyvsp[-2].string, RUNASALIAS, yyvsp[0].member)) != NULL) {
@@ -1314,7 +1311,7 @@ case 72:
                        }
 break;
 case 75:
-#line 457 "gram.y"
+#line 454 "gram.y"
 {
                            char *s;
                            if ((s = alias_add(yyvsp[-2].string, USERALIAS, yyvsp[0].member)) != NULL) {
@@ -1324,57 +1321,57 @@ case 75:
                        }
 break;
 case 77:
-#line 467 "gram.y"
+#line 464 "gram.y"
 {
                            LIST_APPEND(yyvsp[-2].member, yyvsp[0].member);
                            yyval.member = yyvsp[-2].member;
                        }
 break;
 case 78:
-#line 473 "gram.y"
+#line 470 "gram.y"
 {
                            yyval.member = yyvsp[0].member;
                            yyval.member->negated = FALSE;
                        }
 break;
 case 79:
-#line 477 "gram.y"
+#line 474 "gram.y"
 {
                            yyval.member = yyvsp[0].member;
                            yyval.member->negated = TRUE;
                        }
 break;
 case 80:
-#line 483 "gram.y"
+#line 480 "gram.y"
 {
                            NEW_MEMBER(yyval.member, yyvsp[0].string, ALIAS);
                        }
 break;
 case 81:
-#line 486 "gram.y"
+#line 483 "gram.y"
 {
                            NEW_MEMBER(yyval.member, NULL, ALL);
                        }
 break;
 case 82:
-#line 489 "gram.y"
+#line 486 "gram.y"
 {
                            NEW_MEMBER(yyval.member, yyvsp[0].string, NETGROUP);
                        }
 break;
 case 83:
-#line 492 "gram.y"
+#line 489 "gram.y"
 {
                            NEW_MEMBER(yyval.member, yyvsp[0].string, USERGROUP);
                        }
 break;
 case 84:
-#line 495 "gram.y"
+#line 492 "gram.y"
 {
                            NEW_MEMBER(yyval.member, yyvsp[0].string, WORD);
                        }
 break;
-#line 1326 "gram.c"
+#line 1323 "gram.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
diff --git a/gram.y b/gram.y
index 3d14bcbfdd0486e65a02cb701525a266f7b938a6..3ce6a48e5392175c5218c2bb3149e42a59c17f8e 100644 (file)
--- a/gram.y
+++ b/gram.y
@@ -382,9 +382,6 @@ cmndtag             :       /* empty */ {
 
 cmnd           :       ALL {
                            NEW_MEMBER($$, NULL, ALL);
-                           if (safe_cmnd)
-                               free(safe_cmnd);
-                           safe_cmnd = estrdup(user_cmnd);
                        }
                |       ALIAS {
                            NEW_MEMBER($$, $1, ALIAS);
diff --git a/sudo.c b/sudo.c
index 26e49726473915ee46f38a76081b0892a3f5c840..53e0c3cf0846ea5ec562d693f264cf825e548fc2 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -284,6 +284,8 @@ main(argc, argv, envp)
     if (!def_ignore_local_sudoers && !ISSET(validated, VALIDATE_OK))
 #endif
        validated = sudoers_lookup(pwflag);
+    if (safe_cmnd == NULL)
+       safe_cmnd = estrdup(user_cmnd);
 
     /*
      * Look up the timestamp dir owner if one is specified.
@@ -367,14 +369,6 @@ main(argc, argv, envp)
            exit(0);
        }
 
-       /* This *must* have been set if we got a match but... */
-       if (safe_cmnd == NULL) {
-           log_error(MSG_ONLY,
-               "internal error, safe_cmnd never got set for %s; %s",
-               user_cmnd,
-               "please report this error at http://courtesan.com/sudo/bugs/");
-       }
-
 #ifdef HAVE_SYSTRACE 
        if (def_monitor)
            systrace_attach(getpid());