1
0
mirror of https://github.com/altlinux/admc.git synced 2025-01-08 01:18:25 +03:00

Merge branch 'release/0-10-0-test' into sisyphus

This commit is contained in:
Dmitry Degtyarev 2022-06-15 11:31:42 +04:00
commit e08f50d8ec
425 changed files with 4548 additions and 2323 deletions

View File

@ -30,6 +30,7 @@ BuildRequires: libkrb5-devel
Requires: libldap
Requires: libsasl2
Requires: libsasl2-plugin-gssapi
Requires: libsmbclient
Requires: libuuid
Requires: qt5-base-common
@ -61,6 +62,7 @@ Tests for ADMC
%files
%doc README.md
%doc CHANGELOG.txt
%doc CHANGELOG_ru.txt
%_bindir/admc
%_libdir/libadldap.so
%_man1dir/admc*
@ -69,19 +71,19 @@ Tests for ADMC
%files test
%_libdir/libadmctest.so
%_bindir/admc_test_ad_interface
%_bindir/admc_test_ad_security
%_bindir/admc_test_unlock_edit
%_bindir/admc_test_upn_edit
%_bindir/admc_test_string_edit
%_bindir/admc_test_string_large_edit
%_bindir/admc_test_country_edit
%_bindir/admc_test_gplink
%_bindir/admc_test_ad_interface
%_bindir/admc_test_ad_security
%_bindir/admc_test_select_base_widget
%_bindir/admc_test_filter_widget
%_bindir/admc_test_attributes_tab
%_bindir/admc_test_member_of_tab
%_bindir/admc_test_members_tab
%_bindir/admc_test_member_of_tab
%_bindir/admc_test_select_object_dialog
%_bindir/admc_test_logon_hours_dialog
%_bindir/admc_test_logon_computers_edit
@ -94,20 +96,23 @@ Tests for ADMC
%_bindir/admc_test_delegation_edit
%_bindir/admc_test_string_other_edit
%_bindir/admc_test_account_option_edit
%_bindir/admc_test_protect_deletion_edit
%_bindir/admc_test_gpoptions_edit
%_bindir/admc_test_protect_deletion_edit
%_bindir/admc_test_octet_attribute_dialog
%_bindir/admc_test_bool_attribute_dialog
%_bindir/admc_test_string_attribute_dialog
%_bindir/admc_test_list_attribute_dialog
%_bindir/admc_test_datetime_attribute_dialog
%_bindir/admc_test_string_attribute_dialog
%_bindir/admc_test_number_attribute_dialog
%_bindir/admc_test_list_attribute_dialog
%_bindir/admc_test_edit_query_item_widget
%_bindir/admc_test_policy_results_widget
%_bindir/admc_test_policy_ou_results_widget
%_bindir/admc_test_find_object_dialog
%_bindir/admc_test_rename_object_dialog
%_bindir/admc_test_create_object_dialog
%_bindir/admc_test_select_classes_widget
%_bindir/admc_test_sam_name_edit
%_bindir/admc_test_dn_edit
%changelog
* Fri Apr 01 2022 Dmitry Degtyarev <kevl@altlinux.org> 0.9.0-alt1

View File

@ -1,13 +0,0 @@
name: ADMC CI
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-latest
name: Build software using docker
steps:
- name: Checkout
uses: actions/checkout@v2
- run: docker build . --file Dockerfile --tag build-environment
- run: docker run -i --log-driver=none -a stdin -a stdout -a stderr -v "$(pwd)":/app build-environment

View File

@ -1,6 +1,29 @@
admc
CHANGELOG
-----------------------------------------------------------------------
VERSION 0.10.0
-----------------------------------------------------------------------
- Properties: Removed "Group tab". Not necessary because
policy tree replaces it.
- Policies: Improved policy tree. Tree now contains OU's in
addition to policies. OU's display their child OU's and
linked policies. Viewing all policies is still possible in
"All policies" folder.
- Misc: Fixed eliding of long items in scope view. Scope
view now correctly displays a scroll bar so that long
items can be viewed fully.
- Misc: Added trimming of spaces from names when creating or
renaming policies, query folders and query items.
- Misc: Fixed a bug where object became unloaded if during
rename character '?' was added to it's name.
- Misc: Increased size of editor for string attributes,
which is available in "Attributes" tab. Long strings are
now easier to view and edit.
- Misc: Removed ability to drag and drop policies onto OU's
in object tree. This action now can be performed inside
policy tree.
-----------------------------------------------------------------------
VERSION 0.9.0
-----------------------------------------------------------------------

8
CHANGELOG_ru.txt Normal file
View File

@ -0,0 +1,8 @@
admc
CHANGELOG
-----------------------------------------------------------------------
VERSION 0.10.0
-----------------------------------------------------------------------
TODO
русский changelog

View File

@ -58,6 +58,8 @@ add_subdirectory(share)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.txt
${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG_ru.txt
${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
if (ADMC_BUILD_DEB)
SET(CPACK_GENERATOR "DEB")

View File

@ -1,15 +0,0 @@
# Container image that runs your code
FROM alt:p9
RUN apt-get update \
&& apt-get install -y qt5-base-devel cmake qt5-tools-devel qt5-tools libuuid-devel libsmbclient-devel libsasl2-devel catch2-devel doxygen glib2-devel libpcre-devel rpm-build gear libldap-devel libcmocka-devel libkrb5-devel samba-devel \
&& useradd -ms /bin/bash builder && mkdir /app && chown root:builder /app
# Copies your code file from your action repository to the filesystem path `/` of the container
COPY script/build.sh /build.sh
USER builder
WORKDIR /home/builder
# Code file to execute when the docker container starts up (`build.sh`)
ENTRYPOINT ["/build.sh"]

View File

@ -1,17 +0,0 @@
# Container image that runs your code
FROM debian:buster-slim
ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8 TZ=UTC TERM=xterm-256color
RUN apt-get update \
&& apt-get -y install dumb-init build-essential devscripts debhelper gcc g++ catch cmake cmake-data cmake-qt-gui \
qttools5-dev qtbase5-dev qtbase5-dev-tools qtbase5-private-dev \
samba-dev libldap-dev libsasl2-dev libsmbclient-dev libcmocka-dev doxygen libg2-dev libpcre3-dev \
libkrb5-dev libcmocka-dev \
&& mkdir /admc
WORKDIR /admc
# Copies the complete project
COPY . .
RUN dpkg-buildpackage -us -uc
ENTRYPOINT ["/usr/bin/dumb-init", "--"]

View File

@ -1,8 +0,0 @@
#!/bin/bash
# Need to add this so that the %packager macro used in .spec
# is defined, actual value doesn't matter since this is just
# for testing
echo "%packager Docker <docker@email.com>" >> ~/.rpmmacros
cd /app/ && gear-rpm -ba

View File

@ -8,4 +8,4 @@ AD editor
.SH OPTIONS
No options.
.SH AUTHOR
Copyright (C) 2021 BaseALT Ltd.
Copyright (C) 2022 BaseALT Ltd.

View File

@ -20,12 +20,6 @@ if(Ndr_VERSION VERSION_GREATER "1.0.1")
endif()
configure_file("adldap_config.h.in" "adldap_config.h")
pkg_check_modules(Ndr REQUIRED IMPORTED_TARGET ndr)
if(Ndr_VERSION VERSION_GREATER "1.0.1")
set(NDR_VERSION_GREATER_THAN_1_0_1 ON)
endif()
configure_file("adldap_config.h.in" "adldap_config.h")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -369,6 +369,10 @@ QString AdConfig::extended_rights_dn() const {
return QString("CN=Extended-Rights,%1").arg(configuration_dn());
}
QString AdConfig::policies_dn() const {
return QString("CN=Policies,CN=System,%1").arg(domain_dn());
}
bool AdConfig::control_is_supported(const QString &control_oid) const {
const bool supported = d->supported_control_list.contains(control_oid);
@ -777,8 +781,13 @@ QList<QString> AdConfig::get_noncontainer_classes() {
bool AdConfig::rights_applies_to_class(const QString &rights_cn, const QList<QString> &class_list) const {
const QByteArray rights_guid = d->rights_name_to_guid_map[rights_cn];
const QSet<QString> applies_to = d->rights_applies_to_map[rights_guid].toSet();
const bool applies = applies_to.intersects(class_list.toSet());
const QList<QString> applies_to_list = d->rights_applies_to_map[rights_guid];
const QSet<QString> applies_to_set = QSet<QString>(applies_to_list.begin(), applies_to_list.end());
const QSet<QString> class_set = QSet<QString>(class_list.begin(), class_list.end());
const bool applies = applies_to_set.intersects(class_set);
return applies;
}

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -58,6 +58,7 @@ public:
QString schema_dn() const;
QString partitions_dn() const;
QString extended_rights_dn() const;
QString policies_dn() const;
bool control_is_supported(const QString &control_oid) const;
QString get_attribute_display_name(const Attribute &attribute, const ObjectClass &objectClass) const;

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -118,3 +118,20 @@ QList<QString> process_subfilters(const QList<QString> &in) {
return out;
}
QString filter_dn_list(const QList<QString> &dn_list) {
const QList<QString> subfilter_list = [&]() {
QList<QString> subfilter_list_out;
for (const QString &dn : dn_list) {
const QString subfilter = filter_CONDITION(Condition_Equals, ATTRIBUTE_DN, dn);
subfilter_list_out.append(subfilter);
}
return subfilter_list_out;
}();
const QString out = filter_OR(subfilter_list);
return out;
}

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -52,4 +52,7 @@ QString add_advanced_view_filter(const QString &filter);
QString condition_to_display_string(const Condition condition);
// Filter that accepts any DN from given list
QString filter_dn_list(const QList<QString> &dn_list);
#endif /* AD_FILTER_H */

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -431,7 +431,7 @@ QList<QByteArray> security_descriptor_get_trustee_list(security_descriptor *sd)
return out;
}();
const QList<QByteArray> trustee_list = trustee_set.toList();
const QList<QByteArray> trustee_list = QList<QByteArray>(trustee_set.begin(), trustee_set.end());
return trustee_list;
}

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -40,6 +40,8 @@
const QDateTime ntfs_epoch = QDateTime(QDate(1601, 1, 1), QTime(), Qt::UTC);
QString escape_name_for_dn(const QString &unescaped);
bool large_integer_datetime_is_never(const QString &value) {
const bool is_never = (value == AD_LARGE_INTEGER_DATETIME_NEVER_1 || value == AD_LARGE_INTEGER_DATETIME_NEVER_2);
@ -240,6 +242,9 @@ QString dn_get_name(const QString &dn) {
QString name = dn.mid(equals_i, segment_length);
// Unescape name
name.replace("\\?", "?");
return name;
}
@ -264,7 +269,9 @@ QString dn_rename(const QString &dn, const QString &new_name) {
const int prefix_index = old_rdn.indexOf('=') + 1;
const QString prefix = old_rdn.left(prefix_index);
return (prefix + new_name);
const QString new_name_escaped = escape_name_for_dn(new_name);
return (prefix + new_name_escaped);
}();
QStringList new_exploded_dn(exploded_dn);
@ -301,7 +308,10 @@ QString dn_from_name_and_parent(const QString &name, const QString &parent, cons
return "CN";
}
}();
const QString dn = QString("%1=%2,%3").arg(suffix, name, parent);
const QString name_escaped = escape_name_for_dn(name);
const QString dn = QString("%1=%2,%3").arg(suffix, name_escaped, parent);
return dn;
}
@ -447,3 +457,11 @@ QString attribute_type_display_string(const AttributeType type) {
QString int_to_hex_string(const int n) {
return QString("0x%1").arg(n, 8, 16, QLatin1Char('0'));
}
QString escape_name_for_dn(const QString &unescaped) {
QString out = unescaped;
out.replace("?", "\\?");
return out;
}

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -140,7 +140,51 @@ bool Gplink::contains(const QString &gpo_case) const {
}
QList<QString> Gplink::get_gpo_list() const {
return gpo_list;
QList<QString> gpo_list_case;
for (auto gpo : gpo_list) {
const QString gpo_case = [&]() {
QList<QString> rdn_list = gpo.split(",");
const bool rdn_list_is_malformed = rdn_list.isEmpty();
if (rdn_list_is_malformed) {
return gpo;
}
const QString guid_rdn = rdn_list[0];
rdn_list[0] = guid_rdn.toUpper();
for (int i = 1; i < rdn_list.size(); i++) {
const QString rdn = rdn_list[i];
QList<QString> rdn_split = rdn.split("=");
const bool rdn_is_malformed = (rdn_split.size() != 2);
if (rdn_is_malformed) {
continue;
}
// Uppercase all rdn left halves
rdn_split[0] = rdn_split[0].toUpper();
// Modify some right halves
if (rdn_split[1] == "system") {
rdn_split[1] = "System";
} else if (rdn_split[1] == "policies") {
rdn_split[1] = "Policies";
}
rdn_list[i] = rdn_split.join("=");
}
const QString out = rdn_list.join(",");
return out;
}();
gpo_list_case.append(gpo_case);
}
return gpo_list_case;
}
void Gplink::add(const QString &gpo_case) {

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -45,6 +45,11 @@ public:
QString to_string() const;
bool contains(const QString &gpo) const;
// NOTE: this returns a list of GPO DN's with correct
// letter case. Gplink string contains DN's in a
// different letter case that is not appropriate for
// LDAP operations.
QList<QString> get_gpo_list() const;
void add(const QString &gpo);

View File

@ -41,6 +41,7 @@ set(ADMC_SOURCES
find_widget.cpp
tab_widget.cpp
policy_results_widget.cpp
policy_ou_results_widget.cpp
edit_query_item_widget.cpp
fsmo_tab.cpp
@ -103,7 +104,6 @@ set(ADMC_SOURCES
tabs/account_tab.cpp
tabs/membership_tab.cpp
tabs/address_tab.cpp
tabs/group_policy_tab.cpp
tabs/organization_tab.cpp
tabs/telephones_tab.cpp
tabs/profile_tab.cpp
@ -152,6 +152,7 @@ set(ADMC_SOURCES
attribute_edits/protect_deletion_edit.cpp
attribute_edits/laps_expiry_edit.cpp
attribute_edits/general_name_edit.cpp
attribute_edits/dn_edit.cpp
attribute_edits/upn_multi_edit.cpp
attribute_edits/account_option_multi_edit.cpp
@ -159,6 +160,7 @@ set(ADMC_SOURCES
attribute_dialogs/attribute_dialog.cpp
attribute_dialogs/list_attribute_dialog.cpp
attribute_dialogs/string_attribute_dialog.cpp
attribute_dialogs/number_attribute_dialog.cpp
attribute_dialogs/octet_attribute_dialog.cpp
attribute_dialogs/bool_attribute_dialog.cpp
attribute_dialogs/datetime_attribute_dialog.cpp
@ -176,6 +178,8 @@ set(ADMC_SOURCES
console_impls/query_folder_impl.cpp
console_impls/policy_root_impl.cpp
console_impls/find_root_impl.cpp
console_impls/all_policies_folder_impl.cpp
console_impls/policy_ou_impl.cpp
admc.qrc
)

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -4,5 +4,6 @@
<file>admc_ru.qm</file>
<file>admc_en.qm</file>
<file alias="admc.svg">data/admc.svg</file>
<file alias="admc.ico">data/admc.ico</file>
</qresource>
</RCC>

View File

@ -211,6 +211,19 @@
<translation></translation>
</message>
</context>
<context>
<name>AllPoliciesFolderImpl</name>
<message>
<location filename="console_impls/all_policies_folder_impl.cpp" line="42"/>
<source>Create policy</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/all_policies_folder_impl.cpp" line="102"/>
<source>Name</source>
<translation></translation>
</message>
</context>
<context>
<name>AttributeDialog</name>
<message>
@ -240,32 +253,32 @@
<context>
<name>AttributesTabEdit</name>
<message>
<location filename="tabs/attributes_tab.cpp" line="66"/>
<location filename="tabs/attributes_tab.cpp" line="67"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="67"/>
<location filename="tabs/attributes_tab.cpp" line="68"/>
<source>Value</source>
<translation></translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="68"/>
<location filename="tabs/attributes_tab.cpp" line="69"/>
<source>Type</source>
<translation></translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="371"/>
<location filename="tabs/attributes_tab.cpp" line="378"/>
<source>Edit</source>
<translation></translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="369"/>
<location filename="tabs/attributes_tab.cpp" line="376"/>
<source>View</source>
<translation></translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="380"/>
<location filename="tabs/attributes_tab.cpp" line="387"/>
<source>%1 Multi-Valued %2</source>
<comment>This is a dialog title for attribute editors. Example: &quot;Edit Multi-Valued String&quot;</comment>
<translation></translation>
@ -455,42 +468,42 @@
<context>
<name>ConsoleWidget</name>
<message>
<location filename="console_widget/console_widget.cpp" line="92"/>
<location filename="console_widget/console_widget.cpp" line="127"/>
<source>Copy</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="93"/>
<location filename="console_widget/console_widget.cpp" line="128"/>
<source>Cut</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="94"/>
<location filename="console_widget/console_widget.cpp" line="129"/>
<source>Rename</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="95"/>
<location filename="console_widget/console_widget.cpp" line="130"/>
<source>Delete</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="96"/>
<location filename="console_widget/console_widget.cpp" line="131"/>
<source>Paste</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="97"/>
<location filename="console_widget/console_widget.cpp" line="132"/>
<source>Print</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="98"/>
<location filename="console_widget/console_widget.cpp" line="133"/>
<source>Refresh</source>
<translation></translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="99"/>
<location filename="console_widget/console_widget.cpp" line="134"/>
<source>Properties</source>
<translation></translation>
</message>
@ -1062,7 +1075,7 @@
<translation></translation>
</message>
<message>
<location filename="find_object_dialog.cpp" line="42"/>
<location filename="find_object_dialog.cpp" line="43"/>
<source>&amp;View</source>
<translation></translation>
</message>
@ -1388,68 +1401,6 @@
<translation></translation>
</message>
</context>
<context>
<name>GroupPolicyTab</name>
<message>
<location filename="tabs/group_policy_tab.ui" line="41"/>
<source>Add...</source>
<oldsource>Add</oldsource>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.ui" line="48"/>
<source>Remove</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.ui" line="70"/>
<source>Block policy inheritance</source>
<translation></translation>
</message>
</context>
<context>
<name>GroupPolicyTabEdit</name>
<message>
<location filename="tabs/group_policy_tab.cpp" line="83"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="84"/>
<source>Disabled</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="85"/>
<source>Enforced</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="151"/>
<source>Remove link</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="155"/>
<source>Move up</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="158"/>
<source>Move down</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="276"/>
<source>Not found</source>
<translation></translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="304"/>
<source>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.</source>
<translation></translation>
</message>
</context>
<context>
<name>LAPSTab</name>
<message>
@ -1486,17 +1437,17 @@
<translation></translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="89"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="90"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="89"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="90"/>
<source>One or more values are empty. Edit or remove them to proceed.</source>
<translation></translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="112"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="116"/>
<source>Add Value</source>
<translation></translation>
</message>
@ -1636,206 +1587,251 @@
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="112"/>
<location filename="main_window.ui" line="116"/>
<source>Message Log</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="125"/>
<location filename="main_window.ui" line="129"/>
<source>&amp;Connection Options</source>
<oldsource>Connection Options</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="130"/>
<location filename="main_window.ui" line="134"/>
<source>&amp;Quit</source>
<oldsource>Quit</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="133"/>
<location filename="main_window.ui" line="137"/>
<source>Ctrl+Q</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="142"/>
<location filename="main_window.ui" line="146"/>
<source>&amp;Manual</source>
<oldsource>Manual</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="145"/>
<location filename="main_window.ui" line="149"/>
<source>Manual (Alt + 8)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="148"/>
<location filename="main_window.ui" line="152"/>
<source>Alt+8</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="153"/>
<location filename="main_window.ui" line="157"/>
<source>&amp;Changelog</source>
<oldsource>Changelog</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="158"/>
<location filename="main_window.ui" line="162"/>
<source>&amp;About ADMC</source>
<oldsource>About ADMC</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="166"/>
<location filename="main_window.ui" line="170"/>
<source>&amp;Icons</source>
<oldsource>Icons</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="174"/>
<location filename="main_window.ui" line="178"/>
<source>&amp;List</source>
<oldsource>List</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="182"/>
<location filename="main_window.ui" line="186"/>
<source>&amp;Detail</source>
<oldsource>Detail</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="206"/>
<location filename="main_window.ui" line="210"/>
<source>&amp;Console Tree</source>
<oldsource>Console Tree</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="214"/>
<location filename="main_window.ui" line="218"/>
<source>Description &amp;Bar</source>
<oldsource>Description Bar</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="219"/>
<location filename="main_window.ui" line="223"/>
<source>C&amp;ustomize Columns...</source>
<oldsource>Customize Columns...</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="224"/>
<location filename="main_window.ui" line="228"/>
<source>&amp;Filter Objects...</source>
<oldsource>Filter Objects...</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="232"/>
<location filename="main_window.ui" line="236"/>
<source>&amp;Advanced Features</source>
<oldsource>Advanced Features</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="240"/>
<location filename="main_window.ui" line="244"/>
<source>&amp;Confirm Actions</source>
<oldsource>Confirm Actions</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="248"/>
<location filename="main_window.ui" line="252"/>
<source>&amp;Put Last Name Before First Name</source>
<oldsource>Put Last Name Before First Name</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="256"/>
<location filename="main_window.ui" line="260"/>
<source>&amp;Log Searches</source>
<oldsource>Log Searches</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="264"/>
<location filename="main_window.ui" line="268"/>
<source>&amp;Timestamps in Message Log</source>
<oldsource>Timestamps in Message Log</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="272"/>
<location filename="main_window.ui" line="276"/>
<source>&amp;Show Non-Container Objects in Console Tree</source>
<oldsource>Show Non-Container Objects in Console Tree</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="296"/>
<location filename="main_window.ui" line="300"/>
<source>Navigate Back (Alt + -)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="311"/>
<location filename="main_window.ui" line="315"/>
<source>Navigate Forward (Alt + =)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="326"/>
<location filename="main_window.ui" line="330"/>
<source>Refresh (Alt + 9)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="329"/>
<location filename="main_window.ui" line="333"/>
<source>Alt+9</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="337"/>
<location filename="main_window.ui" line="341"/>
<source>Show Login</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="342"/>
<location filename="main_window.ui" line="346"/>
<source>&amp;Operations Masters</source>
<oldsource>Operations Masters</oldsource>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="281"/>
<location filename="main_window.ui" line="355"/>
<source>Create user</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="358"/>
<source>Create user (Alt + 7)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="361"/>
<source>Alt+7</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="370"/>
<source>Create group</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="373"/>
<source>Create group (Alt + 6)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="376"/>
<source>Alt+6</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="385"/>
<source>Create organization unit</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="388"/>
<source>Create organization unit (Alt + 5)</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="391"/>
<source>Alt+5</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="285"/>
<source>Navigate Up</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="284"/>
<location filename="main_window.ui" line="288"/>
<source>Alt+0</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="293"/>
<location filename="main_window.ui" line="297"/>
<source>Navigate Back</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="299"/>
<location filename="main_window.ui" line="303"/>
<source>Alt+-</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="308"/>
<location filename="main_window.ui" line="312"/>
<source>Navigate Forward</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="314"/>
<location filename="main_window.ui" line="318"/>
<source>Alt+=</source>
<translation></translation>
</message>
<message>
<location filename="main_window.ui" line="323"/>
<location filename="main_window.ui" line="327"/>
<source>Refresh</source>
<translation></translation>
</message>
<message>
<location filename="main_window.cpp" line="206"/>
<location filename="main_window.cpp" line="215"/>
<source>Info</source>
<translation></translation>
</message>
<message>
<location filename="main_window.cpp" line="206"/>
<location filename="main_window.cpp" line="215"/>
<source>Restart the app to switch to the selected language.</source>
<translation></translation>
</message>
@ -2028,115 +2024,115 @@
<context>
<name>ObjectImpl</name>
<message>
<location filename="console_impls/object_impl.cpp" line="86"/>
<location filename="console_impls/object_impl.cpp" line="91"/>
<source>User</source>
<oldsource>&amp;User</oldsource>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="87"/>
<location filename="console_impls/object_impl.cpp" line="92"/>
<source>Computer</source>
<oldsource>&amp;Computer</oldsource>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="88"/>
<location filename="console_impls/object_impl.cpp" line="93"/>
<source>OU</source>
<oldsource>&amp;OU</oldsource>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="89"/>
<location filename="console_impls/object_impl.cpp" line="94"/>
<source>Group</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="90"/>
<location filename="console_impls/object_impl.cpp" line="95"/>
<source>Shared Folder</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="91"/>
<location filename="console_impls/object_impl.cpp" line="96"/>
<source>inetOrgPerson</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="92"/>
<location filename="console_impls/object_impl.cpp" line="97"/>
<source>Contact</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="93"/>
<location filename="console_impls/object_impl.cpp" line="98"/>
<source>Find...</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="94"/>
<location filename="console_impls/object_impl.cpp" line="99"/>
<source>Move...</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="95"/>
<location filename="console_impls/object_impl.cpp" line="100"/>
<source>Add to group...</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="96"/>
<location filename="console_impls/object_impl.cpp" line="101"/>
<source>Enable</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="97"/>
<location filename="console_impls/object_impl.cpp" line="102"/>
<source>Disable</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="98"/>
<location filename="console_impls/object_impl.cpp" line="103"/>
<source>Reset password</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="99"/>
<location filename="console_impls/object_impl.cpp" line="104"/>
<source>Reset account</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="100"/>
<location filename="console_impls/object_impl.cpp" line="105"/>
<source>Edit UPN suffixes</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="102"/>
<location filename="console_impls/object_impl.cpp" line="107"/>
<source>New</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="266"/>
<location filename="console_impls/object_impl.cpp" line="296"/>
<source> [Filtering enabled]</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="586"/>
<location filename="console_impls/object_impl.cpp" line="654"/>
<source>Are you sure you want to delete this object?</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="778"/>
<location filename="console_impls/object_impl.cpp" line="867"/>
<source>Add to Group</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="846"/>
<location filename="console_impls/object_impl.cpp" line="935"/>
<source>Edit UPN Suffixes</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="876"/>
<location filename="console_impls/object_impl.cpp" line="955"/>
<source>Are you sure you want to reset this account?</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="1219"/>
<location filename="console_impls/object_impl.cpp" line="1266"/>
<source>Query may be out of date</source>
<translation></translation>
</message>
@ -2359,26 +2355,102 @@
<context>
<name>PolicyImpl</name>
<message>
<location filename="console_impls/policy_impl.cpp" line="48"/>
<location filename="console_impls/policy_impl.cpp" line="44"/>
<source>Add link...</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="49"/>
<location filename="console_impls/policy_impl.cpp" line="45"/>
<source>Edit...</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="182"/>
<location filename="console_impls/policy_impl.cpp" line="165"/>
<source>Are you sure you want to unlink this policy from the OU? Note that the actual policy object won&apos;t be deleted.</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="167"/>
<source>Are you sure you want to delete this policy and all of it&apos;s links?</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="285"/>
<location filename="console_impls/policy_impl.cpp" line="310"/>
<source>Add Link</source>
<translation></translation>
</message>
</context>
<context>
<name>PolicyOUImpl</name>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="52"/>
<source>Create OU</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="53"/>
<source>Create a GPO and link to this OU</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="54"/>
<source>Link existing GPO</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="98"/>
<source>All policies</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="216"/>
<source>Name</source>
<translation></translation>
</message>
</context>
<context>
<name>PolicyOUResultsWidget</name>
<message>
<location filename="policy_ou_results_widget.cpp" line="78"/>
<source>Remove link</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="79"/>
<source>Move up</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="80"/>
<source>Move down</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="90"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="91"/>
<source>Enforced</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="92"/>
<source>Disabled</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="337"/>
<source>Not found</source>
<translation></translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="368"/>
<source>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.</source>
<translation></translation>
</message>
</context>
<context>
<name>PolicyResultsWidget</name>
<message>
@ -2420,12 +2492,7 @@
<context>
<name>PolicyRootImpl</name>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="49"/>
<source>Create policy</source>
<translation></translation>
</message>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="113"/>
<location filename="console_impls/policy_root_impl.cpp" line="78"/>
<source>Name</source>
<translation></translation>
</message>
@ -2470,93 +2537,88 @@
<name>PropertiesDialog</name>
<message>
<location filename="properties_dialog.ui" line="14"/>
<location filename="properties_dialog.cpp" line="138"/>
<location filename="properties_dialog.cpp" line="137"/>
<source>Properties</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="136"/>
<location filename="properties_dialog.cpp" line="135"/>
<source>%1 Properties</source>
<oldsource>&quot;%1&quot; Properties</oldsource>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="170"/>
<location filename="properties_dialog.cpp" line="169"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="178"/>
<location filename="properties_dialog.cpp" line="177"/>
<source>Object</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="179"/>
<location filename="properties_dialog.cpp" line="178"/>
<source>Attributes</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="197"/>
<location filename="properties_dialog.cpp" line="196"/>
<source>Account</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="190"/>
<location filename="properties_dialog.cpp" line="189"/>
<source>Organization</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="191"/>
<location filename="properties_dialog.cpp" line="190"/>
<source>Telephones</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="202"/>
<location filename="properties_dialog.cpp" line="201"/>
<source>Profile</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="245"/>
<location filename="properties_dialog.cpp" line="239"/>
<source>LAPS</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="252"/>
<location filename="properties_dialog.cpp" line="246"/>
<source>Security</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="208"/>
<location filename="properties_dialog.cpp" line="207"/>
<source>Members</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="213"/>
<location filename="properties_dialog.cpp" line="212"/>
<source>Member of</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="223"/>
<location filename="properties_dialog.cpp" line="222"/>
<source>Managed by</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="228"/>
<source>Group policy</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="234"/>
<source>Operating System</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="218"/>
<location filename="properties_dialog.cpp" line="217"/>
<source>Delegation</source>
<translation></translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="189"/>
<location filename="properties_dialog.cpp" line="188"/>
<source>Address</source>
<translation></translation>
</message>
@ -2616,7 +2678,7 @@
<context>
<name>QObject</name>
<message>
<location filename="utils.cpp" line="109"/>
<location filename="utils.cpp" line="111"/>
<source>Confirm action</source>
<translation></translation>
</message>
@ -3132,7 +3194,7 @@
<context>
<name>object_impl</name>
<message numerus="yes">
<location filename="console_impls/object_impl.cpp" line="1617"/>
<location filename="console_impls/object_impl.cpp" line="1724"/>
<source>%n object(s)</source>
<translation>
<numerusform>%n object</numerusform>
@ -3156,7 +3218,7 @@
<context>
<name>policy_root_impl</name>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="175"/>
<location filename="console_impls/policy_root_impl.cpp" line="88"/>
<source>Group Policy Objects</source>
<translation></translation>
</message>
@ -3243,12 +3305,12 @@
<context>
<name>utils.cpp</name>
<message>
<location filename="utils.cpp" line="402"/>
<location filename="utils.cpp" line="436"/>
<source>Input field for Name contains one or more of the following illegal characters: # , + &quot; \ &lt; &gt; ; = (leading space) (trailing space) (leading question mark)</source>
<translation></translation>
</message>
<message>
<location filename="utils.cpp" line="403"/>
<location filename="utils.cpp" line="437"/>
<source>Error</source>
<translation></translation>
</message>

View File

@ -142,7 +142,7 @@
<message>
<location filename="tabs/account_tab.ui" line="194"/>
<source>Use Kerberos DES encryption types for this account</source>
<translation>Использовать Керберос DES тип шифрования для этой учетной записи</translation>
<translation>Использовать Kerberos DES тип шифрования для этой учетной записи</translation>
</message>
<message>
<location filename="tabs/account_tab.ui" line="201"/>
@ -211,6 +211,19 @@
<translation>Страна:</translation>
</message>
</context>
<context>
<name>AllPoliciesFolderImpl</name>
<message>
<location filename="console_impls/all_policies_folder_impl.cpp" line="42"/>
<source>Create policy</source>
<translation>Создать политику</translation>
</message>
<message>
<location filename="console_impls/all_policies_folder_impl.cpp" line="102"/>
<source>Name</source>
<translation>Имя</translation>
</message>
</context>
<context>
<name>AttributeDialog</name>
<message>
@ -240,32 +253,32 @@
<context>
<name>AttributesTabEdit</name>
<message>
<location filename="tabs/attributes_tab.cpp" line="66"/>
<location filename="tabs/attributes_tab.cpp" line="67"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="67"/>
<location filename="tabs/attributes_tab.cpp" line="68"/>
<source>Value</source>
<translation>Значение</translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="68"/>
<location filename="tabs/attributes_tab.cpp" line="69"/>
<source>Type</source>
<translation>Тип</translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="371"/>
<location filename="tabs/attributes_tab.cpp" line="378"/>
<source>Edit</source>
<translation>Изменить</translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="369"/>
<location filename="tabs/attributes_tab.cpp" line="376"/>
<source>View</source>
<translation>Просмотреть</translation>
</message>
<message>
<location filename="tabs/attributes_tab.cpp" line="380"/>
<location filename="tabs/attributes_tab.cpp" line="387"/>
<source>%1 Multi-Valued %2</source>
<comment>This is a dialog title for attribute editors. Example: &quot;Edit Multi-Valued String&quot;</comment>
<translation>%1 %2 (Многозначный)</translation>
@ -455,42 +468,42 @@
<context>
<name>ConsoleWidget</name>
<message>
<location filename="console_widget/console_widget.cpp" line="92"/>
<location filename="console_widget/console_widget.cpp" line="127"/>
<source>Copy</source>
<translation>Копировать</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="93"/>
<location filename="console_widget/console_widget.cpp" line="128"/>
<source>Cut</source>
<translation>Вырезать</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="94"/>
<location filename="console_widget/console_widget.cpp" line="129"/>
<source>Rename</source>
<translation>Переименовать</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="95"/>
<location filename="console_widget/console_widget.cpp" line="130"/>
<source>Delete</source>
<translation>Удалить</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="96"/>
<location filename="console_widget/console_widget.cpp" line="131"/>
<source>Paste</source>
<translation>Вставить</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="97"/>
<location filename="console_widget/console_widget.cpp" line="132"/>
<source>Print</source>
<translation>Напечатать</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="98"/>
<location filename="console_widget/console_widget.cpp" line="133"/>
<source>Refresh</source>
<translation>Обновить</translation>
</message>
<message>
<location filename="console_widget/console_widget.cpp" line="99"/>
<location filename="console_widget/console_widget.cpp" line="134"/>
<source>Properties</source>
<translation>Свойства</translation>
</message>
@ -1062,7 +1075,7 @@
<translation>&amp;Действие</translation>
</message>
<message>
<location filename="find_object_dialog.cpp" line="42"/>
<location filename="find_object_dialog.cpp" line="43"/>
<source>&amp;View</source>
<translation>&amp;Вид</translation>
</message>
@ -1388,68 +1401,6 @@
<translation>Другие...</translation>
</message>
</context>
<context>
<name>GroupPolicyTab</name>
<message>
<location filename="tabs/group_policy_tab.ui" line="41"/>
<source>Add...</source>
<oldsource>Add</oldsource>
<translation>Добавить...</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.ui" line="48"/>
<source>Remove</source>
<translation>Удалить</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.ui" line="70"/>
<source>Block policy inheritance</source>
<translation>Заблокировать наследование политик</translation>
</message>
</context>
<context>
<name>GroupPolicyTabEdit</name>
<message>
<location filename="tabs/group_policy_tab.cpp" line="83"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="84"/>
<source>Disabled</source>
<translation>Отключено</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="85"/>
<source>Enforced</source>
<translation>Принудительно</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="151"/>
<source>Remove link</source>
<translation>Удалить связь</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="155"/>
<source>Move up</source>
<translation>Переместить вверх</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="158"/>
<source>Move down</source>
<translation>Переместить вниз</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="276"/>
<source>Not found</source>
<translation>Не найдено</translation>
</message>
<message>
<location filename="tabs/group_policy_tab.cpp" line="304"/>
<source>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.</source>
<translation>Не удалось найти объект групповой политики для этой связи. Возможно, он был недавно создан и реплицируется, а может быть, был удалён.</translation>
</message>
</context>
<context>
<name>LAPSTab</name>
<message>
@ -1486,17 +1437,17 @@
<translation>Удалить</translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="89"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="90"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="89"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="90"/>
<source>One or more values are empty. Edit or remove them to proceed.</source>
<translation>Одна или более значений пуста. Редактируйте или удалите эти значения чтобы продолжить.</translation>
</message>
<message>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="112"/>
<location filename="attribute_dialogs/list_attribute_dialog.cpp" line="116"/>
<source>Add Value</source>
<translation>Добавить значение</translation>
</message>
@ -1636,206 +1587,251 @@
<translation>Панель инструментов</translation>
</message>
<message>
<location filename="main_window.ui" line="112"/>
<location filename="main_window.ui" line="116"/>
<source>Message Log</source>
<translation>Журнал сообщений</translation>
</message>
<message>
<location filename="main_window.ui" line="125"/>
<location filename="main_window.ui" line="129"/>
<source>&amp;Connection Options</source>
<oldsource>Connection Options</oldsource>
<translation>&amp;Параметры подключения</translation>
</message>
<message>
<location filename="main_window.ui" line="130"/>
<location filename="main_window.ui" line="134"/>
<source>&amp;Quit</source>
<oldsource>Quit</oldsource>
<translation>&amp;Выйти</translation>
</message>
<message>
<location filename="main_window.ui" line="133"/>
<location filename="main_window.ui" line="137"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
<location filename="main_window.ui" line="142"/>
<location filename="main_window.ui" line="146"/>
<source>&amp;Manual</source>
<oldsource>Manual</oldsource>
<translation>&amp;Руководство</translation>
</message>
<message>
<location filename="main_window.ui" line="145"/>
<location filename="main_window.ui" line="149"/>
<source>Manual (Alt + 8)</source>
<translation>Помощь (Alt + 8)</translation>
</message>
<message>
<location filename="main_window.ui" line="148"/>
<location filename="main_window.ui" line="152"/>
<source>Alt+8</source>
<translation>Alt+8</translation>
</message>
<message>
<location filename="main_window.ui" line="153"/>
<location filename="main_window.ui" line="157"/>
<source>&amp;Changelog</source>
<oldsource>Changelog</oldsource>
<translation>&amp;Журнал изменений</translation>
</message>
<message>
<location filename="main_window.ui" line="158"/>
<location filename="main_window.ui" line="162"/>
<source>&amp;About ADMC</source>
<oldsource>About ADMC</oldsource>
<translation>&amp;О приложении ADMC</translation>
</message>
<message>
<location filename="main_window.ui" line="166"/>
<location filename="main_window.ui" line="170"/>
<source>&amp;Icons</source>
<oldsource>Icons</oldsource>
<translation>&amp;Значки</translation>
</message>
<message>
<location filename="main_window.ui" line="174"/>
<location filename="main_window.ui" line="178"/>
<source>&amp;List</source>
<oldsource>List</oldsource>
<translation>&amp;Список</translation>
</message>
<message>
<location filename="main_window.ui" line="182"/>
<location filename="main_window.ui" line="186"/>
<source>&amp;Detail</source>
<oldsource>Detail</oldsource>
<translation>&amp;Подробно</translation>
</message>
<message>
<location filename="main_window.ui" line="206"/>
<location filename="main_window.ui" line="210"/>
<source>&amp;Console Tree</source>
<oldsource>Console Tree</oldsource>
<translation>&amp;Дерево консоли</translation>
</message>
<message>
<location filename="main_window.ui" line="214"/>
<location filename="main_window.ui" line="218"/>
<source>Description &amp;Bar</source>
<oldsource>Description Bar</oldsource>
<translation>&amp;Область описания</translation>
</message>
<message>
<location filename="main_window.ui" line="219"/>
<location filename="main_window.ui" line="223"/>
<source>C&amp;ustomize Columns...</source>
<oldsource>Customize Columns...</oldsource>
<translation>&amp;Настроить колонки...</translation>
</message>
<message>
<location filename="main_window.ui" line="224"/>
<location filename="main_window.ui" line="228"/>
<source>&amp;Filter Objects...</source>
<oldsource>Filter Objects...</oldsource>
<translation>&amp;Фильтровать объекты...</translation>
</message>
<message>
<location filename="main_window.ui" line="232"/>
<location filename="main_window.ui" line="236"/>
<source>&amp;Advanced Features</source>
<oldsource>Advanced Features</oldsource>
<translation>&amp;Дополнительные возможности</translation>
</message>
<message>
<location filename="main_window.ui" line="240"/>
<location filename="main_window.ui" line="244"/>
<source>&amp;Confirm Actions</source>
<oldsource>Confirm Actions</oldsource>
<translation>&amp;Подтверждать действия</translation>
</message>
<message>
<location filename="main_window.ui" line="248"/>
<location filename="main_window.ui" line="252"/>
<source>&amp;Put Last Name Before First Name</source>
<oldsource>Put Last Name Before First Name</oldsource>
<translation>&amp;Ставить фамилию перед именем</translation>
</message>
<message>
<location filename="main_window.ui" line="256"/>
<location filename="main_window.ui" line="260"/>
<source>&amp;Log Searches</source>
<oldsource>Log Searches</oldsource>
<translation>&amp;Вносить информацию о поиске в журнал сообщений</translation>
</message>
<message>
<location filename="main_window.ui" line="264"/>
<location filename="main_window.ui" line="268"/>
<source>&amp;Timestamps in Message Log</source>
<oldsource>Timestamps in Message Log</oldsource>
<translation>&amp;Метки времени в журнале сообщений</translation>
</message>
<message>
<location filename="main_window.ui" line="272"/>
<location filename="main_window.ui" line="276"/>
<source>&amp;Show Non-Container Objects in Console Tree</source>
<oldsource>Show Non-Container Objects in Console Tree</oldsource>
<translation>П&amp;оказывать неконтейнерные объекты в дереве консоли</translation>
</message>
<message>
<location filename="main_window.ui" line="296"/>
<location filename="main_window.ui" line="300"/>
<source>Navigate Back (Alt + -)</source>
<translation>Назад (Alt + -)</translation>
</message>
<message>
<location filename="main_window.ui" line="311"/>
<location filename="main_window.ui" line="315"/>
<source>Navigate Forward (Alt + =)</source>
<translation>Вперед (Alt + =)</translation>
</message>
<message>
<location filename="main_window.ui" line="326"/>
<location filename="main_window.ui" line="330"/>
<source>Refresh (Alt + 9)</source>
<translation>Обновить (Alt + 9)</translation>
</message>
<message>
<location filename="main_window.ui" line="329"/>
<location filename="main_window.ui" line="333"/>
<source>Alt+9</source>
<translation>Alt+9</translation>
</message>
<message>
<location filename="main_window.ui" line="337"/>
<location filename="main_window.ui" line="341"/>
<source>Show Login</source>
<translation>Показывать логин</translation>
</message>
<message>
<location filename="main_window.ui" line="342"/>
<location filename="main_window.ui" line="346"/>
<source>&amp;Operations Masters</source>
<oldsource>Operations Masters</oldsource>
<translation>&amp;Мастера Операций</translation>
</message>
<message>
<location filename="main_window.ui" line="281"/>
<location filename="main_window.ui" line="355"/>
<source>Create user</source>
<translation>Создать пользователя</translation>
</message>
<message>
<location filename="main_window.ui" line="358"/>
<source>Create user (Alt + 7)</source>
<translation>Создать пользователя (Alt + 7)</translation>
</message>
<message>
<location filename="main_window.ui" line="361"/>
<source>Alt+7</source>
<translation>Alt+7</translation>
</message>
<message>
<location filename="main_window.ui" line="370"/>
<source>Create group</source>
<translation>Создать группу</translation>
</message>
<message>
<location filename="main_window.ui" line="373"/>
<source>Create group (Alt + 6)</source>
<translation>Создать группу (Alt + 6)</translation>
</message>
<message>
<location filename="main_window.ui" line="376"/>
<source>Alt+6</source>
<translation>Alt+6</translation>
</message>
<message>
<location filename="main_window.ui" line="385"/>
<source>Create organization unit</source>
<translation>Создать подразделение</translation>
</message>
<message>
<location filename="main_window.ui" line="388"/>
<source>Create organization unit (Alt + 5)</source>
<translation>Создать подразделение (Alt + 5)</translation>
</message>
<message>
<location filename="main_window.ui" line="391"/>
<source>Alt+5</source>
<translation>Alt+5</translation>
</message>
<message>
<location filename="main_window.ui" line="285"/>
<source>Navigate Up</source>
<translation>Наверх</translation>
</message>
<message>
<location filename="main_window.ui" line="284"/>
<location filename="main_window.ui" line="288"/>
<source>Alt+0</source>
<translation>Alt+0</translation>
</message>
<message>
<location filename="main_window.ui" line="293"/>
<location filename="main_window.ui" line="297"/>
<source>Navigate Back</source>
<translation>Назад</translation>
</message>
<message>
<location filename="main_window.ui" line="299"/>
<location filename="main_window.ui" line="303"/>
<source>Alt+-</source>
<translation>Alt+-</translation>
</message>
<message>
<location filename="main_window.ui" line="308"/>
<location filename="main_window.ui" line="312"/>
<source>Navigate Forward</source>
<translation>Вперед</translation>
</message>
<message>
<location filename="main_window.ui" line="314"/>
<location filename="main_window.ui" line="318"/>
<source>Alt+=</source>
<translation>Alt+=</translation>
</message>
<message>
<location filename="main_window.ui" line="323"/>
<location filename="main_window.ui" line="327"/>
<source>Refresh</source>
<translation>Обновить</translation>
</message>
<message>
<location filename="main_window.cpp" line="206"/>
<location filename="main_window.cpp" line="215"/>
<source>Info</source>
<translation>Информация</translation>
</message>
<message>
<location filename="main_window.cpp" line="206"/>
<location filename="main_window.cpp" line="215"/>
<source>Restart the app to switch to the selected language.</source>
<translation>Для переключения на выбранный язык необходимо перезапустить приложение.</translation>
</message>
@ -2028,115 +2024,115 @@
<context>
<name>ObjectImpl</name>
<message>
<location filename="console_impls/object_impl.cpp" line="86"/>
<location filename="console_impls/object_impl.cpp" line="91"/>
<source>User</source>
<oldsource>&amp;User</oldsource>
<translation>Пользователь</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="87"/>
<location filename="console_impls/object_impl.cpp" line="92"/>
<source>Computer</source>
<oldsource>&amp;Computer</oldsource>
<translation>Компьютер</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="88"/>
<location filename="console_impls/object_impl.cpp" line="93"/>
<source>OU</source>
<oldsource>&amp;OU</oldsource>
<translation>Подразделение</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="89"/>
<location filename="console_impls/object_impl.cpp" line="94"/>
<source>Group</source>
<translation>Группа</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="90"/>
<location filename="console_impls/object_impl.cpp" line="95"/>
<source>Shared Folder</source>
<translation>Общая папка</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="91"/>
<location filename="console_impls/object_impl.cpp" line="96"/>
<source>inetOrgPerson</source>
<translation>inetOrgPerson</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="92"/>
<location filename="console_impls/object_impl.cpp" line="97"/>
<source>Contact</source>
<translation>Контакт</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="93"/>
<location filename="console_impls/object_impl.cpp" line="98"/>
<source>Find...</source>
<translation>Найти...</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="94"/>
<location filename="console_impls/object_impl.cpp" line="99"/>
<source>Move...</source>
<translation>Переместить...</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="95"/>
<location filename="console_impls/object_impl.cpp" line="100"/>
<source>Add to group...</source>
<translation>Добавить в группу...</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="96"/>
<location filename="console_impls/object_impl.cpp" line="101"/>
<source>Enable</source>
<translation>Включить</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="97"/>
<location filename="console_impls/object_impl.cpp" line="102"/>
<source>Disable</source>
<translation>Отключить</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="98"/>
<location filename="console_impls/object_impl.cpp" line="103"/>
<source>Reset password</source>
<translation>Сбросить пароль</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="99"/>
<location filename="console_impls/object_impl.cpp" line="104"/>
<source>Reset account</source>
<translation>Сбросить учётную запись</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="100"/>
<location filename="console_impls/object_impl.cpp" line="105"/>
<source>Edit UPN suffixes</source>
<translation>Изменить суффиксы UPN</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="102"/>
<location filename="console_impls/object_impl.cpp" line="107"/>
<source>New</source>
<translation>Создать</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="266"/>
<location filename="console_impls/object_impl.cpp" line="296"/>
<source> [Filtering enabled]</source>
<translation> [Фильтр включён]</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="586"/>
<location filename="console_impls/object_impl.cpp" line="654"/>
<source>Are you sure you want to delete this object?</source>
<translation>Удалить этот объект?</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="778"/>
<location filename="console_impls/object_impl.cpp" line="867"/>
<source>Add to Group</source>
<translation>Добавить в группу</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="846"/>
<location filename="console_impls/object_impl.cpp" line="935"/>
<source>Edit UPN Suffixes</source>
<translation>Изменить суффиксы UPN</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="876"/>
<location filename="console_impls/object_impl.cpp" line="955"/>
<source>Are you sure you want to reset this account?</source>
<translation>Вы точно хотиту сбросить эту учетную запись?</translation>
</message>
<message>
<location filename="console_impls/object_impl.cpp" line="1219"/>
<location filename="console_impls/object_impl.cpp" line="1266"/>
<source>Query may be out of date</source>
<translation>Запрос может быть устаревшим</translation>
</message>
@ -2276,7 +2272,7 @@
<message>
<location filename="tabs/organization_tab.ui" line="60"/>
<source>Reports:</source>
<translation>Прямые подчинненые:</translation>
<translation>Прямые подчиненные:</translation>
</message>
</context>
<context>
@ -2359,26 +2355,102 @@
<context>
<name>PolicyImpl</name>
<message>
<location filename="console_impls/policy_impl.cpp" line="48"/>
<location filename="console_impls/policy_impl.cpp" line="44"/>
<source>Add link...</source>
<translation>Добавить связь...</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="49"/>
<location filename="console_impls/policy_impl.cpp" line="45"/>
<source>Edit...</source>
<translation>Изменить...</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="182"/>
<location filename="console_impls/policy_impl.cpp" line="165"/>
<source>Are you sure you want to unlink this policy from the OU? Note that the actual policy object won&apos;t be deleted.</source>
<translation>Удалить связь между политикой и подразделением? Обратите внимание, что сама политика не будет удалена.</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="167"/>
<source>Are you sure you want to delete this policy and all of it&apos;s links?</source>
<translation>Удалить эту политику и все её связи?</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="285"/>
<location filename="console_impls/policy_impl.cpp" line="310"/>
<source>Add Link</source>
<translation>Добавление связи</translation>
</message>
</context>
<context>
<name>PolicyOUImpl</name>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="52"/>
<source>Create OU</source>
<translation>Создать подразделение</translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="53"/>
<source>Create a GPO and link to this OU</source>
<translation>Создать политику и связать с этим подразделением</translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="54"/>
<source>Link existing GPO</source>
<translation>Связать существующую политику</translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="98"/>
<source>All policies</source>
<translation>Все политики</translation>
</message>
<message>
<location filename="console_impls/policy_ou_impl.cpp" line="216"/>
<source>Name</source>
<translation>Имя</translation>
</message>
</context>
<context>
<name>PolicyOUResultsWidget</name>
<message>
<location filename="policy_ou_results_widget.cpp" line="78"/>
<source>Remove link</source>
<translation>Удалить связь</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="79"/>
<source>Move up</source>
<translation>Переместить вверх</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="80"/>
<source>Move down</source>
<translation>Переместить вниз</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="90"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="91"/>
<source>Enforced</source>
<translation>Принудительно</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="92"/>
<source>Disabled</source>
<translation>Отключено</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="337"/>
<source>Not found</source>
<translation>Не найдено</translation>
</message>
<message>
<location filename="policy_ou_results_widget.cpp" line="368"/>
<source>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.</source>
<translation>Не удалось найти объект групповой политики для этой связи. Возможно, он был недавно создан и реплицируется или был удалён.</translation>
</message>
</context>
<context>
<name>PolicyResultsWidget</name>
<message>
@ -2420,12 +2492,7 @@
<context>
<name>PolicyRootImpl</name>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="49"/>
<source>Create policy</source>
<translation>Создать политику</translation>
</message>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="113"/>
<location filename="console_impls/policy_root_impl.cpp" line="78"/>
<source>Name</source>
<translation>Имя</translation>
</message>
@ -2470,93 +2537,88 @@
<name>PropertiesDialog</name>
<message>
<location filename="properties_dialog.ui" line="14"/>
<location filename="properties_dialog.cpp" line="138"/>
<location filename="properties_dialog.cpp" line="137"/>
<source>Properties</source>
<translation>Свойства</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="136"/>
<location filename="properties_dialog.cpp" line="135"/>
<source>%1 Properties</source>
<oldsource>&quot;%1&quot; Properties</oldsource>
<translation>%1 свойства</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="170"/>
<location filename="properties_dialog.cpp" line="169"/>
<source>General</source>
<translation>Общее</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="178"/>
<location filename="properties_dialog.cpp" line="177"/>
<source>Object</source>
<translation>Объект</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="179"/>
<location filename="properties_dialog.cpp" line="178"/>
<source>Attributes</source>
<translation>Атрибуты</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="197"/>
<location filename="properties_dialog.cpp" line="196"/>
<source>Account</source>
<translation>Учётная запись</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="190"/>
<location filename="properties_dialog.cpp" line="189"/>
<source>Organization</source>
<translation>Организация</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="191"/>
<location filename="properties_dialog.cpp" line="190"/>
<source>Telephones</source>
<translation>Телефоны</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="202"/>
<location filename="properties_dialog.cpp" line="201"/>
<source>Profile</source>
<translation>Профиль</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="245"/>
<location filename="properties_dialog.cpp" line="239"/>
<source>LAPS</source>
<translation>LAPS</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="252"/>
<location filename="properties_dialog.cpp" line="246"/>
<source>Security</source>
<translation>Безопасность</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="208"/>
<location filename="properties_dialog.cpp" line="207"/>
<source>Members</source>
<translation>Участники</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="213"/>
<location filename="properties_dialog.cpp" line="212"/>
<source>Member of</source>
<translation>Группы</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="223"/>
<location filename="properties_dialog.cpp" line="222"/>
<source>Managed by</source>
<translation>Руководство</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="228"/>
<source>Group policy</source>
<translation>Групповая политика</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="234"/>
<source>Operating System</source>
<translation>Операционная система</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="218"/>
<location filename="properties_dialog.cpp" line="217"/>
<source>Delegation</source>
<translation>Делегирование</translation>
</message>
<message>
<location filename="properties_dialog.cpp" line="189"/>
<location filename="properties_dialog.cpp" line="188"/>
<source>Address</source>
<translation>Адрес</translation>
</message>
@ -2616,7 +2678,7 @@
<context>
<name>QObject</name>
<message>
<location filename="utils.cpp" line="109"/>
<location filename="utils.cpp" line="111"/>
<source>Confirm action</source>
<translation>Подтверждение действия</translation>
</message>
@ -3132,7 +3194,7 @@
<context>
<name>object_impl</name>
<message numerus="yes">
<location filename="console_impls/object_impl.cpp" line="1617"/>
<location filename="console_impls/object_impl.cpp" line="1724"/>
<source>%n object(s)</source>
<translation>
<numerusform>%n объект</numerusform>
@ -3157,7 +3219,7 @@
<context>
<name>policy_root_impl</name>
<message>
<location filename="console_impls/policy_root_impl.cpp" line="175"/>
<location filename="console_impls/policy_root_impl.cpp" line="88"/>
<source>Group Policy Objects</source>
<translation>Объекты групповой политики</translation>
</message>
@ -3244,12 +3306,12 @@
<context>
<name>utils.cpp</name>
<message>
<location filename="utils.cpp" line="402"/>
<location filename="utils.cpp" line="436"/>
<source>Input field for Name contains one or more of the following illegal characters: # , + &quot; \ &lt; &gt; ; = (leading space) (trailing space) (leading question mark)</source>
<translation>Поле ввода &quot;Имя&quot; содержит один или несколько из следующих недопустимых символов: # , + &quot; \ &lt; &gt; ; = (пробел в начале) (пробел в конце) (? в начале)</translation>
</message>
<message>
<location filename="utils.cpp" line="403"/>
<location filename="utils.cpp" line="437"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -26,6 +26,7 @@
#include "attribute_dialogs/datetime_attribute_dialog.h"
#include "attribute_dialogs/octet_attribute_dialog.h"
#include "attribute_dialogs/string_attribute_dialog.h"
#include "attribute_dialogs/number_attribute_dialog.h"
#include "globals.h"
#include "utils.h"
#include "settings.h"
@ -102,10 +103,13 @@ void ListAttributeDialog::on_add_button() {
if (is_bool) {
return new BoolAttributeDialog(value_list, attribute, read_only, this);
} else {
auto string_dialog = new StringAttributeDialog(value_list, attribute, read_only, this);
string_dialog->set_max_length(max_length);
const bool attribute_is_number = g_adconfig->get_attribute_is_number(attribute);
return string_dialog;
if (attribute_is_number) {
return new NumberAttributeDialog(value_list, attribute, read_only, this);
} else {
return new StringAttributeDialog(value_list, attribute, read_only, this);
}
}
}();

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -0,0 +1,64 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "attribute_dialogs/number_attribute_dialog.h"
#include "attribute_dialogs/ui_number_attribute_dialog.h"
#include "adldap.h"
#include "globals.h"
#include "utils.h"
#include "settings.h"
NumberAttributeDialog::NumberAttributeDialog(const QList<QByteArray> &value_list, const QString &attribute, const bool read_only, QWidget *parent)
: AttributeDialog(attribute, read_only, parent) {
ui = new Ui::NumberAttributeDialog();
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
AttributeDialog::load_attribute_label(ui->attribute_label);
set_line_edit_to_numbers_only(ui->edit);
limit_edit(ui->edit, attribute);
ui->edit->setReadOnly(read_only);
const QByteArray value = value_list.value(0, QByteArray());
const QString value_string = QString(value);
ui->edit->setText(value_string);
settings_setup_dialog_geometry(SETTING_number_attribute_dialog_geometry, this);
}
NumberAttributeDialog::~NumberAttributeDialog() {
delete ui;
}
QList<QByteArray> NumberAttributeDialog::get_value_list() const {
const QString new_value_string = ui->edit->text();
if (new_value_string.isEmpty()) {
return {};
} else {
const QByteArray new_value = new_value_string.toUtf8();
return {new_value};
}
}

View File

@ -0,0 +1,42 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NUMBER_ATTRIBUTE_DIALOG_H
#define NUMBER_ATTRIBUTE_DIALOG_H
#include "attribute_dialogs/attribute_dialog.h"
namespace Ui {
class NumberAttributeDialog;
}
class NumberAttributeDialog final : public AttributeDialog {
Q_OBJECT
public:
Ui::NumberAttributeDialog *ui;
NumberAttributeDialog(const QList<QByteArray> &value_list, const QString &attribute, const bool read_only, QWidget *parent);
~NumberAttributeDialog();
QList<QByteArray> get_value_list() const override;
};
#endif /* NUMBER_ATTRIBUTE_DIALOG_H */

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NumberAttributeDialog</class>
<widget class="QDialog" name="NumberAttributeDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>117</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">PLACEHOLDER</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="attribute_label">
<property name="text">
<string notr="true">Attribute: name (PLACEHOLDER)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit"/>
</item>
<item>
<widget class="QDialogButtonBox" name="button_box">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>button_box</sender>
<signal>accepted()</signal>
<receiver>NumberAttributeDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_box</sender>
<signal>rejected()</signal>
<receiver>NumberAttributeDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -35,17 +35,13 @@ StringAttributeDialog::StringAttributeDialog(const QList<QByteArray> &value_list
AttributeDialog::load_attribute_label(ui->attribute_label);
if (g_adconfig->get_attribute_is_number(attribute)) {
set_line_edit_to_numbers_only(ui->edit);
}
limit_edit(ui->edit, attribute);
limit_plain_text_edit(ui->edit, attribute);
ui->edit->setReadOnly(read_only);
const QByteArray value = value_list.value(0, QByteArray());
const QString value_string = QString(value);
ui->edit->setText(value_string);
ui->edit->setPlainText(value_string);
settings_setup_dialog_geometry(SETTING_string_attribute_dialog_geometry, this);
}
@ -55,7 +51,7 @@ StringAttributeDialog::~StringAttributeDialog() {
}
QList<QByteArray> StringAttributeDialog::get_value_list() const {
const QString new_value_string = ui->edit->text();
const QString new_value_string = ui->edit->toPlainText();
if (new_value_string.isEmpty()) {
return {};
@ -64,9 +60,3 @@ QList<QByteArray> StringAttributeDialog::get_value_list() const {
return {new_value};
}
}
void StringAttributeDialog::set_max_length(const int max_length) {
if (max_length > 0) {
ui->edit->setMaxLength(max_length);
}
}

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -37,11 +37,6 @@ public:
~StringAttributeDialog();
QList<QByteArray> get_value_list() const override;
// NOTE: by default, most (not all) attributes have
// a pre-defined max length that is obtained from
// schema. Calling this f-n overrides it.
void set_max_length(const int max_length);
};
#endif /* STRING_ATTRIBUTE_DIALOG_H */

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>400</width>
<height>117</height>
<height>152</height>
</rect>
</property>
<property name="windowTitle">
@ -22,7 +22,7 @@
</widget>
</item>
<item>
<widget class="QLineEdit" name="edit"/>
<widget class="QPlainTextEdit" name="edit"/>
</item>
<item>
<widget class="QDialogButtonBox" name="button_box">

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -0,0 +1,46 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "attribute_edits/dn_edit.h"
#include "adldap.h"
#include "utils.h"
#include <QLineEdit>
DNEdit::DNEdit(QLineEdit *edit_arg, QObject *parent)
: AttributeEdit(parent) {
edit = edit_arg;
limit_edit(edit, ATTRIBUTE_DN);
connect(
edit, &QLineEdit::textChanged,
this, &AttributeEdit::edited);
}
void DNEdit::load(AdInterface &ad, const AdObject &object) {
UNUSED_ARG(ad);
const QString dn = object.get_dn();
const QString dn_as_canonical = dn_canonical(dn);
edit->setText(dn_as_canonical);
}

View File

@ -0,0 +1,39 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DN_EDIT_H
#define DN_EDIT_H
#include "attribute_edits/attribute_edit.h"
class QLineEdit;
class DNEdit final : public AttributeEdit {
Q_OBJECT
public:
DNEdit(QLineEdit *edit_arg, QObject *parent);
void load(AdInterface &ad, const AdObject &object) override;
private:
QLineEdit *edit;
};
#endif /* DN_EDIT_H */

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View File

@ -1,8 +1,8 @@
/*
* ADMC - AD Management Center
*
* Copyright (C) 2020-2021 BaseALT Ltd.
* Copyright (C) 2020-2021 Dmitry Degtyarev
* Copyright (C) 2020-2022 BaseALT Ltd.
* Copyright (C) 2020-2022 Dmitry Degtyarev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

Some files were not shown because too many files have changed in this diff Show More