Subversion Repositories ALCASAR

Rev

Rev 2714 | Rev 2731 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2714 Rev 2718
Line 1... Line 1...
1
<?php
1
<?php
2
# $Id: ldap.php 2714 2019-03-10 23:43:22Z tom.houdayer $
2
# $Id: ldap.php 2718 2019-03-11 21:25:44Z tom.houdayer $
3
 
3
 
4
/* written by steweb57, Rexy & Tom HOUDAYER */
4
/* written by steweb57, Rexy & Tom HOUDAYER */
5
/****************************************************************
5
/****************************************************************
6
*			GLOBAL FILE PATHS			*
6
*			GLOBAL FILE PATHS			*
7
*****************************************************************/
7
*****************************************************************/
Line 67... Line 67...
67
	$l_ldap_ssl_text		= "Utiliser une connexion chiffré avec SSL (LDAPS)";
67
	$l_ldap_ssl_text		= "Utiliser une connexion chiffré avec SSL (LDAPS)";
68
	$l_ldap_cert_required_label	= "Vérifier le certificat SSL";
68
	$l_ldap_cert_required_label	= "Vérifier le certificat SSL";
69
	$l_ldap_cert_required_text	= "Vérifier que le serveur LDAP utilise un certificat connu";
69
	$l_ldap_cert_required_text	= "Vérifier que le serveur LDAP utilise un certificat connu";
70
	$l_ldap_cert_label		= "Certificat SSL (CA)";
70
	$l_ldap_cert_label		= "Certificat SSL (CA)";
71
	$l_ldap_cert_text		= "Certificat de l'authorité de certification signant celui du serveur LDAP";
71
	$l_ldap_cert_text		= "Certificat de l'authorité de certification signant celui du serveur LDAP";
-
 
72
	$l_ad_dns_domain_label		= "Nom de domaine interne";
-
 
73
	$l_ad_dns_domain_text		= "Nom de domaine qui sera redirigé vers le serveur DNS de l'annuaire LDAP (vide pour désactivé)";
72
	$l_ldap_cert_status_cur		= "Certificat actuel : ";
74
	$l_ldap_cert_status_cur		= "Certificat actuel : ";
73
	$l_ldap_cert_status_no		= "Aucun certificat installé";
75
	$l_ldap_cert_status_no		= "Aucun certificat installé";
74
	$l_ldap_submit			= "Enregistrer";
76
	$l_ldap_submit			= "Enregistrer";
75
	$l_ldap_test_service_failed	= "Service LDAP injoignable sur ce serveur (vérifiez l'@IP).";
77
	$l_ldap_test_service_failed	= "Service LDAP injoignable sur ce serveur (vérifiez l'@IP).";
76
	$l_ldap_test_service_ok		= "Un port 389 (636 avec SSL) est actif sur ce serveur";
78
	$l_ldap_test_service_ok		= "Un port 389 (636 avec SSL) est actif sur ce serveur";
Line 108... Line 110...
108
	$l_ldap_ssl_text		= "Use an encrypted connection with SSL (LDAPS)";
110
	$l_ldap_ssl_text		= "Use an encrypted connection with SSL (LDAPS)";
109
	$l_ldap_cert_required_label	= "Check the SSL certificate";
111
	$l_ldap_cert_required_label	= "Check the SSL certificate";
110
	$l_ldap_cert_required_text	= "Verify that the LDAP server uses a trusted certificate";
112
	$l_ldap_cert_required_text	= "Verify that the LDAP server uses a trusted certificate";
111
	$l_ldap_cert_label		= "SSL certificate (CA)";
113
	$l_ldap_cert_label		= "SSL certificate (CA)";
112
	$l_ldap_cert_text		= "Certificate of the certification authority that signed the LDAP server certificate";
114
	$l_ldap_cert_text		= "Certificate of the certification authority that signed the LDAP server certificate";
-
 
115
	$l_ad_dns_domain_label		= "Internal domain name";
-
 
116
	$l_ad_dns_domain_text		= "Domain name that will be forwarded to the DNS server of the LDAP directory (empty for disabled)";
113
	$l_ldap_cert_status_cur		= "Current certificate:";
117
	$l_ldap_cert_status_cur		= "Current certificate:";
114
	$l_ldap_cert_status_no		= "No certificate imported";
118
	$l_ldap_cert_status_no		= "No certificate imported";
115
	$l_ldap_submit			= "Save";
119
	$l_ldap_submit			= "Save";
116
	$l_ldap_test_service_failed	= "LDAP service is not reachable on that server (check IP)";
120
	$l_ldap_test_service_failed	= "LDAP service is not reachable on that server (check IP)";
117
	$l_ldap_test_service_ok		= "A port 389 (636 with SSL) is open on this server";
121
	$l_ldap_test_service_ok		= "A port 389 (636 with SSL) is open on this server";
Line 126... Line 130...
126
	$l_ldap_entries			= "entries in the base";
130
	$l_ldap_entries			= "entries in the base";
127
	$l_check			= "Check this config";
131
	$l_check			= "Check this config";
128
	$l_checkingConf			= "Checking this configuration...";
132
	$l_checkingConf			= "Checking this configuration...";
129
}
133
}
130
 
134
 
-
 
135
// AJAX LDAP assitant
-
 
136
if (isset($_GET['assistant'])) {
-
 
137
	$response = [
-
 
138
		'values' => []
-
 
139
	];
-
 
140
	if (!isset($_POST['ldap_server'])) exit();
-
 
141
	$ldap_server = $_POST['ldap_server'];
-
 
142
 
-
 
143
	// Check port 389 & 636
-
 
144
	if (!$sock = @fsockopen($ldap_server, 389, $num, $error, 2)) {
-
 
145
		$ldap_port_389 = false;
-
 
146
		$ldap_srv_389  = false;
-
 
147
	} else {
-
 
148
		$ldap_port_389 = true;
-
 
149
		fclose($sock);
-
 
150
	}
-
 
151
	if (!$sock = @fsockopen($ldap_server, 636, $num, $error, 2)) {
-
 
152
		$ldap_port_636 = false;
-
 
153
		$ldap_srv_636  = false;
-
 
154
		$ldap_ssl      = false;
-
 
155
	} else {
-
 
156
		$ldap_port_636 = true;
-
 
157
		$ldap_ssl      = true;
-
 
158
		fclose($sock);
-
 
159
	}
-
 
160
 
-
 
161
	if (!$ldap_port_389 && !$ldap_port_636) {
-
 
162
		$response['result'] = -2;
-
 
163
 
-
 
164
		header('Content-Type: application/json');
-
 
165
		echo json_encode($response);
-
 
166
		exit();
-
 
167
	}
-
 
168
 
-
 
169
	// Check LDAP service
-
 
170
	if ($ldap_port_636) {
-
 
171
if (PHP_VERSION_ID >= 70100):
-
 
172
		// Set LDAP SSL options
-
 
173
		ldap_set_option(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
-
 
174
endif;
-
 
175
		$ldapconn = @ldap_connect('ldaps://'.$ldap_server);
-
 
176
		if (!$ldapconn) {
-
 
177
			$ldap_srv_636 = false;
-
 
178
		} else {
-
 
179
			ldap_set_option($ldapconn, LDAP_OPT_TIMELIMIT, 2);
-
 
180
 
-
 
181
			// Bind anonymous
-
 
182
			$ldap_srv_636 = true;
-
 
183
			if (!@ldap_bind($ldapconn, '', '')) {
-
 
184
				ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
-
 
185
				if (!@ldap_bind($ldapconn, '', '')) {
-
 
186
					$ldap_srv_636 = false;
-
 
187
				}
-
 
188
			}
-
 
189
		}
-
 
190
 
-
 
191
		if ($ldap_srv_636) {
-
 
192
			$ldap_data    = @ldap_read($ldapconn, '', 'objectClass=*', ['dnsHostName','rootDomainNamingContext','supportedCapabilities']);
-
 
193
			$ldap_rootDSE = @ldap_get_entries($ldapconn, $ldap_data);
-
 
194
 
-
 
195
			try {
-
 
196
				$response['values']['isAD'] = in_array('1.2.840.113556.1.4.800', $ldap_rootDSE[0]['supportedcapabilities']);
-
 
197
			} catch (Exception $e) {
-
 
198
				$response['values']['isAD'] = false;
-
 
199
			}
-
 
200
 
-
 
201
			if ($response['values']['isAD']) {
-
 
202
				try {
-
 
203
					$response['values']['ldap_base_dn'] = $ldap_rootDSE[0]['rootdomainnamingcontext'][0];
-
 
204
 
-
 
205
					if ($response['values']['ldap_base_dn']) {
-
 
206
						$response['values']['int_dns_domain'] = str_replace('DC=', '', str_replace(',DC=', '.', $response['values']['ldap_base_dn']));
-
 
207
					}
-
 
208
 
-
 
209
					$response['values']['ldap_base_dn'] = 'CN=Users,'.$response['values']['ldap_base_dn'];
-
 
210
				} catch (Exception $e) { }
-
 
211
 
-
 
212
				try {
-
 
213
					$response['values']['ldap_server_domain'] = $ldap_rootDSE[0]['dnshostname'][0];
-
 
214
				} catch (Exception $e) { }
-
 
215
			}
-
 
216
		}
-
 
217
	}
-
 
218
	$response['values']['ldap_srv_636'] = $ldap_srv_636;
-
 
219
 
-
 
220
	if (!$ldap_srv_636) {
-
 
221
		$ldapconn = @ldap_connect('ldap://'.$ldap_server);
-
 
222
		if (!$ldapconn) {
-
 
223
			$ldap_srv_389 = false;
-
 
224
		} else {
-
 
225
			ldap_set_option($ldapconn, LDAP_OPT_TIMELIMIT, 2);
-
 
226
 
-
 
227
			// Bind anonymous
-
 
228
			$ldap_srv_389 = true;
-
 
229
			if (!@ldap_bind($ldapconn, '', '')) {
-
 
230
				ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
-
 
231
				if (!@ldap_bind($ldapconn, '', '')) {
-
 
232
					$ldap_srv_389 = false;
-
 
233
				}
-
 
234
			}
-
 
235
		}
-
 
236
 
-
 
237
		if ($ldap_srv_389) {
-
 
238
			$ldap_data    = @ldap_read($ldapconn, '', 'objectClass=*', ['dnsHostName','rootDomainNamingContext','supportedCapabilities']);
-
 
239
			$ldap_rootDSE = @ldap_get_entries($ldapconn, $ldap_data);
-
 
240
 
-
 
241
			try {
-
 
242
				$response['values']['isAD'] = in_array('1.2.840.113556.1.4.800', $ldap_rootDSE[0]['supportedcapabilities']);
-
 
243
			} catch (Exception $e) {
-
 
244
				$response['values']['isAD'] = false;
-
 
245
			}
-
 
246
 
-
 
247
			if ($response['values']['isAD']) {
-
 
248
				try {
-
 
249
					$response['values']['ldap_base_dn'] = $ldap_rootDSE[0]['rootdomainnamingcontext'][0];
-
 
250
 
-
 
251
					if ($response['values']['ldap_base_dn']) {
-
 
252
						$response['values']['int_dns_domain'] = str_replace('DC=', '', str_replace(',DC=', '.', $response['values']['ldap_base_dn']));
-
 
253
					}
-
 
254
 
-
 
255
					$response['values']['ldap_base_dn'] = 'CN=Users,'.$response['values']['ldap_base_dn'];
-
 
256
				} catch (Exception $e) { }
-
 
257
 
-
 
258
				try {
-
 
259
					$response['values']['ldap_server_domain'] = $ldap_rootDSE[0]['dnshostname'][0];
-
 
260
				} catch (Exception $e) { }
-
 
261
			}
-
 
262
		}
-
 
263
		$response['values']['ldap_srv_389'] = $ldap_srv_389;
-
 
264
	}
-
 
265
 
-
 
266
	if (!$ldap_srv_636 && !$ldap_srv_389) {
-
 
267
		$response['result'] = -1;
-
 
268
 
-
 
269
		header('Content-Type: application/json');
-
 
270
		echo json_encode($response);
-
 
271
		exit();
-
 
272
	}
-
 
273
 
-
 
274
	$response['result'] = 0;
-
 
275
	header('Content-Type: application/json');
-
 
276
	echo json_encode($response);
-
 
277
	exit();
-
 
278
}
-
 
279
 
131
function ldap_checkServerConfig($f_ldap_server, $f_ldap_identity, $f_ldap_password, $f_ldap_basedn, $f_ldap_base_filter, $f_ldap_uid, $f_ldap_ssl, $f_ldap_cert, $f_ldap_cert_required) {
280
function ldap_checkServerConfig($f_ldap_server, $f_ldap_identity, $f_ldap_password, $f_ldap_basedn, $f_ldap_base_filter, $f_ldap_uid, $f_ldap_ssl, $f_ldap_cert, $f_ldap_cert_required) {
132
	// Socket to the LDAP port of the server
281
	// Socket to the LDAP port of the server
133
	if (!$sock = @fsockopen($f_ldap_server, (($f_ldap_ssl) ? 636 : 389), $num, $error, 2)) {
282
	if (!$sock = @fsockopen($f_ldap_server, (($f_ldap_ssl) ? 636 : 389), $num, $error, 2)) {
134
		// no network connection
283
		// no network connection
135
		return -2;
284
		return -2;
136
	}
285
	}
137
	fclose($sock);
286
	fclose($sock);
138
 
287
 
-
 
288
if (PHP_VERSION_ID >= 70100):
139
	// Set LDAP SSL options
289
	// Set LDAP SSL options
140
	if ($f_ldap_ssl) {
290
	if ($f_ldap_ssl) {
141
		if ($f_ldap_cert_required) {
291
		if ($f_ldap_cert_required) {
142
			if ($f_ldap_cert) {
292
			if ($f_ldap_cert) {
143
				ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE, $f_ldap_cert);
293
				ldap_set_option(null, LDAP_OPT_X_TLS_CACERTFILE, $f_ldap_cert);
144
			}
294
			}
145
			ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_DEMAND);
295
			ldap_set_option(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_DEMAND);
146
 
296
 
147
		} else {
297
		} else {
148
			ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
298
			ldap_set_option(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
149
		}
299
		}
150
	}
300
	}
-
 
301
endif;
151
 
302
 
152
	// if ok, Test LDAP connection
303
	// if ok, Test LDAP connection
153
	$ldapconn = @ldap_connect((($f_ldap_ssl)?'ldaps':'ldap').'://'.$f_ldap_server);
304
	$ldapconn = @ldap_connect((($f_ldap_ssl)?'ldaps':'ldap').'://'.$f_ldap_server);
154
	if (!$ldapconn) {
305
	if (!$ldapconn) {
155
		// LDAP connection failed
306
		// LDAP connection failed
Line 222... Line 373...
222
			exec('sed -i '.escapeshellarg("s/^LDAP_UID=.*/LDAP_UID=$ldap_uid/g").' '.CONF_FILE);
373
			exec('sed -i '.escapeshellarg("s/^LDAP_UID=.*/LDAP_UID=$ldap_uid/g").' '.CONF_FILE);
223
			exec('sed -i '.escapeshellarg("s/^LDAP_FILTER=.*/LDAP_FILTER=$ldap_base_filter/g").' '.CONF_FILE);
374
			exec('sed -i '.escapeshellarg("s/^LDAP_FILTER=.*/LDAP_FILTER=$ldap_base_filter/g").' '.CONF_FILE);
224
			exec('sed -i '.escapeshellarg("s/^LDAP_USER=.*/LDAP_USER=$ldap_user/g").' '.CONF_FILE);
375
			exec('sed -i '.escapeshellarg("s/^LDAP_USER=.*/LDAP_USER=$ldap_user/g").' '.CONF_FILE);
225
			exec('sed -i '.escapeshellarg("s/^LDAP_PASSWORD=.*/LDAP_PASSWORD=$ldap_password/g").' '.CONF_FILE);
376
			exec('sed -i '.escapeshellarg("s/^LDAP_PASSWORD=.*/LDAP_PASSWORD=$ldap_password/g").' '.CONF_FILE);
226
			exec('sed -i '.escapeshellarg("s/^LDAP_SSL=.*/LDAP_SSL=$ldap_ssl/g").' '.CONF_FILE);
377
			exec('sed -i '.escapeshellarg("s/^LDAP_SSL=.*/LDAP_SSL=$ldap_ssl/g").' '.CONF_FILE);
-
 
378
			if (isset($ldap_cert_required)) {
227
			exec('sed -i '.escapeshellarg("s/^LDAP_CERT_REQUIRED=.*/LDAP_CERT_REQUIRED=$ldap_cert_required/g").' '.CONF_FILE);
379
				exec('sed -i '.escapeshellarg("s/^LDAP_CERT_REQUIRED=.*/LDAP_CERT_REQUIRED=$ldap_cert_required/g").' '.CONF_FILE);
-
 
380
			}
228
			exec('sed -i \'s/^LDAP=.*/LDAP=on/g\' '.CONF_FILE);
381
			exec('sed -i \'s/^LDAP=.*/LDAP=on/g\' '.CONF_FILE);
229
			if (isset($ldap_cert) && ($ldap_cert['error'] === UPLOAD_ERR_OK)) {
382
			if (isset($ldap_cert) && ($ldap_cert['error'] === UPLOAD_ERR_OK)) {
230
				exec('sudo /usr/local/bin/alcasar-ldap.sh --import-cert '.escapeshellarg($ldap_cert['tmp_name']));
383
				exec('sudo /usr/local/bin/alcasar-ldap.sh --import-cert '.escapeshellarg($ldap_cert['tmp_name']));
231
			}
384
			}
232
			exec('sudo /usr/local/bin/alcasar-ldap.sh --on');
385
			exec('sudo /usr/local/bin/alcasar-ldap.sh --on');
233
			$messages .= '<span style="font-weight: bold; color: green;">'.$l_ldap_update.'</span><br>';
386
			$messages .= '<span style="font-weight: bold; color: green;">'.$l_ldap_update.'</span><br>';
-
 
387
 
-
 
388
			if ((isset($_POST['ad_dns_domain'])) && ($_POST['ad_dns_domain'] !== $conf['INT_DNS_DOMAIN'])) {
-
 
389
				if (filter_var($ldap_server, FILTER_VALIDATE_IP) !== false) {
-
 
390
					$ldap_server_ip = $ldap_server;
-
 
391
				} else {
-
 
392
					$ldap_server_ip = gethostbyname($ldap_server);
-
 
393
				}
-
 
394
				if (filter_var($ldap_server_ip, FILTER_VALIDATE_IP) !== false) {
-
 
395
					file_put_contents(CONF_FILE, str_replace('INT_DNS_IP='.$conf['INT_DNS_IP'],         'INT_DNS_IP='.$ldap_server_ip,             file_get_contents(CONF_FILE)));
-
 
396
					file_put_contents(CONF_FILE, str_replace('INT_DNS_DOMAIN='.$conf['INT_DNS_DOMAIN'], 'INT_DNS_DOMAIN='.$_POST['ad_dns_domain'], file_get_contents(CONF_FILE)));
-
 
397
					if (!empty($_POST['ad_dns_domain'])) {
-
 
398
						exec('sudo /usr/local/bin/alcasar-dns-local.sh --on');
-
 
399
					} else {
-
 
400
						exec('sudo /usr/local/bin/alcasar-dns-local.sh --off');
-
 
401
					}
-
 
402
				}
-
 
403
			}
234
		}
404
		}
235
	} else {
405
	} else {
236
		exec('sed -i "s/^LDAP=.*/LDAP=off/g" '.CONF_FILE);
406
		exec('sed -i "s/^LDAP=.*/LDAP=off/g" '.CONF_FILE);
237
		exec('sudo /usr/local/bin/alcasar-ldap.sh --off');
407
		exec('sudo /usr/local/bin/alcasar-ldap.sh --off');
238
		$messages .= '<span style="font-weight: bold; color: green;">'.$l_ldap_update.'</span><br>';
408
		$messages .= '<span style="font-weight: bold; color: green;">'.$l_ldap_update.'</span><br>';
-
 
409
 
-
 
410
		if ((isset($_POST['ad_dns_domain'])) && (empty($_POST['ad_dns_domain']))) {
-
 
411
			exec('sudo /usr/local/bin/alcasar-dns-local.sh --off');
-
 
412
		}
239
	}
413
	}
240
 
414
 
241
	// Reload configuration
415
	// Reload configuration
242
	$file_conf = fopen(CONF_FILE, 'r');
416
	$file_conf = fopen(CONF_FILE, 'r');
243
	if (!$file_conf) {
417
	if (!$file_conf) {
Line 262... Line 436...
262
$ldap_uid	    = $conf['LDAP_UID'];
436
$ldap_uid	    = $conf['LDAP_UID'];
263
$ldap_base_filter   = $conf['LDAP_FILTER'];
437
$ldap_base_filter   = $conf['LDAP_FILTER'];
264
$ldap_ssl           = ($conf['LDAP_SSL'] === 'on');
438
$ldap_ssl           = ($conf['LDAP_SSL'] === 'on');
265
$ldap_cert_required = ($conf['LDAP_CERT_REQUIRED'] === 'on');
439
$ldap_cert_required = ($conf['LDAP_CERT_REQUIRED'] === 'on');
266
 
440
 
267
$ldap_cert_subject = NULL;
441
$ldap_cert_subject = null;
268
if (file_exists($LDAPS_CERT_LOC)) {
442
if (file_exists($LDAPS_CERT_LOC)) {
269
	$certificateInfos = openssl_x509_parse(file_get_contents($LDAPS_CERT_LOC));
443
	$certificateInfos = openssl_x509_parse(file_get_contents($LDAPS_CERT_LOC));
270
	if (preg_match_all('@/[a-zA-Z]+=([^/]+)@', $certificateInfos['name'], $matches)) {
444
	if (preg_match_all('@/[a-zA-Z]+=([^/]+)@', $certificateInfos['name'], $matches)) {
271
		$ldap_cert_subject = implode('.', array_reverse($matches[1]));
445
		$ldap_cert_subject = implode('.', array_reverse($matches[1]));
272
	}
446
	}
Line 293... Line 467...
293
		}
467
		}
294
 
468
 
295
		if (($ldap_cert_required) && isset($ldap_cert) && ($ldap_cert['error'] === UPLOAD_ERR_OK)) {
469
		if (($ldap_cert_required) && isset($ldap_cert) && ($ldap_cert['error'] === UPLOAD_ERR_OK)) {
296
			$ldap_cert_tmpFilename = $ldap_cert['tmp_name'];
470
			$ldap_cert_tmpFilename = $ldap_cert['tmp_name'];
297
		} else {
471
		} else {
298
			$ldap_cert_tmpFilename = NULL;
472
			$ldap_cert_tmpFilename = null;
299
		}
473
		}
300
 
474
 
301
		if (!empty($varErrors)) {
475
		if (!empty($varErrors)) {
302
			$response['errors'] = $varErrors;
476
			$response['errors'] = $varErrors;
303
		} else {
477
		} else {
Line 364... Line 538...
364
				document.getElementById('ldap_cert').style.backgroundColor = '#c0c0c0';
538
				document.getElementById('ldap_cert').style.backgroundColor = '#c0c0c0';
365
				document.getElementById('ldap_cert').disabled = true;
539
				document.getElementById('ldap_cert').disabled = true;
366
			}
540
			}
367
			formSubmit.style.display = 'none';
541
			formSubmit.style.display = 'none';
368
			btn_checkConf.style.display = null;
542
			btn_checkConf.style.display = null;
369
			<?php if (PHP_VERSION_ID < 70100): ?>
543
<?php if (PHP_VERSION_ID < 70100): ?>
370
			// Compatibility with PHP < 7.1.0 # TODO : remove if ever Mageia 7 is released
544
			// Compatibility with PHP < 7.1.0 # TODO : remove if ever Mageia 7 is released
371
			formSubmit.style.display = null;
545
			formSubmit.style.display = null;
372
			<?php endif; ?>
546
<?php endif; ?>
373
		} else {
547
		} else {
374
			for (var i=0; i<listToDisables.length; i++) {
548
			for (var i=0; i<listToDisables.length; i++) {
375
				document.getElementById(listToDisables[i]).style.backgroundColor = '#c0c0c0';
549
				document.getElementById(listToDisables[i]).style.backgroundColor = '#c0c0c0';
376
				document.getElementById(listToDisables[i]).disabled = true;
550
				document.getElementById(listToDisables[i]).disabled = true;
377
			}
551
			}
Line 426... Line 600...
426
						btn_checkConf.style.display = 'none';
600
						btn_checkConf.style.display = 'none';
427
					} else {
601
					} else {
428
						formSubmit.style.display = 'none';
602
						formSubmit.style.display = 'none';
429
						btn_checkConf.style.display = null;
603
						btn_checkConf.style.display = null;
430
					}
604
					}
431
					<?php if (PHP_VERSION_ID < 70100): ?>
605
<?php if (PHP_VERSION_ID < 70100): ?>
432
					// Compatibility with PHP < 7.1.0 # TODO : remove if ever Mageia 7 is released
606
					// Compatibility with PHP < 7.1.0 # TODO : remove if ever Mageia 7 is released
433
					formSubmit.style.display = null;
607
					formSubmit.style.display = null;
434
					<?php endif; ?>
608
<?php endif; ?>
435
 
609
 
436
					if (typeof data.errors !== 'undefined') {
610
					if (typeof data.errors !== 'undefined') {
437
						messages = '<span style=\"color: red\">' + data.errors.join('</span><br><span style=\"color: red\">') + '</span><br>';
611
						messages = '<span style=\"color: red\">' + data.errors.join('</span><br><span style=\"color: red\">') + '</span><br>';
438
					}
612
					}
439
					if (typeof data.warnings !== 'undefined') {
613
					if (typeof data.warnings !== 'undefined') {
Line 447... Line 621...
447
			}
621
			}
448
		};
622
		};
449
		xhr.open('POST', 'ldap.php?conf_check', true);
623
		xhr.open('POST', 'ldap.php?conf_check', true);
450
		xhr.send(post_data);
624
		xhr.send(post_data);
451
	}
625
	}
-
 
626
 
-
 
627
	function launchAssistant() {
-
 
628
		var messagesElem = document.querySelector('fieldset > legend > div');
-
 
629
		var dom_ldap_server        = document.getElementById('ldap_server');
-
 
630
		var dom_ldap_ssl           = document.getElementById('ldap_ssl');
-
 
631
		var dom_ldap_cert_required = document.getElementById('ldap_cert_required');
-
 
632
		var dom_ldap_dn            = document.getElementById('ldap_dn');
-
 
633
		var dom_ldap_uid           = document.getElementById('ldap_uid');
-
 
634
		var dom_ad_dns_domain      = document.getElementById('ad_dns_domain');
-
 
635
		post_data = 'ldap_server='+dom_ldap_server.value;
-
 
636
 
-
 
637
		var xhr = new XMLHttpRequest();
-
 
638
		xhr.onreadystatechange = function() {
-
 
639
			if (this.readyState == 4) {
-
 
640
				if (this.status == 200) {
-
 
641
					var data = JSON.parse(this.responseText);
-
 
642
					var messages = '';
-
 
643
 
-
 
644
					if (typeof data.result !== 'undefined') {
-
 
645
						if (data.result === -2) {
-
 
646
							messages += "<span style=\"color: red\"><?= $l_ldap_test_service_failed ?></span>";
-
 
647
						} else if (data.result === -1) {
-
 
648
							messages += "<br><span style=\"color: red\"><?= $l_ldap_test_connection_failed ?></span>";
-
 
649
						} else if (data.result === 0) {
-
 
650
							if ((typeof data.values.int_dns_domain !== 'undefined') && (dom_ad_dns_domain.value === '')) {
-
 
651
								dom_ad_dns_domain.value = data.values.int_dns_domain
-
 
652
							}
-
 
653
							if ((typeof data.values.ldap_base_dn !== 'undefined') && (dom_ldap_dn.value === '')) {
-
 
654
								dom_ldap_dn.value = data.values.ldap_base_dn
-
 
655
							}
-
 
656
							if (dom_ldap_uid.value === '') {
-
 
657
								if (data.values.isAD === true) {
-
 
658
									dom_ldap_uid.value = 'sAMAccountName';
-
 
659
								} else {
-
 
660
									dom_ldap_uid.value = 'uid';
-
 
661
								}
-
 
662
							}
-
 
663
							if (data.values.ldap_srv_636 === true) {
-
 
664
								dom_ldap_ssl.value = 'on'
-
 
665
								if ((typeof data.values.ldap_server_domain !== 'undefined') && (dom_ldap_cert_required.value === 'on')) {
-
 
666
									dom_ldap_server.value = data.values.ldap_server_domain
-
 
667
								}
-
 
668
							} else {
-
 
669
								if (dom_ldap_ssl.value === 'on') {
-
 
670
									dom_ldap_ssl.value = 'off';
-
 
671
								}
-
 
672
							}
-
 
673
							onLdapStatusChange();
-
 
674
						}
-
 
675
					}
-
 
676
 
-
 
677
					messagesElem.innerHTML = messages;
-
 
678
				} else {
-
 
679
					messagesElem.innerHTML = 'server error';
-
 
680
				}
-
 
681
			}
-
 
682
		};
-
 
683
		xhr.open('POST', 'ldap.php?assistant', true);
-
 
684
		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-
 
685
		xhr.send(post_data);
-
 
686
	}
452
	</script>
687
	</script>
453
</head>
688
</head>
454
<body onLoad="onLdapStatusChange();">
689
<body onLoad="onLdapStatusChange();">
455
	<div class="panel">
690
	<div class="panel">
456
		<div class="panel-header"><?= $l_ldap_legend ?></div>
691
		<div class="panel-header"><?= $l_ldap_legend ?></div>
Line 480... Line 715...
480
						<dt>
715
						<dt>
481
							<label for="ldap_server"><?= $l_ldap_server_label ?></label><br>
716
							<label for="ldap_server"><?= $l_ldap_server_label ?></label><br>
482
							<?= $l_ldap_server_text ?>
717
							<?= $l_ldap_server_text ?>
483
						</dt>
718
						</dt>
484
						<dd>
719
						<dd>
485
							<input type="text" id="ldap_server" size="40" name="ldap_server" value="<?= htmlspecialchars($ldap_server) ?>" oninput="onLdapStatusChange();">
720
							<input type="text" id="ldap_server" size="40" name="ldap_server" value="<?= htmlspecialchars($ldap_server) ?>" oninput="onLdapStatusChange();"> <button onclick="launchAssistant(); return false;"><?= 'Assistant' ?></button>
486
						</dd>
721
						</dd>
487
					</dl>
722
					</dl>
488
					<dl>
723
					<dl>
489
						<dt>
724
						<dt>
490
							<label for="ldap_dn"><?= $l_ldap_base_dn_label ?></label><br>
725
							<label for="ldap_ssl"><?= $l_ldap_ssl_label ?></label><br>
491
							<?= $l_ldap_base_dn_text ?>
726
							<?= $l_ldap_ssl_text ?><br>
492
						</dt>
727
						</dt>
493
						<dd>
728
						<dd>
494
							<input type="text" id="ldap_dn" size="40" name="ldap_base_dn" value="<?= htmlspecialchars($ldap_base_dn) ?>" oninput="onLdapStatusChange();">
729
							<select id="ldap_ssl" name="ldap_ssl" onchange="onLdapStatusChange();">
-
 
730
								<option value="on"<?= ($ldap_ssl)  ? ' selected="selected"' : '' ?>><?= $l_ldap_YES ?></option>
-
 
731
								<option value="off"<?= (!$ldap_ssl) ? ' selected="selected"' : '' ?>><?= $l_ldap_NO ?></option>
-
 
732
							</select>
495
						</dd>
733
						</dd>
496
					</dl>
734
					</dl>
497
					<dl>
735
					<dl>
498
						<dt>
736
						<dt>
499
							<label for="ldap_uid"><?= $l_ldap_uid_label ?></label><br>
737
							<label for="ldap_cert_required"><?= $l_ldap_cert_required_label ?></label><br>
500
							<?= $l_ldap_uid_text ?>
738
							<?= $l_ldap_cert_required_text ?><br>
501
						</dt>
739
						</dt>
502
						<dd>
740
						<dd>
503
							<input type="text" id="ldap_uid" size="40" name="ldap_uid" value="<?= htmlspecialchars($ldap_uid) ?>" oninput="onLdapStatusChange();">
741
							<select id="ldap_cert_required" name="ldap_cert_required" onchange="onLdapStatusChange();">
-
 
742
								<option value="on"<?= ($ldap_cert_required)  ? ' selected="selected"' : '' ?>><?= $l_ldap_YES ?></option>
-
 
743
								<option value="off"<?= (!$ldap_cert_required) ? ' selected="selected"' : '' ?>><?= $l_ldap_NO ?></option>
-
 
744
							</select>
504
						</dd>
745
						</dd>
505
					</dl>
746
					</dl>
506
					<dl>
747
					<dl>
507
						<dt>
748
						<dt>
508
							<label for="ldap_base_filter"><?= $l_ldap_base_filter_label ?></label><br>
749
							<label for="ldap_cert"><?= $l_ldap_cert_label ?></label><br>
509
							<?= $l_ldap_base_filter_text ?>
750
							<?= $l_ldap_cert_text ?><br>
-
 
751
							<?= (($ldap_cert_subject) ? "$l_ldap_cert_status_cur $ldap_cert_subject" : $l_ldap_cert_status_no ) ?>
510
						</dt>
752
						</dt>
511
						<dd>
753
						<dd>
512
							<input type="text" id="ldap_base_filter" size="40" name="ldap_base_filter" value="<?= htmlspecialchars($ldap_base_filter) ?>" oninput="onLdapStatusChange();">
754
							<input type="file" id="ldap_cert" name="ldap_cert" oninput="onLdapStatusChange();">
513
						</dd>
755
						</dd>
514
					</dl>
756
					</dl>
515
					<dl>
757
					<dl>
516
						<dt>
758
						<dt>
517
							<label for="ldap_user"><?= $l_ldap_user_label ?></label><br>
759
							<label for="ldap_user"><?= $l_ldap_user_label ?></label><br>
Line 530... Line 772...
530
							<input type="password" id="ldap_password" size="40" name="ldap_password" value="<?= htmlspecialchars($ldap_password) ?>" oninput="onLdapStatusChange();">
772
							<input type="password" id="ldap_password" size="40" name="ldap_password" value="<?= htmlspecialchars($ldap_password) ?>" oninput="onLdapStatusChange();">
531
						</dd>
773
						</dd>
532
					</dl>
774
					</dl>
533
					<dl>
775
					<dl>
534
						<dt>
776
						<dt>
535
							<label for="ldap_ssl"><?= $l_ldap_ssl_label ?></label><br>
777
							<label for="ldap_dn"><?= $l_ldap_base_dn_label ?></label><br>
536
							<?= $l_ldap_ssl_text ?><br>
778
							<?= $l_ldap_base_dn_text ?>
537
						</dt>
779
						</dt>
538
						<dd>
780
						<dd>
539
							<select id="ldap_ssl" name="ldap_ssl" onchange="onLdapStatusChange();">
781
							<input type="text" id="ldap_dn" size="40" name="ldap_base_dn" value="<?= htmlspecialchars($ldap_base_dn) ?>" oninput="onLdapStatusChange();">
540
								<option value="on"<?= ($ldap_ssl)  ? ' selected="selected"' : '' ?>><?= $l_ldap_YES ?></option>
-
 
541
								<option value="off"<?= (!$ldap_ssl) ? ' selected="selected"' : '' ?>><?= $l_ldap_NO ?></option>
-
 
542
							</select>
-
 
543
						</dd>
782
						</dd>
544
					</dl>
783
					</dl>
545
					<dl>
784
					<dl>
546
						<dt>
785
						<dt>
547
							<label for="ldap_cert_required"><?= $l_ldap_cert_required_label ?></label><br>
786
							<label for="ldap_uid"><?= $l_ldap_uid_label ?></label><br>
548
							<?= $l_ldap_cert_required_text ?><br>
787
							<?= $l_ldap_uid_text ?>
549
						</dt>
788
						</dt>
550
						<dd>
789
						<dd>
551
							<select id="ldap_cert_required" name="ldap_cert_required" onchange="onLdapStatusChange();">
790
							<input type="text" id="ldap_uid" size="40" name="ldap_uid" value="<?= htmlspecialchars($ldap_uid) ?>" oninput="onLdapStatusChange();">
552
								<option value="on"<?= ($ldap_cert_required)  ? ' selected="selected"' : '' ?>><?= $l_ldap_YES ?></option>
-
 
553
								<option value="off"<?= (!$ldap_cert_required) ? ' selected="selected"' : '' ?>><?= $l_ldap_NO ?></option>
-
 
554
							</select>
-
 
555
						</dd>
791
						</dd>
556
					</dl>
792
					</dl>
557
					<dl>
793
					<dl>
558
						<dt>
794
						<dt>
559
							<label for="ldap_cert"><?= $l_ldap_cert_label ?></label><br>
795
							<label for="ldap_base_filter"><?= $l_ldap_base_filter_label ?></label><br>
560
							<?= $l_ldap_cert_text ?><br>
796
							<?= $l_ldap_base_filter_text ?>
561
							<?= (($ldap_cert_subject) ? "$l_ldap_cert_status_cur $ldap_cert_subject" : $l_ldap_cert_status_no ) ?>
-
 
562
						</dt>
797
						</dt>
563
						<dd>
798
						<dd>
564
							<input type="file" id="ldap_cert" name="ldap_cert" oninput="onLdapStatusChange();">
799
							<input type="text" id="ldap_base_filter" size="40" name="ldap_base_filter" value="<?= htmlspecialchars($ldap_base_filter) ?>" oninput="onLdapStatusChange();">
-
 
800
						</dd>
-
 
801
					</dl>
-
 
802
					<dl>
-
 
803
						<dt>
-
 
804
							<label for="ad_dns_domain"><?= $l_ad_dns_domain_label ?></label><br>
-
 
805
							<?= $l_ad_dns_domain_text ?>
-
 
806
						</dt>
-
 
807
						<dd>
-
 
808
							<input type="text" id="ad_dns_domain" size="40" name="ad_dns_domain" value="<?= htmlspecialchars($conf['INT_DNS_DOMAIN']) ?>" oninput="onLdapStatusChange();">
565
						</dd>
809
						</dd>
566
					</dl>
810
					</dl>
567
					<p>
811
					<p>
568
						<button id="btn-checkconf" onclick="checkConfig(); return false;"><?= $l_check ?></button>
812
						<button id="btn-checkconf" onclick="checkConfig(); return false;"><?= $l_check ?></button>
569
						<input id="submit" type="submit" value="<?= $l_ldap_submit ?>" name="submit">
813
						<input id="submit" type="submit" value="<?= $l_ldap_submit ?>" name="submit">