Merge pull request #433 from LDAPAccountManager/feature/409-customScripts-split-config

Feature/409 custom scripts split config
This commit is contained in:
gruberroland 2025-05-05 07:54:49 +02:00 committed by GitHub
commit 4167603f66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 51 additions and 69 deletions

View file

@ -4,6 +4,8 @@ June 2025 9.2
- Multi-edit tool: change operations are combined by DN to allow e.g. adding object classes with required attributes (408)
- Windows users: support thumbnail images (needs to be activated in server profile) (431)
- Tree view: better editing of olcAccess (420)
- LAM Pro:
-> Custom scripts: split config by account type (409)
- Fixed bugs:
-> Unix: profile editor for users not working (418)
-> Custom fields: problems with deleting facsimileTelephoneNumber (419)

View file

@ -608,6 +608,38 @@
version. Unless explicitly noticed there is no need to install an
intermediate release.</para>
<section>
<title>9.1 -&gt; 9.2</title>
<para>LAM Pro:</para>
<itemizedlist>
<listitem>
<para>Custom scripts: The settings in server profile were split by
account type. If you use custom scripts then you need to perform
these steps for each server profile that uses them (no scripts
will be executed till migration was done):</para>
<itemizedlist>
<listitem>
<para>Open server profile and switch to tab "Module
settings"</para>
</listitem>
<listitem>
<para>Review the automated migration of the custom scripts
settings (complex configurations will need manual
adaptions)</para>
</listitem>
<listitem>
<para>Save the server profile</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>9.0 -&gt; 9.1</title>

View file

@ -120,9 +120,9 @@ function setlanguage() {
* @param string $target owner, group or other
* @param string $chmod the chmod rights
*
* @return true, if the chmod $right for $target were set
* @return bool true, if the chmod $right for $target were set
*/
function checkChmod($right, $target, $chmod) {
function checkChmod($right, $target, $chmod): bool {
$right_arr = ["read", "write", "execute"];
$target_arr = ["owner", "group", "other"];
@ -133,13 +133,13 @@ function checkChmod($right, $target, $chmod) {
$chmod_num = -1;
// owner:
if ($target == "owner") {
if ($target === "owner") {
$chmod_num = 0;
}
if ($target == "group") {
if ($target === "group") {
$chmod_num = 1;
}
if ($target == "other") {
if ($target === "other") {
$chmod_num = 2;
}
@ -153,9 +153,9 @@ function checkChmod($right, $target, $chmod) {
$write = [2, 3, 6, 7];
// What numbers allow "execute"
$execute = [1, 3, 5, 7];
return (($right == "read") && in_array($chmod_num, $read))
|| (($right == "write") && in_array($chmod_num, $write))
|| (($right == "execute") && in_array($chmod_num, $execute));
return (($right === "read") && in_array($chmod_num, $read))
|| (($right === "write") && in_array($chmod_num, $write))
|| (($right === "execute") && in_array($chmod_num, $execute));
}
/**

View file

@ -9,7 +9,7 @@ use PHPUnit\Framework\TestCase;
/*
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2024 Roland Gruber
Copyright (C) 2024 - 2025 Roland Gruber
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
@ -51,16 +51,13 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
'LAM_TEXT_COMMENT: Comment=no comment',
'LAM_TEXT_AMOUNT:Amount',
'LAM_GROUP: Group 1',
'user manual LAMLABEL="echo uid" echo $uid$',
'manual LAMLABEL="echo uid" echo $uid$',
'LAM_GROUP: Group 2',
'user manual echo $description$',
'user postModify echo $dn$',
'gon preModify echo NEW $member$ OLD $ORIG.member$',
'manual echo $description$',
'postModify echo $dn$',
'',
' ',
'group:group_3 manual echo group3',
'group:group_3 postCreate echo group3',
'group preCreate echo group',
'preCreate echo user',
];
$this->configLinesSelfService = [
'postModify echo $dn$',
@ -70,17 +67,12 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
public function testCustomScriptParser() {
$parser = new \CustomScriptParser();
$scripts = $parser->parse($this->configLines, false);
$scripts = $parser->parse($this->configLines);
$this->assertNotEmpty($scripts);
$this->assertEquals(7, count($scripts));
$typeManager = new TypeManager();
$this->assertEquals(4, count($scripts));
$script = $scripts[0];
$configuredType = new ConfiguredType($typeManager, 'user', 'user');
$configuredWrongType = new ConfiguredType($typeManager, 'group', 'group_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertTrue($script->isManual());
$this->assertEquals('echo $uid$', $script->getCommand());
$this->assertEquals('manual', $script->getType());
@ -88,10 +80,6 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
$this->assertEquals('Group 1', $script->getGroupLabel());
$script = $scripts[1];
$configuredType = new ConfiguredType($typeManager, 'user', 'user');
$configuredWrongType = new ConfiguredType($typeManager, 'group', 'group_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertTrue($script->isManual());
$this->assertEquals('echo $description$', $script->getCommand());
$this->assertEquals('manual', $script->getType());
@ -99,10 +87,6 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
$this->assertEquals('Group 2', $script->getGroupLabel());
$script = $scripts[2];
$configuredType = new ConfiguredType($typeManager, 'user', 'user');
$configuredWrongType = new ConfiguredType($typeManager, 'group', 'group_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertFalse($script->isManual());
$this->assertEquals('echo $dn$', $script->getCommand());
$this->assertEquals('postModify', $script->getType());
@ -110,44 +94,8 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
$this->assertEquals(_('Post-modify'), $script->getTypeLabel());
$script = $scripts[3];
$configuredType = new ConfiguredType($typeManager, 'gon', 'gon_1');
$configuredWrongType = new ConfiguredType($typeManager, 'group', 'group_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertFalse($script->isManual());
$this->assertEquals('echo NEW $member$ OLD $ORIG.member$', $script->getCommand());
$this->assertEquals('preModify', $script->getType());
$this->assertNull($script->getLabel());
$this->assertEquals(_('Pre-modify'), $script->getTypeLabel());
$script = $scripts[4];
$configuredType = new ConfiguredType($typeManager, 'group', 'group_3');
$configuredWrongType = new ConfiguredType($typeManager, 'group', 'group_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertTrue($script->isManual());
$this->assertEquals('echo group3', $script->getCommand());
$this->assertEquals('manual', $script->getType());
$this->assertNull($script->getLabel());
$script = $scripts[5];
$configuredType = new ConfiguredType($typeManager, 'group', 'group_3');
$configuredWrongType = new ConfiguredType($typeManager, 'gon', 'gon_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertFalse($script->isManual());
$this->assertEquals('echo group3', $script->getCommand());
$this->assertEquals('postCreate', $script->getType());
$this->assertNull($script->getLabel());
$this->assertEquals(_('Post-create'), $script->getTypeLabel());
$script = $scripts[6];
$configuredType = new ConfiguredType($typeManager, 'group', 'group_3');
$configuredWrongType = new ConfiguredType($typeManager, 'gon', 'gon_1');
$this->assertTrue($script->matchesConfiguredType($configuredType));
$this->assertFalse($script->matchesConfiguredType($configuredWrongType));
$this->assertFalse($script->isManual());
$this->assertEquals('echo group', $script->getCommand());
$this->assertEquals('echo user', $script->getCommand());
$this->assertEquals('preCreate', $script->getType());
$this->assertNull($script->getLabel());
$this->assertEquals(_('Pre-create'), $script->getTypeLabel());
@ -174,7 +122,7 @@ if (is_readable(__DIR__ . '/../../../lib/modules/customScripts.inc')) {
public function testCustomScriptParserSelfService() {
$parser = new \CustomScriptParser();
$scripts = $parser->parse($this->configLinesSelfService, true);
$scripts = $parser->parse($this->configLinesSelfService);
$this->assertNotEmpty($scripts);
$this->assertEquals(2, count($scripts));