X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fmakedir.c;h=1c13bb654e72b016cda6297866d7f411d09b2238;hb=240013872c392fe644bd4f79382d9f5314b4ea60;hp=1e03caac910a832edf13cf4e023a2004951161d8;hpb=a485ed478abbd599d8c9aab48934e7a26733ecb1;p=mmh diff --git a/sbr/makedir.c b/sbr/makedir.c index 1e03caa..1c13bb6 100644 --- a/sbr/makedir.c +++ b/sbr/makedir.c @@ -1,14 +1,14 @@ /* - * makedir.c -- make a directory - * - * This code is Copyright (c) 2002, by the authors of nmh. See the - * COPYRIGHT file in the root directory of the nmh distribution for - * complete copyright information. - */ +** makedir.c -- make a directory +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ /* - * Modified to try recursive create. - */ +** Modified to try recursive create. +*/ #include #include @@ -16,7 +16,7 @@ #include int -makedir (char *dir) +makedir(char *dir) { char path[PATH_MAX]; char* folder_perms_ASCII; @@ -28,35 +28,40 @@ makedir (char *dir) context_save(); /* save the context file */ fflush(stdout); - if (!(folder_perms_ASCII = context_find ("folder-protect"))) + if (!(folder_perms_ASCII = context_find("folder-protect"))) folder_perms_ASCII = foldprot; /* defaults to "700" */ - /* Because mh-profile.man documents "Folder-Protect:" as an octal constant, - and we don't want to force the user to remember to include a leading - zero, we call atooi(folder_perms_ASCII) here rather than - strtoul(folder_perms_ASCII, NULL, 0). Therefore, if anyone ever tries to - specify a mode in say, hex, they'll get garbage. (I guess nmh uses its - atooi() function rather than calling strtoul() with a radix of 8 because - some ancient platforms are missing that functionality. */ + /* + ** Because mh-profile.man documents "Folder-Protect:" as an octal + ** constant, and we don't want to force the user to remember to + ** include a leading zero, we call atooi(folder_perms_ASCII) here + ** rather than strtoul(folder_perms_ASCII, NULL, 0). Therefore, + ** if anyone ever tries to specify a mode in say, hex, they'll + ** get garbage. (I guess nmh uses its atooi() function rather + ** than calling strtoul() with a radix of 8 because some ancient + ** platforms are missing that functionality. + */ folder_perms = atooi(folder_perms_ASCII); - /* Folders have definite desired permissions that are set -- we don't want - to interact with the umask. Clear it temporarily. */ + /* + ** Folders have definite desired permissions that are set -- we + ** don't want to interact with the umask. Clear it temporarily. + */ saved_umask = umask(0); - if (getuid () == geteuid ()) { + if (getuid() == geteuid()) { c = strncpy(path, dir, sizeof(path)); while (!had_an_error && (c = strchr((c + 1), '/')) != NULL) { *c = (char)0; if (access(path, X_OK)) { if (errno != ENOENT){ - advise (dir, "unable to create directory"); + advise(dir, "unable to create directory"); had_an_error = 1; } /* Create an outer directory. */ if (mkdir(path, folder_perms)) { - advise (dir, "unable to create directory"); + advise(dir, "unable to create directory"); had_an_error = 1; } } @@ -64,39 +69,44 @@ makedir (char *dir) } if (!had_an_error) { - /* Create the innermost nested subdirectory of the - * path we're being asked to create. */ - if (mkdir (dir, folder_perms) == -1) { - advise (dir, "unable to create directory"); + /* + ** Create the innermost nested subdirectory of the + ** path we're being asked to create. + */ + if (mkdir(dir, folder_perms) == -1) { + advise(dir, "unable to create directory"); had_an_error = 1; } } } else { - /* 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 */ + /* + ** 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 + */ switch (pid = vfork()) { case -1: - advise ("fork", "unable to"); + advise("fork", "unable to"); return 0; case 0: - setgid (getgid ()); - setuid (getuid ()); + 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); + 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")) @@ -104,7 +114,7 @@ makedir (char *dir) break; } - chmod (dir, folder_perms); + chmod(dir, folder_perms); } umask(saved_umask); /* put the user's umask back */