diff --git a/utils/mount/network.c b/utils/mount/network.c index 4f8c15c..515249b 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -796,6 +796,8 @@ int start_statd(void) if (stat(START_STATD, &stb) == 0) { if (S_ISREG(stb.st_mode) && (stb.st_mode & S_IXUSR)) { int cnt = STATD_TIMEOUT * 10; + int status = 0; + char * const envp[1] = { NULL }; const struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000, @@ -803,14 +805,19 @@ int start_statd(void) pid_t pid = fork(); switch (pid) { case 0: /* child */ - execl(START_STATD, START_STATD, NULL); + setgid(0); + setuid(0); + execle(START_STATD, START_STATD, NULL, envp); exit(1); case -1: /* error */ nfs_error(_("%s: fork failed: %s"), progname, strerror(errno)); break; default: /* parent */ - waitpid(pid, NULL,0); + if (waitpid(pid, &status,0) == pid && + status == 0) + /* assume it worked */ + return 1; break; } while (1) {