]> git.sur5r.net Git - openldap/blob - libraries/libldap/sbind.c
Fix ITS#1843, don't deref NULL string in ldap_pvt_str2upper
[openldap] / libraries / libldap / sbind.c
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6 /*  Portions
7  *  Copyright (c) 1993 Regents of the University of Michigan.
8  *  All rights reserved.
9  *
10  *  sbind.c
11  */
12
13 /*
14  *      BindRequest ::= SEQUENCE {
15  *              version         INTEGER,
16  *              name            DistinguishedName,       -- who
17  *              authentication  CHOICE {
18  *                      simple          [0] OCTET STRING -- passwd
19 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
20  *                      krbv42ldap      [1] OCTET STRING
21  *                      krbv42dsa       [2] OCTET STRING
22 #endif
23  *                      sasl            [3] SaslCredentials     -- LDAPv3
24  *              }
25  *      }
26  *
27  *      BindResponse ::= SEQUENCE {
28  *              COMPONENTS OF LDAPResult,
29  *              serverSaslCreds         OCTET STRING OPTIONAL -- LDAPv3
30  *      }
31  *
32  */
33
34 #include "portable.h"
35
36 #include <stdio.h>
37
38 #include <ac/socket.h>
39 #include <ac/string.h>
40 #include <ac/time.h>
41
42 #include "ldap-int.h"
43
44
45 /*
46  * ldap_simple_bind - bind to the ldap server (and X.500).  The dn and
47  * password of the entry to which to bind are supplied.  The message id
48  * of the request initiated is returned.
49  *
50  * Example:
51  *      ldap_simple_bind( ld, "cn=manager, o=university of michigan, c=us",
52  *          "secret" )
53  */
54
55 int
56 ldap_simple_bind(
57         LDAP *ld,
58         LDAP_CONST char *dn,
59         LDAP_CONST char *passwd )
60 {
61         int rc;
62         int msgid;
63         struct berval cred;
64
65 #ifdef NEW_LOGGING
66         LDAP_LOG (( "sbind", LDAP_LEVEL_ENTRY, "ldap_simple_bind\n" ));
67 #else
68         Debug( LDAP_DEBUG_TRACE, "ldap_simple_bind\n", 0, 0, 0 );
69 #endif
70
71         assert( ld != NULL );
72         assert( LDAP_VALID( ld ) );
73
74         if ( passwd != NULL ) {
75                 cred.bv_val = (char *) passwd;
76                 cred.bv_len = strlen( passwd );
77         } else {
78                 cred.bv_val = "";
79                 cred.bv_len = 0;
80         }
81
82         rc = ldap_sasl_bind( ld, dn, LDAP_SASL_SIMPLE, &cred,
83                 NULL, NULL, &msgid );
84
85         return rc == LDAP_SUCCESS ? msgid : -1;
86 }
87
88 /*
89  * ldap_simple_bind - bind to the ldap server (and X.500) using simple
90  * authentication.  The dn and password of the entry to which to bind are
91  * supplied.  LDAP_SUCCESS is returned upon success, the ldap error code
92  * otherwise.
93  *
94  * Example:
95  *      ldap_simple_bind_s( ld, "cn=manager, o=university of michigan, c=us",
96  *          "secret" )
97  */
98
99 int
100 ldap_simple_bind_s( LDAP *ld, LDAP_CONST char *dn, LDAP_CONST char *passwd )
101 {
102         struct berval cred;
103
104 #ifdef NEW_LOGGING
105         LDAP_LOG (( "sbind", LDAP_LEVEL_ENTRY, "ldap_simple_bind_s\n" ));
106 #else
107         Debug( LDAP_DEBUG_TRACE, "ldap_simple_bind_s\n", 0, 0, 0 );
108 #endif
109
110         if ( passwd != NULL ) {
111                 cred.bv_val = (char *) passwd;
112                 cred.bv_len = strlen( passwd );
113         } else {
114                 cred.bv_val = "";
115                 cred.bv_len = 0;
116         }
117
118         return ldap_sasl_bind_s( ld, dn, LDAP_SASL_SIMPLE, &cred,
119                 NULL, NULL, NULL );
120 }