Don't assume ldap_bv2escaped_filter_value() is exported
This commit is contained in:
		| @@ -785,6 +785,49 @@ LDAP_dn2principal(krb5_context context, HDB * db, const char *dn, | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static int | ||||
| need_quote(unsigned char c) | ||||
| { | ||||
|     return (c & 0x80) || | ||||
| 	(c < 32) || | ||||
| 	(c == '(') ||  | ||||
| 	(c == ')') ||  | ||||
| 	(c == '*') ||  | ||||
| 	(c == '\\') || | ||||
| 	(c == 0x7f); | ||||
| } | ||||
|  | ||||
| const static char hexchar[] = "0123456789ABCDEF"; | ||||
|  | ||||
| static krb5_error_code | ||||
| escape_value(krb5_context context, const unsigned char *unquoted, char **quoted) | ||||
| { | ||||
|     size_t i, len; | ||||
|  | ||||
|     for (i = 0, len = 0; unquoted[i] != '\0'; i++, len++) { | ||||
| 	if (need_quote((unsigned char)unquoted[i])) | ||||
| 	    len += 2; | ||||
|     } | ||||
|  | ||||
|     *quoted = malloc(len + 1); | ||||
|     if (*quoted == NULL) { | ||||
| 	krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|  | ||||
|     for (i = 0; unquoted[0] ; unquoted++) { | ||||
| 	if (need_quote((unsigned char *)unquoted[0])) { | ||||
| 	    (*quoted)[i++] = '\\'; | ||||
| 	    (*quoted)[i++] = hexchar[(unquoted[0] >> 4) & 0xf]; | ||||
| 	    (*quoted)[i++] = hexchar[(unquoted[0]     ) & 0xf]; | ||||
| 	} else | ||||
| 	    (*quoted)[i++] = (char)unquoted[0]; | ||||
|     } | ||||
|     (*quoted)[i] = '\0'; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|  | ||||
| static krb5_error_code | ||||
| LDAP__lookup_princ(krb5_context context, | ||||
| 		   HDB *db, | ||||
| @@ -792,10 +835,9 @@ LDAP__lookup_princ(krb5_context context, | ||||
| 		   const char *userid, | ||||
| 		   LDAPMessage **msg) | ||||
| { | ||||
|     struct berval namebv, quotedp; | ||||
|     krb5_error_code ret; | ||||
|     int rc; | ||||
|     char *filter = NULL; | ||||
|     char *quote, *filter = NULL; | ||||
|  | ||||
|     ret = LDAP__connect(context, db); | ||||
|     if (ret) | ||||
| @@ -806,16 +848,14 @@ LDAP__lookup_princ(krb5_context context, | ||||
|      * searches for *@REALM, which takes very long time. | ||||
|      */ | ||||
|  | ||||
|     ber_str2bv(princname, 0, 0, &namebv); | ||||
|     if (ldap_bv2escaped_filter_value(&namebv, "edp) != 0) { | ||||
| 	ret = ENOMEM; | ||||
| 	krb5_set_error_message(context, ret, "malloc: out of memory"); | ||||
|     ret = escape_value(context, princname, "e); | ||||
|     if (ret) | ||||
| 	goto out; | ||||
|     } | ||||
|  | ||||
|     rc = asprintf(&filter, | ||||
| 		  "(&(objectClass=krb5Principal)(krb5PrincipalName=%s))", | ||||
| 		  quotedp.bv_val); | ||||
|     ber_memfree(quotedp.bv_val); | ||||
| 		  quote); | ||||
|     free(quote); | ||||
|  | ||||
|     if (rc < 0) { | ||||
| 	ret = ENOMEM; | ||||
| @@ -846,17 +886,14 @@ LDAP__lookup_princ(krb5_context context, | ||||
| 	ldap_msgfree(*msg); | ||||
| 	*msg = NULL; | ||||
| 	 | ||||
| 	ber_str2bv(userid, 0, 0, &namebv); | ||||
| 	if (ldap_bv2escaped_filter_value(&namebv, "edp) != 0) { | ||||
| 	    ret = ENOMEM; | ||||
| 	    krb5_set_error_message(context, ret, "malloc: out of memory"); | ||||
| 	ret = escape_value(context, princname, "e); | ||||
| 	if (ret) | ||||
| 	    goto out; | ||||
| 	} | ||||
|  | ||||
| 	rc = asprintf(&filter, | ||||
| 	    "(&(|(objectClass=sambaSamAccount)(objectClass=%s))(uid=%s))", | ||||
| 		      structural_object, quotedp.bv_val); | ||||
| 	ber_memfree(quotedp.bv_val); | ||||
| 		      structural_object, quote); | ||||
| 	free(quote); | ||||
| 	if (rc < 0) { | ||||
| 	    ret = ENOMEM; | ||||
| 	    krb5_set_error_message(context, ret, "asprintf: out of memory"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hornquist Astrand
					Love Hornquist Astrand