+/* $OpenLDAP$ */
/*
- * Copyright 1999 The OpenLDAP Foundation.
+ * Copyright 1999-2000 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted only
#include "portable.h"
#include <stdio.h>
+
+#include <ac/string.h>
#include <ac/socket.h>
#include "slap.h"
char *supportedControls[] = {
LDAP_CONTROL_MANAGEDSAIT,
+/* LDAP_CONTROL_X_CHANGE_PASSWD, */
NULL
};
Operation *op,
int sendres )
{
- int nctrls;
+ int nctrls = 0;
ber_tag_t tag;
ber_len_t len;
char *opaque;
if( len == 0) {
/* no controls */
rc = LDAP_SUCCESS;
- goto return_results;
+ return rc;
}
if(( tag = ber_peek_tag( ber, &len )) != LDAP_TAG_CONTROLS ) {
if( tag == LBER_ERROR ) {
- rc = -1;
+ rc = SLAPD_DISCONNECT;
errmsg = "unexpected data in PDU";
}
Debug( LDAP_DEBUG_TRACE, "=> get_ctrls\n", 0, 0, 0 );
if( op->o_protocol < LDAP_VERSION3 ) {
- rc = -1;
+ rc = SLAPD_DISCONNECT;
errmsg = "controls require LDAPv3";
goto return_results;
}
/* set through each element */
- nctrls = 0;
*ctrls = ch_malloc( 1 * sizeof(LDAPControl *) );
#if 0
}
#endif
- ctrls[nctrls] = NULL;
+ *ctrls[nctrls] = NULL;
for( tag = ber_first_element( ber, &len, &opaque );
tag != LBER_ERROR;
0, 0, 0 );
*ctrls = NULL;
ldap_controls_free( tctrls );
- rc = -1;
+ rc = SLAPD_DISCONNECT;
errmsg = "decoding controls error";
goto return_results;
}
- Debug( LDAP_DEBUG_TRACE, "=> get_ctrls: %s\n",
- tctrl->ldctl_oid, 0, 0 );
-
tag = ber_peek_tag( ber, &len );
if( tag == LBER_BOOLEAN ) {
0, 0, 0 );
*ctrls = NULL;
ldap_controls_free( tctrls );
- rc = -1;
+ rc = SLAPD_DISCONNECT;
errmsg = "decoding controls error";
goto return_results;
}
- tctrl->ldctl_iscritical = crit ? (char) 0 : (char) ~0;
+ tctrl->ldctl_iscritical = (crit != 0);
tag = ber_peek_tag( ber, &len );
}
+ Debug( LDAP_DEBUG_TRACE, "=> get_ctrls: oid=\"%s\" (%scritical)\n",
+ tctrl->ldctl_oid,
+ tctrl->ldctl_iscritical ? "" : "non",
+ 0 );
+
if( tag == LBER_OCTETSTRING ) {
tag = ber_scanf( ber, "o", &tctrl->ldctl_value );
0, 0, 0 );
*ctrls = NULL;
ldap_controls_free( tctrls );
- rc = -1;
+ rc = SLAPD_DISCONNECT;
errmsg = "decoding controls error";
goto return_results;
}
nctrls, rc, errmsg ? errmsg : "");
if( sendres && rc != LDAP_SUCCESS ) {
- if( rc == -1 ) {
+ if( rc == SLAPD_DISCONNECT ) {
send_ldap_disconnect( conn, op, rc, errmsg );
} else {
send_ldap_result( conn, op, rc,