in http_client_wrappers.go [49:80]
func WithKerberosAuth(cli *http.Client, username, realm, keyTab, krb5Conf, krb5CredentialCache string) (*http.Client, error) {
var kerberosClient *client.Client
if krb5CredentialCache != "" {
tc, err := credentials.LoadCCache(krb5CredentialCache)
if err != nil {
return nil, fmt.Errorf("error reading kerberos ticket cache: %w", err)
}
kc, err := client.NewFromCCache(tc, config.New())
if err != nil {
return nil, fmt.Errorf("error creating kerberos client: %w", err)
}
kerberosClient = kc
} else {
cfg, err := config.Load(krb5Conf)
if err != nil {
return nil, fmt.Errorf("error reading kerberos config: %w", err)
}
kt, err := keytab.Load(keyTab)
if err != nil {
return nil, fmt.Errorf("error reading kerberos keytab: %w", err)
}
kc := client.NewWithKeytab(username, realm, kt, cfg)
err = kc.Login()
if err != nil {
return nil, fmt.Errorf("error performing kerberos login with keytab: %w", err)
}
kerberosClient = kc
}
rt := &krb5Transport{cli.Transport, kerberosClient}
cli.Transport = rt
return cli, nil
}