41 lines
809 B
Go
41 lines
809 B
Go
|
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
|
||
|
}
|