/*
* brisk - auth.phh
*
- * Copyright (C) 2006-2008 Matteo Nastasi
+ * Copyright (C) 2006-2012 Matteo Nastasi
* mailto: nastasi@alternativeoutput.it
* matteo.nastasi@milug.org
* web: http://www.alternativeoutput.it
*
*/
-define(HBAN_SHM_DIMS_MIN, 16384);
-define(HBAN_SHM_DIMS_MAX, 65536);
-define(HBAN_SHM_DIMS_DLT, 16384);
-define(HBAN_VALID_TIME, 15);
-define(HBAN_GARBAGE_TIMEOUT, 5);
+define('HBAN_SHM_DIMS_MIN', 16384);
+define('HBAN_SHM_DIMS_MAX', 65536);
+define('HBAN_SHM_DIMS_DLT', 16384);
+define('HBAN_VALID_TIME', 15);
+define('HBAN_GARBAGE_TIMEOUT', 5);
class Hardban {
var $login;
}
class Hardbans {
+ static $delta_t;
+
var $item;
var $item_n;
var $mod;
log_auth("xxx", sprintf("Hardbans::add [%s]\n", $login));
- if (($chal = new Hardban($login, $ip, $session, $timeout)) == null) {
- return ($G_false);
+ if (($chal = new Hardban($login, $ip, $session, $timeout)) == FALSE) {
+ return (FALSE);
}
$this->item[$this->item_n] = $chal;
}
// Static functions
- function &init_data()
+ static function create()
{
$chal =& new Hardbans();
return $chal;
}
- function &load_data()
+ function load_data()
{
- GLOBAL $G_false, $sess;
- $doexit = FALSE;
+ GLOBAL $sess;
+
do {
- if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) {
+ if (($tok = @ftok(FTOK_PATH."/hardbans", "C")) == -1) {
log_main("ftok failed");
- $doexit = TRUE;
break;
}
-
+ fprintf(STDERR, "hardpans: %x\n", $tok);
if (($shm_sz = sharedmem_sz($tok)) == -1) {
log_main("shmop_open failed");
}
$shm_sz = HBAN_SHM_DIMS_MIN;
if ($shm = shm_attach($tok, $shm_sz)) {
- $hban = @shm_get_var($shm, $tok);
+ $hban = @shm_get_var($shm, $tok); // CHECKED BELOW
log_only("hardban == ".($hban == FALSE ? "FALSE" : "TRUE")." hardban === ".($hban === FALSE ? "FALSE" : "TRUE")." hardban isset ".(isset($hban) ? "TRUE" : "FALSE"));
if ($hban == FALSE) {
log_only("INIT HARDBAN DATA");
- $hban =& Hardbans::init_data();
+ $hban =& Hardbans::create();
if (@shm_put_var($shm, $tok, $hban) == FALSE) {
log_only("PUT_VAR FALLITA ".strlen(serialize($hban)));
log_only(serialize($hban));
}
+ log_shme("Hardban::save_data2");
+
}
$hban->shm_sz = $shm_sz;
$hban->garbage_manager(TRUE);
- $ret = &$hban;
- return ($ret);
+ return ($hban);
} while (0);
- if ($doexit)
- exit();
-
- return ($G_false);
+ return (FALSE);
}
- function save_data(&$hban)
+ function save_data($hban)
{
$shm = FALSE;
$oldmod = $hban->mod;
- if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1)
+ if (($tok = @ftok(FTOK_PATH."/hardbans", "C")) == -1)
return (FALSE);
while ($hban->shm_sz < HBAN_SHM_DIMS_MAX) {
log_only("hardban count ".count($hban->item)." _n: ".$hban->item_n);
$hban->mod = FALSE;
- if (shm_put_var($shm, $tok, $hban) != FALSE) {
+ if (@shm_put_var($shm, $tok, $hban) != FALSE) {
shm_detach($shm);
+ log_shme("Hardban::save_data");
return (TRUE);
}
$hban->mod = $oldmod;
return (FALSE);
}
- function lock_data()
+ static function lock_data($is_exclusive)
{
- if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) {
- echo "FTOK FAILED";
- exit;
- }
- // echo "FTOK ".$tok."<br>";
- if (($res = sem_get($tok)) == FALSE) {
- echo "SEM_GET FAILED";
- exit;
- }
- if (sem_acquire($res)) {
- log_lock("LOCK hardbans");
- return ($res);
- }
- else
+ if (($res = file_lock(FTOK_PATH."/hardbans", $is_exclusive)) != FALSE) {
+ self::$delta_t = microtime(TRUE);
+ log_lock("LOCK hardbans [".self::$delta_t."]");
+
+ return ($res);
+ }
+
return (FALSE);
}
- function unlock_data($res)
+ static function unlock_data($res)
{
GLOBAL $sess;
- log_lock("UNLOCK hardbans");
+ log_lock("UNLOCK hardbans [".(microtime(TRUE) - (self::$delta_t))."]");
- return (sem_release($res));
+ file_unlock($res);
}
{
$bantime = -1;
/* if it exists check for a valid challenge */
- if (($a_sem = Hardbans::lock_data()) != FALSE) {
+ if (($a_sem = Hardbans::lock_data(TRUE)) != FALSE) {
if (($hban = &Hardbans::load_data()) != FALSE) {
for ($e = 0 ; $e < $hban->item_n ; $e++) {
{
$found = FALSE;
/* if it exists check for a valid challenge */
- if (($a_sem = Hardbans::lock_data()) != FALSE) {
+ if (($a_sem = Hardbans::lock_data(TRUE)) != FALSE) {
if (($hban = &Hardbans::load_data()) != FALSE) {
} // End CLASS Hardbans
-?>
\ No newline at end of file
+?>