Subversion Repositories ALCASAR

Rev

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

Rev Author Line No. Line
318 richard 1
<?php
2
/* written by steweb57 */
3
/********************************************************************
4
*	CONSTANTES AVEC CHEMINS DES FICHIERS DE CONFIGURATION			*
5
*********************************************************************/
6
 
7
define ("ALCASAR_RADIUS_SITE", "/etc/raddb/sites-available/alcasar");
8
define ("ALCASAR_RADIUS_MODULE_LDAP", "/etc/raddb/modules/ldap");
9
 
10
/********************************************************************
11
*						FONCTION ERREUR								*
12
*********************************************************************/
13
 
14
function erreur($er){
15
header('Location:ldap.php?erreur=$er');
16
exit();
17
}
18
 
19
/********************************************************************
20
*					VARIABLES DE FORMULAIRE							*
21
*********************************************************************/
22
 
23
//variables pour le parcourt des fichiers
24
//	- $ouvre : fichier ouvert
25
//	- $tampon : ligne en cours
26
//autres variables utilisées
27
//	- $fichier : fichier temporaire utilisé pour la mise à jours des fichiers de configuration
28
//	- les variables contennant les données de formulaire
29
 
30
//Récupération des variables de formulaire
31
if (isset($_POST['auth_enable'])) $auth_enable = $_POST['auth_enable']; else erreur('Erreur de variable auth_enable');
32
if ($auth_enable == "1"){	//test $auth_enable
33
	if (isset($_POST['ldap_server'])) $ldap_server = $_POST['ldap_server']; else erreur('Erreur de variable ldap_server');
34
	if (isset($_POST['ldap_base_dn'])) $ldap_base_dn = $_POST['ldap_base_dn']; else erreur('Erreur de variable ldap_base_dn');
35
	if (isset($_POST['ldap_filter'])) $ldap_filter = $_POST['ldap_filter']; else erreur('Erreur de variable ldap_filter');
36
	if (isset($_POST['ldap_base_filter'])) $ldap_base_filter = $_POST['ldap_base_filter']; else erreur('Erreur de variable ldap_base_filter');
37
	if (isset($_POST['ldap_user'])) $ldap_user = $_POST['ldap_user']; else erreur('Erreur de variable ldap_user');
38
	if (isset($_POST['ldap_password'])) $ldap_password = $_POST['ldap_password']; else erreur('Erreur de variable ldap_password');
39
}	//test $auth_enable
40
 
41
/********************************************************************
42
*				TEST DES FICHIERS DE CONFIGURATION					*
43
*********************************************************************/
44
 
45
//Test de présence et des droits en modification des fichiers de configuration.
46
if (!file_exists(ALCASAR_RADIUS_SITE)){
47
	exit("Fichier de configuration du virtual-host 'alcasar' de freeradius non présent");
48
}
49
if (!file_exists(ALCASAR_RADIUS_MODULE_LDAP)){
50
	exit("Fichier de configuration du module ldap pour freeradius non présent");
51
}
52
if (!is_writable(ALCASAR_RADIUS_SITE)){
53
	exit("Vous n'avez pas les droits d'écriture sur le fichier /etc/raddb/sites-available/alcasar");
54
}
55
if (!is_writable(ALCASAR_RADIUS_MODULE_LDAP)){
56
	exit("Vous n'avez pas les droits d'écriture sur le fichier /etc/raddb/modules/ldap");
57
}
58
 
59
/********************************************************************
60
*						VARIABLES TEMPORAIRES						*
61
*********************************************************************/
62
//création des nouveaux fichiers de configuration
63
//Initialisation de $fichier
64
$fichier = "";
65
 
66
//variables de test pour la section autorize
67
$section_autorize = false;	// indique si on est dans la section autorize
68
$num_section_autorize = 0;	// indique si on se situe dans une sous section (pouvant avoir un parametre ldap ???)
69
$nb_ldap = 0;				// indique si le paramtre ldap n'est pas saisie deux fois (y compris les commentaires)
70
//variables de test pour la section authenticate
71
$section_authenticate = false;					// indique si on est dans la section authenticate
72
$section_authenticate_section_ldap = false;		// indique si on se situe dans la sous section Auth-Type LDAP
73
$section_authenticate_section_ldap_1 = false;	// indique si Auth-Type LDAP  déjà configuré
74
$section_authenticate_section_ldap_2 = false;	// indique si parametre ldap de Auth-Type LDAP  déjà configuré
75
$section_authenticate_section_ldap_3 = false;	// indique si la fin de Auth-Type LDAP  déjà configuré
76
$num_section_authenticate = 0;
77
 
78
/********************************************************************
79
*					Fichier ALCASAR_RADIUS_SITE						*
80
*********************************************************************/
81
 
82
//Lecture du fichier /etc/raddb/sites-available/alcasar et création d'une nouvelle version du fichier.
83
$continue = true;
84
$ouvre=fopen(ALCASAR_RADIUS_SITE,"r");
85
	while (!feof ($ouvre))
86
	{
87
		$tampon = fgets($ouvre, 4096);
88
		if ((!$section_autorize) && (preg_match('`^([\s]*authorize[\s]*{[\s]*)$`',$tampon))){	//test si on est dans la section authorize
89
			$section_autorize = true;
90
		}
91
		if ((!$section_authenticate) && (preg_match('`^([\s]*authenticate[\s]*{[\s]*)$`',$tampon))){	//on est dans la section authenticate
92
			$section_authenticate = true;
93
		}
94
		/********************************************************************
95
		*						SECTION AUTHORIZE							*
96
		*********************************************************************/
97
		if ($section_autorize){ //on est dans la section authorize
98
			if ((preg_match('`^([\s[:alnum:]-_]*{[\s]*)$`',$tampon)) && (!preg_match('`^([\s]*authorize[\s]*{[\s]*)$`',$tampon))){ //on trouve des sous sections non commentées
99
				$num_section_autorize = $num_section_autorize + 1;
100
				$fichier = $fichier.$tampon;
101
			} 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!
102
				//Récupération dans la section authorise de la ligne ldap
103
				//valeur : ldap = authentification ldap authorisée
104
				//valeur : #ldap = authentification ldap non authorisée
105
				if (($auth_enable == "1") && ($nb_ldap ==0)){
106
					$fichier = $fichier."ldap\n";
107
				}else{
108
					$fichier = $fichier."# ldap\n";
109
				}
110
				$nb_ldap = $nb_ldap + 1;//calcule si le parametre ldap n'est pas présent plusieurs fois.			
111
			} elseif (preg_match('`^([\s]*}[\s]*)$`',$tampon)){ //une section se termine
112
				if ($num_section_autorize == 0){	// fin de la section authorize
113
					$section_autorize = false;
114
				} else {	// on referme une sous section
115
					$num_section_autorize = $num_section_autorize - 1;
116
				}
117
				$fichier = $fichier.$tampon;
118
			} else {
119
				$fichier = $fichier.$tampon;
120
			}
121
		//fin de section authorize
122
		} elseif (($section_authenticate)){ //on est dans la section authenticate
123
		/********************************************************************
124
		*						SECTION AUTHENTICATE						*
125
		*********************************************************************/
126
		// pas de test de sous-section!
127
			//on recherhe la section ldap
128
				##	Auth-Type LDAP {
129
				#		ldap
130
				##	}
131
			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 !)
132
				$section_authenticate_section_ldap = true;
133
				if (($auth_enable == "1") && (!$section_authenticate_section_ldap_1)){
134
					$fichier = $fichier."Auth-Type LDAP { \n";
135
				} else {
136
					$fichier = $fichier."# Auth-Type LDAP { \n";
137
				}
138
				$section_authenticate_section_ldap_1 = true;	// Auth-Type LDAP { est traité, les prochaines occurences trouvées seront tous mis en commentaire
139
			} else {
140
				if ($section_authenticate_section_ldap){ // on est dans la section Auth-Type LDAP
141
					if (preg_match('`^([\s#]*ldap[\s]*)$`',$tampon)){ //parametre  ldap
142
						if (($auth_enable == "1") && (!$section_authenticate_section_ldap_2)){
143
							$fichier = $fichier."ldap\n";
144
						} else {
145
							$fichier = $fichier."# ldap\n";
146
						}
147
						$section_authenticate_section_ldap_2 = true;	// le parametre ldap est traité, les prochaines occurences trouvées seront tous mis en commentaire
148
					} 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)
149
						if (($auth_enable == "1") && (!$section_authenticate_section_ldap_3)){
150
							$fichier = $fichier."}\n";
151
						} else {
152
							$fichier = $fichier."# }\n";
153
						}
154
						$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
155
						$section_authenticate_section_ldap = false; //inutile de continuer de parcourir la section Auth-Type LDAP
156
						$section_authenticate = false; //inutile de continuer de parcourir la section authenticate
157
					} else {
158
						$fichier = $fichier.$tampon; // on écrit tous les autres valeurs ou commentaires présents dans la section Auth-Type LDAP du fichier
159
					}
160
				} else {
161
					$fichier = $fichier.$tampon; // on écrit tous les autres valeurs ou commentaires présents dans la section authenticate du fichier
162
				}
163
			}
164
		//fin de section authenticate
165
		} else { //on est ni dans la section authorize ni dans la section authenticate
166
			$fichier = $fichier.$tampon;
167
		}
168
	}
169
fclose($ouvre);
170
 
171
 
172
//Sauvegarde du /etc/raddb/sites-available/alcasar
173
$ouvre=fopen(ALCASAR_RADIUS_SITE,"w+");
174
fwrite($ouvre, $fichier);
175
fclose($ouvre);
176
 
177
/********************************************************************
178
*					Fichier ALCASAR_RADIUS_MODULE_LDAP				*
179
*********************************************************************/
180
 
181
//	TO DO : faire le controle des doublons comme sur le fichiers précédent !
182
 
183
 
184
//on ne modifie ALCASAR_RADIUS_MODULE_LDAP uniquement si l'authentification ldap est active
185
if ($auth_enable == "1"){	//test $auth_enable
186
 
187
//Ré-Initialisation de $fichier
188
$fichier = "";
189
 
190
//Lecture du fichier /etc/raddb/modules/ldap et création d'une nouvelle version du fichier.
191
$ouvre=fopen(ALCASAR_RADIUS_MODULE_LDAP,"r");
192
	while (!feof ($ouvre))
193
	{
194
		$tampon = fgets($ouvre, 4096);
195
 
196
		if (preg_match('`^([\s#]*server(\s*)=)`',$tampon)){
197
			//Mise a jour du paramettre ldap server
198
			$fichier = $fichier."server = \"".$ldap_server."\"\n";
199
		} elseif (preg_match('`^([\s#]*identity(\s*)=)`',$tampon)){
200
			//Mise a jour du paramettre ldap identity
201
			$fichier = $fichier."identity = \"".$ldap_user."\"\n";
202
		} elseif (preg_match('`^([\s#]*password(\s*)=)`',$tampon)){
203
			//Mise a jour du paramettre ldap password
204
			$fichier = $fichier."password = ".$ldap_password."\n";
205
		} elseif (preg_match('`^([\s#]*basedn(\s*)=)`',$tampon)){
206
			//Mise a jour du paramettre ldap basedn
207
			$fichier = $fichier."basedn = \"".$ldap_base_dn."\"\n";
208
		} elseif (preg_match('`^([\s#]*filter(\s*)=)`',$tampon)){
209
			//Mise a jour du paramettre ldap filter
210
			$fichier = $fichier."filter = \"(".$ldap_filter."=%{Stripped-User-Name:-%{User-Name}})\"\n";
211
		} elseif (preg_match('`^([\s#]*base_filter(\s*)=)`',$tampon)){
212
			//Mise a jour du paramettre ldap base_filter
213
			$fichier = $fichier."base_filter = \"".$ldap_base_filter."\"\n";
214
		} else {
215
			//On ne fait rien
216
			$fichier = $fichier.$tampon;
217
		}
218
	}
219
fclose($ouvre);
220
 
221
//sauvegarde du fichier /etc/raddb/modules/ldap
222
$ouvre=fopen(ALCASAR_RADIUS_MODULE_LDAP,"w+");
223
fwrite($ouvre, $fichier);
224
fclose($ouvre);
225
 
226
}	//test $auth_enable
227
 
228
/********************************************************************
229
*					Redémarage du service radius					*
230
*********************************************************************/
231
 
232
exec ("sudo service radiusd restart");
233
 
234
/********************************************************************
235
*			Redirection vers la page de configuration LDAP			*
236
*********************************************************************/
237
 
238
header('Location:ldap.php?update=ok');
239
exit();
240
?>