MCPcopy Create free account
hub / github.com/USBGuard/usbguard / ldapToRules

Method ldapToRules

src/Daemon/LDAPHandler.cpp:142–212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140 }
141
142 std::vector<std::pair<long, std::string>> LDAPHandler::ldapToRules(std::shared_ptr<LDAPMessage> message)
143 {
144 std::vector<std::pair<long, std::string>> rules;
145 USBGUARD_LOG(Info);
146 USBGUARD_LOG(Info) << "Complete LDAP Data:";
147 USBGUARD_LOG(Info);
148 struct berval** entry = nullptr;
149 char* dn = nullptr;
150
151 for (LDAPMessage* e = ldap_first_entry(_ldap_ptr.get(), message.get() ); e != nullptr;
152 e = ldap_next_entry(_ldap_ptr.get(), e ) ) {
153 std::pair<long, std::string> rule;
154
155 if ((dn = ldap_get_dn( _ldap_ptr.get(), e)) != nullptr ) {
156 USBGUARD_LOG(Info) << "dn: " << dn;
157 ldap_memfree(dn);
158 }
159
160 for (size_t i = 0 ; i < LDAPUtil::_ldap_keys.size() ; i++) {
161 if ((entry = ldap_get_values_len( _ldap_ptr.get(), e, LDAPUtil::_ldap_keys[i].c_str() )) != nullptr ) {
162 if ((*entry)[0].bv_val == nullptr) {
163 continue;
164 }
165
166 std::string value((*entry)[0].bv_val);
167 size_t index = 0;
168
169 switch (static_cast<LDAPUtil::LDAP_KEY_INDEX>(i)) {
170 case LDAPUtil::LDAP_KEY_INDEX::USBGuardRuleTarget:
171 rule.second += value;
172 break;
173
174 case LDAPUtil::LDAP_KEY_INDEX::USBID:
175 case LDAPUtil::LDAP_KEY_INDEX::USBSerial:
176 case LDAPUtil::LDAP_KEY_INDEX::USBWithConnectType:
177 case LDAPUtil::LDAP_KEY_INDEX::USBName:
178 case LDAPUtil::LDAP_KEY_INDEX::USBHash:
179 case LDAPUtil::LDAP_KEY_INDEX::USBParentHash:
180 case LDAPUtil::LDAP_KEY_INDEX::USBViaPort:
181 case LDAPUtil::LDAP_KEY_INDEX::USBWithInterface:
182 case LDAPUtil::LDAP_KEY_INDEX::USBGuardRuleCondition:
183 rule.second += " " + LDAPUtil::_rule_keys[i] + " " + value;
184 break;
185
186 case LDAPUtil::LDAP_KEY_INDEX::USBGuardRuleOrder:
187 rule.first = std::stol(value, &index);
188
189 if (value[index] != 0) {
190 throw Exception("ldapToRules", "stol", "cannot convert USBGuardRuleOrder to number: " + value);
191 }
192
193 break;
194
195 case LDAPUtil::LDAP_KEY_INDEX::USBGuardHost:
196 break;
197
198 default:
199 /* code */

Callers 1

loadMethod · 0.80

Calls 1

ExceptionFunction · 0.85

Tested by

no test coverage detected