|
|
1.1 root 1: /* @(#) $Header: makedir.c,v 1.4 89/12/15 14:39:26 leres Exp $ (LBL) */
2: /* makedir.c - make a directory */
3:
4: #include "../h/mh.h"
5: #include <stdio.h>
6: #include <errno.h>
7:
8: extern int errno;
9:
10:
11: makedir(dir)
12: register char *dir;
13: {
14: register int i, pid;
15: register char *cp;
16: char temp[BUFSIZ];
17:
18: m_update();
19: (void) fflush(stdout);
20:
21: #ifdef BSD42
22: if (getuid() == geteuid()) {
23: errno = 0;
24: if ((i = mkdir(dir, 0755)) < 0 && errno == ENOENT) {
25: /* Attempt to create higher level directories */
26: cp = strcpy(temp, dir);
27: if (*cp == '/')
28: ++cp;
29: while (cp = index(cp, '/')) {
30: *cp = '\0';
31: errno = 0;
32: if ((i = mkdir(temp, 0755)) < 0 &&
33: errno != EEXIST)
34: break;
35: *cp++ = '/';
36: }
37: if (i >= 0)
38: i = mkdir(temp, 0755);
39: }
40: if (i < 0) {
41: advise(dir, "unable to create directory");
42: return(0);
43: }
44: } else
45: #endif BSD42
46: switch (pid = vfork()) {
47:
48: case NOTOK:
49: advise("fork", "unable to");
50: return(0);
51:
52: case OK:
53: (void) setgid(getgid());
54: (void) setuid(getuid());
55:
56: execl("/bin/mkdir", "mkdir", dir, NULLCP);
57: execl("/usr/bin/mkdir", "mkdir", dir, NULLCP);
58: perror("unable to exec mkdir");
59: _exit(-1);
60:
61: default:
62: if (pidXwait(pid, "mkdir"))
63: return(0);
64: break;
65: }
66:
67: if ((cp = m_find("folder-protect")) == NULL)
68: cp = foldprot;
69: (void) chmod(dir, atooi(cp));
70: return(1);
71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.