1 /* $NetBSD: bind.c,v 1.1.1.3 2010/12/12 15:21:29 adam Exp $ */ 2 3 /* bind.c */ 4 /* OpenLDAP: pkg/ldap/libraries/libldap/bind.c,v 1.24.2.6 2010/04/13 20:22:55 kurt Exp */ 5 /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 6 * 7 * Copyright 1998-2010 The OpenLDAP Foundation. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted only as authorized by the OpenLDAP 12 * Public License. 13 * 14 * A copy of this license is available in the file LICENSE in the 15 * top-level directory of the distribution or, alternatively, at 16 * <http://www.OpenLDAP.org/license.html>. 17 */ 18 /* Portions Copyright (c) 1990 Regents of the University of Michigan. 19 * All rights reserved. 20 */ 21 22 #include "portable.h" 23 24 #include <stdio.h> 25 26 #include <ac/stdlib.h> 27 28 #include <ac/socket.h> 29 #include <ac/string.h> 30 #include <ac/time.h> 31 32 #include "ldap-int.h" 33 #include "ldap_log.h" 34 35 /* 36 * BindRequest ::= SEQUENCE { 37 * version INTEGER, 38 * name DistinguishedName, -- who 39 * authentication CHOICE { 40 * simple [0] OCTET STRING -- passwd 41 * krbv42ldap [1] OCTET STRING -- OBSOLETE 42 * krbv42dsa [2] OCTET STRING -- OBSOLETE 43 * sasl [3] SaslCredentials -- LDAPv3 44 * } 45 * } 46 * 47 * BindResponse ::= SEQUENCE { 48 * COMPONENTS OF LDAPResult, 49 * serverSaslCreds OCTET STRING OPTIONAL -- LDAPv3 50 * } 51 * 52 * (Source: RFC 2251) 53 */ 54 55 /* 56 * ldap_bind - bind to the ldap server (and X.500). The dn and password 57 * of the entry to which to bind are supplied, along with the authentication 58 * method to use. The msgid of the bind request is returned on success, 59 * -1 if there's trouble. ldap_result() should be called to find out the 60 * outcome of the bind request. 61 * 62 * Example: 63 * ldap_bind( ld, "cn=manager, o=university of michigan, c=us", "secret", 64 * LDAP_AUTH_SIMPLE ) 65 */ 66 67 int 68 ldap_bind( LDAP *ld, LDAP_CONST char *dn, LDAP_CONST char *passwd, int authmethod ) 69 { 70 Debug( LDAP_DEBUG_TRACE, "ldap_bind\n", 0, 0, 0 ); 71 72 switch ( authmethod ) { 73 case LDAP_AUTH_SIMPLE: 74 return( ldap_simple_bind( ld, dn, passwd ) ); 75 76 #ifdef HAVE_GSSAPI 77 case LDAP_AUTH_NEGOTIATE: 78 return( ldap_gssapi_bind_s( ld, dn, passwd) ); 79 #endif 80 81 case LDAP_AUTH_SASL: 82 /* user must use ldap_sasl_bind */ 83 /* FALL-THRU */ 84 85 default: 86 ld->ld_errno = LDAP_AUTH_UNKNOWN; 87 return( -1 ); 88 } 89 } 90 91 /* 92 * ldap_bind_s - bind to the ldap server (and X.500). The dn and password 93 * of the entry to which to bind are supplied, along with the authentication 94 * method to use. This routine just calls whichever bind routine is 95 * appropriate and returns the result of the bind (e.g. LDAP_SUCCESS or 96 * some other error indication). 97 * 98 * Examples: 99 * ldap_bind_s( ld, "cn=manager, o=university of michigan, c=us", 100 * "secret", LDAP_AUTH_SIMPLE ) 101 * ldap_bind_s( ld, "cn=manager, o=university of michigan, c=us", 102 * NULL, LDAP_AUTH_KRBV4 ) 103 */ 104 int 105 ldap_bind_s( 106 LDAP *ld, 107 LDAP_CONST char *dn, 108 LDAP_CONST char *passwd, 109 int authmethod ) 110 { 111 Debug( LDAP_DEBUG_TRACE, "ldap_bind_s\n", 0, 0, 0 ); 112 113 switch ( authmethod ) { 114 case LDAP_AUTH_SIMPLE: 115 return( ldap_simple_bind_s( ld, dn, passwd ) ); 116 117 #ifdef HAVE_GSSAPI 118 case LDAP_AUTH_NEGOTIATE: 119 return( ldap_gssapi_bind_s( ld, dn, passwd) ); 120 #endif 121 122 case LDAP_AUTH_SASL: 123 /* user must use ldap_sasl_bind */ 124 /* FALL-THRU */ 125 126 default: 127 return( ld->ld_errno = LDAP_AUTH_UNKNOWN ); 128 } 129 } 130