From 29be9b286ef3d47bead0b09fd46be85def4de18d Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Tue, 8 Dec 2015 17:24:05 +1000 Subject: [PATCH] + oal_ldap_escape() --- src/ldapauth.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/ldapauth.c b/src/ldapauth.c index a48b595..db3c6be 100644 --- a/src/ldapauth.c +++ b/src/ldapauth.c @@ -10,6 +10,40 @@ #include "config.h" +/** + * @brief escape chars, having special meaning in ldap search filter + * @returns >= 0 if escaped successfully, -1 on error + */ +size_t +oal_ldap_escape(char *dst, size_t size, const char *src) +{ + char c = '\0'; + size_t pos = 0; + + assert(dst != NULL); + assert(src != NULL); + assert(size > 0); + + while ((c = *src) != '\0') { + if (c == '*' || c == '(' || c == ')' || c == '\\') { + if (size > 3) { + *dst = snprintf(dst, 3, "\\%02x", (unsigned char) c); + } else { + return -1; + } + src += 1, dst += 3, pos += 3, size -= 3; + } else { + *dst = *src; + src += 1, dst += 1, pos += 1, size -= 1; + } + if (size == 0) + return -1; + } + *dst = '\0'; + + return pos; +} + /** * @brief open connection to ldap server * @returns 1 on success, 0 on error and fills config->error