12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package hdfs
- import (
- "fmt"
- "os"
- "os/user"
- "strings"
- krb "github.com/jcmturner/gokrb5/v8/client"
- "github.com/jcmturner/gokrb5/v8/config"
- "github.com/jcmturner/gokrb5/v8/credentials"
- )
- // copy-paste from https://github.com/colinmarc/hdfs/blob/master/cmd/hdfs/kerberos.go
- func getKerberosClient() (*krb.Client, error) {
- configPath := os.Getenv("KRB5_CONFIG")
- if configPath == "" {
- configPath = "/etc/krb5.conf"
- }
- cfg, err := config.Load(configPath)
- if err != nil {
- return nil, err
- }
- // Determine the ccache location from the environment, falling back to the
- // default location.
- ccachePath := os.Getenv("KRB5CCNAME")
- if strings.Contains(ccachePath, ":") {
- if strings.HasPrefix(ccachePath, "FILE:") {
- ccachePath = strings.SplitN(ccachePath, ":", 2)[1]
- } else {
- return nil, fmt.Errorf("unusable ccache: %s", ccachePath)
- }
- } else if ccachePath == "" {
- u, err := user.Current()
- if err != nil {
- return nil, err
- }
- ccachePath = fmt.Sprintf("/tmp/krb5cc_%s", u.Uid)
- }
- ccache, err := credentials.LoadCCache(ccachePath)
- if err != nil {
- return nil, err
- }
- client, err := krb.NewFromCCache(ccache, cfg)
- if err != nil {
- return nil, err
- }
- return client, nil
- }
|