
1: /* Copyright (C) 1991,1992,1995-2001,2003,2004 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: /* 20: * POSIX Standard: 9.2.2 User Database Access <pwd.h> 21: */ 22: 23: #ifndef _PWD_H 24: #define _PWD_H 1 25: 26: #include <features.h> 27: 28: __BEGIN_DECLS 29: 30: #include <bits/types.h> 31: 32: #define __need_size_t 33: #include <stddef.h> 34: 35: #if defined __USE_XOPEN || defined __USE_XOPEN2K 36: /* The Single Unix specification says that some more types are 37: available here. */ 38: # ifndef __gid_t_defined 39: typedef __gid_t gid_t; 40: # define __gid_t_defined 41: # endif 42: 43: # ifndef __uid_t_defined 44: typedef __uid_t uid_t; 45: # define __uid_t_defined 46: # endif 47: #endif 48: 49: /* The passwd structure. */ 50: struct passwd 51: { 52: char *pw_name; /* Username. */ 53: char *pw_passwd; /* Password. */ 54: __uid_t pw_uid; /* User ID. */ 55: __gid_t pw_gid; /* Group ID. */ 56: char *pw_gecos; /* Real name. */ 57: char *pw_dir; /* Home directory. */ 58: char *pw_shell; /* Shell program. */ 59: }; 60: 61: 62: #if defined __USE_SVID || defined __USE_GNU 63: # define __need_FILE 64: # include <stdio.h> 65: #endif 66: 67: 68: #if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN_EXTENDED 69: /* Rewind the password-file stream. 70: 71: This function is a possible cancellation point and therefore not 72: marked with __THROW. */ 73: extern void setpwent (void); 74: 75: /* Close the password-file stream. 76: 77: This function is a possible cancellation point and therefore not 78: marked with __THROW. */ 79: extern void endpwent (void); 80: 81: /* Read an entry from the password-file stream, opening it if necessary. 82: 83: This function is a possible cancellation point and therefore not 84: marked with __THROW. */ 85: extern struct passwd *getpwent (void); 86: #endif 87: 88: #ifdef __USE_SVID 89: /* Read an entry from STREAM. 90: 91: This function is not part of POSIX and therefore no official 92: cancellation point. But due to similarity with an POSIX interface 93: or due to the implementation it is a cancellation point and 94: therefore not marked with __THROW. */ 95: extern struct passwd *fgetpwent (FILE *__stream); 96: 97: /* Write the given entry onto the given stream. 98: 99: This function is not part of POSIX and therefore no official 100: cancellation point. But due to similarity with an POSIX interface 101: or due to the implementation it is a cancellation point and 102: therefore not marked with __THROW. */ 103: extern int putpwent (__const struct passwd *__restrict __p, 104: FILE *__restrict __f); 105: #endif 106: 107: /* Search for an entry with a matching user ID. 108: 109: This function is a possible cancellation point and therefore not 110: marked with __THROW. */ 111: extern struct passwd *getpwuid (__uid_t __uid); 112: 113: /* Search for an entry with a matching username. 114: 115: This function is a possible cancellation point and therefore not 116: marked with __THROW. */ 117: extern struct passwd *getpwnam (__const char *__name); 118: 119: #if defined __USE_POSIX || defined __USE_MISC 120: 121: # ifdef __USE_MISC 122: /* Reasonable value for the buffer sized used in the reentrant 123: functions below. But better use `sysconf'. */ 124: # define NSS_BUFLEN_PASSWD 1024 125: # endif 126: 127: /* Reentrant versions of some of the functions above. 128: 129: PLEASE NOTE: the `getpwent_r' function is not (yet) standardized. 130: The interface may change in later versions of this library. But 131: the interface is designed following the principals used for the 132: other reentrant functions so the chances are good this is what the 133: POSIX people would choose. */ 134: 135: # if defined __USE_SVID || defined __USE_MISC 136: /* This function is not part of POSIX and therefore no official 137: cancellation point. But due to similarity with an POSIX interface 138: or due to the implementation it is a cancellation point and 139: therefore not marked with __THROW. */ 140: extern int getpwent_r (struct passwd *__restrict __resultbuf, 141: char *__restrict __buffer, size_t __buflen, 142: struct passwd **__restrict __result); 143: # endif 144: 145: extern int getpwuid_r (__uid_t __uid, 146: struct passwd *__restrict __resultbuf, 147: char *__restrict __buffer, size_t __buflen, 148: struct passwd **__restrict __result); 149: 150: extern int getpwnam_r (__const char *__restrict __name, 151: struct passwd *__restrict __resultbuf, 152: char *__restrict __buffer, size_t __buflen, 153: struct passwd **__restrict __result); 154: 155: 156: # ifdef __USE_SVID 157: /* Read an entry from STREAM. This function is not standardized and 158: probably never will. 159: 160: This function is not part of POSIX and therefore no official 161: cancellation point. But due to similarity with an POSIX interface 162: or due to the implementation it is a cancellation point and 163: therefore not marked with __THROW. */ 164: extern int fgetpwent_r (FILE *__restrict __stream, 165: struct passwd *__restrict __resultbuf, 166: char *__restrict __buffer, size_t __buflen, 167: struct passwd **__restrict __result); 168: # endif 169: 170: #endif /* POSIX or reentrant */ 171: 172: #ifdef __USE_GNU 173: /* Re-construct the password-file line for the given uid 174: in the given buffer. This knows the format that the caller 175: will expect, but this need not be the format of the password file. 176: 177: This function is not part of POSIX and therefore no official 178: cancellation point. But due to similarity with an POSIX interface 179: or due to the implementation it is a cancellation point and 180: therefore not marked with __THROW. */ 181: extern int getpw (__uid_t __uid, char *__buffer); 182: #endif 183: 184: __END_DECLS 185: 186: #endif /* pwd.h */