diff options
-rw-r--r-- | source4/include/smb_interfaces.h | 10 | ||||
-rw-r--r-- | source4/librpc/idl/lsa.idl | 61 | ||||
-rw-r--r-- | source4/librpc/ndr/libndr.h | 1 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_basic.c | 57 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_lsa.c | 317 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_lsa.h | 57 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_sec.c | 11 |
7 files changed, 487 insertions, 27 deletions
diff --git a/source4/include/smb_interfaces.h b/source4/include/smb_interfaces.h index fd393c9db3..52df49f01b 100644 --- a/source4/include/smb_interfaces.h +++ b/source4/include/smb_interfaces.h @@ -23,7 +23,7 @@ typedef SMB_BIG_UINT large_t; /* Globally Unique ID */ #define GUID_SIZE 16 -typedef struct guid_info +typedef struct GUID { uint8 info[GUID_SIZE]; } GUID; @@ -35,6 +35,14 @@ typedef struct nttime_info uint32 high; } NTTIME; +/* 8 byte aligned 'hyper' type from MS IDL */ +typedef struct +{ + uint32 low; + uint32 high; +} HYPER_T; + + /* this structure is just a wrapper for a string, the only reason we bother with this is that it allows us to check the length provided diff --git a/source4/librpc/idl/lsa.idl b/source4/librpc/idl/lsa.idl index 7acbe9cb6b..fb572ae522 100644 --- a/source4/librpc/idl/lsa.idl +++ b/source4/librpc/idl/lsa.idl @@ -120,12 +120,65 @@ typedef struct { lsa_Name name; dom_sid2 *sid; - } lsa_PrimaryDomainInfo; + } lsa_DomainInfo; + + typedef struct { + lsa_Name name; + } lsa_PDAccountInfo; + + typedef struct { + uint16 role; + } lsa_ServerRole; + + typedef struct { + lsa_Name source; + lsa_Name account; + } lsa_ReplicaSourceInfo; + + typedef struct { + uint32 paged_pool; + uint32 non_paged_pool; + uint32 min_wss; + uint32 max_wss; + uint32 pagefile; + HYPER_T unknown; + } lsa_DefaultQuotaInfo; + + typedef struct { + HYPER_T modified_id; + NTTIME db_create_time; + } lsa_ModificationInfo; + + typedef struct { + uint32 shutdown_on_full; + } lsa_AuditFullSetInfo; + + typedef struct { + uint32 shutdown_on_full; + uint32 log_is_full; + } lsa_AuditFullQueryInfo; + + typedef struct { + lsa_Name name; + lsa_Name dns_domain; + lsa_Name dns_forest; + GUID domain_guid; + dom_sid2 *sid; + } lsa_DnsDomainInfo; typedef union { - case(1) lsa_AuditLogInfo audit_log; - case(2) lsa_AuditEventsInfo audit_events; - case(3) lsa_PrimaryDomainInfo domain; + case(1) lsa_AuditLogInfo audit_log; + case(2) lsa_AuditEventsInfo audit_events; + case(3) lsa_DomainInfo domain; + case(4) lsa_PDAccountInfo pd; + case(5) lsa_DomainInfo account_domain; + case(6) lsa_ServerRole role; + case(7) lsa_ReplicaSourceInfo replica; + case(8) lsa_DefaultQuotaInfo quota; + case(9) lsa_ModificationInfo db; + case(10) lsa_AuditFullSetInfo auditfullset; + case(11) lsa_AuditFullQueryInfo auditfullquery; + case(12) lsa_DnsDomainInfo dns; } lsa_PolicyInformation; NTSTATUS lsa_QueryInfoPolicy ( diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h index f695dcff59..d6d2655ef8 100644 --- a/source4/librpc/ndr/libndr.h +++ b/source4/librpc/ndr/libndr.h @@ -75,7 +75,6 @@ struct ndr_print { #define NDR_PRINT_UNION_DEBUG(type, level, p) ndr_print_union_debug((ndr_print_union_fn_t)ndr_print_ ##type, #p, level, p) - /* flags passed to control parse flow */ diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index ec065f63cc..a906e0c05b 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -81,6 +81,24 @@ NTSTATUS ndr_pull_uint32(struct ndr_pull *ndr, uint32 *v) } /* + parse a HYPER_T +*/ +NTSTATUS ndr_pull_HYPER_T(struct ndr_pull *ndr, HYPER_T *v) +{ + NDR_PULL_ALIGN(ndr, 8); + NDR_PULL_NEED_BYTES(ndr, 8); + if (ndr->flags & LIBNDR_FLAG_BIGENDIAN) { + v->low = RIVAL(ndr->data, ndr->offset); + v->high = RIVAL(ndr->data, ndr->offset+4); + } else { + v->low = IVAL(ndr->data, ndr->offset); + v->high = IVAL(ndr->data, ndr->offset+4); + } + ndr->offset += 8; + return NT_STATUS_OK; +} + +/* pull a NTSTATUS */ NTSTATUS ndr_pull_NTSTATUS(struct ndr_pull *ndr, NTSTATUS *status) @@ -152,14 +170,11 @@ NTSTATUS ndr_pull_array_uint32(struct ndr_pull *ndr, uint32 *data, uint32 n) /* parse a GUID */ -NTSTATUS ndr_pull_guid(struct ndr_pull *ndr, GUID *guid) +NTSTATUS ndr_pull_GUID(struct ndr_pull *ndr, int ndr_flags, GUID *guid) { - int i; - NDR_PULL_NEED_BYTES(ndr, GUID_SIZE); - for (i=0;i<GUID_SIZE;i++) { - guid->info[i] = CVAL(ndr->data, ndr->offset + i); + if (ndr_flags & NDR_SCALARS) { + return ndr_pull_bytes(ndr, guid->info, GUID_SIZE); } - ndr->offset += i; return NT_STATUS_OK; } @@ -206,6 +221,19 @@ NTSTATUS ndr_push_uint32(struct ndr_push *ndr, uint32 v) return NT_STATUS_OK; } +/* + push a HYPER_T +*/ +NTSTATUS ndr_push_HYPER_T(struct ndr_push *ndr, HYPER_T v) +{ + NDR_PUSH_ALIGN(ndr, 8); + NDR_PUSH_NEED_BYTES(ndr, 8); + SIVAL(ndr->data, ndr->offset, v.low); + SIVAL(ndr->data, ndr->offset+4, v.high); + ndr->offset += 8; + return NT_STATUS_OK; +} + NTSTATUS ndr_push_align(struct ndr_push *ndr, size_t size) { NDR_PUSH_ALIGN(ndr, size); @@ -385,7 +413,7 @@ NTSTATUS ndr_push_offset_ptr(struct ndr_push *ndr, /* push a GUID */ -NTSTATUS ndr_push_guid(struct ndr_push *ndr, GUID *guid) +NTSTATUS ndr_push_GUID(struct ndr_push *ndr, GUID *guid) { return ndr_push_bytes(ndr, guid->info, GUID_SIZE); } @@ -431,6 +459,11 @@ void ndr_print_uint32(struct ndr_print *ndr, const char *name, uint32 v) ndr->print(ndr, "%-25s: 0x%08x (%u)", name, v, v); } +void ndr_print_HYPER_T(struct ndr_print *ndr, const char *name, HYPER_T v) +{ + ndr->print(ndr, "%-25s: 0x%08x%08x", name, v.high, v.low); +} + void ndr_print_ptr(struct ndr_print *ndr, const char *name, const void *p) { if (p) { @@ -482,3 +515,13 @@ void ndr_print_array_uint32(struct ndr_print *ndr, const char *name, } ndr->depth--; } + +void ndr_print_GUID(struct ndr_print *ndr, const char *name, struct GUID *guid) +{ + ndr->print(ndr, "%-25s: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + name, + IVAL(guid->info, 0), SVAL(guid->info, 4), SVAL(guid->info, 6), + guid->info[8], guid->info[9], + guid->info[10], guid->info[11], guid->info[12], guid->info[13], + guid->info[14], guid->info[15]); +} diff --git a/source4/librpc/ndr/ndr_lsa.c b/source4/librpc/ndr/ndr_lsa.c index a1379b6452..4a7ee4e5ca 100644 --- a/source4/librpc/ndr/ndr_lsa.c +++ b/source4/librpc/ndr/ndr_lsa.c @@ -412,7 +412,7 @@ void ndr_print_lsa_AuditEventsInfo(struct ndr_print *ndr, const char *name, stru ndr->depth--; } -static NTSTATUS ndr_pull_lsa_PrimaryDomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrimaryDomainInfo *r) +static NTSTATUS ndr_pull_lsa_DomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainInfo *r) { uint32 _ptr_sid; NDR_CHECK(ndr_pull_align(ndr, 4)); @@ -434,9 +434,9 @@ done: return NT_STATUS_OK; } -void ndr_print_lsa_PrimaryDomainInfo(struct ndr_print *ndr, const char *name, struct lsa_PrimaryDomainInfo *r) +void ndr_print_lsa_DomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DomainInfo *r) { - ndr_print_struct(ndr, name, "lsa_PrimaryDomainInfo"); + ndr_print_struct(ndr, name, "lsa_DomainInfo"); ndr->depth++; ndr_print_lsa_Name(ndr, "name", &r->name); ndr_print_ptr(ndr, "sid", r->sid); @@ -448,6 +448,203 @@ void ndr_print_lsa_PrimaryDomainInfo(struct ndr_print *ndr, const char *name, st ndr->depth--; } +static NTSTATUS ndr_pull_lsa_PDAccountInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_PDAccountInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->name)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->name)); +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_PDAccountInfo(struct ndr_print *ndr, const char *name, struct lsa_PDAccountInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_PDAccountInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_ServerRole(struct ndr_pull *ndr, int ndr_flags, struct lsa_ServerRole *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint16(ndr, &r->role)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_ServerRole(struct ndr_print *ndr, const char *name, struct lsa_ServerRole *r) +{ + ndr_print_struct(ndr, name, "lsa_ServerRole"); + ndr->depth++; + ndr_print_uint16(ndr, "role", r->role); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_ReplicaSourceInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ReplicaSourceInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->source)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->account)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->source)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->account)); +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_ReplicaSourceInfo(struct ndr_print *ndr, const char *name, struct lsa_ReplicaSourceInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_ReplicaSourceInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "source", &r->source); + ndr_print_lsa_Name(ndr, "account", &r->account); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_DefaultQuotaInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DefaultQuotaInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 8)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->paged_pool)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->non_paged_pool)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->min_wss)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->max_wss)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->pagefile)); + NDR_CHECK(ndr_pull_HYPER_T(ndr, &r->unknown)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_DefaultQuotaInfo(struct ndr_print *ndr, const char *name, struct lsa_DefaultQuotaInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_DefaultQuotaInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "paged_pool", r->paged_pool); + ndr_print_uint32(ndr, "non_paged_pool", r->non_paged_pool); + ndr_print_uint32(ndr, "min_wss", r->min_wss); + ndr_print_uint32(ndr, "max_wss", r->max_wss); + ndr_print_uint32(ndr, "pagefile", r->pagefile); + ndr_print_HYPER_T(ndr, "unknown", r->unknown); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_ModificationInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ModificationInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 8)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_HYPER_T(ndr, &r->modified_id)); + NDR_CHECK(ndr_pull_NTTIME(ndr, &r->db_create_time)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_ModificationInfo(struct ndr_print *ndr, const char *name, struct lsa_ModificationInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_ModificationInfo"); + ndr->depth++; + ndr_print_HYPER_T(ndr, "modified_id", r->modified_id); + ndr_print_NTTIME(ndr, "db_create_time", r->db_create_time); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_AuditFullSetInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullSetInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->shutdown_on_full)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_AuditFullSetInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullSetInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditFullSetInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_AuditFullQueryInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullQueryInfo *r) +{ + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_uint32(ndr, &r->shutdown_on_full)); + NDR_CHECK(ndr_pull_uint32(ndr, &r->log_is_full)); +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_AuditFullQueryInfo(struct ndr_print *ndr, const char *name, struct lsa_AuditFullQueryInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_AuditFullQueryInfo"); + ndr->depth++; + ndr_print_uint32(ndr, "shutdown_on_full", r->shutdown_on_full); + ndr_print_uint32(ndr, "log_is_full", r->log_is_full); + ndr->depth--; +} + +static NTSTATUS ndr_pull_lsa_DnsDomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DnsDomainInfo *r) +{ + uint32 _ptr_sid; + NDR_CHECK(ndr_pull_align(ndr, 4)); + if (!(ndr_flags & NDR_SCALARS)) goto buffers; + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->name)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->dns_domain)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, NDR_SCALARS, &r->dns_forest)); + NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid)); + NDR_CHECK(ndr_pull_uint32(ndr, &_ptr_sid)); + if (_ptr_sid) { + NDR_ALLOC(ndr, r->sid); + } else { + r->sid = NULL; + } +buffers: + if (!(ndr_flags & NDR_BUFFERS)) goto done; + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->name)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->dns_domain)); + NDR_CHECK(ndr_pull_lsa_Name(ndr, ndr_flags, &r->dns_forest)); + NDR_CHECK(ndr_pull_GUID(ndr, ndr_flags, &r->domain_guid)); + if (r->sid) { + NDR_CHECK(ndr_pull_dom_sid2(ndr, r->sid)); + } +done: + return NT_STATUS_OK; +} + +void ndr_print_lsa_DnsDomainInfo(struct ndr_print *ndr, const char *name, struct lsa_DnsDomainInfo *r) +{ + ndr_print_struct(ndr, name, "lsa_DnsDomainInfo"); + ndr->depth++; + ndr_print_lsa_Name(ndr, "name", &r->name); + ndr_print_lsa_Name(ndr, "dns_domain", &r->dns_domain); + ndr_print_lsa_Name(ndr, "dns_forest", &r->dns_forest); + ndr_print_GUID(ndr, "domain_guid", &r->domain_guid); + ndr_print_ptr(ndr, "sid", r->sid); + ndr->depth++; + if (r->sid) { + ndr_print_dom_sid2(ndr, "sid", r->sid); + } + ndr->depth--; + ndr->depth--; +} + static NTSTATUS ndr_pull_lsa_PolicyInformation(struct ndr_pull *ndr, int ndr_flags, uint16 *level, union lsa_PolicyInformation *r) { NDR_CHECK(ndr_pull_uint16(ndr, level)); @@ -462,7 +659,43 @@ static NTSTATUS ndr_pull_lsa_PolicyInformation(struct ndr_pull *ndr, int ndr_fla break; case 3: - NDR_CHECK(ndr_pull_lsa_PrimaryDomainInfo(ndr, NDR_SCALARS, &r->domain)); + NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domain)); + break; + + case 4: + NDR_CHECK(ndr_pull_lsa_PDAccountInfo(ndr, NDR_SCALARS, &r->pd)); + break; + + case 5: + NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->account_domain)); + break; + + case 6: + NDR_CHECK(ndr_pull_lsa_ServerRole(ndr, NDR_SCALARS, &r->role)); + break; + + case 7: + NDR_CHECK(ndr_pull_lsa_ReplicaSourceInfo(ndr, NDR_SCALARS, &r->replica)); + break; + + case 8: + NDR_CHECK(ndr_pull_lsa_DefaultQuotaInfo(ndr, NDR_SCALARS, &r->quota)); + break; + + case 9: + NDR_CHECK(ndr_pull_lsa_ModificationInfo(ndr, NDR_SCALARS, &r->db)); + break; + + case 10: + NDR_CHECK(ndr_pull_lsa_AuditFullSetInfo(ndr, NDR_SCALARS, &r->auditfullset)); + break; + + case 11: + NDR_CHECK(ndr_pull_lsa_AuditFullQueryInfo(ndr, NDR_SCALARS, &r->auditfullquery)); + break; + + case 12: + NDR_CHECK(ndr_pull_lsa_DnsDomainInfo(ndr, NDR_SCALARS, &r->dns)); break; default: @@ -480,7 +713,43 @@ buffers: break; case 3: - NDR_CHECK(ndr_pull_lsa_PrimaryDomainInfo(ndr, NDR_BUFFERS, &r->domain)); + NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domain)); + break; + + case 4: + NDR_CHECK(ndr_pull_lsa_PDAccountInfo(ndr, NDR_BUFFERS, &r->pd)); + break; + + case 5: + NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->account_domain)); + break; + + case 6: + NDR_CHECK(ndr_pull_lsa_ServerRole(ndr, NDR_BUFFERS, &r->role)); + break; + + case 7: + NDR_CHECK(ndr_pull_lsa_ReplicaSourceInfo(ndr, NDR_BUFFERS, &r->replica)); + break; + + case 8: + NDR_CHECK(ndr_pull_lsa_DefaultQuotaInfo(ndr, NDR_BUFFERS, &r->quota)); + break; + + case 9: + NDR_CHECK(ndr_pull_lsa_ModificationInfo(ndr, NDR_BUFFERS, &r->db)); + break; + + case 10: + NDR_CHECK(ndr_pull_lsa_AuditFullSetInfo(ndr, NDR_BUFFERS, &r->auditfullset)); + break; + + case 11: + NDR_CHECK(ndr_pull_lsa_AuditFullQueryInfo(ndr, NDR_BUFFERS, &r->auditfullquery)); + break; + + case 12: + NDR_CHECK(ndr_pull_lsa_DnsDomainInfo(ndr, NDR_BUFFERS, &r->dns)); break; default: @@ -503,7 +772,43 @@ void ndr_print_lsa_PolicyInformation(struct ndr_print *ndr, const char *name, ui break; case 3: - ndr_print_lsa_PrimaryDomainInfo(ndr, "domain", &r->domain); + ndr_print_lsa_DomainInfo(ndr, "domain", &r->domain); + break; + + case 4: + ndr_print_lsa_PDAccountInfo(ndr, "pd", &r->pd); + break; + + case 5: + ndr_print_lsa_DomainInfo(ndr, "account_domain", &r->account_domain); + break; + + case 6: + ndr_print_lsa_ServerRole(ndr, "role", &r->role); + break; + + case 7: + ndr_print_lsa_ReplicaSourceInfo(ndr, "replica", &r->replica); + break; + + case 8: + ndr_print_lsa_DefaultQuotaInfo(ndr, "quota", &r->quota); + break; + + case 9: + ndr_print_lsa_ModificationInfo(ndr, "db", &r->db); + break; + + case 10: + ndr_print_lsa_AuditFullSetInfo(ndr, "auditfullset", &r->auditfullset); + break; + + case 11: + ndr_print_lsa_AuditFullQueryInfo(ndr, "auditfullquery", &r->auditfullquery); + break; + + case 12: + ndr_print_lsa_DnsDomainInfo(ndr, "dns", &r->dns); break; default: diff --git a/source4/librpc/ndr/ndr_lsa.h b/source4/librpc/ndr/ndr_lsa.h index 21060b6058..bf642872e2 100644 --- a/source4/librpc/ndr/ndr_lsa.h +++ b/source4/librpc/ndr/ndr_lsa.h @@ -133,15 +133,68 @@ struct lsa_AuditEventsInfo { struct lsa_AuditSettings *settings; }; -struct lsa_PrimaryDomainInfo { +struct lsa_DomainInfo { struct lsa_Name name; struct dom_sid2 *sid; }; +struct lsa_PDAccountInfo { + struct lsa_Name name; +}; + +struct lsa_ServerRole { + uint16 role; +}; + +struct lsa_ReplicaSourceInfo { + struct lsa_Name source; + struct lsa_Name account; +}; + +struct lsa_DefaultQuotaInfo { + uint32 paged_pool; + uint32 non_paged_pool; + uint32 min_wss; + uint32 max_wss; + uint32 pagefile; + HYPER_T unknown; +}; + +struct lsa_ModificationInfo { + HYPER_T modified_id; + NTTIME db_create_time; +}; + +struct lsa_AuditFullSetInfo { + uint32 shutdown_on_full; +}; + +struct lsa_AuditFullQueryInfo { + uint32 shutdown_on_full; + uint32 log_is_full; +}; + +struct lsa_DnsDomainInfo { + struct lsa_Name name; + struct lsa_Name dns_domain; + struct lsa_Name dns_forest; + struct GUID domain_guid; + struct dom_sid2 *sid; +}; + union lsa_PolicyInformation { /* [case(1)] */ struct lsa_AuditLogInfo audit_log; /* [case(2)] */ struct lsa_AuditEventsInfo audit_events; -/* [case(3)] */ struct lsa_PrimaryDomainInfo domain; +/* [case(3)] */ struct lsa_DomainInfo domain; +/* [case(4)] */ struct lsa_PDAccountInfo pd; +/* [case(5)] */ struct lsa_DomainInfo account_domain; +/* [case(6)] */ struct lsa_ServerRole role; +/* [case(7)] */ struct lsa_ReplicaSourceInfo replica; +/* [case(8)] */ struct lsa_DefaultQuotaInfo quota; +/* [case(9)] */ struct lsa_ModificationInfo db; +/* [case(10)] */ struct lsa_AuditFullSetInfo auditfullset; +/* [case(11)] */ struct lsa_AuditFullQueryInfo auditfullquery; +/* [case(12)] */ struct lsa_DnsDomainInfo dns; }; struct lsa_QueryInfoPolicy { diff --git a/source4/librpc/ndr/ndr_sec.c b/source4/librpc/ndr/ndr_sec.c index 98f40e0ea3..989de5b658 100644 --- a/source4/librpc/ndr/ndr_sec.c +++ b/source4/librpc/ndr/ndr_sec.c @@ -45,10 +45,10 @@ NTSTATUS ndr_pull_security_ace(struct ndr_pull *ndr, struct security_ace *ace) NDR_ALLOC(ndr, ace->obj); NDR_CHECK(ndr_pull_uint32(ndr, &ace->obj->flags)); if (ace->obj->flags & SEC_ACE_OBJECT_PRESENT) { - NDR_CHECK(ndr_pull_guid(ndr, &ace->obj->object_guid)); + NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &ace->obj->object_guid)); } if (ace->obj->flags & SEC_ACE_OBJECT_INHERITED_PRESENT) { - NDR_CHECK(ndr_pull_guid(ndr, &ace->obj->inherit_guid)); + NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &ace->obj->inherit_guid)); } } @@ -203,10 +203,10 @@ NTSTATUS ndr_push_security_ace(struct ndr_push *ndr, struct security_ace *ace) if (sec_ace_object(ace->type)) { NDR_CHECK(ndr_push_uint32(ndr, ace->obj->flags)); if (ace->obj->flags & SEC_ACE_OBJECT_PRESENT) { - NDR_CHECK(ndr_push_guid(ndr, &ace->obj->object_guid)); + NDR_CHECK(ndr_push_GUID(ndr, &ace->obj->object_guid)); } if (ace->obj->flags & SEC_ACE_OBJECT_INHERITED_PRESENT) { - NDR_CHECK(ndr_push_guid(ndr, &ace->obj->inherit_guid)); + NDR_CHECK(ndr_push_GUID(ndr, &ace->obj->inherit_guid)); } } @@ -361,9 +361,8 @@ void ndr_print_security_descriptor(struct ndr_print *ndr, const char *name, struct security_descriptor *sd) { - ndr->print(ndr->depth, "%-25s: ndr_print_security_descriptor not implemented", + ndr->print(ndr, "%-25s: ndr_print_security_descriptor not implemented", name); } - |