- /* Ummm, why do we want to avoid creating directories with the effective
- user ID? None of the nmh tools are installed such that the effective
- should be different from the real, and if some parent process made
- the two be different, I don't see why it should be our job to enforce
- the real UID. Also, why the heck do we call the mkdir executable
- rather than the library function in this case?? If we do want to
- call the mkdir executable, we should at least be giving it -p (and
- change the single chmod() call below) so it can successfully create
- nested directories like the above code can.
-
- -- Dan Harkless <dan-nmh@dilvish.speed.net> */
- switch (pid = vfork()) {
- case -1:
- advise ("fork", "unable to");
+ /*
+ ** Ummm, why do we want to avoid creating directories
+ ** with the effective user ID? None of the nmh tools are
+ ** installed such that the effective should be different
+ ** from the real, and if some parent process made the two
+ ** be different, I don't see why it should be our job to
+ ** enforce the real UID. Also, why the heck do we call
+ ** the mkdir executable rather than the library function in
+ ** this case?? If we do want to call the mkdir executable,
+ ** we should at least be giving it -p (and change the single
+ ** chmod() call below) so it can successfully create nested
+ ** directories like the above code can.
+ ** -- Dan Harkless <dan-nmh@dilvish.speed.net>
+ */
+ switch (pid = fork()) {
+ case -1:
+ advise("fork", "unable to");
+ return 0;
+
+ case 0:
+ setgid(getgid());
+ setuid(getuid());
+
+ execl("/bin/mkdir", "mkdir", dir, NULL);
+ execl("/usr/bin/mkdir", "mkdir", dir, NULL);
+ fprintf(stderr, "unable to exec ");
+ perror("mkdir");
+ _exit(-1);
+
+ default:
+ if (pidXwait(pid, "mkdir"))