summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-08-08 16:11:40 -0400
committerSimo Sorce <simo@redhat.com>2014-08-08 18:29:25 -0400
commit0033db0bdb6db653ab43b99ca4b343148739e5c2 (patch)
tree49bb12b367bb2fed56a1c7c62889896e5a4d9579
parentfd4464077fee7b309059f7c39ab89925a4a7dac0 (diff)
downloadgss-ntlmssp-0033db0bdb6db653ab43b99ca4b343148739e5c2.tar.gz
gss-ntlmssp-0033db0bdb6db653ab43b99ca4b343148739e5c2.tar.xz
gss-ntlmssp-0033db0bdb6db653ab43b99ca4b343148739e5c2.zip
Ignore domain and workstation in negotiate message
We never use these fields, so do not even attempt to decode them just ignore completely.
-rw-r--r--src/gss_sec_ctx.c6
-rw-r--r--src/ntlm.c10
2 files changed, 7 insertions, 9 deletions
diff --git a/src/gss_sec_ctx.c b/src/gss_sec_ctx.c
index 4802567..3b06d18 100644
--- a/src/gss_sec_ctx.c
+++ b/src/gss_sec_ctx.c
@@ -521,8 +521,6 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
struct gssntlm_ctx *ctx;
struct gssntlm_cred *cred;
int lm_compat_lvl = -1;
- char *workstation = NULL;
- char *domain = NULL;
struct ntlm_buffer challenge = { 0 };
struct gssntlm_name *server_name = NULL;
char *computer_name = NULL;
@@ -674,7 +672,7 @@ uint32_t gssntlm_accept_sec_context(uint32_t *minor_status,
}
retmin = ntlm_decode_neg_msg(ctx->ntlm, &ctx->nego_msg, &in_flags,
- &domain, &workstation);
+ NULL, NULL);
if (retmin) {
retmaj = GSS_S_DEFECTIVE_TOKEN;
goto done;
@@ -1003,8 +1001,6 @@ done:
safefree(computer_name);
safefree(nb_computer_name);
safefree(nb_domain_name);
- safefree(workstation);
- safefree(domain);
safefree(usr_name);
safefree(dom_name);
safefree(wks_name);
diff --git a/src/ntlm.c b/src/ntlm.c
index 3702e4c..d9b3c87 100644
--- a/src/ntlm.c
+++ b/src/ntlm.c
@@ -979,12 +979,14 @@ int ntlm_decode_neg_msg(struct ntlm_ctx *ctx,
neg_flags = le32toh(msg->neg_flags);
- if (neg_flags & NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED) {
+ if (domain &&
+ (neg_flags & NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED)) {
ret = ntlm_decode_oem_str(&msg->domain_name, buffer,
payload_offs, &dom);
if (ret) goto done;
}
- if (neg_flags & NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED) {
+ if (workstation &&
+ (neg_flags & NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED)) {
ret = ntlm_decode_oem_str(&msg->workstation_name, buffer,
payload_offs, &wks);
if (ret) goto done;
@@ -996,8 +998,8 @@ done:
safefree(wks);
} else {
*flags = neg_flags;
- *domain = dom;
- *workstation = wks;
+ if (domain) *domain = dom;
+ if (workstation) *workstation = wks;
}
return ret;
}