Subversion Repositories ALCASAR

Rev

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

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