Lines Matching +full:- +full:grp

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
39 #include <grp.h>
54 #define LOGNAMESIZE (MAXLOGNAME-1)
62 -1,
63 -1,
95 if (fstatat(dfd, dir, &st, 0) != -1) { in mkdir_home_parents()
113 if (fstatat(dfd, dirs, &st, 0) == -1) { in mkdir_home_parents()
116 if (fstatat(dfd, dirs, &st, 0) == -1) { in mkdir_home_parents()
117 if (mkdirat(dfd, dirs, _DEF_DIRMODE) == -1) in mkdir_home_parents()
123 if (fstatat(dfd, dirs, &st, 0) == -1) { in mkdir_home_parents()
124 if (mkdirat(dfd, dirs, _DEF_DIRMODE) == -1) in mkdir_home_parents()
136 int skelfd = -1; in create_and_populate_homedir()
139 mkdir_home_parents(conf.rootfd, pwd->pw_dir); in create_and_populate_homedir()
147 copymkdir(conf.rootfd, pwd->pw_dir, skelfd, homemode, pwd->pw_uid, in create_and_populate_homedir()
148 pwd->pw_gid, 0); in create_and_populate_homedir()
150 pwd->pw_name, (uintmax_t)pwd->pw_uid, pwd->pw_dir); in create_and_populate_homedir()
162 if (fd == '-') { in pw_set_passwd()
163 if (!pwd->pw_passwd || *pwd->pw_passwd != '*') { in pw_set_passwd()
164 pwd->pw_passwd = "*"; /* No access */ in pw_set_passwd()
171 if (tcgetattr(fd, &t) == -1) in pw_set_passwd()
180 pwd->pw_name); in pw_set_passwd()
184 b = read(fd, line, sizeof(line) - 1); in pw_set_passwd()
192 err(EX_IOERR, "-%c file descriptor", in pw_set_passwd()
203 pwd->pw_passwd = strdup(line); in pw_set_passwd()
210 pwd->pw_passwd = pw_pwcrypt(line); in pw_set_passwd()
226 if (rc == -1) in perform_chgpwent()
227 errx(EX_IOERR, "user '%s' does not exist (NIS?)", pwd->pw_name); in perform_chgpwent()
233 if (rc == -1) in perform_chgpwent()
234 warn("User '%s' not found in NIS passwd", pwd->pw_name); in perform_chgpwent()
237 /* NOTE: NIS-only update errors are not fatal */ in perform_chgpwent()
257 uid_t id = (uid_t)-1; in pw_userlock()
270 if (pwd == NULL && id != (uid_t)-1) { in pw_userlock()
273 name = pwd->pw_name; in pw_userlock()
276 if (id == (uid_t)-1) in pw_userlock()
282 name = pwd->pw_name; in pw_userlock()
284 if (strncmp(pwd->pw_passwd, locked_str, sizeof(locked_str) -1) == 0) in pw_userlock()
287 errx(EX_DATAERR, "user '%s' is already locked", pwd->pw_name); in pw_userlock()
289 errx(EX_DATAERR, "user '%s' is not locked", pwd->pw_name); in pw_userlock()
292 asprintf(&passtmp, "%s%s", locked_str, pwd->pw_passwd); in pw_userlock()
295 pwd->pw_passwd = passtmp; in pw_userlock()
297 pwd->pw_passwd += sizeof(locked_str)-1; in pw_userlock()
311 uid_t uid = (uid_t) - 1; in pw_uidpolicy()
321 (uintmax_t)pwd->pw_uid); in pw_uidpolicy()
329 if (cnf->min_uid >= cnf->max_uid) { /* Sanity in pw_uidpolicy()
331 cnf->min_uid = 1000; in pw_uidpolicy()
332 cnf->max_uid = 32000; in pw_uidpolicy()
334 bm = bm_alloc(cnf->max_uid - cnf->min_uid + 1); in pw_uidpolicy()
341 if (pwd->pw_uid >= (uid_t) cnf->min_uid && pwd->pw_uid <= (uid_t) cnf->max_uid) in pw_uidpolicy()
342 bm_setbit(&bm, pwd->pw_uid - cnf->min_uid); in pw_uidpolicy()
348 if (cnf->reuse_uids || (uid = (uid_t) (bm_lastset(&bm) + cnf->min_uid + 1)) > cnf->max_uid) in pw_uidpolicy()
349 uid = (uid_t) (bm_firstunset(&bm) + cnf->min_uid); in pw_uidpolicy()
354 if (uid < cnf->min_uid || uid > cnf->max_uid) in pw_uidpolicy()
355 errx(EX_SOFTWARE, "unable to allocate a new uid - range fully used"); in pw_uidpolicy()
363 struct group *grp; in pw_gidpolicy() local
364 gid_t gid = (uid_t) - 1; in pw_gidpolicy()
371 if ((grp = GETGRNAM(grname)) == NULL) { in pw_gidpolicy()
373 grp = GETGRGID(gid); in pw_gidpolicy()
375 gid = grp->gr_gid; in pw_gidpolicy()
376 } else if ((grp = GETGRNAM(nam)) != NULL) { in pw_gidpolicy()
377 gid = grp->gr_gid; /* Already created? Use it anyway... */ in pw_gidpolicy()
379 intmax_t grid = -1; in pw_gidpolicy()
382 * We need to auto-create a group with the user's name. We in pw_gidpolicy()
395 if (grid == -1) in pw_gidpolicy()
397 groupadd(cnf, nam, grid, NULL, -1, false, false, false); in pw_gidpolicy()
398 if ((grp = GETGRNAM(nam)) != NULL) in pw_gidpolicy()
399 gid = grp->gr_gid; in pw_gidpolicy()
414 if (cnf->home == NULL || *cnf->home == '\0') in pw_homepolicy()
416 snprintf(home, sizeof(home), "%s/%s", cnf->home, user); in pw_homepolicy()
460 return shell_path(cnf->shelldir, cnf->shells, cnf->shell_default); in pw_shellpolicy()
480 salt[i] = chars[arc4random_uniform(sizeof(chars) - 1)]; in pw_pwcrypt()
497 switch (cnf->default_password) { in pw_password()
501 l = (arc4random() % 8 + 8); /* 8 - 16 chars */ in pw_password()
503 pwbuf[i] = chars[arc4random_uniform(sizeof(chars)-1)]; in pw_password()
509 if (conf.fd == -1) { in pw_password()
519 case P_NO: /* No login - default */ in pw_password()
532 struct group *grp = GETGRGID(pwd->pw_gid); in print_user() local
545 if ((p = strtok(pwd->pw_gecos, ",")) != NULL) { in print_user()
561 int l = strlen(pwd->pw_name); in print_user()
565 memmove(p, pwd->pw_name, l); in print_user()
568 if (pwd->pw_expire > (time_t)0 && (tptr = localtime(&pwd->pw_expire)) != NULL) in print_user()
570 if (pwd->pw_change > (time_t)0 && (tptr = localtime(&pwd->pw_change)) != NULL) in print_user()
572 printf("Login Name: %-15s #%-12ju Group: %-15s #%ju\n" in print_user()
574 " Home: %-26.26s Class: %s\n" in print_user()
575 " Shell: %-26.26s Office: %s\n" in print_user()
576 "Work Phone: %-26.26s Home Phone: %s\n" in print_user()
577 "Acc Expire: %-26.26s Pwd Expire: %s\n", in print_user()
578 pwd->pw_name, (uintmax_t)pwd->pw_uid, in print_user()
579 grp ? grp->gr_name : "(invalid)", (uintmax_t)pwd->pw_gid, in print_user()
580 uname, pwd->pw_dir, pwd->pw_class, in print_user()
581 pwd->pw_shell, office, wphone, hphone, in print_user()
585 while ((grp=GETGRENT()) != NULL) { in print_user()
587 if (grp->gr_mem != NULL) { in print_user()
588 while (grp->gr_mem[i] != NULL) { in print_user()
589 if (strcmp(grp->gr_mem[i], pwd->pw_name)==0) { in print_user()
590 printf(j++ == 0 ? " Groups: %s" : ",%s", grp->gr_name); in print_user()
619 /* Userids and groups can not have a leading '-'. */ in pw_checkname()
620 if (*ch == '-') in pw_checkname()
631 /* 8-bit characters are only allowed in GECOS fields */ in pw_checkname()
653 showch, (ch - name), showtype); in pw_checkname()
655 if (!gecos && (ch - name) > LOGNAMESIZE) in pw_checkname()
674 if (strncmp(e->d_name, ".lock", 5) != 0 && in rmat()
675 stat(e->d_name, &st) == 0 && in rmat()
680 e->d_name, in rmat()
704 while ((ch = getopt(argc, argv, "C:q")) != -1) { in pw_user_next()
716 argc -= optind; in pw_user_next()
726 next = pw_uidpolicy(cnf, -1); in pw_user_next()
739 intmax_t id = -1; in pw_user_show()
754 while ((ch = getopt(argc, argv, "C:qn:u:FPa7")) != -1) { in pw_user_show()
784 argc -= optind; in pw_user_show()
823 struct group *gr, *grp; in pw_user_del() local
831 intmax_t id = -1; in pw_user_del()
844 while ((ch = getopt(argc, argv, "C:qn:u:rYy:")) != -1) { in pw_user_del()
871 argc -= optind; in pw_user_del()
885 nispasswd = cnf->nispasswd; in pw_user_del()
895 ((pwd->pw_fields & _PWF_SOURCE) != _PWF_FILES)) { in pw_user_del()
896 if ((pwd->pw_fields & _PWF_SOURCE) == _PWF_NIS) { in pw_user_del()
906 id = pwd->pw_uid; in pw_user_del()
908 name = pwd->pw_name; in pw_user_del()
910 if (strcmp(pwd->pw_name, "root") == 0) in pw_user_del()
915 snprintf(file, sizeof(file), "/var/cron/tabs/%s", pwd->pw_name); in pw_user_del()
919 "-u", in pw_user_del()
920 pwd->pw_name, in pw_user_del()
921 "-r", in pw_user_del()
939 snprintf(file, sizeof(file), "%s/%s", _PATH_MAILDIR, pwd->pw_name); in pw_user_del()
940 strlcpy(home, pwd->pw_dir, sizeof(home)); in pw_user_del()
941 gr = GETGRGID(pwd->pw_gid); in pw_user_del()
943 strlcpy(grname, gr->gr_name, LOGNAMESIZE); in pw_user_del()
948 if (rc == -1) in pw_user_del()
949 err(EX_IOERR, "user '%s' does not exist", pwd->pw_name); in pw_user_del()
955 if (rc == -1) in pw_user_del()
957 pwd->pw_name); in pw_user_del()
962 grp = GETGRNAM(name); in pw_user_del()
963 if (grp != NULL && in pw_user_del()
964 (grp->gr_mem == NULL || *grp->gr_mem == NULL) && in pw_user_del()
968 while ((grp = GETGRENT()) != NULL) { in pw_user_del()
971 if (grp->gr_mem == NULL) in pw_user_del()
974 for (i = 0; grp->gr_mem[i] != NULL; i++) { in pw_user_del()
975 if (strcmp(grp->gr_mem[i], name) != 0) in pw_user_del()
978 for (j = i; grp->gr_mem[j] != NULL; j++) in pw_user_del()
979 grp->gr_mem[j] = grp->gr_mem[j+1]; in pw_user_del()
980 strlcpy(group, grp->gr_name, MAXLOGNAME); in pw_user_del()
981 chggrent(group, grp); in pw_user_del()
1000 fstatat(conf.rootfd, home + 1, &st, 0) != -1) { in pw_user_del()
1004 fstatat(conf.rootfd, home + 1, &st, 0) == -1 ? "" : "not " in pw_user_del()
1016 while ((ch = getopt(argc, argv, "Cq")) != -1) { in pw_user_lock()
1026 argc -= optind; in pw_user_lock()
1039 while ((ch = getopt(argc, argv, "Cq")) != -1) { in pw_user_unlock()
1049 argc -= optind; in pw_user_unlock()
1061 struct group *grp; in group_from_name_or_id() local
1064 if ((grp = GETGRNAM(name)) == NULL) { in group_from_name_or_id()
1068 grp = GETGRGID(id); in group_from_name_or_id()
1069 if (grp == NULL) in group_from_name_or_id()
1073 return (grp); in group_from_name_or_id()
1079 struct group *grp; in split_groups() local
1086 grp = group_from_name_or_id(p); in split_groups()
1087 sl_add(*groups, newstr(grp->gr_name)); in split_groups()
1094 struct group *grp; in validate_grname() local
1097 cnf->default_group = ""; in validate_grname()
1100 grp = group_from_name_or_id(group); in validate_grname()
1101 cnf->default_group = newstr(grp->gr_name); in validate_grname()
1122 errx(EX_DATAERR, "-%c argument must be numeric " in validate_expire()
1131 if (cmdcnf->default_password < 0) in mix_config()
1132 cmdcnf->default_password = cfg->default_password; in mix_config()
1133 if (cmdcnf->reuse_uids == 0) in mix_config()
1134 cmdcnf->reuse_uids = cfg->reuse_uids; in mix_config()
1135 if (cmdcnf->reuse_gids == 0) in mix_config()
1136 cmdcnf->reuse_gids = cfg->reuse_gids; in mix_config()
1137 if (cmdcnf->nispasswd == NULL) in mix_config()
1138 cmdcnf->nispasswd = cfg->nispasswd; in mix_config()
1139 if (cmdcnf->dotdir == NULL) in mix_config()
1140 cmdcnf->dotdir = cfg->dotdir; in mix_config()
1141 if (cmdcnf->newmail == NULL) in mix_config()
1142 cmdcnf->newmail = cfg->newmail; in mix_config()
1143 if (cmdcnf->logfile == NULL) in mix_config()
1144 cmdcnf->logfile = cfg->logfile; in mix_config()
1145 if (cmdcnf->home == NULL) in mix_config()
1146 cmdcnf->home = cfg->home; in mix_config()
1147 if (cmdcnf->homemode == 0) in mix_config()
1148 cmdcnf->homemode = cfg->homemode; in mix_config()
1149 if (cmdcnf->shelldir == NULL) in mix_config()
1150 cmdcnf->shelldir = cfg->shelldir; in mix_config()
1151 if (cmdcnf->shells == NULL) in mix_config()
1152 cmdcnf->shells = cfg->shells; in mix_config()
1153 if (cmdcnf->shell_default == NULL) in mix_config()
1154 cmdcnf->shell_default = cfg->shell_default; in mix_config()
1155 if (cmdcnf->default_group == NULL) in mix_config()
1156 cmdcnf->default_group = cfg->default_group; in mix_config()
1157 if (cmdcnf->groups == NULL) in mix_config()
1158 cmdcnf->groups = cfg->groups; in mix_config()
1159 if (cmdcnf->default_class == NULL) in mix_config()
1160 cmdcnf->default_class = cfg->default_class; in mix_config()
1161 if (cmdcnf->min_uid == 0) in mix_config()
1162 cmdcnf->min_uid = cfg->min_uid; in mix_config()
1163 if (cmdcnf->max_uid == 0) in mix_config()
1164 cmdcnf->max_uid = cfg->max_uid; in mix_config()
1165 if (cmdcnf->min_gid == 0) in mix_config()
1166 cmdcnf->min_gid = cfg->min_gid; in mix_config()
1167 if (cmdcnf->max_gid == 0) in mix_config()
1168 cmdcnf->max_gid = cfg->max_gid; in mix_config()
1169 if (cmdcnf->expire_days < 0) in mix_config()
1170 cmdcnf->expire_days = cfg->expire_days; in mix_config()
1171 if (cmdcnf->password_days < 0) in mix_config()
1172 cmdcnf->password_days = cfg->password_days; in mix_config()
1180 struct group *grp; in pw_user_add() local
1189 intmax_t id = -1; in pw_user_add()
1191 int rc, ch, fd = -1; in pw_user_add()
1203 cmdcnf->default_password = cmdcnf->expire_days = cmdcnf->password_days = -1; in pw_user_add()
1213 while ((ch = getopt(argc, argv, args)) != -1) { in pw_user_add()
1235 cmdcnf->expire_days = validate_expire(optarg, ch); in pw_user_add()
1237 cmdcnf->expire_days = parse_date(now, optarg); in pw_user_add()
1241 cmdcnf->password_days = validate_expire(optarg, ch); in pw_user_add()
1243 cmdcnf->password_days = parse_date(now, optarg); in pw_user_add()
1250 split_groups(&cmdcnf->groups, optarg); in pw_user_add()
1256 cmdcnf->homemode = validate_mode(optarg); in pw_user_add()
1262 if (fstatat(conf.rootfd, walk, &st, 0) == -1) in pw_user_add()
1268 cmdcnf->dotdir = skel; in pw_user_add()
1271 cmdcnf->shell_default = optarg; in pw_user_add()
1277 cmdcnf->default_class = pw_checkname(optarg, 0); in pw_user_add()
1286 if (fd != -1) in pw_user_add()
1287 errx(EX_USAGE, "'-h' and '-H' are mutually " in pw_user_add()
1291 if (fd == '-') in pw_user_add()
1292 errx(EX_USAGE, "-H expects a file descriptor"); in pw_user_add()
1295 if (fd != -1) in pw_user_add()
1296 errx(EX_USAGE, "'-h' and '-H' are mutually " in pw_user_add()
1304 cmdcnf->home = optarg; in pw_user_add()
1313 cmdcnf->nispasswd = optarg; in pw_user_add()
1322 argc -= optind; in pw_user_add()
1337 cmdcnf->default_password = passwd_val(default_passwd, in pw_user_add()
1338 cnf->default_password); in pw_user_add()
1341 errx(EX_DATAERR, "can't combine `-D' with `-n name'"); in pw_user_add()
1344 cmdcnf->min_uid = pw_checkid(p, UID_MAX); in pw_user_add()
1345 if (cmdcnf->min_uid == 0) in pw_user_add()
1346 cmdcnf->min_uid = 1000; in pw_user_add()
1348 cmdcnf->max_uid = pw_checkid(p, UID_MAX); in pw_user_add()
1349 if (cmdcnf->max_uid == 0) in pw_user_add()
1350 cmdcnf->max_uid = 32000; in pw_user_add()
1354 cmdcnf->min_gid = pw_checkid(p, GID_MAX); in pw_user_add()
1355 if (cmdcnf->min_gid == 0) in pw_user_add()
1356 cmdcnf->min_gid = 1000; in pw_user_add()
1358 cmdcnf->max_gid = pw_checkid(p, GID_MAX); in pw_user_add()
1359 if (cmdcnf->max_gid == 0) in pw_user_add()
1360 cmdcnf->max_gid = 32000; in pw_user_add()
1379 grname = cmdcnf->default_group; in pw_user_add()
1382 pwd->pw_name = name; in pw_user_add()
1383 pwd->pw_class = cmdcnf->default_class ? cmdcnf->default_class : ""; in pw_user_add()
1384 pwd->pw_uid = pw_uidpolicy(cmdcnf, id); in pw_user_add()
1385 pwd->pw_gid = pw_gidpolicy(cnf, grname, pwd->pw_name, in pw_user_add()
1386 (gid_t) pwd->pw_uid, dryrun); in pw_user_add()
1388 /* cmdcnf->password_days and cmdcnf->expire_days hold unixtime here */ in pw_user_add()
1389 if (cmdcnf->password_days > 0) in pw_user_add()
1390 pwd->pw_change = cmdcnf->password_days; in pw_user_add()
1391 if (cmdcnf->expire_days > 0) in pw_user_add()
1392 pwd->pw_expire = cmdcnf->expire_days; in pw_user_add()
1394 pwd->pw_dir = pw_homepolicy(cmdcnf, homedir, pwd->pw_name); in pw_user_add()
1395 pwd->pw_shell = pw_shellpolicy(cmdcnf); in pw_user_add()
1400 pwd->pw_passwd = pw_password(cmdcnf, pwd->pw_name); in pw_user_add()
1401 if (pwd->pw_uid == 0 && strcmp(pwd->pw_name, "root") != 0) in pw_user_add()
1403 "(superuser access!)", pwd->pw_name); in pw_user_add()
1405 pwd->pw_gecos = gecos; in pw_user_add()
1407 if (fd != -1) in pw_user_add()
1414 if (rc == -1) in pw_user_add()
1416 pwd->pw_name); in pw_user_add()
1420 if (nis && cmdcnf->nispasswd && *cmdcnf->nispasswd == '/') { in pw_user_add()
1421 printf("%s\n", cmdcnf->nispasswd); in pw_user_add()
1422 rc = addnispwent(cmdcnf->nispasswd, pwd); in pw_user_add()
1423 if (rc == -1) in pw_user_add()
1425 pwd->pw_name); in pw_user_add()
1428 /* NOTE: we treat NIS-only update errors as non-fatal */ in pw_user_add()
1431 if (cmdcnf->groups != NULL) { in pw_user_add()
1432 for (i = 0; i < cmdcnf->groups->sl_cur; i++) { in pw_user_add()
1433 grp = GETGRNAM(cmdcnf->groups->sl_str[i]); in pw_user_add()
1435 if (grp_has_member(grp, pwd->pw_name)) in pw_user_add()
1437 grp = gr_add(grp, pwd->pw_name); in pw_user_add()
1439 * grp can only be NULL in 2 cases: in pw_user_add()
1440 * - the new member is already a member in pw_user_add()
1441 * - a problem with memory occurs in pw_user_add()
1444 if (grp == NULL) in pw_user_add()
1446 chggrent(grp->gr_name, grp); in pw_user_add()
1447 free(grp); in pw_user_add()
1455 grp = GETGRGID(pwd->pw_gid); in pw_user_add()
1457 pwd->pw_name, (uintmax_t)pwd->pw_uid, in pw_user_add()
1458 grp ? grp->gr_name : "unknown", in pw_user_add()
1459 (uintmax_t)(grp ? grp->gr_gid : (uid_t)-1), in pw_user_add()
1460 pwd->pw_gecos, pwd->pw_dir, pwd->pw_shell); in pw_user_add()
1469 pwd->pw_name); in pw_user_add()
1472 fchownat(conf.rootfd, path + 1, pwd->pw_uid, pwd->pw_gid, in pw_user_add()
1478 * that this also `works' for editing users if -m is used, but in pw_user_add()
1481 if (PWALTDIR() != PWF_ALT && createhome && pwd->pw_dir && in pw_user_add()
1482 *pwd->pw_dir == '/' && pwd->pw_dir[1]) in pw_user_add()
1483 create_and_populate_homedir(cmdcnf, pwd, cmdcnf->dotdir, in pw_user_add()
1484 cmdcnf->homemode, false); in pw_user_add()
1486 if (!PWALTDIR() && cmdcnf->newmail && *cmdcnf->newmail && in pw_user_add()
1487 (fp = fopen(cnf->newmail, "r")) != NULL) { in pw_user_add()
1488 if ((pfp = popen(_PATH_SENDMAIL " -t", "w")) == NULL) in pw_user_add()
1492 "Subject: Welcome!\n\n", pwd->pw_name); in pw_user_add()
1499 pwd->pw_name, (uintmax_t)pwd->pw_uid); in pw_user_add()
1515 struct group *grp; in pw_user_mod() local
1523 intmax_t id = -1; in pw_user_mod()
1524 int ch, fd = -1; in pw_user_mod()
1531 expire_time = password_time = -1; in pw_user_mod()
1546 while ((ch = getopt(argc, argv, args)) != -1) { in pw_user_mod()
1592 if (fstatat(conf.rootfd, walk, &st, 0) == -1) in pw_user_mod()
1609 if (fd != -1) in pw_user_mod()
1610 errx(EX_USAGE, "'-h' and '-H' are mutually " in pw_user_mod()
1614 if (fd == '-') in pw_user_mod()
1615 errx(EX_USAGE, "-H expects a file descriptor"); in pw_user_mod()
1618 if (fd != -1) in pw_user_mod()
1619 errx(EX_USAGE, "'-h' and '-H' are mutually " in pw_user_mod()
1639 argc -= optind; in pw_user_mod()
1664 name = pwd->pw_name; in pw_user_mod()
1667 nispasswd = cnf->nispasswd; in pw_user_mod()
1670 ((pwd->pw_fields & _PWF_SOURCE) != _PWF_FILES)) { in pw_user_mod()
1671 if ((pwd->pw_fields & _PWF_SOURCE) == _PWF_NIS) { in pw_user_mod()
1682 if (strcmp(pwd->pw_name, "root") == 0) in pw_user_mod()
1684 if (strcmp(pwd->pw_name, newname) != 0) { in pw_user_mod()
1685 pwd->pw_name = pw_checkname(newname, 0); in pw_user_mod()
1690 if (id >= 0 && pwd->pw_uid != id) { in pw_user_mod()
1691 pwd->pw_uid = id; in pw_user_mod()
1693 if (pwd->pw_uid != 0 && strcmp(pwd->pw_name, "root") == 0) in pw_user_mod()
1695 if (pwd->pw_uid == 0 && strcmp(pwd->pw_name, "root") != 0) in pw_user_mod()
1697 "(superuser access!)", pwd->pw_name); in pw_user_mod()
1700 if (grname && pwd->pw_uid != 0) { in pw_user_mod()
1701 grp = GETGRNAM(grname); in pw_user_mod()
1702 if (grp == NULL) in pw_user_mod()
1703 grp = GETGRGID(pw_checkid(grname, GID_MAX)); in pw_user_mod()
1704 if (grp->gr_gid != pwd->pw_gid) { in pw_user_mod()
1705 pwd->pw_gid = grp->gr_gid; in pw_user_mod()
1711 if (password_time >= 0 && pwd->pw_change != password_time) { in pw_user_mod()
1712 pwd->pw_change = password_time; in pw_user_mod()
1716 if (expire_time >= 0 && pwd->pw_expire != expire_time) { in pw_user_mod()
1717 pwd->pw_expire = expire_time; in pw_user_mod()
1722 shell = shell_path(cnf->shelldir, cnf->shells, shell); in pw_user_mod()
1725 if (strcmp(shell, pwd->pw_shell) != 0) { in pw_user_mod()
1726 pwd->pw_shell = shell; in pw_user_mod()
1731 if (class && strcmp(pwd->pw_class, class) != 0) { in pw_user_mod()
1732 pwd->pw_class = class; in pw_user_mod()
1736 if (homedir && strcmp(pwd->pw_dir, homedir) != 0) { in pw_user_mod()
1737 pwd->pw_dir = homedir; in pw_user_mod()
1739 if (fstatat(conf.rootfd, pwd->pw_dir, &st, 0) == -1) { in pw_user_mod()
1742 pwd->pw_dir); in pw_user_mod()
1745 pwd->pw_dir); in pw_user_mod()
1749 if (passwd && conf.fd == -1) { in pw_user_mod()
1754 cnf->default_password = passwd_val(passwd, in pw_user_mod()
1755 cnf->default_password); in pw_user_mod()
1756 pwd->pw_passwd = pw_password(cnf, pwd->pw_name); in pw_user_mod()
1760 if (gecos && strcmp(pwd->pw_gecos, gecos) != 0) { in pw_user_mod()
1761 pwd->pw_gecos = gecos; in pw_user_mod()
1765 if (fd != -1) in pw_user_mod()
1777 while ((grp = GETGRENT()) != NULL) { in pw_user_mod()
1778 if (grp->gr_mem == NULL) in pw_user_mod()
1780 for (i = 0; grp->gr_mem[i] != NULL; i++) { in pw_user_mod()
1781 if (strcmp(grp->gr_mem[i] , name) != 0) in pw_user_mod()
1783 for (j = i; grp->gr_mem[j] != NULL ; j++) in pw_user_mod()
1784 grp->gr_mem[j] = grp->gr_mem[j+1]; in pw_user_mod()
1785 chggrent(grp->gr_name, grp); in pw_user_mod()
1791 for (i = 0; i < groups->sl_cur; i++) { in pw_user_mod()
1792 grp = GETGRNAM(groups->sl_str[i]); in pw_user_mod()
1793 grp = gr_add(grp, pwd->pw_name); in pw_user_mod()
1794 if (grp == NULL) in pw_user_mod()
1796 chggrent(grp->gr_name, grp); in pw_user_mod()
1797 free(grp); in pw_user_mod()
1803 while ((grp = GETGRENT()) != NULL) { in pw_user_mod()
1804 if (grp->gr_mem == NULL) in pw_user_mod()
1806 for (i = 0; grp->gr_mem[i] != NULL; i++) { in pw_user_mod()
1807 if (strcmp(grp->gr_mem[i], name) != 0) in pw_user_mod()
1809 grp->gr_mem[i] = newname; in pw_user_mod()
1810 chggrent(grp->gr_name, grp); in pw_user_mod()
1822 grp = GETGRGID(pwd->pw_gid); in pw_user_mod()
1824 pwd->pw_name, (uintmax_t)pwd->pw_uid, in pw_user_mod()
1825 grp ? grp->gr_name : "unknown", in pw_user_mod()
1826 (uintmax_t)(grp ? grp->gr_gid : (uid_t)-1), in pw_user_mod()
1827 pwd->pw_gecos, pwd->pw_dir, pwd->pw_shell); in pw_user_mod()
1831 * that this also `works' for editing users if -m is used, but in pw_user_mod()
1834 if (PWALTDIR() != PWF_ALT && createhome && pwd->pw_dir && in pw_user_mod()
1835 *pwd->pw_dir == '/' && pwd->pw_dir[1]) { in pw_user_mod()
1837 skel = cnf->dotdir; in pw_user_mod()
1839 homemode = cnf->homemode; in pw_user_mod()