>From 3a2edabed0fbdeb132618b8440cd499a55d8f456 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Mon, 26 May 2014 23:24:54 +0200 Subject: [PATCH 1/2] Use custom implementation of glibc extension. strchrnul() and mempcpy() are GNU extensions to libc This patch add configure time test for this functions and provide custom implementation if functions are not available. --- configure.ac | 2 ++ src/confdb/confdb.c | 7 +++++++ src/util/crypto/libcrypto/crypto_sha512crypt.c | 6 ++++++ src/util/crypto/nss/nss_sha512crypt.c | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/configure.ac b/configure.ac index d603cda1ab7e18933bb51d3e69a8d434351c08ad..19cd7d3f8cd9f99367e1e7b738f988d382fc8305 100644 --- a/configure.ac +++ b/configure.ac @@ -42,6 +42,8 @@ AC_CONFIG_HEADER(config.h) AC_CHECK_TYPES([errno_t], [], [], [[#include ]]) +AC_CHECK_FUNCS([mempcpy strchrnul]) + m4_include([src/build_macros.m4]) BUILD_WITH_SHARED_BUILD_DIR diff --git a/src/confdb/confdb.c b/src/confdb/confdb.c index 15de9616ffdddf640f29e6b816c246ee05da48c7..f4ec1d3d69bf66f444d53d2bd5e205d907520197 100644 --- a/src/confdb/confdb.c +++ b/src/confdb/confdb.c @@ -28,6 +28,13 @@ #include "util/strtonum.h" #include "db/sysdb.h" +#ifndef HAVE_STRCHRNUL +static char *strchrnul(const char *s, int c) { + char *ret = strchr(s, c); + return ret == NULL ? discard_const_p(char, s) + strlen(s) : ret; +} +#endif /* HAVE_STRCHRNUL */ + #define CONFDB_ZERO_CHECK_OR_JUMP(var, ret, err, label) do { \ if (!var) { \ ret = err; \ diff --git a/src/util/crypto/libcrypto/crypto_sha512crypt.c b/src/util/crypto/libcrypto/crypto_sha512crypt.c index 34547d08abdc3cb3ea946291bc82120c2565fd49..26507f70fa6b9f168fdddff24d89094b7758115d 100644 --- a/src/util/crypto/libcrypto/crypto_sha512crypt.c +++ b/src/util/crypto/libcrypto/crypto_sha512crypt.c @@ -28,6 +28,12 @@ #include #include +#ifndef HAVE_MEMPCPY +static void * mempcpy(void *dst, const void *src, size_t len) { + return (void*) (((char*)memcpy(dst, src, len)) + len); +} +#endif /* HAVE_MEMPCPY */ + /* Define our magic string to mark salt for SHA512 "encryption" replacement. */ const char sha512_salt_prefix[] = "$6$"; #define SALT_PREF_SIZE (sizeof(sha512_salt_prefix) - 1) diff --git a/src/util/crypto/nss/nss_sha512crypt.c b/src/util/crypto/nss/nss_sha512crypt.c index 9fedd5ec6c62855d9cc0c9c2869d8c9be7fb5ade..11194e5d1cc68c89972262a165fe05363ee1afdb 100644 --- a/src/util/crypto/nss/nss_sha512crypt.c +++ b/src/util/crypto/nss/nss_sha512crypt.c @@ -29,6 +29,12 @@ #include #include +#ifndef HAVE_MEMPCPY +static void * mempcpy(void *dst, const void *src, size_t len) { + return (void*) (((char*)memcpy(dst, src, len)) + len); +} +#endif /* HAVE_MEMPCPY */ + /* Define our magic string to mark salt for SHA512 "encryption" replacement. */ const char sha512_salt_prefix[] = "$6$"; #define SALT_PREF_SIZE (sizeof(sha512_salt_prefix) - 1) -- 1.9.3