diff options
-rw-r--r-- | src/gss_sec_ctx.c | 6 | ||||
-rw-r--r-- | src/ntlm.c | 10 |
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); @@ -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; } |