]> granicus.if.org Git - sudo/commitdiff
Make expand_prompt() args const and free the prompt when we are
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 8 Nov 2012 21:40:37 +0000 (16:40 -0500)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 8 Nov 2012 21:40:37 +0000 (16:40 -0500)
done with it.

plugins/sudoers/check.c
plugins/sudoers/prompt.c
plugins/sudoers/sudoers.h

index cb2e35679e8e16c73a9403798fa0dca5e732a302..d7371dcbf4cf34c04c647a5543ccec4a89abf50d 100644 (file)
@@ -61,7 +61,6 @@ int
 check_user(int validated, int mode)
 {
     struct passwd *auth_pw;
-    char *prompt;
     int status, rval = true;
     debug_decl(check_user, SUDO_DEBUG_AUTH)
 
@@ -104,6 +103,7 @@ check_user(int validated, int mode)
     status = timestamp_status();
 
     if (status != TS_CURRENT || ISSET(validated, FLAG_CHECK_USER)) {
+       char *prompt;
        bool lectured;
 
        /* Bail out if we are non-interactive and a password is required */
@@ -124,6 +124,7 @@ check_user(int validated, int mode)
        rval = verify_user(auth_pw, prompt, validated);
        if (rval == true && lectured)
            set_lectured();
+       efree(prompt);
     }
     /* Only update timestamp if user was validated. */
     if (rval == true && ISSET(validated, VALIDATE_OK) &&
index b5f3d0e9b64ccd018e723d77d6ac8fe58e24c878..f5c2fdb7f00e4bd7ec59be2ba30d3a8f05c06162 100644 (file)
  * allocated result.  Returns the same string if there are no escapes.
  */
 char *
-expand_prompt(char *old_prompt, char *user, char *host)
+expand_prompt(const char *old_prompt, const char *user, const char *host)
 {
     size_t len, n;
     int subst;
-    char *p, *np, *new_prompt, *endp;
+    const char *p;
+    char *np, *new_prompt, *endp;
     debug_decl(expand_prompt, SUDO_DEBUG_AUTH)
 
     /* How much space do we need to malloc for the prompt? */
@@ -162,7 +163,7 @@ expand_prompt(char *old_prompt, char *user, char *host)
        }
        *np = '\0';
     } else
-       new_prompt = old_prompt;
+       new_prompt = estrdup(old_prompt);
 
     debug_return_str(new_prompt);
 
index 1261b8af762276e17d9754085bd87d629958d157..430e2a0355d65fdbe53e67fcfbca8bbcab604924 100644 (file)
@@ -234,7 +234,7 @@ int find_path(char *, char **, struct stat *, char *, int);
 /* check.c */
 int check_user(int validate, int mode);
 bool user_is_exempt(void);
-char *expand_prompt(char *old_prompt, char *user, char *host);
+char *expand_prompt(const char *old_prompt, const char *user, const char *host);
 
 /* timestamp.c */
 void remove_timestamp(bool);