Skip to content

Commit dc11c3b

Browse files
committed
make aces value macro
1 parent 264df36 commit dc11c3b

File tree

1 file changed

+27
-41
lines changed
  • smb/src/packets/smb2/security

1 file changed

+27
-41
lines changed

smb/src/packets/smb2/security/ace.rs

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -68,68 +68,54 @@ pub struct ACE {
6868
pub value: AceValue,
6969
}
7070

71+
macro_rules! make_ace_value {
72+
(
73+
$($type:ident($val:ident),)+
74+
) => {
75+
paste::paste! {
76+
7177
#[binrw::binrw]
7278
#[derive(Debug, PartialEq, Eq)]
7379
#[br(import(ace_type: AceType))]
7480
pub enum AceValue {
75-
#[br(pre_assert(matches!(ace_type, AceType::AccessAllowed)))]
81+
$(
82+
#[br(pre_assert(matches!(ace_type, AceType::$type)))]
83+
$type($val),
84+
)+
85+
}
86+
87+
impl AceValue {
88+
pub fn get_type(&self) -> AceType {
89+
match self {
90+
$(
91+
AceValue::$type(_) => AceType::$type,
92+
)+
93+
}
94+
}
95+
}
96+
97+
}
98+
};
99+
}
100+
101+
make_ace_value! {
76102
AccessAllowed(AccessAce),
77-
#[br(pre_assert(matches!(ace_type, AceType::AccessDenied)))]
78103
AccessDenied(AccessAce),
79-
#[br(pre_assert(matches!(ace_type, AceType::SystemAudit)))]
80104
SystemAudit(AccessAce),
81-
82-
#[br(pre_assert(matches!(ace_type, AceType::AccessAllowedObject)))]
83105
AccessAllowedObject(AccessObjectAce),
84-
#[br(pre_assert(matches!(ace_type, AceType::AccessDeniedObject)))]
85106
AccessDeniedObject(AccessObjectAce),
86-
#[br(pre_assert(matches!(ace_type, AceType::SystemAuditObject)))]
87107
SystemAuditObject(AccessObjectAce),
88-
89-
#[br(pre_assert(matches!(ace_type, AceType::AccessAllowedCallback)))]
90108
AccessAllowedCallback(AccessCallbackAce),
91-
#[br(pre_assert(matches!(ace_type, AceType::AccessDeniedCallback)))]
92109
AccessDeniedCallback(AccessCallbackAce),
93-
94-
#[br(pre_assert(matches!(ace_type, AceType::AccessAllowedCallbackObject)))]
95110
AccessAllowedCallbackObject(AccessObjectCallbackAce),
96-
#[br(pre_assert(matches!(ace_type, AceType::AccessDeniedCallbackObject)))]
97111
AccessDeniedCallbackObject(AccessObjectCallbackAce),
98-
#[br(pre_assert(matches!(ace_type, AceType::SystemAuditCallback)))]
99112
SystemAuditCallback(AccessCallbackAce),
100-
#[br(pre_assert(matches!(ace_type, AceType::SystemAuditCallbackObject)))]
101113
SystemAuditCallbackObject(AccessObjectCallbackAce),
102-
103-
#[br(pre_assert(matches!(ace_type, AceType::SystemMandatoryLabel)))]
104114
SystemMandatoryLabel(SystemMandatoryLabelAce),
105-
#[br(pre_assert(matches!(ace_type, AceType::SystemResourceAttribute)))]
106115
SystemResourceAttribute(SystemResourceAttributeAce),
107-
#[br(pre_assert(matches!(ace_type, AceType::SystemScopedPolicyId)))]
108116
SystemScopedPolicyId(AccessAce),
109117
}
110118

111-
impl AceValue {
112-
pub fn get_type(&self) -> AceType {
113-
match self {
114-
AceValue::AccessAllowed(_) => AceType::AccessAllowed,
115-
AceValue::AccessDenied(_) => AceType::AccessDenied,
116-
AceValue::SystemAudit(_) => AceType::SystemAudit,
117-
AceValue::AccessAllowedObject(_) => AceType::AccessAllowedObject,
118-
AceValue::AccessDeniedObject(_) => AceType::AccessDeniedObject,
119-
AceValue::SystemAuditObject(_) => AceType::SystemAuditObject,
120-
AceValue::AccessAllowedCallback(_) => AceType::AccessAllowedCallback,
121-
AceValue::AccessDeniedCallback(_) => AceType::AccessDeniedCallback,
122-
AceValue::AccessAllowedCallbackObject(_) => AceType::AccessAllowedCallbackObject,
123-
AceValue::AccessDeniedCallbackObject(_) => AceType::AccessDeniedCallbackObject,
124-
AceValue::SystemAuditCallback(_) => AceType::SystemAuditCallback,
125-
AceValue::SystemAuditCallbackObject(_) => AceType::SystemAuditCallbackObject,
126-
AceValue::SystemMandatoryLabel(_) => AceType::SystemMandatoryLabel,
127-
AceValue::SystemResourceAttribute(_) => AceType::SystemResourceAttribute,
128-
AceValue::SystemScopedPolicyId(_) => AceType::SystemScopedPolicyId,
129-
}
130-
}
131-
}
132-
133119
#[binrw::binrw]
134120
#[derive(Debug, PartialEq, Eq)]
135121
pub struct AccessAce {

0 commit comments

Comments
 (0)