diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2006-12-25 21:30:19 +0100 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2006-12-25 21:30:19 +0100 |
commit | 410b6fa99387e1fcfa786a571ac34f84547bfd1e (patch) | |
tree | fb626a86e6374164210718da1a2550e5d243396a /nslcd/util.c | |
parent | 30263a59daa22a7f6814d36dde96e6f9d3188438 (diff) |
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
Diffstat (limited to 'nslcd/util.c')
-rw-r--r-- | nslcd/util.c | 76 |
1 files changed, 35 insertions, 41 deletions
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 */ |