| 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 */ |