[SCM] Samba Shared Repository - branch master updated -
release-4-0-0alpha7-1633-g0e9f03c
Günther Deschner
gd at samba.org
Fri May 15 11:56:18 GMT 2009
The branch, master has been updated
via 0e9f03c72715d18c78befea6333666803b240025 (commit)
via 140d4cabca3127bc6045fdeb998ae7c47c391fae (commit)
from 7d653ae277d4c1dd01efa73ee261b76b0d6424f3 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0e9f03c72715d18c78befea6333666803b240025
Author: Günther Deschner <gd at samba.org>
Date: Fri May 15 00:56:54 2009 +0200
s3-samr: Fix samr access checks in _samr_SetDomainInfo().
Guenther
commit 140d4cabca3127bc6045fdeb998ae7c47c391fae
Author: Günther Deschner <gd at samba.org>
Date: Fri May 15 00:40:14 2009 +0200
s3-samr: Fix samr access checks in _samr_QueryDomainInfo().
Guenther
-----------------------------------------------------------------------
Summary of changes:
source3/rpc_server/srv_samr_nt.c | 61 +++++++++++++++++++++++++++++++++-----
1 files changed, 53 insertions(+), 8 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index 464928f..64ea1cd 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -3196,11 +3196,41 @@ NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
time_t seq_num;
uint32 server_role;
+ uint32_t acc_required;
DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__));
+ switch (r->in.level) {
+ case 1: /* DomainPasswordInformation */
+ case 12: /* DomainLockoutInformation */
+ /* DOMAIN_READ_PASSWORD_PARAMETERS */
+ acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1;
+ break;
+ case 11: /* DomainGeneralInformation2 */
+ /* DOMAIN_READ_PASSWORD_PARAMETERS |
+ * DOMAIN_READ_OTHER_PARAMETERS */
+ acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1 |
+ SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2;
+ break;
+ case 2: /* DomainGeneralInformation */
+ case 3: /* DomainLogoffInformation */
+ case 4: /* DomainOemInformation */
+ case 5: /* DomainReplicationInformation */
+ case 6: /* DomainReplicationInformation */
+ case 7: /* DomainServerRoleInformation */
+ case 8: /* DomainModifiedInformation */
+ case 9: /* DomainStateInformation */
+ case 10: /* DomainUasInformation */
+ case 13: /* DomainModifiedInformation2 */
+ /* DOMAIN_READ_OTHER_PARAMETERS */
+ acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2;
+ break;
+ default:
+ return NT_STATUS_INVALID_INFO_CLASS;
+ }
+
dinfo = policy_handle_find(p, r->in.domain_handle,
- SAMR_ACCESS_LOOKUP_DOMAIN, NULL,
+ acc_required, NULL,
struct samr_domain_info, &status);
if (!NT_STATUS_IS_OK(status)) {
return status;
@@ -6052,18 +6082,33 @@ NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
time_t u_logout;
time_t u_lock_duration, u_reset_time;
NTSTATUS result;
+ uint32_t acc_required = 0;
DEBUG(5,("_samr_SetDomainInfo: %d\n", __LINE__));
- /* We do have different access bits for info
- * levels here, but we're really just looking for
- * GENERIC_RIGHTS_DOMAIN_WRITE access. Unfortunately
- * this maps to different specific bits. So
- * assume if we have SAMR_DOMAIN_ACCESS_SET_INFO_1
- * set we are ok. */
+ switch (r->in.level) {
+ case 1: /* DomainPasswordInformation */
+ case 12: /* DomainLockoutInformation */
+ /* DOMAIN_WRITE_PASSWORD_PARAMETERS */
+ acc_required = SAMR_DOMAIN_ACCESS_SET_INFO_1;
+ break;
+ case 3: /* DomainLogoffInformation */
+ case 4: /* DomainOemInformation */
+ /* DOMAIN_WRITE_OTHER_PARAMETERS */
+ acc_required = SAMR_DOMAIN_ACCESS_SET_INFO_2;
+ break;
+ case 6: /* DomainReplicationInformation */
+ case 9: /* DomainStateInformation */
+ case 7: /* DomainServerRoleInformation */
+ /* DOMAIN_ADMINISTER_SERVER */
+ acc_required = SAMR_DOMAIN_ACCESS_SET_INFO_3;
+ break;
+ default:
+ return NT_STATUS_INVALID_INFO_CLASS;
+ }
dinfo = policy_handle_find(p, r->in.domain_handle,
- SAMR_DOMAIN_ACCESS_SET_INFO_1, NULL,
+ acc_required, NULL,
struct samr_domain_info, &result);
if (!NT_STATUS_IS_OK(result)) {
return result;
--
Samba Shared Repository
More information about the samba-cvs
mailing list