Changeset 12950

Show
Ignore:
Timestamp:
06/01/08 00:41:29 (5 years ago)
Author:
topia
Message:

* Merging r12849 through r12948 from trunk.

Location:
lang/perl/tiarra/branches/module-reload
Files:
6 modified
6 copied

Legend:

Unmodified
Added
Removed
  • lang/perl/tiarra/branches/module-reload/all.conf

    r12849 r12950  
    835835 
    836836    # 機能: 
    837     # - 通常応答 
    838     # - 登録数確認(count-query) 
    839     # - 反応確認(request) 
    840     # - 反応追加(add) 
    841     # - 反応削除(remove) 
     837    # - 通常応答(mask) 
     838    # - 登録数確認(count-query/mask) 
     839    # - 反応確認(request/modifier) 
     840    # - 反応追加(add/modifier) 
     841    # - 反応削除(remove/modifier) 
    842842    # 通常応答以外は設定を省略することで機能を無効にできます。 
    843843 
     
    868868    # plum: mask: *!*@* 
    869869 
    870     # このブロックが発言に反応する確率を指定します。 
     870    # マッチした1つの反応マスクが実際に発言に反応する確率を指定します。 
    871871    # 百分率です。省略された場合は100と見做されます。 
    872872    rate: 100 
    873  
    874  
    875     # 反応の確認を行うためのキーワードを指定します。 
    876     # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。 
    877     # 省略するとこの機能は無効になります。 
    878     # 指定したときだけこの機能が有効になります。 
    879     request: 反応チェック 
    880  
    881     # request に反応するときのフォーマットを指定します。 
    882     # #(key) がキーワード、 #(message) が発言に置換されます。 
    883     # request を指定したときのみ必要。 
    884     reply-format: 「#(key)」という発言に「#(message)」と反応します。 
    885  
    886     # request に反応する最大個数(ブロックの数)を指定します。 
    887     # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。 
    888     # 通常の反応には関与しません。また、応答の行数ではありません。 
    889     max-reply: 5 
    890873 
    891874    # メッセージの登録数を返答するキーワードを指定します。 
    892875    # 省略するとこの機能は無効になります。 
    893876    # 指定したときだけこの機能が有効になります。 
     877    # mask で許可された人(通常応答を返す人)が使えます。 
    894878    count-query: 反応登録数 
    895879 
     
    904888    # 省略するとこの機能は無効になります。 
    905889    # 指定したときだけこの機能が有効になります。 
     890    # modifier で許可された人だけ使えます。 
    906891    #add: 反応追加 
    907892 
     
    914899    # 省略するとこの機能は無効になります。 
    915900    # 指定したときだけこの機能が有効になります。 
     901    # modifier で許可された人だけ使えます。 
    916902    #remove: 反応削除 
    917903 
     
    920906    removed-format: #(name|nick.now): #(key) #(message;に対する反応 %s|;) を #(count) 件削除しました。 
    921907 
    922     # addとremoveを許可する人。省略された場合は「* *!*@*」と見做します。 
     908    # 反応の確認を行うためのキーワードを指定します。 
     909    # 通常応答と違って, multivalue-limit の制限を受けずに全てのマッチした応答を返します。 
     910    # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。 
     911    # 省略するとこの機能は無効になります。 
     912    # 指定したときだけこの機能が有効になります。 
     913    # modifier で許可された人だけ使えます。 
     914    request: 反応チェック 
     915 
     916    # request に反応するときのフォーマットを指定します。 
     917    # #(key) がキーワード、 #(message) が発言に置換されます。 
     918    # request を指定したときのみ必要。 
     919    reply-format: 「#(key)」という発言に「#(message)」と反応します。 
     920 
     921    # request に反応する最大個数(反応マスクの数)を指定します。 
     922    # (1つの反応マスクに対応するメッセージの数は制限されません。) 
     923    # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。 
     924    # 通常の反応には関与しません。また、応答の行数ではありません。 
     925    max-reply: 5 
     926 
     927    # 編集系コマンド, add とremove と request を許可する人。 
     928    # 省略された場合は「* *!*@*」(全員許可)と見做します。 
    923929    modifier: * *!*@* 
    924930 
  • lang/perl/tiarra/branches/module-reload/doc/module-reload.txt

    r12496 r12950  
    5959--- 
    6060 
     61BBSを用いる. 
     62main いじらなくていいのでお手軽. 
     63 
     64とりあえず Tools::Rreload をつくってみた. 
     65動作確認してないからうごくかはわかんない. 
     66 
     67 my $my_key = __PACKAGE__; 
     68 
     69 # At destruct(). 
     70 Tools::Reload->store($my_key, $value); 
     71 
     72 # At new(). 
     73 my $value = Tools::Reload->fetch($my_key); 
     74 if( !$value ) 
     75 { 
     76   # new loading. 
     77 }else 
     78 { 
     79   # reloading. 
     80 } 
     81 
     82案4 
     83--- 
     84 
    6185思いついたらふやす. 
    6286 
     
    81105  module_destruct を Timer, Hook, ExternalSocket, Tiarra::Socket, それから 
    82106  Tiarra::WrapMainLoop に実装した. あと何かありましたっけ. 
     107 
     108[EOF] 
  • lang/perl/tiarra/branches/module-reload/doc/module/Auto.html

    r12849 r12950  
    764764<p class="comment"> 
    765765機能:<br /> 
    766 - 通常応答<br /> 
    767 - 登録数確認(count-query)<br /> 
    768 - 反応確認(request)<br /> 
    769 - 反応追加(add)<br /> 
    770 - 反応削除(remove)<br /> 
     766- 通常応答(mask)<br /> 
     767- 登録数確認(count-query/mask)<br /> 
     768- 反応確認(request/modifier)<br /> 
     769- 反応追加(add/modifier)<br /> 
     770- 反応削除(remove/modifier)<br /> 
    771771通常応答以外は設定を省略することで機能を無効にできます。<br /> 
    772772</p> 
     
    806806</p> 
    807807<p class="comment"> 
    808 このブロックが発言に反応する確率を指定します。<br /> 
     808マッチした1つの反応マスクが実際に発言に反応する確率を指定します。<br /> 
    809809百分率です。省略された場合は100と見做されます。<br /> 
    810810</p> 
    811811<div class="element"><span class="key">rate</span>:<span class="value">100</span></div> 
    812 <p class="comment"> 
    813 反応の確認を行うためのキーワードを指定します。<br /> 
    814 実際の指定方法は、「&lt;requestで指定したキーワード&gt; &lt;チェックしたい発言&gt;」です。<br /> 
    815 省略するとこの機能は無効になります。<br /> 
    816 指定したときだけこの機能が有効になります。<br /> 
    817 </p> 
    818 <div class="element"><span class="key">request</span>:<span class="value">反応チェック</span></div> 
    819 <p class="comment"> 
    820 request に反応するときのフォーマットを指定します。<br /> 
    821 #(key) がキーワード、 #(message) が発言に置換されます。<br /> 
    822 request を指定したときのみ必要。<br /> 
    823 </p> 
    824 <div class="element"><span class="key">reply-format</span>:<span class="value">「#(key)」という発言に「#(message)」と反応します。</span></div> 
    825 <p class="comment"> 
    826 request に反応する最大個数(ブロックの数)を指定します。<br /> 
    827 あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。<br /> 
    828 通常の反応には関与しません。また、応答の行数ではありません。<br /> 
    829 </p> 
    830 <div class="element"><span class="key">max-reply</span>:<span class="value">5</span></div> 
    831812<p class="comment"> 
    832813メッセージの登録数を返答するキーワードを指定します。<br /> 
    833814省略するとこの機能は無効になります。<br /> 
    834815指定したときだけこの機能が有効になります。<br /> 
     816mask で許可された人(通常応答を返す人)が使えます。<br /> 
    835817</p> 
    836818<div class="element"><span class="key">count-query</span>:<span class="value">反応登録数</span></div> 
     
    847829省略するとこの機能は無効になります。<br /> 
    848830指定したときだけこの機能が有効になります。<br /> 
     831modifier で許可された人だけ使えます。<br /> 
    849832</p> 
    850833<div class="element"><span class="key">add</span>:<span class="value">反応追加</span></div> 
     
    859842省略するとこの機能は無効になります。<br /> 
    860843指定したときだけこの機能が有効になります。<br /> 
     844modifier で許可された人だけ使えます。<br /> 
    861845</p> 
    862846<div class="element"><span class="key">remove</span>:<span class="value">反応削除</span></div> 
     
    867851<div class="element"><span class="key">removed-format</span>:<span class="value">#(name|nick.now): #(key) #(message;に対する反応 %s|;) を #(count) 件削除しました。</span></div> 
    868852<p class="comment"> 
    869 addとremoveを許可する人。省略された場合は「* *!*@*」と見做します。<br /> 
     853反応の確認を行うためのキーワードを指定します。<br /> 
     854通常応答と違って, multivalue-limit の制限を受けずに全てのマッチした応答を返します。<br /> 
     855実際の指定方法は、「&lt;requestで指定したキーワード&gt; &lt;チェックしたい発言&gt;」です。<br /> 
     856省略するとこの機能は無効になります。<br /> 
     857指定したときだけこの機能が有効になります。<br /> 
     858modifier で許可された人だけ使えます。<br /> 
     859</p> 
     860<div class="element"><span class="key">request</span>:<span class="value">反応チェック</span></div> 
     861<p class="comment"> 
     862request に反応するときのフォーマットを指定します。<br /> 
     863#(key) がキーワード、 #(message) が発言に置換されます。<br /> 
     864request を指定したときのみ必要。<br /> 
     865</p> 
     866<div class="element"><span class="key">reply-format</span>:<span class="value">「#(key)」という発言に「#(message)」と反応します。</span></div> 
     867<p class="comment"> 
     868request に反応する最大個数(反応マスクの数)を指定します。<br /> 
     869(1つの反応マスクに対応するメッセージの数は制限されません。)<br /> 
     870あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。<br /> 
     871通常の反応には関与しません。また、応答の行数ではありません。<br /> 
     872</p> 
     873<div class="element"><span class="key">max-reply</span>:<span class="value">5</span></div> 
     874<p class="comment"> 
     875編集系コマンド, add とremove と request を許可する人。<br /> 
     876省略された場合は「* *!*@*」(全員許可)と見做します。<br /> 
    870877</p> 
    871878<div class="element"><span class="key">modifier</span>:<span class="value">* *!*@*</span></div> 
  • lang/perl/tiarra/branches/module-reload/main/Tiarra/Resolver.pm

    r11407 r12950  
    6666our $use_threads_state_checking; 
    6767BEGIN { 
    68     $use_threads = Tiarra::OptionalModules->threads; 
     68    $use_threads = !$^C && Tiarra::OptionalModules->threads; 
    6969    if ($use_threads) { 
    7070        require threads; 
  • lang/perl/tiarra/branches/module-reload/module/Auto/Reply.pm

    r12849 r12950  
    256256 
    257257  # 機能: 
    258   # - 通常応答 
    259   # - 登録数確認(count-query) 
    260   # - 反応確認(request) 
    261   # - 反応追加(add) 
    262   # - 反応削除(remove) 
     258  # - 通常応答(mask) 
     259  # - 登録数確認(count-query/mask) 
     260  # - 反応確認(request/modifier) 
     261  # - 反応追加(add/modifier) 
     262  # - 反応削除(remove/modifier) 
    263263  # 通常応答以外は設定を省略することで機能を無効にできます。 
    264264 
     
    289289  # plum: mask: *!*@* 
    290290 
    291   # このブロックが発言に反応する確率を指定します。 
     291  # マッチした1つの反応マスクが実際に発言に反応する確率を指定します。 
    292292  # 百分率です。省略された場合は100と見做されます。 
    293293  rate: 100 
    294  
    295  
    296   # 反応の確認を行うためのキーワードを指定します。 
    297   # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。 
    298   # 省略するとこの機能は無効になります。 
    299   # 指定したときだけこの機能が有効になります。 
    300   request: 反応チェック 
    301  
    302   # request に反応するときのフォーマットを指定します。 
    303   # #(key) がキーワード、 #(message) が発言に置換されます。 
    304   # request を指定したときのみ必要。 
    305   reply-format: 「#(key)」という発言に「#(message)」と反応します。 
    306  
    307   # request に反応する最大個数(ブロックの数)を指定します。 
    308   # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。 
    309   # 通常の反応には関与しません。また、応答の行数ではありません。 
    310   max-reply: 5 
    311294 
    312295  # メッセージの登録数を返答するキーワードを指定します。 
    313296  # 省略するとこの機能は無効になります。 
    314297  # 指定したときだけこの機能が有効になります。 
     298  # mask で許可された人(通常応答を返す人)が使えます。 
    315299  count-query: 反応登録数 
    316300 
     
    325309  # 省略するとこの機能は無効になります。 
    326310  # 指定したときだけこの機能が有効になります。 
     311  # modifier で許可された人だけ使えます。 
    327312  -add: 反応追加 
    328313 
     
    335320  # 省略するとこの機能は無効になります。 
    336321  # 指定したときだけこの機能が有効になります。 
     322  # modifier で許可された人だけ使えます。 
    337323  -remove: 反応削除 
    338324 
     
    341327  removed-format: #(name|nick.now): #(key) #(message;に対する反応 %s|;) を #(count) 件削除しました。 
    342328 
    343   # addとremoveを許可する人。省略された場合は「* *!*@*」と見做します。 
     329  # 反応の確認を行うためのキーワードを指定します。 
     330  # 通常応答と違って, multivalue-limit の制限を受けずに全てのマッチした応答を返します。 
     331  # 実際の指定方法は、「<requestで指定したキーワード> <チェックしたい発言>」です。 
     332  # 省略するとこの機能は無効になります。 
     333  # 指定したときだけこの機能が有効になります。 
     334  # modifier で許可された人だけ使えます。 
     335  request: 反応チェック 
     336 
     337  # request に反応するときのフォーマットを指定します。 
     338  # #(key) がキーワード、 #(message) が発言に置換されます。 
     339  # request を指定したときのみ必要。 
     340  reply-format: 「#(key)」という発言に「#(message)」と反応します。 
     341 
     342  # request に反応する最大個数(反応マスクの数)を指定します。 
     343  # (1つの反応マスクに対応するメッセージの数は制限されません。) 
     344  # あまり大きな値を指定すると、アタックが可能になったり、ログが流れて邪魔なので注意してください。 
     345  # 通常の反応には関与しません。また、応答の行数ではありません。 
     346  max-reply: 5 
     347 
     348  # 編集系コマンド, add とremove と request を許可する人。 
     349  # 省略された場合は「* *!*@*」(全員許可)と見做します。 
    344350  modifier: * *!*@* 
    345351 
  • lang/perl/tiarra/branches/module-reload/module/System/WebClient.pm

    r12849 r12950  
    2424use Scalar::Util qw(weaken); 
    2525 
    26 our $VERSION = '0.02'; 
     26our $VERSION = '0.03'; 
    2727 
    2828our $DEBUG = 0; 
     
    470470  } 
    471471 
     472  $DEBUG and $this->_debug("$peer: check auth ..."); 
    472473  my $accepted = $this->auth($conflist, $req); 
    473474  if( @$accepted ) 
     
    535536  foreach my $conf (@$conflist) 
    536537  { 
     538    $DEBUG and $this->_debug("$req->{peer}: check auth for $conf->{name}"); 
    537539    my $authlist = $conf->{auth} or next; 
    538540    foreach my $auth (@$authlist) 
    539541    { 
    540       $auth or next; 
     542      if( !$auth ) 
     543      { 
     544        $DEBUG and ::printmsg("$req->{peer}: - skip: empty value"); 
     545      } 
    541546      my @param = split(' ', $auth) or next; 
    542547      $param[0] =~ /^:/ or unshift(@param, ':basic'); 
     
    544549      if( !$sub ) 
    545550      { 
     551        $DEBUG and ::printmsg("$req->{peer}: - skip: unsupported: $param[0]"); 
    546552        next; 
    547553      } 
     
    549555      if( $ok ) 
    550556      { 
     557        $DEBUG and $this->_debug("$req->{peer}: - $conf->{name} accepted ($param[0])"); 
    551558        push(@accepts, $conf); 
    552559      }elsif( defined($ok) ) 
    553560      { 
     561        $DEBUG and $this->_debug("$req->{peer}: auth denied by $conf->{name}"); 
    554562        return undef; 
    555563      } 
     
    566574 
    567575  my $line = $req->{Header}{Authorization}; 
    568   $line or return; 
     576  if( !$line ) 
     577  { 
     578    $DEBUG and ::printmsg("$req->{peer}: no Authorization: header"); 
     579    return; 
     580  } 
    569581 
    570582  my ($type, $val) = split(' ', $line, 2); 
    571   $type eq 'Basic' or return; 
     583  if( $type ne 'Basic' ) 
     584  { 
     585    $DEBUG and ::printmsg("$req->{peer}: not Basic Authorization (got $type)"); 
     586    return; 
     587  } 
    572588 
    573589  require MIME::Base64; 
     
    587603    return; 
    588604  } 
     605  $DEBUG and ::printmsg("$req->{peer}: accept user $param->[0] pass $param->[2] with '$user' '$pass'"); 
    589606  1; 
    590607} 
     
    920937# パスワードの比較検証. 
    921938# "{MD5}xxx" (MD5) 
     939# "{SMD5}xxx" (Salted MD5, hex(md5(pass+salt)+salt) 
    922940# "{B}xxx"   (BASE64) 
    923941# "{RAW}xxx" (生パスワード) 
     942# "{CRYPT}xxx" (cryptパスワード) 
    924943# "xxx"      (生パスワード) 
    925944# 
     
    951970    } 
    952971    my $cmp = Digest::MD5::md5_hex($plain); 
    953     return $enc eq $cmp; 
     972    return $cmp eq lc($enc); 
     973  }elsif( $type =~ /^(SMD5)\z/ ) 
     974  { 
     975    eval { require Digest::MD5; }; 
     976    if( $@ ) 
     977    { 
     978      die "no Digest::MD5"; 
     979    } 
     980    my $enc_hex  = substr($enc, 0, 32); 
     981    my $enc_salt = pack("H*",substr($enc, 32)); 
     982    my $cmp = Digest::MD5::md5_hex($plain.$enc_salt); 
     983    return $cmp eq lc($enc_hex); 
    954984  }elsif( $type =~ /^(RAW)\z/ ) 
    955985  { 
    956986    return $enc eq $plain; 
     987  }elsif( $type =~ /^(CRYPT)\z/ ) 
     988  { 
     989    my $cmp = crypt($plain,substr($enc,0,2)); 
     990    if( length($plain) > 8 ) 
     991    { 
     992      my $cmp2 = crypt(substr($plain, 0, 8),substr($enc,0,2)); 
     993      if( $cmp eq $cmp2 ) 
     994      { 
     995        die "CRYPT supports upto 8 bytes"; 
     996        return; 
     997      } 
     998    } 
     999    return $cmp eq $enc; 
    9571000  }else 
    9581001  { 
     
    19511994  # auth: :softbank <UID> 
    19521995  # auth: :au <SUBNO> 
    1953   # <pass> には {MD5}xxxx や {B}xxx を利用可能. 
     1996  # 各値(<pass>等)には {MD5}xxxx や {B}xxx や {CRYPT}xxx を利用可能. 
    19541997  # そのままべた書きも出来るけれど. 
    19551998  auth: :basic user pass