<?xml version="1.0" encoding="utf-8"?>
<creole>

    <files>
        <file filelist='ad-files' name='/etc/logrotate.d/samba'
            source='samba.logrotate'/>
        <file filelist='ad-recycle-files' name='/etc/samba/recycle.conf' rm='True'/>
        <file filelist='ad-files' name='/etc/samba/smb.conf'
            source='smb-ad.conf' mkdir='True' rm='True'/>
        <file filelist='ad-files' name='/etc/eole/samba4-vars.conf'
            rm='True'/>
        <file filelist='ad-files' name='/etc/krb5.conf' mkdir='True' rm='True'/>
        <file filelist='ad-dc-files' name='/var/lib/samba/private/krb5.conf' mkdir='True' rm='True'/>
        <file filelist='ad-dc-files' name='/usr/share/samba/setup/krb5.conf' mkdir='True' rm='True'/>
        <file filelist='ad-files'
            name='/usr/share/eole/bastion/data/90-samba_dynamic_rules'
            mode='0755'
            rm='True'/>
        <file name='/etc/nsswitch.conf'/>
        <file filelist='bind9' name='/etc/bind/named.conf' rm='True'/>
        <file filelist='bind9' name='/etc/bind/named.conf.options' rm='True'/>
        <file name='/etc/apparmor.d/local/usr.sbin.named' source='named.apparmor.conf'/>
        <service servicelist='samba' >samba-ad-dc</service>
        <service servicelist='samba-membre' >smbd</service>
        <service servicelist='samba-membre' >nmbd</service>
        <service servicelist='samba-membre' >winbind</service>
        <service_restriction service='sshd'>
            <ip interface='auto' netmask='255.255.255.255' ip_type='SymLinkOption'>ad_additional_dc_ip</ip>
        </service_restriction>
        <service servicelist='bind9'>bind9</service>
    </files>

    <variables>

        <family name='Interface-0'>
            <variable name='eth0_method' hidden='True' redefine='True'/>
            <!--
            <variable name='adresse_ip_eth0' auto_freeze='True' redefine='True'/>
            <variable name='adresse_netmask_eth0' auto_freeze='True' redefine='True'/>
            -->
        </family>

        <family name='général'>
            <variable name='nom_machine' auto_freeze='True' redefine='True'/>
            <variable name='nom_domaine_local' auto_freeze='True' redefine='True'/>
        </family>

        <family name='services'>
            <variable name='activer_ad_smb' type='oui/non' description='Activer Samba Active Directory' hidden='True'>
                <value>oui</value>
            </variable>

        </family>

        <family name='Active Directory' icon='group'>

            <!-- Rôle du serveur -->

            <variable name="ad_realm" type="domain_strict" description="Nom complet du domaine racine de la forêt"
                mandatory='True'/>

            <variable name="ad_domain" type="string" description="Nom du domaine"
                mandatory="True" />

            <variable name="ad_server_role" type="string"
                description="Rôle du serveur"
                auto_freeze="True">
                <value>controleur de domaine</value>
            </variable>

            <variable name="ad_additional_dc" type="oui/non"
                description="Définir le contrôleur de domaine comme additionnel" mode="basic" >
                <value>non</value>
            </variable>

            <variable name='ad_force_domain_sid' type='oui/non' description="Imposer le SID du domaine AD à son initialisation" auto_freeze='True'>
                <value>non</value>
            </variable>
            <variable name="ad_domain_sid" type="string" description='SID du domaine AD' auto_freeze='True' mandatory='True'/>

            <variable name="ad_ro_dc" type="oui/non" mode="expert" description="Paramétrer le contrôleur de domaine en lecture seule (RODC)">
                <value>non</value>
            </variable>

            <variable name="ad_additional_dc_force_site" type="oui/non" description="Forcer le positionnement de ce contrôleur de domaine dans un site existant" auto_freeze='True'>
                <value>non</value>
            </variable>
            <variable name="ad_additional_dc_site" type="string" description="Site de destination de ce contrôleur de domaine" mandatory='True' auto_freeze='True'/>

            <variable name='ad_idmap_config_auto' type='oui/non' description='Utiliser la méthode par défaut de calcul des uid-gid' mode='expert'>
                <value>oui</value>
            </variable>
            <variable name='ad_idmap_config_domain' type='string' description='Domaine cible' mode='expert' multi='True' mandatory='True'/>
            <variable name='ad_idmap_config_backend' type='string' description='Méthode de calcul des uid-gid' mode='expert' mandatory='True'/>
            <variable name='ad_idmap_config_low' type='number' description='Limite basse de la plage d’id' mode='expert' mandatory='True'/>
            <variable name='ad_idmap_config_high' type='number' description='Limite haute de la plage d’id' mode='expert' mandatory='True'/>
            <variable name='ad_idmap_config_tdb_low' type='number' description='Limite basse de la plage d’id pour le backend tdb' mode='expert' mandatory='True'/>
            <variable name='ad_idmap_config_tdb_high' type='number' description='Limite haute de la plage d’id pour le backend tdb' mode='expert' mandatory='True'/>

            <!-- Services -->

            <variable name='ad_internal_dns_backend' type='oui/non' description='Utiliser le service DNS interne de Samba' mode='expert'>
                <value>oui</value>
            </variable>
            <variable name='ad_allow_transfer_network' type='network' description='Réseau autorisé à transférer la zone' mode='expert' multi='True'/>
            <variable name='ad_allow_transfer_netmask' type='netmask' description='Masque du réseau' mode='expert' multi='True'/>

            <!-- Environnement -->

            <variable name='ad_additional_dc_ip' type='ip'
                description="Adresse IP des contrôleurs de domaine en relation avec ce contrôleur de domaine Active Directory"
                multi='True'>
            </variable>
            <variable name='ad_additional_dc_kdc' type='oui/non' description='Le contrôleur a le rôle de kdc'>
                <value>oui</value>
            </variable>
            <variable name='ad_additional_dc_dns' type='oui/non' description='Le contrôleur a le rôle de DNS'>
                <value>oui</value>
            </variable>
            <variable name='ad_dc_sysvol_ref' type='ip'
                description="Adresse IP du contrôleur de référence pour le volume SYSVOL" />
            <variable name='ad_dc_sysvol_type' type="string"
                description="Type du contrôleur de référence pour le volume SYSVOL" mode='expert' >
                <value>seth</value>
            </variable>
            <variable name='ad_dc_sysvol_post_join_cmd' type="filename"
                description="Script distant à exécuter après la jonction sur le contrôleur de référence" mode='expert' >
            </variable>

            <variable name='ad_filter_network' type='oui/non' description='Restreindre aux adresses réseau renseignées les accès aux services du serveur' mode='expert'>
                <value>non</value>
            </variable>
            <variable name='ad_peer_ip' type='ip' description='Adresses IP autorisées à se connecter aux services de l’AD' mandatory='True' multi='True' mode='expert' />
            <variable name='ad_peer_netmask' type='netmask' description='Masque de sous-réseau' mandatory='True' mode='expert' />

            <variable name='ad_ldap_clients_ip' type='ip' description='Adresses IP autorisées à se connecter uniquement au service LDAP' multi='True' mode='expert'/>
            <variable name='ad_ldap_clients_netmask' type='netmask' description='Masque de sous-réseau' mode='expert'/>

            <variable name='autoriser_netbios_ports' type='oui/non' description='Autoriser la connexion pour les protocoles NetBIOS' mode='expert' >
                <value>non</value>
            </variable>

            <variable name='ad_custom_rpc_port' type='number' description='Port personnalisé pour RPC' mode='expert'/>
            <variable name='ad_custom_netlogon_port' type='number' description='Port personnalisé pour NetLogon' mode='expert'/>

            <!-- Partages -->

            <variable name='ad_recycle_bin' type='oui/non' description='Charger le module recycle pour la prise en charge des corbeilles' mode='expert'>
                <value>non</value>
            </variable>
            <variable name='ad_recycle_bin_dir' type='filename' description='Nom du répertoire corbeille' mode='expert'>
                <value>.corbeille</value>
            </variable>
            <variable name='ad_recycle_bin_purge' type='number' description='Durée de conservation des fichiers dans la corbeille' mode='expert' mandatory='True'>
                <value>8</value>
            </variable>

            <variable name="activer_ad_homes_share" type="oui/non" description='Créer localement le partage "homes" ("\\serveur\&lt; login&gt;)' mode="basic">
                <value>oui</value>
            </variable>
            <variable name='ad_homes_share_host' type='hostname' description='Nom de l’hôte hébergeant les répertoires utilisateurs'/>
            <variable name='ad_home_share_path' type='filename'
                description="Chemin des répertoires personnels des utilisateurs" mode='expert'>
                <value>/home/adhomes</value>
            </variable>
            <variable name='ad_homes_share_recycle' type='oui/non' description='Activer la corbeille pour le partage "homes"' mode='expert'>
                <value>non</value>
            </variable>

            <variable name="activer_ad_profiles_share" type="oui/non" description='Créer localement le partage "profiles" ("\\serveur\profiles")' mode="basic">
                <value>oui</value>
            </variable>
            <variable name='ad_profiles_share_host' type='hostname' description='Nom de l’hôte hébergeant les profils utilisateurs'/>
            <variable name='ad_profile_share_path' type='filename'
                description="Chemin des répertoires contenant les profils des utilisateurs" mode='expert'>
                <value>/home/adprofiles</value>
            </variable>

            <variable name='ad_additional_share' type='oui/non' description='Configurer des répertoires partagés' mode='expert'>
                <value>non</value>
            </variable>
            <variable name='ad_additional_share_name' type='string' description='Nom du répertoire partagé' mandatory='True' mode='expert' multi='True'/>
            <variable name='ad_additional_share_path' type='string' description='Chemin du partage' mandatory='True' mode='expert'/>
            <variable name='ad_additional_share_comment' type='string' description='Description du partage' mode='expert'/>
            <variable name='ad_additional_share_writeable' type='oui/non' description='Le partage peut être écrit' mode='expert'>
                <value>non</value>
            </variable>
            <variable name='ad_additional_share_browseable' type='oui/non' description='Le partage peut être parcouru' mode='expert'>
                <value>non</value>
            </variable>
            <variable name='ad_additional_share_create_mask' type='string' description='Masque de permissions pour les fichiers' mode='expert'/>
            <variable name='ad_additional_share_directory_mask' type='string' description='Masque de permissions pour les répertoires' mode='expert'/>
            <variable name='ad_additional_share_recycle' type='oui/non' description='Activer la corbeille pour le partage' mode='expert'>
                <value>non</value>
            </variable>

        </family>

        <separators>
            <separator name='ad_server_role'>Rôle du serveur Active Directory</separator>
            <separator name='ad_internal_dns_backend'>Gestion des services de Samba</separator>
            <separator name='ad_additional_dc_ip'>Environnement réseau</separator>
            <separator name='ad_recycle_bin'>Partages</separator>
        </separators>

    </variables>

    <constraints>

        <!--
        par défaut, le realm est initialisé avec le nom de domaine local de l'onglet général
        -->
        <auto name='calc_val' target='ad_realm'>
            <param type='eole' name='valeur'>nom_domaine_local</param>
        </auto>

        <auto name='extract_ad_domain_from_realm' target='ad_domain'>
            <param type='eole' name='realm'>ad_realm</param>
        </auto>

        <check name="valid_enum" target="ad_server_role">
            <param>["controleur de domaine", "membre"]</param>
        </check>

        <check name="valid_enum" target="ad_dc_sysvol_type">
            <param>["seth", "samba", "windows" ]</param>
        </check>

        <check name='valid_enum' target='ad_idmap_config_backend'>
            <param>['rid', 'autorid', 'ad', 'ldap', 'tdb', 'nss']</param>
        </check>

        <condition name='disabled_if_in' source='ad_filter_network'>
            <param>non</param>
            <target type='variable'>ad_peer_ip</target>
            <target type='variable'>ad_ldap_clients_ip</target>
        </condition>
        <group master='ad_peer_ip'>
            <slave>ad_peer_netmask</slave>
        </group>
        <group master='ad_additional_dc_ip'>
            <slave>ad_additional_dc_kdc</slave>
            <slave>ad_additional_dc_dns</slave>
        </group>

        <check name='valid_networknetmask' target='ad_peer_netmask'>
            <param type='eole'>ad_peer_ip</param>
        </check>

        <group master='ad_ldap_clients_ip'>
            <slave>ad_ldap_clients_netmask</slave>
        </group>

        <check name='valid_networknetmask' target='ad_ldap_clients_netmask'>
            <param type='eole'>ad_ldap_clients_ip</param>
        </check>

        <group master='ad_additional_share_name'>
            <slave>ad_additional_share_path</slave>
            <slave>ad_additional_share_comment</slave>
            <slave>ad_additional_share_browseable</slave>
            <slave>ad_additional_share_writeable</slave>
            <slave>ad_additional_share_create_mask</slave>
            <slave>ad_additional_share_directory_mask</slave>
            <slave>ad_additional_share_recycle</slave>
        </group>

        <group master='ad_idmap_config_domain'>
            <slave>ad_idmap_config_backend</slave>
            <slave>ad_idmap_config_low</slave>
            <slave>ad_idmap_config_high</slave>
        </group>

        <group master='ad_allow_transfer_network'>
            <slave>ad_allow_transfer_netmask</slave>
        </group>

        <condition name='disabled_if_in' source='activer_ad_smb'>
            <param>non</param>
            <target type='filelist'>ad-files</target>
            <target type='filelist'>ad-dc-files</target>
            <target type='servicelist'>samba</target>
            <target type='family'>Active Directory</target>
        </condition>

        <!--
        Si serveur est n'est pas un DC alors les options additionnel (dc, ip, rodc, site) doivent être cachée.
        -->
        <condition name='disabled_if_not_in' source='ad_server_role'>
            <param>controleur de domaine</param>
            <target type='filelist'>ad-dc-files</target>
            <target type='variable'>ad_additional_dc</target>
            <target type='variable'>ad_additional_dc_ip</target>
        </condition>

        <condition name='disabled_if_in' source='ad_server_role'>
            <param>membre</param>
            <target type='servicelist'>samba</target>
            <target type='variable'>ad_internal_dns_backend</target>
        </condition>

        <condition name='disabled_if_in' source='ad_server_role'>
            <param>controleur de domaine</param>
            <target type='servicelist'>samba-membre</target>
            <target type='variable'>ad_idmap_config_auto</target>
        </condition>

        <condition name='disabled_if_in' source='ad_idmap_config_auto'>
            <param>oui</param>
            <target type='variable'>ad_idmap_config_domain</target>
            <target type='variable'>ad_idmap_config_tdb_low</target>
            <target type='variable'>ad_idmap_config_tdb_high</target>
        </condition>

        <condition name='disabled_if_in' source='ad_internal_dns_backend'>
            <param>oui</param>
            <target type='variable'>ad_allow_transfer_network</target>
        </condition>

        <fill name='extract_ad_domain_from_realm' target='ad_idmap_config_domain'>
            <param type='eole' name='realm'>ad_realm</param>
        </fill>
        <check name='valid_enum' target='ad_idmap_config_backend'>
            <param>['rid', 'autorid', 'ad', 'ldap', 'tdb', 'nss']</param>
        </check>

        <!--
        Si serveur additionnel alors on doit saisir un serveur de référence pour Sysvol.
        Il est nécessaire de connaitre le type de serveur distant
        -->
        <condition name='disabled_if_in' source="ad_additional_dc">
            <param>non</param>
            <target type='variable'>ad_dc_sysvol_ref</target>
            <target type='variable'>ad_dc_sysvol_type</target>
            <target type='variable'>ad_additional_dc_force_site</target>
            <target type='variable'>ad_ro_dc</target>
        </condition>

        <condition name='disabled_if_in' source="ad_additional_dc">
            <param>oui</param>
            <target type='variable'>ad_force_domain_sid</target>
        </condition>

        <condition name='disabled_if_in' source='ad_force_domain_sid'>
            <param>non</param>
            <target type='variable'>ad_domain_sid</target>
        </condition>

        <condition name='disabled_if_in' source='ad_internal_dns_backend'>
            <param>oui</param>
            <target type='servicelist'>bind9</target>
            <target type='filelist'>bind9</target>
        </condition>

        <condition name='disabled_if_in' source="ad_additional_dc_force_site">
            <param>non</param>
            <target type='variable'>ad_additional_dc_site</target>
        </condition>
        <fill name='calc_val' target='ad_additional_dc_site'>
            <param type='eole' name='valeur'>libelle_etab</param>
        </fill>

        <!--
        Si serveur additionnel et de type 'samba' (non eole) alors l'admin peut saisir une commande à executer sur le DC de référence (ad_dc_sysvol_post_join_cmd)
        -->
        <condition name='disabled_if_not_in' source="ad_dc_sysvol_type">
            <param>samba</param>
            <target type='variable'>ad_dc_sysvol_post_join_cmd</target>
        </condition>

        <fill name='calc_multi_condition' target='global_adresse_ip_dns_dhcp'>
            <param>membre</param>
            <param type="eole" name="condition_1" optional="True">ad_server_role</param>
            <param name='default_match'>None</param>
            <param type='eole' name='mismatch'>adresse_ip_eth0</param>
        </fill>

        <condition name='disabled_if_in' source='activer_ad_homes_share' fallback='True'>
            <param>non</param>
            <target type='variable'>ad_home_share_path</target>
            <target type='variable'>ad_homes_share_recycle</target>
        </condition>
        <condition name='disabled_if_in' source='activer_ad_homes_share'>
            <param>oui</param>
            <target type='variable'>ad_homes_share_host</target>
        </condition>

        <condition name='disabled_if_in' source='activer_ad_profiles_share' fallback='True'>
            <param>non</param>
            <target type='variable'>ad_profile_share_path</target>
        </condition>
        <condition name='disabled_if_in' source='activer_ad_profiles_share'>
            <param>oui</param>
            <target type='variable'>ad_profiles_share_host</target>
        </condition>

        <condition name='disabled_if_in' source='ad_additional_share' fallback='True'>
            <param>non</param>
            <target type='variable'>ad_additional_share_name</target>
        </condition>

        <condition name='disabled_if_in' source='ad_recycle_bin'>
            <param>non</param>
            <target type='filelist'>ad-recycle-files</target>
            <target type='variable'>ad_recycle_bin_dir</target>
            <target type='variable'>ad_recycle_bin_purge</target>
            <target type='variable'>ad_homes_share_recycle</target>
            <target type='variable'>ad_additional_share_recycle</target>
        </condition>

    </constraints>

    <help>
        <family name='Active Directory'>Configuration du serveur Active Directory</family>
        <variable name='activer_ad_smb'>Faire de votre serveur un contrôleur de domaine ou un membre d'un domaine Active Directory</variable>
        <variable name="ad_realm">Nom complètement qualifié de la racine de la forêt Active Directory</variable>
        <variable name="ad_domain">Nom du domaine Active Directory</variable>
        <variable name="ad_server_role">Rôle du serveur (contrôleur de domain, serveur membre)</variable>
        <variable name="ad_additional_dc">Le serveur est un contrôleur de domaine qui sera joint à un domaine existant</variable>
        <variable name='ad_additional_dc_ip'>Selon la topologie de l'architecture AD, citer un ou deux contrôleurs de domaine qui auront des relations privilégiées avec ce contrôleur dans le cadre de la résolution DNS, du fonctionnent Kerberos et de la réplication AD.</variable>
        <variable name='ad_additional_dc_kdc'>Si le contrôleur identifié par l’adresse IP joue le rôle de serveur d’authentification, il servira dans le configuration de Kerberos.</variable>
        <variable name='ad_additional_dc_dns'>Si le contrôleur identifié par l’adresse IP joue le rôle de serveur DNS, il servira dans le configuration du service DNS.</variable>
        <variable name='ad_internal_dns_backend'>Utiliser le service interne de résolution de nom. Utiliser BIND sinon.</variable>
	<variable name='ad_allow_transfer_network'>Renseigner des IP ou sous-réseaux pour restreindre les machines autorisées à demander un transfert de zone auprès du serveur DNS BIND.</variable>
        <variable name='ad_additional_dc_force_site'>Forcer le positionnement dans un site Active Directory déclaré au préalable dans le contrôleur de domaine principal</variable>
        <variable name='ad_additional_dc_site'>Si cette variable est renseignée, alors ce contrôleur de domain sera placé dans le site correspondant. Ce site doit exister dans l'AD.</variable>
        <variable name='ad_filter_network'>Passer à oui pour permettre l’accès aux services AD aux seules IP déclarées (sinon, l’accès aux services AD n’est pas restreint).</variable>
        <variable name='ad_peer_ip'>Adresses réseau identifiant les clients et serveurs autorisées à se connecter aux services principaux de l’AD (LDAP excepté).</variable>
        <variable name='ad_ldap_clients_ip'>Le service LDAP peut être accessible à des postes autres que les serveurs et postes clients du domaine. Leur adresse IP est nécessaire pour ouvrir le pare-feu.</variable>
        <variable name='ad_custom_rpc_port'>Si aucun port n’est spécifié, le premier port libre de la plage 1024-5000 est utilisé.</variable>
        <variable name='ad_custom_netlogon_port'>Si aucun port n’est spécifié, le premier port libre de la plage 1024-5000 est utilisé.</variable>
        <variable name='ad_dc_sysvol_ref'>Adresse IP d’un contrôleur de domaine utilisé comme référence SYSVOL</variable>
        <variable name='ad_dc_sysvol_type'>Type de contrôleur de domaine utilisé comme référence SYSVOL</variable>
        <variable name='ad_dc_sysvol_post_join_cmd'>Saisir le chemin complet du script 'distant' à exécuter aprés la jonction sur le DC de référence</variable>
        <variable name='ad_idmap_config_auto'>Utiliser la configuration par défaut du calcul des identifiants à partir du rid (idmap config *:backend = autorid)</variable>
        <variable name='ad_idmap_config_domain'>Domaine pour lequel configurer la méthode de calcul des identifiants</variable>
        <variable name='ad_idmap_config_backend'>Méthode de calcul des identifiants</variable>
        <variable name='ad_idmap_config_low'>Limite basse de la plage des ID réservés pour le domaine</variable>
        <variable name='ad_idmap_config_high'>Limite haute de la plage des ID réservés pour le domaine</variable>
        <variable name='ad_idmap_config_tdb_low'>Limite basse de la plage des ID réservés pour le backend idmap tdb</variable>
        <variable name='ad_idmap_config_tdb_high'>Limite haute de la plage des ID réservés pour le backend idmap tdb</variable>
        <variable name='ad_force_domain_sid'>Forcer le SID est utile dans le cas d’une migration Samba NT vers AD</variable>
        <variable name='ad_domain_sid'>Dans le cas d'une migration Samba NT, cette valeur permet d'initialiser l'AD avec le SID choisi</variable>
        <variable name='ad_home_share_path'>Répertoire de destination des dossiers personnels des utilisateurs de l'AD</variable>
        <variable name="activer_ad_homes_share">Créer le partage hébergeant les dossiers personnels (Home Directory) des utilisateurs</variable>
        <variable name="activer_ad_profiles_share">Créer les partages hébergeant le dossiers contenant les profils Windows (Profile Path) des utilisateurs</variable>
        <variable name="ad_recycle_bin">Charger le module VFS recycle pour permettre d’utiliser les fonctionnalités de corbeilles dans les partages (activées au cas par cas)</variable>
    </help>

</creole>
