>From 681a53b43da4635b2dafed083f6853828f575f42 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 6f36535fdb27c0b987968cf440c1dccb63f250d9..351959f76b25cd4216d3123cd8bb9a21fb34fc95 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