2003-07-24

λ MS03-031 : SQL Server の重要な更新 絵でみるセキュリティ情報

どういう悪さされるかはイラストになってる方が分かりやすくていい。

今日の朝5時にダウンロードするSUSマシンには来てなかった。朝7時ダウンロードのSUSマシンには来てた。

λ OpenVPN ported to Windows

マイ一押しVPNソフト OpenVPN がついにWindows対応。 今のところ開発者の都合によりWinXPのみの動作確認だが、Windows2000/NT4でも動くかも、という雰囲気。

OpenVPNはログを見れば大体何が悪いか分かるところがIPsecより楽。OpenVPNならUDPのポート1つだけなのでNAT越えも簡単。

λ [FreeBSD] Pound

ports/www/pound が Pound1.4にアップデートされた。/usr/local/etc/pkgtools.confに以下の行を追加して portupgrade。

MAKE_ARGS = {
      'www/pound'             => 'CONFIGURE_ARGS="--disable-daemon --without-log"' ,
}

これでdaemontoolsの流儀で起動できる。--without-logの影響かCPUを食わなくなった。

λ Hiki PunyCode化 その2

encodeとunencodeが非対称なのが気持ち悪かったのでutilpuny.rbをこんな風にしてみた。 String#escape した結果は Hiki::String クラスになるので、unescape で元に戻る。 ただし文字列演算をしたらアウトという微妙な状況。

require 'uconv'
require 'punycode.so'
module Hiki
  class String < String
    def escape
      Hiki::String.new(CGI::escape(Punycode.euctopuny(self)))
    end
    def unescape
      Hiki::String.new(Punycode.punytoeuc(CGI::unescape(self)))
    end
  end
end
class String
  def escape
    Hiki::String.new(CGI::escape(Punycode.euctopuny(self)))
  end
  def unescapePuny
    if self =~ /^xn\-\-/ then
      Hiki::String.new(Punycode::punytoeuc(self))
    else
      Hiki::String.new(self)
    end
  end
end
class Hash
  def unescapePuny
    # unescape all values (do NOT unescape keys)
    self.keys.each { |k|
      self[k] = self[k].unescapePuny
    }
    self
  end
end
class Array
  def unescapePuny
    self.map { |v| v.unescapePuny }
  end
end

プログラム中に存在する文字列リテラルのクラスを変更するとかいう大技はないよなあ…

そもそも [Server上で文字列をescapeした結果] はHTTPプロトコルを通じてブラウザ上に展開される時点でunescapeされる という非対称性をかかえている、 というか「Server上でunescapeしたい」とはどういう状況なのか検討しないと。

少なくとも db/flatfile.rb中で使われているescape,unescapeはファイル名の生成に利用しているので、 ブラウザに投げる文字列としてescapeするのとは状況がかなり違う。

[]