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