*/
#ifndef lint
-static char sccsid[] = "@(#)pw_scan.c 8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)pw_scan.c 8.2 (Berkeley) %G%";
#endif /* not lint */
/*
*/
#include <sys/param.h>
+
+#include <err.h>
#include <fcntl.h>
#include <pwd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <unistd.h>
-extern char *progname;
+#include "pw_scan.h"
+int
pw_scan(bp, pw)
char *bp;
struct passwd *pw;
{
- register long id;
- register int root;
- register char *p, *sh;
- char *getusershell();
+ long id;
+ int root;
+ char *p, *sh;
if (!(pw->pw_name = strsep(&bp, ":"))) /* login */
goto fmt;
goto fmt;
id = atol(p);
if (root && id) {
- (void)fprintf(stderr, "%s: root uid should be 0", progname);
- return(0);
+ warnx("root uid should be 0");
+ return (0);
}
if (id > USHRT_MAX) {
- (void)fprintf(stderr,
- "%s: %s > max uid value (%d)", progname, p, USHRT_MAX);
- return(0);
+ warnx("%s > max uid value (%d)", p, USHRT_MAX);
+ return (0);
}
pw->pw_uid = id;
goto fmt;
id = atol(p);
if (id > USHRT_MAX) {
- (void)fprintf(stderr,
- "%s: %s > max gid value (%d)", progname, p, USHRT_MAX);
- return(0);
+ warnx("%s > max gid value (%d)", p, USHRT_MAX);
+ return (0);
}
pw->pw_gid = id;
if (root && *p) /* empty == /bin/sh */
for (setusershell();;) {
if (!(sh = getusershell())) {
- (void)fprintf(stderr,
- "%s: warning, unknown root shell\n",
- progname);
+ warnx("warning, unknown root shell");
break;
}
if (!strcmp(p, sh))
}
if (p = strsep(&bp, ":")) { /* too many */
-fmt: (void)fprintf(stderr, "%s: corrupted entry\n", progname);
- return(0);
+fmt: warnx("corrupted entry");
+ return (0);
}
- return(1);
+ return (1);
}