|
|
BSD 4.3reno
/* @(#) $Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/mh/sbr/makedir.c,v 1.1.1.1 2018/04/24 16:12:56 root Exp $ (LBL) */
/* makedir.c - make a directory */
#include "../h/mh.h"
#include <stdio.h>
#include <errno.h>
extern int errno;
makedir(dir)
register char *dir;
{
register int i, pid;
register char *cp;
char temp[BUFSIZ];
m_update();
(void) fflush(stdout);
#ifdef BSD42
if (getuid() == geteuid()) {
errno = 0;
if ((i = mkdir(dir, 0755)) < 0 && errno == ENOENT) {
/* Attempt to create higher level directories */
cp = strcpy(temp, dir);
if (*cp == '/')
++cp;
while (cp = index(cp, '/')) {
*cp = '\0';
errno = 0;
if ((i = mkdir(temp, 0755)) < 0 &&
errno != EEXIST)
break;
*cp++ = '/';
}
if (i >= 0)
i = mkdir(temp, 0755);
}
if (i < 0) {
advise(dir, "unable to create directory");
return(0);
}
} else
#endif BSD42
switch (pid = vfork()) {
case NOTOK:
advise("fork", "unable to");
return(0);
case OK:
(void) setgid(getgid());
(void) setuid(getuid());
execl("/bin/mkdir", "mkdir", dir, NULLCP);
execl("/usr/bin/mkdir", "mkdir", dir, NULLCP);
perror("unable to exec mkdir");
_exit(-1);
default:
if (pidXwait(pid, "mkdir"))
return(0);
break;
}
if ((cp = m_find("folder-protect")) == NULL)
cp = foldprot;
(void) chmod(dir, atooi(cp));
return(1);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.