LDAPMessage *result, *e;
BerElement *ber;
int i;
+ int slen;
+ int rc;
char *attrs[1];
searched_in_cache = search_in_cache(userlogin);
}
// escape characters according to rfc2254 section 4
- for (i=0 , ptr=userlogin ; i<sizeof(searchloginname)-1 && *ptr ; ptr++) {
+ for (slen=0 , ptr=userlogin ; slen<sizeof(searchloginname)-1 && *ptr ; ptr++) {
if (strchr(strictchars,*ptr)) {
- if (i+3>=sizeof(searchloginname)-1) break;
- i+=sprintf(searchloginname+i,"\\%02X",*ptr);
+ if (slen+3>=sizeof(searchloginname)-1) break;
+ slen+=sprintf(searchloginname+i,"\\%02X",*ptr);
} else {
- searchloginname[i++]=*ptr;
+ searchloginname[slen++]=*ptr;
}
}
- searchloginname[i]='\0';
+ searchloginname[slen]='\0';
- snprintf(filtersearch, sizeof(filtersearch), LDAPFilterSearch, searchloginname, searchloginname, searchloginname, searchloginname, searchloginname);
+ i=0;
+ ptr=LDAPFilterSearch;
+ while (i<sizeof(filtersearch)-1 && *ptr) {
+ if (ptr[0]=='%' && ptr[1]=='s') {
+ if (i+slen>=sizeof(filtersearch)) break;
+ memcpy(filtersearch+i,searchloginname,slen);
+ i+=slen;
+ ptr+=2;
+ } else {
+ filtersearch[i++]=*ptr++;
+ }
+ }
+ filtersearch[i]='\0';
/* Search record(s) in LDAP base */
attrs[0]=LDAPTargetAttr;
- int rc= ldap_search_ext_s(ldap_handle, LDAPBaseSearch, LDAP_SCOPE_SUBTREE, filtersearch, attrs, 0, NULL, NULL, NULL, -1, &result);
+ rc= ldap_search_ext_s(ldap_handle, LDAPBaseSearch, LDAP_SCOPE_SUBTREE, filtersearch, attrs, 0, NULL, NULL, NULL, -1, &result);
if (rc != LDAP_SUCCESS) {
debuga(_("LDAP search failed: %s\n"), ldap_err2string(rc));
debuga(_("looking for \"%s\" at or below \"%s\"\n"),filtersearch,LDAPBaseSearch);