package pq

import (
	"net"
	"strings"
)

/*
 *  Basic GSSAPI interface to abstract Windows (SSPI) from Unix
 *  APIs within the driver
 */

type Gss interface {
	GetInitToken(host string, service string) ([]byte, error)
	GetInitTokenFromSpn(spn string) ([]byte, error)
	Continue(inToken []byte) (done bool, outToken []byte, err error)
}

/*
 *  Find the A record associated with a hostname
 *  In general, hostnames supplied to the driver should be
 *  canonicalized because the KDC usually only has one
 *  principal and not one per potential alias of a host.
 */
func canonicalizeHostname(host string) (string, error) {
	canon := host

	name, err := net.LookupCNAME(host)
	if err != nil {
		return "", err
	}

	name = strings.TrimSuffix(name, ".")

	if name != "" {
		canon = name
	}

	return canon, nil
}