27 #ifndef _OPENBSD_COMPAT_H 28 #define _OPENBSD_COMPAT_H 32 #include <sys/types.h> 35 #include <sys/socket.h> 42 #include "readpassphrase.h" 44 #include "getrrsetbyname.h" 52 char *basename(
const char *path);
55 #ifndef HAVE_BINDRESVPORT_SA 56 int bindresvport_sa(
int sd,
struct sockaddr *sa);
59 #ifndef HAVE_CLOSEFROM 64 char *getcwd(
char *pt,
size_t size);
67 #ifndef HAVE_REALLOCARRAY 68 void *reallocarray(
void *,
size_t,
size_t);
71 #if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) 76 # ifdef BROKEN_REALPATH 77 # define realpath(x, y) _ssh_compat_realpath(x, y) 80 char *realpath(
const char *path,
char *resolved);
83 #ifndef HAVE_RRESVPORT_AF 84 int rresvport_af(
int *alport, sa_family_t af);
88 size_t strlcpy(
char *dst,
const char *src,
size_t siz);
92 size_t strlcat(
char *dst,
const char *src,
size_t siz);
95 #ifndef HAVE_STRCASESTR 96 char *strcasestr(
const char *,
const char *);
100 int setenv(
register const char *name,
register const char *value,
int rewrite);
104 void strmode(
int mode,
char *p);
107 #ifndef HAVE_STRPTIME 109 char *strptime(
const char *buf,
const char *fmt,
struct tm *tm);
112 #if !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) 113 int mkstemps(
char *path,
int slen);
114 int mkstemp(
char *path);
115 char *mkdtemp(
char *path);
119 int daemon(
int nochdir,
int noclose);
123 char *dirname(
const char *path);
126 #ifndef HAVE_FMT_SCALED 127 #define FMT_SCALED_STRSIZE 7 128 int fmt_scaled(
long long number,
char *result);
131 #ifndef HAVE_SCAN_SCALED 132 int scan_scaled(
char *,
long long *);
135 #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) 136 char *inet_ntoa(
struct in_addr in);
139 #ifndef HAVE_INET_NTOP 140 const char *inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
143 #ifndef HAVE_INET_ATON 144 int inet_aton(
const char *cp,
struct in_addr *addr);
148 char *strsep(
char **stringp,
const char *delim);
151 #ifndef HAVE_SETPROCTITLE 152 void setproctitle(
const char *fmt, ...);
153 void compat_init_setproctitle(
int argc,
char *argv[]);
156 #ifndef HAVE_GETGROUPLIST 157 int getgrouplist(
const char *, gid_t, gid_t *,
int *);
160 #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) 161 int BSDgetopt(
int argc,
char *
const *argv,
const char *opts);
162 #include "openbsd-compat/getopt.h" 165 #if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0 166 # include <sys/types.h> 167 # include <sys/uio.h> 168 int writev(
int,
struct iovec *,
int);
172 #include "bsd-misc.h" 173 #include "bsd-setres_id.h" 174 #include "bsd-statvfs.h" 175 #include "bsd-waitpid.h" 176 #include "bsd-poll.h" 178 #ifndef HAVE_GETPEEREID 179 int getpeereid(
int , uid_t *, gid_t *);
182 #ifdef HAVE_ARC4RANDOM 183 # ifndef HAVE_ARC4RANDOM_STIR 184 # define arc4random_stir() 187 unsigned int arc4random(
void);
188 void arc4random_stir(
void);
191 #ifndef HAVE_ARC4RANDOM_BUF 192 void arc4random_buf(
void *,
size_t);
195 #ifndef HAVE_ARC4RANDOM_UNIFORM 196 u_int32_t arc4random_uniform(u_int32_t);
199 #ifndef HAVE_ASPRINTF 200 int asprintf(
char **,
const char *, ...);
204 # include <sys/ioctl.h> 205 int openpty(
int *,
int *,
char *,
struct termios *,
struct winsize *);
208 #ifndef HAVE_SNPRINTF 209 int snprintf(
char *,
size_t, SNPRINTF_CONST
char *, ...);
213 long long strtoll(
const char *,
char **,
int);
217 unsigned long strtoul(
const char *,
char **,
int);
220 #ifndef HAVE_STRTOULL 221 unsigned long long strtoull(
const char *,
char **,
int);
224 #ifndef HAVE_STRTONUM 225 long long strtonum(
const char *,
long long,
long long,
const char **);
230 # define mblen(x, y) (1) 234 # define wcwidth(x) (((x) >= 0x20 && (x) <= 0x7e) ? 1 : -1) 236 # undef HAVE_NL_LANGINFO 238 # undef HAVE_LANGINFO_H 241 #ifndef HAVE_NL_LANGINFO 242 # define nl_langinfo(x) "" 246 int mbtowc(
wchar_t *,
const char*,
size_t);
249 #if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF) 260 # define VA_COPY(dest, src) va_copy(dest, src) 262 # ifdef HAVE___VA_COPY 263 # define VA_COPY(dest, src) __va_copy(dest, src) 265 # define VA_COPY(dest, src) (dest) = (src) 270 #ifndef HAVE_VASPRINTF 271 int vasprintf(
char **,
const char *, va_list);
274 #ifndef HAVE_VSNPRINTF 275 int vsnprintf(
char *,
size_t,
const char *, va_list);
278 #ifndef HAVE_USER_FROM_UID 279 char *user_from_uid(uid_t,
int);
282 #ifndef HAVE_GROUP_FROM_GID 283 char *group_from_gid(gid_t,
int);
286 #ifndef HAVE_TIMINGSAFE_BCMP 287 int timingsafe_bcmp(
const void *,
const void *,
size_t);
290 #ifndef HAVE_BCRYPT_PBKDF 291 int bcrypt_pbkdf(
const char *,
size_t,
const u_int8_t *,
size_t,
292 u_int8_t *,
size_t,
unsigned int);
295 #ifndef HAVE_EXPLICIT_BZERO 296 void explicit_bzero(
void *p,
size_t n);
299 char *xcrypt(
const char *password,
const char *salt);
300 char *shadow_pw(
struct passwd *pw);
303 #include "fake-rfc2553.h" 306 #include "bsd-cray.h" 307 #include "bsd-cygwin_util.h" 309 #include "port-aix.h" 310 #include "port-irix.h" 311 #include "port-linux.h" 312 #include "port-solaris.h" 313 #include "port-tun.h" 317 #if defined(HAVE_FEATURES_H) && defined(_FORTIFY_SOURCE) 318 # include <features.h> 319 # if defined(__GNU_LIBRARY__) && defined(__GLIBC_PREREQ) 320 # if __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) 321 # include <sys/socket.h> 324 # define FD_SET(n, set) kludge_FD_SET(n, set) 325 # define FD_ISSET(n, set) kludge_FD_ISSET(n, set) 326 void kludge_FD_SET(
int, fd_set *);
327 int kludge_FD_ISSET(
int, fd_set *);