rusthound_ce/json/checker/
mod.rs1use std::collections::HashMap;
2use std::error::Error;
3
4use log::{info,debug};
5use crate::args::Options;
6use crate::enums::{ldaptype::*, templates_enabled_change_displayname_to_sid};
7use crate::objects::{
8 user::User,
9 computer::Computer,
10 group::Group,
11 ou::Ou,
12 container::Container,
13 gpo::Gpo,
14 domain::Domain,
15 fsp::Fsp,
16 trust::Trust,
17 ntauthstore::NtAuthStore,
18 aiaca::AIACA,
19 rootca::RootCA,
20 enterpriseca::EnterpriseCA,
21 certtemplate::CertTemplate,
22 inssuancepolicie::IssuancePolicie,
23};
24pub mod common;
25
26pub fn check_all_result(
28 common_args: &Options,
29 vec_users: &mut Vec<User>,
30 vec_groups: &mut Vec<Group>,
31 vec_computers: &mut Vec<Computer>,
32 vec_ous: &mut Vec<Ou>,
33 vec_domains: &mut Vec<Domain>,
34 vec_gpos: &mut Vec<Gpo>,
35 _vec_fsps: &mut Vec<Fsp>,
36 vec_containers: &mut Vec<Container>,
37 vec_trusts: &mut Vec<Trust>,
38 vec_ntauthstores: &mut Vec<NtAuthStore>,
39 vec_aiacas: &mut Vec<AIACA>,
40 vec_rootcas: &mut Vec<RootCA>,
41 vec_enterprisecas: &mut Vec<EnterpriseCA>,
42 vec_certtemplates: &mut Vec<CertTemplate>,
43 vec_issuancepolicies: &mut Vec<IssuancePolicie>,
44 dn_sid: &mut HashMap<String, String>,
45 sid_type: &mut HashMap<String, String>,
46 fqdn_sid: &mut HashMap<String, String>,
47 _fqdn_ip: &mut HashMap<String, String>,
48) -> Result<(), Box<dyn Error>> {
49 let domain = &common_args.domain;
50 info!("Starting checker to replace some values...");
51 debug!("Replace SID with checker.rs started");
52 common::replace_fqdn_by_sid(Type::User, vec_users, &fqdn_sid)?;
53 common::replace_fqdn_by_sid(Type::Computer, vec_computers, &fqdn_sid)?;
54 templates_enabled_change_displayname_to_sid(vec_certtemplates, vec_enterprisecas)?;
55 common::replace_sid_members(vec_groups, &dn_sid, &sid_type, &vec_trusts)?;
56 debug!("Replace SID finished!");
57
58 debug!("Adding defaults groups and default users");
59 common::add_default_groups(vec_groups, &vec_computers, domain.to_owned())?;
60 common::add_default_users(vec_users, domain.to_owned())?;
61 debug!("Defaults groups and default users added!");
62
63 debug!("Adding PrincipalType for ACEs started");
64 common::add_type_for_ace(vec_users, &sid_type)?;
65 common::add_type_for_ace(vec_groups, &sid_type)?;
66 common::add_type_for_ace(vec_computers, &sid_type)?;
67 common::add_type_for_ace(vec_gpos, &sid_type)?;
68 common::add_type_for_ace(vec_ous, &sid_type)?;
69 common::add_type_for_ace(vec_domains, &sid_type)?;
70 common::add_type_for_ace(vec_containers, &sid_type)?;
71 common::add_type_for_ace(vec_ntauthstores, &sid_type)?;
72 common::add_type_for_ace(vec_aiacas, &sid_type)?;
73 common::add_type_for_ace(vec_rootcas, &sid_type)?;
74 common::add_type_for_ace(vec_enterprisecas, &sid_type)?;
75 common::add_type_for_ace(vec_certtemplates, &sid_type)?;
76 common::add_type_for_ace(vec_issuancepolicies, &sid_type)?;
77
78 common::add_type_for_allowtedtoact(vec_computers, &sid_type)?;
79 debug!("PrincipalType for ACEs added!");
80
81 debug!("Adding ChildObject members started");
82 common::add_childobjects_members(vec_ous, &dn_sid, &sid_type)?;
83 common::add_childobjects_members(vec_domains, &dn_sid, &sid_type)?;
84 common::add_childobjects_members(vec_containers, &dn_sid, &sid_type)?;
85 debug!("ChildObject members added!");
86
87 debug!("Adding ContainedBy value started");
88 common::add_contained_by_for(vec_users, &dn_sid, &sid_type)?;
89 common::add_contained_by_for(vec_groups, &dn_sid, &sid_type)?;
90 common::add_contained_by_for(vec_computers, &dn_sid, &sid_type)?;
91 common::add_contained_by_for(vec_gpos, &dn_sid, &sid_type)?;
92 common::add_contained_by_for(vec_ous, &dn_sid, &sid_type)?;
93 common::add_contained_by_for(vec_containers, &dn_sid, &sid_type)?;
94 common::add_contained_by_for(vec_ntauthstores, &dn_sid, &sid_type)?;
95 common::add_contained_by_for(vec_aiacas, &dn_sid, &sid_type)?;
96 common::add_contained_by_for(vec_rootcas, &dn_sid, &sid_type)?;
97 common::add_contained_by_for(vec_enterprisecas, &dn_sid, &sid_type)?;
98 common::add_contained_by_for(vec_certtemplates, &dn_sid, &sid_type)?;
99 common::add_contained_by_for(vec_issuancepolicies, &dn_sid, &sid_type)?;
100
101 debug!("ContainedBy value added!");
102
103 debug!("Adding affected computers in GpoChanges");
104 common::add_affected_computers(vec_domains, &sid_type)?;
105 common::add_affected_computers_for_ou(vec_ous, &dn_sid, &sid_type)?;
106 debug!("Affected computers in GpoChanges added!");
107
108 debug!("Replacing guid for gplinks started");
109 common::replace_guid_gplink(vec_ous, &dn_sid)?;
110 common::replace_guid_gplink(vec_domains, &dn_sid)?;
111 debug!("guid for gplinks added!");
112
113 if vec_trusts.len() > 0 {
114 debug!("Adding trust domain relation");
115 common::add_trustdomain(vec_domains, vec_trusts)?;
116 debug!("Trust domain relation added!");
117 }
118 info!("Checking and replacing some values finished!");
119 Ok(())
120}