return NT_STATUS_NO_MEMORY;
}
- session_info->unix_token = talloc(session_info, struct security_unix_token);
+ session_info->unix_token = talloc_zero(session_info, struct security_unix_token);
if (!session_info->unix_token) {
TALLOC_FREE(session_info);
return NT_STATUS_NO_MEMORY;
session_info->unix_token->uid = server_info->utok.uid;
session_info->unix_token->gid = server_info->utok.gid;
- session_info->unix_token->ngroups = server_info->utok.ngroups;
- if (server_info->utok.ngroups != 0) {
- session_info->unix_token->groups = (gid_t *)talloc_memdup(
- session_info->unix_token, server_info->utok.groups,
- sizeof(gid_t)*session_info->unix_token->ngroups);
- } else {
- session_info->unix_token->groups = NULL;
- }
-
- if (server_info->security_token) {
- session_info->security_token = dup_nt_token(session_info, server_info->security_token);
- if (!session_info->security_token) {
- TALLOC_FREE(session_info);
- return NT_STATUS_NO_MEMORY;
- }
- }
-
- session_info->session_key = data_blob_talloc( session_info, server_info->session_key.data,
- server_info->session_key.length);
session_info->info3 = copy_netr_SamInfo3(session_info, server_info->info3);
if (!session_info->info3) {
if (!session_info->session_key.data && session_key->length) {
return NT_STATUS_NO_MEMORY;
}
+ } else {
+ session_info->session_key = data_blob_talloc( session_info, server_info->session_key.data,
+ server_info->session_key.length);
}
if (session_info->security_token) {
* (nasty hack to support a cached guest session_info,
* and a possible strategy for auth_samba4 to pass in
* a finalised session) */
+
+ session_info->security_token = dup_nt_token(session_info, server_info->security_token);
+ if (!session_info->security_token) {
+ TALLOC_FREE(session_info);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ session_info->unix_token->ngroups = server_info->utok.ngroups;
+ if (server_info->utok.ngroups != 0) {
+ session_info->unix_token->groups = (gid_t *)talloc_memdup(
+ session_info->unix_token, server_info->utok.groups,
+ sizeof(gid_t)*session_info->unix_token->ngroups);
+ } else {
+ session_info->unix_token->groups = NULL;
+ }
+
*session_info_out = session_info;
return NT_STATUS_OK;
}