Loading plugin/ad/ad.cpp +11 −7 Changes for plugin/ad/ad.cpp: 11 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -676,7 +676,11 @@ bool ActiveDirectory::dirModify(const std::string &domain, const uuid::uuid &gui auto e = d->dir->byGuid(guid); if (!e) { err = "object not found"; return false; } dsdb::AttrMap merged = attrs; /* attrs is a partial update: merge it onto the stored entry, since * Directory::modify replaces the whole attribute set */ dsdb::AttrMap merged = e->attrs; for (const auto &kv : attrs) merged[kv.first] = kv.second; std::unique_ptr<dsdb::Secrets> sec; if (!pw.empty() && e->isClass("user")) { std::string sam = e->str("sAMAccountName"); Loading Loading @@ -791,13 +795,13 @@ bool ActiveDirectory::dirAddMember(const std::string &domain, const uuid::uuid & std::string gdn = g->dn.str(), mdn = m->dn.str(); /* maintain both forward (group.member) and back link (member.memberOf) */ dsdb::AttrMap ga; dsdb::AttrMap ga = g->attrs; dsdb::Values members = g->get("member") ? *g->get("member") : dsdb::Values{}; if (std::find(members.begin(), members.end(), mdn) == members.end()) members.push_back(mdn); ga["member"] = members; dsdb::AttrMap ma; dsdb::AttrMap ma = m->attrs; dsdb::Values memberOf = m->get("memberOf") ? *m->get("memberOf") : dsdb::Values{}; if (std::find(memberOf.begin(), memberOf.end(), gdn) == memberOf.end()) memberOf.push_back(gdn); Loading Loading @@ -827,12 +831,12 @@ bool ActiveDirectory::dirRemoveMember(const std::string &domain, const uuid::uui if (!g || !m) { err = "group or member not found"; return false; } std::string gdn = g->dn.str(), mdn = m->dn.str(); dsdb::AttrMap ga; dsdb::AttrMap ga = g->attrs; dsdb::Values members = g->get("member") ? *g->get("member") : dsdb::Values{}; members.erase(std::remove(members.begin(), members.end(), mdn), members.end()); ga["member"] = members; dsdb::AttrMap ma; dsdb::AttrMap ma = m->attrs; dsdb::Values memberOf = m->get("memberOf") ? *m->get("memberOf") : dsdb::Values{}; memberOf.erase(std::remove(memberOf.begin(), memberOf.end(), gdn), memberOf.end()); ma["memberOf"] = memberOf; Loading Loading @@ -945,14 +949,14 @@ bool ActiveDirectory::dirImportNative(const std::string &domain, int &migrated, dsdb::Values members = grpEnt->get("member") ? *grpEnt->get("member") : dsdb::Values{}; if (std::find(members.begin(), members.end(), mdn) == members.end()) { members.push_back(mdn); dsdb::AttrMap ga; ga["member"] = members; dsdb::AttrMap ga = grpEnt->attrs; ga["member"] = members; try { d->dir->modify(groupGuid, ga, nullptr); } catch (...) {} } } dsdb::Values mo = me->get("memberOf") ? *me->get("memberOf") : dsdb::Values{}; if (std::find(mo.begin(), mo.end(), groupDn) == mo.end()) { mo.push_back(groupDn); dsdb::AttrMap ua; ua["memberOf"] = mo; dsdb::AttrMap ua = me->attrs; ua["memberOf"] = mo; try { d->dir->modify(me->objectGuid, ua, nullptr); } catch (...) {} } } Loading Loading
plugin/ad/ad.cpp +11 −7 Changes for plugin/ad/ad.cpp: 11 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -676,7 +676,11 @@ bool ActiveDirectory::dirModify(const std::string &domain, const uuid::uuid &gui auto e = d->dir->byGuid(guid); if (!e) { err = "object not found"; return false; } dsdb::AttrMap merged = attrs; /* attrs is a partial update: merge it onto the stored entry, since * Directory::modify replaces the whole attribute set */ dsdb::AttrMap merged = e->attrs; for (const auto &kv : attrs) merged[kv.first] = kv.second; std::unique_ptr<dsdb::Secrets> sec; if (!pw.empty() && e->isClass("user")) { std::string sam = e->str("sAMAccountName"); Loading Loading @@ -791,13 +795,13 @@ bool ActiveDirectory::dirAddMember(const std::string &domain, const uuid::uuid & std::string gdn = g->dn.str(), mdn = m->dn.str(); /* maintain both forward (group.member) and back link (member.memberOf) */ dsdb::AttrMap ga; dsdb::AttrMap ga = g->attrs; dsdb::Values members = g->get("member") ? *g->get("member") : dsdb::Values{}; if (std::find(members.begin(), members.end(), mdn) == members.end()) members.push_back(mdn); ga["member"] = members; dsdb::AttrMap ma; dsdb::AttrMap ma = m->attrs; dsdb::Values memberOf = m->get("memberOf") ? *m->get("memberOf") : dsdb::Values{}; if (std::find(memberOf.begin(), memberOf.end(), gdn) == memberOf.end()) memberOf.push_back(gdn); Loading Loading @@ -827,12 +831,12 @@ bool ActiveDirectory::dirRemoveMember(const std::string &domain, const uuid::uui if (!g || !m) { err = "group or member not found"; return false; } std::string gdn = g->dn.str(), mdn = m->dn.str(); dsdb::AttrMap ga; dsdb::AttrMap ga = g->attrs; dsdb::Values members = g->get("member") ? *g->get("member") : dsdb::Values{}; members.erase(std::remove(members.begin(), members.end(), mdn), members.end()); ga["member"] = members; dsdb::AttrMap ma; dsdb::AttrMap ma = m->attrs; dsdb::Values memberOf = m->get("memberOf") ? *m->get("memberOf") : dsdb::Values{}; memberOf.erase(std::remove(memberOf.begin(), memberOf.end(), gdn), memberOf.end()); ma["memberOf"] = memberOf; Loading Loading @@ -945,14 +949,14 @@ bool ActiveDirectory::dirImportNative(const std::string &domain, int &migrated, dsdb::Values members = grpEnt->get("member") ? *grpEnt->get("member") : dsdb::Values{}; if (std::find(members.begin(), members.end(), mdn) == members.end()) { members.push_back(mdn); dsdb::AttrMap ga; ga["member"] = members; dsdb::AttrMap ga = grpEnt->attrs; ga["member"] = members; try { d->dir->modify(groupGuid, ga, nullptr); } catch (...) {} } } dsdb::Values mo = me->get("memberOf") ? *me->get("memberOf") : dsdb::Values{}; if (std::find(mo.begin(), mo.end(), groupDn) == mo.end()) { mo.push_back(groupDn); dsdb::AttrMap ua; ua["memberOf"] = mo; dsdb::AttrMap ua = me->attrs; ua["memberOf"] = mo; try { d->dir->modify(me->objectGuid, ua, nullptr); } catch (...) {} } } Loading