lp_ctx,
&static_session);
if (!NT_STATUS_IS_OK(nt_status)) {
- talloc_free(static_session);
- static_session = NULL;
+ TALLOC_FREE(static_session);
return NULL;
}
talloc_set_destructor(static_session, system_session_destructor);
NTSTATUS nt_status;
struct auth_user_info_dc *user_info_dc = NULL;
struct auth_session_info *session_info = NULL;
- TALLOC_CTX *mem_ctx = talloc_new(parent_ctx);
+ TALLOC_CTX *mem_ctx = NULL;
+ bool ok;
+
+ mem_ctx = talloc_new(parent_ctx);
+ if (mem_ctx == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
nt_status = auth_system_user_info_dc(mem_ctx, lpcfg_netbios_name(lp_ctx),
&user_info_dc);
}
/* references the user_info_dc into the session_info */
- nt_status = auth_generate_session_info(parent_ctx, NULL, NULL, user_info_dc, AUTH_SESSION_INFO_SIMPLE_PRIVILEGES, &session_info);
+ nt_status = auth_generate_session_info(parent_ctx,
+ lp_ctx,
+ NULL /* sam_ctx */,
+ user_info_dc,
+ AUTH_SESSION_INFO_SIMPLE_PRIVILEGES,
+ &session_info);
talloc_free(mem_ctx);
NT_STATUS_NOT_OK_RETURN(nt_status);
session_info->credentials = cli_credentials_init(session_info);
if (!session_info->credentials) {
+ talloc_free(session_info);
return NT_STATUS_NO_MEMORY;
}
- cli_credentials_set_conf(session_info->credentials, lp_ctx);
+ ok = cli_credentials_set_conf(session_info->credentials, lp_ctx);
+ if (!ok) {
+ talloc_free(session_info);
+ return NT_STATUS_INTERNAL_ERROR;
+ }
cli_credentials_set_machine_account_pending(session_info->credentials, lp_ctx);
*_session_info = session_info;
struct auth_user_info_dc *user_info_dc;
struct auth_user_info *info;
- user_info_dc = talloc(mem_ctx, struct auth_user_info_dc);
+ user_info_dc = talloc_zero(mem_ctx, struct auth_user_info_dc);
NT_STATUS_HAVE_NO_MEMORY(user_info_dc);
/* This returns a pointer to a struct dom_sid, which is the
* same as a 1 element list of struct dom_sid */
user_info_dc->num_sids = 1;
- user_info_dc->sids = dom_sid_parse_talloc(user_info_dc, SID_NT_SYSTEM);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->sids);
+ user_info_dc->sids = talloc(user_info_dc, struct auth_SidAttr);
+ if (user_info_dc->sids == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ user_info_dc->sids->sid = global_sid_System;
+ user_info_dc->sids->attrs = SE_GROUP_DEFAULT_FLAGS;
/* annoying, but the Anonymous really does have a session key,
and it is all zeros! */
user_info_dc->user_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->user_session_key.data);
+ if (user_info_dc->user_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ }
user_info_dc->lm_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->lm_session_key.data);
+ if (user_info_dc->lm_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ }
data_blob_clear(&user_info_dc->user_session_key);
data_blob_clear(&user_info_dc->lm_session_key);
user_info_dc->info = info = talloc_zero(user_info_dc, struct auth_user_info);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->info);
+ if (user_info_dc->info == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->account_name = talloc_strdup(info, "SYSTEM");
- NT_STATUS_HAVE_NO_MEMORY(info->account_name);
+ if (info->account_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->domain_name = talloc_strdup(info, "NT AUTHORITY");
- NT_STATUS_HAVE_NO_MEMORY(info->domain_name);
+ if (info->domain_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->full_name = talloc_strdup(info, "System");
- NT_STATUS_HAVE_NO_MEMORY(info->full_name);
+ if (info->full_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_script = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->logon_script);
+ if (info->logon_script == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->profile_path = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->profile_path);
+ if (info->profile_path == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_directory = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_directory);
+ if (info->home_directory == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_drive = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_drive);
+ if (info->home_drive == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_server = talloc_strdup(info, netbios_name);
- NT_STATUS_HAVE_NO_MEMORY(info->logon_server);
+ if (info->logon_server == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->last_logon = 0;
info->last_logoff = 0;
info->acct_flags = ACB_NORMAL;
- info->authenticated = true;
+ info->user_flags = 0;
*_user_info_dc = user_info_dc;
struct auth_user_info_dc *user_info_dc;
struct auth_user_info *info;
- user_info_dc = talloc(mem_ctx, struct auth_user_info_dc);
+ user_info_dc = talloc_zero(mem_ctx, struct auth_user_info_dc);
NT_STATUS_HAVE_NO_MEMORY(user_info_dc);
- user_info_dc->num_sids = 7;
- user_info_dc->sids = talloc_array(user_info_dc, struct dom_sid, user_info_dc->num_sids);
+ user_info_dc->num_sids = 8;
+ user_info_dc->sids = talloc_array(user_info_dc, struct auth_SidAttr, user_info_dc->num_sids);
+
+ user_info_dc->sids[PRIMARY_USER_SID_INDEX].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[PRIMARY_USER_SID_INDEX].sid, DOMAIN_RID_ADMINISTRATOR);
+ user_info_dc->sids[PRIMARY_USER_SID_INDEX].attrs = SE_GROUP_DEFAULT_FLAGS;
- user_info_dc->sids[PRIMARY_USER_SID_INDEX] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[PRIMARY_USER_SID_INDEX], DOMAIN_RID_ADMINISTRATOR);
+ user_info_dc->sids[PRIMARY_GROUP_SID_INDEX].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[PRIMARY_GROUP_SID_INDEX].sid, DOMAIN_RID_USERS);
+ user_info_dc->sids[PRIMARY_GROUP_SID_INDEX].attrs = SE_GROUP_DEFAULT_FLAGS;
- user_info_dc->sids[PRIMARY_GROUP_SID_INDEX] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[PRIMARY_GROUP_SID_INDEX], DOMAIN_RID_USERS);
+ /* Add the primary group again. */
+ user_info_dc->sids[2] = user_info_dc->sids[PRIMARY_GROUP_SID_INDEX];
- user_info_dc->sids[2] = global_sid_Builtin_Administrators;
+ user_info_dc->sids[3].sid = global_sid_Builtin_Administrators;
+ user_info_dc->sids[3].attrs = SE_GROUP_DEFAULT_FLAGS;
- user_info_dc->sids[3] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[3], DOMAIN_RID_ADMINS);
- user_info_dc->sids[4] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[4], DOMAIN_RID_ENTERPRISE_ADMINS);
- user_info_dc->sids[5] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[5], DOMAIN_RID_POLICY_ADMINS);
- user_info_dc->sids[6] = *domain_sid;
- sid_append_rid(&user_info_dc->sids[6], DOMAIN_RID_SCHEMA_ADMINS);
+ user_info_dc->sids[4].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[4].sid, DOMAIN_RID_ADMINS);
+ user_info_dc->sids[4].attrs = SE_GROUP_DEFAULT_FLAGS;
+ user_info_dc->sids[5].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[5].sid, DOMAIN_RID_ENTERPRISE_ADMINS);
+ user_info_dc->sids[5].attrs = SE_GROUP_DEFAULT_FLAGS;
+ user_info_dc->sids[6].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[6].sid, DOMAIN_RID_POLICY_ADMINS);
+ user_info_dc->sids[6].attrs = SE_GROUP_DEFAULT_FLAGS;
+ user_info_dc->sids[7].sid = *domain_sid;
+ sid_append_rid(&user_info_dc->sids[7].sid, DOMAIN_RID_SCHEMA_ADMINS);
+ user_info_dc->sids[7].attrs = SE_GROUP_DEFAULT_FLAGS;
/* What should the session key be?*/
user_info_dc->user_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->user_session_key.data);
+ if (user_info_dc->user_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
user_info_dc->lm_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->lm_session_key.data);
+ if (user_info_dc->lm_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
data_blob_clear(&user_info_dc->user_session_key);
data_blob_clear(&user_info_dc->lm_session_key);
user_info_dc->info = info = talloc_zero(user_info_dc, struct auth_user_info);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->info);
+ if (user_info_dc->info == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->account_name = talloc_strdup(info, "Administrator");
- NT_STATUS_HAVE_NO_MEMORY(info->account_name);
+ if (info->account_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->domain_name = talloc_strdup(info, domain_name);
- NT_STATUS_HAVE_NO_MEMORY(info->domain_name);
+ if (info->domain_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->full_name = talloc_strdup(info, "Administrator");
- NT_STATUS_HAVE_NO_MEMORY(info->full_name);
+ if (info->full_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_script = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->logon_script);
+ if (info->logon_script == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->profile_path = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->profile_path);
+ if (info->profile_path == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_directory = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_directory);
+ if (info->home_directory == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_drive = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_drive);
+ if (info->home_drive == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_server = talloc_strdup(info, netbios_name);
- NT_STATUS_HAVE_NO_MEMORY(info->logon_server);
+ if (info->logon_server == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->last_logon = 0;
info->last_logoff = 0;
info->acct_flags = ACB_NORMAL;
- info->authenticated = true;
+ info->user_flags = 0;
*_user_info_dc = user_info_dc;
NT_STATUS_HAVE_NO_MEMORY(mem_ctx);
- nt_status = auth_domain_admin_user_info_dc(mem_ctx, lpcfg_netbios_name(lp_ctx),
- lpcfg_workgroup(lp_ctx), domain_sid,
- &user_info_dc);
+ nt_status = auth_domain_admin_user_info_dc(mem_ctx,
+ lpcfg_netbios_name(lp_ctx),
+ lpcfg_workgroup(lp_ctx),
+ domain_sid,
+ &user_info_dc);
if (!NT_STATUS_IS_OK(nt_status)) {
talloc_free(mem_ctx);
return nt_status;
}
- nt_status = auth_generate_session_info(mem_ctx, NULL, NULL, user_info_dc,
+ nt_status = auth_generate_session_info(mem_ctx,
+ lp_ctx,
+ NULL /* sam_ctx */,
+ user_info_dc,
AUTH_SESSION_INFO_SIMPLE_PRIVILEGES|AUTH_SESSION_INFO_AUTHENTICATED|AUTH_SESSION_INFO_DEFAULT_GROUPS,
session_info);
- /* There is already a reference between the sesion_info and user_info_dc */
+ /* There is already a reference between the session_info and user_info_dc */
if (NT_STATUS_IS_OK(nt_status)) {
talloc_steal(parent_ctx, *session_info);
}
struct auth_user_info_dc *user_info_dc = NULL;
struct auth_session_info *session_info = NULL;
TALLOC_CTX *mem_ctx = talloc_new(parent_ctx);
+ bool ok;
+
+ if (mem_ctx == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
nt_status = auth_anonymous_user_info_dc(mem_ctx,
- lpcfg_netbios_name(lp_ctx),
- &user_info_dc);
+ lpcfg_netbios_name(lp_ctx),
+ &user_info_dc);
if (!NT_STATUS_IS_OK(nt_status)) {
talloc_free(mem_ctx);
return nt_status;
}
/* references the user_info_dc into the session_info */
- nt_status = auth_generate_session_info(parent_ctx, NULL, NULL, user_info_dc, AUTH_SESSION_INFO_SIMPLE_PRIVILEGES, &session_info);
+ nt_status = auth_generate_session_info(parent_ctx,
+ lp_ctx,
+ NULL /* sam_ctx */,
+ user_info_dc,
+ AUTH_SESSION_INFO_SIMPLE_PRIVILEGES,
+ &session_info);
talloc_free(mem_ctx);
NT_STATUS_NOT_OK_RETURN(nt_status);
session_info->credentials = cli_credentials_init(session_info);
if (!session_info->credentials) {
+ talloc_free(session_info);
return NT_STATUS_NO_MEMORY;
}
- cli_credentials_set_conf(session_info->credentials, lp_ctx);
+ ok = cli_credentials_set_conf(session_info->credentials, lp_ctx);
+ if (!ok) {
+ talloc_free(session_info);
+ return NT_STATUS_INTERNAL_ERROR;
+ }
cli_credentials_set_anonymous(session_info->credentials);
*_session_info = session_info;
{
struct auth_user_info_dc *user_info_dc;
struct auth_user_info *info;
- user_info_dc = talloc(mem_ctx, struct auth_user_info_dc);
+ user_info_dc = talloc_zero(mem_ctx, struct auth_user_info_dc);
NT_STATUS_HAVE_NO_MEMORY(user_info_dc);
/* This returns a pointer to a struct dom_sid, which is the
* same as a 1 element list of struct dom_sid */
user_info_dc->num_sids = 1;
- user_info_dc->sids = dom_sid_parse_talloc(user_info_dc, SID_NT_ANONYMOUS);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->sids);
+ user_info_dc->sids = talloc(user_info_dc, struct auth_SidAttr);
+ if (user_info_dc->sids == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
+
+ user_info_dc->sids->sid = global_sid_Anonymous;
+ user_info_dc->sids->attrs = SE_GROUP_DEFAULT_FLAGS;
/* annoying, but the Anonymous really does have a session key... */
user_info_dc->user_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->user_session_key.data);
+ if (user_info_dc->user_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
user_info_dc->lm_session_key = data_blob_talloc(user_info_dc, NULL, 16);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->lm_session_key.data);
+ if (user_info_dc->lm_session_key.data == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
/* and it is all zeros! */
data_blob_clear(&user_info_dc->user_session_key);
data_blob_clear(&user_info_dc->lm_session_key);
user_info_dc->info = info = talloc_zero(user_info_dc, struct auth_user_info);
- NT_STATUS_HAVE_NO_MEMORY(user_info_dc->info);
+ if (user_info_dc->info == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->account_name = talloc_strdup(info, "ANONYMOUS LOGON");
- NT_STATUS_HAVE_NO_MEMORY(info->account_name);
+ if (info->account_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->domain_name = talloc_strdup(info, "NT AUTHORITY");
- NT_STATUS_HAVE_NO_MEMORY(info->domain_name);
+ if (info->domain_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->full_name = talloc_strdup(info, "Anonymous Logon");
- NT_STATUS_HAVE_NO_MEMORY(info->full_name);
+ if (info->full_name == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_script = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->logon_script);
+ if (info->logon_script == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->profile_path = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->profile_path);
+ if (info->profile_path == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_directory = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_directory);
+ if (info->home_directory == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->home_drive = talloc_strdup(info, "");
- NT_STATUS_HAVE_NO_MEMORY(info->home_drive);
+ if (info->home_drive == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->logon_server = talloc_strdup(info, netbios_name);
- NT_STATUS_HAVE_NO_MEMORY(info->logon_server);
+ if (info->logon_server == NULL) {
+ talloc_free(user_info_dc);
+ return NT_STATUS_NO_MEMORY;
+ };
info->last_logon = 0;
info->last_logoff = 0;
info->acct_flags = ACB_NORMAL;
- info->authenticated = false;
+ /* The user is not authenticated. */
+ info->user_flags = NETLOGON_GUEST;
*_user_info_dc = user_info_dc;