* lib/prototypes.h, configure.in, libmisc/Makefile.am,

libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetpwuid.c,
  libmisc/xgetgrnam.c, libmisc/xgetgrgid.c, libmisc/xgetspnam.c:
  Added functions xgetpwnam(), xgetpwuid(), xgetgrnam(),
  xgetgrgid(), and xgetspnam(). They allocate memory for the
  returned structure and are more robust to successive calls. They
  are implemented with the libc's getxxyyy_r() functions if
  available.
* libmisc/limits.c, libmisc/entry.c, libmisc/chowntty.c,
  libmisc/addgrps.c, libmisc/myname.c, libmisc/rlogin.c,
  libmisc/pwdcheck.c, src/newgrp.c, src/login_nopam.c,
  src/userdel.c, src/lastlog.c, src/grpck.c, src/gpasswd.c,
  src/newusers.c, src/chpasswd.c, src/chfn.c, src/groupmems.c,
  src/usermod.c, src/expiry.c, src/groupdel.c, src/chgpasswd.c,
  src/su.c, src/useradd.c, src/groupmod.c, src/passwd.c, src/pwck.c,
  src/groupadd.c, src/chage.c, src/login.c, src/suauth.c,
  src/faillog.c, src/groups.c, src/chsh.c, src/id.c: Review all the
  usage of one of the getpwnam(), getpwuid(), getgrnam(),
  getgrgid(), and getspnam() functions. It was noticed on
  http://bugs.debian.org/341230 that chfn and chsh use a passwd
  structure after calling a pam function, which result in using
  information from the passwd structure requested by pam, not the
  original one. It is much easier to use the new xget... functions
  to avoid these issues. I've checked which call to the original
  get... functions could be left (reducing the scope of the
  structure if possible), and I've left comments to ease future
  reviews (e.g. /* local, no need for xgetpwnam */).
  Note: the getpwent/getgrent calls should probably be checked also.
* src/groupdel.c, src/expiry.c: Fix typos in comments.
* src/groupmod.c: Re-indent.
* libmisc/Makefile.am, lib/groupmem.c, lib/groupio.c, lib/pwmem.c,
  lib/pwio.c, lib/shadowmem.c, lib/shadowio.c: Move the __<xx>_dup
  functions (used by the xget... functions) from the <xx>io.c files
  to the new <xx>mem.c files. This avoid linking some utils against
  the SELinux library.
This commit is contained in:
nekral-guest
2007-11-18 23:15:26 +00:00
parent ea63711c2c
commit 9adfc136b6
49 changed files with 721 additions and 261 deletions

View File

@@ -330,7 +330,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -454,13 +453,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("chage", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("chage", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -229,7 +229,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -317,7 +316,7 @@ int main (int argc, char **argv)
*/
if (optind < argc) {
user = argv[optind];
pw = getpwnam (user);
pw = xgetpwnam (user);
if (!pw) {
fprintf (stderr, _("%s: unknown user %s\n"), Prog,
user);
@@ -394,13 +393,17 @@ int main (int argc, char **argv)
#else /* !USE_PAM */
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("chfn", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("chfn", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -95,7 +95,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
#ifndef SHADOWGRP
@@ -144,13 +143,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("chpasswd", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("chpasswd", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -92,7 +92,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -138,13 +137,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("chpasswd", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("chpasswd", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -182,7 +182,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -248,7 +247,7 @@ int main (int argc, char **argv)
*/
if (optind < argc) {
user = argv[optind];
pw = getpwnam (user);
pw = xgetpwnam (user);
if (!pw) {
fprintf (stderr,
_("%s: unknown user %s\n"), Prog, user);
@@ -341,13 +340,17 @@ int main (int argc, char **argv)
#else /* !USE_PAM */
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("chsh", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("chsh", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -61,7 +61,7 @@ static void usage (void)
/*
* expiry - check and enforce password expiration policy
*
* expiry checks (-c) the current password expiraction and forces (-f)
* expiry checks (-c) the current password expiration and forces (-f)
* changes when required. It is callable as a normal user command.
*/
int main (int argc, char **argv)
@@ -101,7 +101,7 @@ int main (int argc, char **argv)
fprintf (stderr, _("%s: unknown user\n"), Prog);
exit (10);
}
spwd = getspnam (pwd->pw_name);
spwd = getspnam (pwd->pw_name); /* !USE_PAM, No need for xgetspnam */
/*
* If checking accounts, use agecheck() function.

View File

@@ -93,7 +93,7 @@ static void print_one (const struct faillog *fl, uid_t uid)
("Login Failures Maximum Latest On\n"));
once++;
}
pwent = getpwuid (uid);
pwent = getpwuid (uid); /* local, no need for xgetpwuid */
time (&now);
tm = localtime (&fl->fail_time);
#ifdef HAVE_STRFTIME
@@ -291,7 +291,6 @@ static void set_locktime (long locktime)
int main (int argc, char **argv)
{
int anyflag = 0;
struct passwd *pwent;
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
@@ -350,9 +349,12 @@ int main (int argc, char **argv)
tflg++;
break;
case 'u':
{
struct passwd *pwent;
if (aflg)
usage ();
/* local, no need for xgetpwnam */
pwent = getpwnam (optarg);
if (!pwent) {
fprintf (stderr,
@@ -363,6 +365,7 @@ int main (int argc, char **argv)
uflg++;
user = pwent->pw_uid;
break;
}
default:
usage ();
}

View File

@@ -140,7 +140,7 @@ static int check_list (const char *users)
* This user must exist.
*/
if (!getpwnam (username)) {
if (!getpwnam (username)) { /* local, no need for xgetpwnam */
fprintf (stderr, _("%s: unknown user %s\n"),
Prog, username);
errors++;
@@ -217,6 +217,7 @@ int main (int argc, char **argv)
switch (flag) {
case 'a': /* add a user */
user = optarg;
/* local, no need for xgetpwnam */
if (!getpwnam (user)) {
fprintf (stderr,
_("%s: unknown user %s\n"), Prog,
@@ -320,7 +321,7 @@ int main (int argc, char **argv)
if (!(group = argv[optind]))
usage ();
if (!(gr = getgrnam (group))) {
if (!(gr = getgrnam (group))) { /* dup, no need for xgetgrnam */
fprintf (stderr, _("unknown group: %s\n"), group);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "group lookup", group,

View File

@@ -259,6 +259,7 @@ static void find_new_gid (void)
if (!grp)
break;
#else
/* local, no need for xgetgrgid */
if (!getgrgid (group_id))
break;
#endif
@@ -395,7 +396,6 @@ int main (int argc, char **argv)
{
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -490,13 +490,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupadd", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupadd", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {
@@ -526,7 +530,7 @@ int main (int argc, char **argv)
/*
* Start with a quick check to see if the group exists.
*/
if (getgrnam (group_name)) {
if (getgrnam (group_name)) { /* local, no need for xgetgrnam */
if (fflg) {
exit (E_SUCCESS);
}

View File

@@ -188,7 +188,7 @@ static void group_busy (gid_t gid)
endpwent ();
/*
* If pwd isn't NULL, it stopped becaues the gid's matched.
* If pwd isn't NULL, it stopped because the gid's matched.
*/
if (pwd == (struct passwd *) 0)
@@ -213,11 +213,8 @@ static void group_busy (gid_t gid)
int main (int argc, char **argv)
{
struct group *grp;
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -245,13 +242,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupdel", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupdel", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {
@@ -278,20 +279,25 @@ int main (int argc, char **argv)
is_shadow_grp = sgr_file_present ();
#endif
/*
* Start with a quick check to see if the group exists.
*/
if (!(grp = getgrnam (group_name))) {
fprintf (stderr, _("%s: group %s does not exist\n"),
Prog, group_name);
{
struct group *grp;
/*
* Start with a quick check to see if the group exists.
*/
/* local, no need for xgetgrnam */
if (!(grp = getgrnam (group_name))) {
fprintf (stderr, _("%s: group %s does not exist\n"),
Prog, group_name);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "deleting group",
group_name, -1, 0);
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"deleting group",
group_name, -1, 0);
#endif
exit (E_NOTFOUND);
}
exit (E_NOTFOUND);
}
group_id = grp->gr_gid; /* LAUS */
group_id = grp->gr_gid; /* LAUS */
}
#ifdef USE_NIS
/*
@@ -321,7 +327,7 @@ int main (int argc, char **argv)
* Now check to insure that this isn't the primary group of
* anyone.
*/
group_busy (grp->gr_gid);
group_busy (group_id);
/*
* Do the hard stuff - open the files, delete the group entries,

View File

@@ -76,14 +76,16 @@ static int isroot (void)
static int isgroup (void)
{
gid_t g = getgid ();
struct group *grp = getgrgid (g);
struct group *grp = getgrgid (g); /* local, no need for xgetgrgid */
return TRUE;
}
static char *whoami (void)
{
/* local, no need for xgetgrgid */
struct group *grp = getgrgid (getgid ());
/* local, no need for xgetpwuid */
struct passwd *usr = getpwuid (getuid ());
if (0 == strcmp (usr->pw_name, grp->gr_name)) {
@@ -173,7 +175,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -239,13 +240,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupmod", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupmod", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -73,7 +73,7 @@ static gid_t group_newid;
static char *Prog;
static int
oflg = 0, /* permit non-unique group ID to be specified with -g */
oflg = 0, /* permit non-unique group ID to be specified with -g */
gflg = 0, /* new ID value for the group */
nflg = 0; /* a new name has been specified for the group */
@@ -257,7 +257,7 @@ static void check_new_gid (void)
return;
}
if (oflg || !getgrgid (group_newid))
if (oflg || !getgrgid (group_newid)) /* local, no need for xgetgrgid */
return;
/*
@@ -292,6 +292,7 @@ static void check_new_name (void)
/*
* If the entry is found, too bad.
*/
/* local, no need for xgetgrnam */
if (getgrnam (group_newname)) {
fprintf (stderr,
_("%s: %s is not a unique name\n"), Prog,
@@ -457,11 +458,8 @@ static void open_files (void)
*/
int main (int argc, char **argv)
{
struct group *grp;
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -485,13 +483,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupmod", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("groupmod", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {
@@ -517,19 +519,23 @@ int main (int argc, char **argv)
#ifdef SHADOWGRP
is_shadow_grp = sgr_file_present ();
#endif
/*
* Start with a quick check to see if the group exists.
*/
if (!(grp = getgrnam (group_name))) {
fprintf (stderr, _("%s: group %s does not exist\n"),
Prog, group_name);
{
struct group *grp;
/*
* Start with a quick check to see if the group exists.
*/
/* local, no need for xgetgrnam */
if (!(grp = getgrnam (group_name))) {
fprintf (stderr, _("%s: group %s does not exist\n"),
Prog, group_name);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "modifying group",
group_name, -1, 0);
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"modifying group", group_name, -1, 0);
#endif
exit (E_NOTFOUND);
} else
group_id = grp->gr_gid;
exit (E_NOTFOUND);
} else
group_id = grp->gr_gid;
}
#ifdef WITH_AUDIT
/* Set new name/id to original if not specified on command line */

View File

@@ -59,6 +59,7 @@ static void print_groups (const char *member)
setgrent ();
/* local, no need for xgetpwnam */
if ((pwd = getpwnam (member)) == 0) {
fprintf (stderr, _("%s: unknown user %s\n"), Prog, member);
exit (1);
@@ -73,6 +74,7 @@ static void print_groups (const char *member)
flag = 1;
}
}
/* local, no need for xgetgrgid */
if (!flag && (grp = getgrgid (pwd->pw_gid))) {
if (groups++)
putchar (' ');
@@ -95,7 +97,6 @@ int main (int argc, char **argv)
GETGROUPS_T *groups;
int pri_grp;
int i;
struct group *gr;
#else
char *logname;
char *getlogin ();
@@ -150,6 +151,8 @@ int main (int argc, char **argv)
* values.
*/
if (pri_grp != -1) {
struct group *gr;
/* local, no need for xgetgrgid */
if ((gr = getgrgid (pri_grp)))
printf ("%s", gr->gr_name);
else
@@ -157,9 +160,11 @@ int main (int argc, char **argv)
}
for (i = 0; i < ngroups; i++) {
struct group *gr;
if (i || pri_grp != -1)
putchar (' ');
/* local, no need for xgetgrgid */
if ((gr = getgrgid (groups[i])))
printf ("%s", gr->gr_name);
else

View File

@@ -377,6 +377,7 @@ int main (int argc, char **argv)
* Make sure each member exists
*/
for (i = 0; grp->gr_mem[i]; i++) {
/* local, no need for xgetpwnam */
if (getpwnam (grp->gr_mem[i]))
continue;
/*
@@ -597,6 +598,7 @@ int main (int argc, char **argv)
* Make sure each administrator exists
*/
for (i = 0; sgr->sg_adm[i]; i++) {
/* local, no need for xgetpwnam */
if (getpwnam (sgr->sg_adm[i]))
continue;
/*
@@ -626,6 +628,7 @@ int main (int argc, char **argv)
* Make sure each member exists
*/
for (i = 0; sgr->sg_mem[i]; i++) {
/* local, no need for xgetpwnam */
if (getpwnam (sgr->sg_mem[i]))
continue;

View File

@@ -118,13 +118,13 @@ static void usage (void)
* does not exist, just give the numerical value.
*/
pw = getpwuid (ruid);
pw = getpwuid (ruid); /* local, no need for xgetpwuid */
if (pw)
printf ("UID=%u(%s)", ruid, pw->pw_name);
else
printf ("UID=%u", ruid);
gr = getgrgid (rgid);
gr = getgrgid (rgid);; /* local, no need for xgetgrgid */
if (gr)
printf (" GID=%u(%s)", rgid, gr->gr_name);
else
@@ -136,14 +136,14 @@ static void usage (void)
*/
if (ruid != euid) {
pw = getpwuid (euid);
pw = getpwuid (euid); /* local, no need for xgetpwuid */
if (pw)
printf (" EUID=%u(%s)", euid, pw->pw_name);
else
printf (" EUID=%u", euid);
}
if (rgid != egid) {
gr = getgrgid (egid);
gr = getgrgid (egid); /* local, no need for xgetgrgid */
if (gr)
printf (" EGID=%u(%s)", egid, gr->gr_name);
else
@@ -169,6 +169,7 @@ static void usage (void)
if (i)
putchar (',');
/* local, no need for xgetgrgid */
gr = getgrgid (groups[i]);
if (gr)
printf ("%u(%s)", groups[i], gr->gr_name);

View File

@@ -199,7 +199,7 @@ int main (int argc, char **argv)
bflg++;
break;
case 'u':
pwent = getpwnam (optarg);
pwent = xgetpwnam (optarg);
if (!pwent) {
fprintf (stderr,
_("Unknown User: %s\n"),

View File

@@ -222,6 +222,7 @@ static int user_match (const char *tok, const char *string)
#endif
} else if (string_match (tok, string)) { /* ALL or exact match */
return (YES);
/* local, no need for xgetgrnam */
} else if ((group = getgrnam (tok))) { /* try group membership */
for (i = 0; group->gr_mem[i]; i++)
if (strcasecmp (string, group->gr_mem[i]) == 0)
@@ -235,6 +236,7 @@ static int user_match (const char *tok, const char *string)
* XXX - disabled by default for now. Need to verify that
* getpwnam() doesn't have some nasty side effects. --marekm
*/
/* local, no need for xgetpwnam */
if ((userinf = getpwnam (string)))
if (userinf->pw_gid == group->gr_gid)
return (YES);

View File

@@ -240,7 +240,7 @@ int main (int argc, char **argv)
* Perhaps in the past, but the default behavior now depends on the
* group entry, so it had better exist. -- JWP
*/
if (!(grp = getgrgid (pwd->pw_gid))) {
if (!(grp = xgetgrgid (pwd->pw_gid))) {
fprintf (stderr, _("unknown GID: %lu\n"),
(unsigned long) pwd->pw_gid);
SYSLOG ((LOG_CRIT, "unknown GID: %lu",
@@ -319,7 +319,7 @@ int main (int argc, char **argv)
* including the user's name in the member list of the user's login
* group. -- JWP
*/
if (!(grp = getgrnam (group))) {
if (!(grp = getgrnam (group))) { /* local, no need for xgetgrnam */
fprintf (stderr, _("unknown group: %s\n"), group);
goto failure;
}
@@ -338,7 +338,7 @@ int main (int argc, char **argv)
*
* Re-read the group entry for further processing.
*/
grp = getgrnam (group);
grp = xgetgrnam (group);
}
#ifdef SHADOWGRP
if ((sgrp = getsgnam (group))) {
@@ -364,7 +364,7 @@ int main (int argc, char **argv)
* password, and the group has a password, she needs to give the
* group password.
*/
if ((spwd = getspnam (name)))
if ((spwd = xgetspnam (name)))
pwd->pw_passwd = spwd->sp_pwdp;
if (pwd->pw_passwd[0] == '\0' && grp->gr_passwd[0])
@@ -480,6 +480,7 @@ int main (int argc, char **argv)
}
} while ((pid == child && WIFSTOPPED (cst)) ||
(pid != child && errno == EINTR));
/* local, no need for xgetgrgid */
SYSLOG ((LOG_INFO,
"user `%s' (login `%s' on %s) returned to group `%s'",
name, loginname, tty,

View File

@@ -289,7 +289,6 @@ int main (int argc, char **argv)
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -305,13 +304,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("newusers", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("newusers", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {

View File

@@ -399,7 +399,7 @@ static void print_status (const struct passwd *pw)
{
struct spwd *sp;
sp = getspnam (pw->pw_name);
sp = getspnam (pw->pw_name); /* local, no need for xgetspnam */
if (sp) {
printf ("%s %s %s %ld %ld %ld %ld\n",
pw->pw_name,
@@ -803,7 +803,7 @@ int main (int argc, char **argv)
exit (E_NOPERM);
}
pw = getpwnam (name);
pw = xgetpwnam (name);
if (!pw) {
fprintf (stderr, _("%s: unknown user %s\n"), Prog, name);
exit (E_NOPERM);
@@ -843,7 +843,7 @@ int main (int argc, char **argv)
/*
* The user name is valid, so let's get the shadow file entry.
*/
sp = getspnam (name);
sp = getspnam (name); /* !USE_PAM, no need for xgetspnam */
if (!sp)
sp = pwd_to_spwd (pw);

View File

@@ -331,6 +331,7 @@ int main (int argc, char **argv)
/*
* Make sure the primary group exists
*/
/* local, no need for xgetgrgid */
if (!quiet && !getgrgid (pwd->pw_gid)) {
/*

View File

@@ -125,7 +125,7 @@ static int iswheel (const char *username)
{
struct group *grp;
grp = getgrnam ("wheel");;
grp = getgrnam ("wheel"); /* !USE_PAM, no need for xgetgrnam */
if (!grp || !grp->gr_mem)
return 0;
return is_on_list (grp->gr_mem, username);
@@ -472,7 +472,7 @@ int main (int argc, char **argv)
* Sort out the password of user calling su, in case needed later
* -- chris
*/
if ((spwd = getspnam (oldname)))
if ((spwd = getspnam (oldname))) /* !USE_PAM, no need for xgetspnam */
pw->pw_passwd = spwd->sp_pwdp;
oldpass = xstrdup (pw->pw_passwd);
#endif /* SU_ACCESS */
@@ -507,7 +507,7 @@ int main (int argc, char **argv)
* The password file entries for the user is gotten and the account
* validated.
*/
if (!(pw = getpwnam (name))) {
if (!(pw = xgetpwnam (name))) {
(void) fprintf (stderr, _("Unknown id: %s\n"), name);
closelog ();
exit (1);
@@ -515,7 +515,7 @@ int main (int argc, char **argv)
#ifndef USE_PAM
spwd = NULL;
if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0
&& (spwd = getspnam (name)))
&& (spwd = getspnam (name))) /* !USE_PAM, no need for xgetspnam */
pw->pw_passwd = spwd->sp_pwdp;
#endif /* !USE_PAM */
pwent = *pw;
@@ -696,8 +696,10 @@ int main (int argc, char **argv)
spwd = pwd_to_spwd (&pwent);
if (expire (&pwent, spwd)) {
/* !USE_PAM, no need for xgetpwnam */
struct passwd *pwd = getpwnam (name);
/* !USE_PAM, no need for xgetspnam */
spwd = getspnam (name);
if (pwd)
pwent = *pwd;

View File

@@ -201,7 +201,7 @@ int isgrp (const char *name, const char *group)
{
struct group *grp;
grp = getgrnam (group);
grp = getgrnam (group); /* local, no need for xgetgrnam */
if (!grp || !grp->gr_mem)
return 0;

View File

@@ -205,8 +205,8 @@ static struct group *getgr_nam_gid (const char *grname)
gid = strtol (grname, &errptr, 10);
if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && gid >= 0)
return getgrgid (gid);
return getgrnam (grname);
return xgetgrgid (gid);
return xgetgrnam (grname);
}
static long get_number (const char *numstr)
@@ -252,7 +252,6 @@ static void get_defaults (void)
FILE *fp;
char buf[1024];
char *cp, *ep;
const struct group *grp;
/*
* Open the defaults file for reading.
@@ -279,9 +278,11 @@ static void get_defaults (void)
*/
if (MATCH (buf, DGROUP)) {
unsigned int val = (unsigned int) strtoul (cp, &ep, 10);
const struct group *grp;
if (*cp != '\0' && *ep == '\0') { /* valid number */
if (*cp != '\0' && *ep == '\0') { /* valid number */
def_group = val;
/* local, no need for xgetgrgid */
if ((grp = getgrgid (def_group))) {
def_gname = xstrdup (grp->gr_name);
} else {
@@ -289,6 +290,7 @@ static void get_defaults (void)
_("%s: unknown GID %s\n"),
Prog, cp);
}
/* local, no need for xgetgrnam */
} else if ((grp = getgrnam (cp))) {
def_group = grp->gr_gid;
def_gname = xstrdup (cp);
@@ -837,7 +839,7 @@ static void find_new_uid (void)
#ifdef NO_GETPWENT
pw_rewind ();
while ((pwd = pw_next ())) {
#else /* using getpwent() we can check against NIS users etc. */
#else /* using getpwent() we can check against NIS users etc. */
setpwent ();
while ((pwd = getpwent ())) {
#endif
@@ -881,6 +883,7 @@ static void find_new_uid (void)
if (!pwd)
break;
#else
/* local, no need for xgetpwuid */
if (!getpwuid (user_id))
break;
#endif
@@ -940,7 +943,7 @@ static void find_new_gid ()
#ifndef NO_GETGRENT /* glibc does have this, so ... */
/* A quick test gets here: if the UID is available
* as a GID, go ahead and use it */
if (!getgrgid (user_id)) {
if (!getgrgid (user_id)) { /* local, no need for xgetgrgid */
user_gid = user_id;
return;
}
@@ -953,6 +956,7 @@ static void find_new_gid ()
if (!grp)
break;
#else
/* local, no need for xgetgrgid */
if (!getgrgid (user_gid))
break;
#endif
@@ -1497,6 +1501,7 @@ static void usr_update (void)
* no user with this UID exists yet (entries for shared UIDs
* are left unchanged). --marekm
*/
/* local, no need for xgetpwuid */
if (!getpwuid (user_id)) {
faillog_reset (user_id);
lastlog_reset (user_id);
@@ -1596,7 +1601,7 @@ static void create_mail (void)
return;
}
gr = getgrnam ("mail");
gr = getgrnam ("mail"); /* local, no need for xgetgrnam */
if (!gr) {
fprintf (stderr,
_
@@ -1622,7 +1627,6 @@ int main (int argc, char **argv)
{
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -1661,13 +1665,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("useradd", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("useradd", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {
@@ -1705,7 +1713,7 @@ int main (int argc, char **argv)
/*
* Start with a quick check to see if the user exists.
*/
if (getpwnam (user_name)) {
if (getpwnam (user_name)) { /* local, no need for xgetpwnam */
fprintf (stderr, _("%s: user %s exists\n"), Prog, user_name);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding user",
@@ -1721,7 +1729,7 @@ int main (int argc, char **argv)
* --bero
*/
if (!gflg) {
if (getgrnam (user_name)) {
if (getgrnam (user_name)) { /* local, no need for xgetgrnam */
fprintf (stderr,
_
("%s: group %s exists - if you want to add this user to that group, use -g.\n"),

View File

@@ -179,7 +179,7 @@ static void update_groups (void)
* now if they have a group with the same name as their
* user name, with no members, we delete it.
*/
grp = getgrnam (user_name);
grp = xgetgrnam (user_name);
if (grp && getdef_bool ("USERGROUPS_ENAB")
&& (grp->gr_mem[0] == NULL)) {
@@ -608,12 +608,10 @@ static void remove_mailbox (void)
*/
int main (int argc, char **argv)
{
struct passwd *pwd;
int errors = 0;
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -663,13 +661,19 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS)
retval = pam_start ("userdel", pampw->pw_name, &conv, &pamh);
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("userdel", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {
retval = pam_authenticate (pamh, 0);
@@ -698,14 +702,20 @@ int main (int argc, char **argv)
* Start with a quick check to see if the user exists.
*/
user_name = argv[argc - 1];
if (!(pwd = getpwnam (user_name))) {
fprintf (stderr, _("%s: user %s does not exist\n"),
Prog, user_name);
{
struct passwd *pwd;
/* local, no need for xgetpwnam */
if (!(pwd = getpwnam (user_name))) {
fprintf (stderr, _("%s: user %s does not exist\n"),
Prog, user_name);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"deleting user not found", user_name, -1, 0);
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"deleting user not found", user_name, -1, 0);
#endif
exit (E_NOTFOUND);
exit (E_NOTFOUND);
}
user_id = pwd->pw_uid;
user_home = xstrdup (pwd->pw_dir);
}
#ifdef USE_NIS
@@ -727,8 +737,6 @@ int main (int argc, char **argv)
exit (E_NOTFOUND);
}
#endif
user_id = pwd->pw_uid;
user_home = xstrdup (pwd->pw_dir);
/*
* Check to make certain the user isn't logged in.
*/
@@ -755,6 +763,7 @@ int main (int argc, char **argv)
#ifdef EXTRA_CHECK_HOME_DIR
/* This may be slow, the above should be good enough. */
if (rflg && !fflg) {
struct passwd *pwd;
/*
* For safety, refuse to remove the home directory if it
* would result in removing some other user's home

View File

@@ -174,8 +174,8 @@ static struct group *getgr_nam_gid (const char *grname)
val = strtol (grname, &errptr, 10);
if (*grname != '\0' && *errptr == '\0' && errno != ERANGE && val >= 0)
return getgrgid (val);
return getgrnam (grname);
return xgetgrgid (val);
return xgetgrnam (grname);
}
/*
@@ -805,26 +805,28 @@ static uid_t get_id (const char *uidstr)
static void process_flags (int argc, char **argv)
{
const struct group *grp;
const struct passwd *pwd;
const struct spwd *spwd = NULL;
int anyflag = 0;
if (argc == 1 || argv[argc - 1][0] == '-')
usage ();
if (!(pwd = getpwnam (argv[argc - 1]))) {
fprintf (stderr, _("%s: user %s does not exist\n"),
Prog, argv[argc - 1]);
exit (E_NOTFOUND);
}
{
const struct passwd *pwd;
/* local, no need for xgetpwnam */
if (!(pwd = getpwnam (argv[argc - 1]))) {
fprintf (stderr, _("%s: user %s does not exist\n"),
Prog, argv[argc - 1]);
exit (E_NOTFOUND);
}
user_name = argv[argc - 1];
user_id = pwd->pw_uid;
user_gid = pwd->pw_gid;
user_comment = xstrdup (pwd->pw_gecos);
user_home = xstrdup (pwd->pw_dir);
user_shell = xstrdup (pwd->pw_shell);
user_name = argv[argc - 1];
user_id = pwd->pw_uid;
user_gid = pwd->pw_gid;
user_comment = xstrdup (pwd->pw_gecos);
user_home = xstrdup (pwd->pw_dir);
user_shell = xstrdup (pwd->pw_shell);
}
#ifdef WITH_AUDIT
user_newname = user_name;
user_newid = user_id;
@@ -854,13 +856,17 @@ static void process_flags (int argc, char **argv)
}
#endif
if (is_shadow_pwd && (spwd = getspnam (user_name))) {
user_expire = spwd->sp_expire;
user_inactive = spwd->sp_inact;
{
const struct spwd *spwd = NULL;
/* local, no need for xgetspnam */
if (is_shadow_pwd && (spwd = getspnam (user_name))) {
user_expire = spwd->sp_expire;
user_inactive = spwd->sp_inact;
#ifdef WITH_AUDIT
user_newexpire = user_expire;
user_newinactive = user_inactive;
user_newexpire = user_expire;
user_newinactive = user_inactive;
#endif
}
}
{
@@ -923,7 +929,7 @@ static void process_flags (int argc, char **argv)
#ifdef WITH_AUDIT
user_newexpire = strtoday (optarg);
if (user_newexpire == -1) {
#else
#else /* } */
user_expire = strtoday (optarg);
if (user_expire == -1) {
#endif
@@ -1082,11 +1088,13 @@ static void process_flags (int argc, char **argv)
if (uflg && user_id == user_newid)
uflg = oflg = 0;
/* local, no need for xgetpwnam */
if (lflg && getpwnam (user_newname)) {
fprintf (stderr, _("%s: user %s exists\n"), Prog, user_newname);
exit (E_NAME_IN_USE);
}
/* local, no need for xgetpwuid */
if (uflg && !oflg && getpwuid (user_newid)) {
fprintf (stderr, _("%s: uid %lu is not unique\n"),
Prog, (unsigned long) user_newid);
@@ -1211,9 +1219,6 @@ static void open_files (void)
}
#endif
}
}
/*
@@ -1492,7 +1497,6 @@ int main (int argc, char **argv)
{
#ifdef USE_PAM
pam_handle_t *pamh = NULL;
struct passwd *pampw;
int retval;
#endif
@@ -1525,13 +1529,17 @@ int main (int argc, char **argv)
#ifdef USE_PAM
retval = PAM_SUCCESS;
pampw = getpwuid (getuid ());
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
{
struct passwd *pampw;
pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
if (pampw == NULL) {
retval = PAM_USER_UNKNOWN;
}
if (retval == PAM_SUCCESS) {
retval = pam_start ("usermod", pampw->pw_name, &conv, &pamh);
if (retval == PAM_SUCCESS) {
retval = pam_start ("usermod", pampw->pw_name,
&conv, &pamh);
}
}
if (retval == PAM_SUCCESS) {