1d95e11bfSDag-Erling Smørgrav /* 2d95e11bfSDag-Erling Smørgrav * Copyright (c) 1999-2003 Damien Miller. All rights reserved. 3d95e11bfSDag-Erling Smørgrav * Copyright (c) 2003 Ben Lindstrom. All rights reserved. 4d95e11bfSDag-Erling Smørgrav * Copyright (c) 2002 Tim Rice. All rights reserved. 5d95e11bfSDag-Erling Smørgrav * 6d95e11bfSDag-Erling Smørgrav * Redistribution and use in source and binary forms, with or without 7d95e11bfSDag-Erling Smørgrav * modification, are permitted provided that the following conditions 8d95e11bfSDag-Erling Smørgrav * are met: 9d95e11bfSDag-Erling Smørgrav * 1. Redistributions of source code must retain the above copyright 10d95e11bfSDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer. 11d95e11bfSDag-Erling Smørgrav * 2. Redistributions in binary form must reproduce the above copyright 12d95e11bfSDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer in the 13d95e11bfSDag-Erling Smørgrav * documentation and/or other materials provided with the distribution. 14d95e11bfSDag-Erling Smørgrav * 15d95e11bfSDag-Erling Smørgrav * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16d95e11bfSDag-Erling Smørgrav * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17d95e11bfSDag-Erling Smørgrav * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18d95e11bfSDag-Erling Smørgrav * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19d95e11bfSDag-Erling Smørgrav * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20d95e11bfSDag-Erling Smørgrav * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21d95e11bfSDag-Erling Smørgrav * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22d95e11bfSDag-Erling Smørgrav * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23d95e11bfSDag-Erling Smørgrav * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24d95e11bfSDag-Erling Smørgrav * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25d95e11bfSDag-Erling Smørgrav */ 2683d2307dSDag-Erling Smørgrav 27d95e11bfSDag-Erling Smørgrav #ifndef _OPENBSD_COMPAT_H 28d95e11bfSDag-Erling Smørgrav #define _OPENBSD_COMPAT_H 29d95e11bfSDag-Erling Smørgrav 30d95e11bfSDag-Erling Smørgrav #include "includes.h" 3183d2307dSDag-Erling Smørgrav 32761efaa7SDag-Erling Smørgrav #include <sys/types.h> 33761efaa7SDag-Erling Smørgrav #include <pwd.h> 34761efaa7SDag-Erling Smørgrav 35761efaa7SDag-Erling Smørgrav #include <sys/socket.h> 36761efaa7SDag-Erling Smørgrav 37076ad2f8SDag-Erling Smørgrav #include <stddef.h> /* for wchar_t */ 38076ad2f8SDag-Erling Smørgrav 3983d2307dSDag-Erling Smørgrav /* OpenBSD function replacements */ 4083d2307dSDag-Erling Smørgrav #include "base64.h" 4183d2307dSDag-Erling Smørgrav #include "sigact.h" 4283d2307dSDag-Erling Smørgrav #include "readpassphrase.h" 43d0c8c0bcSDag-Erling Smørgrav #include "vis.h" 44d95e11bfSDag-Erling Smørgrav #include "getrrsetbyname.h" 45bc5531deSDag-Erling Smørgrav #include "sha1.h" 46761efaa7SDag-Erling Smørgrav #include "sha2.h" 47bc5531deSDag-Erling Smørgrav #include "md5.h" 48f7167e0eSDag-Erling Smørgrav #include "blf.h" 4919261079SEd Maste #include "fnmatch.h" 5019261079SEd Maste 51*a91a2465SEd Maste #ifndef __THROW 52*a91a2465SEd Maste # if defined __cplusplus 53*a91a2465SEd Maste # define __THROW throw() 54*a91a2465SEd Maste # else 55*a91a2465SEd Maste # define __THROW 56*a91a2465SEd Maste # endif 57*a91a2465SEd Maste #endif 58*a91a2465SEd Maste 5919261079SEd Maste #if defined(HAVE_LOGIN_CAP) && !defined(HAVE_LOGIN_GETPWCLASS) 6019261079SEd Maste # include <login_cap.h> 6119261079SEd Maste # define login_getpwclass(pw) login_getclass(pw->pw_class) 6219261079SEd Maste #endif 63d95e11bfSDag-Erling Smørgrav 64d95e11bfSDag-Erling Smørgrav #ifndef HAVE_BASENAME 65d95e11bfSDag-Erling Smørgrav char *basename(const char *path); 66d95e11bfSDag-Erling Smørgrav #endif 67d95e11bfSDag-Erling Smørgrav 68d95e11bfSDag-Erling Smørgrav #ifndef HAVE_BINDRESVPORT_SA 69d95e11bfSDag-Erling Smørgrav int bindresvport_sa(int sd, struct sockaddr *sa); 70d95e11bfSDag-Erling Smørgrav #endif 71d95e11bfSDag-Erling Smørgrav 72d74d50a8SDag-Erling Smørgrav #ifndef HAVE_CLOSEFROM 73d74d50a8SDag-Erling Smørgrav void closefrom(int); 74d74d50a8SDag-Erling Smørgrav #endif 75d74d50a8SDag-Erling Smørgrav 7687c1498dSEd Maste #if defined(HAVE_DECL_FTRUNCATE) && HAVE_DECL_FTRUNCATE == 0 7787c1498dSEd Maste int ftruncate(int filedes, off_t length); 7887c1498dSEd Maste #endif 7987c1498dSEd Maste 80190cef3dSDag-Erling Smørgrav #ifndef HAVE_GETLINE 8119261079SEd Maste #include <stdio.h> 82190cef3dSDag-Erling Smørgrav ssize_t getline(char **, size_t *, FILE *); 83190cef3dSDag-Erling Smørgrav #endif 84190cef3dSDag-Erling Smørgrav 854f52dfbbSDag-Erling Smørgrav #ifndef HAVE_GETPAGESIZE 864f52dfbbSDag-Erling Smørgrav int getpagesize(void); 874f52dfbbSDag-Erling Smørgrav #endif 884f52dfbbSDag-Erling Smørgrav 89d95e11bfSDag-Erling Smørgrav #ifndef HAVE_GETCWD 90d95e11bfSDag-Erling Smørgrav char *getcwd(char *pt, size_t size); 91d95e11bfSDag-Erling Smørgrav #endif 92d95e11bfSDag-Erling Smørgrav 9387c1498dSEd Maste #ifndef HAVE_KILLPG 9487c1498dSEd Maste int killpg(pid_t, int); 9587c1498dSEd Maste #endif 9687c1498dSEd Maste 9719261079SEd Maste #if defined(HAVE_DECL_MEMMEM) && HAVE_DECL_MEMMEM == 0 9819261079SEd Maste void *memmem(const void *, size_t, const void *, size_t); 9919261079SEd Maste #endif 10019261079SEd Maste 101bc5531deSDag-Erling Smørgrav #ifndef HAVE_REALLOCARRAY 102bc5531deSDag-Erling Smørgrav void *reallocarray(void *, size_t, size_t); 103bc5531deSDag-Erling Smørgrav #endif 104bc5531deSDag-Erling Smørgrav 1054f52dfbbSDag-Erling Smørgrav #ifndef HAVE_RECALLOCARRAY 1064f52dfbbSDag-Erling Smørgrav void *recallocarray(void *, size_t, size_t, size_t); 1074f52dfbbSDag-Erling Smørgrav #endif 1084f52dfbbSDag-Erling Smørgrav 109d95e11bfSDag-Erling Smørgrav #ifndef HAVE_RRESVPORT_AF 110d95e11bfSDag-Erling Smørgrav int rresvport_af(int *alport, sa_family_t af); 111d95e11bfSDag-Erling Smørgrav #endif 112d95e11bfSDag-Erling Smørgrav 113d95e11bfSDag-Erling Smørgrav #ifndef HAVE_STRLCPY 114d95e11bfSDag-Erling Smørgrav size_t strlcpy(char *dst, const char *src, size_t siz); 115d95e11bfSDag-Erling Smørgrav #endif 116d95e11bfSDag-Erling Smørgrav 117d95e11bfSDag-Erling Smørgrav #ifndef HAVE_STRLCAT 118d95e11bfSDag-Erling Smørgrav size_t strlcat(char *dst, const char *src, size_t siz); 119d95e11bfSDag-Erling Smørgrav #endif 120d95e11bfSDag-Erling Smørgrav 121ca86bcf2SDag-Erling Smørgrav #ifndef HAVE_STRCASESTR 122ca86bcf2SDag-Erling Smørgrav char *strcasestr(const char *, const char *); 123ca86bcf2SDag-Erling Smørgrav #endif 124ca86bcf2SDag-Erling Smørgrav 12519261079SEd Maste #ifndef HAVE_STRNLEN 12619261079SEd Maste size_t strnlen(const char *, size_t); 12719261079SEd Maste #endif 12819261079SEd Maste 12919261079SEd Maste #ifndef HAVE_STRNDUP 13019261079SEd Maste char *strndup(const char *s, size_t n); 13119261079SEd Maste #endif 13219261079SEd Maste 133d95e11bfSDag-Erling Smørgrav #ifndef HAVE_SETENV 134d95e11bfSDag-Erling Smørgrav int setenv(register const char *name, register const char *value, int rewrite); 135d95e11bfSDag-Erling Smørgrav #endif 136d95e11bfSDag-Erling Smørgrav 137d95e11bfSDag-Erling Smørgrav #ifndef HAVE_STRMODE 138d95e11bfSDag-Erling Smørgrav void strmode(int mode, char *p); 139d95e11bfSDag-Erling Smørgrav #endif 140d95e11bfSDag-Erling Smørgrav 141e2f6069cSDag-Erling Smørgrav #ifndef HAVE_STRPTIME 142e2f6069cSDag-Erling Smørgrav #include <time.h> 143e2f6069cSDag-Erling Smørgrav char *strptime(const char *buf, const char *fmt, struct tm *tm); 144e2f6069cSDag-Erling Smørgrav #endif 145e2f6069cSDag-Erling Smørgrav 14619261079SEd Maste #if !defined(HAVE_MKDTEMP) 147d95e11bfSDag-Erling Smørgrav int mkstemps(char *path, int slen); 148d95e11bfSDag-Erling Smørgrav int mkstemp(char *path); 149d95e11bfSDag-Erling Smørgrav char *mkdtemp(char *path); 150d95e11bfSDag-Erling Smørgrav #endif 151d95e11bfSDag-Erling Smørgrav 1524d3fc8b0SEd Maste #define mkstemp(x) _ssh_mkstemp(x) 1534d3fc8b0SEd Maste int _ssh_mkstemp(char *); 1544d3fc8b0SEd Maste 155d95e11bfSDag-Erling Smørgrav #ifndef HAVE_DAEMON 156d95e11bfSDag-Erling Smørgrav int daemon(int nochdir, int noclose); 157d95e11bfSDag-Erling Smørgrav #endif 158d95e11bfSDag-Erling Smørgrav 159d95e11bfSDag-Erling Smørgrav #ifndef HAVE_DIRNAME 160d95e11bfSDag-Erling Smørgrav char *dirname(const char *path); 161d95e11bfSDag-Erling Smørgrav #endif 162d95e11bfSDag-Erling Smørgrav 163d4af9e69SDag-Erling Smørgrav #ifndef HAVE_FMT_SCALED 164d4af9e69SDag-Erling Smørgrav #define FMT_SCALED_STRSIZE 7 165d4af9e69SDag-Erling Smørgrav int fmt_scaled(long long number, char *result); 166d4af9e69SDag-Erling Smørgrav #endif 167d4af9e69SDag-Erling Smørgrav 168e4a9863fSDag-Erling Smørgrav #ifndef HAVE_SCAN_SCALED 169e4a9863fSDag-Erling Smørgrav int scan_scaled(char *, long long *); 170e4a9863fSDag-Erling Smørgrav #endif 171e4a9863fSDag-Erling Smørgrav 172d95e11bfSDag-Erling Smørgrav #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) 173d95e11bfSDag-Erling Smørgrav char *inet_ntoa(struct in_addr in); 174d95e11bfSDag-Erling Smørgrav #endif 175d95e11bfSDag-Erling Smørgrav 176d95e11bfSDag-Erling Smørgrav #ifndef HAVE_INET_NTOP 177462c32cbSDag-Erling Smørgrav const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 178d95e11bfSDag-Erling Smørgrav #endif 179d95e11bfSDag-Erling Smørgrav 180d95e11bfSDag-Erling Smørgrav #ifndef HAVE_INET_ATON 181d95e11bfSDag-Erling Smørgrav int inet_aton(const char *cp, struct in_addr *addr); 182d95e11bfSDag-Erling Smørgrav #endif 183d95e11bfSDag-Erling Smørgrav 184d95e11bfSDag-Erling Smørgrav #ifndef HAVE_STRSEP 185d95e11bfSDag-Erling Smørgrav char *strsep(char **stringp, const char *delim); 186d95e11bfSDag-Erling Smørgrav #endif 187d95e11bfSDag-Erling Smørgrav 188d95e11bfSDag-Erling Smørgrav #ifndef HAVE_SETPROCTITLE 189d95e11bfSDag-Erling Smørgrav void setproctitle(const char *fmt, ...); 190d95e11bfSDag-Erling Smørgrav void compat_init_setproctitle(int argc, char *argv[]); 191d95e11bfSDag-Erling Smørgrav #endif 192d95e11bfSDag-Erling Smørgrav 193d95e11bfSDag-Erling Smørgrav #ifndef HAVE_GETGROUPLIST 194d95e11bfSDag-Erling Smørgrav int getgrouplist(const char *, gid_t, gid_t *, int *); 195d95e11bfSDag-Erling Smørgrav #endif 196d95e11bfSDag-Erling Smørgrav 197d95e11bfSDag-Erling Smørgrav #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) 198*a91a2465SEd Maste int BSDgetopt(int argc, char * const *argv, const char *opts) __THROW; 199e4a9863fSDag-Erling Smørgrav #include "openbsd-compat/getopt.h" 200d95e11bfSDag-Erling Smørgrav #endif 201d95e11bfSDag-Erling Smørgrav 20247dd1d1bSDag-Erling Smørgrav #if ((defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0) || \ 20347dd1d1bSDag-Erling Smørgrav (defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0)) 204761efaa7SDag-Erling Smørgrav # include <sys/types.h> 205761efaa7SDag-Erling Smørgrav # include <sys/uio.h> 20647dd1d1bSDag-Erling Smørgrav 20747dd1d1bSDag-Erling Smørgrav # if defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0 20847dd1d1bSDag-Erling Smørgrav int readv(int, struct iovec *, int); 20947dd1d1bSDag-Erling Smørgrav # endif 21047dd1d1bSDag-Erling Smørgrav 21147dd1d1bSDag-Erling Smørgrav # if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0 212761efaa7SDag-Erling Smørgrav int writev(int, struct iovec *, int); 213761efaa7SDag-Erling Smørgrav # endif 21447dd1d1bSDag-Erling Smørgrav #endif 21583d2307dSDag-Erling Smørgrav 21683d2307dSDag-Erling Smørgrav /* Home grown routines */ 21719261079SEd Maste #include "bsd-signal.h" 21883d2307dSDag-Erling Smørgrav #include "bsd-misc.h" 2196888a9beSDag-Erling Smørgrav #include "bsd-setres_id.h" 220d4af9e69SDag-Erling Smørgrav #include "bsd-statvfs.h" 22183d2307dSDag-Erling Smørgrav #include "bsd-waitpid.h" 222d4af9e69SDag-Erling Smørgrav #include "bsd-poll.h" 22383d2307dSDag-Erling Smørgrav 22419261079SEd Maste #if defined(HAVE_DECL_GETPEEREID) && HAVE_DECL_GETPEEREID == 0 225d95e11bfSDag-Erling Smørgrav int getpeereid(int , uid_t *, gid_t *); 226d95e11bfSDag-Erling Smørgrav #endif 227d95e11bfSDag-Erling Smørgrav 22838a52bd3SEd Maste #ifndef HAVE_ARC4RANDOM 22938a52bd3SEd Maste uint32_t arc4random(void); 230d95e11bfSDag-Erling Smørgrav #endif /* !HAVE_ARC4RANDOM */ 231d95e11bfSDag-Erling Smørgrav 232d4af9e69SDag-Erling Smørgrav #ifndef HAVE_ARC4RANDOM_BUF 233d4af9e69SDag-Erling Smørgrav void arc4random_buf(void *, size_t); 234d4af9e69SDag-Erling Smørgrav #endif 235d4af9e69SDag-Erling Smørgrav 23638a52bd3SEd Maste #ifndef HAVE_ARC4RANDOM_STIR 23738a52bd3SEd Maste # define arc4random_stir() 23838a52bd3SEd Maste #endif 23938a52bd3SEd Maste 240d4af9e69SDag-Erling Smørgrav #ifndef HAVE_ARC4RANDOM_UNIFORM 24138a52bd3SEd Maste uint32_t arc4random_uniform(uint32_t); 242d4af9e69SDag-Erling Smørgrav #endif 243d4af9e69SDag-Erling Smørgrav 244021d409fSDag-Erling Smørgrav #ifndef HAVE_ASPRINTF 245021d409fSDag-Erling Smørgrav int asprintf(char **, const char *, ...); 246021d409fSDag-Erling Smørgrav #endif 247021d409fSDag-Erling Smørgrav 248efcad6b7SDag-Erling Smørgrav #ifndef HAVE_OPENPTY 249761efaa7SDag-Erling Smørgrav # include <sys/ioctl.h> /* for struct winsize */ 250efcad6b7SDag-Erling Smørgrav int openpty(int *, int *, char *, struct termios *, struct winsize *); 251efcad6b7SDag-Erling Smørgrav #endif /* HAVE_OPENPTY */ 252d95e11bfSDag-Erling Smørgrav 253d95e11bfSDag-Erling Smørgrav #ifndef HAVE_SNPRINTF 254761efaa7SDag-Erling Smørgrav int snprintf(char *, size_t, SNPRINTF_CONST char *, ...); 255d95e11bfSDag-Erling Smørgrav #endif 256d95e11bfSDag-Erling Smørgrav 257021d409fSDag-Erling Smørgrav #ifndef HAVE_STRTOLL 258021d409fSDag-Erling Smørgrav long long strtoll(const char *, char **, int); 259021d409fSDag-Erling Smørgrav #endif 260021d409fSDag-Erling Smørgrav 2616888a9beSDag-Erling Smørgrav #ifndef HAVE_STRTOUL 2626888a9beSDag-Erling Smørgrav unsigned long strtoul(const char *, char **, int); 2636888a9beSDag-Erling Smørgrav #endif 2646888a9beSDag-Erling Smørgrav 2656888a9beSDag-Erling Smørgrav #ifndef HAVE_STRTOULL 2666888a9beSDag-Erling Smørgrav unsigned long long strtoull(const char *, char **, int); 2676888a9beSDag-Erling Smørgrav #endif 2686888a9beSDag-Erling Smørgrav 269043840dfSDag-Erling Smørgrav #ifndef HAVE_STRTONUM 270043840dfSDag-Erling Smørgrav long long strtonum(const char *, long long, long long, const char **); 271043840dfSDag-Erling Smørgrav #endif 272043840dfSDag-Erling Smørgrav 273e4a9863fSDag-Erling Smørgrav /* multibyte character support */ 274e4a9863fSDag-Erling Smørgrav #ifndef HAVE_MBLEN 275557f75e5SDag-Erling Smørgrav # define mblen(x, y) (1) 276e4a9863fSDag-Erling Smørgrav #endif 277e4a9863fSDag-Erling Smørgrav 278076ad2f8SDag-Erling Smørgrav #ifndef HAVE_WCWIDTH 279076ad2f8SDag-Erling Smørgrav # define wcwidth(x) (((x) >= 0x20 && (x) <= 0x7e) ? 1 : -1) 280076ad2f8SDag-Erling Smørgrav /* force our no-op nl_langinfo and mbtowc */ 281076ad2f8SDag-Erling Smørgrav # undef HAVE_NL_LANGINFO 282076ad2f8SDag-Erling Smørgrav # undef HAVE_MBTOWC 283076ad2f8SDag-Erling Smørgrav # undef HAVE_LANGINFO_H 284076ad2f8SDag-Erling Smørgrav #endif 285076ad2f8SDag-Erling Smørgrav 286076ad2f8SDag-Erling Smørgrav #ifndef HAVE_NL_LANGINFO 287076ad2f8SDag-Erling Smørgrav # define nl_langinfo(x) "" 288076ad2f8SDag-Erling Smørgrav #endif 289076ad2f8SDag-Erling Smørgrav 290076ad2f8SDag-Erling Smørgrav #ifndef HAVE_MBTOWC 291076ad2f8SDag-Erling Smørgrav int mbtowc(wchar_t *, const char*, size_t); 292076ad2f8SDag-Erling Smørgrav #endif 293076ad2f8SDag-Erling Smørgrav 294761efaa7SDag-Erling Smørgrav #if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF) 295761efaa7SDag-Erling Smørgrav # include <stdarg.h> 296761efaa7SDag-Erling Smørgrav #endif 297761efaa7SDag-Erling Smørgrav 298076ad2f8SDag-Erling Smørgrav /* 299076ad2f8SDag-Erling Smørgrav * Some platforms unconditionally undefine va_copy() so we define VA_COPY() 300076ad2f8SDag-Erling Smørgrav * instead. This is known to be the case on at least some configurations of 301076ad2f8SDag-Erling Smørgrav * AIX with the xlc compiler. 302076ad2f8SDag-Erling Smørgrav */ 303076ad2f8SDag-Erling Smørgrav #ifndef VA_COPY 304076ad2f8SDag-Erling Smørgrav # ifdef HAVE_VA_COPY 305076ad2f8SDag-Erling Smørgrav # define VA_COPY(dest, src) va_copy(dest, src) 306076ad2f8SDag-Erling Smørgrav # else 307076ad2f8SDag-Erling Smørgrav # ifdef HAVE___VA_COPY 308076ad2f8SDag-Erling Smørgrav # define VA_COPY(dest, src) __va_copy(dest, src) 309076ad2f8SDag-Erling Smørgrav # else 310076ad2f8SDag-Erling Smørgrav # define VA_COPY(dest, src) (dest) = (src) 311076ad2f8SDag-Erling Smørgrav # endif 312076ad2f8SDag-Erling Smørgrav # endif 313076ad2f8SDag-Erling Smørgrav #endif 314076ad2f8SDag-Erling Smørgrav 315021d409fSDag-Erling Smørgrav #ifndef HAVE_VASPRINTF 316021d409fSDag-Erling Smørgrav int vasprintf(char **, const char *, va_list); 317021d409fSDag-Erling Smørgrav #endif 318021d409fSDag-Erling Smørgrav 319d95e11bfSDag-Erling Smørgrav #ifndef HAVE_VSNPRINTF 320d95e11bfSDag-Erling Smørgrav int vsnprintf(char *, size_t, const char *, va_list); 321d95e11bfSDag-Erling Smørgrav #endif 322d95e11bfSDag-Erling Smørgrav 323b15c8340SDag-Erling Smørgrav #ifndef HAVE_USER_FROM_UID 324b15c8340SDag-Erling Smørgrav char *user_from_uid(uid_t, int); 325b15c8340SDag-Erling Smørgrav #endif 326b15c8340SDag-Erling Smørgrav 327b15c8340SDag-Erling Smørgrav #ifndef HAVE_GROUP_FROM_GID 328b15c8340SDag-Erling Smørgrav char *group_from_gid(gid_t, int); 329b15c8340SDag-Erling Smørgrav #endif 330b15c8340SDag-Erling Smørgrav 3314a421b63SDag-Erling Smørgrav #ifndef HAVE_TIMINGSAFE_BCMP 3324a421b63SDag-Erling Smørgrav int timingsafe_bcmp(const void *, const void *, size_t); 3334a421b63SDag-Erling Smørgrav #endif 3344a421b63SDag-Erling Smørgrav 335f7167e0eSDag-Erling Smørgrav #ifndef HAVE_BCRYPT_PBKDF 3361323ec57SEd Maste int bcrypt_pbkdf(const char *, size_t, const uint8_t *, size_t, 3371323ec57SEd Maste uint8_t *, size_t, unsigned int); 338f7167e0eSDag-Erling Smørgrav #endif 339f7167e0eSDag-Erling Smørgrav 340b83788ffSDag-Erling Smørgrav #ifndef HAVE_EXPLICIT_BZERO 341b83788ffSDag-Erling Smørgrav void explicit_bzero(void *p, size_t n); 342b83788ffSDag-Erling Smørgrav #endif 343b83788ffSDag-Erling Smørgrav 3444f52dfbbSDag-Erling Smørgrav #ifndef HAVE_FREEZERO 3454f52dfbbSDag-Erling Smørgrav void freezero(void *, size_t); 3464f52dfbbSDag-Erling Smørgrav #endif 3474f52dfbbSDag-Erling Smørgrav 34819261079SEd Maste #ifndef HAVE_LOCALTIME_R 34919261079SEd Maste struct tm *localtime_r(const time_t *, struct tm *); 35019261079SEd Maste #endif 35119261079SEd Maste 35238a52bd3SEd Maste #ifndef HAVE_TIMEGM 353f374ba41SEd Maste #include <time.h> 35438a52bd3SEd Maste time_t timegm(struct tm *); 35538a52bd3SEd Maste #endif 35638a52bd3SEd Maste 357d95e11bfSDag-Erling Smørgrav char *xcrypt(const char *password, const char *salt); 358d95e11bfSDag-Erling Smørgrav char *shadow_pw(struct passwd *pw); 359d95e11bfSDag-Erling Smørgrav 36083d2307dSDag-Erling Smørgrav /* rfc2553 socket API replacements */ 361d95e11bfSDag-Erling Smørgrav #include "fake-rfc2553.h" 36283d2307dSDag-Erling Smørgrav 36383d2307dSDag-Erling Smørgrav /* Routines for a single OS platform */ 364d95e11bfSDag-Erling Smørgrav #include "bsd-cygwin_util.h" 365761efaa7SDag-Erling Smørgrav 36683d2307dSDag-Erling Smørgrav #include "port-aix.h" 367761efaa7SDag-Erling Smørgrav #include "port-irix.h" 368761efaa7SDag-Erling Smørgrav #include "port-linux.h" 369761efaa7SDag-Erling Smørgrav #include "port-solaris.h" 37047dd1d1bSDag-Erling Smørgrav #include "port-net.h" 371761efaa7SDag-Erling Smørgrav #include "port-uw.h" 37283d2307dSDag-Erling Smørgrav 373a0ee8cc6SDag-Erling Smørgrav /* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */ 374a0ee8cc6SDag-Erling Smørgrav #if defined(HAVE_FEATURES_H) && defined(_FORTIFY_SOURCE) 375a0ee8cc6SDag-Erling Smørgrav # include <features.h> 376a0ee8cc6SDag-Erling Smørgrav # if defined(__GNU_LIBRARY__) && defined(__GLIBC_PREREQ) 377a0ee8cc6SDag-Erling Smørgrav # if __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) 378a0ee8cc6SDag-Erling Smørgrav # include <sys/socket.h> /* Ensure include guard is defined */ 379a0ee8cc6SDag-Erling Smørgrav # undef FD_SET 380a0ee8cc6SDag-Erling Smørgrav # undef FD_ISSET 381a0ee8cc6SDag-Erling Smørgrav # define FD_SET(n, set) kludge_FD_SET(n, set) 382a0ee8cc6SDag-Erling Smørgrav # define FD_ISSET(n, set) kludge_FD_ISSET(n, set) 383a0ee8cc6SDag-Erling Smørgrav void kludge_FD_SET(int, fd_set *); 384a0ee8cc6SDag-Erling Smørgrav int kludge_FD_ISSET(int, fd_set *); 385a0ee8cc6SDag-Erling Smørgrav # endif /* __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) */ 386a0ee8cc6SDag-Erling Smørgrav # endif /* __GNU_LIBRARY__ && __GLIBC_PREREQ */ 387a0ee8cc6SDag-Erling Smørgrav #endif /* HAVE_FEATURES_H && _FORTIFY_SOURCE */ 388a0ee8cc6SDag-Erling Smørgrav 389d95e11bfSDag-Erling Smørgrav #endif /* _OPENBSD_COMPAT_H */ 390