Instalacja oraz konfiguracja phpldapadmin

Z wyklorzystaniem własnego repozytroium skryptów należy zainstalować oprogramowanie phpldapadmin:

pkg install -y net/phpldapadmin

config.php

Zainstalowany plik konfiguracyjny jest nieco uboższy od docelowego, którego używam. Poniżej całość, aby łatwiej uruchamiać nową instancję:

$config->custom->debug['level'] = 0;
$config->custom->debug['file'] = '/tmp/pla_debug.log';

$config->custom->session['blowfish'] = '__jakis_ciag_losowy__';
$config->custom->appearance['language'] = 'auto';
$config->custom->jpeg['tmpdir'] = "/var/tmp/pla";     // Example for Unix systems
$config->custom->password['no_random_crypt_salt'] = false;
$config->custom->session['timelimit'] = 300;
$config->custom->appearance['stylesheet'] = 'style.css';

$config->custom->appearance['tree'] = "AJAXTree";

/* Just show your custom templates. */
$config->custom->appearance['custom_templates_only'] = false;

/* Disable the default template. */
$config->custom->appearance['disable_default_template'] = false;

/* Hide the warnings for invalid objectClasses/attributes in templates. */
$config->custom->appearance['hide_template_warning'] = true;

$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','Firma');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=firma,dc=local'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','');
$servers->setValue('login','bind_pass','');
$servers->setValue('server','tls',false);
// $servers->setValue('server','sasl_auth',false);
$servers->setValue('appearance','password_hash_custom','ssha');
$servers->setValue('login','attr','uid');
$servers->setValue('login','fallback_dn',true);
// $servers->setValue('login','class',null);
$servers->setValue('server','read_only',false);
$servers->setValue('appearance','show_create',true);
$servers->setValue('auto_number','enable',true);
$servers->setValue('auto_number','mechanism','search');
$servers->setValue('auto_number','search_base',null);
$servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500));
$servers->setValue('auto_number','dn',null);
$servers->setValue('auto_number','pass',null);
$servers->setValue('login','anon_bind',false);
$servers->setValue('custom','pages_prefix','custom_');
$servers->setValue('unique','attrs',array());
$servers->setValue('unique','dn',null);
$servers->setValue('unique','pass',null);
$servers->setValue('server','visible',true);
$servers->setValue('login','timeout',30);
$servers->setValue('server','branch_rename',false);
$servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime'));
$servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock'));
// $servers->setValue('force_may','attrs',array('uidNumber','gidNumber','sambaSID'));

$friendly_attrs = array();
$friendly_attrs['facsimileTelephoneNumber'] = 'Fax';
$friendly_attrs['telephoneNumber']          = 'Phone';
$friendly_attrs['uid']                      = 'User Name';

$q=0;
$queries = array();
$queries[$q]['name'] = 'User List';
$queries[$q]['base'] = 'dc=firma,dc=local';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))';
$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto';
$q++;
$queries[$q]['name'] = 'Samba Users';
$queries[$q]['base'] = 'dc=example,dc=com';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';

$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['base'] = 'dc=firma,dc=local';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';

Własne template-y do PLA

Możliwe jest dodanie własnych wzorców do PLA w celu tworzenia nowych wpisów. Najlepiej skopiować istniejący wzorzec jako custom_wzorzec. W ten sposób najprościej zrobić wzorzec dla ownCloud:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE template SYSTEM "../template.dtd">

<template>
<askcontainer>1</askcontainer>
<description>New User ownCloud Account</description>
<icon>ldap-user.png</icon>
<invalid>0</invalid>
<rdn>cn</rdn>
<!--<regexp>^ou=People,o=.*,</regexp>-->
<title>ownCloud User Account</title>
<visible>1</visible>

<objectClasses>
<objectClass id="inetOrgPerson"></objectClass>
<objectClass id="posixAccount"></objectClass>
<objectClass id="ownCloud"></objectClass>
</objectClasses>

<attributes>
<attribute id="givenName">
        <display>First name</display>
        <icon>ldap-uid.png</icon>
        <onchange>=autoFill(cn;%sn% %givenName%)</onchange>
        <onchange>=autoFill(displayName;%sn% %givenName%)</onchange>
        <onchange>=autoFill(uid;%givenName|0-1/l%%sn/l%)</onchange>
        <order>1</order>
        <page>1</page>
</attribute>
<attribute id="sn">
        <display>Last name</display>
        <onchange>=autoFill(cn;%sn% %givenName%)</onchange>
        <onchange>=autoFill(displayName;%sn% %givenName%)</onchange>
        <onchange>=autoFill(uid;%givenName|0-1/l%%sn/l%)</onchange>
        <!-- <onchange>=autoFill(homeDirectory;/home/users/%uid|0-1/l%/%uid%)</onchange> -->
        <order>2</order>
        <page>1</page>
</attribute>
<attribute id="cn">
        <display>Common Name</display>
        <order>3</order>
        <page>1</page>
</attribute>
<attribute id="uid">
        <display>User ID</display>
        <onchange>=autoFill(homeDirectory;/home/users/%uid%)</onchange>
        <order>4</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="homeDirectory">
        <display>Home directory</display>
        <!-- <onchange>=autoFill(homeDirectory;/home/users/%gidNumber|0-0/T%/%uid|3-%)</onchange> -->
        <order>8</order>
        <page>1</page>
</attribute>
<attribute id="uidNumber">
        <display>UID Number</display>
        <icon>terminal.png</icon>
        <order>6</order>
        <page>1</page>
        <readonly>1</readonly>
        <value>=php.GetNextNumber(/;uidNumber)</value>
</attribute>
<attribute id="gidNumber">
        <display>GID Number</display>
        <!-- <onchange>=autoFill(homeDirectory;/home/users/%gidNumber|0-0/T%/%uid|3-%)</onchange> -->
        <order>7</order>
        <page>1</page>
        <value><![CDATA[=php.PickList(/;(&(objectClass=posixGroup));gidNumber;%cn%;;;;cn)]]></value>
</attribute>
<attribute id="loginShell">
        <display>Login shell</display>
        <order>9</order>
        <page>1</page>
        <!-- <value><![CDATA[=php.PickList(/;(&(objectClass=posixAccount));loginShell;%loginShell%;;;;loginShell)]]></value> -->
        <type>select</type>
        <value id="/bin/sh">Bash</value>
        <value id="/bin/csh">C Shell</value>
        <value id="/bin/tsh">Turbo C Shell</value>
</attribute>
<attribute id="userPassword">
        <display>Password</display>
        <!-- <helper>
                <display>Encryption</display>
                <id>enc</id>
                <value>=php.PasswordEncryptionTypes()</value>
        </helper> -->
        <icon>lock.png</icon>
        <order>5</order>
        <page>1</page>
        <post>=php.PasswordEncrypt(%enc%;%userPassword%)</post>
        <spacer>1</spacer>
        <verify>1</verify>
</attribute>
<attribute id="displayName">
        <display>Display Name</display>
        <order>10</order>
        <page>1</page>
</attribute>
<attribute id="mail">
        <display>Email Address</display>
        <order>11</order>
        <page>1</page>
</attribute>
<attribute id="ownCloudQuota">
        <display>ownCloud Quota</display>
        <order>12</order>
        <page>1</page>
</attribute>
</attributes>

</template>

(!) Wzorce do tworzenia obiektów znajdują się w repozytorium skryptów

Wzorce do edycji wpisów

Obecnie nie ma wzorców do edycji obiektów poza domyślnym. W katalogu /usr/local/www/phpldapadmin/templates/modification są dwa wzorce (pliki XML), ale mają ustawioną flagę:

<visible>0</visible>

Zatem nie działa guzik Przełącz szablon podczas edycji wpisów.