Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Mar 2011 20:13:29 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r219408 - head/usr.sbin/pw
Message-ID:  <201103082013.p28KDTYb085571@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Tue Mar  8 20:13:29 2011
New Revision: 219408
URL: http://svn.freebsd.org/changeset/base/219408

Log:
  Stop hard-coding default directory mode as 0777.

Modified:
  head/usr.sbin/pw/cpdir.c
  head/usr.sbin/pw/pw.h
  head/usr.sbin/pw/pw_conf.c
  head/usr.sbin/pw/pw_user.c

Modified: head/usr.sbin/pw/cpdir.c
==============================================================================
--- head/usr.sbin/pw/cpdir.c	Tue Mar  8 19:49:16 2011	(r219407)
+++ head/usr.sbin/pw/cpdir.c	Tue Mar  8 20:13:29 2011	(r219408)
@@ -41,6 +41,7 @@ static const char rcsid[] =
 #include <sys/param.h>
 #include <dirent.h>
 
+#include "pw.h"
 #include "pwupd.h"
 
 void
@@ -81,7 +82,7 @@ copymkdir(char const * dir, char const *
 						else {
 						    if (S_ISDIR(st.st_mode)) {	/* Recurse for this */
 							if (strcmp(e->d_name, ".") != 0 && strcmp(e->d_name, "..") != 0)
-								copymkdir(dst, src, (st.st_mode & 0777), uid, gid);
+								copymkdir(dst, src, st.st_mode & _DEF_DIRMODE, uid, gid);
 								chflags(dst, st.st_flags);	/* propogate flags */
 						    } else if (S_ISLNK(st.st_mode) && (len = readlink(src, lnk, sizeof(lnk))) != -1) {
 							lnk[len] = '\0';

Modified: head/usr.sbin/pw/pw.h
==============================================================================
--- head/usr.sbin/pw/pw.h	Tue Mar  8 19:49:16 2011	(r219407)
+++ head/usr.sbin/pw/pw.h	Tue Mar  8 20:13:29 2011	(r219408)
@@ -95,6 +95,7 @@ struct userconf
 	int	numgroups;		/* (internal) size of default_group array */
 };
 
+#define	_DEF_DIRMODE	(S_IRWXU | S_IRWXG | S_IRWXO)
 #define _PATH_PW_CONF	"/etc/pw.conf"
 #define _UC_MAXLINE	1024
 #define _UC_MAXSHELLS	32

Modified: head/usr.sbin/pw/pw_conf.c
==============================================================================
--- head/usr.sbin/pw/pw_conf.c	Tue Mar  8 19:49:16 2011	(r219407)
+++ head/usr.sbin/pw/pw_conf.c	Tue Mar  8 20:13:29 2011	(r219408)
@@ -91,7 +91,7 @@ static struct userconf config =
 	NULL,			/* Mail to send to new accounts */
 	"/var/log/userlog",	/* Where to log changes */
 	"/home",		/* Where to create home directory */
-	0777,			/* Home directory perms, modified by umask */
+	_DEF_DIRMODE,		/* Home directory perms, modified by umask */
 	"/bin",			/* Where shells are located */
 	system_shells,		/* List of shells (first is default) */
 	bourne_shell,		/* Default shell */
@@ -302,7 +302,7 @@ read_userconfig(char const * file)
 				case _UC_HOMEMODE:
 					modeset = setmode(q);
 					config.homemode = (q == NULL || !boolean_val(q, 1))
-						? 0777 : getmode(modeset, 0777);
+						? _DEF_DIRMODE : getmode(modeset, _DEF_DIRMODE);
 					free(modeset);
 					break;
 				case _UC_SHELLPATH:

Modified: head/usr.sbin/pw/pw_user.c
==============================================================================
--- head/usr.sbin/pw/pw_user.c	Tue Mar  8 19:49:16 2011	(r219407)
+++ head/usr.sbin/pw/pw_user.c	Tue Mar  8 20:13:29 2011	(r219408)
@@ -107,7 +107,6 @@ pw_user(struct userconf * cnf, int mode,
 	struct stat     st;
 	char            line[_PASSWORD_LEN+1];
 	FILE	       *fp;
-	mode_t dmode;
 	char *dmode_c;
 	void *set = NULL;
 
@@ -151,13 +150,12 @@ pw_user(struct userconf * cnf, int mode,
 		cnf->home = arg->val;
 	}
 
-	dmode = S_IRWXU | S_IRWXG | S_IRWXO;
 	if ((arg = getarg(args, 'M')) != NULL) {
 		dmode_c = arg->val;
 		if ((set = setmode(dmode_c)) == NULL)
 			errx(EX_DATAERR, "invalid directory creation mode '%s'",
 			    dmode_c);
-		cnf->homemode = getmode(set, dmode);
+		cnf->homemode = getmode(set, _DEF_DIRMODE);
 		free(set);
 	}
 
@@ -186,7 +184,7 @@ pw_user(struct userconf * cnf, int mode,
 			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, _DEF_DIRMODE) != -1 || errno == EEXIST) {
 					chown(dbuf, 0, 0);
 					/*
 					 * Skip first "/" and create symlink:
@@ -202,7 +200,7 @@ pw_user(struct userconf * cnf, int mode,
 				while ((p = strchr(++p, '/')) != NULL) {
 					*p = '\0';
 					if (stat(dbuf, &st) == -1) {
-						if (mkdir(dbuf, dmode) == -1)
+						if (mkdir(dbuf, _DEF_DIRMODE) == -1)
 							goto direrr;
 						chown(dbuf, 0, 0);
 					} else if (!S_ISDIR(st.st_mode))
@@ -211,7 +209,7 @@ pw_user(struct userconf * cnf, int mode,
 				}
 			}
 			if (stat(dbuf, &st) == -1) {
-				if (mkdir(dbuf, dmode) == -1) {
+				if (mkdir(dbuf, _DEF_DIRMODE) == -1) {
 				direrr:	err(EX_OSFILE, "mkdir '%s'", dbuf);
 				}
 				chown(dbuf, 0, 0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103082013.p28KDTYb085571>