From 410b6fa99387e1fcfa786a571ac34f84547bfd1e Mon Sep 17 00:00:00 2001 From: Arthur de Jong Date: Mon, 25 Dec 2006 20:30:19 +0000 Subject: get rid of NSS_BUFSIZ, rename _nss_ldap_oc_check() to has_objectclass(), redo _nss_ldap_escape_string() with simpler logic and slightly different signature and redid layout of some code git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-ldapd@203 ef36b2f9-881f-0410-afb5-c4e39611909c --- nslcd/util.c | 76 ++++++++++++++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 41 deletions(-) (limited to 'nslcd/util.c') diff --git a/nslcd/util.c b/nslcd/util.c index 57d6a10..4dbdaca 100644 --- a/nslcd/util.c +++ b/nslcd/util.c @@ -237,7 +237,7 @@ _nss_ldap_dn2uid (const char *dn, char **uid, char **buffer, size_t * buflen, LDAPMessage *e = _nss_ldap_first_entry (res); if (e != NULL) { - if (_nss_ldap_oc_check (e, OC (posixGroup)) == NSS_STATUS_SUCCESS) + if (has_objectclass(e,OC(posixGroup))) { *pIsNestedGroup = 1; *pRes = res; @@ -1347,49 +1347,43 @@ _nss_ldap_readconfig (struct ldap_config ** presult, char **buffer, size_t *bufl return status; } -enum nss_status -_nss_ldap_escape_string (const char *str, char *buf, size_t buflen) +int _nss_ldap_escape_string(const char *src,char *buffer,size_t buflen) { - int ret = NSS_STATUS_TRYAGAIN; - char *p = buf; - char *limit = p + buflen - 3; - const char *s = str; - - while (p < limit && *s) - { - switch (*s) - { - case '*': - strcpy (p, "\\2a"); - p += 3; - break; - case '(': - strcpy (p, "\\28"); - p += 3; - break; - case ')': - strcpy (p, "\\29"); - p += 3; - break; - case '\\': - strcpy (p, "\\5c"); - p += 3; - break; - default: - *p++ = *s; - break; - } - s++; - } - - if (*s == '\0') + int pos=0; + /* go over all characters in source string */ + for (;*src!='\0';src++) + { + /* check if char will fit */ + if (pos>=(buflen+4)) + return -1; + /* do escaping for some characters */ + switch (*src) { - /* got to end */ - *p = '\0'; - ret = NSS_STATUS_SUCCESS; + case '*': + strcpy(buffer+pos,"\\2a"); + pos+=3; + break; + case '(': + strcpy(buffer+pos,"\\28"); + pos+=3; + break; + case ')': + strcpy(buffer+pos,"\\29"); + pos+=3; + break; + case '\\': + strcpy(buffer+pos,"\\5c"); + pos+=3; + break; + default: + /* just copy character */ + buffer[pos++]=*src; + break; } - - return ret; + } + /* terminate destination string */ + buffer[pos]='\0'; + return 0; } /* XXX just a linked list for now */ -- cgit v1.2.3