X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fcontrols.c;h=7e9d73662fa69b66d83adf68892938bf8d1dec92;hb=2dfd312fa12a765a5ad311f6c9bf8dce76a63155;hp=12f455be9863cc1e9fc97ef205d6a2b14abc3bd5;hpb=2c7dae116b5a9f320356826bb32232fb06997d8b;p=openldap
diff --git a/libraries/libldap/controls.c b/libraries/libldap/controls.c
index 12f455be98..7e9d73662f 100644
--- a/libraries/libldap/controls.c
+++ b/libraries/libldap/controls.c
@@ -1,7 +1,37 @@
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software .
+ *
+ * Copyright 1998-2005 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * .
+ */
+/* This notice applies to changes, created by or for Novell, Inc.,
+ * to preexisting works for which notices appear elsewhere in this file.
+ *
+ * Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.
+ *
+ * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
+ * USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO VERSION
+ * 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS AVAILABLE AT
+ * HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE" IN THE
+ * TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION OF THIS
+ * WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP PUBLIC
+ * LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT THE
+ * PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
+ *---
+ * Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License
+ * can be found in the file "build/LICENSE-2.0.1" in this distribution
+ * of OpenLDAP Software.
+ */
+/* Portions Copyright (C) The Internet Society (1997)
+ * ASN.1 fragments are from RFC 2251; see RFC for full legal notices.
*/
/* LDAPv3 Controls (RFC2251)
@@ -110,7 +140,7 @@ ldap_int_put_controls(
return LDAP_SUCCESS;
}
-int ldap_int_get_controls(
+int ldap_pvt_get_controls(
BerElement *ber,
LDAPControl ***ctrls )
{
@@ -187,33 +217,27 @@ int ldap_int_get_controls(
tag = ber_scanf( ber, "{a" /*}*/, &tctrl->ldctl_oid );
- if( tag != LBER_ERROR ) {
- tag = ber_peek_tag( ber, &len );
+ if( tag == LBER_ERROR ) {
+ *ctrls = NULL;
+ ldap_controls_free( tctrls );
+ return LDAP_DECODING_ERROR;
}
+ tag = ber_peek_tag( ber, &len );
+
if( tag == LBER_BOOLEAN ) {
ber_int_t crit;
tag = ber_scanf( ber, "b", &crit );
tctrl->ldctl_iscritical = crit ? (char) 0 : (char) ~0;
- }
-
- if( tag != LBER_ERROR ) {
tag = ber_peek_tag( ber, &len );
}
if( tag == LBER_OCTETSTRING ) {
tag = ber_scanf( ber, "o", &tctrl->ldctl_value );
-
} else {
tctrl->ldctl_value.bv_val = NULL;
}
- if( tag == LBER_ERROR ) {
- *ctrls = NULL;
- ldap_controls_free( tctrls );
- return LDAP_DECODING_ERROR;
- }
-
*ctrls = tctrls;
}
@@ -285,7 +309,7 @@ ldap_controls_dup( LDAPControl *const *controls )
return NULL;
}
- new = (LDAPControl **) LDAP_MALLOC( i * sizeof(LDAPControl *) );
+ new = (LDAPControl **) LDAP_MALLOC( (i+1) * sizeof(LDAPControl *) );
if( new == NULL ) {
/* memory allocation failure */
@@ -365,30 +389,26 @@ ldap_control_dup( const LDAPControl *c )
return new;
}
+
+LDAPControl *
+ldap_find_control(
+ LDAP_CONST char *oid,
+ LDAPControl **ctrls )
+{
+ if( ctrls == NULL || *ctrls == NULL ) {
+ return NULL;
+ }
+
+ for( ; *ctrls != NULL; ctrls++ ) {
+ if( strcmp( (*ctrls)->ldctl_oid, oid ) == 0 ) {
+ return *ctrls;
+ }
+ }
+
+ return NULL;
+}
+
/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- */
-/* Adapted for inclusion into OpenLDAP by Kurt D. Zeilenga */
-/*---
- * This notice applies to changes, created by or for Novell, Inc.,
- * to preexisting works for which notices appear elsewhere in this file.
- *
- * Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.
- *
- * THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
- * USE, MODIFICATION, AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO VERSION
- * 2.0.1 OF THE OPENLDAP PUBLIC LICENSE, A COPY OF WHICH IS AVAILABLE AT
- * HTTP://WWW.OPENLDAP.ORG/LICENSE.HTML OR IN THE FILE "LICENSE" IN THE
- * TOP-LEVEL DIRECTORY OF THE DISTRIBUTION. ANY USE OR EXPLOITATION OF THIS
- * WORK OTHER THAN AS AUTHORIZED IN VERSION 2.0.1 OF THE OPENLDAP PUBLIC
- * LICENSE, OR OTHER PRIOR WRITTEN CONSENT FROM NOVELL, COULD SUBJECT THE
- * PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.
- *---
- * Modification to OpenLDAP source by Novell, Inc.
- * June 2000 sfs Added control utilities
- */
-/*---
ldap_create_control
Internal function to create an LDAP control from the encoded BerElement.
@@ -412,7 +432,6 @@ ldap_create_control(
LDAPControl **ctrlp )
{
LDAPControl *ctrl;
- struct berval *bvalp;
assert( requestOID != NULL );
assert( ber != NULL );
@@ -423,14 +442,11 @@ ldap_create_control(
return LDAP_NO_MEMORY;
}
- if ( ber_flatten( ber, &bvalp ) == -1 ) {
+ if ( ber_flatten2( ber, &ctrl->ldctl_value, 1 ) == -1 ) {
LDAP_FREE( ctrl );
return LDAP_NO_MEMORY;
}
- ctrl->ldctl_value = *bvalp;
- ber_memfree( bvalp );
-
ctrl->ldctl_oid = LDAP_STRDUP( requestOID );
ctrl->ldctl_iscritical = iscritical;