diff --git a/pgconn/config.go b/pgconn/config.go index 2236bbe6..8a22d4ce 100644 --- a/pgconn/config.go +++ b/pgconn/config.go @@ -40,7 +40,9 @@ type Config struct { BuildFrontend BuildFrontendFunc RuntimeParams map[string]string // Run-time parameters to set on connection as session default values (e.g. search_path or application_name) - Fallbacks []*FallbackConfig + KerberosSrvName string + KerberosSpn string + Fallbacks []*FallbackConfig // ValidateConnect is called during a connection attempt after a successful authentication with the PostgreSQL server. // It can be used to validate that the server is acceptable. If this returns an error the connection is closed and the next @@ -258,6 +260,14 @@ func ParseConfig(connString string) (*Config, error) { "servicefile": {}, } + // Adding kerberos configuration + if _, present := settings["krbsrvname"]; present { + config.KerberosSrvName = settings["krbsrvname"] + } + if _, present := settings["krbspn"]; present { + config.KerberosSpn = settings["krbspn"] + } + for k, v := range settings { if _, present := notRuntimeParams[k]; present { continue diff --git a/pgconn/krb5.go b/pgconn/krb5.go index bffbc981..8dffc879 100644 --- a/pgconn/krb5.go +++ b/pgconn/krb5.go @@ -42,14 +42,14 @@ func (c *PgConn) gssAuth() error { } var nextData []byte - if spn, ok := c.config.RuntimeParams["krbspn"]; ok { + if c.config.KerberosSpn != "" { // Use the supplied SPN if provided. - nextData, err = cli.GetInitTokenFromSPN(spn) + nextData, err = cli.GetInitTokenFromSPN(c.config.KerberosSpn) } else { // Allow the kerberos service name to be overridden service := "postgres" - if val, ok := c.config.RuntimeParams["krbsrvname"]; ok { - service = val + if c.config.KerberosSrvName != "" { + service = c.config.KerberosSrvName } nextData, err = cli.GetInitToken(c.config.Host, service) }