summaryrefslogtreecommitdiff
path: root/usr/src/lib/libldap4/common/getattr.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libldap4/common/getattr.c')
-rw-r--r--usr/src/lib/libldap4/common/getattr.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/usr/src/lib/libldap4/common/getattr.c b/usr/src/lib/libldap4/common/getattr.c
new file mode 100644
index 0000000000..dee90abda1
--- /dev/null
+++ b/usr/src/lib/libldap4/common/getattr.c
@@ -0,0 +1,109 @@
+/*
+ *
+ * Portions Copyright %G% Sun Microsystems, Inc.
+ * All Rights Reserved
+ *
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * Copyright (c) 1990 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * getattr.c
+ */
+
+#ifndef lint
+static char copyright[] = "@(#) Copyright (c) 1990 Regents of the University of Michigan.\nAll rights reserved.\n";
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#ifdef MACOS
+#include <stdlib.h>
+#include "macos.h"
+#else /* MACOS */
+#if defined( DOS ) || defined( _WIN32 )
+#include <malloc.h>
+#include "msdos.h"
+#else /* DOS */
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif /* DOS */
+#endif /* MACOS */
+
+#include "lber.h"
+#include "ldap.h"
+#include "ldap-private.h"
+#include "ldap-int.h"
+
+char *
+ldap_first_attribute( LDAP *ld, LDAPMessage *entry, BerElement **ber )
+{
+ int len;
+ char *attrbuffer;
+
+ if ((attrbuffer = (char *)malloc(LDAP_MAX_ATTR_LEN)) == NULL) {
+ return (NULL);
+ }
+
+ Debug( LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 179, "ldap_first_attribute\n"), 0, 0, 0 );
+
+ if ( (*ber = alloc_ber_with_options( ld )) == NULLBER ) {
+ free(attrbuffer);
+ return( NULL );
+ }
+
+ **ber = *entry->lm_ber;
+
+ /*
+ * Skip past the sequence, dn, sequence of sequence, snarf the
+ * attribute type, and skip the set of values, leaving us
+ * positioned right before the next attribute type/value sequence.
+ */
+
+ len = LDAP_MAX_ATTR_LEN;
+ if ( ber_scanf( *ber, "{x{{sx}", attrbuffer, &len )
+ == LBER_ERROR ) {
+ ld->ld_errno = LDAP_DECODING_ERROR;
+ ber_free( *ber, 0 );
+ *ber = NULL;
+ free(attrbuffer);
+ return( NULL );
+ }
+
+ return( attrbuffer );
+}
+
+/* ARGSUSED */
+char *
+ldap_next_attribute( LDAP *ld, LDAPMessage *entry, BerElement *ber )
+{
+ int len;
+ char *attrbuffer;
+
+ if ((attrbuffer = (char *)malloc(LDAP_MAX_ATTR_LEN)) == NULL) {
+ return (NULL);
+ }
+
+ Debug( LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 180, "ldap_next_attribute\n"), 0, 0, 0 );
+
+ /* skip sequence, snarf attribute type, skip values */
+ len = LDAP_MAX_ATTR_LEN;
+ if ( ber_scanf( ber, "{sx}", attrbuffer, &len )
+ == LBER_ERROR ) {
+ ld->ld_errno = LDAP_DECODING_ERROR;
+ free(attrbuffer);
+ return( NULL );
+ }
+ ld->ld_errno = LDAP_SUCCESS;
+ return( attrbuffer );
+}
+
+void ldap_memfree(char *mem)
+{
+ free(mem);
+}
+