summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2009-05-08 09:55:10 +0200
committerGünther Deschner <gd@samba.org>2009-05-08 09:55:10 +0200
commit266b79e004470ae1859085ca018fd6aff6836059 (patch)
tree01c54be80da7efd3033807a11540a8897226be7d /source3/rpc_server
parentd7b32b51f840d34e0ecb62dd8b7df862974d6271 (diff)
downloadsamba-266b79e004470ae1859085ca018fd6aff6836059.tar.gz
samba-266b79e004470ae1859085ca018fd6aff6836059.tar.bz2
samba-266b79e004470ae1859085ca018fd6aff6836059.zip
s3-samr: implement more info levels in _samr_QueryDomainInfo().
Gets us closer to pass RPC-SAMR. Guenther
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/srv_samr_nt.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index 389a6d532f..33048fb320 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -1671,6 +1671,9 @@ NTSTATUS _samr_QueryAliasInfo(pipes_struct *p,
alias_info->all.num_members = 1; /* ??? */
alias_info->all.description.string = alias_description;
break;
+ case ALIASINFONAME:
+ alias_info->name.string = alias_name;
+ break;
case ALIASINFODESCRIPTION:
alias_info->description.string = alias_description;
break;
@@ -3271,6 +3274,66 @@ NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
dom_info->info8.domain_create_time = 0;
break;
+ case 0x09:
+
+ dom_info->info9.domain_server_state = DOMAIN_SERVER_ENABLED;
+
+ break;
+ case 0x0b:
+
+ /* AS ROOT !!! */
+
+ become_root();
+
+ dom_info->general2.general.num_users = count_sam_users(
+ dinfo->disp_info, ACB_NORMAL);
+ dom_info->general2.general.num_groups = count_sam_groups(
+ dinfo->disp_info);
+ dom_info->general2.general.num_aliases = count_sam_aliases(
+ dinfo->disp_info);
+
+ pdb_get_account_policy(AP_TIME_TO_LOGOUT, &u_logout);
+
+ unix_to_nt_time_abs(&dom_info->general2.general.force_logoff_time, u_logout);
+
+ if (!pdb_get_seq_num(&seq_num))
+ seq_num = time(NULL);
+
+ pdb_get_account_policy(AP_LOCK_ACCOUNT_DURATION, &account_policy_temp);
+ u_lock_duration = account_policy_temp;
+ if (u_lock_duration != -1) {
+ u_lock_duration *= 60;
+ }
+
+ pdb_get_account_policy(AP_RESET_COUNT_TIME, &account_policy_temp);
+ u_reset_time = account_policy_temp * 60;
+
+ pdb_get_account_policy(AP_BAD_ATTEMPT_LOCKOUT,
+ &account_policy_temp);
+ dom_info->general2.lockout_threshold = account_policy_temp;
+
+ /* !AS ROOT */
+
+ unbecome_root();
+
+ server_role = ROLE_DOMAIN_PDC;
+ if (lp_server_role() == ROLE_DOMAIN_BDC)
+ server_role = ROLE_DOMAIN_BDC;
+
+ dom_info->general2.general.oem_information.string = lp_serverstring();
+ dom_info->general2.general.domain_name.string = lp_workgroup();
+ dom_info->general2.general.primary.string = global_myname();
+ dom_info->general2.general.sequence_num = seq_num;
+ dom_info->general2.general.domain_server_state = DOMAIN_SERVER_ENABLED;
+ dom_info->general2.general.role = server_role;
+ dom_info->general2.general.unknown3 = 1;
+
+ unix_to_nt_time_abs(&dom_info->general2.lockout_duration,
+ u_lock_duration);
+ unix_to_nt_time_abs(&dom_info->general2.lockout_window,
+ u_reset_time);
+
+ break;
case 0x0c:
become_root();
@@ -3300,6 +3363,25 @@ NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
u_reset_time);
break;
+ case 0x0d:
+
+ become_root();
+
+ /* AS ROOT !!! */
+
+ if (!pdb_get_seq_num(&seq_num)) {
+ seq_num = time(NULL);
+ }
+
+ /* !AS ROOT */
+
+ unbecome_root();
+
+ dom_info->info13.sequence_num = seq_num;
+ dom_info->info13.domain_create_time = 0;
+ dom_info->info13.modified_count_at_last_promotion = 0;
+
+ break;
default:
return NT_STATUS_INVALID_INFO_CLASS;
}