From a6d7ea956290470254e817adb2f6a3fac9397a17 Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Thu, 31 Jan 2019 09:45:56 -0600 Subject: update autoconf for latest compat functions --- crypto/Makefile.am | 14 ++++++++++++++ crypto/compat/getprogname_linux.c | 9 +++++++++ crypto/compat/getprogname_windows.c | 13 +++++++++++++ crypto/compat/posix_win.c | 7 +++++++ crypto/compat/syslog_r.c | 19 +++++++++++++++++++ include/compat/stdlib.h | 4 ++++ include/compat/syslog.h | 37 +++++++++++++++++++++++++++++++++++++ m4/check-libc.m4 | 4 ++++ tls/Makefile.am | 1 - tls/compat/getuid.c | 18 ------------------ 10 files changed, 107 insertions(+), 19 deletions(-) create mode 100644 crypto/compat/getprogname_linux.c create mode 100644 crypto/compat/getprogname_windows.c create mode 100644 crypto/compat/syslog_r.c create mode 100644 include/compat/syslog.h delete mode 100644 tls/compat/getuid.c diff --git a/crypto/Makefile.am b/crypto/Makefile.am index d2c7431..4bf6b46 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am @@ -87,6 +87,7 @@ if HOST_WIN -echo posix_write >> crypto_portable.sym -echo posix_getsockopt >> crypto_portable.sym -echo posix_setsockopt >> crypto_portable.sym + -echo getuid >> crypto_portable.sym -grep -v BIO_s_log crypto_portable.sym > crypto_portable.sym.tmp -mv crypto_portable.sym.tmp crypto_portable.sym endif @@ -162,6 +163,15 @@ if !HAVE_GETPAGESIZE libcompat_la_SOURCES += compat/getpagesize.c endif +if !HAVE_GETPROGNAME +if HOST_LINUX +libcompat_la_SOURCES += compat/getprogname_linux.c +endif +if HOST_WIN +libcompat_la_SOURCES += compat/getprogname_windows.c +endif +endif + if !HAVE_TIMEGM libcompat_la_SOURCES += compat/timegm.c endif @@ -174,6 +184,10 @@ if !HAVE_RECALLOCARRAY libcompat_la_SOURCES += compat/recallocarray.c endif +if !HAVE_SYSLOG_R +libcompat_la_SOURCES += compat/syslog_r.c +endif + if !HAVE_TIMINGSAFE_MEMCMP libcompat_la_SOURCES += compat/timingsafe_memcmp.c endif diff --git a/crypto/compat/getprogname_linux.c b/crypto/compat/getprogname_linux.c new file mode 100644 index 0000000..fefe5ea --- /dev/null +++ b/crypto/compat/getprogname_linux.c @@ -0,0 +1,9 @@ +#include + +#include + +const char * +getprogname(void) +{ + return program_invocation_short_name; +} diff --git a/crypto/compat/getprogname_windows.c b/crypto/compat/getprogname_windows.c new file mode 100644 index 0000000..eb04ec0 --- /dev/null +++ b/crypto/compat/getprogname_windows.c @@ -0,0 +1,13 @@ +#include + +#include + +const char * +getprogname(void) +{ + static char progname[MAX_PATH + 1]; + DWORD length = GetModuleFileName(NULL, progname, sizeof (progname) - 1); + if (length < 0) + return "?"; + return progname; +} diff --git a/crypto/compat/posix_win.c b/crypto/compat/posix_win.c index d6e2dcb..b73f023 100644 --- a/crypto/compat/posix_win.c +++ b/crypto/compat/posix_win.c @@ -4,6 +4,7 @@ * BSD socket emulation code for Winsock2 * File IO compatibility shims * Brent Cook + * Kinichiro Inoguchi */ #define NO_REDEF_POSIX_FUNCTIONS @@ -208,6 +209,12 @@ posix_setsockopt(int sockfd, int level, int optname, return rc == 0 ? 0 : wsa_errno(WSAGetLastError()); } +uid_t getuid(void) +{ + /* Windows fstat sets 0 as st_uid */ + return 0; +} + #ifdef _MSC_VER struct timezone; int gettimeofday(struct timeval * tp, struct timezone * tzp) diff --git a/crypto/compat/syslog_r.c b/crypto/compat/syslog_r.c new file mode 100644 index 0000000..d68169d --- /dev/null +++ b/crypto/compat/syslog_r.c @@ -0,0 +1,19 @@ +#include + +void +syslog_r(int pri, struct syslog_data *data, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vsyslog_r(pri, data, fmt, ap); + va_end(ap); +} + +void +vsyslog_r(int pri, struct syslog_data *data, const char *fmt, va_list ap) +{ +#ifdef HAVE_SYSLOG + vsyslog(pri, fmt, ap); +#endif +} diff --git a/include/compat/stdlib.h b/include/compat/stdlib.h index cc04856..e629884 100644 --- a/include/compat/stdlib.h +++ b/include/compat/stdlib.h @@ -29,6 +29,10 @@ uint32_t arc4random_uniform(uint32_t upper_bound); void freezero(void *ptr, size_t sz); #endif +#ifndef HAVE_GETPROGNAME +const char * getprogname(void); +#endif + #ifndef HAVE_REALLOCARRAY void *reallocarray(void *, size_t, size_t); #endif diff --git a/include/compat/syslog.h b/include/compat/syslog.h new file mode 100644 index 0000000..f400ff6 --- /dev/null +++ b/include/compat/syslog.h @@ -0,0 +1,37 @@ +/* + * Public domain + * syslog.h compatibility shim + */ + +#ifndef _WIN32 +#include_next +#endif + +#ifndef LIBCRYPTOCOMPAT_SYSLOG_H +#define LIBCRYPTOCOMPAT_SYSLOG_H + +#ifndef HAVE_SYSLOG_R + +#include + +#ifdef _WIN32 +#define LOG_INFO 6 /* informational */ +#define LOG_USER (1<<3) /* random user-level messages */ +#define LOG_LOCAL2 (18<<3) /* reserved for local use */ +#endif + +struct syslog_data { + int log_stat; + const char *log_tag; + int log_fac; + int log_mask; +}; + +#define SYSLOG_DATA_INIT {0, (const char *)0, LOG_USER, 0xff} + +void syslog_r(int, struct syslog_data *, const char *, ...); +void vsyslog_r(int, struct syslog_data *, const char *, va_list); + +#endif + +#endif diff --git a/m4/check-libc.m4 b/m4/check-libc.m4 index 4a3d6c7..e511f6d 100644 --- a/m4/check-libc.m4 +++ b/m4/check-libc.m4 @@ -6,6 +6,7 @@ AC_CHECK_FUNCS([asprintf freezero memmem]) AC_CHECK_FUNCS([readpassphrase reallocarray recallocarray]) AC_CHECK_FUNCS([strlcat strlcpy strndup strnlen strsep strtonum]) AC_CHECK_FUNCS([timegm _mkgmtime timespecsub]) +AC_CHECK_FUNCS([getprogname syslog syslog_r]) AC_CACHE_CHECK([for getpagesize], ac_cv_func_getpagesize, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ // Since Android NDK v16 getpagesize is defined as inline inside unistd.h @@ -33,6 +34,9 @@ AM_CONDITIONAL([HAVE_STRNLEN], [test "x$ac_cv_func_strnlen" = xyes]) AM_CONDITIONAL([HAVE_STRSEP], [test "x$ac_cv_func_strsep" = xyes]) AM_CONDITIONAL([HAVE_STRTONUM], [test "x$ac_cv_func_strtonum" = xyes]) AM_CONDITIONAL([HAVE_TIMEGM], [test "x$ac_cv_func_timegm" = xyes]) +AM_CONDITIONAL([HAVE_GETPROGNAME], [test "x$ac_cv_func_getprogname" = xyes]) +AM_CONDITIONAL([HAVE_SYSLOG], [test "x$ac_cv_func_syslog" = xyes]) +AM_CONDITIONAL([HAVE_SYSLOG_R], [test "x$ac_cv_func_syslog_r" = xyes]) ]) AC_DEFUN([CHECK_SYSCALL_COMPAT], [ diff --git a/tls/Makefile.am b/tls/Makefile.am index 58c0344..fec147e 100644 --- a/tls/Makefile.am +++ b/tls/Makefile.am @@ -33,7 +33,6 @@ noinst_HEADERS = tls_internal.h if HOST_WIN libtls_la_SOURCES += compat/ftruncate.c -libtls_la_SOURCES += compat/getuid.c libtls_la_SOURCES += compat/pread.c libtls_la_SOURCES += compat/pwrite.c endif diff --git a/tls/compat/getuid.c b/tls/compat/getuid.c deleted file mode 100644 index 9a46317..0000000 --- a/tls/compat/getuid.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Public domain - * - * Kinichiro Inoguchi - */ - -#ifdef _WIN32 - -#include - -uid_t -getuid(void) -{ - /* Windows fstat sets 0 as st_uid */ - return 0; -} - -#endif -- cgit v1.2.3-55-g6feb