1
0
mirror of https://github.com/altlinux/admc.git synced 2025-03-28 06:50:48 +03:00

show invalid gpo's in the group policy tab

and indicate that they are invalid
closes 
This commit is contained in:
Dmitry Degtyarev 2021-08-16 16:51:15 +04:00
parent 3bb775de85
commit 963f742149
3 changed files with 43 additions and 7 deletions

@ -139,6 +139,10 @@ bool Gplink::contains(const QString &gpo_case) const {
return options.contains(gpo);
}
QList<QString> Gplink::get_gpo_list() const {
return gpo_list;
}
void Gplink::add(const QString &gpo_case) {
const QString gpo = gpo_case.toLower();

@ -45,6 +45,7 @@ public:
QString to_string() const;
bool contains(const QString &gpo) const;
QList<QString> get_gpo_list() const;
void add(const QString &gpo);
void remove(const QString &gpo);

@ -251,19 +251,42 @@ void GroupPolicyTab::reload_gplink() {
const SearchScope scope = SearchScope_All;
const QString filter = filter_CONDITION(Condition_Equals, ATTRIBUTE_OBJECT_CLASS, CLASS_GP_CONTAINER);
const QList<QString> attributes = {ATTRIBUTE_DISPLAY_NAME};
const QHash<QString, AdObject> results = ad.search(base, scope, filter, attributes);
const QHash<QString, AdObject> results_case = ad.search(base, scope, filter, attributes);
// NOTE: need to convert all dn keys to lowercase
// because gplink stores them in lower case
const QHash<QString, AdObject> results = [&]() {
QHash<QString, AdObject> out;
for (auto gpo : results.keys()) {
if (!gplink.contains(gpo)) {
continue;
for (const QString &key_case : results_case.keys()) {
const QString key = key_case.toLower();
const AdObject value = results_case[key_case];
out[key] = value;
}
const AdObject object = results[gpo];
return out;
}();
const QString display_name = object.get_string(ATTRIBUTE_DISPLAY_NAME);
const QList<QString> gpo_list = gplink.get_gpo_list();
for (const QString &gpo : gpo_list) {
// NOTE: Gplink may contain deleted gpo's, in which
// case the link is "invalid" and there's no real
// object for the policy
const bool link_is_valid = results.contains(gpo);
const QString name = [&]() {
if (link_is_valid) {
const AdObject object = results[gpo];
const QString display_name = object.get_string(ATTRIBUTE_DISPLAY_NAME);
return display_name;
} else {
return tr("Not found");
}
}();
const QList<QStandardItem *> row = make_item_row(GplinkColumn_COUNT);
row[GplinkColumn_Name]->setText(display_name);
row[GplinkColumn_Name]->setText(name);
set_data_for_row(row, gpo, GplinkRole_DN);
for (const auto column : option_columns) {
@ -282,6 +305,14 @@ void GroupPolicyTab::reload_gplink() {
item->setCheckState(checkstate);
}
if (!link_is_valid) {
row[GplinkColumn_Name]->setIcon(QIcon::fromTheme("dialog-error"));
for (QStandardItem *item : row) {
item->setToolTip(tr("The GPO for this link could not be found. It maybe have been recently created and is being replicated or it could have been deleted."));
}
}
model->appendRow(row);
}