From owner-freebsd-bugs Tue Feb 29 18:38:41 2000 Delivered-To: freebsd-bugs@freebsd.org Received: from erouter0.it-datacntr.louisville.edu (erouter0.it-datacntr.louisville.edu [136.165.1.36]) by hub.freebsd.org (Postfix) with ESMTP id BC69837BDF6; Tue, 29 Feb 2000 18:38:34 -0800 (PST) (envelope-from k.stevenson@louisville.edu) Received: from osaka.louisville.edu (osaka.louisville.edu [136.165.1.114]) by erouter0.it-datacntr.louisville.edu (Postfix) with ESMTP id 35FCC24D04; Tue, 29 Feb 2000 21:38:34 -0500 (EST) Received: by osaka.louisville.edu (Postfix, from userid 15) id B851318605; Tue, 29 Feb 2000 21:38:33 -0500 (EST) Date: Tue, 29 Feb 2000 21:38:33 -0500 From: Keith Stevenson To: FreeBSD-gnats-submit@freebsd.org Cc: freebsd-bugs@freebsd.org Subject: Re: bin/16880: [PATCH] pw(8) hardcodes directory creation modes Message-ID: <20000229213833.B82422@osaka.louisville.edu> References: <20000221154056.534B418605@osaka.louisville.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="PNTmBPCT7hxwcZjr" X-Mailer: Mutt 1.0pre3i In-Reply-To: <20000221154056.534B418605@osaka.louisville.edu> Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Attached is an updated patch which fixes some nits raised by Sheldon Hearn. Regards, --Keith Stevenson-- -- Keith Stevenson System Programmer - Data Center Services - University of Louisville k.stevenson@louisville.edu PGP key fingerprint = 4B 29 A8 95 A8 82 EA A2 29 CE 68 DE FC EE B6 A0 --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="pw.patch" cvs server: Diffing . Index: pw.8 =================================================================== RCS file: /opt/ncvs/src/usr.sbin/pw/pw.8,v retrieving revision 1.17 diff -u -r1.17 pw.8 --- pw.8 1999/08/28 01:19:18 1.17 +++ pw.8 2000/03/01 02:01:10 @@ -41,6 +41,7 @@ .Op Fl u Ar uid .Op Fl c Ar comment .Op Fl d Ar dir +.Op Fl U Ar umask .Op Fl e Ar date .Op Fl p Ar date .Op Fl g Ar group @@ -346,6 +347,12 @@ - normally .Pa /home with the account name as a subdirectory. +.It Fl U Ar umask +Set the +.Xr umask 2 +to be used when creating the account's home directory and skeleton files. +Default is parent process +.Xr umask 2 . .It Fl e Ar date Set the account's expiration date. Format of the date is either a UNIX time in decimal, or a date in @@ -870,6 +877,7 @@ .Sh SEE ALSO .Xr chpass 1 , .Xr passwd 1 , +.Xr umask 2 , .Xr group 5 , .Xr login.conf 5 , .Xr passwd 5 , Index: pw.c =================================================================== RCS file: /opt/ncvs/src/usr.sbin/pw/pw.c,v retrieving revision 1.18 diff -u -r1.18 pw.c --- pw.c 2000/01/15 00:20:20 1.18 +++ pw.c 2000/03/01 02:01:11 @@ -29,6 +29,7 @@ "$FreeBSD: src/usr.sbin/pw/pw.c,v 1.18 2000/01/15 00:20:20 davidn Exp $"; #endif /* not lint */ +#include #include #include #include @@ -89,6 +90,8 @@ static struct cargs arglist; +static mode_t mask; + static int getindex(const char *words[], const char *word); static void cmdhelp(int mode, int which); @@ -105,13 +108,13 @@ static const char *opts[W_NUM][M_NUM] = { { /* user */ - "V:C:qn:u:c:d:e:p:g:G:mk:s:oL:i:w:h:Db:NPy:Y", - "V:C:qn:u:rY", - "V:C:qn:u:c:d:e:p:g:G:ml:k:s:w:L:h:FNPY", - "V:C:qn:u:FPa7", - "V:C:q", - "V:C:q", - "V:C:q" + "V:C:U:qn:u:c:d:e:p:g:G:mk:s:oL:i:w:h:Db:NPy:Y", + "V:C:U:qn:u:rY", + "V:C:U:qn:u:c:d:e:p:g:G:ml:k:s:w:L:h:FNPY", + "V:C:U:qn:u:FPa7", + "V:C:U:q", + "V:C:U:q", + "V:C:U:q" }, { /* grp */ "V:C:qn:g:h:M:pNPY", @@ -128,7 +131,6 @@ pw_group }; - umask(0); /* We wish to handle this manually */ LIST_INIT(&arglist); /* @@ -221,6 +223,30 @@ setgrdir(etcpath); } } + + /* + * Set the umask if specified on the command line + */ + + if (getarg(&arglist, 'U') != NULL) { + char * um = getarg(&arglist, 'U')-> val; + if (um != NULL) { + if (isdigit(*um)) { + mask = 0; + do { + if (*um >= '8' || *um < '0') { + fprintf(stderr, "Illegal umask: %s\n", um); + exit(EX_USAGE); + } + mask = (mask << 3) + (*um - '0'); + } while (*++um != '\0'); + umask(mask); + } else { + fprintf(stderr, "Illegal umask: %s\n", um); + exit(EX_USAGE); + } + } + } /* * Now, let's do the common initialisation @@ -301,6 +327,7 @@ "\t-u uid user id\n" "\t-c comment user name/comment\n" "\t-d directory home directory\n" + "\t-U umask Directory/file creation mask\n" "\t-e date account expiry date\n" "\t-p date password expiry date\n" "\t-g grp initial group\n" Index: pw_user.c =================================================================== RCS file: /opt/ncvs/src/usr.sbin/pw/pw_user.c,v retrieving revision 1.34 diff -u -r1.34 pw_user.c --- pw_user.c 2000/01/15 00:20:21 1.34 +++ pw_user.c 2000/03/01 02:01:15 @@ -179,7 +179,7 @@ if (strchr(cnf->home+1, '/') == NULL) { strcpy(dbuf, "/usr"); strncat(dbuf, cnf->home, MAXPATHLEN-5); - if (mkdir(dbuf, 0755) != -1 || errno == EEXIST) { + if (mkdir(dbuf, 0777) != -1 || errno == EEXIST) { chown(dbuf, 0, 0); symlink(dbuf, cnf->home); } @@ -191,7 +191,7 @@ while ((p = strchr(++p, '/')) != NULL) { *p = '\0'; if (stat(dbuf, &st) == -1) { - if (mkdir(dbuf, 0755) == -1) + if (mkdir(dbuf, 0777) == -1) goto direrr; chown(dbuf, 0, 0); } else if (!S_ISDIR(st.st_mode)) @@ -200,7 +200,7 @@ } } if (stat(dbuf, &st) == -1) { - if (mkdir(dbuf, 0755) == -1) { + if (mkdir(dbuf, 0777) == -1) { direrr: err(EX_OSFILE, "mkdir '%s'", dbuf); } chown(dbuf, 0, 0); @@ -734,7 +734,7 @@ * 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, 0755, pwd->pw_uid, pwd->pw_gid); + copymkdir(pwd->pw_dir, cnf->dotdir, 0777, 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); } --PNTmBPCT7hxwcZjr-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message