diff options
-rw-r--r-- | asroot.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -237,11 +237,11 @@ check_password(void) for (;;) { hostname = realloc(hostname, size *= 2); if (!hostname) { - fprintf(stderr, "%s: realloc %zu: %s\n", argv0, size, strerror(errno)); + fprintf(stderr, "%s: realloc1 %zu: %s\n", argv0, size, strerror(errno)); } *hostname = 0; if (!gethostname(hostname, size)) { - if (!hostname[size - 2]) + if (strnlen(hostname, size) < size - 1) break; } else if (errno != ENAMETOOLONG) { fprintf(stderr, "%s: gethostname %zu: %s\n", argv0, size, strerror(errno)); @@ -393,7 +393,9 @@ main(int argc, char *argv[]) exit(EXIT_ERROR); } - execvpe(argv[0], argv, new_environ ? new_environ : environ); + if (new_environ) + environ = new_environ; + execvp(argv[0], argv); fprintf(stderr, "%s: execvpe %s: %s\n", argv0, argv[0], strerror(errno)); return errno == ENOENT ? EXIT_NOENT : EXIT_EXEC; } |