summaryrefslogtreecommitdiffstats
path: root/pw/pw_user.c
diff options
context:
space:
mode:
authorLukas Ertl <le@FreeBSD.org>2007-03-30 11:23:10 +0000
committerLukas Ertl <le@FreeBSD.org>2007-03-30 11:23:10 +0000
commitabdbf0ce5b290f2af7177279704ab6c0c83a2a2b (patch)
tree1fc2f362e082e5c3fdd4808dd1a2a168bc46f18c /pw/pw_user.c
parent6c558b459495a9f26c675637f9fbd07938502e5d (diff)
downloadpw-darwin-abdbf0ce5b290f2af7177279704ab6c0c83a2a2b.tar.gz
pw-darwin-abdbf0ce5b290f2af7177279704ab6c0c83a2a2b.tar.zst
pw-darwin-abdbf0ce5b290f2af7177279704ab6c0c83a2a2b.zip
Add home directory creation mode to pw.conf(5) and be a bit
more specific about the effect of the current umask on -M.
Diffstat (limited to 'pw/pw_user.c')
-rw-r--r--pw/pw_user.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/pw/pw_user.c b/pw/pw_user.c
index 3a46353..7f13644 100644
--- a/pw/pw_user.c
+++ b/pw/pw_user.c
@@ -166,8 +166,8 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
dmode_c);
dmode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
free(set);
- } else
- dmode = S_IRWXU | S_IRWXG | S_IRWXO;
+ cnf->homemode = dmode;
+ }
/*
* If we'll need to use it or we're updating it,
@@ -194,7 +194,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
if (strchr(cnf->home+1, '/') == NULL) {
strcpy(dbuf, "/usr");
strncat(dbuf, cnf->home, MAXPATHLEN-5);
- if (mkdir(dbuf, dmode) != -1 || errno == EEXIST) {
+ if (mkdir(dbuf, cnf->homemode) != -1 || errno == EEXIST) {
chown(dbuf, 0, 0);
/*
* Skip first "/" and create symlink:
@@ -210,7 +210,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
while ((p = strchr(++p, '/')) != NULL) {
*p = '\0';
if (stat(dbuf, &st) == -1) {
- if (mkdir(dbuf, dmode) == -1)
+ if (mkdir(dbuf, cnf->homemode) == -1)
goto direrr;
chown(dbuf, 0, 0);
} else if (!S_ISDIR(st.st_mode))
@@ -219,7 +219,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
}
}
if (stat(dbuf, &st) == -1) {
- if (mkdir(dbuf, dmode) == -1) {
+ if (mkdir(dbuf, cnf->homemode) == -1) {
direrr: err(EX_OSFILE, "mkdir '%s'", dbuf);
}
chown(dbuf, 0, 0);
@@ -776,7 +776,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
* existing files will *not* be overwritten.
*/
if (!PWALTDIR() && getarg(args, 'm') != NULL && pwd->pw_dir && *pwd->pw_dir == '/' && pwd->pw_dir[1]) {
- copymkdir(pwd->pw_dir, cnf->dotdir, dmode, pwd->pw_uid, pwd->pw_gid);
+ copymkdir(pwd->pw_dir, cnf->dotdir, cnf->homemode, pwd->pw_uid, pwd->pw_gid);
pw_log(cnf, mode, W_USER, "%s(%ld) home %s made",
pwd->pw_name, (long) pwd->pw_uid, pwd->pw_dir);
}