diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/rpc_lsa.h | 109 | ||||
-rw-r--r-- | source3/rpc_client/cli_lsarpc.c | 87 | ||||
-rw-r--r-- | source3/rpc_parse/parse_lsa.c | 351 |
3 files changed, 0 insertions, 547 deletions
diff --git a/source3/include/rpc_lsa.h b/source3/include/rpc_lsa.h index b86324d5e1..45470e77ef 100644 --- a/source3/include/rpc_lsa.h +++ b/source3/include/rpc_lsa.h @@ -89,81 +89,6 @@ #define LSA_AUDIT_NUM_CATEGORIES_WIN2K 9 #define LSA_AUDIT_NUM_CATEGORIES LSA_AUDIT_NUM_CATEGORIES_NT4 -/* level 1 is auditing settings */ -typedef struct dom_query_1 -{ - uint32 percent_full; - uint32 log_size; - NTTIME retention_time; - uint8 shutdown_in_progress; - NTTIME time_to_shutdown; - uint32 next_audit_record; - uint32 unknown; -} DOM_QUERY_1; - - -/* level 2 is auditing settings */ -typedef struct dom_query_2 -{ - uint32 auditing_enabled; - uint32 count1; /* usualy 7, at least on nt4sp4 */ - uint32 count2; /* the same */ - uint32 ptr; - uint32 *auditsettings; -} DOM_QUERY_2; - -/* DOM_QUERY - info class 3 and 5 LSA Query response */ -typedef struct dom_query_info_3 -{ - uint16 uni_dom_max_len; /* domain name string length * 2 */ - uint16 uni_dom_str_len; /* domain name string length * 2 */ - uint32 buffer_dom_name; /* undocumented domain name string buffer pointer */ - uint32 buffer_dom_sid; /* undocumented domain SID string buffer pointer */ - UNISTR2 uni_domain_name; /* domain name (unicode string) */ - DOM_SID2 dom_sid; /* domain SID */ - -} DOM_QUERY_3; - -/* level 5 is same as level 3. */ -typedef DOM_QUERY_3 DOM_QUERY_5; - -/* level 6 is server role information */ -typedef struct dom_query_6 -{ - uint16 server_role; /* 2=backup, 3=primary */ -} DOM_QUERY_6; - -/* level 10 is audit full set info */ -typedef struct dom_query_10 -{ - uint8 shutdown_on_full; -} DOM_QUERY_10; - -/* level 11 is audit full query info */ -typedef struct dom_query_11 -{ - uint16 unknown; - uint8 shutdown_on_full; - uint8 log_is_full; -} DOM_QUERY_11; - -/* level 12 is DNS domain info */ -typedef struct lsa_dns_dom_info -{ - UNIHDR hdr_nb_dom_name; /* netbios domain name */ - UNIHDR hdr_dns_dom_name; - UNIHDR hdr_forest_name; - - struct GUID dom_guid; /* domain GUID */ - - UNISTR2 uni_nb_dom_name; - UNISTR2 uni_dns_dom_name; - UNISTR2 uni_forest_name; - - uint32 ptr_dom_sid; - DOM_SID2 dom_sid; /* domain SID */ -} DOM_QUERY_12; - typedef struct seq_qos_info { uint32 len; /* 12 */ @@ -270,40 +195,6 @@ typedef struct lsa_r_open_pol2_info POLICY_VIEW_LOCAL_INFORMATION |\ POLICY_LOOKUP_NAMES ) -/* LSA_Q_QUERY_INFO - LSA query info policy */ -typedef struct lsa_query_info -{ - POLICY_HND pol; /* policy handle */ - uint16 info_class; /* info class */ - -} LSA_Q_QUERY_INFO; - -/* LSA_INFO_CTR */ -typedef struct lsa_info_ctr -{ - uint16 info_class; - union { - DOM_QUERY_1 id1; - DOM_QUERY_2 id2; - DOM_QUERY_3 id3; - DOM_QUERY_5 id5; - DOM_QUERY_6 id6; - DOM_QUERY_10 id10; - DOM_QUERY_11 id11; - DOM_QUERY_12 id12; - } info; - -} LSA_INFO_CTR; - -/* LSA_R_QUERY_INFO - response to LSA query info policy */ -typedef struct lsa_r_query_info -{ - uint32 dom_ptr; /* undocumented buffer pointer */ - LSA_INFO_CTR ctr; - NTSTATUS status; /* return code */ - -} LSA_R_QUERY_INFO; - /*******************************************************/ typedef struct { diff --git a/source3/rpc_client/cli_lsarpc.c b/source3/rpc_client/cli_lsarpc.c index b28a1260a3..250bf3e190 100644 --- a/source3/rpc_client/cli_lsarpc.c +++ b/source3/rpc_client/cli_lsarpc.c @@ -465,93 +465,6 @@ NTSTATUS rpccli_lsa_lookup_names(struct rpc_pipe_client *cli, return result; } -/** Query info policy - * - * @param domain_sid - returned remote server's domain sid */ - -NTSTATUS rpccli_lsa_query_info_policy(struct rpc_pipe_client *cli, - TALLOC_CTX *mem_ctx, - POLICY_HND *pol, uint16 info_class, - const char **domain_name, - DOM_SID **domain_sid) -{ - prs_struct qbuf, rbuf; - LSA_Q_QUERY_INFO q; - LSA_R_QUERY_INFO r; - NTSTATUS result; - - ZERO_STRUCT(q); - ZERO_STRUCT(r); - - init_q_query(&q, pol, info_class); - - CLI_DO_RPC(cli, mem_ctx, PI_LSARPC, LSA_QUERYINFOPOLICY, - q, r, - qbuf, rbuf, - lsa_io_q_query, - lsa_io_r_query, - NT_STATUS_UNSUCCESSFUL); - - result = r.status; - - if (!NT_STATUS_IS_OK(result)) { - goto done; - } - - /* Return output parameters */ - - switch (info_class) { - - case 3: - if (domain_name && (r.ctr.info.id3.buffer_dom_name != 0)) { - *domain_name = unistr2_to_ascii_talloc(mem_ctx, - &r.ctr.info.id3. - uni_domain_name); - if (!*domain_name) { - return NT_STATUS_NO_MEMORY; - } - } - - if (domain_sid && (r.ctr.info.id3.buffer_dom_sid != 0)) { - *domain_sid = TALLOC_P(mem_ctx, DOM_SID); - if (!*domain_sid) { - return NT_STATUS_NO_MEMORY; - } - sid_copy(*domain_sid, &r.ctr.info.id3.dom_sid.sid); - } - - break; - - case 5: - - if (domain_name && (r.ctr.info.id5.buffer_dom_name != 0)) { - *domain_name = unistr2_to_ascii_talloc(mem_ctx, - &r.ctr.info.id5. - uni_domain_name); - if (!*domain_name) { - return NT_STATUS_NO_MEMORY; - } - } - - if (domain_sid && (r.ctr.info.id5.buffer_dom_sid != 0)) { - *domain_sid = TALLOC_P(mem_ctx, DOM_SID); - if (!*domain_sid) { - return NT_STATUS_NO_MEMORY; - } - sid_copy(*domain_sid, &r.ctr.info.id5.dom_sid.sid); - } - break; - - default: - DEBUG(3, ("unknown info class %d\n", info_class)); - break; - } - - done: - - return result; -} - /** * Enumerate list of trusted domains * diff --git a/source3/rpc_parse/parse_lsa.c b/source3/rpc_parse/parse_lsa.c index 3e7905847f..1574df5438 100644 --- a/source3/rpc_parse/parse_lsa.c +++ b/source3/rpc_parse/parse_lsa.c @@ -419,38 +419,6 @@ bool lsa_io_r_open_pol2(const char *desc, LSA_R_OPEN_POL2 *out, prs_struct *ps, } /******************************************************************* - Inits an LSA_Q_QUERY_INFO structure. -********************************************************************/ - -void init_q_query(LSA_Q_QUERY_INFO *in, POLICY_HND *hnd, uint16 info_class) -{ - DEBUG(5, ("init_q_query\n")); - - memcpy(&in->pol, hnd, sizeof(in->pol)); - - in->info_class = info_class; -} - -/******************************************************************* - Reads or writes an LSA_Q_QUERY_INFO structure. -********************************************************************/ - -bool lsa_io_q_query(const char *desc, LSA_Q_QUERY_INFO *in, prs_struct *ps, - int depth) -{ - prs_debug(ps, depth, desc, "lsa_io_q_query"); - depth++; - - if(!smb_io_pol_hnd("", &in->pol, ps, depth)) - return False; - - if(!prs_uint16("info_class", ps, depth, &in->info_class)) - return False; - - return True; -} - -/******************************************************************* makes an LSA_Q_ENUM_TRUST_DOM structure. ********************************************************************/ bool init_q_enum_trust_dom(LSA_Q_ENUM_TRUST_DOM * q_e, POLICY_HND *pol, @@ -616,325 +584,6 @@ bool lsa_io_r_enum_trust_dom(const char *desc, LSA_R_ENUM_TRUST_DOM *out, } /******************************************************************* -reads or writes a structure. -********************************************************************/ - -static bool lsa_io_dom_query_1(const char *desc, DOM_QUERY_1 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_1"); - depth++; - - if (!prs_align(ps)) - return False; - - if (!prs_uint32("percent_full", ps, depth, &d_q->percent_full)) - return False; - if (!prs_uint32("log_size", ps, depth, &d_q->log_size)) - return False; - if (!smb_io_nttime("retention_time", ps, depth, &d_q->retention_time)) - return False; - if (!prs_uint8("shutdown_in_progress", ps, depth, &d_q->shutdown_in_progress)) - return False; - if (!smb_io_nttime("time_to_shutdown", ps, depth, &d_q->time_to_shutdown)) - return False; - if (!prs_uint32("next_audit_record", ps, depth, &d_q->next_audit_record)) - return False; - if (!prs_uint32("unknown", ps, depth, &d_q->unknown)) - return False; - - return True; -} - -/******************************************************************* -reads or writes a structure. -********************************************************************/ - -static bool lsa_io_dom_query_2(const char *desc, DOM_QUERY_2 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_2"); - depth++; - - if (!prs_align(ps)) - return False; - - if (!prs_uint32("auditing_enabled", ps, depth, &d_q->auditing_enabled)) - return False; - if (!prs_uint32("ptr ", ps, depth, &d_q->ptr)) - return False; - if (!prs_uint32("count1", ps, depth, &d_q->count1)) - return False; - - if (d_q->ptr) { - - if (!prs_uint32("count2", ps, depth, &d_q->count2)) - return False; - - if (d_q->count1 != d_q->count2) - return False; - - if (UNMARSHALLING(ps)) { - if (d_q->count2) { - d_q->auditsettings = TALLOC_ZERO_ARRAY(ps->mem_ctx, uint32, d_q->count2); - if (!d_q->auditsettings) { - return False; - } - } else { - d_q->auditsettings = NULL; - } - } - - if (!prs_uint32s(False, "auditsettings", ps, depth, d_q->auditsettings, d_q->count2)) - return False; - } - - return True; -} - -/******************************************************************* -reads or writes a dom query structure. -********************************************************************/ - -static bool lsa_io_dom_query_3(const char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_3"); - depth++; - - if(!prs_align(ps)) - return False; - - if(!prs_uint16("uni_dom_max_len", ps, depth, &d_q->uni_dom_max_len)) /* domain name string length * 2 */ - return False; - if(!prs_uint16("uni_dom_str_len", ps, depth, &d_q->uni_dom_str_len)) /* domain name string length * 2 */ - return False; - - if(!prs_uint32("buffer_dom_name", ps, depth, &d_q->buffer_dom_name)) /* undocumented domain name string buffer pointer */ - return False; - if(!prs_uint32("buffer_dom_sid ", ps, depth, &d_q->buffer_dom_sid)) /* undocumented domain SID string buffer pointer */ - return False; - - if(!smb_io_unistr2("unistr2", &d_q->uni_domain_name, d_q->buffer_dom_name, ps, depth)) /* domain name (unicode string) */ - return False; - - if(!prs_align(ps)) - return False; - - if (d_q->buffer_dom_sid != 0) { - if(!smb_io_dom_sid2("", &d_q->dom_sid, ps, depth)) /* domain SID */ - return False; - } else { - memset((char *)&d_q->dom_sid, '\0', sizeof(d_q->dom_sid)); - } - - return True; -} - -/******************************************************************* - Reads or writes a dom query structure. -********************************************************************/ - -static bool lsa_io_dom_query_5(const char *desc, DOM_QUERY_5 *d_q, prs_struct *ps, int depth) -{ - return lsa_io_dom_query_3("", d_q, ps, depth); -} - -/******************************************************************* - Reads or writes a dom query structure. -********************************************************************/ - -static bool lsa_io_dom_query_6(const char *desc, DOM_QUERY_6 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_6"); - depth++; - - if (!prs_uint16("server_role", ps, depth, &d_q->server_role)) - return False; - - return True; -} - -/******************************************************************* - Reads or writes a dom query structure. -********************************************************************/ - -static bool lsa_io_dom_query_10(const char *desc, DOM_QUERY_10 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_10"); - depth++; - - if (!prs_uint8("shutdown_on_full", ps, depth, &d_q->shutdown_on_full)) - return False; - - return True; -} - -/******************************************************************* - Reads or writes a dom query structure. -********************************************************************/ - -static bool lsa_io_dom_query_11(const char *desc, DOM_QUERY_11 *d_q, prs_struct *ps, int depth) -{ - if (d_q == NULL) - return False; - - prs_debug(ps, depth, desc, "lsa_io_dom_query_11"); - depth++; - - if (!prs_uint16("unknown", ps, depth, &d_q->unknown)) - return False; - if (!prs_uint8("shutdown_on_full", ps, depth, &d_q->shutdown_on_full)) - return False; - if (!prs_uint8("log_is_full", ps, depth, &d_q->log_is_full)) - return False; - - return True; -} - -/******************************************************************* - Reads or writes an LSA_DNS_DOM_INFO structure. -********************************************************************/ - -bool lsa_io_dom_query_12(const char *desc, DOM_QUERY_12 *info, prs_struct *ps, int depth) -{ - prs_debug(ps, depth, desc, "lsa_io_dom_query_12"); - depth++; - - if(!prs_align(ps)) - return False; - if(!smb_io_unihdr("nb_name", &info->hdr_nb_dom_name, ps, depth)) - return False; - if(!smb_io_unihdr("dns_name", &info->hdr_dns_dom_name, ps, depth)) - return False; - if(!smb_io_unihdr("forest", &info->hdr_forest_name, ps, depth)) - return False; - - if(!prs_align(ps)) - return False; - if ( !smb_io_uuid("dom_guid", &info->dom_guid, ps, depth) ) - return False; - - if(!prs_align(ps)) - return False; - if(!prs_uint32("dom_sid", ps, depth, &info->ptr_dom_sid)) - return False; - - if(!smb_io_unistr2("nb_name", &info->uni_nb_dom_name, - info->hdr_nb_dom_name.buffer, ps, depth)) - return False; - if(!smb_io_unistr2("dns_name", &info->uni_dns_dom_name, - info->hdr_dns_dom_name.buffer, ps, depth)) - return False; - if(!smb_io_unistr2("forest", &info->uni_forest_name, - info->hdr_forest_name.buffer, ps, depth)) - return False; - - if(!smb_io_dom_sid2("dom_sid", &info->dom_sid, ps, depth)) - return False; - - return True; - -} - - -/******************************************************************* -reads or writes a structure. -********************************************************************/ - -static bool lsa_io_query_info_ctr(const char *desc, prs_struct *ps, int depth, LSA_INFO_CTR *ctr) -{ - prs_debug(ps, depth, desc, "lsa_io_query_info_ctr"); - depth++; - - if(!prs_uint16("info_class", ps, depth, &ctr->info_class)) - return False; - - if(!prs_align(ps)) - return False; - - switch (ctr->info_class) { - case 1: - if(!lsa_io_dom_query_1("", &ctr->info.id1, ps, depth)) - return False; - break; - case 2: - if(!lsa_io_dom_query_2("", &ctr->info.id2, ps, depth)) - return False; - break; - case 3: - if(!lsa_io_dom_query_3("", &ctr->info.id3, ps, depth)) - return False; - break; - case 5: - if(!lsa_io_dom_query_5("", &ctr->info.id5, ps, depth)) - return False; - break; - case 6: - if(!lsa_io_dom_query_6("", &ctr->info.id6, ps, depth)) - return False; - break; - case 10: - if(!lsa_io_dom_query_10("", &ctr->info.id10, ps, depth)) - return False; - break; - case 11: - if(!lsa_io_dom_query_11("", &ctr->info.id11, ps, depth)) - return False; - break; - default: - DEBUG(0,("invalid info_class: %d\n", ctr->info_class)); - return False; - break; - } - - return True; -} - -/******************************************************************* - Reads or writes an LSA_R_QUERY_INFO structure. -********************************************************************/ - -bool lsa_io_r_query(const char *desc, LSA_R_QUERY_INFO *out, prs_struct *ps, int depth) -{ - - prs_debug(ps, depth, desc, "lsa_io_r_query"); - depth++; - - if(!prs_align(ps)) - return False; - - if(!prs_uint32("dom_ptr", ps, depth, &out->dom_ptr)) - return False; - - if (out->dom_ptr) { - - if(!lsa_io_query_info_ctr("", ps, depth, &out->ctr)) - return False; - } - - if(!prs_align(ps)) - return False; - - if(!prs_ntstatus("status", ps, depth, &out->status)) - return False; - - return True; -} - -/******************************************************************* Inits a LSA_SID_ENUM structure. ********************************************************************/ |