Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gear/admc.spec
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
%endif

Name: admc
Version: 0.23.2
Version: 0.23.3
Release: alt1

Summary: Active Directory Management Center
Expand Down Expand Up @@ -125,6 +125,9 @@ Tests for ADMC
%_bindir/admc_test_find_policy_dialog

%changelog
* Sat May 16 2026 Kozyrev Yuri <kozyrevid@altlinux.org> 0.23.3-alt1
- Remove extra space in full name

* Tue Apr 28 2026 Semyon Knyazev <samael@altlinux.org> 0.23.2-alt1
- Disabled the "Show Non-Container Objects in Console Tree" and
"Advanced Features" options for the password settings subtree display.
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
admc
CHANGELOG

-----------------------------------------------------------------------
VERSION 0.23.3
-----------------------------------------------------------------------
- Removed extra space in full name of a new user in user creation
dialog

-----------------------------------------------------------------------
VERSION 0.23.2
-----------------------------------------------------------------------
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG_ru.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
admc
ЖУРНАЛ ИЗМЕНЕНИЙ

-----------------------------------------------------------------------
ВЕРСИЯ 0.23.2
-----------------------------------------------------------------------
- Исправлено добавление лишнего пробела в полном имени создаваемого
пользователя

-----------------------------------------------------------------------
ВЕРСИЯ 0.23.2
-----------------------------------------------------------------------
Expand Down
11 changes: 11 additions & 0 deletions src/adldap/ad_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ enum SystemFlagsBit {
#define ATTRIBUTE_MAX_PWD_AGE "maxPwdAge"
#define ATTRIBUTE_MIN_PWD_AGE "minPwdAge"
#define ATTRIBUTE_LOCKOUT_DURATION "lockoutDuration"
#define ATTRIBUTE_PWD_PROPERTIES "pwdProperties"
#define ATTRIBUTE_PWD_HISTORY_LENGTH "pwdHistoryLength"
#define ATTRIBUTE_MIN_PWD_LENGTH "minPwdLength"
#define ATTRIBUTE_LOCKOUT_THRESHOLD "lockoutThreshold"
#define ATTRIBUTE_IS_CRITICAL_SYSTEM_OBJECT "isCriticalSystemObject"
#define ATTRIBUTE_GPC_FILE_SYS_PATH "gPCFileSysPath"
#define ATTRIBUTE_GPC_FUNCTIONALITY_VERSION "gpCFunctionalityVersion"
Expand Down Expand Up @@ -407,6 +411,13 @@ const long long MILLIS_TO_100_NANOS = 10000LL;
#define ETYPES_AES128_CTS_HMAC_SHA1_96 0x00000008
#define ETYPES_AES256_CTS_HMAC_SHA1_96 0x00000010

#define SAM_MASK_DOMAIN_PASSWORD_COMPLEX 1
#define SAM_MASK_DOMAIN_PASSWORD_NO_ANON_CHANGE 2
#define SAM_MASK_DOMAIN_PASSWORD_NO_CLEAR_CHANGE 4
#define SAM_MASK_DOMAIN_LOCKOUT_ADMINS 8
#define SAM_MASK_DOMAIN_PASSWORD_STORE_CLEARTEXT 16
#define SAM_MASK_DOMAIN_REFUSE_PASSWORD_CHANGE 32

enum SearchScope {
SearchScope_Object,
SearchScope_Children,
Expand Down
39 changes: 26 additions & 13 deletions src/admc/results_widgets/pso_results_widget/pso_edit_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

#include "pso_edit_widget.h"
#include "ad_defines.h"
#include "ui_pso_edit_widget.h"
#include "ad_interface.h"
#include "ad_object.h"
Expand All @@ -26,6 +27,7 @@
#include "managers/icon_manager.h"
#include "status.h"
#include "globals.h"
#include "ad_config.h"

#include <chrono>

Expand Down Expand Up @@ -189,19 +191,30 @@ bool PSOEditWidget::settings_are_default() {
}

void PSOEditWidget::update_defaults() {
// TODO: Get defaults from Default Domain Policy.

ui->min_passwd_len_spinbox->setValue(7);
ui->history_length_spinbox->setValue(24);
ui->logon_attempts_spinbox->setValue(0);

ui->lockout_duration_spinbox->setValue(30);
ui->reset_lockout_spinbox->setValue(30);
ui->min_age_spinbox->setValue(1);
ui->max_age_spinbox->setValue(42);

ui->complexity_req_checkbox->setChecked(true);
ui->store_passwd_checkbox->setChecked(false);
AdInterface ad;
if (!ad.is_connected()) {
return;
}
AdObject result = ad.search_object(g_adconfig->domain_dn(), {ATTRIBUTE_PWD_PROPERTIES,
ATTRIBUTE_PWD_HISTORY_LENGTH,
ATTRIBUTE_MIN_PWD_LENGTH,
ATTRIBUTE_MIN_PWD_AGE,
ATTRIBUTE_MAX_PWD_AGE,
ATTRIBUTE_LOCKOUT_DURATION,
ATTRIBUTE_LOCKOUT_THRESHOLD,
ATTRIBUTE_LOCKOUT_OBSERVATION_WINDOW});

ui->min_passwd_len_spinbox->setValue(result.get_int(ATTRIBUTE_MIN_PWD_LENGTH));
ui->history_length_spinbox->setValue(result.get_int(ATTRIBUTE_PWD_HISTORY_LENGTH));
ui->logon_attempts_spinbox->setValue(result.get_int(ATTRIBUTE_LOCKOUT_THRESHOLD));

ui->lockout_duration_spinbox->setValue(spinbox_timespan_units(result, ATTRIBUTE_LOCKOUT_DURATION));
ui->reset_lockout_spinbox->setValue(spinbox_timespan_units(result, ATTRIBUTE_LOCKOUT_OBSERVATION_WINDOW));
ui->min_age_spinbox->setValue(spinbox_timespan_units(result, ATTRIBUTE_MIN_PWD_AGE));
ui->max_age_spinbox->setValue(spinbox_timespan_units(result, ATTRIBUTE_MAX_PWD_AGE));

ui->complexity_req_checkbox->setChecked(result.get_int(ATTRIBUTE_PWD_PROPERTIES) & SAM_MASK_DOMAIN_PASSWORD_COMPLEX);
ui->store_passwd_checkbox->setChecked(result.get_int(ATTRIBUTE_PWD_PROPERTIES) & SAM_MASK_DOMAIN_PASSWORD_STORE_CLEARTEXT);

ui->applied_list_widget->clear();
}
Expand Down
8 changes: 7 additions & 1 deletion src/admc/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -404,12 +404,18 @@ void setup_full_name_autofill(QLineEdit *first_name_edit, QLineEdit *last_name_e
const QString middle_name = middle_name_edit->text().trimmed();

const bool last_name_first = settings_get_variant(SETTING_last_name_before_first_name).toBool();
if (!first_name.isEmpty() && !last_name.isEmpty()) {
if (!first_name.isEmpty() && !middle_name.isEmpty() && !last_name.isEmpty()) {
if (last_name_first) {
return last_name + " " + first_name + " " + middle_name;
} else {
return first_name + " " + middle_name + " " + last_name;
}
} else if (!first_name.isEmpty() && !last_name.isEmpty()) {
if (last_name_first) {
return last_name + " " + first_name;
} else {
return first_name + " " + last_name;
}
} else if (!first_name.isEmpty()) {
return first_name + middle_name;
} else if (!last_name.isEmpty()) {
Expand Down