FreeBSD Bugzilla – Attachment 7925 Details for
Bug 16880
[PATCH] pw(8) hardcodes directory creation modes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
pw.patch
pw.patch (text/plain; charset=us-ascii), 4.48 KB, created by
k.stevenson
on 2000-03-01 02:38:33 UTC
(
hide
)
Description:
pw.patch
Filename:
MIME Type:
Creator:
k.stevenson
Created:
2000-03-01 02:38:33 UTC
Size:
4.48 KB
patch
obsolete
>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 <ctype.h> > #include <err.h> > #include <fcntl.h> > #include <paths.h> >@@ -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); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 16880
:
7924
| 7925