Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-5]: src/usr.sbin/user Pull up revision 1.35 (requested by wiz):
details: https://anonhg.NetBSD.org/src/rev/402554cea81f
branches: netbsd-1-5
changeset: 490486:402554cea81f
user: jhawk <jhawk%NetBSD.org@localhost>
date: Thu Jan 25 14:30:23 2001 +0000
description:
Pull up revision 1.35 (requested by wiz):
Make moving a user's homedirectory with -md work correctly,
and clarify the meaning of -d in the absence of -m. Fixing PR11707
diffstat:
usr.sbin/user/user.c | 58 +++++++++++++++++++++++++++++----------------------
1 files changed, 33 insertions(+), 25 deletions(-)
diffs (155 lines):
diff -r 237334a1e421 -r 402554cea81f usr.sbin/user/user.c
--- a/usr.sbin/user/user.c Thu Jan 25 13:55:57 2001 +0000
+++ b/usr.sbin/user/user.c Thu Jan 25 14:30:23 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: user.c,v 1.20.4.5 2000/12/14 22:43:35 he Exp $ */
+/* $NetBSD: user.c,v 1.20.4.6 2001/01/25 14:30:23 jhawk Exp $ */
/*
* Copyright (c) 1999 Alistair G. Crooks. All rights reserved.
@@ -35,7 +35,7 @@
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1999 \
The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: user.c,v 1.20.4.5 2000/12/14 22:43:35 he Exp $");
+__RCSID("$NetBSD: user.c,v 1.20.4.6 2001/01/25 14:30:23 jhawk Exp $");
#endif
#include <sys/types.h>
@@ -1002,9 +1002,10 @@
static int
moduser(char *login, char *newlogin, user_t *up)
{
- struct passwd *pwp, *newpwp;
+ struct passwd *pwp;
struct group *grp;
struct tm tm;
+ const char *homedir;
size_t colonc, len, loginc;
FILE *master;
char *buf, *colon, *line;
@@ -1017,7 +1018,9 @@
if ((pwp = getpwnam(login)) == NULL) {
errx(EXIT_FAILURE, "No such user `%s'", login);
}
- newpwp = pwp;
+ /* keep dir name in case we need it for '-m' */
+ homedir = pwp->pw_dir;
+
if ((masterfd = open(_PATH_MASTERPASSWD, O_RDONLY)) < 0) {
err(EXIT_FAILURE, "can't open `%s'", _PATH_MASTERPASSWD);
}
@@ -1043,11 +1046,11 @@
(void) pw_abort();
errx(EXIT_FAILURE, "already a `%s' user", newlogin);
}
- newpwp->pw_name = newlogin;
+ pwp->pw_name = newlogin;
}
if (up->u_flags & F_PASSWORD) {
if (up->u_password != NULL && strlen(up->u_password) == PasswordLength)
- newpwp->pw_passwd = up->u_password;
+ pwp->pw_passwd = up->u_password;
}
if (up->u_flags & F_UID) {
/* check uid isn't already allocated */
@@ -1056,7 +1059,7 @@
(void) pw_abort();
errx(EXIT_FAILURE, "uid %d is already in use", up->u_uid);
}
- newpwp->pw_uid = up->u_uid;
+ pwp->pw_uid = up->u_uid;
}
if (up->u_flags & F_GROUP) {
/* if -g=uid was specified, check gid is unused */
@@ -1066,12 +1069,12 @@
(void) pw_abort();
errx(EXIT_FAILURE, "gid %d is already in use", up->u_uid);
}
- newpwp->pw_gid = up->u_uid;
+ pwp->pw_gid = up->u_uid;
} else if ((grp = getgrnam(up->u_primgrp)) != NULL) {
- newpwp->pw_gid = grp->gr_gid;
+ pwp->pw_gid = grp->gr_gid;
} else if (is_number(up->u_primgrp) &&
(grp = getgrgid((gid_t)atoi(up->u_primgrp))) != NULL) {
- newpwp->pw_gid = grp->gr_gid;
+ pwp->pw_gid = grp->gr_gid;
} else {
(void) close(ptmpfd);
(void) pw_abort();
@@ -1079,20 +1082,20 @@
}
}
if (up->u_flags |= F_INACTIVE)
- newpwp->pw_change = up->u_inactive;
+ pwp->pw_change = up->u_inactive;
if (up->u_flags & F_EXPIRE) {
(void) memset(&tm, 0, sizeof(tm));
if (strptime(up->u_expire, "%c", &tm) == NULL)
warnx("invalid time format `%s'", optarg);
else
- newpwp->pw_expire = mktime(&tm);
+ pwp->pw_expire = mktime(&tm);
}
if (up->u_flags & F_COMMENT)
- newpwp->pw_gecos = up->u_comment;
+ pwp->pw_gecos = up->u_comment;
if (up->u_flags & F_HOMEDIR)
- newpwp->pw_dir = up->u_home;
+ pwp->pw_dir = up->u_home;
if (up->u_flags & F_SHELL)
- newpwp->pw_shell = up->u_shell;
+ pwp->pw_shell = up->u_shell;
}
loginc = strlen(login);
while ((line = fgetln(master, &len)) != NULL) {
@@ -1105,14 +1108,14 @@
if (up != NULL) {
len = (int)asprintf(&buf, "%s:%s:%d:%d::%ld:%ld:%s:%s:%s\n",
newlogin,
- newpwp->pw_passwd,
- newpwp->pw_uid,
- newpwp->pw_gid,
- (long)newpwp->pw_change,
- (long)newpwp->pw_expire,
- newpwp->pw_gecos,
- newpwp->pw_dir,
- newpwp->pw_shell);
+ pwp->pw_passwd,
+ pwp->pw_uid,
+ pwp->pw_gid,
+ (long)pwp->pw_change,
+ (long)pwp->pw_expire,
+ pwp->pw_gecos,
+ pwp->pw_dir,
+ pwp->pw_shell);
if (write(ptmpfd, buf, len) != len) {
(void) close(ptmpfd);
(void) pw_abort();
@@ -1131,11 +1134,11 @@
}
if (up != NULL) {
if ((up->u_flags & F_MKDIR) &&
- asystem("%s %s %s", MV, pwp->pw_dir, newpwp->pw_dir) != 0) {
+ asystem("%s %s %s", MV, homedir, pwp->pw_dir) != 0) {
(void) close(ptmpfd);
(void) pw_abort();
err(EXIT_FAILURE, "can't move `%s' to `%s'",
- pwp->pw_dir, newpwp->pw_dir);
+ homedir, pwp->pw_dir);
}
if (up->u_groupc > 0 &&
!append_group(newlogin, up->u_groupc, up->u_groupv)) {
@@ -1439,6 +1442,11 @@
#endif
}
}
+ if ((u.u_flags & F_MKDIR) && !(u.u_flags & F_HOMEDIR)) {
+ warnx("option 'm' useless without 'd' -- ignored");
+ u.u_flags &= !F_MKDIR;
+ }
+
if (argc == optind) {
usermgmt_usage("usermod");
}
Home |
Main Index |
Thread Index |
Old Index