X-Git-Url: https://mop.ddnsfree.com/gitweb/?a=blobdiff_plain;f=web%2FObj%2Fhardban.phh;h=c59deb37d0b6d29ad639b7d70330a53641d80ee1;hb=db5d6355c39327ba7f8052f360f1e846ba4ad01c;hp=239ed7ddfe2aab17b6102f542a585a5d6fca9b3e;hpb=d4946c548a47a8eb564ced365810be6d0583d814;p=brisk.git diff --git a/web/Obj/hardban.phh b/web/Obj/hardban.phh index 239ed7d..c59deb3 100644 --- a/web/Obj/hardban.phh +++ b/web/Obj/hardban.phh @@ -2,7 +2,7 @@ /* * 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 @@ -22,11 +22,11 @@ * */ -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; @@ -44,6 +44,8 @@ class Hardban { } class Hardbans { + static $delta_t; + var $item; var $item_n; var $mod; @@ -66,8 +68,8 @@ class Hardbans { 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; @@ -143,7 +145,7 @@ class Hardbans { } // Static functions - function &init_data() + static function create() { $chal =& new Hardbans(); @@ -152,17 +154,16 @@ class 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"); } @@ -171,18 +172,20 @@ class Hardbans { $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; @@ -191,23 +194,19 @@ class Hardbans { $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) { @@ -218,8 +217,9 @@ class Hardbans { 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; @@ -238,30 +238,25 @@ class Hardbans { return (FALSE); } - function lock_data() + static function lock_data($is_exclusive) { - if (($tok = @ftok(FTOK_PATH."/hardbans", "B")) == -1) { - return (FALSE); - } - // echo "FTOK ".$tok."
"; - if (($res = sem_get($tok)) == FALSE) { - return (FALSE); - } - 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); } @@ -269,7 +264,7 @@ class Hardbans { { $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++) { @@ -288,7 +283,7 @@ class Hardbans { } } // for (... if ($hban->ismod()) { - Hardbans::save_data(&$hban); + Hardbans::save_data($hban); } } // if (load_data Hardbans::unlock_data($a_sem); @@ -303,14 +298,14 @@ class Hardbans { { $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) { $hban->add_item($login, $ip, $session, $timeout); if ($hban->ismod()) { - Hardbans::save_data(&$hban); + Hardbans::save_data($hban); } } // if (load_data Hardbans::unlock_data($a_sem); @@ -321,4 +316,4 @@ class Hardbans { } // End CLASS Hardbans -?> \ No newline at end of file +?>