diff options
author | Volker Lendecke <vl@samba.org> | 2013-03-08 15:55:51 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2013-04-11 13:57:58 -0700 |
commit | 54316ea3394f39f54add55ec554cce795ef1463f (patch) | |
tree | 1b8ac1028304aebaff0e75379f2f341f609afe04 | |
parent | fbda7826b88cf34f445dea73916e2ac958a94cdb (diff) | |
download | samba-54316ea3394f39f54add55ec554cce795ef1463f.tar.gz samba-54316ea3394f39f54add55ec554cce795ef1463f.tar.bz2 samba-54316ea3394f39f54add55ec554cce795ef1463f.zip |
libsmbclient: Avoid a data copy
spnego_parse_negTokenInit does a asn_load of that blob, which does a data copy
itself. So we don't have to had it a copy as well.
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r-- | source3/libsmb/cliconnect.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index d0e67db1b5..a67d25fefb 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1875,20 +1875,17 @@ static ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, char *OIDs[ASN1_MAX_OIDS]; int i; const DATA_BLOB *server_blob; - DATA_BLOB blob = data_blob_null; const char *p = NULL; char *account = NULL; NTSTATUS status; server_blob = smbXcli_conn_server_gss_blob(cli->conn); - if (server_blob) { - blob = data_blob(server_blob->data, server_blob->length); - } - DEBUG(3,("Doing spnego session setup (blob length=%lu)\n", (unsigned long)blob.length)); + DEBUG(3,("Doing spnego session setup (blob length=%lu)\n", + (unsigned long)server_blob->length)); /* the server might not even do spnego */ - if (blob.length == 0) { + if (server_blob->length == 0) { DEBUG(3,("server didn't supply a full spnego negprot\n")); goto ntlmssp; } @@ -1901,12 +1898,11 @@ static ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, * negprot reply. It is WRONG to depend on the principal sent in the * negprot reply, but right now we do it. If we don't receive one, * we try to best guess, then fall back to NTLM. */ - if (!spnego_parse_negTokenInit(talloc_tos(), blob, OIDs, &principal, NULL) || + if (!spnego_parse_negTokenInit(talloc_tos(), *server_blob, OIDs, + &principal, NULL) || OIDs[0] == NULL) { - data_blob_free(&blob); return ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER); } - data_blob_free(&blob); /* make sure the server understands kerberos */ for (i=0;OIDs[i];i++) { |