2 * Copyright (c) 2001 by Sun Microsystems, Inc.
6 #pragma ident "%Z%%M% %I% %E% SMI"
9 * The contents of this file are subject to the Netscape Public
10 * License Version 1.1 (the "License"); you may not use this file
11 * except in compliance with the License. You may obtain a copy of
12 * the License at http://www.mozilla.org/NPL/
14 * Software distributed under the License is distributed on an "AS
15 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
16 * implied. See the License for the specific language governing
17 * rights and limitations under the License.
19 * The Original Code is Mozilla Communicator client code, released
22 * The Initial Developer of the Original Code is Netscape
23 * Communications Corporation. Portions created by Netscape are
24 * Copyright (C) 1998-1999 Netscape Communications Corporation. All
30 * Copyright (c) 1990 Regents of the University of Michigan.
31 * All rights reserved.
39 static char copyright
[] = "@(#) Copyright (c) 1990 Regents of the University of Michigan.\nAll rights reserved.\n";
47 bytes_remaining( BerElement
*ber
)
51 if ( ber_get_option( ber
, LBER_OPT_REMAINING_BYTES
, &len
) != 0 ) {
52 return( 0 ); /* not sure what else to do.... */
60 ldap_first_attribute( LDAP
*ld
, LDAPMessage
*entry
, BerElement
**ber
)
66 LDAPDebug( LDAP_DEBUG_TRACE
, "ldap_first_attribute\n", 0, 0, 0 );
68 if ( !NSLDAPI_VALID_LDAP_POINTER( ld
)) {
69 return( NULL
); /* punt */
72 if ( ber
== NULL
|| !NSLDAPI_VALID_LDAPMESSAGE_ENTRY_POINTER( entry
)) {
73 LDAP_SET_LDERRNO( ld
, LDAP_PARAM_ERROR
, NULL
, NULL
);
77 if ( nsldapi_alloc_ber_with_options( ld
, ber
) != LDAP_SUCCESS
) {
81 **ber
= *entry
->lm_ber
;
83 attr
= NULL
; /* pessimistic */
84 err
= LDAP_DECODING_ERROR
; /* ditto */
87 * Skip past the sequence, dn, and sequence of sequence.
88 * Reset number of bytes remaining so we confine the rest of our
89 * decoding to the current sequence.
91 if ( ber_scanf( *ber
, "{xl{", &seqlength
) != LBER_ERROR
&&
92 ber_set_option( *ber
, LBER_OPT_REMAINING_BYTES
, &seqlength
)
94 /* snarf the attribute type, and skip the set of values,
95 * leaving us positioned right before the next attribute
96 * type/value sequence.
98 if ( ber_scanf( *ber
, "{ax}", &attr
) != LBER_ERROR
||
99 bytes_remaining( *ber
) == 0 ) {
104 LDAP_SET_LDERRNO( ld
, err
, NULL
, NULL
);
105 if ( attr
== NULL
|| err
!= LDAP_SUCCESS
) {
115 ldap_next_attribute( LDAP
*ld
, LDAPMessage
*entry
, BerElement
*ber
)
120 LDAPDebug( LDAP_DEBUG_TRACE
, "ldap_next_attribute\n", 0, 0, 0 );
122 if ( !NSLDAPI_VALID_LDAP_POINTER( ld
)) {
123 return( NULL
); /* punt */
126 if ( ber
== NULL
|| !NSLDAPI_VALID_LDAPMESSAGE_ENTRY_POINTER( entry
)) {
127 LDAP_SET_LDERRNO( ld
, LDAP_PARAM_ERROR
, NULL
, NULL
);
131 attr
= NULL
; /* pessimistic */
132 err
= LDAP_DECODING_ERROR
; /* ditto */
134 /* skip sequence, snarf attribute type, skip values */
135 if ( ber_scanf( ber
, "{ax}", &attr
) != LBER_ERROR
||
136 bytes_remaining( ber
) == 0 ) {
140 LDAP_SET_LDERRNO( ld
, err
, NULL
, NULL
);