]> git.sur5r.net Git - openldap/blob - libraries/libldap/references.c
3c317e1937ff649e01a3f10d5186bf0b40984856
[openldap] / libraries / libldap / references.c
1 /*
2  *  references.c
3  */
4
5 #include "portable.h"
6
7 #include <stdio.h>
8 #include <stdlib.h>
9
10 #include <ac/ctype.h>
11 #include <ac/socket.h>
12 #include <ac/string.h>
13 #include <ac/time.h>
14
15 #include "ldap-int.h"
16
17 /* ARGSUSED */
18 LDAPMessage *
19 ldap_first_reference( LDAP *ld, LDAPMessage *chain )
20 {
21         if ( ld == NULL || chain == NULLMSG ) {
22                 return NULLMSG;
23         }
24
25         return chain->lm_msgtype == LDAP_RES_SEARCH_REFERENCE
26                 ? chain
27                 : ldap_next_reference( ld, chain );
28 }
29
30 /* ARGSUSED */
31 LDAPMessage *
32 ldap_next_reference( LDAP *ld, LDAPMessage *ref )
33 {
34         if ( ld == NULL || ref == NULLMSG ) {
35                 return NULLMSG;
36         }
37
38         for (
39                 ref = ref->lm_chain;
40                 ref != NULLMSG;
41                 ref = ref->lm_chain )
42         {
43                 if( ref->lm_msgtype == LDAP_RES_SEARCH_REFERENCE ) {
44                         return( ref );
45                 }
46         }
47
48         return( NULLMSG );
49 }
50
51 /* ARGSUSED */
52 int
53 ldap_count_references( LDAP *ld, LDAPMessage *chain )
54 {
55         int     i;
56
57         if ( ld == NULL ) {
58                 return -1;
59         }
60
61         for ( i = 0; chain != NULL; chain = chain->lm_chain ) {
62                 if( chain->lm_msgtype == LDAP_RES_SEARCH_REFERENCE ) {
63                         i++;
64                 }
65         }
66
67         return( i );
68 }