File inc/keys.inc.php changed (mode: 100644) (index c146b8b..5fa6c69) |
... |
... |
require_once($INC . "/state.inc.php"); |
4 |
4 |
require_once($INC . "/prof.inc.php"); |
require_once($INC . "/prof.inc.php"); |
5 |
5 |
require_once($INC . "/mail.inc.php"); |
require_once($INC . "/mail.inc.php"); |
6 |
6 |
require_once($INC . "/events.inc.php"); |
require_once($INC . "/events.inc.php"); |
|
7 |
|
require_once($INC . "/cache.inc.php"); |
7 |
8 |
|
|
8 |
9 |
$rg_keys_error = ""; |
$rg_keys_error = ""; |
9 |
10 |
|
|
|
... |
... |
function rg_keys_event_new($db, $event) |
39 |
40 |
$ret = array(); |
$ret = array(); |
40 |
41 |
|
|
41 |
42 |
$event['op'] = "new"; |
$event['op'] = "new"; |
|
43 |
|
|
42 |
44 |
// mark keys dirty |
// mark keys dirty |
43 |
45 |
$ret[] = array_merge($event, array("category" => 1002, "prio" => 10)); |
$ret[] = array_merge($event, array("category" => 1002, "prio" => 10)); |
|
46 |
|
|
44 |
47 |
// notify user |
// notify user |
45 |
48 |
$ret[] = array_merge($event, array("category" => 1003, "prio" => 100)); |
$ret[] = array_merge($event, array("category" => 1003, "prio" => 100)); |
46 |
49 |
|
|
|
... |
... |
function rg_keys_event_del($db, $event) |
55 |
58 |
$ret = array(); |
$ret = array(); |
56 |
59 |
$event['type'] = 1; |
$event['type'] = 1; |
57 |
60 |
$event['op'] = "del"; |
$event['op'] = "del"; |
|
61 |
|
|
58 |
62 |
// mark keys dirty |
// mark keys dirty |
59 |
63 |
$ret[] = array_merge($event, array("category" => 1002, "prio" => 10)); |
$ret[] = array_merge($event, array("category" => 1002, "prio" => 10)); |
|
64 |
|
|
60 |
65 |
// notify user |
// notify user |
61 |
66 |
$ret[] = array_merge($event, array("category" => 1003, "prio" => 100)); |
$ret[] = array_merge($event, array("category" => 1003, "prio" => 100)); |
|
67 |
|
|
62 |
68 |
return $ret; |
return $ret; |
63 |
69 |
} |
} |
64 |
70 |
|
|
|
... |
... |
function rg_keys_event_del($db, $event) |
67 |
73 |
* We ignore requests that were inserted in queue after we already |
* We ignore requests that were inserted in queue after we already |
68 |
74 |
* regenerated the keys. |
* regenerated the keys. |
69 |
75 |
* We must regenerate now to not let the user wait too much. |
* We must regenerate now to not let the user wait too much. |
70 |
|
* TODO: When we will have support in sshd for key lookup, we will not need to regenerate. |
|
|
76 |
|
* TODO: When we will have support in sshd for key lookup, we will not need |
|
77 |
|
* to regenerate. |
71 |
78 |
*/ |
*/ |
72 |
79 |
function rg_keys_event_regen($db, $event) |
function rg_keys_event_regen($db, $event) |
73 |
80 |
{ |
{ |
|
... |
... |
function rg_keys_remove($db, $ui, $list) |
308 |
315 |
. " (" . rg_event_error() . ")"); |
. " (" . rg_event_error() . ")"); |
309 |
316 |
break; |
break; |
310 |
317 |
} |
} |
311 |
|
rg_event_signal_daemon('', 0); |
|
312 |
318 |
|
|
|
319 |
|
$key = 'user' . '::' . $ui['uid'] . '::' . 'keys'; |
|
320 |
|
foreach ($my_list as $_key_id) |
|
321 |
|
rg_cache_unset($key . '::' . $_key_id, |
|
322 |
|
RG_SOCKET_NO_WAIT); |
|
323 |
|
|
|
324 |
|
rg_event_signal_daemon('', 0); |
313 |
325 |
$ret = TRUE; |
$ret = TRUE; |
314 |
326 |
break; |
break; |
315 |
327 |
} |
} |
|
... |
... |
function rg_keys_add($db, $ui, $key) |
389 |
401 |
} |
} |
390 |
402 |
$do_rollback = 1; |
$do_rollback = 1; |
391 |
403 |
|
|
392 |
|
$params = array("itime" => $itime, |
|
393 |
|
"uid" => $ui['uid'], |
|
394 |
|
"key" => $key); |
|
|
404 |
|
$params = array( |
|
405 |
|
'itime' => $itime, |
|
406 |
|
'uid' => $ui['uid'], |
|
407 |
|
'key' => $key, |
|
408 |
|
'count' => 0, |
|
409 |
|
'first_use' => 0); |
395 |
410 |
$sql = "INSERT INTO keys (itime, uid, key)" |
$sql = "INSERT INTO keys (itime, uid, key)" |
396 |
411 |
. " VALUES (@@itime@@, @@uid@@, @@key@@)" |
. " VALUES (@@itime@@, @@uid@@, @@key@@)" |
397 |
412 |
. " RETURNING key_id"; |
. " RETURNING key_id"; |
|
... |
... |
function rg_keys_add($db, $ui, $key) |
427 |
442 |
} |
} |
428 |
443 |
$do_rollback = 0; |
$do_rollback = 0; |
429 |
444 |
|
|
|
445 |
|
$_key = 'user' . '::' . $ui['uid'] . '::' |
|
446 |
|
. 'keys' . '::' . $key_id; |
|
447 |
|
rg_cache_merge($_key, $params, RG_SOCKET_NO_WAIT); |
|
448 |
|
|
430 |
449 |
rg_event_signal_daemon('', 0); |
rg_event_signal_daemon('', 0); |
431 |
450 |
|
|
432 |
451 |
$ret = $key_id; |
$ret = $key_id; |
|
... |
... |
function rg_keys_add($db, $ui, $key) |
444 |
463 |
/* |
/* |
445 |
464 |
* Update first_use, last_use, last_ip and count |
* Update first_use, last_use, last_ip and count |
446 |
465 |
*/ |
*/ |
447 |
|
function rg_keys_update_use($db, $key_id, $ip) |
|
|
466 |
|
function rg_keys_update_use($db, $uid, $key_id, $ip, $cmd) |
448 |
467 |
{ |
{ |
449 |
468 |
rg_prof_start("keys_update_use"); |
rg_prof_start("keys_update_use"); |
450 |
|
rg_log_enter("keys_update_use: key_id=$key_id, ip=$ip"); |
|
|
469 |
|
rg_log_enter("keys_update_use: uid=$uid key_id=$key_id" |
|
470 |
|
. ", ip=$ip, cmd=$cmd"); |
451 |
471 |
|
|
452 |
472 |
$ret = FALSE; |
$ret = FALSE; |
453 |
473 |
while (1) { |
while (1) { |
454 |
474 |
$now = time(); |
$now = time(); |
455 |
475 |
|
|
456 |
|
$params = array("now" => $now, |
|
457 |
|
"key_id" => $key_id, |
|
458 |
|
"ip" => $ip); |
|
459 |
|
$sql = "UPDATE keys SET first_use = @@now@@" |
|
460 |
|
. " WHERE first_use = 0" |
|
461 |
|
. " AND key_id = @@key_id@@"; |
|
462 |
|
$res = rg_sql_query_params($db, $sql, $params); |
|
463 |
|
if ($res === FALSE) { |
|
464 |
|
rg_keys_set_error("cannot update key's first use" |
|
465 |
|
. " (" . rg_sql_error() . ")"); |
|
466 |
|
break; |
|
|
476 |
|
$update_first_use = TRUE; |
|
477 |
|
$update_last_use = TRUE; |
|
478 |
|
|
|
479 |
|
$key = 'user' . '::' . $uid . '::' . 'keys' . '::' . $key_id; |
|
480 |
|
$c = rg_cache_get($key); |
|
481 |
|
if ($c !== FALSE) { |
|
482 |
|
if (isset($c['first_use']) && ($c['first_use'] > 0)) |
|
483 |
|
$update_first_use = FALSE; |
|
484 |
|
|
|
485 |
|
// We will not update the field if is too soon |
|
486 |
|
if (isset($c['last_use']) |
|
487 |
|
&& (strcmp($ip, $c['last_ip']) == 0) |
|
488 |
|
&& (strcmp($cmd, $c['last_cmd']) == 0) |
|
489 |
|
&& ($now - $c['last_use'] < 60)) |
|
490 |
|
$update_last_use = FALSE; |
467 |
491 |
} |
} |
468 |
492 |
|
|
469 |
|
$sql = "UPDATE keys SET last_use = @@now@@" |
|
470 |
|
. ", last_ip = @@ip@@" |
|
471 |
|
. ", count = count + 1" |
|
472 |
|
. " WHERE key_id = @@key_id@@"; |
|
473 |
|
$res = rg_sql_query_params($db, $sql, $params); |
|
474 |
|
if ($res === FALSE) { |
|
475 |
|
rg_keys_set_error("cannot update key" |
|
476 |
|
. " (" . rg_sql_error() . ")"); |
|
477 |
|
break; |
|
|
493 |
|
$params = array( |
|
494 |
|
'now' => $now, |
|
495 |
|
'key_id' => $key_id, |
|
496 |
|
'ip' => $ip, |
|
497 |
|
'last_cmd' => $cmd); |
|
498 |
|
|
|
499 |
|
if ($update_first_use) { |
|
500 |
|
$sql = "UPDATE keys SET first_use = @@now@@" |
|
501 |
|
. " WHERE first_use = 0" |
|
502 |
|
. " AND key_id = @@key_id@@"; |
|
503 |
|
$res = rg_sql_query_params($db, $sql, $params); |
|
504 |
|
if ($res === FALSE) { |
|
505 |
|
rg_keys_set_error("cannot update key's first use"); |
|
506 |
|
break; |
|
507 |
|
} |
|
508 |
|
rg_sql_free_result($res); |
|
509 |
|
|
|
510 |
|
rg_cache_set($key . '::' . 'first_use', $now, |
|
511 |
|
RG_SOCKET_NO_WAIT); |
478 |
512 |
} |
} |
479 |
|
rg_sql_free_result($res); |
|
|
513 |
|
|
|
514 |
|
if ($update_last_use) { |
|
515 |
|
$sql = "UPDATE keys SET last_use = @@now@@" |
|
516 |
|
. ", last_ip = @@ip@@" |
|
517 |
|
. ", last_cmd = @@last_cmd@@" |
|
518 |
|
. ", count = count + 1" |
|
519 |
|
. " WHERE key_id = @@key_id@@"; |
|
520 |
|
$res = rg_sql_query_params($db, $sql, $params); |
|
521 |
|
if ($res === FALSE) { |
|
522 |
|
rg_keys_set_error("cannot update key" |
|
523 |
|
. " (" . rg_sql_error() . ")"); |
|
524 |
|
break; |
|
525 |
|
} |
|
526 |
|
rg_sql_free_result($res); |
|
527 |
|
|
|
528 |
|
$a = array( |
|
529 |
|
'last_use' => $now, |
|
530 |
|
'last_ip' => $ip, |
|
531 |
|
'last_cmd' => $cmd); |
|
532 |
|
rg_cache_merge($key, $a, RG_SOCKET_NO_WAIT); |
|
533 |
|
} |
|
534 |
|
|
480 |
535 |
$ret = TRUE; |
$ret = TRUE; |
481 |
536 |
break; |
break; |
482 |
537 |
} |
} |
|
... |
... |
function rg_keys_list($db, $ui) |
621 |
676 |
else |
else |
622 |
677 |
$t['last_use'] = gmdate("Y-m-d H:i", $row['last_use']); |
$t['last_use'] = gmdate("Y-m-d H:i", $row['last_use']); |
623 |
678 |
|
|
|
679 |
|
if (empty($t['last_cmd'])) |
|
680 |
|
$t['last_cmd'] = "N/A"; |
|
681 |
|
else |
|
682 |
|
$t['last_cmd'] = $row['last_cmd']; |
|
683 |
|
|
624 |
684 |
$t['count'] = $row['count']; |
$t['count'] = $row['count']; |
625 |
685 |
|
|
626 |
686 |
$ret[] = $t; |
$ret[] = $t; |