summaryrefslogtreecommitdiff
path: root/source3/smbd/seal.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-10-12 04:00:55 +0200
committerJelmer Vernooij <jelmer@samba.org>2008-10-12 04:00:55 +0200
commitd68168e63386f900b70b82a7056f6e744cd5d50c (patch)
tree8248e860a4cd776be21a807def3ee8ad251a83d6 /source3/smbd/seal.c
parent5237369ad8bac6a5fc80e32b313ce9f3266abc0f (diff)
downloadsamba-d68168e63386f900b70b82a7056f6e744cd5d50c.tar.gz
samba-d68168e63386f900b70b82a7056f6e744cd5d50c.tar.bz2
samba-d68168e63386f900b70b82a7056f6e744cd5d50c.zip
Cope with the fact that the data blobs returned are now
talloc-allocated. Ideally, this memory should be talloc-stolen (and perhaps have DATA_BLOB in the interface everywhere), but that requires some more complex changes so I've just changed it to copy it for now.
Diffstat (limited to 'source3/smbd/seal.c')
-rw-r--r--source3/smbd/seal.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/source3/smbd/seal.c b/source3/smbd/seal.c
index e9dc46aa3c..18d8b643dd 100644
--- a/source3/smbd/seal.c
+++ b/source3/smbd/seal.c
@@ -426,9 +426,14 @@ static NTSTATUS srv_enc_spnego_gss_negotiate(unsigned char **ppdata, size_t *p_d
data_blob_free(&auth_reply);
SAFE_FREE(*ppdata);
- *ppdata = response.data;
+ *ppdata = memdup(response.data, response.length);
+ if ((*ppdata) == NULL && response.length > 0) {
+ status = NT_STATUS_NO_MEMORY;
+ }
*p_data_size = response.length;
+ data_blob_free(&response);
+
return status;
}
#endif
@@ -463,8 +468,13 @@ static NTSTATUS srv_enc_ntlm_negotiate(unsigned char **ppdata, size_t *p_data_si
}
SAFE_FREE(*ppdata);
- *ppdata = response.data;
+ *ppdata = memdup(response.data, response.length);
+ if ((*ppdata) == NULL && response.length > 0) {
+ status = NT_STATUS_NO_MEMORY;
+ }
*p_data_size = response.length;
+ data_blob_free(&response);
+
return status;
}
@@ -585,8 +595,11 @@ static NTSTATUS srv_enc_spnego_ntlm_auth(connection_struct *conn,
}
SAFE_FREE(*ppdata);
- *ppdata = response.data;
+ *ppdata = memdup(response.data, response.length);
+ if ((*ppdata) == NULL && response.length > 0)
+ return NT_STATUS_NO_MEMORY;
*p_data_size = response.length;
+ data_blob_free(&response);
return status;
}
@@ -636,8 +649,11 @@ static NTSTATUS srv_enc_raw_ntlm_auth(connection_struct *conn,
/* Return the raw blob. */
SAFE_FREE(*ppdata);
- *ppdata = response.data;
+ *ppdata = memdup(response.data, response.length);
+ if ((*ppdata) == NULL && response.length > 0)
+ return NT_STATUS_NO_MEMORY;
*p_data_size = response.length;
+ data_blob_free(&response);
return status;
}