29 #ifndef _OPENBSD_COMPAT_H 30 #define _OPENBSD_COMPAT_H 34 #include <sys/types.h> 37 #include <sys/socket.h> 44 #include "readpassphrase.h" 46 #include "getrrsetbyname.h" 54 char *basename(
const char *path);
57 #ifndef HAVE_BINDRESVPORT_SA 58 int bindresvport_sa(
int sd,
struct sockaddr *sa);
61 #ifndef HAVE_CLOSEFROM 66 char *getcwd(
char *pt,
size_t size);
69 #ifndef HAVE_REALLOCARRAY 70 void *reallocarray(
void *,
size_t,
size_t);
73 #if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) 78 # ifdef BROKEN_REALPATH 79 # define realpath(x, y) _ssh_compat_realpath(x, y) 82 char *realpath(
const char *path,
char *resolved);
85 #ifndef HAVE_RRESVPORT_AF 86 int rresvport_af(
int *alport, sa_family_t af);
91 size_t strlcpy(
char *dst,
const char *src,
size_t siz);
96 size_t strlcat(
char *dst,
const char *src,
size_t siz);
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 158 int getgrouplist(
const char *, gid_t, gid_t *,
int *);
161 #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) 162 int BSDgetopt(
int argc,
char *
const *argv,
const char *opts);
163 #include "openbsd-compat/getopt.h" 166 #if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0 167 # include <sys/types.h> 168 # include <sys/uio.h> 169 int writev(
int,
struct iovec *,
int);
173 #include "bsd-misc.h" 174 #include "bsd-setres_id.h" 175 #include "bsd-statvfs.h" 176 #include "bsd-waitpid.h" 177 #include "bsd-poll.h" 179 #ifndef HAVE_GETPEEREID 180 int getpeereid(
int , uid_t *, gid_t *);
183 #ifdef HAVE_ARC4RANDOM 184 # ifndef HAVE_ARC4RANDOM_STIR 185 # define arc4random_stir() 188 unsigned int arc4random(
void);
189 void arc4random_stir(
void);
192 #ifndef HAVE_ARC4RANDOM_BUF 193 void arc4random_buf(
void *,
size_t);
196 #ifndef HAVE_ARC4RANDOM_UNIFORM 197 u_int32_t arc4random_uniform(u_int32_t);
200 #ifndef HAVE_ASPRINTF 201 int asprintf(
char **,
const char *, ...);
205 # include <sys/ioctl.h> 206 int openpty(
int *,
int *,
char *,
struct termios *,
struct winsize *);
211 #ifndef HAVE_SNPRINTF 212 int snprintf(
char *,
size_t, SNPRINTF_CONST
char *, ...);
216 long long strtoll(
const char *,
char **,
int);
220 unsigned long strtoul(
const char *,
char **,
int);
223 #ifndef HAVE_STRTOULL 224 unsigned long long strtoull(
const char *,
char **,
int);
227 #ifndef HAVE_STRTONUM 228 long long strtonum(
const char *,
long long,
long long,
const char **);
233 # define mblen(x, y) (1) 237 # define wcwidth(x) (((x) >= 0x20 && (x) <= 0x7e) ? 1 : -1) 239 # undef HAVE_NL_LANGINFO 241 # undef HAVE_LANGINFO_H 244 #ifndef HAVE_NL_LANGINFO 245 # define nl_langinfo(x) "" 249 int mbtowc(
wchar_t *,
const char*,
size_t);
252 #if !defined(HAVE_VASPRINTF) || !defined(HAVE_VSNPRINTF) 263 # define VA_COPY(dest, src) va_copy(dest, src) 265 # ifdef HAVE___VA_COPY 266 # define VA_COPY(dest, src) __va_copy(dest, src) 268 # define VA_COPY(dest, src) (dest) = (src) 273 #ifndef HAVE_VASPRINTF 274 int vasprintf(
char **,
const char *, va_list);
277 #ifndef HAVE_VSNPRINTF 278 int vsnprintf(
char *,
size_t,
const char *, va_list);
281 #ifndef HAVE_USER_FROM_UID 282 char *user_from_uid(uid_t,
int);
285 #ifndef HAVE_GROUP_FROM_GID 286 char *group_from_gid(gid_t,
int);
289 #ifndef HAVE_TIMINGSAFE_BCMP 290 int timingsafe_bcmp(
const void *,
const void *,
size_t);
293 #ifndef HAVE_BCRYPT_PBKDF 294 int bcrypt_pbkdf(
const char *,
size_t,
const u_int8_t *,
size_t,
295 u_int8_t *,
size_t,
unsigned int);
298 #ifndef HAVE_EXPLICIT_BZERO 299 void explicit_bzero(
void *p,
size_t n);
302 void *xmmap(
size_t size);
303 char *xcrypt(
const char *password,
const char *salt);
304 char *shadow_pw(
struct passwd *pw);
307 #include "fake-rfc2553.h" 310 #include "bsd-cray.h" 311 #include "bsd-cygwin_util.h" 313 #include "port-aix.h" 314 #include "port-irix.h" 315 #include "port-linux.h" 316 #include "port-solaris.h" 317 #include "port-tun.h" 321 #if defined(HAVE_FEATURES_H) && defined(_FORTIFY_SOURCE) 322 # include <features.h> 323 # if defined(__GNU_LIBRARY__) && defined(__GLIBC_PREREQ) 324 # if __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) 325 # include <sys/socket.h> 328 # define FD_SET(n, set) kludge_FD_SET(n, set) 329 # define FD_ISSET(n, set) kludge_FD_ISSET(n, set) 330 void kludge_FD_SET(
int, fd_set *);
331 int kludge_FD_ISSET(
int, fd_set *);