FireGestures でジェスチャーをキャンセルする

2008/05/06 | ラベル: , | 0 コメント | このエントリーを含むはてなブックマークを表示

設定画面に項目がなく、デフォルトで無効になっているのでメモ。

about:config を開き、

extensions.firegestures.gesture_timeout

を 3000 とかに設定する。単位はミリ秒。

Firefox3でGmailのフィルタ設定のキーワード欄を複数行にする

2008/04/30 | ラベル: , , | 0 コメント | このエントリーを含むはてなブックマークを表示

Firefox 3 にしたら、Gmail のフィルタ設定のキーワード欄を複数行にする Stylish のスタイル定義が効かなくなっていた。

このスタイル定義は

-moz-binding: url(http://persistent.info/files/gmail-filter.xml#filter);

のように外部サイトを参照するようになっており、Firefox 3 のセキュリティ強化によりエラーとなってしまう。考えてみれば、外部サイトに置かれたファイルに定義された書き換えルールを使っているっていうのはかなり危険である。ファイルを置き換えられても気付かないだろうし。。。

自分は新バージョンの Gmail に対応するため、XBL ファイルをローカルに置き、

-moz-binding: url(resource:///chrome/gmail-expand-filter.xml#filter);

としているが、これもエラーとなった。
新バージョンの Gmail でこのフィルタを使うにはこちらを参照。
続・Gmail のフィルタ設定のキーワード欄を複数行にする

解決方法は、XBL ファイルを Stylish のクロムフォルダに置くこと。
パスは <Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content

せっかくなので、手順をまとめておく。目的は Firefox 3 & 新バージョンの Gmail で使えることだけど、たぶん Firefox 2 以前、旧バージョンの Gmail でも動くと思う。

1. XBL ファイルを Stylish のクロムフォルダに置く

<Firefoxプロファイルフォルダ>\extensions\{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}\chrome\content を開き、次の内容を gmail-expand-filter.xml として保存。

<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
  <binding id="filter" styleexplicitcontent="true">
    <implementation>
      <constructor>
        var textarea = document.createElement("textarea");
        textarea.name = this.name;
        textarea.id = this.id;
        textarea.value = this.value;
        textarea.style.width = "100%";
        textarea.style.fontFamily = "monospace";
        textarea.style.fontSize = "14px";
        textarea.rows = 15;
        this.parentNode.replaceChild(textarea, this);
      </constructor>
    </implementation>
  </binding>
</bindings>

2. スタイルを定義する

Stylish に新しいスタイルを作成し、次のコードを入力する。

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain("mail.google.com") {
input[name="cf1_has"],
input.MtafId[tabindex="54"],
input.MtafId[tabindex="5"] {
  display: none;
  -moz-binding: url(chrome://stylish/content/gmail-expand-filter.xml#filter);
}
}

PAM を使って Active Directory で認証する方法

2008/03/09 | ラベル: , | 0 コメント | このエントリーを含むはてなブックマークを表示

PAM を使った自作アプリ(C/C++)で、ユーザの認証を Active Directory で行う方法を紹介。

C/C++アプリのコーディングでは、Active Directory を意識する必要はなく、単に PAM に問い合わせるだけ。認証方法に依存しちゃったら PAM を使う意味ないしね。ここでは PAM ライブラリを用いたコーディングについては触れません。

アプリのプラットフォームは Linux 。今回は、ユーザの認証だけができればよく、Linuxシステム上にアカウントは存在しなくてよい。というより作りたくない。

手順はたかはしもとのぶ氏の Linux の認証を Active Directory で行なう方法 の通りでOK。

また、Windows ActiveDirectory を利用した Linux ログイン認証環境構築時のメモ は Windows と Linux の認証の統合の方法についてよくまとまっている。

手順

  1. PAM、Kerberos といった必要なライブラリをインストールする。RHEL4 ではデフォルトで入るかな?
  2. /etc/krb5.conf を設定する。
  3. /etc/pam.d/hoge を作成する。"hoge" はC/C++アプリ側で指定する PAM の認証サービス名。

これだけ。

/etc/krb5.conf の設定

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = TEST.LOCAL
 default_tkt_enctypes = des-cbc-md5
 default_tgs_enctypes = des-cbc-md5
 dns_lookup_realm = false
 dns_lookup_kdc = false

[realms]
 TEST.LOCAL = {
  kdc = dc1.test.local:88
  admin_server = kerberos.example.com:749
  default_domain = test.local
 }

[domain_realm]
 .test.local = TEST.LOCAL
 test.local = TEST.LOCAL

[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

Active Directory 側で、Administrator のパスワードを一度も変更していない場合、kinit に失敗するので注意。

簡易テスト

ここで Active Directory で認証できるか簡易なテストをする。Active Directory 上に存在するユーザと同名のユーザを Linux 上にも作る。パスワードは未設定でよい。/etc/pam.d/system-auth の先頭エントリに次の1行を加える。

auth        sufficient    /lib/security/$ISA/pam_krb5.so

そのユーザで Linux にログインしてみる。成功すると、/var/log/messages に次のようなログが記録される。

Mar  5 16:39:02 localhost sshd: pam_krb5[22867]: authentication succeeds for 'test01' (test01@TEST.LOCAL)

テストが成功したら、/etc/pam.d/system-auth を元に戻し、Linux 上のユーザは削除しておく。

PAMサービスのコンフィグを書く

#%PAM-1.0
auth       required     /lib/security/pam_krb5.so no_user_check

認証のみでユーザが(ローカル)システムに存在するかチェックしなくてよいので、no_user_check オプションをつけること。

あとは C/C++ アプリで認証ができるか確認する。

ふと気になったこと

  1. Active Directory 側のユーザアカウントが無効、パスワード切れ、パスワード切れ間近、ログイン不可時間帯とかの場合は認証はどうなるんだろう?PAM の設定で auth だけでなく account も必要かも。要確認。
    (2008.4.30追記)
    1. account はなくても OK。
    2. アカウントが無効、ログオン可能時間帯以外(ログオン拒否時間帯)の場合は認証エラーとなる。Clients credentials have been revoked.
    3. パスワード有効期限切れの場合は、エラーにはならず認証が通る。
    4. 次回ログオン時にパスワード変更が必要である状態の場合は認証エラー。KDC has no support for encryption type.
    5. 対話型ログオンにスマートカードが必要とされている場合は認証エラー。KDC policy rejects request.
  2. kdc(=Active Directory)の冗長化はどう図ればよいのか。kdc は複数指定可能?
    ググってみたら kdc は複数指定可能みたい。

krb5.conf から引用。HP-UXのだけど、Linuxでも多分同じ。

[realms]
ATHENA.MIT.EDU = {
        kdc = KERBEROS.MIT.EDU
        kdc = KERBEROS-1.MIT.EDU:750
        kdc = KERBEROS-2.MIT.EDU:88
        admin_server = KERBEROS.MIT.EDU
        default_domain = MIT.EDU
        v4_instance_convert = {
                mit = mit.edu
                lithium = lithium.lcs.mit.edu
        }
}

ドライブレターのないボリュームの容量を取得する

| ラベル: , , | 0 コメント | このエントリーを含むはてなブックマークを表示

WMIを使ってディスク容量を取得するサンプルはたくさんあるけど、ドライブレターのない論理ボリュームの容量を取得するものがない。また、Win32_LogicalDisk クラスでも取得できない。

いろいろ調べて試した結果、Win32_Volume クラスで取得できることが分かった。以下は「C:\Users\xxx」にマウントしたボリュームの総容量と空き容量を取得する例。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Volume Where Caption = 'C:\\Users\\xxx'")
For Each objItem In colItems
    WScript.Echo "Name: " & objItem.Name
    WScript.Echo "Capacity: " & objItem.Capacity
    WScript.Echo "Free Space: " & objItem.FreeSpace
    WScript.Echo
Next

ExecQuery メソッドでは LIKE も使えるので、

Select * from Win32_Volume Where Caption LIKE 'C:\\%'

という書き方もできる。

参考リンク