diff options
author | Michael Mitton <mmitton@gmail.com> | 2011-02-18 07:36:55 +0100 |
---|---|---|
committer | Michael Mitton <mmitton@gmail.com> | 2011-02-18 07:36:55 +0100 |
commit | 1094e1befc82d86ecbd90193c68ed44a7026d8fa (patch) | |
tree | a3e9c753ee197eef91d35af85351e83465415908 /bind.go | |
download | ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar.gz ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar.bz2 ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar.lz ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar.xz ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.tar.zst ldap-1094e1befc82d86ecbd90193c68ed44a7026d8fa.zip |
Diffstat (limited to 'bind.go')
-rw-r--r-- | bind.go | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -0,0 +1,50 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// File contains Bind functionality +package ldap + +import ( + "github.com/mmitton/asn1-ber" + "os" +) + +func (l *Conn) Bind( username, password string ) *Error { + messageID := l.nextMessageID() + + packet := ber.Encode( ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "LDAP Request" ) + packet.AppendChild( ber.NewInteger( ber.ClassUniversal, ber.TypePrimative, ber.TagInteger, messageID, "MessageID" ) ) + bindRequest := ber.Encode( ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request" ) + bindRequest.AppendChild( ber.NewInteger( ber.ClassUniversal, ber.TypePrimative, ber.TagInteger, 3, "Version" ) ) + bindRequest.AppendChild( ber.NewString( ber.ClassUniversal, ber.TypePrimative, ber.TagOctetString, username, "User Name" ) ) + bindRequest.AppendChild( ber.NewString( ber.ClassContext, ber.TypePrimative, 0, password, "Password" ) ) + packet.AppendChild( bindRequest ) + + if l.Debug { + ber.PrintPacket( packet ) + } + + channel, err := l.sendMessage( packet ) + if err != nil { + return err + } + if channel == nil { + return NewError( ErrorNetwork, os.NewError( "Could not send message" ) ) + } + defer l.finishMessage( messageID ) + packet = <-channel + + if packet != nil { + return NewError( ErrorNetwork, os.NewError( "Could not retrieve response" ) ) + } + + if l.Debug { + if err := addLDAPDescriptions( packet ); err != nil { + return NewError( ErrorDebugging, err ) + } + ber.PrintPacket( packet ) + } + + return nil +} |