in internal/sshd/gssapi.go [73:127]
func (server *OSGSSAPIServer) AcceptSecContext(
token []byte,
) (
outputToken []byte,
srcName string,
needContinue bool,
err error,
) {
server.mutex.Lock()
defer server.mutex.Unlock()
tokenBuffer, err := server.lib.MakeBufferBytes(token)
if err != nil {
return
}
defer tokenBuffer.Release()
var spn *gssapi.CredId = server.lib.GSS_C_NO_CREDENTIAL
if server.ServicePrincipalName != "" {
var name *gssapi.Name
name, err = server.str2name(server.ServicePrincipalName)
if err != nil {
return
}
defer name.Release()
var actualMech *gssapi.OIDSet
spn, actualMech, _, err = server.lib.AcquireCred(name, 0, server.lib.GSS_C_NO_OID_SET, gssapi.GSS_C_ACCEPT)
if err != nil {
return
}
defer spn.Release()
defer actualMech.Release()
}
ctxOut, srcNameName, _, outputTokenBuffer, _, _, _, err := server.lib.AcceptSecContext(
server.contextId,
spn,
tokenBuffer,
nil,
)
if err == gssapi.ErrContinueNeeded {
needContinue = true
err = nil
} else if err != nil {
return
}
defer outputTokenBuffer.Release()
defer srcNameName.Release()
outputToken = outputTokenBuffer.Bytes()
server.contextId = ctxOut
return outputToken, srcNameName.String(), needContinue, err
}