Hi, all,

I'm trying to understand the internal workflow of the attribute type checking and syntax validation in OpenLDAP. For example, if I use an attribute whose syntax is not implemented like "presentationAddress", the log message "no validator for syntax" will occur. 

I trace this message in the source code and find this's done by checking "pretty" and "validate", as follows:

-------------------------------------servers/slapd/modify.c--------------------------------

slap_syntax_validate_func *validate = ad->ad_type->sat_syntax->ssyn_validate;
slap_syntax_transform_func *pretty = ad->ad_type->sat_syntax->ssyn_pretty;
        
if( !pretty && !validate ) {
     *text = "no validator for syntax";
     snprintf( textbuf, textlen,
                  "%s: no validator for syntax %s",
                  ml->sml_type.bv_val,
                  ad->ad_type->sat_syntax->ssyn_oid );
     *text = textbuf;
     return LDAP_INVALID_SYNTAX;
}

-----------------------------------------------------------------------------------------------------

Moreover, the pretty function and validate function are treat differently in the latter code like:

if ( pretty ) {
     rc = ordered_value_pretty( ad, &ml->sml_values[nvals], &pval, ctx ); // wrapper for pretty function
} else {
     rc = ordered_value_validate( ad, &ml->sml_values[nvals], ml->sml_op ); // wrapper for validate function
}

I'm very confused on the "pretty" function and the "validate" function. I tried to google but no related results.

Could anyone tell me WHAT is the pretty function and what is the validate function? And HOW can OpenLDAP knows which function is pretty and which is validate?

Sorry for the newbie question. Thanks a lot!!!

Best,
Tianyin


--
Tianyin XU,
http://cseweb.ucsd.edu/~tixu/