Commit 2f2434cf authored by Jan Koester's avatar Jan Koester
Browse files

test

parent e8f80a90
Loading
Loading
Loading
Loading
Loading
+11 −7
Changes for plugin/ad/ad.cpp: 11 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -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");
@@ -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);
@@ -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;
@@ -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 (...) {}
                }
            }