OpenLDAP 2.1 Change Log
OpenLDAP 2.1.18 Engineering
+ Fixed slave update when updateref missing bug (ITS#2435)
OpenLDAP 2.1.17 Release
Fixed libldap_r thread pool context bug (ITS#2404)
if ( be == NULL ) {
BerVarray ref = referral_rewrite( default_referral,
NULL, &e->e_name, LDAP_SCOPE_DEFAULT );
+ if ( ref == NULL ) ref = default_referral;
+ if ( ref != NULL ) {
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL, ref, NULL );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- NULL, NULL, ref ? ref : default_referral, NULL );
-
- if ( ref ) ber_bvarray_free( ref );
+ if ( ref != default_referral ) ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing", NULL, NULL );
+ }
goto done;
}
defref = be->be_update_refs
? be->be_update_refs : default_referral;
- ref = referral_rewrite( defref,
- NULL, &e->e_name, LDAP_SCOPE_DEFAULT );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
- ref ? ref : defref, NULL );
+ if ( defref ) {
+ ref = referral_rewrite( defref,
+ NULL, &e->e_name, LDAP_SCOPE_DEFAULT );
- if ( ref ) ber_bvarray_free( ref );
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL,
+ ref ? ref : defref, NULL );
+
+ if ( ref ) ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing",
+ NULL, NULL );
+ }
#endif /* SLAPD_MULTIMASTER */
}
} else {
BerVarray ref = referral_rewrite( default_referral,
NULL, &pdn, LDAP_SCOPE_DEFAULT );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- NULL, NULL, ref ? ref : default_referral, NULL );
+ if ( ref == NULL ) ref = default_referral;
+ if ( ref != NULL ) {
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL, ref, NULL );
- ber_bvarray_free( ref );
+ if ( ref != default_referral ) ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing", NULL, NULL );
+ }
goto cleanup;
}
} else {
BerVarray defref = be->be_update_refs
? be->be_update_refs : default_referral;
- BerVarray ref = referral_rewrite( default_referral,
- NULL, &pdn, LDAP_SCOPE_DEFAULT );
+ if ( defref != NULL ) {
+ BerVarray ref = referral_rewrite( defref,
+ NULL, &pdn, LDAP_SCOPE_DEFAULT );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
- ref ? ref : defref, NULL );
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL,
+ ref ? ref : defref, NULL );
- ber_bvarray_free( ref );
+ ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing",
+ NULL, NULL );
+ }
#endif
}
} else {
send_ldap_result( conn, op, rc = LDAP_UNWILLING_TO_PERFORM,
- NULL, "operation not supported within namingContext", NULL, NULL );
+ NULL, "operation not supported within namingContext",
+ NULL, NULL );
}
#if defined( LDAP_SLAPI )
if ( (be = select_backend( &ndn, manageDSAit, 0 )) == NULL ) {
BerVarray ref = referral_rewrite( default_referral,
NULL, &pdn, LDAP_SCOPE_DEFAULT );
+ if ( ref == NULL ) ref = default_referral;
+ if ( ref != NULL ) {
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL, ref, NULL );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- NULL, NULL, ref ? ref : default_referral, NULL );
-
- ber_bvarray_free( ref );
+ if ( ref != default_referral ) ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing", NULL, NULL );
+ }
goto cleanup;
}
} else {
BerVarray defref = be->be_update_refs
? be->be_update_refs : default_referral;
- BerVarray ref = referral_rewrite( defref,
- NULL, &pdn, LDAP_SCOPE_DEFAULT );
-
- send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
- ref ? ref : defref, NULL );
-
- ber_bvarray_free( ref );
+ if ( defref != NULL ) {
+ BerVarray ref = referral_rewrite( defref,
+ NULL, &pdn, LDAP_SCOPE_DEFAULT );
+
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL,
+ ref ? ref : defref, NULL );
+
+ ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing",
+ NULL, NULL );
+ }
#endif
}
} else {
* if we don't hold it.
*/
if ( (be = select_backend( &ndn, manageDSAit, 0 )) == NULL ) {
- BerVarray ref = referral_rewrite( default_referral,
- NULL, &pdn, LDAP_SCOPE_DEFAULT );
+ if ( default_referral != NULL ) {
+ BerVarray ref = referral_rewrite( default_referral,
+ NULL, &pdn, LDAP_SCOPE_DEFAULT );
- send_ldap_result( conn, op, rc = LDAP_REFERRAL,
- NULL, NULL, ref ? ref : default_referral, NULL );
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL,
+ ref ? ref : default_referral, NULL );
- ber_bvarray_free( ref );
+ ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing", NULL, NULL );
+ }
goto cleanup;
}
} else {
BerVarray defref = be->be_update_refs
? be->be_update_refs : default_referral;
- BerVarray ref = referral_rewrite( defref,
- NULL, &pdn, LDAP_SCOPE_DEFAULT );
-
- send_ldap_result( conn, op, rc = LDAP_REFERRAL, NULL, NULL,
- ref ? ref : defref, NULL );
-
- ber_bvarray_free( ref );
+ if ( defref ) {
+ BerVarray ref = referral_rewrite( defref,
+ NULL, &pdn, LDAP_SCOPE_DEFAULT );
+
+ send_ldap_result( conn, op, rc = LDAP_REFERRAL,
+ NULL, NULL,
+ ref ? ref : defref, NULL );
+
+ ber_bvarray_free( ref );
+ } else {
+ send_ldap_result( conn, op,
+ rc = LDAP_UNWILLING_TO_PERFORM,
+ NULL, "referral missing",
+ NULL, NULL );
+ }
#endif
}
} else {