From 1094e1befc82d86ecbd90193c68ed44a7026d8fa Mon Sep 17 00:00:00 2001 From: Michael Mitton Date: Fri, 18 Feb 2011 01:36:55 -0500 Subject: first commit --- bind.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 bind.go (limited to 'bind.go') diff --git a/bind.go b/bind.go new file mode 100644 index 0000000..9176eca --- /dev/null +++ b/bind.go @@ -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 +} -- cgit v1.2.3