xref: /dflybsd-src/lib/libssh/openbsd-compat/openbsd-compat.h (revision 2c81fb9c483cc2c8f293c3c199fac04d266b4e1b)
12c0338ffSzrj /*
22c0338ffSzrj  * Copyright (c) 1999-2003 Damien Miller.  All rights reserved.
32c0338ffSzrj  * Copyright (c) 2003 Ben Lindstrom. All rights reserved.
42c0338ffSzrj  * Copyright (c) 2002 Tim Rice.  All rights reserved.
52c0338ffSzrj  *
62c0338ffSzrj  * Redistribution and use in source and binary forms, with or without
72c0338ffSzrj  * modification, are permitted provided that the following conditions
82c0338ffSzrj  * are met:
92c0338ffSzrj  * 1. Redistributions of source code must retain the above copyright
102c0338ffSzrj  *    notice, this list of conditions and the following disclaimer.
112c0338ffSzrj  * 2. Redistributions in binary form must reproduce the above copyright
122c0338ffSzrj  *    notice, this list of conditions and the following disclaimer in the
132c0338ffSzrj  *    documentation and/or other materials provided with the distribution.
142c0338ffSzrj  *
152c0338ffSzrj  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
162c0338ffSzrj  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
172c0338ffSzrj  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
182c0338ffSzrj  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
192c0338ffSzrj  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
202c0338ffSzrj  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
212c0338ffSzrj  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
222c0338ffSzrj  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
232c0338ffSzrj  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
242c0338ffSzrj  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
252c0338ffSzrj  */
262c0338ffSzrj 
272c0338ffSzrj #ifndef _OPENBSD_COMPAT_H
282c0338ffSzrj #define _OPENBSD_COMPAT_H
292c0338ffSzrj 
302c0338ffSzrj #include "includes.h"
312c0338ffSzrj 
322c0338ffSzrj #include <sys/types.h>
332c0338ffSzrj #include <pwd.h>
342c0338ffSzrj 
352c0338ffSzrj #include <sys/socket.h>
362c0338ffSzrj 
372c0338ffSzrj #include "getrrsetbyname.h"
382c0338ffSzrj #include "blf.h"
39bc9cc675SDaniel Fojt #include "fnmatch.h"
402c0338ffSzrj 
41*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_LOGIN_CAP) && !defined(HAVE_LOGIN_GETPWCLASS)
42*2c81fb9cSAntonio Huete Jimenez # include <login_cap.h>
43*2c81fb9cSAntonio Huete Jimenez # define login_getpwclass(pw) login_getclass(pw->pw_class)
44*2c81fb9cSAntonio Huete Jimenez #endif
45*2c81fb9cSAntonio Huete Jimenez 
46*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_BASENAME
47*2c81fb9cSAntonio Huete Jimenez char *basename(const char *path);
48*2c81fb9cSAntonio Huete Jimenez #endif
49*2c81fb9cSAntonio Huete Jimenez 
50*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_BINDRESVPORT_SA
51*2c81fb9cSAntonio Huete Jimenez int bindresvport_sa(int sd, struct sockaddr *sa);
52*2c81fb9cSAntonio Huete Jimenez #endif
53*2c81fb9cSAntonio Huete Jimenez 
54*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_CLOSEFROM
55*2c81fb9cSAntonio Huete Jimenez void closefrom(int);
56*2c81fb9cSAntonio Huete Jimenez #endif
57*2c81fb9cSAntonio Huete Jimenez 
58*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_DECL_FTRUNCATE) && HAVE_DECL_FTRUNCATE == 0
59*2c81fb9cSAntonio Huete Jimenez int ftruncate(int filedes, off_t length);
60*2c81fb9cSAntonio Huete Jimenez #endif
61*2c81fb9cSAntonio Huete Jimenez 
62*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_DECL_GETENTROPY) && HAVE_DECL_GETENTROPY == 0
63*2c81fb9cSAntonio Huete Jimenez int _ssh_compat_getentropy(void *, size_t);
64*2c81fb9cSAntonio Huete Jimenez #endif
65*2c81fb9cSAntonio Huete Jimenez 
66*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_GETLINE
67*2c81fb9cSAntonio Huete Jimenez #include <stdio.h>
68*2c81fb9cSAntonio Huete Jimenez ssize_t getline(char **, size_t *, FILE *);
69*2c81fb9cSAntonio Huete Jimenez #endif
70*2c81fb9cSAntonio Huete Jimenez 
71*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_GETPAGESIZE
72*2c81fb9cSAntonio Huete Jimenez int getpagesize(void);
73*2c81fb9cSAntonio Huete Jimenez #endif
74*2c81fb9cSAntonio Huete Jimenez 
75*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_GETCWD
76*2c81fb9cSAntonio Huete Jimenez char *getcwd(char *pt, size_t size);
77*2c81fb9cSAntonio Huete Jimenez #endif
78*2c81fb9cSAntonio Huete Jimenez 
79*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_KILLPG
80*2c81fb9cSAntonio Huete Jimenez int killpg(pid_t, int);
81*2c81fb9cSAntonio Huete Jimenez #endif
82*2c81fb9cSAntonio Huete Jimenez 
83*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_DECL_MEMMEM) && HAVE_DECL_MEMMEM == 0
84*2c81fb9cSAntonio Huete Jimenez void *memmem(const void *, size_t, const void *, size_t);
85*2c81fb9cSAntonio Huete Jimenez #endif
86*2c81fb9cSAntonio Huete Jimenez 
87*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_REALLOCARRAY
88*2c81fb9cSAntonio Huete Jimenez void *reallocarray(void *, size_t, size_t);
89*2c81fb9cSAntonio Huete Jimenez #endif
90*2c81fb9cSAntonio Huete Jimenez 
91*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RECALLOCARRAY
92*2c81fb9cSAntonio Huete Jimenez void *recallocarray(void *, size_t, size_t, size_t);
93*2c81fb9cSAntonio Huete Jimenez #endif
94*2c81fb9cSAntonio Huete Jimenez 
95*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_RRESVPORT_AF
96*2c81fb9cSAntonio Huete Jimenez int rresvport_af(int *alport, sa_family_t af);
97*2c81fb9cSAntonio Huete Jimenez #endif
98*2c81fb9cSAntonio Huete Jimenez 
99*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRLCPY
100*2c81fb9cSAntonio Huete Jimenez size_t strlcpy(char *dst, const char *src, size_t siz);
101*2c81fb9cSAntonio Huete Jimenez #endif
102*2c81fb9cSAntonio Huete Jimenez 
103*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRLCAT
104*2c81fb9cSAntonio Huete Jimenez size_t strlcat(char *dst, const char *src, size_t siz);
105*2c81fb9cSAntonio Huete Jimenez #endif
106*2c81fb9cSAntonio Huete Jimenez 
107*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRCASESTR
108*2c81fb9cSAntonio Huete Jimenez char *strcasestr(const char *, const char *);
109*2c81fb9cSAntonio Huete Jimenez #endif
110*2c81fb9cSAntonio Huete Jimenez 
111*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRNLEN
112*2c81fb9cSAntonio Huete Jimenez size_t strnlen(const char *, size_t);
113*2c81fb9cSAntonio Huete Jimenez #endif
114*2c81fb9cSAntonio Huete Jimenez 
115*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRNDUP
116*2c81fb9cSAntonio Huete Jimenez char *strndup(const char *s, size_t n);
117*2c81fb9cSAntonio Huete Jimenez #endif
118*2c81fb9cSAntonio Huete Jimenez 
119*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_SETENV
120*2c81fb9cSAntonio Huete Jimenez int setenv(register const char *name, register const char *value, int rewrite);
121*2c81fb9cSAntonio Huete Jimenez #endif
122*2c81fb9cSAntonio Huete Jimenez 
123*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRMODE
124*2c81fb9cSAntonio Huete Jimenez void strmode(int mode, char *p);
125*2c81fb9cSAntonio Huete Jimenez #endif
126*2c81fb9cSAntonio Huete Jimenez 
127*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRPTIME
128*2c81fb9cSAntonio Huete Jimenez #include  <time.h>
129*2c81fb9cSAntonio Huete Jimenez char *strptime(const char *buf, const char *fmt, struct tm *tm);
130*2c81fb9cSAntonio Huete Jimenez #endif
131*2c81fb9cSAntonio Huete Jimenez 
132*2c81fb9cSAntonio Huete Jimenez #if !defined(HAVE_MKDTEMP)
133*2c81fb9cSAntonio Huete Jimenez int mkstemps(char *path, int slen);
134*2c81fb9cSAntonio Huete Jimenez int mkstemp(char *path);
135*2c81fb9cSAntonio Huete Jimenez char *mkdtemp(char *path);
136*2c81fb9cSAntonio Huete Jimenez #endif
137*2c81fb9cSAntonio Huete Jimenez 
138*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DAEMON
139*2c81fb9cSAntonio Huete Jimenez int daemon(int nochdir, int noclose);
140*2c81fb9cSAntonio Huete Jimenez #endif
141*2c81fb9cSAntonio Huete Jimenez 
142*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_DIRNAME
143*2c81fb9cSAntonio Huete Jimenez char *dirname(const char *path);
144*2c81fb9cSAntonio Huete Jimenez #endif
145*2c81fb9cSAntonio Huete Jimenez 
1462c0338ffSzrj #ifndef HAVE_FMT_SCALED
1472c0338ffSzrj #define	FMT_SCALED_STRSIZE	7
1482c0338ffSzrj int	fmt_scaled(long long number, char *result);
1492c0338ffSzrj #endif
1502c0338ffSzrj 
1512c0338ffSzrj #ifndef HAVE_SCAN_SCALED
1522c0338ffSzrj int	scan_scaled(char *, long long *);
1532c0338ffSzrj #endif
1542c0338ffSzrj 
155*2c81fb9cSAntonio Huete Jimenez #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA)
156*2c81fb9cSAntonio Huete Jimenez char *inet_ntoa(struct in_addr in);
157*2c81fb9cSAntonio Huete Jimenez #endif
158*2c81fb9cSAntonio Huete Jimenez 
159*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_INET_NTOP
160*2c81fb9cSAntonio Huete Jimenez const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
161*2c81fb9cSAntonio Huete Jimenez #endif
162*2c81fb9cSAntonio Huete Jimenez 
163*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_INET_ATON
164*2c81fb9cSAntonio Huete Jimenez int inet_aton(const char *cp, struct in_addr *addr);
165*2c81fb9cSAntonio Huete Jimenez #endif
166*2c81fb9cSAntonio Huete Jimenez 
167*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRSEP
168*2c81fb9cSAntonio Huete Jimenez char *strsep(char **stringp, const char *delim);
169*2c81fb9cSAntonio Huete Jimenez #endif
170*2c81fb9cSAntonio Huete Jimenez 
171*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_SETPROCTITLE
172*2c81fb9cSAntonio Huete Jimenez void setproctitle(const char *fmt, ...);
173*2c81fb9cSAntonio Huete Jimenez void compat_init_setproctitle(int argc, char *argv[]);
174*2c81fb9cSAntonio Huete Jimenez #endif
175*2c81fb9cSAntonio Huete Jimenez 
176*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_GETGROUPLIST
177*2c81fb9cSAntonio Huete Jimenez int getgrouplist(const char *, gid_t, gid_t *, int *);
178*2c81fb9cSAntonio Huete Jimenez #endif
179*2c81fb9cSAntonio Huete Jimenez 
180*2c81fb9cSAntonio Huete Jimenez #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET)
181*2c81fb9cSAntonio Huete Jimenez int BSDgetopt(int argc, char * const *argv, const char *opts);
182*2c81fb9cSAntonio Huete Jimenez #include "openbsd-compat/getopt.h"
183*2c81fb9cSAntonio Huete Jimenez #endif
184*2c81fb9cSAntonio Huete Jimenez 
185*2c81fb9cSAntonio Huete Jimenez #if ((defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0) || \
186*2c81fb9cSAntonio Huete Jimenez     (defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0))
187*2c81fb9cSAntonio Huete Jimenez # include <sys/types.h>
188*2c81fb9cSAntonio Huete Jimenez # include <sys/uio.h>
189*2c81fb9cSAntonio Huete Jimenez 
190*2c81fb9cSAntonio Huete Jimenez # if defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0
191*2c81fb9cSAntonio Huete Jimenez int readv(int, struct iovec *, int);
192*2c81fb9cSAntonio Huete Jimenez # endif
193*2c81fb9cSAntonio Huete Jimenez 
194*2c81fb9cSAntonio Huete Jimenez # if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0
195*2c81fb9cSAntonio Huete Jimenez int writev(int, struct iovec *, int);
196*2c81fb9cSAntonio Huete Jimenez # endif
197*2c81fb9cSAntonio Huete Jimenez #endif
198*2c81fb9cSAntonio Huete Jimenez 
1992c0338ffSzrj /* Home grown routines */
2002c0338ffSzrj #include "bsd-signal.h"
201*2c81fb9cSAntonio Huete Jimenez #include "bsd-misc.h"
202*2c81fb9cSAntonio Huete Jimenez 
203*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_DECL_GETPEEREID) && HAVE_DECL_GETPEEREID == 0
204*2c81fb9cSAntonio Huete Jimenez int getpeereid(int , uid_t *, gid_t *);
205*2c81fb9cSAntonio Huete Jimenez #endif
206*2c81fb9cSAntonio Huete Jimenez 
207*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ARC4RANDOM
208*2c81fb9cSAntonio Huete Jimenez uint32_t arc4random(void);
209*2c81fb9cSAntonio Huete Jimenez #endif /* !HAVE_ARC4RANDOM */
210*2c81fb9cSAntonio Huete Jimenez 
211*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ARC4RANDOM_BUF
212*2c81fb9cSAntonio Huete Jimenez void arc4random_buf(void *, size_t);
213*2c81fb9cSAntonio Huete Jimenez #endif
214*2c81fb9cSAntonio Huete Jimenez 
215*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ARC4RANDOM_STIR
216*2c81fb9cSAntonio Huete Jimenez # define arc4random_stir()
217*2c81fb9cSAntonio Huete Jimenez #endif
218*2c81fb9cSAntonio Huete Jimenez 
219*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ARC4RANDOM_UNIFORM
220*2c81fb9cSAntonio Huete Jimenez uint32_t arc4random_uniform(uint32_t);
221*2c81fb9cSAntonio Huete Jimenez #endif
222*2c81fb9cSAntonio Huete Jimenez 
223*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_ASPRINTF
224*2c81fb9cSAntonio Huete Jimenez int asprintf(char **, const char *, ...);
225*2c81fb9cSAntonio Huete Jimenez #endif
226*2c81fb9cSAntonio Huete Jimenez 
227*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_OPENPTY
228*2c81fb9cSAntonio Huete Jimenez # include <sys/ioctl.h>	/* for struct winsize */
229*2c81fb9cSAntonio Huete Jimenez int openpty(int *, int *, char *, struct termios *, struct winsize *);
230*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_OPENPTY */
231*2c81fb9cSAntonio Huete Jimenez 
232*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_SNPRINTF
233*2c81fb9cSAntonio Huete Jimenez int snprintf(char *, size_t, SNPRINTF_CONST char *, ...);
234*2c81fb9cSAntonio Huete Jimenez #endif
235*2c81fb9cSAntonio Huete Jimenez 
236*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRTOLL
237*2c81fb9cSAntonio Huete Jimenez long long strtoll(const char *, char **, int);
238*2c81fb9cSAntonio Huete Jimenez #endif
239*2c81fb9cSAntonio Huete Jimenez 
240*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRTOUL
241*2c81fb9cSAntonio Huete Jimenez unsigned long strtoul(const char *, char **, int);
242*2c81fb9cSAntonio Huete Jimenez #endif
243*2c81fb9cSAntonio Huete Jimenez 
244*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRTOULL
245*2c81fb9cSAntonio Huete Jimenez unsigned long long strtoull(const char *, char **, int);
246*2c81fb9cSAntonio Huete Jimenez #endif
247*2c81fb9cSAntonio Huete Jimenez 
248*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_STRTONUM
249*2c81fb9cSAntonio Huete Jimenez long long strtonum(const char *, long long, long long, const char **);
250*2c81fb9cSAntonio Huete Jimenez #endif
251*2c81fb9cSAntonio Huete Jimenez 
252*2c81fb9cSAntonio Huete Jimenez /* multibyte character support */
253*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_MBLEN
254*2c81fb9cSAntonio Huete Jimenez # define mblen(x, y)	(1)
255*2c81fb9cSAntonio Huete Jimenez #endif
256*2c81fb9cSAntonio Huete Jimenez 
257*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_WCWIDTH
258*2c81fb9cSAntonio Huete Jimenez # define wcwidth(x)	(((x) >= 0x20 && (x) <= 0x7e) ? 1 : -1)
259*2c81fb9cSAntonio Huete Jimenez /* force our no-op nl_langinfo and mbtowc */
260*2c81fb9cSAntonio Huete Jimenez # undef HAVE_NL_LANGINFO
261*2c81fb9cSAntonio Huete Jimenez # undef HAVE_MBTOWC
262*2c81fb9cSAntonio Huete Jimenez # undef HAVE_LANGINFO_H
263*2c81fb9cSAntonio Huete Jimenez #endif
264*2c81fb9cSAntonio Huete Jimenez 
265*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_NL_LANGINFO
266*2c81fb9cSAntonio Huete Jimenez # define nl_langinfo(x)	""
267*2c81fb9cSAntonio Huete Jimenez #endif
268*2c81fb9cSAntonio Huete Jimenez 
269*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_MBTOWC
270*2c81fb9cSAntonio Huete Jimenez int mbtowc(wchar_t *, const char*, size_t);
271*2c81fb9cSAntonio Huete Jimenez #endif
272*2c81fb9cSAntonio Huete Jimenez 
273*2c81fb9cSAntonio Huete Jimenez #if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF)
274*2c81fb9cSAntonio Huete Jimenez # include <stdarg.h>
275*2c81fb9cSAntonio Huete Jimenez #endif
2762c0338ffSzrj 
2772c0338ffSzrj /*
2782c0338ffSzrj  * Some platforms unconditionally undefine va_copy() so we define VA_COPY()
2792c0338ffSzrj  * instead.  This is known to be the case on at least some configurations of
2802c0338ffSzrj  * AIX with the xlc compiler.
2812c0338ffSzrj  */
2822c0338ffSzrj #ifndef VA_COPY
283*2c81fb9cSAntonio Huete Jimenez # ifdef HAVE_VA_COPY
2842c0338ffSzrj #  define VA_COPY(dest, src) va_copy(dest, src)
285*2c81fb9cSAntonio Huete Jimenez # else
286*2c81fb9cSAntonio Huete Jimenez #  ifdef HAVE___VA_COPY
287*2c81fb9cSAntonio Huete Jimenez #   define VA_COPY(dest, src) __va_copy(dest, src)
288*2c81fb9cSAntonio Huete Jimenez #  else
289*2c81fb9cSAntonio Huete Jimenez #   define VA_COPY(dest, src) (dest) = (src)
290*2c81fb9cSAntonio Huete Jimenez #  endif
291*2c81fb9cSAntonio Huete Jimenez # endif
292*2c81fb9cSAntonio Huete Jimenez #endif
293*2c81fb9cSAntonio Huete Jimenez 
294*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_VASPRINTF
295*2c81fb9cSAntonio Huete Jimenez int vasprintf(char **, const char *, va_list);
296*2c81fb9cSAntonio Huete Jimenez #endif
297*2c81fb9cSAntonio Huete Jimenez 
298*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_VSNPRINTF
299*2c81fb9cSAntonio Huete Jimenez int vsnprintf(char *, size_t, const char *, va_list);
300*2c81fb9cSAntonio Huete Jimenez #endif
301*2c81fb9cSAntonio Huete Jimenez 
302*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_USER_FROM_UID
303*2c81fb9cSAntonio Huete Jimenez char *user_from_uid(uid_t, int);
304*2c81fb9cSAntonio Huete Jimenez #endif
305*2c81fb9cSAntonio Huete Jimenez 
306*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_GROUP_FROM_GID
307*2c81fb9cSAntonio Huete Jimenez char *group_from_gid(gid_t, int);
308*2c81fb9cSAntonio Huete Jimenez #endif
309*2c81fb9cSAntonio Huete Jimenez 
310*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_TIMINGSAFE_BCMP
311*2c81fb9cSAntonio Huete Jimenez int timingsafe_bcmp(const void *, const void *, size_t);
3122c0338ffSzrj #endif
3132c0338ffSzrj 
3142c0338ffSzrj #ifndef HAVE_BCRYPT_PBKDF
315*2c81fb9cSAntonio Huete Jimenez int	bcrypt_pbkdf(const char *, size_t, const uint8_t *, size_t,
316*2c81fb9cSAntonio Huete Jimenez     uint8_t *, size_t, unsigned int);
317*2c81fb9cSAntonio Huete Jimenez #endif
318*2c81fb9cSAntonio Huete Jimenez 
319*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_EXPLICIT_BZERO
320*2c81fb9cSAntonio Huete Jimenez void explicit_bzero(void *p, size_t n);
321*2c81fb9cSAntonio Huete Jimenez #endif
322*2c81fb9cSAntonio Huete Jimenez 
323*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_FREEZERO
324*2c81fb9cSAntonio Huete Jimenez void freezero(void *, size_t);
325*2c81fb9cSAntonio Huete Jimenez #endif
326*2c81fb9cSAntonio Huete Jimenez 
327*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_LOCALTIME_R
328*2c81fb9cSAntonio Huete Jimenez struct tm *localtime_r(const time_t *, struct tm *);
329*2c81fb9cSAntonio Huete Jimenez #endif
330*2c81fb9cSAntonio Huete Jimenez 
331*2c81fb9cSAntonio Huete Jimenez #ifndef HAVE_TIMEGM
332*2c81fb9cSAntonio Huete Jimenez time_t timegm(struct tm *);
3332c0338ffSzrj #endif
3342c0338ffSzrj 
3352c0338ffSzrj char *xcrypt(const char *password, const char *salt);
3362c0338ffSzrj char *shadow_pw(struct passwd *pw);
3372c0338ffSzrj 
338*2c81fb9cSAntonio Huete Jimenez /* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */
339*2c81fb9cSAntonio Huete Jimenez #if defined(HAVE_FEATURES_H) && defined(_FORTIFY_SOURCE)
340*2c81fb9cSAntonio Huete Jimenez # include <features.h>
341*2c81fb9cSAntonio Huete Jimenez # if defined(__GNU_LIBRARY__) && defined(__GLIBC_PREREQ)
342*2c81fb9cSAntonio Huete Jimenez #  if __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0)
343*2c81fb9cSAntonio Huete Jimenez #   include <sys/socket.h>  /* Ensure include guard is defined */
344*2c81fb9cSAntonio Huete Jimenez #   undef FD_SET
345*2c81fb9cSAntonio Huete Jimenez #   undef FD_ISSET
346*2c81fb9cSAntonio Huete Jimenez #   define FD_SET(n, set)	kludge_FD_SET(n, set)
347*2c81fb9cSAntonio Huete Jimenez #   define FD_ISSET(n, set)	kludge_FD_ISSET(n, set)
348*2c81fb9cSAntonio Huete Jimenez void kludge_FD_SET(int, fd_set *);
349*2c81fb9cSAntonio Huete Jimenez int kludge_FD_ISSET(int, fd_set *);
350*2c81fb9cSAntonio Huete Jimenez #  endif /* __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) */
351*2c81fb9cSAntonio Huete Jimenez # endif /* __GNU_LIBRARY__ && __GLIBC_PREREQ */
352*2c81fb9cSAntonio Huete Jimenez #endif /* HAVE_FEATURES_H && _FORTIFY_SOURCE */
3532c0338ffSzrj 
3542c0338ffSzrj #endif /* _OPENBSD_COMPAT_H */
355