]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - chpass/field.c
Make pw_scan(3) more compatible with getpwent(3) et. al. when processing
[pw-darwin.git] / chpass / field.c
index ffa79fa31c3a9226c8996b62091603c42e40d351..3b5129c085a1c65237865005c78882762c927564 100644 (file)
@@ -1,4 +1,6 @@
-/*
+/*-
+ * SPDX-License-Identifier: BSD-4-Clause
+ *
  * Copyright (c) 1988, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * Copyright (c) 2002 Networks Associates Technology, Inc.
@@ -56,10 +58,8 @@ __FBSDID("$FreeBSD$");
 #include <grp.h>
 #include <paths.h>
 #include <pwd.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 
 #include "chpass.h"
 
@@ -118,7 +118,7 @@ p_uid(char *p, struct passwd *pw, ENTRY *ep __unused)
        }
        errno = 0;
        id = strtoul(p, &np, 10);
-       if (*np || (id == ULONG_MAX && errno == ERANGE)) {
+       if (*np || (id == (uid_t)ULONG_MAX && errno == ERANGE)) {
                warnx("illegal uid");
                return (-1);
        }
@@ -148,7 +148,7 @@ p_gid(char *p, struct passwd *pw, ENTRY *ep __unused)
        }
        errno = 0;
        id = strtoul(p, &np, 10);
-       if (*np || (id == ULONG_MAX && errno == ERANGE)) {
+       if (*np || (id == (uid_t)ULONG_MAX && errno == ERANGE)) {
                warnx("illegal gid");
                return (-1);
        }
@@ -218,7 +218,6 @@ p_hdir(char *p, struct passwd *pw, ENTRY *ep __unused)
 int
 p_shell(char *p, struct passwd *pw, ENTRY *ep __unused)
 {
-       char *t;
        struct stat sbuf;
 
        if (!*p) {
@@ -230,15 +229,16 @@ p_shell(char *p, struct passwd *pw, ENTRY *ep __unused)
                warnx("%s: current shell non-standard", pw->pw_shell);
                return (-1);
        }
-       if (!(t = ok_shell(p))) {
+       if (!ok_shell(p)) {
                if (!master_mode) {
                        warnx("%s: non-standard shell", p);
                        return (-1);
                }
+               pw->pw_shell = strdup(p);
        }
        else
-               p = t;
-       if (!(pw->pw_shell = strdup(p))) {
+               pw->pw_shell = dup_shell(p);
+       if (!pw->pw_shell) {
                warnx("can't save entry");
                return (-1);
        }