From: dms Date: Sat, 5 Jan 2002 14:08:47 +0000 (+0000) Subject: - IsHostMatch: check for NULL. X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4996552959543db988799ec9ff7e3df4615f6f9a;p=infobot.git - IsHostMatch: check for NULL. - forget: reduced by half-tab formatting. - forget: added isau (is_author) - forget: limitage is now a scale of 0->$limit (1->100%) - unforget: moved !$result check after $check check. - unforget: confirm whether it was recovered or not. - debiancheck: moved back to miscCheck2 git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@541 c11ca15a-4712-0410-83d8-924469b57eb5 --- diff --git a/src/Factoids/Core.pl b/src/Factoids/Core.pl index 067e494..41ed537 100644 --- a/src/Factoids/Core.pl +++ b/src/Factoids/Core.pl @@ -145,128 +145,136 @@ sub FactoidStuff { $faqtoid =~ tr/A-Z/a-z/; my $result = &getFactoid($faqtoid); - if (defined $result) { - my $author = &getFactInfo($faqtoid, "created_by"); - my $count = &getFactInfo($faqtoid, "requested_count") || 0; - my $limit = &getChanConfDefault( + # if it doesn't exist, well... it doesn't! + if (!defined $result) { + &performReply("i didn't have anything called '$faqtoid'"); + return; + } + + my $author = &getFactInfo($faqtoid, "created_by"); + my $count = &getFactInfo($faqtoid, "requested_count") || 0; + my $limit = &getChanConfDefault( "factoidPreventForgetLimit", 100, $chan); - my $limitage = &getChanConfDefault( + my $limitage = &getChanConfDefault( "factoidPreventForgetLimitTime", 180, $chan); - my $age = time() - &getFactInfo($faqtoid, "created_time"); + my $t = &getFactInfo($faqtoid, "created_time") || 0; + my $age = time() - $t; - if (IsFlag("r") ne "r") { - &msg($who, "you don't have access to remove factoids"); - return; - } + # lets scale limitage from 1 (nearly 0) to $limit (full time). + $limitage = $limitage*($count+1)/$limit if ($count < $limit); + # isauthor and isop. + my $isau = (defined $author and &IsHostMatch($author) == 2) ? 1 : 0; + my $isop = (&IsFlag("o") eq "o") ? 1 : 0; - return 'locked factoid' if (&IsLocked($faqtoid) == 1); - my $isop = (&IsFlag("o") eq "o") ? 1 : 0; + if (IsFlag("r") ne "r") { + &msg($who, "you don't have access to remove factoids"); + return; + } - ### lets go do some checking. + return 'locked factoid' if (&IsLocked($faqtoid) == 1); - # factoidPreventForgetLimitTime: - if (!$isop and $age/(60*60*24) > $limitage) { - &msg($who, "cannot remove factoid since it is protected by Time."); - return; - } + ### + ### lets go do some checking. + ### - # factoidPreventForgetLimit: - if (!$isop and $limit and $count > $limit) { - &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)"); - return; - } + # factoidPreventForgetLimitTime: + if (!($isop or $isau) and $age/(60*60*24) > $limitage) { + &msg($who, "cannot remove factoid '$faqtoid' since it is protected by Time."); + return; + } - # this may eat some memory. - # prevent deletion if other factoids redirect to it. - # todo: use hash instead of array. - my @list; - if (&getChanConf("factoidPreventForgetRedirect")) { - &status("Factoids/Core: forget: checking for redirect factoids"); - @list = &searchTable("factoids", "factoid_key", - "factoid_value", "^ see "); - } + # factoidPreventForgetLimit: + if (!($isop or $isau) and $limit and $count > $limit) { + &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)"); + return; + } - my $match = 0; - for (@list) { - my $f = $_; - my $v = &getFactInfo($f, "factoid_value"); - my $fsafe = quotemeta($faqtoid); - next unless ($v =~ /^ ?see( also)? $fsafe\.?$/i); + # this may eat some memory. + # prevent deletion if other factoids redirect to it. + # todo: use hash instead of array. + my @list; + if (&getChanConf("factoidPreventForgetRedirect")) { + &status("Factoids/Core: forget: checking for redirect factoids"); + @list = &searchTable("factoids", "factoid_key", + "factoid_value", "^ see "); + } - &DEBUG("Factoids/Core: match! ($f || $faqtoid)"); + my $match = 0; + for (@list) { + my $f = $_; + my $v = &getFactInfo($f, "factoid_value"); + my $fsafe = quotemeta($faqtoid); + next unless ($v =~ /^ ?see( also)? $fsafe\.?$/i); - $match++; - } - # todo: warn for op aswell, but allow force delete. - if (!$isop and $match) { - &msg($who, "uhm, other (redirection) factoids depend on this one."); - return; - } + &DEBUG("Factoids/Core: match! ($f || $faqtoid)"); - # minimize abuse. - my $faqauth = &getFactInfo($faqtoid, "created_by"); - if (!$isop and &IsHostMatch($faqauth) != 2) { - $cache{forget}{$h}++; + $match++; + } + # todo: warn for op aswell, but allow force delete. + if (!$isop and $match) { + &msg($who, "uhm, other (redirection) factoids depend on this one."); + return; + } - # warn. - if ($cache{forget}{$h} > 3) { - &msg($who, "Stop abusing forget!"); - } + # minimize abuse. + if (!$isop and &IsHostMatch($author) != 2) { + $cache{forget}{$h}++; - # ignore. - # todo: make forget limit configurable. - # todo: make forget ignore time configurable. - if ($cache{forget}{$h} > 5) { - &ignoreAdd(&makeHostMask($nuh), "*", 3*24*60*60, "abuse of forget"); - &msg($who, "forget: Suck it!"); - } + # warn. + if ($cache{forget}{$h} > 3) { + &msg($who, "Stop abusing forget!"); } - # lets do it! + # ignore. + # todo: make forget limit configurable. + # todo: make forget ignore time configurable. + if ($cache{forget}{$h} > 5) { + &ignoreAdd(&makeHostMask($nuh), "*", 3*24*60*60, "abuse of forget"); + &msg($who, "forget: Suck it!"); + } + } - if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) { - if (!$isop and $faqtoid =~ / #DEL#$/) { - &msg($who, "cannot delete it ($faqtoid)."); - return; - } + # lets do it! - &status("forgot (safe delete): '$faqtoid' - ". scalar(localtime)); - ### TODO: check if the "backup" exists and overwrite it - my $check = &getFactoid("$faqtoid #DEL#"); + if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) { + if (!($isop or $isau) and $faqtoid =~ / #DEL#$/) { + &msg($who, "cannot delete it ($faqtoid)."); + return; + } - if (!defined $check or $check =~ /^\s*$/) { - if ($faqtoid !~ / #DEL#$/) { - my $new = $faqtoid." #DEL#"; + &status("forgot (safe delete): '$faqtoid' - ". scalar(localtime)); + ### TODO: check if the "backup" exists and overwrite it + my $check = &getFactoid("$faqtoid #DEL#"); - my $backup = &getFactoid($new); - if ($backup) { - &DEBUG("forget: not overwriting backup: $faqtoid"); - } else { - &status("forget: backing up '$faqtoid'"); - &setFactInfo($faqtoid, "factoid_key", $new); - &setFactInfo($new, "modified_by", $who); - &setFactInfo($new, "modified_time", time()); - } + if (!defined $check or $check =~ /^\s*$/) { + if ($faqtoid !~ / #DEL#$/) { + my $new = $faqtoid." #DEL#"; + my $backup = &getFactoid($new); + if ($backup) { + &DEBUG("forget: not overwriting backup: $faqtoid"); } else { - &status("forget: not backing up $faqtoid."); + &status("forget: backing up '$faqtoid'"); + &setFactInfo($faqtoid, "factoid_key", $new); + &setFactInfo($new, "modified_by", $who); + &setFactInfo($new, "modified_time", time()); } } else { - &status("forget: not overwriting backup!"); + &status("forget: not backing up $faqtoid."); } - } - &status("forget: <$who> '$faqtoid' =is=> '$result'"); - &delFactoid($faqtoid); + } else { + &status("forget: not overwriting backup!"); + } + } - &performReply("i forgot $faqtoid"); + &status("forget: <$who> '$faqtoid' =is=> '$result'"); + &delFactoid($faqtoid); - $count{'Update'}++; + &performReply("i forgot $faqtoid"); - } else { - &performReply("i didn't have anything called '$faqtoid'"); - } + $count{'Update'}++; return; } @@ -293,25 +301,28 @@ sub FactoidStuff { my $result = &getFactoid($faqtoid." #DEL#"); my $check = &getFactoid($faqtoid); - if (!defined $result) { - &performReply("that factoid was not backedup :/"); - return; - } - if (defined $check) { &performReply("cannot undeleted '$faqtoid' because it already exists!"); return; } - &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid); - - ### delete info. modified_ isn't really used. - &setFactInfo($faqtoid, "modified_by", ""); - &setFactInfo($faqtoid, "modified_time", 0); + if (!defined $result) { + &performReply("that factoid was not backedup :/"); + return; + } - &performReply("Successfully recovered '$faqtoid'. Have fun now."); + &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid); +# &setFactInfo($faqtoid, "modified_by", ""); +# &setFactInfo($faqtoid, "modified_time", 0); - $count{'Undelete'}++; + $check = &getFactoid($faqtoid); + # todo: check if $faqtoid." #DEL#" exists? + if (defined $check) { + &performReply("Successfully recovered '$faqtoid'. Have fun now."); + $count{'Undelete'}++; + } else { + &performReply("did not recover '$faqtoid'. What happened?"); + } return; } diff --git a/src/IRC/Schedulers.pl b/src/IRC/Schedulers.pl index c325ab3..2077d48 100644 --- a/src/IRC/Schedulers.pl +++ b/src/IRC/Schedulers.pl @@ -787,17 +787,6 @@ sub miscCheck { return if ($_[0] eq "2"); # defer. } - # debian check. - opendir(DEBIAN, "$bot_state_dir/debian"); - foreach ( grep /gz$/, readdir(DEBIAN) ) { - my $exit = CORE::system("gzip -t $bot_state_dir/debian/$_"); - next unless ($exit); - - &status("debian: unlinking file => $_"); - unlink "$bot_state_dir/debian/$_"; - } - closedir DEBIAN; - # SHM check. my @ipcs; if ( -x "/usr/bin/ipcs") { @@ -851,6 +840,17 @@ sub miscCheck2 { return if ($_[0] eq "2"); # defer. } + # debian check. + opendir(DEBIAN, "$bot_state_dir/debian"); + foreach ( grep /gz$/, readdir(DEBIAN) ) { + my $exit = CORE::system("gzip -t $bot_state_dir/debian/$_"); + next unless ($exit); + + &status("debian: unlinking file => $_"); + unlink "$bot_state_dir/debian/$_"; + } + closedir DEBIAN; + # compress logs that should have been compressed. # todo: use strftime? my ($day,$month,$year) = (localtime(time()))[3,4,5]; diff --git a/src/Misc.pl b/src/Misc.pl index 5e9bf14..9379d7b 100644 --- a/src/Misc.pl +++ b/src/Misc.pl @@ -416,7 +416,10 @@ sub IsHostMatch { $local{'host'} = &makeHostMask(lc $3); } - if ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) { + if (!defined $thisnuh) { + &WARN("IHM: thisnuh == NULL."); + return 0; + } elsif ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) { $this{'nick'} = lc $1; $this{'user'} = lc $2; $this{'host'} = &makeHostMask(lc $3);