Subversion Repositories ALCASAR

Rev

Rev 2241 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
345 richard 1
<?php
2207 tom.houday 2
# $Id: index.php 2242 2017-05-20 22:40:33Z tom.houdayer $
3
#
2111 richard 4
# change user password on ALACASAR NAC
345 richard 5
# Copyright (C) 2003, 2004 Mondru AB.
2111 richard 6
# Copyright (C) 2008-20017 ANGEL95 & REXY
345 richard 7
 
2241 tom.houday 8
/****************************************************************
9
*			GLOBAL FILE PATHS			*
10
*****************************************************************/
2207 tom.houday 11
define('CONF_FILE', '/usr/local/etc/alcasar.conf');
12
 
2241 tom.houday 13
/****************************************************************
14
*			FILE reading test			*
15
*****************************************************************/
16
$conf_files = array(CONF_FILE);
17
foreach ($conf_files as $file) {
18
	if (!file_exists($file)) {
19
		exit("Fichier $file non présent");
20
	}
21
	if (!is_readable($file)) {
22
		exit("Vous n'avez pas les droits de lecture sur le fichier $file");
23
	}
24
}
25
 
26
/****************************************************************
27
*			Read CONF_FILE				*
28
*****************************************************************/
2207 tom.houday 29
$file_conf = fopen(CONF_FILE, 'r');
30
if (!$file_conf) {
31
	exit('Error opening the file '.CONF_FILE);
32
}
33
while (!feof($file_conf)) {
2241 tom.houday 34
	$buffer = fgets($file_conf, 4096);
35
	if ((strpos($buffer, '=') !== false) && (substr($buffer, 0, 1) !== '#')) {
36
		$tmp = explode('=', $buffer);
2207 tom.houday 37
		$conf[$tmp[0]] = trim($tmp[1]);
38
	}
39
}
40
fclose($file_conf);
41
 
345 richard 42
require('/etc/freeradius-web/config.php');
43
 
2163 tom.houday 44
$current_page = htmlspecialchars($_SERVER['PHP_SELF']);
2241 tom.houday 45
$homepage = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')) ? 'https' : 'http').'://'.$conf['HOSTNAME'].'.'.$conf['DOMAIN'];
345 richard 46
 
2241 tom.houday 47
// Choice of language
912 richard 48
$Language = 'en';
2241 tom.houday 49
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
50
	$Langue = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
51
	$Language = strtolower(substr(chop($Langue[0]), 0, 2));
2111 richard 52
}
2241 tom.houday 53
if ($Language === 'es') {		// Spanish
54
	$l_title			= "User password change";
55
	$l_form_l1			= "User";
56
	$l_form_l2			= "Old password";
57
	$l_form_l3			= "New password";
58
	$l_form_l4			= "New password (confirmation)";
59
	$l_eval_pass			= "Score :";
60
	$l_passwordmeter		= "Powered by 'Shibbo Password Analyser'";
61
	$l_form_button_valid		= "Modify";
62
	$l_form_button_retour		= "Cancel";
63
	$l_form_result1			= "Your password has been successfuly changed";
64
	$l_form_result2			= "Error when trying to change password";
65
} else if ($Language === 'pt') {	// Portuguese
66
	$l_title			= "Alteração de senha do usuário";
67
	$l_form_l1			= "Usuário";
68
	$l_form_l2			= "Senha antiga";
69
	$l_form_l3			= "Nova senha";
70
	$l_form_l4			= "Nova senha (confirmação)";
71
	$l_eval_pass			= "Resultado:";
72
	$l_passwordmeter		= "Powered by 'Shibbo Password Analyser'";
73
	$l_form_button_valid		= "Modificar";
74
	$l_form_button_retour		= "Cancelar";
75
	$l_form_result1			= "Sua senha foi alterada com sucesso";
76
	$l_form_result2			= "Erro ao tentar alterar a senha";
77
} else if ($Language === 'de') {	// German
78
	$l_title			= "User password change";
79
	$l_form_l1			= "User";
80
	$l_form_l2			= "Old password";
81
	$l_form_l3			= "New password";
82
	$l_form_l4			= "New password (confirmation)";
83
	$l_eval_pass			= "Score :";
84
	$l_passwordmeter		= "Powered by 'Shibbo Password Analyser'";
85
	$l_form_button_valid		= "Modify";
86
	$l_form_button_retour		= "Cancel";
87
	$l_form_result1			= "Your password has been successfuly changed";
88
	$l_form_result2			= "Error when trying to change password";
89
} else if ($Language === 'nl') {	// Dutch
90
	$l_title			= "User password change";
91
	$l_form_l1			= "User";
92
	$l_form_l2			= "Old password";
93
	$l_form_l3			= "New password";
94
	$l_form_l4			= "New password (confirmation)";
95
	$l_eval_pass			= "Score :";
96
	$l_passwordmeter		= "Powered by 'Shibbo Password Analyser'";
97
	$l_form_button_valid		= "Modify";
98
	$l_form_button_retour		= "Cancel";
99
	$l_form_result1			= "Your password has been successfuly changed";
100
	$l_form_result2			= "Error when trying to change password";
101
} else if ($Language === 'zh') {	// Chinese
102
	$l_title			= "修改用户密码";
103
	$l_form_l1			= "用户";
104
	$l_form_l2			= "旧密码";
105
	$l_form_l3			= "新密码";
106
	$l_form_l4			= "新密码(确认)";
107
	$l_eval_pass			= ""; // TODO: to translate
108
	$l_passwordmeter		= "技术支持 'Shibbo Password Analyser'";
109
	$l_form_button_valid		= "修改";
110
	$l_form_button_retour		= "取消";
111
	$l_form_result1			= "您的密码已成功修改";
112
	$l_form_result2			= "修改密码出错";
113
} else if ($Language === 'ar') {	// Arabic
114
	$l_title			= "تغيير كلمة المرور للمستخدم";
115
	$l_form_l1			= "المستعمل";
116
	$l_form_l2			= "كلمه السر القديمة";
117
	$l_form_l3			= "كلمة السر الجديدة";
118
	$l_form_l4			= "كلمة السر الجديدة (أكد)";
119
	$l_eval_pass			= ""; // TODO: to translate
120
	$l_passwordmeter		= "مشغل بواسطة 'Shibbo Password Analyser'";
121
	$l_form_button_valid		= "تغيير";
122
	$l_form_button_retour		= "إلغاء";
123
	$l_form_result1			= "تم تغيير الرقم السري بنجاح";
124
	$l_form_result2			= "خطأ عند محاولة تغيير كلمة المرور";
125
} else if ($Language === 'fr') {	// French
126
	$l_title			= "Changement de mot de passe utilisateur";
127
	$l_form_l1			= "Utilisateur :";
128
	$l_form_l2			= "Ancien mot de passe :";
129
	$l_form_l3			= "Nouveau mot de passe :";
130
	$l_form_l4			= "Nouveau mot de passe (confirmation) :";
131
	$l_eval_pass			= "Score :";
132
	$l_passwordmeter		= "Propulsé par 'Shibbo Password Analyser'";
133
	$l_form_button_valid		= "Modifier";
134
	$l_form_button_retour		= "Annuler";
135
	$l_form_result1			= "Votre mot de passe a été modifié avec succès";
136
	$l_form_result2			= "Erreur de changement de mot de passe";
137
} else {				// English
138
	$l_title			= "User password change";
139
	$l_form_l1			= "User";
140
	$l_form_l2			= "Old password";
141
	$l_form_l3			= "New password";
142
	$l_form_l4			= "New password (confirmation)";
143
	$l_eval_pass			= "Score:";
144
	$l_passwordmeter		= "Powered by 'Shibbo Password Analyser'";
145
	$l_form_button_valid		= "Modify";
146
	$l_form_button_retour		= "Cancel";
147
	$l_form_result1			= "Your password has been successfuly changed";
148
	$l_form_result2			= "Error when trying to change password";
345 richard 149
}
2241 tom.houday 150
 
151
if (isset($action)) {
152
	if ($action === 'checkpass') {
153
		if (!is_file("../acc/manager/lib/sql/drivers/$config[sql_type]/functions.php")) {
154
			exit('<b>Could not include SQL library</b>');
155
		}
156
		require_once("../acc/manager/lib/sql/drivers/$config[sql_type]/functions.php");
157
		$link = @da_sql_pconnect($config);
158
		if ($link) {
159
			$sql = "SELECT attribute,value FROM $config[sql_check_table] WHERE username = '$login' AND attribute = '$config[sql_password_attribute]';";
160
			$res = @da_sql_query($link,$config, $sql);
161
			if ($res) {
162
				$row = @da_sql_fetch_array($res, $config);
2242 tom.houday 163
				if (!is_file("../acc/manager/lib/crypt/$config[general_encryption_method].php")) {
2241 tom.houday 164
					exit('<b>Could not open encryption library file</b>');
165
				}
2242 tom.houday 166
				include("../acc/manager/lib/crypt/$config[general_encryption_method].php");
2241 tom.houday 167
				$enc_passwd = $row['value'];
168
				$passwd     = da_encrypt($passwd,$enc_passwd);
169
				$newpasswd  = da_encrypt($newpasswd,$enc_passwd);
170
				$newpasswd2 = da_encrypt($newpasswd2,$enc_passwd);
171
				if (($passwd === $enc_passwd) && ($newpasswd === $newpasswd2)) {
172
					$sql = "UPDATE $config[sql_check_table] SET value='$newpasswd' WHERE username = '$login' AND attribute = '$config[sql_password_attribute]';";
173
					$res2 = @da_sql_query($link, $config, $sql);
174
					$changePasswordMessage = '<font color=blue><b>'.$l_form_result1.'</b></font>';
175
				} else {
176
					$changePasswordMessage = '<font color=red><b>'.$l_form_result2.'</b></font>';
177
				}
178
			}
179
		}
180
	}
181
}
182
 
183
// Cleaning the cache
184
header('Expires: Tue, 01 Jan 2000 00:00:00 GMT');
185
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
186
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
187
header('Cache-Control: post-check=0, pre-check=0', false);
188
header('Pragma: no-cache');
189
?>
190
<!DOCTYPE html>
345 richard 191
<html>
509 richard 192
	<head>
2241 tom.houday 193
		<meta charset="UTF-8">
194
		<title>ALCASAR - <?= $l_title ?></title>
195
		<link rel="stylesheet" href="../css/pass.css" type="text/css">
196
		<link rel="stylesheet" href="../css/style_intercept.css" type="text/css">
197
		<link rel="stylesheet" href="../css/pwdmeter.css" type="text/css">
647 richard 198
		<!--[if lt IE 7]>
2241 tom.houday 199
			<link rel="stylesheet" href="../css/ie.css" type="text/css">
647 richard 200
		<![endif]-->
2242 tom.houday 201
		<script src="../js/pwdmeter.js"></script>
509 richard 202
	</head>
2241 tom.houday 203
	<body>
204
		<div id="cadre_titre" class="titre_controle">
205
			<p id="acces_controle" class="titre_controle"><?= $l_title ?></p>
206
			<div id="boite_logo"><img src="/images/organisme.png"></div>
207
		</div>
208
		<div id="contenu_acces">
209
			<form name="master" action="<?= $current_page ?>" method="post">
210
				<input type="hidden" name="action" value="checkpass">
211
				<table id="champs_pass" border="0">
647 richard 212
					<tr>
2241 tom.houday 213
						<td class="first_item"><?= $l_form_l1 ?></td>
214
						<td><input type="text" name="login" value="" label="test"></td>
647 richard 215
					</tr>	
216
					<tr>
2241 tom.houday 217
						<td class="first_item"><?= $l_form_l2 ?></td>
218
						<td><input type="password" name="passwd" value=""></td>
647 richard 219
					</tr>
220
					<tr>
2241 tom.houday 221
						<td class="first_item"><?= $l_form_l3 ?></td>
222
						<td>
223
							<input type="password" name="newpasswd" id="passwordPwd" value="" autocomplete="off" onkeyup="chkPass(this.value);" />
224
							<input type="text" id="passwordTxt" name="passwordTxt" autocomplete="off" onkeyup="chkPass(this.value);" class="hide" />
225
						</td>
647 richard 226
					</tr>
227
					<tr>
2241 tom.houday 228
						<td class="first_item"><?= $l_eval_pass ?></td>
229
						<td>
230
							<div id="scorebarBorder">
231
								<div id="score">0%</div>
232
								<div id="scorebar">&nbsp;</div>
233
							</div>
234
							<div id="complexity"></div>
235
						</td>
647 richard 236
					</tr>
237
					<tr>
2241 tom.houday 238
						<td colspan="2" id="lien_pass"><?= $l_passwordmeter ?></td>
647 richard 239
					</tr>
240
					<tr>
2241 tom.houday 241
						<td class="first_item"><?= $l_form_l4 ?></td>
242
						<td><input type="password" name="newpasswd2" value=""></td>
647 richard 243
					</tr>
244
					<tr>
2241 tom.houday 245
						<td colspan="2" id="lien_pass">
246
							<input type="submit" class="btn_form" id="btn_pass" value="<?= $l_form_button_valid ?>">
247
							<input type="button" class="btn_form" id="btn_retour" value="<?= $l_form_button_retour ?>" onclick="window.location = '<?= $homepage ?>';">
647 richard 248
						</td>
249
					</tr>
2241 tom.houday 250
					<?php if (isset($changePasswordMessage)): ?>
251
						<tr>
252
							<td colspan="2"><?= $changePasswordMessage ?></td>
253
						</tr>
254
					<?php endif; ?>
647 richard 255
				</table>
2241 tom.houday 256
			</form>
257
		</div>
258
		<div id="info_pass">
259
			<table id="tablePwdStatus" cellpadding="5" cellspacing="1" border="0">
260
				<tr>
261
					<th colspan="2">Additions</th>
262
					<th class="txtCenter">Type</th>
263
					<th class="txtCenter">Rate</th>
264
					<th class="txtCenter">Count</th>
265
					<th class="txtCenter">Bonus</th>
266
				</tr>
267
				<tr>
268
					<td width="1%"><div id="div_nLength" class="fail">&nbsp;</div></td>
269
					<td width="94%">Number of Characters</td>
270
					<td width="1%" class="txtCenter">Flat</td>
271
					<td width="1%" class="txtCenter italic">+(n*4)</td>
272
					<td width="1%"><div id="nLength" class="box">&nbsp;</div></td>
273
					<td width="1%"><div id="nLengthBonus" class="boxPlus">&nbsp;</div></td>
274
				</tr>
275
				<tr>
276
					<td><div id="div_nAlphaUC" class="fail">&nbsp;</div></td>
277
					<td>Uppercase Letters</td>
278
					<td class="txtCenter">Cond/Incr</td>
279
					<td nowrap="nowrap" class="txtCenter italic">+((len-n)*2)</td>
280
					<td><div id="nAlphaUC" class="box">&nbsp;</div></td>
281
					<td><div id="nAlphaUCBonus" class="boxPlus">&nbsp;</div></td>
282
				</tr>	
283
				<tr>
284
					<td><div id="div_nAlphaLC" class="fail">&nbsp;</div></td>
285
					<td>Lowercase Letters</td>
286
					<td class="txtCenter">Cond/Incr</td>
287
					<td class="txtCenter italic">+((len-n)*2)</td>
288
					<td><div id="nAlphaLC" class="box">&nbsp;</div></td>
289
					<td><div id="nAlphaLCBonus" class="boxPlus">&nbsp;</div></td>
290
				</tr>
291
				<tr>
292
					<td><div id="div_nNumber" class="fail">&nbsp;</div></td>
293
					<td>Numbers</td>
294
					<td class="txtCenter">Cond</td>
295
					<td class="txtCenter italic">+(n*4)</td>
296
					<td><div id="nNumber" class="box">&nbsp;</div></td>
297
					<td><div id="nNumberBonus" class="boxPlus">&nbsp;</div></td>
298
				</tr>
299
				<tr>
300
					<td><div id="div_nSymbol" class="fail">&nbsp;</div></td>
301
					<td>Symbols</td>
302
					<td class="txtCenter">Flat</td>
303
					<td class="txtCenter italic">+(n*6)</td>
304
					<td><div id="nSymbol" class="box">&nbsp;</div></td>
305
					<td><div id="nSymbolBonus" class="boxPlus">&nbsp;</div></td>
306
				</tr>
307
				<tr>
308
					<td><div id="div_nMidChar" class="fail">&nbsp;</div></td>
309
					<td>Middle Numbers or Symbols</td>
310
					<td class="txtCenter">Flat</td>
311
					<td class="txtCenter italic">+(n*2)</td>
312
					<td><div id="nMidChar" class="box">&nbsp;</div></td>
313
					<td><div id="nMidCharBonus" class="boxPlus">&nbsp;</div></td>
314
				</tr>
315
				<tr>
316
					<td><div id="div_nRequirements" class="fail">&nbsp;</div></td>
317
					<td>Requirements</td>
318
					<td class="txtCenter">Flat</td>
319
					<td class="txtCenter italic">+(n*2)</td>
320
					<td><div id="nRequirements" class="box">&nbsp;</div></td>
321
					<td><div id="nRequirementsBonus" class="boxPlus">&nbsp;</div></td>
322
				</tr>
323
				<tr>
324
					<th colspan="6">Deductions</th>
325
				</tr>
326
				<tr>
327
					<td width="1%"><div id="div_nAlphasOnly" class="pass">&nbsp;</div></td>
328
					<td width="94%">Letters Only</td>
329
					<td width="1%" class="txtCenter">Flat</td>
330
					<td width="1%" class="txtCenter italic">-n</td>
331
					<td width="1%"><div id="nAlphasOnly" class="box">&nbsp;</div></td>
332
					<td width="1%"><div id="nAlphasOnlyBonus" class="boxMinus">&nbsp;</div></td>
333
				</tr>	
334
				<tr>
335
					<td><div id="div_nNumbersOnly" class="pass">&nbsp;</div></td>
336
					<td>Numbers Only</td>
337
					<td class="txtCenter">Flat</td>
338
					<td class="txtCenter italic">-n</td>
339
					<td><div id="nNumbersOnly" class="box">&nbsp;</div></td>
340
					<td><div id="nNumbersOnlyBonus" class="boxMinus">&nbsp;</div></td>
341
				</tr>	
342
				<tr>
343
					<td><div id="div_nRepChar" class="pass">&nbsp;</div></td>
344
					<td>Repeat Characters (Case Insensitive)</td>
345
					<td class="txtCenter">Comp</td>
346
					<td nowrap="nowrap" class="txtCenter italic"> - </td>
347
					<td><div id="nRepChar" class="box">&nbsp;</div></td>
348
					<td><div id="nRepCharBonus" class="boxMinus">&nbsp;</div></td>
349
				</tr>	
350
				<tr>
351
					<td><div id="div_nConsecAlphaUC" class="pass">&nbsp;</div></td>
352
					<td>Consecutive Uppercase Letters</td>
353
					<td class="txtCenter">Flat</td>
354
					<td class="txtCenter italic">-(n*2)</td>
355
					<td><div id="nConsecAlphaUC" class="box">&nbsp;</div></td>
356
					<td><div id="nConsecAlphaUCBonus" class="boxMinus">&nbsp;</div></td>
357
				</tr>	
358
				<tr>
359
					<td><div id="div_nConsecAlphaLC" class="pass">&nbsp;</div></td>
360
					<td>Consecutive Lowercase Letters</td>
361
					<td class="txtCenter">Flat</td>
362
					<td class="txtCenter italic">-(n*2)</td>
363
					<td><div id="nConsecAlphaLC" class="box">&nbsp;</div></td>
364
					<td><div id="nConsecAlphaLCBonus" class="boxMinus">&nbsp;</div></td>
365
				</tr>	
366
				<tr>
367
					<td><div id="div_nConsecNumber" class="pass">&nbsp;</div></td>
368
					<td>Consecutive Numbers</td>
369
					<td class="txtCenter">Flat</td>
370
					<td class="txtCenter italic">-(n*2)</td>
371
					<td><div id="nConsecNumber" class="box">&nbsp;</div></td>
372
					<td><div id="nConsecNumberBonus" class="boxMinus">&nbsp;</div></td>
373
				</tr>	
374
				<tr>
375
					<td><div id="div_nSeqAlpha" class="pass">&nbsp;</div></td>
376
					<td>Sequential Letters (3+)</td>
377
					<td class="txtCenter">Flat</td>
378
					<td class="txtCenter italic">-(n*3)</td>
379
					<td><div id="nSeqAlpha" class="box">&nbsp;</div></td>
380
					<td><div id="nSeqAlphaBonus" class="boxMinus">&nbsp;</div></td>
381
				</tr>	
382
				<tr>
383
					<td><div id="div_nSeqNumber" class="pass">&nbsp;</div></td>
384
					<td>Sequential Numbers (3+)</td>
385
					<td class="txtCenter">Flat</td>
386
					<td class="txtCenter italic">-(n*3)</td>
387
					<td><div id="nSeqNumber" class="box">&nbsp;</div></td>
388
					<td><div id="nSeqNumberBonus" class="boxMinus">&nbsp;</div></td>
389
				</tr>	
390
				<tr>
391
					<td><div id="div_nSeqSymbol" class="pass">&nbsp;</div></td>
392
					<td>Sequential Symbols (3+)</td>
393
					<td class="txtCenter">Flat</td>
394
					<td class="txtCenter italic">-(n*3)</td>
395
					<td><div id="nSeqSymbol" class="box">&nbsp;</div></td>
396
					<td><div id="nSeqSymbolBonus" class="boxMinus">&nbsp;</div></td>
397
				</tr>	
398
				<tr>
399
					<th colspan="6">Legend</th>
400
				</tr>
401
				<tr>
402
					<td colspan="6">
403
						<ul id="listLegend">
404
							<li><div class="exceed imgLegend">&nbsp;</div><span class="bold">Exceptional:</span> Exceeds minimum standards. Additional bonuses are applied.</li>
405
							<li><div class="pass imgLegend">&nbsp;</div><span class="bold">Sufficient:</span> Meets minimum standards. Additional bonuses are applied.</li>
406
							<li><div class="warn imgLegend">&nbsp;</div><span class="bold">Warning:</span> Advisory against employing bad practices. Overall score is reduced.</li>
407
							<li><div class="fail imgLegend">&nbsp;</div><span class="bold">Failure:</span> Does not meet the minimum standards. Overall score is reduced.</li>
408
						</ul>
409
					</td>
410
				</tr>
411
			</table>
412
		   	<table id="tablePwdNotes" cellpadding="5" cellspacing="1" border="0">
413
				<tr>
414
					<th>Quick Footnotes</th>
415
				</tr>
416
				<tr>
417
					<td>
418
						&bull; <strong>Flat:</strong> Rates that add/remove in non-changing increments.<br>
419
						&bull; <strong>Incr:</strong> Rates that add/remove in adjusting increments.<br>
420
						&bull; <strong>Cond:</strong> Rates that add/remove depending on additional factors.<br>
421
						&bull; <strong>Comp:</strong> Rates that are too complex to summarize. See source code for details.<br>
422
						&bull; <strong>n:</strong> Refers to the total number of occurrences.<br>
423
						&bull; <strong>len:</strong> Refers to the total password length.<br>
424
						&bull; Additional bonus scores are given for increased character variety.<br>
425
						&bull; Final score is a cumulative result of all bonuses minus deductions.<br>
426
						&bull; Final score is capped with a minimum of 0 and a maximum of 100.<br>
427
						&bull; Score and Complexity ratings are not conditional on meeting minimum requirements.<br>
428
					</td>
429
				</tr>
430
			</table>
431
		</div>
432
	</body>
345 richard 433
</html>