import "github.com/go-ldap/ldap/v3"
func NewLDAPClient(ctx context.Context, serverURL, bindDN, bindPassword string) (*ldap.Conn, error) {
conn, err := ldap.DialURL(serverURL) // ldaps://dc.example.com:636
if err != nil {
return nil, fmt.Errorf("failed to connect to LDAP: %w", err)
}
// Simple bind with username/password
err = conn.Bind(bindDN, bindPassword)
if err != nil {
conn.Close()
return nil, fmt.Errorf("failed to bind: %w", err)
}
return conn, nil
}
// For Kerberos/GSSAPI (domain-joined machines)
func NewLDAPClientKerberos(ctx context.Context, serverURL string) (*ldap.Conn, error) {
conn, err := ldap.DialURL(serverURL)
if err != nil {
return nil, err
}
err = conn.ExternalBind()
if err != nil {
conn.Close()
return nil, err
}
return conn, nil
}