1 | /* Copyright (C) 1991-2020 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, see  |
16 | <https://www.gnu.org/licenses/>. */  |
17 |   |
18 | /*  |
19 | * POSIX Standard: 9.2.2 User Database Access <pwd.h>  |
20 | */  |
21 |   |
22 | #ifndef _PWD_H  |
23 | #define _PWD_H 1  |
24 |   |
25 | #include <features.h>  |
26 |   |
27 | __BEGIN_DECLS  |
28 |   |
29 | #include <bits/types.h>  |
30 |   |
31 | #define __need_size_t  |
32 | #include <stddef.h>  |
33 |   |
34 | #if defined __USE_XOPEN || defined __USE_XOPEN2K  |
35 | /* The Single Unix specification says that some more types are  |
36 | available here. */  |
37 | # ifndef __gid_t_defined  |
38 | typedef __gid_t gid_t;  |
39 | # define __gid_t_defined  |
40 | # endif  |
41 |   |
42 | # ifndef __uid_t_defined  |
43 | typedef __uid_t uid_t;  |
44 | # define __uid_t_defined  |
45 | # endif  |
46 | #endif  |
47 |   |
48 | /* A record in the user database. */  |
49 | struct passwd  |
50 | {  |
51 | char *pw_name; /* Username. */  |
52 | char *pw_passwd; /* Hashed passphrase, if shadow database  |
53 | not in use (see shadow.h). */  |
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 | #ifdef __USE_MISC  |
63 | # include <bits/types/FILE.h>  |
64 | #endif  |
65 |   |
66 |   |
67 | #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED  |
68 | /* Rewind the user database stream.  |
69 |   |
70 | This function is a possible cancellation point and therefore not  |
71 | marked with __THROW. */  |
72 | extern void setpwent (void);  |
73 |   |
74 | /* Close the user database stream.  |
75 |   |
76 | This function is a possible cancellation point and therefore not  |
77 | marked with __THROW. */  |
78 | extern void endpwent (void);  |
79 |   |
80 | /* Read an entry from the user database stream, opening it if necessary.  |
81 |   |
82 | This function is a possible cancellation point and therefore not  |
83 | marked with __THROW. */  |
84 | extern struct passwd *getpwent (void);  |
85 | #endif  |
86 |   |
87 | #ifdef __USE_MISC  |
88 | /* Read a user database entry from STREAM.  |
89 |   |
90 | This function is not part of POSIX and therefore no official  |
91 | cancellation point. But due to similarity with an POSIX interface  |
92 | or due to the implementation it is a cancellation point and  |
93 | therefore not marked with __THROW. */  |
94 | extern struct passwd *fgetpwent (FILE *__stream) __nonnull ((1));  |
95 |   |
96 | /* Write a given user database entry onto the given stream.  |
97 |   |
98 | This function is not part of POSIX and therefore no official  |
99 | cancellation point. But due to similarity with an POSIX interface  |
100 | or due to the implementation it is a cancellation point and  |
101 | therefore not marked with __THROW. */  |
102 | extern int putpwent (const struct passwd *__restrict __p,  |
103 | FILE *__restrict __f);  |
104 | #endif  |
105 |   |
106 | /* Retrieve the user database entry for the given user ID.  |
107 |   |
108 | This function is a possible cancellation point and therefore not  |
109 | marked with __THROW. */  |
110 | extern struct passwd *getpwuid (__uid_t __uid);  |
111 |   |
112 | /* Retrieve the user database entry for the given username.  |
113 |   |
114 | This function is a possible cancellation point and therefore not  |
115 | marked with __THROW. */  |
116 | extern struct passwd *getpwnam (const char *__name) __nonnull ((1));  |
117 |   |
118 | #ifdef __USE_POSIX  |
119 |   |
120 | # ifdef __USE_MISC  |
121 | /* Reasonable value for the buffer sized used in the reentrant  |
122 | functions below. But better use `sysconf'. */  |
123 | # define NSS_BUFLEN_PASSWD 1024  |
124 | # endif  |
125 |   |
126 | /* Reentrant versions of some of the functions above.  |
127 |   |
128 | PLEASE NOTE: the `getpwent_r' function is not (yet) standardized.  |
129 | The interface may change in later versions of this library. But  |
130 | the interface is designed following the principals used for the  |
131 | other reentrant functions so the chances are good this is what the  |
132 | POSIX people would choose. */  |
133 |   |
134 | # ifdef __USE_MISC  |
135 | /* This function is not part of POSIX and therefore no official  |
136 | cancellation point. But due to similarity with an POSIX interface  |
137 | or due to the implementation it is a cancellation point and  |
138 | therefore not marked with __THROW. */  |
139 | extern int getpwent_r (struct passwd *__restrict __resultbuf,  |
140 | char *__restrict __buffer, size_t __buflen,  |
141 | struct passwd **__restrict __result)  |
142 | __nonnull ((1, 2, 4));  |
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 | __nonnull ((2, 3, 5));  |
150 |   |
151 | extern int getpwnam_r (const char *__restrict __name,  |
152 | struct passwd *__restrict __resultbuf,  |
153 | char *__restrict __buffer, size_t __buflen,  |
154 | struct passwd **__restrict __result)  |
155 | __nonnull ((1, 2, 3, 5));  |
156 |   |
157 |   |
158 | # ifdef __USE_MISC  |
159 | /* Read a user database entry from STREAM. This function is not  |
160 | standardized and probably never will.  |
161 |   |
162 | This function is not part of POSIX and therefore no official  |
163 | cancellation point. But due to similarity with an POSIX interface  |
164 | or due to the implementation it is a cancellation point and  |
165 | therefore not marked with __THROW. */  |
166 | extern int fgetpwent_r (FILE *__restrict __stream,  |
167 | struct passwd *__restrict __resultbuf,  |
168 | char *__restrict __buffer, size_t __buflen,  |
169 | struct passwd **__restrict __result)  |
170 | __nonnull ((1, 2, 3, 5));  |
171 | # endif  |
172 |   |
173 | #endif /* POSIX or reentrant */  |
174 |   |
175 | #ifdef __USE_GNU  |
176 | /* Write a traditional /etc/passwd line, based on the user database  |
177 | entry for the given UID, to BUFFER; space for BUFFER must be  |
178 | allocated by the caller.  |
179 |   |
180 | This function is not part of POSIX and therefore no official  |
181 | cancellation point. But due to similarity with an POSIX interface  |
182 | or due to the implementation it is a cancellation point and  |
183 | therefore not marked with __THROW. */  |
184 | extern int getpw (__uid_t __uid, char *__buffer);  |
185 | #endif  |
186 |   |
187 | __END_DECLS  |
188 |   |
189 | #endif /* pwd.h */  |
190 | |