]> git.sur5r.net Git - openldap/commitdiff
more about ITS#5168
authorPierangelo Masarati <ando@openldap.org>
Fri, 5 Oct 2007 08:25:15 +0000 (08:25 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 5 Oct 2007 08:25:15 +0000 (08:25 +0000)
servers/slapd/filter.c

index d94a1ab47d306f09b3756d3e1c8f146bf71b0428..3216f7e466722aee31fb1f77016f78900f1074fa 100644 (file)
@@ -32,6 +32,7 @@
 #include <ac/string.h>
 
 #include "slap.h"
+#include "lutil.h"
 
 static int     get_filter_list(
        Operation *op,
@@ -545,6 +546,7 @@ filter2bv_x( Operation *op, Filter *f, struct berval *fstr )
        int             i;
        Filter          *p;
        struct berval   tmp;
+       char            uuid[ LDAP_LUTIL_UUIDSTR_BUFSIZE ];
        static struct berval
                        ber_bvfalse = BER_BVC( "(?=false)" ),
                        ber_bvtrue = BER_BVC( "(?=true)" ),
@@ -561,7 +563,14 @@ filter2bv_x( Operation *op, Filter *f, struct berval *fstr )
 
        switch ( f->f_choice ) {
        case LDAP_FILTER_EQUALITY:
-               filter_escape_value_x( &f->f_av_value, &tmp, op->o_tmpmemctx );
+               if ( f->f_av_desc->ad_type->sat_syntax == slap_schema.si_ad_entryUUID->ad_type->sat_syntax ) {
+                       tmp.bv_len = lutil_uuidstr_from_normalized( f->f_av_value.bv_val,
+                               f->f_av_value.bv_len, uuid, LDAP_LUTIL_UUIDSTR_BUFSIZE );
+                       assert( tmp.bv_len > 0 );
+                       tmp.bv_val = uuid;
+               } else {
+                       filter_escape_value_x( &f->f_av_value, &tmp, op->o_tmpmemctx );
+               }
 
                fstr->bv_len = f->f_av_desc->ad_cname.bv_len +
                        tmp.bv_len + ( sizeof("(=)") - 1 );