svn commit: samba r2884 - in branches/SAMBA_4_0/source/libcli/ldap: .

metze at samba.org metze at samba.org
Sat Oct 9 23:59:12 GMT 2004


Author: metze
Date: 2004-10-09 23:59:12 +0000 (Sat, 09 Oct 2004)
New Revision: 2884

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/libcli/ldap&rev=2884&nolog=1

Log:
parse LDAP Control messages

metze

Modified:
   branches/SAMBA_4_0/source/libcli/ldap/ldap.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/ldap/ldap.c	2004-10-09 23:58:11 UTC (rev 2883)
+++ branches/SAMBA_4_0/source/libcli/ldap/ldap.c	2004-10-09 23:59:12 UTC (rev 2884)
@@ -1162,6 +1162,47 @@
 		return False;
 	}
 
+	msg->num_controls = 0;
+	msg->controls = NULL;
+
+	if (asn1_peek_tag(data, ASN1_CONTEXT(0))) {
+		int i;
+		struct ldap_Control *ctrl = NULL;
+
+		asn1_start_tag(data, ASN1_CONTEXT(0));
+
+		for (i=0; asn1_peek_tag(data, ASN1_SEQUENCE(0)); i++) {
+			asn1_start_tag(data, ASN1_SEQUENCE(0));
+
+			ctrl = talloc_realloc_p(msg->mem_ctx, ctrl, struct ldap_Control, i+1);
+			if (!ctrl) {
+				return False;
+			}
+			ctrl[i].oid = NULL;
+			ctrl[i].critical = False;
+			ctrl[i].value = data_blob(NULL, 0);
+
+			asn1_read_OctetString_talloc(ctrl, data, &ctrl[i].oid);
+
+			if (asn1_peek_tag(data, ASN1_BOOLEAN)) {
+				asn1_read_BOOLEAN(data, &ctrl[i].critical);
+			}
+
+			if (asn1_peek_tag(data, ASN1_OCTET_STRING)) {
+				asn1_read_OctetString(data, &ctrl[i].value);
+				if (ctrl[i].value.data) {
+					talloc_steal(msg->mem_ctx, ctrl[i].value.data);
+				}
+			}
+
+			asn1_end_tag(data);
+		}
+		msg->num_controls = i;
+		msg->controls = ctrl;
+
+		asn1_end_tag(data);
+	}
+
 	asn1_end_tag(data);
 	return ((!data->has_error) && (data->nesting == NULL));
 }



More information about the samba-cvs mailing list