]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/nss-util.h
analyze security: fix recursive call of syscall_names_in_filter()
[thirdparty/systemd.git] / src / basic / nss-util.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 #include <grp.h>
5 #include <netdb.h>
6 #include <nss.h>
7 #include <pwd.h>
8 #include <resolv.h>
9
10 #define NSS_SIGNALS_BLOCK SIGALRM,SIGVTALRM,SIGPIPE,SIGCHLD,SIGTSTP,SIGIO,SIGHUP,SIGUSR1,SIGUSR2,SIGPROF,SIGURG,SIGWINCH
11
12 #ifndef DEPRECATED_RES_USE_INET6
13 # define DEPRECATED_RES_USE_INET6 0x00002000
14 #endif
15
16 #define NSS_GETHOSTBYNAME_PROTOTYPES(module) \
17 enum nss_status _nss_##module##_gethostbyname4_r( \
18 const char *name, \
19 struct gaih_addrtuple **pat, \
20 char *buffer, size_t buflen, \
21 int *errnop, int *h_errnop, \
22 int32_t *ttlp) _public_; \
23 enum nss_status _nss_##module##_gethostbyname3_r( \
24 const char *name, \
25 int af, \
26 struct hostent *host, \
27 char *buffer, size_t buflen, \
28 int *errnop, int *h_errnop, \
29 int32_t *ttlp, \
30 char **canonp) _public_; \
31 enum nss_status _nss_##module##_gethostbyname2_r( \
32 const char *name, \
33 int af, \
34 struct hostent *host, \
35 char *buffer, size_t buflen, \
36 int *errnop, int *h_errnop) _public_; \
37 enum nss_status _nss_##module##_gethostbyname_r( \
38 const char *name, \
39 struct hostent *host, \
40 char *buffer, size_t buflen, \
41 int *errnop, int *h_errnop) _public_
42
43 #define NSS_GETHOSTBYADDR_PROTOTYPES(module) \
44 enum nss_status _nss_##module##_gethostbyaddr2_r( \
45 const void* addr, socklen_t len, \
46 int af, \
47 struct hostent *host, \
48 char *buffer, size_t buflen, \
49 int *errnop, int *h_errnop, \
50 int32_t *ttlp) _public_; \
51 enum nss_status _nss_##module##_gethostbyaddr_r( \
52 const void* addr, socklen_t len, \
53 int af, \
54 struct hostent *host, \
55 char *buffer, size_t buflen, \
56 int *errnop, int *h_errnop) _public_
57
58 #define NSS_GETHOSTBYNAME_FALLBACKS(module) \
59 enum nss_status _nss_##module##_gethostbyname2_r( \
60 const char *name, \
61 int af, \
62 struct hostent *host, \
63 char *buffer, size_t buflen, \
64 int *errnop, int *h_errnop) { \
65 return _nss_##module##_gethostbyname3_r( \
66 name, \
67 af, \
68 host, \
69 buffer, buflen, \
70 errnop, h_errnop, \
71 NULL, \
72 NULL); \
73 } \
74 enum nss_status _nss_##module##_gethostbyname_r( \
75 const char *name, \
76 struct hostent *host, \
77 char *buffer, size_t buflen, \
78 int *errnop, int *h_errnop) { \
79 enum nss_status ret = NSS_STATUS_NOTFOUND; \
80 \
81 if (_res.options & DEPRECATED_RES_USE_INET6) \
82 ret = _nss_##module##_gethostbyname3_r( \
83 name, \
84 AF_INET6, \
85 host, \
86 buffer, buflen, \
87 errnop, h_errnop, \
88 NULL, \
89 NULL); \
90 if (ret == NSS_STATUS_NOTFOUND) \
91 ret = _nss_##module##_gethostbyname3_r( \
92 name, \
93 AF_INET, \
94 host, \
95 buffer, buflen, \
96 errnop, h_errnop, \
97 NULL, \
98 NULL); \
99 return ret; \
100 }
101
102 #define NSS_GETHOSTBYADDR_FALLBACKS(module) \
103 enum nss_status _nss_##module##_gethostbyaddr_r( \
104 const void* addr, socklen_t len, \
105 int af, \
106 struct hostent *host, \
107 char *buffer, size_t buflen, \
108 int *errnop, int *h_errnop) { \
109 return _nss_##module##_gethostbyaddr2_r( \
110 addr, len, \
111 af, \
112 host, \
113 buffer, buflen, \
114 errnop, h_errnop, \
115 NULL); \
116 }
117
118 #define NSS_GETPW_PROTOTYPES(module) \
119 enum nss_status _nss_##module##_getpwnam_r( \
120 const char *name, \
121 struct passwd *pwd, \
122 char *buffer, size_t buflen, \
123 int *errnop) _public_; \
124 enum nss_status _nss_##module##_getpwuid_r( \
125 uid_t uid, \
126 struct passwd *pwd, \
127 char *buffer, size_t buflen, \
128 int *errnop) _public_
129
130 #define NSS_GETGR_PROTOTYPES(module) \
131 enum nss_status _nss_##module##_getgrnam_r( \
132 const char *name, \
133 struct group *gr, \
134 char *buffer, size_t buflen, \
135 int *errnop) _public_; \
136 enum nss_status _nss_##module##_getgrgid_r( \
137 gid_t gid, \
138 struct group *gr, \
139 char *buffer, size_t buflen, \
140 int *errnop) _public_
141
142 typedef enum nss_status (*_nss_gethostbyname4_r_t)(
143 const char *name,
144 struct gaih_addrtuple **pat,
145 char *buffer, size_t buflen,
146 int *errnop, int *h_errnop,
147 int32_t *ttlp);
148
149 typedef enum nss_status (*_nss_gethostbyname3_r_t)(
150 const char *name,
151 int af,
152 struct hostent *result,
153 char *buffer, size_t buflen,
154 int *errnop, int *h_errnop,
155 int32_t *ttlp,
156 char **canonp);
157
158 typedef enum nss_status (*_nss_gethostbyname2_r_t)(
159 const char *name,
160 int af,
161 struct hostent *result,
162 char *buffer, size_t buflen,
163 int *errnop, int *h_errnop);
164
165 typedef enum nss_status (*_nss_gethostbyname_r_t)(
166 const char *name,
167 struct hostent *result,
168 char *buffer, size_t buflen,
169 int *errnop, int *h_errnop);
170
171 typedef enum nss_status (*_nss_gethostbyaddr2_r_t)(
172 const void* addr, socklen_t len,
173 int af,
174 struct hostent *result,
175 char *buffer, size_t buflen,
176 int *errnop, int *h_errnop,
177 int32_t *ttlp);
178 typedef enum nss_status (*_nss_gethostbyaddr_r_t)(
179 const void* addr, socklen_t len,
180 int af,
181 struct hostent *host,
182 char *buffer, size_t buflen,
183 int *errnop, int *h_errnop);