(linenum→info "unix/slp.c:2238")

glibc/2.7/pwd/getpw.c

    1: /* Copyright (C) 1991,92,96,98,99,2000 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public
    6:    License as published by the Free Software Foundation; either
    7:    version 2.1 of the License, or (at your option) any later version.
    8: 
    9:    The GNU C Library is distributed in the hope that it will be useful,
   10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; if not, write to the Free
   16:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17:    02111-1307 USA.  */
   18: 
   19: #include <alloca.h>
   20: #include <errno.h>
   21: #include <stdio.h>
   22: #include <unistd.h>
   23: #include <pwd.h>
   24: 
   25: 
   26: /* Re-construct the password-file line for the given uid
   27:    in the given buffer.  This knows the format that the caller
   28:    will expect, but this need not be the format of the password file.  */
   29: 
   30: int __getpw (__uid_t uid, char *buf);
   31: 
   32: int
   33: __getpw (uid, buf)
   34:      __uid_t uid;
   35:      char *buf;
   36: {
   37:   size_t buflen;
   38:   char *tmpbuf;
   39:   struct passwd resbuf, *p;
   40: 
   41:   if (buf == NULL)
   42:     {
   43:       __set_errno (EINVAL);
   44:       return -1;
   45:     }
   46: 
   47:   buflen = __sysconf (_SC_GETPW_R_SIZE_MAX);
   48:   tmpbuf = alloca (buflen);
   49: 
   50:   if (__getpwuid_r (uid, &resbuf, tmpbuf, buflen, &p) != 0)
   51:     return -1;
   52: 
   53:   if (p == NULL)
   54:     return -1;
   55: 
   56:   if (sprintf (buf, "%s:%s:%lu:%lu:%s:%s:%s", p->pw_name, p->pw_passwd,
   57:                (unsigned long int) p->pw_uid, (unsigned long int) p->pw_gid,
   58:                p->pw_gecos, p->pw_dir, p->pw_shell) < 0)
   59:     return -1;
   60: 
   61:   return 0;
   62: }
   63: weak_alias (__getpw, getpw)
   64: 
   65: link_warning (getpw, "the `getpw' function is dangerous and should not be used.")
Syntax (Markdown)