--- bashline.c +++ bashline.c 2011-11-21 12:41:19.831646479 +0000 @@ -2149,6 +2149,7 @@ bash_groupname_completion_function (text } value = savestring (grent->gr_name); + endgrent (); return (value); #endif } --- examples/loadables/finfo.c +++ examples/loadables/finfo.c 2011-11-21 12:23:17.331147246 +0000 @@ -269,6 +269,7 @@ struct stat *st; pw = getpwuid(st->st_uid); owner = pw ? pw->pw_name : "unknown"; printf("Uid of owner: %d (%s)\n", (int) st->st_uid, owner); + endpwent(); gr = getgrgid(st->st_gid); owner = gr ? gr->gr_name : "unknown"; printf("Gid of owner: %d (%s)\n", (int) st->st_gid, owner); @@ -277,6 +278,7 @@ struct stat *st; printf("File last access time: %s", ctime (&st->st_atime)); printf("File last modify time: %s", ctime (&st->st_mtime)); printf("File last status change time: %s", ctime (&st->st_ctime)); + endgrent(); fflush(stdout); return(0); } @@ -345,16 +347,18 @@ int flags; else if (flags & OPT_PMASK) printf("%o\n", getperm(st->st_mode) & pmask); else if (flags & OPT_UID) { - pw = getpwuid(st->st_uid); - if (flags & OPT_ASCII) + if (flags & OPT_ASCII) { + pw = getpwuid(st->st_uid); printf("%s\n", pw ? pw->pw_name : "unknown"); - else + endpwent(); + } else printf("%d\n", st->st_uid); } else if (flags & OPT_GID) { - gr = getgrgid(st->st_gid); - if (flags & OPT_ASCII) + if (flags & OPT_ASCII) { + gr = getgrgid(st->st_gid); printf("%s\n", gr ? gr->gr_name : "unknown"); - else + endgrent(); + } else printf("%d\n", st->st_gid); } else if (flags & OPT_SIZE) printf("%ld\n", (long) st->st_size); --- examples/loadables/id.c +++ examples/loadables/id.c 2011-11-21 12:39:06.895646231 +0000 @@ -42,6 +42,7 @@ #if !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid (); +extern void endpwent (); #endif extern struct group *getgrgid (); @@ -136,18 +137,26 @@ static int inituser (uname) char *uname; { - struct passwd *pwd; - if (uname) { + struct passwd *pwd; + int r; + + r = 0; pwd = getpwnam (uname); if (pwd == 0) { builtin_error ("%s: no such user", uname); - return -1; + r = -1; } - ruid = euid = pwd->pw_uid; - rgid = egid = pwd->pw_gid; + else + { + ruid = euid = pwd->pw_uid; + rgid = egid = pwd->pw_gid; + } + endpwent (); + if (r < 0) + return r; } else { @@ -172,11 +181,12 @@ id_pruser (uid) { pwd = getpwuid (uid); if (pwd == NULL) - r = 1; + r = 1; + else + printf ("%s", pwd->pw_name); + endpwent (); } - if (pwd) - printf ("%s", pwd->pw_name); - else + if (pwd == NULL) printf ("%u", (unsigned) uid); return r; @@ -197,11 +207,12 @@ id_prgrp (gid) grp = getgrgid (gid); if (grp == NULL) r = 1; + else + printf ("%s", grp->gr_name); + endgrent (); } - if (grp) - printf ("%s", grp->gr_name); - else + if (grp == NULL) printf ("%u", (unsigned) gid); return r; @@ -307,6 +318,8 @@ id_prall (uname) else printf ("(%s)", grp->gr_name); } + endpwent (); + endgrent (); return r; } --- lib/tilde/shell.c +++ lib/tilde/shell.c 2011-11-21 13:07:02.099146925 +0000 @@ -45,9 +45,18 @@ #include #if !defined (HAVE_GETPW_DECLS) +# if defined (HAVE_GETPWUID) extern struct passwd *getpwuid (); +# endif +# if defined (HAVE_GETPWENT) +extern void endpwent (); +# endif #endif /* !HAVE_GETPW_DECLS */ +#if !defined (savestring) +# define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) +#endif /* !savestring */ + char * get_env_value (varname) char *varname; @@ -58,12 +67,19 @@ get_env_value (varname) char * get_home_dir () { - char *home_dir; + static char *home_dir; struct passwd *entry; - home_dir = (char *)NULL; + if (home_dir) + goto out; +#if defined (HAVE_GETPWUID) entry = getpwuid (getuid ()); if (entry) - home_dir = entry->pw_dir; + home_dir = savestring(entry->pw_dir); +#endif +#if defined (HAVE_GETPWENT) + endpwent (); +#endif +out: return (home_dir); } --- lib/tilde/tilde.c +++ lib/tilde/tilde.c 2011-11-11 13:10:07.000000000 +0000 @@ -61,6 +61,7 @@ extern struct passwd *getpwuid PARAMS((u # endif # if defined (HAVE_GETPWNAM) extern struct passwd *getpwnam PARAMS((const char *)); +extern void endpwent (); # endif #endif /* !HAVE_GETPW_DECLS */