/* **| method: void flush_cache ( ); **| deletes the cache contents, but does **| not effect it in any other way */ static void f_ldap_flush_cache(INT32 args) { if (!THIS->bound) Pike_error("OpenLDAP.Client: attempting operation on an unbound connection\n"); pop_n_elems(args); if (!THIS->caching) return; ldap_flush_cache(THIS->conn); }
/* * ldap_kerberos_bind1 - initiate a bind to the ldap server using * kerberos authentication. The dn is supplied. It is assumed the user * already has a valid ticket granting ticket. The msgid of the * request is returned on success (suitable for passing to ldap_result()), * -1 is returned if there's trouble. * * Example: * ldap_kerberos_bind1( ld, "cn=manager, o=university of michigan, c=us" ) */ int ldap_kerberos_bind1( LDAP *ld, char *dn ) { BerElement *ber; char *cred; int rc, credlen; char *get_kerberosv4_credentials(); #ifdef STR_TRANSLATION int str_translation_on; #endif /* STR_TRANSLATION */ /* * The bind request looks like this: * BindRequest ::= SEQUENCE { * version INTEGER, * name DistinguishedName, * authentication CHOICE { * krbv42ldap [1] OCTET STRING * krbv42dsa [2] OCTET STRING * } * } * all wrapped up in an LDAPMessage sequence. */ #if defined( SUN ) && defined( _REENTRANT ) int rv; LOCK_LDAP(ld); #endif Debug( LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 186, "ldap_kerberos_bind1\n"), 0, 0, 0 ); if ( dn == NULL ) dn = ""; if ( (cred = get_kerberosv4_credentials( ld, dn, "ldapserver", &credlen )) == NULL ) { #if defined( SUN ) && defined( _REENTRANT ) UNLOCK_LDAP(ld); #endif return( -1 ); /* ld_errno should already be set */ } /* create a message to send */ if ( (ber = alloc_ber_with_options( ld )) == NULLBER ) { free( cred ); #if defined( SUN ) && defined( _REENTRANT ) UNLOCK_LDAP(ld); #endif return( -1 ); } #ifdef STR_TRANSLATION if (( str_translation_on = (( ber->ber_options & LBER_TRANSLATE_STRINGS ) != 0 ))) { /* turn translation off */ ber->ber_options &= ~LBER_TRANSLATE_STRINGS; } #endif /* STR_TRANSLATION */ /* fill it in */ rc = ber_printf( ber, "{it{isto}}", ++ld->ld_msgid, LDAP_REQ_BIND, ld->ld_version, dn, LDAP_AUTH_KRBV41, cred, credlen ); #ifdef STR_TRANSLATION if ( str_translation_on ) { /* restore translation */ ber->ber_options |= LBER_TRANSLATE_STRINGS; } #endif /* STR_TRANSLATION */ if ( rc == -1 ) { free( cred ); ber_free( ber, 1 ); ld->ld_errno = LDAP_ENCODING_ERROR; #if defined( SUN ) && defined( _REENTRANT ) UNLOCK_LDAP(ld); #endif return( -1 ); } free( cred ); #ifndef NO_CACHE if ( ld->ld_cache != NULL ) { ldap_flush_cache( ld ); } #endif /* !NO_CACHE */ /* send the message */ #if defined( SUN ) && defined( _REENTRANT ) rv = send_initial_request( ld, LDAP_REQ_BIND, dn, ber ); UNLOCK_LDAP(ld); return ( rv ); #else return ( send_initial_request( ld, LDAP_REQ_BIND, dn, ber )); #endif }