Browse Source

Ticket #48016 - search, matching rules and filter error "unsupported type 0xA9"

Description: Since extensible filter (LDAP_FILTER_EXTENDED) was not
implemented in slapi_filter_to_string_internal, it issued a bogus
message "unsupported type 0xA9" which could be logged in the error
log and confuse the troubleshooting.

This patch adds the case LDAP_FILTER_EXTENDED to slapi_filter_to_
string{_internal}.

https://fedorahosted.org/389/ticket/48016

Reviewed by [email protected] (Thank you, Rich!!)
Noriko Hosoi 10 years ago
parent
commit
21dda6195d
1 changed files with 16 additions and 0 deletions
  1. 16 0
      ldap/servers/slapd/filter.c

+ 16 - 0
ldap/servers/slapd/filter.c

@@ -1309,6 +1309,10 @@ slapi_filter_to_string_internal( const struct slapi_filter *f, char *buf, size_t
 		operator = "~=";
 		break;
 
+	case LDAP_FILTER_EXTENDED:
+		operator = ":=";
+		break;
+
 	default: break;
 	}
 
@@ -1415,6 +1419,18 @@ slapi_filter_to_string_internal( const struct slapi_filter *f, char *buf, size_t
 		}
 		break;
 
+	case LDAP_FILTER_EXTENDED:
+		size = strlen(f->f_mr_type) + f->f_mr_value.bv_len + strlen(operator) +
+		       (f->f_mr_dnAttrs ? sizeof(":dn") - 1 : 0) +
+		       (f->f_mr_oid ? strlen(f->f_mr_oid) + 1 /* : */ : 0) + 3;
+		if(size < *bufsize) {
+			sprintf(buf, "(%s%s%s%s%s%.*s)", f->f_mr_type, f->f_mr_dnAttrs ? ":dn" : "",
+			        f->f_mr_oid ? ":" : "", f->f_mr_oid ? f->f_mr_oid : "",
+			        operator, (int)f->f_mr_value.bv_len, f->f_mr_value.bv_val);
+			*bufsize -= size;
+		}
+		break;
+
 	default:
 		size = 25;