Skip to content

Commit

Permalink
negotiate: minor NewServerContext cleanup
Browse files Browse the repository at this point in the history
Explicitely returning the serverDone boolean allows for slightly cleaner code
  • Loading branch information
vanackere committed May 22, 2018
1 parent 6a9d06a commit 48f578e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 17 deletions.
14 changes: 3 additions & 11 deletions negotiate/negotiate.go
Original file line number Diff line number Diff line change
Expand Up @@ -334,23 +334,15 @@ type ServerContext struct {
// credentials created by AcquireServerCredentials and token from
// the client to start server Negotiate negotiation sequence.
// It also returns new token to be sent to the client.
func NewServerContext(cred *sspi.Credentials, token []byte) (sc *ServerContext, outputToken []byte, err error) {
func NewServerContext(cred *sspi.Credentials, token []byte) (sc *ServerContext, authDone bool, outputToken []byte, err error) {
otoken := make([]byte, PackageInfo.MaxToken)
c := sspi.NewServerContext(cred, sspi.ASC_REQ_CONNECTION)
authDone, n, err2 := updateContext(c, otoken, token, nil)
if err2 != nil {
return nil, nil, err2
}
if authDone {
c.Release()
return nil, nil, errors.New("negotiate authentication should not be completed yet")
}
if n == 0 {
c.Release()
return nil, nil, errors.New("negotiate token should not be empty")
return nil, false, nil, err2
}
otoken = otoken[:n]
return &ServerContext{sctxt: c}, otoken, nil
return &ServerContext{sctxt: c}, authDone, otoken, nil
}

// Release free up resources associated with server context c.
Expand Down
12 changes: 6 additions & 6 deletions negotiate/negotiate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,15 @@ func testNegotiate(t *testing.T, clientCred *sspi.Credentials, SPN string) {

testContextExpiry(t, "client security context", client)

server, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
server, serverDone, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
if err != nil {
t.Fatal(err)
}
defer server.Release()

testContextExpiry(t, "server security context", server)

var clientDone, serverDone bool
var clientDone bool
for {
if len(toClientToken) == 0 {
break
Expand Down Expand Up @@ -162,14 +162,14 @@ func TestNegotiateFailure(t *testing.T) {
}
t.Logf("sent %d bytes to server", len(toServerToken))

server, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
server, serverDone, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
if err != nil {
t.Fatal(err)
}
defer server.Release()

for {
var clientDone, serverDone bool
var clientDone bool
if len(toClientToken) == 0 {
t.Fatal("token for client cannot be empty")
}
Expand Down Expand Up @@ -242,13 +242,13 @@ func TestSignature(t *testing.T) {
t.Fatal("token for server cannot be empty")
}

server, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
server, serverDone, toClientToken, err := negotiate.NewServerContext(serverCred, toServerToken)
if err != nil {
t.Fatal(err)
}
defer server.Release()

var clientDone, serverDone bool
var clientDone bool
for {
if len(toClientToken) == 0 {
break
Expand Down

0 comments on commit 48f578e

Please sign in to comment.