Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nslcd/util.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2006-12-25 21:30:19 +0100
committerArthur de Jong <arthur@arthurdejong.org>2006-12-25 21:30:19 +0100
commit410b6fa99387e1fcfa786a571ac34f84547bfd1e (patch)
treefb626a86e6374164210718da1a2550e5d243396a /nslcd/util.c
parent30263a59daa22a7f6814d36dde96e6f9d3188438 (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.c76
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 */