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