Skip to content

Commit 94786fc

Browse files
committed
Load versioned gssapi libs
1 parent aa6e2a6 commit 94786fc

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

pkg/cmd/util/tokencmd/negotiator_gssapi.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package tokencmd
55
import (
66
"net"
77
"net/url"
8+
"runtime"
89
"sync"
910
"time"
1011

@@ -158,10 +159,35 @@ func (g *gssapiNegotiator) Release() error {
158159
func (g *gssapiNegotiator) loadLib() (*gssapi.Lib, error) {
159160
g.loadOnce.Do(func() {
160161
glog.V(5).Infof("loading gssapi")
161-
g.lib, g.loadError = gssapi.Load(nil)
162-
if g.loadError != nil {
163-
glog.V(5).Infof("could not load gssapi: %v", g.loadError)
162+
163+
var libPaths []string
164+
switch runtime.GOOS {
165+
case "darwin":
166+
libPaths = []string{"libgssapi_krb5.dylib"}
167+
case "linux":
168+
// MIT, Heimdal
169+
libPaths = []string{"libgssapi_krb5.so.2", "libgssapi.so.3"}
170+
default:
171+
// Default search path
172+
libPaths = []string{""}
173+
}
174+
175+
var loadErrors []error
176+
for _, libPath := range libPaths {
177+
lib, loadError := gssapi.Load(&gssapi.Options{LibPath: libPath})
178+
179+
// If we successfully loaded from this path, return early
180+
if loadError == nil {
181+
glog.V(5).Infof("loaded gssapi %s", libPath)
182+
g.lib = lib
183+
return
184+
}
185+
186+
// Otherwise, log and aggregate
187+
glog.V(5).Infof("%v", loadError)
188+
loadErrors = append(loadErrors, loadError)
164189
}
190+
g.loadError = utilerrors.NewAggregate(loadErrors)
165191
})
166192
return g.lib, g.loadError
167193
}

0 commit comments

Comments
 (0)