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