File compare.csv changed (mode: 100644) (index 1085d08..734c14d) |
... |
... |
Usable with lynx,Yes,Yes,Yes,?,?,n/a,Yes |
19 |
19 |
Web Hooks,Yes,Yes,Yes,?,?,No,? |
Web Hooks,Yes,Yes,Yes,?,?,No,? |
20 |
20 |
Web Hooks - provide client certs,Yes,No,No,?,?,n/a,? |
Web Hooks - provide client certs,Yes,No,No,?,?,n/a,? |
21 |
21 |
Web Hooks - authenticate server (CA cert),Yes,No,No,?,?,n/a,? |
Web Hooks - authenticate server (CA cert),Yes,No,No,?,?,n/a,? |
22 |
|
OpenSSH AuthorizedKeysCommand,Yes,?,?,?,?,?,? |
|
|
22 |
|
OpenSSH AuthorizedKeysCommand,Yes,Yes,?,?,?,?,? |
|
23 |
|
OpenSSH filter by key type and bits,Yes,?,?,?,?,?,? |
23 |
24 |
,,,,,,, |
,,,,,,, |
24 |
25 |
[Rights],,,,,,, |
[Rights],,,,,,, |
25 |
26 |
Path control,Yes,?,?,?,?,?,? |
Path control,Yes,?,?,?,?,?,? |
File inc/admin.inc.php changed (mode: 100644) (index 8db3708..c0dfe44) |
... |
... |
function rg_clean_logs($dir) |
480 |
480 |
*/ |
*/ |
481 |
481 |
function rg_admin_settings_ssh($db, $rg) |
function rg_admin_settings_ssh($db, $rg) |
482 |
482 |
{ |
{ |
|
483 |
|
global $rg_max_ssh_keys; |
|
484 |
|
|
483 |
485 |
rg_log_enter('admin_settings_menu'); |
rg_log_enter('admin_settings_menu'); |
484 |
486 |
|
|
485 |
487 |
$ret = ''; |
$ret = ''; |
|
... |
... |
function rg_admin_settings_ssh($db, $rg) |
496 |
498 |
break; |
break; |
497 |
499 |
} |
} |
498 |
500 |
|
|
499 |
|
$akp = rg_var_int('AuthorizedKeysCommand'); |
|
500 |
|
$r = rg_state_set($db, 'AuthorizedKeysCommand', $akp); |
|
|
501 |
|
$v = rg_var_uint('max_ssh_keys'); |
|
502 |
|
$r = rg_state_set($db, 'max_ssh_keys', $v); |
501 |
503 |
if ($r === FALSE) { |
if ($r === FALSE) { |
502 |
504 |
$errmsg[] = 'cannot set state; try again'; |
$errmsg[] = 'cannot set state; try again'; |
503 |
505 |
break; |
break; |
504 |
506 |
} |
} |
505 |
507 |
|
|
|
508 |
|
$v = rg_var_int('ssh_key_min_bits_rsa'); |
|
509 |
|
$r = rg_state_set($db, 'ssh_key_min_bits_rsa', $v); |
|
510 |
|
if ($r === FALSE) { |
|
511 |
|
$errmsg[] = 'cannot set state; try again'; |
|
512 |
|
break; |
|
513 |
|
} |
|
514 |
|
|
|
515 |
|
$v = rg_var_int('ssh_key_allow_dsa'); |
|
516 |
|
$r = rg_state_set($db, 'ssh_key_allow_dsa', $v); |
|
517 |
|
if ($r === FALSE) { |
|
518 |
|
$errmsg[] = 'cannot set state; try again'; |
|
519 |
|
break; |
|
520 |
|
} |
|
521 |
|
|
|
522 |
|
$v = rg_var_int('ssh_key_min_bits_ecdsa'); |
|
523 |
|
$r = rg_state_set($db, 'ssh_key_min_bits_ecdsa', $v); |
|
524 |
|
if ($r === FALSE) { |
|
525 |
|
$errmsg[] = 'cannot set state; try again'; |
|
526 |
|
break; |
|
527 |
|
} |
|
528 |
|
|
|
529 |
|
$v = rg_var_int('AuthorizedKeysCommand'); |
|
530 |
|
$r = rg_state_set($db, 'AuthorizedKeysCommand', $v); |
|
531 |
|
if ($r === FALSE) { |
|
532 |
|
$errmsg[] = 'cannot set state; try again'; |
|
533 |
|
break; |
|
534 |
|
} |
|
535 |
|
|
|
536 |
|
|
506 |
537 |
// Nobody will force the regeneration, so, do it here! |
// Nobody will force the regeneration, so, do it here! |
507 |
538 |
$ev = array( |
$ev = array( |
508 |
539 |
'category' => 'rg_keys_event_regen', |
'category' => 'rg_keys_event_regen', |
|
... |
... |
function rg_admin_settings_ssh($db, $rg) |
522 |
553 |
|
|
523 |
554 |
// Load defaults |
// Load defaults |
524 |
555 |
while (1) { |
while (1) { |
525 |
|
$r = rg_state_get($db, 'AuthorizedKeysCommand'); |
|
|
556 |
|
$r = rg_state_get($db, 'max_ssh_keys'); |
526 |
557 |
if ($r === FALSE) { |
if ($r === FALSE) { |
527 |
558 |
$ret = rg_template('admin/settings/load_err.html', |
$ret = rg_template('admin/settings/load_err.html', |
528 |
559 |
$rg, TRUE /*xss*/); |
$rg, TRUE /*xss*/); |
529 |
560 |
break; |
break; |
530 |
561 |
} |
} |
|
562 |
|
if (empty($r)) |
|
563 |
|
$r = $rg_max_ssh_keys; |
|
564 |
|
$rg['max_ssh_keys'] = $r; |
531 |
565 |
|
|
|
566 |
|
$r = rg_state_get($db, 'ssh_key_min_bits_rsa'); |
|
567 |
|
if ($r === FALSE) { |
|
568 |
|
$ret = rg_template('admin/settings/load_err.html', |
|
569 |
|
$rg, TRUE /*xss*/); |
|
570 |
|
break; |
|
571 |
|
} |
|
572 |
|
if (empty($r)) |
|
573 |
|
$r = 2048; |
|
574 |
|
$rg['ssh_key_min_bits_rsa'] = $r; |
|
575 |
|
|
|
576 |
|
$r = rg_state_get($db, 'ssh_key_allow_dsa'); |
|
577 |
|
if ($r === FALSE) { |
|
578 |
|
$ret = rg_template('admin/settings/load_err.html', |
|
579 |
|
$rg, TRUE /*xss*/); |
|
580 |
|
break; |
|
581 |
|
} |
|
582 |
|
if (empty($r)) |
|
583 |
|
$r = 0; |
|
584 |
|
$rg['ssh_key_allow_dsa'] = $r; |
|
585 |
|
|
|
586 |
|
$r = rg_state_get($db, 'ssh_key_min_bits_ecdsa'); |
|
587 |
|
if ($r === FALSE) { |
|
588 |
|
$ret = rg_template('admin/settings/load_err.html', |
|
589 |
|
$rg, TRUE /*xss*/); |
|
590 |
|
break; |
|
591 |
|
} |
|
592 |
|
if (empty($r)) |
|
593 |
|
$r = 256; |
|
594 |
|
$rg['ssh_key_min_bits_ecdsa'] = $r; |
|
595 |
|
|
|
596 |
|
$r = rg_state_get($db, 'AuthorizedKeysCommand'); |
|
597 |
|
if ($r === FALSE) { |
|
598 |
|
$ret = rg_template('admin/settings/load_err.html', |
|
599 |
|
$rg, TRUE /*xss*/); |
|
600 |
|
break; |
|
601 |
|
} |
|
602 |
|
if (empty($r)) |
|
603 |
|
$r = 0; |
532 |
604 |
$rg['AuthorizedKeysCommand'] = $r; |
$rg['AuthorizedKeysCommand'] = $r; |
533 |
605 |
|
|
534 |
606 |
$hints[]['HTML:hint'] = rg_template('admin/settings/ssh/hints.html', |
$hints[]['HTML:hint'] = rg_template('admin/settings/ssh/hints.html', |
|
... |
... |
function rg_admin_settings_ssh($db, $rg) |
536 |
608 |
|
|
537 |
609 |
$rg['HTML:hints'] = rg_template_table('hints/list', $hints, $rg); |
$rg['HTML:hints'] = rg_template_table('hints/list', $hints, $rg); |
538 |
610 |
$rg['HTML:errmsg'] = rg_template_errmsg($errmsg); |
$rg['HTML:errmsg'] = rg_template_errmsg($errmsg); |
539 |
|
$rg['rg_form_token'] = rg_token_get($db, $rg, 'admin_settings_ssh'); |
|
540 |
|
$ret .= rg_template('admin/settings/main.html', $rg, TRUE /*xss*/); |
|
|
611 |
|
$rg['rg_form_token'] = rg_token_get($db, $rg, |
|
612 |
|
'admin_settings_ssh'); |
|
613 |
|
$ret .= rg_template('admin/settings/main.html', |
|
614 |
|
$rg, TRUE /*xss*/); |
541 |
615 |
break; |
break; |
542 |
616 |
} |
} |
543 |
617 |
|
|
|
... |
... |
function rg_admin_settings($db, &$rg, $paras) |
555 |
629 |
$ret = ''; |
$ret = ''; |
556 |
630 |
|
|
557 |
631 |
$_op = empty($paras) ? 'ssh' : array_shift($paras); |
$_op = empty($paras) ? 'ssh' : array_shift($paras); |
558 |
|
rg_log("DEBUG: _op=$_op sparas=" . rg_array2string($paras)); |
|
|
632 |
|
|
|
633 |
|
$rg['url_up'] = $rg['url']; |
|
634 |
|
$rg['url'] .= '/' . $_op; |
559 |
635 |
|
|
560 |
636 |
$rg['admin_settings_menu'][$_op] = 1; |
$rg['admin_settings_menu'][$_op] = 1; |
561 |
637 |
$rg['HTML:menu_level2'] = rg_template('admin/settings/menu.html', |
$rg['HTML:menu_level2'] = rg_template('admin/settings/menu.html', |
File inc/keys.inc.php changed (mode: 100644) (index 644f306..31381da) |
... |
... |
require_once($INC . "/mail.inc.php"); |
6 |
6 |
require_once($INC . "/events.inc.php"); |
require_once($INC . "/events.inc.php"); |
7 |
7 |
require_once($INC . "/cache.inc.php"); |
require_once($INC . "/cache.inc.php"); |
8 |
8 |
|
|
|
9 |
|
if (!isset($rg_max_ssh_keys)) |
|
10 |
|
$rg_max_ssh_keys = 10; |
|
11 |
|
|
9 |
12 |
$rg_keys_error = ""; |
$rg_keys_error = ""; |
10 |
13 |
|
|
11 |
14 |
function rg_keys_set_error($str) |
function rg_keys_set_error($str) |
|
... |
... |
function rg_keys_info($key) |
217 |
220 |
|
|
218 |
221 |
$bits_div = 1; |
$bits_div = 1; |
219 |
222 |
$bits_sub = 1; |
$bits_sub = 1; |
|
223 |
|
$fixes = array(); |
220 |
224 |
if (strcasecmp($ret['type'], 'ssh-rsa') == 0) { |
if (strcasecmp($ret['type'], 'ssh-rsa') == 0) { |
|
225 |
|
// OK |
221 |
226 |
$count = 2; |
$count = 2; |
222 |
227 |
$bits_pos = 1; |
$bits_pos = 1; |
223 |
228 |
} else if (strcasecmp($ret['type'], 'ssh-dss') == 0) { |
} else if (strcasecmp($ret['type'], 'ssh-dss') == 0) { |
|
229 |
|
// Always 1024 - OK |
224 |
230 |
$count = 4; |
$count = 4; |
225 |
231 |
$bits_pos = 3; |
$bits_pos = 3; |
|
232 |
|
$bits_sub = 0; |
226 |
233 |
} else if (strncasecmp($ret['type'], 'ecdsa-', 6) == 0) { |
} else if (strncasecmp($ret['type'], 'ecdsa-', 6) == 0) { |
|
234 |
|
// Possible: 256, 384, 521 - OK |
227 |
235 |
$count = 2; |
$count = 2; |
228 |
236 |
$bits_pos = 1; |
$bits_pos = 1; |
229 |
237 |
$bits_div = 2; |
$bits_div = 2; |
|
238 |
|
$fixes[528] = 521; |
230 |
239 |
} else if (strcasecmp($ret['type'], 'ssh-ed25519') == 0) { |
} else if (strcasecmp($ret['type'], 'ssh-ed25519') == 0) { |
|
240 |
|
// Always 256 - OK |
231 |
241 |
$count = 1; |
$count = 1; |
232 |
|
// TODO: not sure about this! |
|
233 |
242 |
$bits_pos = 0; |
$bits_pos = 0; |
234 |
243 |
$bits_sub = 0; |
$bits_sub = 0; |
235 |
244 |
} else { |
} else { |
|
... |
... |
function rg_keys_info($key) |
253 |
262 |
} |
} |
254 |
263 |
$_t = unpack('N', substr($d, $used, 4)); |
$_t = unpack('N', substr($d, $used, 4)); |
255 |
264 |
$xlen = $_t[1]; |
$xlen = $_t[1]; |
256 |
|
rg_log_ml("xlen=$xlen"); |
|
|
265 |
|
rg_log("xlen=$xlen bits_sub=$bits_sub bits_div=$bits_div"); |
257 |
266 |
//rg_log('bin: ' . bin2hex(substr($d, $used + 4, $xlen))); |
//rg_log('bin: ' . bin2hex(substr($d, $used + 4, $xlen))); |
258 |
267 |
//rg_log('ascii: ' . substr($d, $used + 4, $xlen)); |
//rg_log('ascii: ' . substr($d, $used + 4, $xlen)); |
259 |
268 |
if ($d_len < $used + 4 + $xlen) { |
if ($d_len < $used + 4 + $xlen) { |
|
... |
... |
function rg_keys_info($key) |
262 |
271 |
break; |
break; |
263 |
272 |
} |
} |
264 |
273 |
|
|
265 |
|
if ($i == $bits_pos) |
|
|
274 |
|
if ($i == $bits_pos) { |
266 |
275 |
$ret['bits'] = (($xlen - $bits_sub) / $bits_div) * 8; |
$ret['bits'] = (($xlen - $bits_sub) / $bits_div) * 8; |
|
276 |
|
if (isset($fixes[$ret['bits']])) |
|
277 |
|
$ret['bits'] = $fixes[$ret['bits']]; |
|
278 |
|
} |
267 |
279 |
|
|
268 |
280 |
$used += 4 + $xlen; |
$used += 4 + $xlen; |
269 |
281 |
} |
} |
|
... |
... |
function rg_keys_count($db, $uid) |
378 |
390 |
return $ret; |
return $ret; |
379 |
391 |
} |
} |
380 |
392 |
|
|
|
393 |
|
/* |
|
394 |
|
* Returns the maximum number of keys allowed per user |
|
395 |
|
*/ |
|
396 |
|
function rg_keys_max($db) |
|
397 |
|
{ |
|
398 |
|
global $rg_max_ssh_keys; |
|
399 |
|
|
|
400 |
|
$r = rg_state_get($db, 'max_ssh_keys'); |
|
401 |
|
if (($r === FALSE) || empty($r)) |
|
402 |
|
return $rg_max_ssh_keys; |
|
403 |
|
|
|
404 |
|
return $r; |
|
405 |
|
} |
|
406 |
|
|
381 |
407 |
/* |
/* |
382 |
408 |
* Adds a key |
* Adds a key |
383 |
409 |
* Returns the key_id of the key. |
* Returns the key_id of the key. |
384 |
410 |
*/ |
*/ |
385 |
411 |
function rg_keys_add($db, $ui, $key) |
function rg_keys_add($db, $ui, $key) |
386 |
412 |
{ |
{ |
387 |
|
global $rg_max_ssh_keys; |
|
388 |
|
|
|
389 |
413 |
rg_prof_start("keys_add"); |
rg_prof_start("keys_add"); |
390 |
414 |
rg_log_enter("keys_add: key=$key"); |
rg_log_enter("keys_add: key=$key"); |
391 |
415 |
|
|
|
... |
... |
function rg_keys_add($db, $ui, $key) |
398 |
422 |
if ($ki['ok'] != 1) |
if ($ki['ok'] != 1) |
399 |
423 |
break; |
break; |
400 |
424 |
|
|
|
425 |
|
$r = rg_keys_weak($db, $ki); |
|
426 |
|
if ($r['weak'] != 0) |
|
427 |
|
break; |
|
428 |
|
|
401 |
429 |
// Check if we are over the maximum |
// Check if we are over the maximum |
402 |
430 |
// the config after update may not have this defined. |
// the config after update may not have this defined. |
403 |
|
if ($rg_max_ssh_keys == 0) |
|
404 |
|
$rg_max_ssh_keys = 10; |
|
405 |
431 |
$no_of_keys = rg_keys_count($db, $ui['uid']); |
$no_of_keys = rg_keys_count($db, $ui['uid']); |
406 |
432 |
if ($no_of_keys === FALSE) |
if ($no_of_keys === FALSE) |
407 |
433 |
break; |
break; |
408 |
434 |
|
|
409 |
|
if ($no_of_keys >= $rg_max_ssh_keys) { |
|
|
435 |
|
if ($no_of_keys >= rg_keys_max($db)) { |
410 |
436 |
rg_keys_set_error("too many keys" |
rg_keys_set_error("too many keys" |
411 |
437 |
. " (" . $no_of_keys . "); please delete some"); |
. " (" . $no_of_keys . "); please delete some"); |
412 |
438 |
break; |
break; |
|
... |
... |
function rg_keys_search_by_fingerprint($db, $fp) |
819 |
845 |
return $ret; |
return $ret; |
820 |
846 |
} |
} |
821 |
847 |
|
|
|
848 |
|
/* |
|
849 |
|
* Returns TRUE if the key is too weak by the admin standards |
|
850 |
|
* @ki - output of rg_keys_info() |
|
851 |
|
*/ |
|
852 |
|
function rg_keys_weak($db, $ki) |
|
853 |
|
{ |
|
854 |
|
$ret = array('ok' => 0, 'weak' => 1); |
|
855 |
|
|
|
856 |
|
if (strcmp($ki['type'], 'ssh-rsa') == 0) { |
|
857 |
|
$min = rg_state_get($db, 'ssh_key_min_bits_rsa'); |
|
858 |
|
if ($min === FALSE) { |
|
859 |
|
rg_keys_set_error('cannot lookup state'); |
|
860 |
|
return $ret; |
|
861 |
|
} |
|
862 |
|
if ($ki['bits'] < $min) { |
|
863 |
|
rg_keys_set_error('RSA key has less than ' |
|
864 |
|
. $min . ' bits (' . $ki['bits'] . ')'); |
|
865 |
|
$ret['ok'] = 1; |
|
866 |
|
return $ret; |
|
867 |
|
} |
|
868 |
|
} else if (strcmp($ki['type'], 'ssh-dss') == 0) { |
|
869 |
|
$r = rg_state_get($db, 'ssh_key_allow_dsa'); |
|
870 |
|
if ($r === FALSE) { |
|
871 |
|
rg_keys_set_error('cannot lookup state'); |
|
872 |
|
return $ret; |
|
873 |
|
} |
|
874 |
|
if ($r != 1) { |
|
875 |
|
rg_keys_set_error('DSA keys are not allowed'); |
|
876 |
|
$ret['ok'] = 1; |
|
877 |
|
return $ret; |
|
878 |
|
} |
|
879 |
|
} else if (strncmp($ki['type'], 'ecdsa-', 6) == 0) { |
|
880 |
|
$min = rg_state_get($db, 'ssh_key_min_bits_ecdsa'); |
|
881 |
|
if ($min === FALSE) { |
|
882 |
|
rg_keys_set_error('cannot lookup state'); |
|
883 |
|
return $ret; |
|
884 |
|
} |
|
885 |
|
if ($ki['bits'] < $min) { |
|
886 |
|
rg_keys_set_error('ECDSA key has less than ' |
|
887 |
|
. $min . ' bits (' . $ki['bits'] . ')'); |
|
888 |
|
$ret['ok'] = 1; |
|
889 |
|
return $ret; |
|
890 |
|
} |
|
891 |
|
} |
|
892 |
|
|
|
893 |
|
$ret['ok'] = 1; |
|
894 |
|
$ret['weak'] = 0; |
|
895 |
|
return $ret; |
|
896 |
|
} |
|
897 |
|
|
822 |
898 |
?> |
?> |
File root/themes/default/admin/settings/main.html changed (mode: 100644) (index 0d5f09b..0ba1aa3) |
4 |
4 |
|
|
5 |
5 |
@@errmsg@@ |
@@errmsg@@ |
6 |
6 |
|
|
7 |
|
<form method="post" action="/op/admin/settings/ssh"> |
|
|
7 |
|
<form method="post" action="@@url@@"> |
8 |
8 |
<input type="hidden" name="doit" value="1" /> |
<input type="hidden" name="doit" value="1" /> |
9 |
9 |
<input type="hidden" name="token" value="@@rg_form_token@@" /> |
<input type="hidden" name="token" value="@@rg_form_token@@" /> |
10 |
10 |
|
|
|
11 |
|
<p> |
|
12 |
|
<label for="max_ssh_keys">Maximum number of SSH keys allowed per user</label><br /> |
|
13 |
|
<input type="text" name="max_ssh_keys" id="max_ssh_keys" value="@@max_ssh_keys@@" /> |
|
14 |
|
</p> |
|
15 |
|
|
|
16 |
|
<p> |
|
17 |
|
<label for="ssh_key_min_bits_rsa">Minimum RSA key bits (inclusive)</label><br /> |
|
18 |
|
<select name="ssh_key_min_bits_rsa" id="ssh_key_min_bits_rsa"> |
|
19 |
|
<option value="1024"@@if(@@ssh_key_min_bits_rsa@@ == 1024){{ selected="selected"}}>1024 bits (not recommended)</option> |
|
20 |
|
<option value="2048"@@if(@@ssh_key_min_bits_rsa@@ == 2048){{ selected="selected"}}>2048 bits (sufficient)</option> |
|
21 |
|
<option value="4096"@@if(@@ssh_key_min_bits_rsa@@ == 4096){{ selected="selected"}}>4096 bits (best)</option> |
|
22 |
|
</select> |
|
23 |
|
</p> |
|
24 |
|
|
|
25 |
|
<p> |
|
26 |
|
<label for="ssh_key_allow_dsa">Allow DSA keys?</label><br /> |
|
27 |
|
<select name="ssh_key_allow_dsa" id="ssh_key_allow_dsa"> |
|
28 |
|
<option value="0"@@if(@@ssh_key_allow_dsa@@ == 0){{ selected="selected"}}>No (good)</option> |
|
29 |
|
<option value="1"@@if(@@ssh_key_allow_dsa@@ == 1){{ selected="selected"}}>Yes (not recommended)</option> |
|
30 |
|
</select> |
|
31 |
|
</p> |
|
32 |
|
|
|
33 |
|
<p> |
|
34 |
|
<label for="ssh_key_min_bits_ecdsa">Minimum ECDSA key bits (inclusive)</label><br /> |
|
35 |
|
<select name="ssh_key_min_bits_ecdsa" id="ssh_key_min_bits_ecdsa"> |
|
36 |
|
<option value="256"@@if(@@ssh_key_min_bits_ecdsa@@ == 256){{ selected="selected"}}>256 bits</option> |
|
37 |
|
<option value="384"@@if(@@ssh_key_min_bits_ecdsa@@ == 384){{ selected="selected"}}>384 bits</option> |
|
38 |
|
<option value="521"@@if(@@ssh_key_min_bits_ecdsa@@ == 521){{ selected="selected"}}>521 bits</option> |
|
39 |
|
</select> |
|
40 |
|
</p> |
|
41 |
|
|
11 |
42 |
<p> |
<p> |
12 |
43 |
<label for="AuthorizedKeysCommand">Activate OpenSSH's AuthorizedKeysCommand (see hints)</label><br /> |
<label for="AuthorizedKeysCommand">Activate OpenSSH's AuthorizedKeysCommand (see hints)</label><br /> |
13 |
44 |
<select name="AuthorizedKeysCommand" id="AuthorizedKeysCommand"> |
<select name="AuthorizedKeysCommand" id="AuthorizedKeysCommand"> |
File tests/keys.php changed (mode: 100644) (index 3909a36..8b1cbe3) |
... |
... |
rg_sql_free_result($res); |
29 |
29 |
|
|
30 |
30 |
// insert a key 1 |
// insert a key 1 |
31 |
31 |
$key1 = "ssh-dss AAAAB3NzaC1kc3MAAACBAJLkWtcoCUbWCRXecE907nO1gSh6IrfkD5bsyobrFOp6xYuJvfteKKpE79HUcbEpzIVFNk3mlQf/+k9cFP2Wy8F34UXFk8cXU4FU7z/TM1iHHOHnqFqvzv59LRaaMw4MaHm/4WKdfJy16KOLgosSBzWif3a1nKMdIZuYeIGso7qFAAAAFQC4JU7YoGu2nZQ0fEXFKaRhq+d9UQAAAIEAhgslkwwID6oBBdWx+mUuaXKt/bZcdCfNyjnejxlsZHPfDnayuqCKIgxlhYpiPS6LwiSK5feL55meF33HanCzX53z7ieoW6Je9z2H8/93sCvzk4LMj7XkeEy3G5UnRuL+uc6qrazF7Pu448cQH0pkh6N0zNueQlPpGL4/lHbIiVgAAACAQJup/h36aD9DprosVCQe40nalp7t4o/M75Y70sV7FNrL0azUQcn1ZL+J8F9l/dDRPG3rST2DABgba9pHGWa96vaNfTLnopy3po/296SYQl7/1nek0YtioEikoB+HQxk7eSwRI6bTpKEFNyUnp2/bcNjJYORKCeYwJJ2KDW6GJro= first_key"; |
$key1 = "ssh-dss AAAAB3NzaC1kc3MAAACBAJLkWtcoCUbWCRXecE907nO1gSh6IrfkD5bsyobrFOp6xYuJvfteKKpE79HUcbEpzIVFNk3mlQf/+k9cFP2Wy8F34UXFk8cXU4FU7z/TM1iHHOHnqFqvzv59LRaaMw4MaHm/4WKdfJy16KOLgosSBzWif3a1nKMdIZuYeIGso7qFAAAAFQC4JU7YoGu2nZQ0fEXFKaRhq+d9UQAAAIEAhgslkwwID6oBBdWx+mUuaXKt/bZcdCfNyjnejxlsZHPfDnayuqCKIgxlhYpiPS6LwiSK5feL55meF33HanCzX53z7ieoW6Je9z2H8/93sCvzk4LMj7XkeEy3G5UnRuL+uc6qrazF7Pu448cQH0pkh6N0zNueQlPpGL4/lHbIiVgAAACAQJup/h36aD9DprosVCQe40nalp7t4o/M75Y70sV7FNrL0azUQcn1ZL+J8F9l/dDRPG3rST2DABgba9pHGWa96vaNfTLnopy3po/296SYQl7/1nek0YtioEikoB+HQxk7eSwRI6bTpKEFNyUnp2/bcNjJYORKCeYwJJ2KDW6GJro= first_key"; |
|
32 |
|
rg_state_set($db, 'ssh_key_allow_dsa', 1); |
32 |
33 |
$key_id1 = rg_keys_add($db, $rg_ui, $key1); |
$key_id1 = rg_keys_add($db, $rg_ui, $key1); |
33 |
34 |
if ($key_id1 === FALSE) { |
if ($key_id1 === FALSE) { |
34 |
35 |
rg_log("Cannot add key 1 (" . rg_keys_error() . ")!"); |
rg_log("Cannot add key 1 (" . rg_keys_error() . ")!"); |
|
... |
... |
if ($key_id1 === FALSE) { |
38 |
39 |
// insert a key 2 |
// insert a key 2 |
39 |
40 |
$rg_ui['uid'] = 2; |
$rg_ui['uid'] = 2; |
40 |
41 |
$key2 = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+2OHaQiZzdwV4HQF9pCBbSQFaoM5Q0YmmRYDL8BUCjwClDgOLp9lQVN5XksoBx2t9INj6XrobjNc/GUF60c1Ald0FtjRl7nIZdYvKDutlxHcGUy6MHsVnCDviXQJD9Hm9fyuBLdy3/oadSCAaQYE/Tcf9rWt1NmhQ7560bCGmh4pw8N+XXAz2nQBCqvIK8VDoBbOOgFa/HOwBrKCgaGmcTGs5wRWHbw3+h6CO1vqEYcSCSqBPMG1JOMfMTuJ0aTXXEkSNPF+TVva85L4qrQslyHbn2JU1t7/HQsFnGtgF1o2AglIR2RbyMmr6axI51Srf20EB9/c9T3auYQipbw85 second_key"; |
$key2 = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+2OHaQiZzdwV4HQF9pCBbSQFaoM5Q0YmmRYDL8BUCjwClDgOLp9lQVN5XksoBx2t9INj6XrobjNc/GUF60c1Ald0FtjRl7nIZdYvKDutlxHcGUy6MHsVnCDviXQJD9Hm9fyuBLdy3/oadSCAaQYE/Tcf9rWt1NmhQ7560bCGmh4pw8N+XXAz2nQBCqvIK8VDoBbOOgFa/HOwBrKCgaGmcTGs5wRWHbw3+h6CO1vqEYcSCSqBPMG1JOMfMTuJ0aTXXEkSNPF+TVva85L4qrQslyHbn2JU1t7/HQsFnGtgF1o2AglIR2RbyMmr6axI51Srf20EB9/c9T3auYQipbw85 second_key"; |
|
42 |
|
rg_state_set($db, 'ssh_key_min_bits_rsa', 1024); |
41 |
43 |
$key_id2 = rg_keys_add($db, $rg_ui, $key2); |
$key_id2 = rg_keys_add($db, $rg_ui, $key2); |
42 |
44 |
if ($key_id2 === FALSE) { |
if ($key_id2 === FALSE) { |
43 |
45 |
rg_log("Cannot add key 2 (" . rg_keys_error() . ")!"); |
rg_log("Cannot add key 2 (" . rg_keys_error() . ")!"); |
|
... |
... |
if (strcmp($c, $e) != 0) { |
74 |
76 |
@unlink("afile.txt"); |
@unlink("afile.txt"); |
75 |
77 |
|
|
76 |
78 |
|
|
77 |
|
// test rg_max_ssh_keys - must fail because overlimit |
|
78 |
|
$rg_max_ssh_keys = 1; |
|
|
79 |
|
// test max_ssh_keys - must fail because overlimit |
|
80 |
|
rg_state_set($db, 'max_ssh_keys', 1); |
79 |
81 |
$key3 = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUiVHDS3rhn79+9YbXXN+npU9tDTzXZHkXZF9BNqI0GrnASuaBU2oJ/UK2OCgGQ45JOlzUCXcP09hHcyPqd4pZdHQhMAImCnm0iRivQ9VhJRRbl/s8kokoStZGAdcW+ETlhUtRXSQOu8U1PXqwUwZCkeE9asmS4Wg9/OO3eDuTMvE3yiNpHKt6TcVYlU6PlsiTFVJrAuIEbXRs5b5luuM+nM17caos0mn6w+kZ3QD9AnX+9pN4VgXKxEHGfWpOCtRDOQb9mTk2bX6MBJrcKtkAPnyYDiaRs1ANG7L4AP6to/gy3A9w6flTAD94gFAm833earIZJnCiavx3/dUWWt3L third_key'; |
$key3 = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUiVHDS3rhn79+9YbXXN+npU9tDTzXZHkXZF9BNqI0GrnASuaBU2oJ/UK2OCgGQ45JOlzUCXcP09hHcyPqd4pZdHQhMAImCnm0iRivQ9VhJRRbl/s8kokoStZGAdcW+ETlhUtRXSQOu8U1PXqwUwZCkeE9asmS4Wg9/OO3eDuTMvE3yiNpHKt6TcVYlU6PlsiTFVJrAuIEbXRs5b5luuM+nM17caos0mn6w+kZ3QD9AnX+9pN4VgXKxEHGfWpOCtRDOQb9mTk2bX6MBJrcKtkAPnyYDiaRs1ANG7L4AP6to/gy3A9w6flTAD94gFAm833earIZJnCiavx3/dUWWt3L third_key'; |
80 |
82 |
$key_id3 = rg_keys_add($db, $rg_ui, $key3); |
$key_id3 = rg_keys_add($db, $rg_ui, $key3); |
81 |
83 |
if ($key_id3 !== FALSE) { |
if ($key_id3 !== FALSE) { |
82 |
84 |
rg_log("Seems we can add more keys than allowed! Not good!"); |
rg_log("Seems we can add more keys than allowed! Not good!"); |
83 |
85 |
exit(1); |
exit(1); |
84 |
86 |
} |
} |
|
87 |
|
rg_state_set($db, 'max_ssh_keys', 10); |
|
88 |
|
|
|
89 |
|
rg_log(''); |
|
90 |
|
rg_log_enter('Uploading a RSA key that is forbidden'); |
|
91 |
|
rg_state_set($db, 'ssh_key_min_bits_rsa', 4096); |
|
92 |
|
$_key = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDHotZMHPSwhVDwV5xOroZ21kzgFuBaXk3xXIT9hHM9WKD3jw0/C6TotbOoghTfJxdQtOG1t0t7eUUCJXR/3BLqamxIyAXTH2qIxf9ySIVLylKXriHQZoOa0GVhnF0ZYxR7Ot5GkIuXsjtSLrvw9p2BPf41EoR1ZZ74QYQdKfDiGw== root@host'; |
|
93 |
|
$r = rg_keys_add($db, $rg_ui, $_key); |
|
94 |
|
if ($r !== FALSE) { |
|
95 |
|
rg_log('Seems we can add forbidden keys (rsa-1024)!'); |
|
96 |
|
exit(1); |
|
97 |
|
} |
|
98 |
|
rg_state_set($db, 'ssh_key_min_bits_rsa', 2048); |
85 |
99 |
|
|
86 |
100 |
// delete a key |
// delete a key |
87 |
101 |
$rg_ui['uid'] = 1; |
$rg_ui['uid'] = 1; |