Subversion Repositories ALCASAR

Rev

Go to most recent revision | Blame | Last modification | View Log

<?php
/* written by steweb57 */
/********************************************************************
*       CONSTANTES AVEC CHEMINS DES FICHIERS DE CONFIGURATION                   *
*********************************************************************/

define ("ALCASAR_RADIUS_SITE", "/etc/raddb/sites-available/alcasar");
define ("ALCASAR_RADIUS_MODULE_LDAP", "/etc/raddb/modules/ldap");

/********************************************************************
*                                               FONCTION ERREUR                                                         *
*********************************************************************/

function erreur($er){
header('Location:ldap.php?erreur=$er');
exit();
}

/********************************************************************
*                                       VARIABLES DE FORMULAIRE                                                 *
*********************************************************************/

//variables pour le parcourt des fichiers
//      - $ouvre : fichier ouvert
//      - $tampon : ligne en cours
//autres variables utilisées
//      - $fichier : fichier temporaire utilisé pour la mise à jours des fichiers de configuration
//      - les variables contennant les données de formulaire

//Récupération des variables de formulaire
if (isset($_POST['auth_enable'])) $auth_enable = $_POST['auth_enable']; else erreur('Erreur de variable auth_enable');
if ($auth_enable == "1"){       //test $auth_enable
        if (isset($_POST['ldap_server'])) $ldap_server = $_POST['ldap_server']; else erreur('Erreur de variable ldap_server');
        if (isset($_POST['ldap_base_dn'])) $ldap_base_dn = $_POST['ldap_base_dn']; else erreur('Erreur de variable ldap_base_dn');
        if (isset($_POST['ldap_filter'])) $ldap_filter = $_POST['ldap_filter']; else erreur('Erreur de variable ldap_filter');
        if (isset($_POST['ldap_base_filter'])) $ldap_base_filter = $_POST['ldap_base_filter']; else erreur('Erreur de variable ldap_base_filter');
        if (isset($_POST['ldap_user'])) $ldap_user = $_POST['ldap_user']; else erreur('Erreur de variable ldap_user');
        if (isset($_POST['ldap_password'])) $ldap_password = $_POST['ldap_password']; else erreur('Erreur de variable ldap_password');
}       //test $auth_enable

/********************************************************************
*                               TEST DES FICHIERS DE CONFIGURATION                                      *
*********************************************************************/

//Test de présence et des droits en modification des fichiers de configuration.
if (!file_exists(ALCASAR_RADIUS_SITE)){
        exit("Fichier de configuration du virtual-host 'alcasar' de freeradius non présent");
}
if (!file_exists(ALCASAR_RADIUS_MODULE_LDAP)){
        exit("Fichier de configuration du module ldap pour freeradius non présent");
}
if (!is_writable(ALCASAR_RADIUS_SITE)){
        exit("Vous n'avez pas les droits d'écriture sur le fichier /etc/raddb/sites-available/alcasar");
}
if (!is_writable(ALCASAR_RADIUS_MODULE_LDAP)){
        exit("Vous n'avez pas les droits d'écriture sur le fichier /etc/raddb/modules/ldap");
}

/********************************************************************
*                                               VARIABLES TEMPORAIRES                                           *
*********************************************************************/
//création des nouveaux fichiers de configuration
//Initialisation de $fichier
$fichier = "";

//variables de test pour la section autorize
$section_autorize = false;      // indique si on est dans la section autorize
$num_section_autorize = 0;      // indique si on se situe dans une sous section (pouvant avoir un parametre ldap ???)
$nb_ldap = 0;                           // indique si le paramtre ldap n'est pas saisie deux fois (y compris les commentaires)
//variables de test pour la section authenticate
$section_authenticate = false;                                  // indique si on est dans la section authenticate
$section_authenticate_section_ldap = false;             // indique si on se situe dans la sous section Auth-Type LDAP
$section_authenticate_section_ldap_1 = false;   // indique si Auth-Type LDAP  déjà configuré
$section_authenticate_section_ldap_2 = false;   // indique si parametre ldap de Auth-Type LDAP  déjà configuré
$section_authenticate_section_ldap_3 = false;   // indique si la fin de Auth-Type LDAP  déjà configuré
$num_section_authenticate = 0;

/********************************************************************
*                                       Fichier ALCASAR_RADIUS_SITE                                             *
*********************************************************************/

//Lecture du fichier /etc/raddb/sites-available/alcasar et création d'une nouvelle version du fichier.
$continue = true;
$ouvre=fopen(ALCASAR_RADIUS_SITE,"r");
        while (!feof ($ouvre))
        {
                $tampon = fgets($ouvre, 4096);
                if ((!$section_autorize) && (preg_match('`^([\s]*authorize[\s]*{[\s]*)$`',$tampon))){   //test si on est dans la section authorize
                        $section_autorize = true;
                }
                if ((!$section_authenticate) && (preg_match('`^([\s]*authenticate[\s]*{[\s]*)$`',$tampon))){    //on est dans la section authenticate
                        $section_authenticate = true;
                }
                /********************************************************************
                *                                               SECTION AUTHORIZE                                                       *
                *********************************************************************/
                if ($section_autorize){ //on est dans la section authorize
                        if ((preg_match('`^([\s[:alnum:]-_]*{[\s]*)$`',$tampon)) && (!preg_match('`^([\s]*authorize[\s]*{[\s]*)$`',$tampon))){ //on trouve des sous sections non commentées
                                $num_section_autorize = $num_section_autorize + 1;
                                $fichier = $fichier.$tampon;
                        } elseif ((preg_match('`^([\s#]*ldap[\s]*)$`',$tampon))&&($num_section_autorize == 0)){ // conf du parametre ldap uniquement si l'on n'est pas dans une sous section!
                                //Récupération dans la section authorise de la ligne ldap
                                //valeur : ldap = authentification ldap authorisée
                                //valeur : #ldap = authentification ldap non authorisée
                                if (($auth_enable == "1") && ($nb_ldap ==0)){
                                        $fichier = $fichier."ldap\n";
                                }else{
                                        $fichier = $fichier."# ldap\n";
                                }
                                $nb_ldap = $nb_ldap + 1;//calcule si le parametre ldap n'est pas présent plusieurs fois.                       
                        } elseif (preg_match('`^([\s]*}[\s]*)$`',$tampon)){ //une section se termine
                                if ($num_section_autorize == 0){        // fin de la section authorize
                                        $section_autorize = false;
                                } else {        // on referme une sous section
                                        $num_section_autorize = $num_section_autorize - 1;
                                }
                                $fichier = $fichier.$tampon;
                        } else {
                                $fichier = $fichier.$tampon;
                        }
                //fin de section authorize
                } elseif (($section_authenticate)){ //on est dans la section authenticate
                /********************************************************************
                *                                               SECTION AUTHENTICATE                                            *
                *********************************************************************/
                // pas de test de sous-section!
                        //on recherhe la section ldap
                                ##      Auth-Type LDAP {
                                #               ldap
                                ##      }
                        if (preg_match('`^([\s#]*Auth-Type[\s]*LDAP[\s]{[\s]*)$`',$tampon)) { // test si on est dans la sous section Auth-Type LDAP (commentée ou non !)
                                $section_authenticate_section_ldap = true;
                                if (($auth_enable == "1") && (!$section_authenticate_section_ldap_1)){
                                        $fichier = $fichier."Auth-Type LDAP { \n";
                                } else {
                                        $fichier = $fichier."# Auth-Type LDAP { \n";
                                }
                                $section_authenticate_section_ldap_1 = true;    // Auth-Type LDAP { est traité, les prochaines occurences trouvées seront tous mis en commentaire
                        } else {
                                if ($section_authenticate_section_ldap){ // on est dans la section Auth-Type LDAP
                                        if (preg_match('`^([\s#]*ldap[\s]*)$`',$tampon)){ //parametre  ldap
                                                if (($auth_enable == "1") && (!$section_authenticate_section_ldap_2)){
                                                        $fichier = $fichier."ldap\n";
                                                } else {
                                                        $fichier = $fichier."# ldap\n";
                                                }
                                                $section_authenticate_section_ldap_2 = true;    // le parametre ldap est traité, les prochaines occurences trouvées seront tous mis en commentaire
                                        } elseif (preg_match('`^([\s#]*}[\s]*)$`',$tampon)){    //fin de section Auth-Type LDAP (le premier #} ou } trouvé dans la section Auth-Type LDAP indique la fin de la section)
                                                if (($auth_enable == "1") && (!$section_authenticate_section_ldap_3)){
                                                        $fichier = $fichier."}\n";
                                                } else {
                                                        $fichier = $fichier."# }\n";
                                                }
                                                $section_authenticate_section_ldap_3 = true;    // } de fin de section Auth-Type LDAP est traité, les prochaines occurences trouvées seront tous mis en commentaire   //!inutile
                                                $section_authenticate_section_ldap = false; //inutile de continuer de parcourir la section Auth-Type LDAP
                                                $section_authenticate = false; //inutile de continuer de parcourir la section authenticate
                                        } else {
                                                $fichier = $fichier.$tampon; // on écrit tous les autres valeurs ou commentaires présents dans la section Auth-Type LDAP du fichier
                                        }
                                } else {
                                        $fichier = $fichier.$tampon; // on écrit tous les autres valeurs ou commentaires présents dans la section authenticate du fichier
                                }
                        }
                //fin de section authenticate
                } else { //on est ni dans la section authorize ni dans la section authenticate
                        $fichier = $fichier.$tampon;
                }
        }
fclose($ouvre);


//Sauvegarde du /etc/raddb/sites-available/alcasar
$ouvre=fopen(ALCASAR_RADIUS_SITE,"w+");
fwrite($ouvre, $fichier);
fclose($ouvre);

/********************************************************************
*                                       Fichier ALCASAR_RADIUS_MODULE_LDAP                              *
*********************************************************************/

//      TO DO : faire le controle des doublons comme sur le fichiers précédent !


//on ne modifie ALCASAR_RADIUS_MODULE_LDAP uniquement si l'authentification ldap est active
if ($auth_enable == "1"){       //test $auth_enable

//Ré-Initialisation de $fichier
$fichier = "";

//Lecture du fichier /etc/raddb/modules/ldap et création d'une nouvelle version du fichier.
$ouvre=fopen(ALCASAR_RADIUS_MODULE_LDAP,"r");
        while (!feof ($ouvre))
        {
                $tampon = fgets($ouvre, 4096);
        
                if (preg_match('`^([\s#]*server(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap server
                        $fichier = $fichier."server = \"".$ldap_server."\"\n";
                } elseif (preg_match('`^([\s#]*identity(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap identity
                        $fichier = $fichier."identity = \"".$ldap_user."\"\n";
                } elseif (preg_match('`^([\s#]*password(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap password
                        $fichier = $fichier."password = ".$ldap_password."\n";
                } elseif (preg_match('`^([\s#]*basedn(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap basedn
                        $fichier = $fichier."basedn = \"".$ldap_base_dn."\"\n";
                } elseif (preg_match('`^([\s#]*filter(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap filter
                        $fichier = $fichier."filter = \"(".$ldap_filter."=%{Stripped-User-Name:-%{User-Name}})\"\n";
                } elseif (preg_match('`^([\s#]*base_filter(\s*)=)`',$tampon)){
                        //Mise a jour du paramettre ldap base_filter
                        $fichier = $fichier."base_filter = \"".$ldap_base_filter."\"\n";
                } else {
                        //On ne fait rien
                        $fichier = $fichier.$tampon;
                }
        }
fclose($ouvre);

//sauvegarde du fichier /etc/raddb/modules/ldap
$ouvre=fopen(ALCASAR_RADIUS_MODULE_LDAP,"w+");
fwrite($ouvre, $fichier);
fclose($ouvre);

}       //test $auth_enable

/********************************************************************
*                                       Redémarage du service radius                                   *
*********************************************************************/

exec ("sudo service radiusd restart");

/********************************************************************
*                       Redirection vers la page de configuration LDAP                  *
*********************************************************************/

header('Location:ldap.php?update=ok');
exit();
?>

Generated by GNU Enscript 1.6.6.