From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../misc_top_level/cert_override.txt/index.html | 35 + files/ja/archive/misc_top_level/index.html | 8 + .../index.html | 995 +++++++++++++++++++++ .../index.html | 22 + .../source_code_directories_overview/index.html | 129 +++ .../using_content_preferences/index.html | 107 +++ .../using_xml_data_islands_in_mozilla/index.html | 84 ++ 7 files changed, 1380 insertions(+) create mode 100644 files/ja/archive/misc_top_level/cert_override.txt/index.html create mode 100644 files/ja/archive/misc_top_level/index.html create mode 100644 files/ja/archive/misc_top_level/mcd,_mission_control_desktop_aka_autoconfig/index.html create mode 100644 files/ja/archive/misc_top_level/same-origin_policy_for_file_colon__uris/index.html create mode 100644 files/ja/archive/misc_top_level/source_code_directories_overview/index.html create mode 100644 files/ja/archive/misc_top_level/using_content_preferences/index.html create mode 100644 files/ja/archive/misc_top_level/using_xml_data_islands_in_mozilla/index.html (limited to 'files/ja/archive/misc_top_level') diff --git a/files/ja/archive/misc_top_level/cert_override.txt/index.html b/files/ja/archive/misc_top_level/cert_override.txt/index.html new file mode 100644 index 0000000000..1605109292 --- /dev/null +++ b/files/ja/archive/misc_top_level/cert_override.txt/index.html @@ -0,0 +1,35 @@ +--- +title: Cert override.txt +slug: Archive/Misc_top_level/Cert_override.txt +translation_of: Archive/Misc_top_level/Cert_override.txt +--- +

cert_override.txt はユーザプロファイルに作成されるテキストファイルで、ユーザによって指定された例外証明書を保存しています。このファイルは Firefox、Thunderbird、XUL ベースのアプリケーションが利用します。

+

XULRunner 1.9 には簡単に例外を追加する方法が無いので、そのページを Firefox で開いて、証明書を受け入れ、cert_override.txt を XULRunner アプリケーションのプロファイルにコピーします。

+

文法はこのウェブサイトに記載されています。

+

Example

+

これは SHA1-256 ハッシュアルゴリズムの例です。鍵とウェブサイトはダミーです:

+
# PSM Certificate Override Settings file
+# This is a generated file!  Do not edit.
+some.website.com:443	OID.2.16.840.1.101.3.4.2.1	00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:FF:EE:DD:CC:BB:AA:99:88:77:66:55:44:33:22:11:00	U	AAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  AAAAAAAAAAAAAAAAAAAAAAAA    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  AAAAAAAAAAAAAAAAAAAAAAAAAA==
+
+

Fields

+

フィールドはタブで区切られます。各行はラインフィードで終了します(UNIX フォーマット)。

+
    +
  1. ドメイン名:ポート : port 443 for HTTPS (SSL)
  2. +
  3. ハッシュアルゴリズムの OID +
      +
    • SHA1-256: OID.2.16.840.1.101.3.4.2.1 (most used)
    • +
    • SHA-384: OID.2.16.840.1.101.3.4.2.2
    • +
    • SHA-512: OID.2.16.840.1.101.3.4.2.3
    • +
    +
  4. +
  5. 前記ハッシュアルゴリズムを用いた証明書のフィンガープリント
  6. +
  7. オーバーライドのタイプを示す1個またはそれ以上の文字: +
      +
    • M : ホスト名の不一致を許可する
    • +
    • U : 認証されていない証明書を許可する(自己署名証明書や不明または不正な発行者の証明書)
    • +
    • T : 有効期限切れやまだ有効になっていない証明書など、有効期限に関するエラーを許可する
    • +
    +
  8. +
  9. base64 でエンコードされた証明書のシリアル番号とその発行者の名前をあらわす文字列
  10. +
diff --git a/files/ja/archive/misc_top_level/index.html b/files/ja/archive/misc_top_level/index.html new file mode 100644 index 0000000000..95bf3b61ab --- /dev/null +++ b/files/ja/archive/misc_top_level/index.html @@ -0,0 +1,8 @@ +--- +title: Misc top level +slug: Archive/Misc_top_level +translation_of: Archive/Misc_top_level +--- +

In progress. These pages were moved from the top level of MDN in a spate of furious reorganization.

+ +

diff --git a/files/ja/archive/misc_top_level/mcd,_mission_control_desktop_aka_autoconfig/index.html b/files/ja/archive/misc_top_level/mcd,_mission_control_desktop_aka_autoconfig/index.html new file mode 100644 index 0000000000..b66ef9a71d --- /dev/null +++ b/files/ja/archive/misc_top_level/mcd,_mission_control_desktop_aka_autoconfig/index.html @@ -0,0 +1,995 @@ +--- +title: 'MCD, Mission Control Desktop AKA AutoConfig' +slug: 'Archive/Misc_top_level/MCD,_Mission_Control_Desktop_AKA_AutoConfig' +tags: + - Administration + - Configuration management + - enterprise +translation_of: 'Archive/Misc_top_level/MCD,_Mission_Control_Desktop_AKA_AutoConfig' +--- +

この文書では、Mozilla Suite 1.x.x、Firefox、Thunderbirdで利用可能な、集中管理による AutoConfig (自動設定) の具体例を解説します。

+

【訳注: 以下の内容は、読みやすさと資料性を高めるために、英語の原文に比べて大幅に構成や内容が変更されています。日本語版のみに追記された詳細な情報も含まれており、英語の原文の忠実な翻訳ではないことに注意してください。】

+

状況

+

この文書の最初のバージョンが書かれた当時、INT-Evry では、研究室やセルフサービスのパソコン室で共有のコンピュータを利用している、約 2000 人のユーザ (主に学生) を管理していました。共有のコンピュータということで、1 日中何人ものユーザが 1 台のコンピュータを利用しています。これらのコンピュータは Windows XP と Linux ディストリビューションのひとつである Fedora Core 4/5 のデュアルブートになっています。ユーザは全員、Windows サーバの個人アカウントと、Linux 認証のための LDAP アカウントを持っています。

+

目的

+

私たちの目的は、コンピュータにその都度ログインする特定のユーザに対して、起動時に自動設定されたメールクライアントや Web ブラウザ、ニュースリーダーを提供することでした。Mozilla 製品を導入したことで、Windows と Unix (私たちの場合は Linux) どちらを起動しても同じプログラムを利用できるようになりました。

+

INT-Evry では、ユーザ固有の設定ファイル (~/.mozilla/default/randomdir/prefs.js) で設定を行う代わりに、各ユーザの初期設定を集中管理しています。集中管理のための設定ファイル(以下、AutoConfigファイル)を使えば、環境変数 (USERHOME など) や LDAP クエリ (メールアドレスやコモンネームなどの参照に利用) を元にして、設定項目のロック (lockPref) や初期化 (defaultPref) を行うことが可能です。

+

AutoConfigファイル

+

Mozilla製品の集中管理機能は JavaScript ファイルを通じて利用します。

+

設定の定義方法

+

この集中管理設定ファイルは、私たちが必要なことを可能にする JavaScript API を利用しています。MOZILLA_HOME/default/autoconfig/prefcalls.js で定義されている以下の関数が利用可能です。詳細は prefcalls.js ファイルをご覧ください。

+
function getPrefBranch()
+function pref(prefName, value)
+function defaultPref(prefName, value)
+function lockPref(prefName, value)
+function unlockPref(prefName)
+function getPref(prefName)
+function clearPref(prefName)
+function getLDAPAttributes(host, base, filter, attribs)
+function getLDAPValue(str, key)
+function displayError(funcname, message)
+function getenv(name)
+
+

具体的な利用例は後述します。

+

AutoConfigファイルの設置

+

AutoConfigファイルは、アプリケーションディレクトリ(MOZILLA_HOME)のみに置く方法と、アプリケーションディレクトリと任意の置き場所(リモートのサーバ上を含む)の両方に置く方法の、二通りの方法で設置できます。リモートのサーバ上にだけ設置することはできません。

+

 

+
アプリケーションディレクトリに置く AutoConfig ファイル
+

AutoConfig ファイルは、任意の名前の JavaScript ファイルです。読み出しと実行権限を付けた上で MOZILLA_HOME ディレクトリに置きます。

+

ただし、ファイルを置いただけでは内容は読み込まれません。このファイルを AutoConfig ファイルとして認識させるには、設定項目 general.config.filename で AutoConfig ファイルの名前を指定する必要があります。MOZILLA_HOME/default/pref/all.js または MOZILLA_HOME/greprefs/all.js などの既存の設定ファイルの末尾に、pref("general.config.filename", "mozilla.cfg"); のように追記するか、all.js などと同じ位置に新しい設定ファイルを作成してその中に記述してください。

+

設定項目 general.config.filename によって示された名前のファイルが MOZILLA_HOME ディレクトリに無い場合や、ファイルの読み出しに失敗した場合、Mozilla アプリケーションはエラーメッセージを表示して強制終了します。

+

また、設定項目 general.config.vendor によってベンダ名が示されていた場合は、 general.config.filename で示されたファイルのファイル名部分(拡張子 .cfg を除いた部分)とが一致しない場合にも、同様のエラーメッセージが表示され Mozilla アプリケーションが強制終了します。この設定項目はセキュリティを高めるために利用できます。

+
// これはOK
+pref("general.config.filename", "mozilla.cfg");
+pref("general.config.vendor", "mozilla");
+
+// これはNG
+pref("general.config.filename", "mozilla.cfg");
+pref("general.config.vendor", "mycompany");
+
+

このファイルの1行目は読み込み時に必ず無視される事に注意して下さい。1行目にディレクティブを記述しても、読み込み時には無視されます。1行目は必ずコメント行として、ディレクティブは2行目以降に記述して下さい。

+
// 1行目:この行は評価されない
+pref("mail.startup.enabledMailCheckOnce", false); // 2行目:この行以降は評価される
+
+
AutoConfig ファイルのエンコード
+

古い Netscape 4.x では、難読化などのために、AutoConfig ファイル (netscape.cfg) の内容は必ずエンコード(バイトシフト・ロータリーは 7)する必要がありました。Firefox や Thunderbird などの現在の Mozilla アプリケーションでは、標準のバイトシフトは 13 ですが、バイトシフトは設定項目 general.config.obscure_value によって任意の値に変更することができます。pref("general.config.obscure_value", 0);all.js などに記述することで、エンコードされていない AutoConfig ファイルを利用することもできます。ただしその場合、AutoConfig ファイルの 1 行目はコメントアウトにする必要があります。

+

ファイルのエンコードには、http://www.alain.knaff.lu/howto/Mozi...z-byteshift.pl にある moz-byteshift.pl という Perl スクリプトが利用可能です。moz-byteshift.pl の利用方法は以下の通りです。

+
$ more moz-byteshift.pl
+#!/usr/bin/perl
+
+# Mozilla の netscape.cfg ファイル用のバイトシフトプログラム
+
+# 古い Netscape 4.x ではバイトシフト 7 を使用
+#   To decode: moz-byteshift.pl -s -7 <netscape.cfg >netscape.cfg.txt
+#   To encode: moz-byteshift.pl -s  7 <netscape.cfg.txt >netscape.cfg
+
+# Mozilla ではバイトシフト 13 を使用
+#   To decode: moz-byteshift.pl -s -13 <netscape.cfg >netscape.cfg.txt
+#   To encode: moz-byteshift.pl -s  13 <netscape.cfg.txt >netscape.cfg
+
+$ ./moz-byteshift.pl -s 13 < mci-mozilla-web-tux.js > mci-mozilla-web-tux.cfg
+
+

エンコード/デコードを行うユーティリティをJavaScriptで実装する場合は以下のようになります。

+
var encoded = script
+               .split('')
+               .map(function(aChar) {
+                 return String.fromCharCode(
+                   aChar.charCodeAt(0) + 13
+                 );
+               })
+               .join('');
+var decoded = encoded
+               .split('')
+               .map(function(aChar) {
+                 return String.fromCharCode(
+                   aChar.charCodeAt(0) - 13
+                 );
+               })
+               .join('');
+


+ Netscape 4.x 用であれば、Client Customization Kit (CCK) に付属しているコンバート機能でも同様にエンコードできます (CCK では自動インストールのカスタマイズなども可能です)。詳しくは http://developer.netscape.com/docs/manuals/deploymt/config.htm をご覧ください。

+
リモートのサーバ上に置く AutoConfig ファイル
+

AutoConfig ファイルによる設定を更新するためには、すべてのクライアントにインストールされた AutoConfig ファイルを一つ一つ更新する必要があります。しかし頻繁に変更される可能性がある設定情報をこの方法で提供するのは現実的ではありません。そこで、Mozilla アプリケーションでは、もう一つ追加の AutoConfig ファイルをリモートに設置することができます。これによって、サーバ上にある一つのファイルを更新するだけで、すべてのクライアントに変更を適用することができます。

+

リモートのサーバ上に置いた AutoConfig ファイルの位置は、設定項目 autoadmin.global_config_url で指定します。all.js などに pref("autoadmin.global_config_url", "http://server/auto-config-file.jsc"); のように追記するか、MOZILLA_HOME ディレクトリに置いた AutoConfig ファイルの中でlockPref("autoadmin.global_config_url", "http://server/auto-config-file.jsc"); のように記述してください。File URLを使って、HTTPサーバではなくファイルサーバの共有フォルダなどに置かれたファイルを参照することもできます。

+

リモートに設置した AutoConfig ファイルは、MOZILLA_HOME ディレクトリに置いた AutoConfig ファイルが利用されている状況でのみ読み込まれることに注意してください。autoadmin.global_config_url の値自体は AutoConfig ファイルで設定しても通常の .js ファイルで設定してもどちらでも構いませんが、ローカルの AutoConfig ファイルが利用されていない状況では、autoadmin.global_config_url で指定されたリモートの AutoConfig ファイルを読み込む処理自体がスキップされます。

+

ローカルに設置する AutoConfig ファイルとは異なり、リモートに設置する AutoConfig ファイルはエンコードは常に不要です。ファイルの拡張子としては .jsc が利用されることが多いようです。静的ファイルを設置する以外に、CGI スクリプトなどによって動的に生成させることもできます。その場合、送信するファイルの Content-Type は application/x-javascript-config などとなります。AutoConfig ファイルを自動的に生成する CGI スクリプトの例は、この文書の後半の参考資料をご覧下さい。

+

Thunderbirdでの利用例

+

Thunderbird での AutoConfig と LDAP 呼び出しのサポート

+

Thunderbird 1.5 以降(2.0以降も含めて)の標準のビルドでは、AutoConfig と LDAP 呼び出しが共に利用可能です(参考:バグ 295329)。標準の configure スクリプトに、MOZ_LDAP_XPCOM=1MOZ_EXTENSIONS_DEFAULT="wallet spellcheck xmlextras pref webservices universalcharset auth" が含まれていない古い Thunderbird 1.0.x でこれらの機能を利用するには、再コンパイルする必要があります。

+

AutoCongig の設定

+

これが、Thunderbird の起動時に AutoConfig を利用させる 2 つのディレクティブです。

+
[root@b008-02 /usr/lib/thunderbird-1.5]
+$tail -2 greprefs/all.js
+pref("general.config.obscure_value", 0); // MCD の .cfg ファイル用
+pref('general.config.filename', 'thunderbird.cfg'); // MCD の .cfg ファイル用
+
+

最初の 1 行は、ただファイルをエンコードしないことを宣言するものです (通常は 13 または 7 です)。2 行目は、読み込むファイルの名前です。この例では /usr/lib/thunderbird-1.5/thunderbird.cfg になります。

+

AutoConfig で使用するディレクティブ

+

ここでは、各ユーザ共通のメール設定を行います。ユーザのログイン名からアカウントを作成し、LDAP リクエストからメールアドレスを取得、それから IMAP と SMTP サーバを設定します。これにより、マルチユーザのワークステーション上でも、各ユーザは自分用に自動設定された Thunderbird を利用できるようになります。

+
thunderbird.cfg
+

以下が完全なファイルです。最初に環境変数からユーザのログイン名を取得し、それから LDAP アドレス帳の設定、メールアカウントの作成、IMAP と SMTP サーバの設定を行っています。

+
[root@b008-02 /usr/lib/thunderbird-1.5]
+$ cat thunderbird.cfg
+// このスクリプトの1行目は評価されないので、必ずコメント行にします
+
+// すべての行を try/catch 文に含めます
+try {
+
+// 1) 環境変数
+if(getenv("USER") != "") {
+  // *NIX 用の設定
+  var env_user = getenv("USER");
+  var env_home = getenv("HOME");
+} else {
+  // Windows 用の設定
+  //   Windows 環境では、<code>USER</code> や <code>HOME</code> といった
+  //   環境変数は、<code>USERNAME</code> や <code>HOMEPATH</code> になります。
+  var env_user = getenv("USERNAME");
+  var env_home = getenv("HOMEPATH");
+}
+var env_mozdebug= getenv("MOZILLA_DEBUG");
+// var env_user = prompt("indiquez votre login", toto);
+
+// 2) 一般的な設定をロック
+// LDAP アドレス帳
+lockPref("ldap_2.prefs_migrated", true);
+lockPref("ldap_2.servers.LDAPINT.auth.savePassword", true);
+lockPref("ldap_2.servers.LDAPINT.description", "LDAP INT");
+lockPref("ldap_2.servers.LDAPINT.filename", "abook-1.mab");
+lockPref("ldap_2.servers.LDAPINT.uri", "ldap://ldap1.int-evry.Fr:389/ou=people,dc=int-evry,dc=fr??sub");
+lockPref("ldap_2.servers.history.filename", "history.mab");
+lockPref("ldap_2.servers.history.replication.lastChangeNumber", 0);
+lockPref("ldap_2.servers.pab.filename", "abook.mab");
+lockPref("ldap_2.servers.pab.replication.lastChangeNumber", 0);
+
+// アカウント
+lockPref("mail.account.account1.server", "server1");
+lockPref("mail.account.account2.identities", "id1");
+lockPref("mail.account.account2.server", "server2");
+lockPref("mail.accountmanager.accounts", "account1,account2");
+lockPref("mail.accountmanager.defaultaccount", "account2");
+lockPref("mail.accountmanager.localfoldersserver", "server1");
+lockPref("mail.identity.id1.directoryServer", "ldap_2.servers.LDAPINT");
+lockPref("mail.identity.id1.draft_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Drafts");
+lockPref("mail.identity.id1.drafts_folder_picker_mode", "0");
+lockPref("mail.identity.id1.fcc_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Sent");
+lockPref("mail.identity.id1.fcc_folder_picker_mode", "0");
+lockPref("mail.identity.id1.organization", "INT Evry France");
+lockPref("mail.identity.id1.overrideGlobal_Pref", true);
+lockPref("mail.identity.id1.reply_to", "");
+
+// IMAP
+lockPref("mail.server.server2.hostname", "imap-int.int-evry.fr");
+lockPref("mail.server.server2.isSecure", true);
+lockPref("mail.server.server2.login_at_startup", true);
+lockPref("mail.server.server2.max_cached_connections", 5);
+// lockPref("mail.server.server2.name", "jehan.procaccia@int-evry.fr");
+lockPref("mail.server.server2.type", "imap");
+lockPref("mail.server.server2.userName", env_user);
+
+// SMTP
+lockPref("mail.identity.id1.smtpServer", "smtp1");
+lockPref("mail.identity.id1.stationery_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Templates");
+lockPref("mail.identity.id1.tmpl_folder_picker_mode", "0");
+lockPref("mail.identity.id1.valid", true);
+
+// SMTP 一般設定
+lockPref("mail.smtp.defaultserver", "smtp1");
+lockPref("mail.smtpserver.smtp1.auth_method", 0);
+lockPref("mail.smtpserver.smtp1.hostname", "smtp-int.int-evry.fr");
+lockPref("mail.smtpserver.smtp1.port", 25);
+lockPref("mail.smtpserver.smtp1.try_ssl", 0);
+lockPref("mail.smtpserver.smtp1.username", "");
+lockPref("mail.smtpservers", "smtp1");
+lockPref("mail.startup.enabledMailCheckOnce", true);
+lockPref("mailnews.quotingPrefs.version", 1);
+lockPref("mailnews.ui.threadpane.version", 5);
+
+/* 3) ここで定義しておく (下の 4 以降では機能しないため) processLDAPValues() は、
+      後で直下の getLDAPAttributes() によって呼び出されます。
+      $MOZILLA_HOME/defaults/autoconfig/prefcalls.js で定義されている
+      getLDAPAttributes() コードを参照すれば、「ユーザ定義」された
+      processLDAPValues() への内部呼び出しを確認できます
+*/
+function processLDAPValues(values) {
+  if(values) {
+    // LDAP クエリから返ってきた値でグローバル変数をセットします
+    ldap_values = values;
+    var uid = getLDAPValue(values, "uid");
+    var cn = getLDAPValue(values, "cn");
+    var mail = getLDAPValue(values, "mail");
+    var URL = getLDAPValue(values, "labeledURI");
+
+// これらの LDAP 変数は、この processLDAPValues 関数内部でしか使用できません。
+// そのため、ここで必要な設定項目を記述しておきます
+lockPref("mail.identity.id1.useremail", mail);
+lockPref("mail.server.server2.name", mail);
+lockPref("mail.identity.id1.fullName", cn);
+// ポップアップによるエラーメッセージを使ったデバッグが使えなくなってしまいました
+var env_mozdebug= getenv("MOZILLA_DEBUG");
+if (env_mozdebug) {displayError("エラーはありませんでした。これはデバッグ用です。cn は " + cn + "、mail は " + mail); }
+    }
+  }
+// 4) LDAP サーバを呼び出し、LDAP 属性 (mail と cn) を取得します。
+//    これは最終的に上記 3 の processLDAPValues() を呼び出します
+  getLDAPAttributes("ldap2.int-evry.fr","ou=people,dc=int-evry,dc=fr","uid=" + env_user,"uid,cn,mail,labeledURI");
+
+// try 文を閉じて catch 文を呼び出します
+} catch(e) {
+  displayError("lockedPref", e);
+}
+
+
AutoConfig のテスト
+
デバッグ
+

AutoConfig が問題なく機能することを確認するため、環境変数を設定し、thunderbird.cfg ファイルの読み込みを監視しました。

+
$ export NSPR_LOG_MODULES=MCD:5
+$ export NSPR_LOG_FILE=/tmp/thunderbird-log.txt
+
+

Thunderbird が起動すると、次のような出力が見られるはずです。

+
 $ cat /tmp/thunderbird-log.txt
+-1209403040[808a788]: general.config.filename = thunderbird.cfg
+-1209403040[808a788]: evaluating .cfg file thunderbird.cfg with obscureValue 0
+
+
初期化
+

次に、必ず新しい Thunderbird のアカウントで起動します。すでにアカウントが存在していて、メールと設定を残したい場合は、この行は飛ばしてください。

+
$ rm -rf ~/.thunderbird
+
+
起動
+
$ thunderbird
+
+

インストールされているメールクライアントに応じて、Netscape や Mozilla からプロファイルをインポートするかどうか Thunderbird が聞いてきた場合は、何もインポートせず、AutoConfig だけを実行させてください。

+

これでうまくいくはずです。複数ユーザの AutoConfig を動作確認するには、異なる USER 変数 (USER=procacciUSER=test など、LDAP ディレクトリに存在するユーザの誰か) を設定してプロセスを再起動します。

+

 

+

Firefox での利用例

+

原理は上で説明した Thunderbird と同じです。バイナリディストリビューションには AutoConfig (pref 拡張) が含まれていますが、残念ながら LDAP 呼び出しのサポートが含まれていません (参考: MOZ_LDAP_XPCOM=1)。私たちの場合、環境変数では通常利用できない、コモンネームとメールアドレスの取得によるメールアカウントの設定を行うため、Thunderbird では必要でしたが、Firefox では必須ではありませんでした。ただし、標準のホームページをユーザの LDAP 属性 labeledURI に設定するなど、Firefox の追加設定のために LDAP の値を取得できると便利かもしれません。

+

AutoConfig と LDAP のサポート

+
Firefox への LDAP サポートの追加
+

Firefox 1.0.x から 3.0 までのすべての Firefox の標準ビルドには、 LDAP のサポート (MOZ_LDAP_XPCOM=1) は含まれていません。LDAP のサポートを含めるには再コンパイルする必要があります。mozconfig ファイルを編集し、--disable-ldap を削除します。Firefox がどのようなオプションでコンパイルされているかは about:buildconfig を見ると確認できます (Thunderbird で同じことをする方法は分かりません。どのようにコンパイルされているのでしょうか)。詳しくは バグ 295329 をご覧ください。

+

また、Firefox 1.0.x では pref 拡張自体も有効にして再コンパイルする必要があります。mozconfig ファイルを編集し、pref 拡張 (--enable-extensions=pref) を追加してください。この作業は Firefox 1.5 以降では不要です。

+
about:buildconfig
+
+Build platform
+target
+i686-pc-linux-gnu
+
+Build tools
+Compiler Version Compiler flags
+gcc gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.fc3) -Wall -W -Wno-unused -Wpointer-arith -Wcast-align -Wno-long-long -pedantic -pthread -pipe
+c++ gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.fc3) -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wno-long-long -pedantic -fshort-wchar -pthread -pipe -I/usr/X11R6/include
+
+Configure arguments
+--disable-mailnews --enable-extensions=cookie,xml-rpc,xmlextras,pref,transformiix,universalchardet,webservices,inspector,gnomevfs,negotiateauth --enable-crypto --disable-composer --enable-single-profile --disable-profilesharing --with-system-jpeg --with-system-zlib --with-system-png --with-pthreads --disable-tests --disable-jsd --disable-installer '--enable-optimize=-Os -g -pipe -m32 -march=i386 -mtune=pentium4' --enable-xft --enable-xinerama --enable-default-toolkit=gtk2 --enable-official-branding --disable-xprint --disable-strip --enable-pango
+
+

all.js

+
[root@b008-02 /usr/lib/firefox-1.5.0.2]
+$tail -4 greprefs/all.js
+// AutoConfig jehan
+pref('general.config.obscure_value', 0);
+pref('general.config.filename', 'firefox.cfg');
+
+

firefox.cfg

+

このファイルでは、ブラウザのホームページを、ユーザの LDAP エントリーで定義された labeledURI に設定しています。これにより、AutoConfig と LDAP が両方機能することを確認できます。

+
[root@b008-02 /usr/lib/firefox-1.5.0.2]
+$cat firefox.cfg
+// すべての行を try/catch 文に含めます
+try {
+
+// プライバシーとセキュリティ
+defaultPref("signon.rememberSignons", false);
+
+// 1) 環境変数
+if(getenv("USER") != "") {
+  // *NIX 用の設定
+  var env_user = getenv("USER");
+  var env_home = getenv("HOME");
+} else {
+  // Windows 用の設定
+  var env_user = getenv("USERNAME");
+  var env_home = getenv("HOMEPATH");
+}
+var env_mozdebug = getenv("MOZILLA_DEBUG");
+
+/* 2) ここで定義しておく (下の 3 以降では機能しないため) processLDAPValues() は、
+      後で直下の getLDAPAttributes() によって呼び出されます。
+      $MOZILLA_HOME/defaults/autoconfig/prefcalls.js で定義されている
+      getLDAPAttributes() コードを参照すれば、「ユーザ定義」された
+      processLDAPValues() への内部呼び出しを確認できます。
+*/
+function processLDAPValues(values) {
+  if(values) {
+    // LDAP クエリから返ってきた値でグローバル変数をセットします
+    ldap_values = values;
+    var uid = getLDAPValue(values, "uid");
+    var cn = getLDAPValue(values, "cn");
+    var mail = getLDAPValue(values, "mail");
+    var URL = getLDAPValue(values, "labeledURI");
+// ポップアップによるエラーメッセージを使ったデバッグが使えなくなってしまいました
+var env_mozdebug= getenv("MOZILLA_DEBUG");
+if (env_mozdebug) {displayError("エラーはありませんでした。これはデバッグ用です。cn は " + cn + "、mail は " + mail + "、labeledURI は " + URL); }
+lockPref("browser.startup.homepage", URL);
+    }
+  }
+
+//lockPref("browser.startup.homepage", "http://www.renater.fr/");
+// 3) LDAP サーバを呼び出し、LDAP 属性 (mail と cn) を取得します。
+//    これは最終的に上記 2 の processLDAPValues() を呼び出します
+  getLDAPAttributes("ldap2.int-evry.fr","ou=people,dc=int-evry,dc=fr","uid=" + env_user,"uid,cn,mail,labeledURI");
+
+// try 文を閉じて catch 文を呼び出します
+} catch(e) {displayError("lockedPref", e);}
+
+

デバッグ

+

ユーザ名と MOZILLA_DEBUG 変数を設定した場合 ($export MOZILLA_DEBUG=1; export USER=procacci)、displayError() によってこのようなポップアップウィンドウが表示されます。

+

Image:mozilla-autoconfig-en001.png

+

これは「警告」というタイトルのウィンドウですが、ただのデバッグツールであって、他にポップアップで情報を表示する方法は確認できていません。詳しくは バグ 206294 のコメントをご覧ください。

+
 ------- Comment #14 From Daniel Wang 2003-11-06 09:06 PDT [reply] -------
+
+Jehan Procaccia, you need to change 5.8 to reflect what I said in comment 21.
+
+Preference files and config files are special JavaScript files with limited scopes. They
+can only call the get/set pref/env methods and have no access to other objects
+(need to investigate what exactly are allowed). alert() is a method of the
+Window object.
+
+

また、ニュースグループ mozilla.dev.tech.js-engine にも同様の投稿がありました。

+
Date: Wed, 17 May 2006 19:06:28 +0200
+From: jehan procaccia <jehan.procaccia@int-evry.fr>
+
+Newsgroups: mozilla.dev.tech.js-engine
+Subject: scope of js file functions in Frefox/Thunderbird AutoConfig context
+
+

 

+

AutoConfig の利用上の注意

+

設定の変更・削除

+

pref()lockPref() の各ディレクティブによって設定された値はユーザプロファイル内の prefs.js にも保存されます(これは user.js を使用した場合の挙動によく似ています)。よって、これらのディレクティブによって値を設定している箇所を AutoConfig ファイルから削除しただけでは、古い設定値が依然として残ったなままとなることに注意してください。

+

設定項目 autoadmin.global_config_url によってリモートの AutoConfig ファイルを利用していた場合、autoadmin.global_config_url の示していたURLが prefs.js に保存されます。そのため、 autoadmin.global_config_url を設定している箇所をローカルの AutoConfig ファイルから削除しても、ユーザープロファイル内に残った設定値によって、リモートの AutoConfig ファイルが参照され続けてしまうことになります。

+

古い設定や不要になった設定を無効化し、上記のようなトラブルが起こってしまうことを防ぐには、 lockPref("autoadmin.global_config_url", "") などのように値を上書きするか、clearPref("autoadmin.global_config_url") のようにclearPref()ディレクティブを使用して明示的に値を削除する必要があります。

+

プロファイル内のprefs.jsにはデフォルト設定からの変更点のみが保存されるため、原則として、defaultPref()を使用して設定された値はプロファイル内のprefs.jsには保存されません。ただし、lockPref()ディレクティブを使用してデフォルト値と同じ値でロックをかけた場合、その値はプロファイル内のprefs.jsに保存される場合があります。

+

AutoConfig ファイルのキャッシュ

+

設定項目 autoadmin.global_config_url によって指定されたリモートの AutoConfig ファイルの内容は、ユーザープロファイル内に failover.jsc としてキャッシュされます。

+

このキャッシュファイルは、サーバの障害やリモートの AutoConfig のエラーなどによって AutoConfig ファイルの読み込みに失敗した際に利用されます。設定項目 autoadmin.offline_failover を明示的に true に設定している場合、オフライン時にもこのキャッシュファイルが使用されます。

+

キャッシュファイルの利用を禁止するには、設定項目 autoadmin.failover_to_cached の値として false を設定して下さい。キャッシュファイルの利用が禁止されている場合、リモートの AutoConfig ファイルの読み込みに失敗した際は、Mozilla アプリケーションは強制的にオフラインモードとなります。

+

設定の読み込まれる順番と優先順位

+

AutoConfig ファイルを利用している環境で、おのおのの方法によって設定された設定値は、ユーザプロファイル内に設定が全く保存されていない新規プロファイルで起動した場合は以下の優先順位で反映されます。

+
    +
  1. MOZILLA_HOME/defaults/pref/*.js での初期設定値:最も優先順位が低い
  2. +
  3. 各アドオンの defaults/preferences/*.js での初期設定値
  4. +
  5. ローカルの AutoConfig ファイル(MOZILLA_HOME/*.cfg)において、defaultPref()ディレクティブで設定された値
  6. +
  7. リモートの AutoConfig ファイルにおいて、defaultPref()ディレクティブで設定された値
  8. +
  9. ユーザプロファイル内のprefs.jsに保存された設定値
  10. +
  11. user.jsで設定された値
  12. +
  13. ローカルの AutoConfig ファイルにおいて、pref()ディレクティブで設定された値
  14. +
  15. リモートの AutoConfig ファイルにおいて、pref()ディレクティブで設定された値
  16. +
  17. ローカルの AutoConfig ファイルにおいて、lockPref()ディレクティブで設定された値
  18. +
  19. リモートの AutoConfig ファイルにおいて、lockPref()ディレクティブで設定された値:最も優先順位が高い
  20. +
+

AutoConfig による設定が意図通りに働かないケース

+

設定が読み込まれる順番次第で、ユーザの設定が失われる場合があります。

+

例えばローカルの AutoConfig に defaultPref("dom.disable_open_during_load", false); という記述がある場合、これは、通常はtrueが初期値となっている dom.disable_open_during_load の初期値をfalseに設定し、ユーザが任意にtrueに変更できるようにする、という風な結果を想定したものと考えられます。

+

しかし実際には、ユーザが設定値をtrueに変更した場合、次回の Firefox 起動時には以下のような現象が起こります。

+
    +
  1. firefox.js によって dom.disable_open_during_load の初期値がtrueと定義される
  2. +
  3. ユーザが変更した結果 prefs.js に保存されていた値 true が読み込まれる。これは初期値に等しいため、消去される。
  4. +
  5. AutoConfig によって dom.disable_open_during_load の初期値がfalseと定義し直される
  6. +
+

つまりこの場合、ユーザが何度設定を変更してもFirefoxを起動し直す度に設定が失われてしまうという結果になります。

+

AutoConfig は、このようなややこしい問題が起こらない場面に限定して利用するのが望ましいと言えるでしょう。ユーザが設定を変更できる状態で、設定の初期値だけを変更するといった用途には、アドオンの defaults\preferences\フォルダ内に置かれたJavaScriptファイルを使用するのが最も確実且つ安全と考えられます。

+

リモートの AutoConfig ファイルの置き場所として指定できる URI

+

設定項目 autoadmin.global_config_url の値として、前述の例では一般的な http: のURIを示しましたが、これ以外にも Mozilla アプリケーション自身が対応している形式の URI ( file:, ftp:, gopher: など)であればいずれも指定可能です。

+

リモートの AutoConfig とプロキシ

+

HTTPなどでアクセスするリモートの AutoConfig ファイルでプロキシの設定を行う場合、プロキシの設定がローカルに保存される点と、 AutoConfig ファイルへのアクセス自体にもプロキシが利用される点に注意して下さい。

+

存在しないプロキシサーバを参照するよう設定してしまった場合や、前回 AutoConfig で設定されたプロキシサーバが利用できなくなってしまった場合、Mozilla アプリケーションは AutoConfig ファイル自体を取得できなくなってしまいます。

+

このような問題を避けるには、 AutoConfig ファイルをファイル共有サーバに置いて File URL でアクセスする、などの方法が考えられます。

+

関連情報

+

AutoConfig に関する関連資料

+

http://mit.edu/~firefox/www/maintain...utoconfig.html

+

http://www.alain.knaff.lu/howto/Mozi...ion/index.html
+ http://thegoldenear.org/toolbox/wind...re-config.html
+ http://ilias.ca/blog/2005/03/locking...efox-settings/

+

Windows でのコンパイル方法:
+ http://forums.mozillazine.org/viewtopic.php?t=276014

+

http://www.mozilla.org/community/dev...er-forums.html
+ http://forums.mozillazine.org/viewto...config#2090731
+ http://forums.mozillazine.org/viewto...config#1354355
+ http://forums.mozillazine.org/viewto...toconfig#32783

+

関連バグ

+

バグ 295329
+ バグ 222973
+ バグ 225288
+ バグ 178685
+ バグ 272970
+ バグ 206294
+ バグ 302096

+

 

+

 

+

参考資料

+

古い Thunderbird 1.0.x への AutoConfig オプションの追加

+

Thunderbird 1.0.x のバイナリディストリビューションには、標準では AutoConfig が含まれていません。おそらく、大半の個人ユーザが必要としない機能のために、バイナリの読み込み時間が長くなってしまうのを防ぐための措置だと思います。しかし、法人で導入する際には必須の機能です。そこで私たちは、AutoConfig サポートを付けて Thunderbird を再コンパイルしました。mozconfig ファイルに --enable-extensions=pref を追加するだけのことです。

+

手元の Fedora Core 3 で、Thunderbird のソースパッケージ thunderbird-1.0.2-1.3.3.src.rpm を取得してインストール (rpm -i) し、/usr/src/redhat/SOURCES/thunderbird-mozconfig に以下の行を追加しました。

+
ac_add_options --enable-extensions=pref
+
+

それから、コンパイルとインストールを実行しました。

+
$ rpmbuild -ba /usr/src/redhat/SPECS/thunderbird.spec
+$ rpm -Uvh /usr/src/redhat/RPMS/i386/thunderbird-1.0.2-1.3.3.i386.rpm
+
+

インストール後、次のようにして AutoConfig が復活していることを確認しました。

+
$ rpm -ql thunderbird | grep autoconfig
+/usr/lib/thunderbird-1.0.2/chrome/en-US/locale/autoconfig
+/usr/lib/thunderbird-1.0.2/components/autoconfig.xpt
+/usr/lib/thunderbird-1.0.2/components/libautoconfig.so
+/usr/lib/thunderbird-1.0.2/defaults/autoconfig
+/usr/lib/thunderbird-1.0.2/defaults/autoconfig/platform.js
+/usr/lib/thunderbird-1.0.2/defaults/autoconfig/prefcalls.js
+
+

 

+
報告されている関連バグ
+

参考として、古い 1.0.x リリースに存在する問題を挙げておきます。

+
不要な空白の再発
+

残念なことに、Thunderbird 1.0.2 で「空白バグ」が再発してしまいました。詳細は バグ 229271 をご参照ください。Mozilla のナイトリービルドでは 2004 年末に修正されていますが (mozilla/extensions/pref/autoconfig/src/nsLDAPSyncQuery.cpp 1.7.2.1)、少なくとも Thunderbird 1.0.2 には問題が存在します。このため、このバグで提案した回避策 (start_pos += 1;) を適用しました。

+

 

+

 

+

CGI による Web ベースの JavaScript 設定ファイルの生成

+
[root@corbeau /var/www/cgi-bin]
+$ cat mci-mozilla-glob-prefs-tux.cgi
+#!/usr/bin/perl -w
+
+print("Content-type: application/x-javascript-config\n\n");
+$page = <<"EOP";
+
+try {
+  var env_user = getenv("USER");
+  var env_home = getenv("HOME");
+  var env_mozdebug= getenv("MOZILLA_DEBUG");
+  function processLDAPValues(values) {
+    var uid = getLDAPValue(values, "uid");
+    var cn = getLDAPValue(values, "cn");
+    var mail = getLDAPValue(values, "mail");
+    lockPref("mail.server.server1.name", mail);
+    lockPref("mail.identity.id1.fullName", cn);
+    lockPref("mail.identity.id1.useremail", mail);
+
+  if (env_mozdebug) {
+    displayError("デバッグ mozilla.cfg v2.8", "mail: " + mail + " uid: " + uid + " cn: " + cn + " user: " + env_user);
+  }
+}
+// ブラウザ
+lockPref("browser.startup.homepage", "http://www.int-evry.fr/mci/user/");
+lockPref("browser.startup.homepage_override", true);
+lockPref("general.config.vendor", "mci-mozilla-web-tux");
+lockPref("startup.homepage_override_url", "http://www.int-evry.fr/mci/user/");
+lockPref("browser.cache.disk.capacity", 0);
+lockPref("network.cookie.cookieBehavior", 0);
+lockPref("network.proxy.autoconfig_url", "http://www.int-evry.fr/local/config.proxy");
+lockPref("network.proxy.type", 2);
+
+// アカウント
+lockPref("mail.account.account1.identities", "id1");
+lockPref("mail.account.account1.server", "server1");
+lockPref("mail.account.account2.server", "server2");
+lockPref("mail.account.account3.server", "server3");
+lockPref("mail.accountmanager.accounts", "account1,account2,account3");
+lockPref("mail.accountmanager.defaultaccount", "account1");
+
+// IMAP
+lockPref("mail.server.server1.hostname", "imap-int.int-evry.fr");
+lockPref("mail.server.server1.type", "imap");
+lockPref("mail.server.server1.login_at_startup", true);
+lockPref("mail.identity.id1.draft_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Drafts");
+lockPref("mail.identity.id1.drafts_folder_picker_mode", "0");
+lockPref("mail.identity.id1.fcc_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Sent");
+lockPref("mail.identity.id1.fcc_folder_picker_mode", "0");
+lockPref("mail.identity.id1.stationery_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Templates");
+lockPref("mail.identity.id1.tmpl_folder_picker_mode", "0");
+lockPref("mail.identity.id1.valid", true);
+lockPref("mail.identity.id1.overrideGlobal_Pref", true);
+lockPref("mail.server.server1.download_on_biff", true);
+lockPref("mail.server.server1.login_at_startup", true);
+lockPref("mail.server.server1.userName", env_user);
+lockPref("mail.server.server1.delete_model", 0);
+
+// SMTP
+lockPref("mail.identity.id1.smtpServer", "smtp1");
+defaultPref("mail.smtpserver.smtp1.auth_method", 0);
+lockPref("mail.smtpservers", "smtp1");
+lockPref("mail.smtpservers", "smtp1");
+lockPref("mail.smtp.defaultserver", "smtp1");
+lockPref("mail.smtpserver.smtp1.hostname", "smtp-int.int-evry.fr");
+lockPref("mail.identity.id1.organization", "INT Evry France");
+lockPref("mail.startup.enabledMailCheckOnce", true);
+lockPref("mail.ui.folderpane.version", 3);
+lockPref("mailnews.ui.threadpane.version", 2);
+
+// LDAP 設定
+lockPref("mail.identity.id1.directoryServer", "ldap_2.servers.ldapint");
+lockPref("ldap_2.prefs_migrated", true);
+lockPref("ldap_2.servers.history.filename", "history.mab");
+lockPref("ldap_2.servers.history.replication.lastChangeNumber", 0);
+lockPref("ldap_2.servers.ldapint.auth.savePassword", true);
+lockPref("ldap_2.servers.ldapint.description", "ldap-int");
+lockPref("ldap_2.servers.ldapint.filename", "abook-1.mab");
+lockPref("ldap_2.servers.ldapint.position", 3);
+lockPref("ldap_2.servers.ldapint.uri", "ldap://ldap1.int-evry.fr:389/ou=people,dc=int-evry,dc=fr??sub");
+lockPref("ldap_2.servers.pab.filename", "abook.mab");
+lockPref("ldap_2.servers.pab.replication.lastChangeNumber", 0);
+
+// News 設定
+lockPref("mail.server.server3.hostname", "news.int-evry.fr");
+lockPref("mail.server.server3.max_cached_connections", 2);
+lockPref("mail.server.server3.name", "news.int-evry.fr");
+lockPref("mail.server.server3.type", "nntp");
+lockPref("mail.server.server3.userName", env_user);
+
+// LDAP サーバを呼び出してユーザ属性を取得
+getLDAPAttributes("ldap2.int-evry.fr", "ou=people,dc=int-evry,dc=fr", "uid=" +env_user, "uid,cn,mail");
+
+} catch(e) {
+  displayError("lockedPref", e);
+}
+
+EOP
+print $page;
+
+

Windows 特有の注意点

+

Web ベースの CGI ファイルを使用しない場合、Windows では注意が必要です。エンコード前の AutoConfig ファイルの 1 行目は //BEGIN CE prefs としなければなりません。そうしないと「設定ファイルを正常に読み込めませんでした」というメッセージが表示され、Mozilla が起動しません。

+

また、Windows 環境では、USERHOME といった環境変数は、USERNAMEHOMEPATH になります。AutoConfig ファイル内で環境変数を参照する場合は注意してください。

+

if... else 形式のテストで、例えば USERUSERNAME のように、Linux と Windows どちらの環境変数を使うべきか判別することができます。

+
// 1) 環境変数
+if(getenv("USER") != "") {
+   // *NIX 用の設定
+   var env_user = getenv("USER");
+   var env_home = getenv("HOME");
+ } else {
+   // Windows 用の設定
+   var env_user = getenv("USERNAME");
+   var env_home = getenv("HOMEPATH");
+ }
+  var env_mozdebug= getenv("MOZILLA_DEBUG");
+
+

 

+

デバッグ - Bugzilla

+
ランタイムメッセージ
+

Unix のシェル (export MOZILLA_DEBUG=1) または Windows の command.com 環境変数 (set MOZILLA_DEBUG=1) で MOZILLA_DEBUG を定義した場合は、デバッグメッセージの出力を有効にする var env_mozdebug=getenv("MOZILLA_DEBUG") の存在に注目してください。

+

不要な空白に関するバグ

+

著者は、おそらく Mozilla 1.8 で修正されるであろう問題を発見しました。バグ報告と回避策は バグ 229271 をご覧ください。簡単に言えば、autoconfig/preffcalls.jsgetLDAPValue() 関数に以下の行を追加してください。

+
        start_pos += search_key.length;
+//start
+        start_pos +=1;
+//end
+
+

資料

+

文書が用意されていない問題についても バグ 178685 に報告しました。最終的には、http://wangrepublic.org/daniel/mozilla/prefs/ にあるような素晴らしい資料が完成する予定です。

+

ホームページのための defeultPref

+

defaultPref 関数でホームページを設定することができません。このため、標準設定が利用され、ユーザが変更できてしまいます。この問題に関するバグも開かれています。バグ 272970 をご覧ください。

+

greprefs の適切な権限

+

Linux では、MOZILLA_HOME/greprefs ディレクトリに対して標準ではユーザのアクセス権がなく、AutoConfig が正しく機能しないことにも注意してください。この問題に関するバグは バグ 270623 です。回避策は chmod 755 greprefs とすることです。

+

メールフォルダ

+

著者は、このソリューションを実装する際、メールフォルダについて面倒なことに遭遇しました。当初は、ログインしているユーザのホームディレクトリにあるローカルのメールフォルダを使用しようと考えていました。このフォルダは、Unix では $HOME/nsmail/... になり、Windows では同じ Unix パスの Samba マウントになります (例えば U:\nsmail というパスで、U: は Samba マウント \\samba-server\%USERNAME ということです)。しかし、ファイルシステムの書き込みやメールの形式が Windows と Unix で異なり、システム間で読み出しや書き込みを行うと、フォルダがすぐに読み出し不可能になったり、場合によっては破損してしまうといった問題が起こりました。

+

このようなことから、最終的には IMAP を採用し、IMAP フォルダを使用することにしました。また、ワシントン大学の IMAP サーバから Cyrus サーバに移行することで、容量制限や共有フォルダ、アクセス制御リスト (ACL)、メールのみのアカウント (/etc/passwd のエントリーが不要)、優れたパフォーマンスなど、いくつかの興味深い機能を引き継ぐことができました。

+

信頼性

+
フェイルオーバーと唯一性
+

Roberto Aguilar 氏による貢献のおかげで、Mozilla の AutoConfig JavaScript に、ある LDAP サーバがダウンしていた場合に別のミラーサーバを検索する方法が実装されました。

+

また、if... else 形式による巧妙な環境変数テストを行うことで、両方のシステム (Linux と Windows) で同じ JavaScript を用いることが可能になりました。

+
LDAP サーバのフェイルオーバー
+

利用可能な LDAP サーバの配列を作成しておくことで、サーバのフェイルオーバーを実現できます。シャッフル関数によって、動作している LDAP サーバをひとつランダムに選択することができます。

+

シャッフル関数は http://www.mickweb.com/javascript/ar...reshuffle.html にあるものを利用しました。

+

変更したコードを公開する際は、シャッフル変数の直前に以下の注釈を追加してください。

+
 /**
+  * 配列のシャッフル方法の定義
+  * Mickweb Script Factory のコードを利用しました。
+  * http://www.mickweb.com/javascript/arrays/pureshuffle.html
+  */
+
+

LDAP サーバのフェイルオーバーの実装は以下の通りです。

+
// 2) フェイルオーバー用に複数の LDAP サーバを定義
+  var ldap_values;
+  var ldap_servers = new Array('ldap2.int-evry.fr',
+                      'ldap1.int-evry.fr',
+                      'openldap.int-evry.fr'
+                      );
+  // サーバ配列からランダムに選択を行うシャッフル関数
+  // 配列のシャッフル方法の定義
+  Array.prototype.shuffle = function(times) {
+    var i,j,t,l=this.length;
+    while(times--) {
+      with(Math) {
+    i = floor(random()*l);
+    j = floor(random()*l);
+      }
+      t       = this[i];
+      this[i] = this[j];
+      this[j] = t;
+    }
+    return this;
+  }
+ // LDAP サーバをシャッフルし、毎回同じサーバが選択されないようにする
+  ldap_servers.shuffle(10);
+....
+// 4) LDAP サーバを呼び出し、LDAP 属性 (mail と cn) を取得します。これは最終的に上記 3 の processLDAPValues() を呼び出します
+// LDAP ミラーサーバ一覧を参照
+for(i = 0; i < ldap_servers.length; i ++) {
+// uid に $USER または $USERNAME をセットし、LDAP サーバから mail と cn 属性を検索
+  getLDAPAttributes(ldap_servers[i],
+       "ou=people,dc=int-evry,dc=fr",
+       "uid=" + env_user,
+       "uid,cn,mail");
+    // 稼働している LDAP サーバに当たったらループを抜ける
+    if(ldap_values) {
+      running_ldap_server = ldap_servers[i];
+        // $MOZILLA_DEBUG=1 が定義されている場合は、稼働しているサーバをポップアップで表示
+      if (env_mozdebug) {
+        displayError("getLDAPAttributes: デバッグ 2 running_ldap_server: " + running_ldap_server);
+       }
+      break;
+    }
+  }
+
+

 

+

スクリプトの例

+

以下は、ここまでで説明されている内容を反映したスクリプトの実例です。

+
// Mozilla AutoConfig, Jehan Procaccia & Roberto Aguilar
+
+// すべての行を try/catch 文に含めます
+try {
+/*
+1) 環境変数を定義
+2) LDAP ミラーサーバをリストしてランダム化
+3) processLDAPValues() を定義
+4) getLDAPAttributes() で LDAP サーバを呼び出して LDAP 属性 (mail と cn) を取得
+5) ユーザ設定を定義
+*/
+
+// 1) 環境変数
+if(getenv("USER") != "") {
+   // *NIX 用の設定
+   var env_user = getenv("USER");
+   var env_home = getenv("HOME");
+ } else {
+   // Windows 用の設定
+   var env_user = getenv("USERNAME");
+   var env_home = getenv("HOMEPATH");
+ }
+  var env_mozdebug= getenv("MOZILLA_DEBUG");
+
+// 2) フェイルオーバー用に複数の LDAP サーバを定義
+  var ldap_values;
+  var ldap_servers = new Array('ldap2.int-evry.fr',
+                      'ldap1.int-evry.fr',
+                      'openldap.int-evry.fr'
+                      );
+  // サーバ配列からランダムに選択を行うシャッフル関数
+/**
+  * 配列のシャッフル方法の定義
+  * Mickweb Script Factory のコードを利用しました。
+  * http://www.mickweb.com/javascript/arrays/pureshuffle.html
+  */
+  // 配列のシャッフル方法の定義
+  Array.prototype.shuffle = function(times) {
+    var i,j,t,l=this.length;
+    while(times--) {
+      with(Math) {
+    i = floor(random()*l);
+    j = floor(random()*l);
+      }
+      t       = this[i];
+      this[i] = this[j];
+      this[j] = t;
+    }
+    return this;
+  }
+ // LDAP サーバをシャッフルし、毎回同じサーバが選択されないようにする
+  ldap_servers.shuffle(10);
+
+/* 3) ここで定義しておく (下の 4 以降では機能しないため) processLDAPValues() は、後で直下の getLDAPAttributes() によって呼び出されます。$MOZILLA_HOME/defaults/autoconfig/prefcalls.js で定義されている getLDAPAttributes() コードを参照すれば、「ユーザ定義」された processLDAPValues() への内部呼び出しを確認できます。
+*/
+function processLDAPValues(values) {
+ if(values) {
+      // LDAP クエリから返ってきた値でグローバル変数をセットします
+      ldap_values = values;
+    var uid = getLDAPValue(values, "uid");
+    var cn = getLDAPValue(values, "cn");
+    var mail = getLDAPValue(values, "mail");
+     // LDAP 変数 (mail と cn) に依存した設定項目を、設定可能なうちにロック
+    lockPref("mail.server.server1.name", mail);
+    lockPref("mail.identity.id1.fullName", cn);
+    lockPref("mail.identity.id1.useremail", mail);
+    defaultPref("network.ftp.anonymous_password", mail);
+
+    // $MOZILLA_DEBUG=1 が定義されている場合は、デバッグメッセージをポップアップで表示
+    if (env_mozdebug) {
+        displayError("エラーはありませんでした。MCI (jehan.procaccia@int-evry.fr)" + "\nこのメッセージはdisplayError() で表示しています。\nデバッグ 1 mozilla.cfg v3.2、成功、S2IA 再び", "\nmail:" + mail + "\nuid:" +uid + "\ncn:" +cn + "\nuser:" + env_user);
+        }
+    }
+  }
+
+// 4) LDAP サーバを呼び出し、LDAP 属性 (mail と cn) を取得します。これは最終的に上記 3 の processLDAPValues() を呼び出します
+// LDAP ミラーサーバ一覧を参照
+for(i = 0; i < ldap_servers.length; i ++) {
+// uid に $USER または $USERNAME をセットし、LDAP サーバから mail と cn 属性を検索
+  getLDAPAttributes(ldap_servers[i],
+       "ou=people,dc=int-evry,dc=fr",
+       "uid=" + env_user,
+       "uid,cn,mail");
+    // 稼働している LDAP サーバに当たったらループを抜ける
+    if(ldap_values) {
+      running_ldap_server = ldap_servers[i];
+        // $MOZILLA_DEBUG=1 が定義されている場合は、稼働しているサーバをポップアップで表示
+      if (env_mozdebug) {
+        displayError("getLDAPAttributes: デバッグ 2 running_ldap_server: " + running_ldap_server);
+       }
+      break;
+    }
+  }
+
+// 5) ユーザ設定を定義
+
+// ブラウザ
+lockPref("browser.startup.homepage", "http://www.int-evry.fr/s2ia/portail/");
+//unlockPref("browser.startup.homepage");
+lockPref("browser.startup.homepage_override", true);
+lockPref("startup.homepage_override_url", "http://www.int-evry.fr/s2ia/portail/");
+//unlockPref("startup.homepage_override_url");
+lockPref("browser.cache.disk.capacity", 100);
+lockPref("network.cookie.cookieBehavior", 0);
+
+// ネットワーク設定
+lockPref("network.proxy.autoconfig_url", "http://www.int-evry.fr/local/config.proxy");
+lockPref("network.proxy.type", 2);
+
+// プライバシーとセキュリティ
+defaultPref("signon.rememberSignons", false);
+
+// アカウント
+lockPref("mail.account.account1.identities", "id1");
+lockPref("mail.account.account1.server", "server1");
+lockPref("mail.account.account2.server", "server2");
+lockPref("mail.account.account3.server", "server3");
+lockPref("mail.accountmanager.accounts", "account1,account2,account3");
+lockPref("mail.accountmanager.defaultaccount", "account1");
+
+// IMAP
+lockPref("mail.server.server1.hostname", "imap-int.int-evry.fr");
+lockPref("mail.server.server1.type", "imap");
+lockPref("mail.server.server1.login_at_startup", true);
+lockPref("mail.identity.id1.draft_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Drafts");
+lockPref("mail.identity.id1.drafts_folder_picker_mode", "0");
+lockPref("mail.identity.id1.fcc_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Sent");
+lockPref("mail.identity.id1.fcc_folder_picker_mode", "0");
+lockPref("mail.identity.id1.stationery_folder", "imap://" + env_user + "@imap-int.int-evry.fr/Templates");
+lockPref("mail.identity.id1.tmpl_folder_picker_mode", "0");
+lockPref("mail.identity.id1.valid", true);
+lockPref("mail.identity.id1.overrideGlobal_Pref", true);
+lockPref("mail.server.server1.download_on_biff", true);
+lockPref("mail.server.server1.login_at_startup", true);
+lockPref("mail.server.server1.userName", env_user);
+lockPref("mail.server.server1.delete_model", 0);
+
+// SMTP
+defaultPref("mail.identity.id1.smtpServer", "smtp1");
+defaultPref("mail.smtpserver.smtp1.auth_method", 0);
+defaultPref("mail.smtpservers", "smtp1");
+defaultPref("mail.smtpservers", "smtp1");
+defaultPref("mail.smtp.defaultserver", "smtp1");
+defaultPref("mail.smtpserver.smtp1.hostname", "smtp-int.int-evry.fr");
+lockPref("mail.identity.id1.organization", "INT Evry France");
+lockPref("mail.startup.enabledMailCheckOnce", true);
+lockPref("mail.ui.folderpane.version", 3);
+lockPref("mailnews.ui.threadpane.version", 2);
+
+// LDAP 設定
+lockPref("mail.identity.id1.directoryServer", "ldap_2.servers.ldapint");
+lockPref("ldap_2.prefs_migrated", true);
+lockPref("ldap_2.servers.history.filename", "history.mab");
+lockPref("ldap_2.servers.history.replication.lastChangeNumber", 0);
+lockPref("ldap_2.servers.ldapint.auth.savePassword", true);
+lockPref("ldap_2.servers.ldapint.description", "ldap-int");
+lockPref("ldap_2.servers.ldapint.filename", "abook-1.mab");
+lockPref("ldap_2.servers.ldapint.position", 3);
+lockPref("ldap_2.servers.ldapint.uri", "ldap://ldap1.int-evry.fr:389/ou=people,dc=int-evry,dc=fr??sub");
+lockPref("ldap_2.servers.pab.filename", "abook.mab");
+lockPref("ldap_2.servers.pab.replication.lastChangeNumber", 0);
+
+// News 設定
+lockPref("mail.server.server3.hostname", "news.int-evry.fr");
+lockPref("mail.server.server3.max_cached_connections", 2);
+lockPref("mail.server.server3.name", "news.int-evry.fr");
+lockPref("mail.server.server3.type", "nntp");
+lockPref("mail.server.server3.userName", env_user);
+
+// try 文を閉じて catch 文を呼び出します
+} catch(e) {
+  displayError("lockedPref", e);
+}
+
+

参考: 古い確実なスクリプト

+

以下の内容は、少なくとも Netscape 4.x では動作確認済みです。

+

下にある元のファイル (Netscape 4.x の章を参照) では、JavaScript 形式の設定ファイルを取得する Web サーバと、mailcn 属性を取得する LDAP サーバをそれぞれハードコーディングしていました。しかし、サーバがダウンした場合に備えて、ミラーサーバからも取得できるようにしておいた方がより安全です。Web サーバ名については、LDAP クエリを使って、利用可能なサーバの一覧を取得するようにしました。これにより、netscape.cfg ファイルに変更を加えるたびにエンコードし直す必要がなくなりました。コンピュータを OS ごと複製する際、一度だけ netscape.cfg ファイルを設定しておけば、LDAP や Web サーバの JavaScript 設定ファイル (集中管理設定) にはいつでも変更を加えることができます。

+
netscape.cfg の拡張
+

参照を行う、利用可能な Web サーバの一覧は、netscape.cfg で定義します。また、JavaScript 設定ファイルの名前もここで定義します。こうすることで、必要に応じて変更を加えたコンピュータを複製した場合も、netscape.cfg を編集せずに済みます。

+
LDAP Web サーバ一覧のサブツリー
+
$ ldapsearch -x * -b "ou=browser,ou=information,dc=int-evry, dc=fr" cn -LLL
+dn: ou=browser,ou=information,dc=int-evry,dc=fr
+
+dn: sn=http_server,ou=browser,ou=information,dc=int-evry, dc=fr
+cn: web1.int-evry.fr
+cn: web2.int-evry.fr
+
+dn: sn=http_unix_file, ou=browser,ou=information,dc=int-evry, dc=fr
+cn: /browser/config_file_unix.jsc
+
+dn: sn=http_win_file, ou=browser,ou=information,dc=int-evry, dc=fr
+cn: /browser/config_file_win.jsc
+
+
netscape.cfg
+

ここでは、LDAP クエリを単純にテストすることで、利用可能な LDAP サーバを選択しています。設定を行う LDAP クエリに対して応答があるか確認するだけです。(再度断っておきますが、著者は JavaScript に詳しくありません。もっと良い方法で LDAP サーバが稼働しているかどうかを確認できるかもしれません。Web サーバの確認については、このコードを自由に利用して構いませんので、著者に教えてください)

+
if (getLDAPAttributes("ldap1.int-evry.fr", \
+ "ou=browser,ou=information,dc=int-evry,dc=fr", \
+ "sn=http_server", "cn") )
+ var running_ldap_server = "ldap1.int-evry.fr";
+ else if (getLDAPAttributes("ldap2.int-evry.fr", \
+ "ou=browser,ou=information,dc=int-evry,dc=fr", \
+ "sn=http_server", "cn") )
+  var running_ldap_server = "ldap2.int-evry.fr";
+  else if (getLDAPAttributes("ldap0.int-evry.fr", \
+  "ou=browser,ou=information,dc=int-evry,dc=fr", \
+  "sn=http_server", "cn") )
+   var running_ldap_server = "ldap0.int-evry.fr";
+  else alert("No LDAP server available!");
+
+

Unix 用の netscape.cfg ファイルの完全な例です。

+
with (PrefConfig) { // 必ず PrefConfig モジュール内部に記述します
+
+// 後で使用するいくつかの変数を作成します
+var env_user = getenv("USER");       // Windows ユーザ名
+var env_home = getenv("HOME");       // ユーザのホームディレクトリ
+var env_mozilla_home = getenv("MOZILLA_HOME");
+var env_mozdebug = getenv("MOZILLA_DEBUG");
+
+// LDAP サーバが稼働しているかを確認 (より良い方法が必要)
+
+if (getLDAPAttributes("ldap1.int-evry.fr", \
+ "ou=browser,ou=information,dc=int-evry,dc=fr", \
+ "sn=http_server", "cn") )
+ var running_ldap_server = "ldap1.int-evry.fr";
+ else if (getLDAPAttributes("ldap2.int-evry.fr", \
+  "ou=browser,ou=information,dc=int-evry,dc=fr", \
+  "sn=http_server", "cn") )
+  var running_ldap_server = "ldap2.int-evry.fr";
+  else if (getLDAPAttributes("ldap0.int-evry.fr", \
+  "ou=browser,ou=information,dc=int-evry,dc=fr", \
+  "sn=http_server", "cn") )
+   var running_ldap_server = "ldap0.int-evry.fr";
+  else alert("No LDAP server available!");
+
+if (running_ldap_server){
+var ldap_http_server_values = getLDAPAttributes(running_ldap_server, \
+"ou=browser,ou=information,dc=int-evry,dc=fr", "sn=http_server", "cn");
+var ldap_http_server = getLDAPValue(ldap_http_server_values, "cn");
+var ldap_http_unix_uri_values = getLDAPAttributes(running_ldap_server, \
+"ou=browser,ou=information,dc=int-evry,dc=fr", "sn=http_unix_file", "cn");
+var ldap_http_unix_uri = getLDAPValue(ldap_http_unix_uri_values, "cn");
+var values = getLDAPAttributes(running_ldap_server, \
+"ou=people,dc=int-evry,dc=fr", "uid="+env_user, "cn,mail");
+var ldap_email = getLDAPValue(values, "mail");
+var ldap_gecos = getLDAPValue(values, "cn");
+env_user=env_user.toLowerCase();
+}
+else
+ alert("No LDAP server available, AutoConfig impossible!");
+
+// $MOZILLA_DEBUG=1 が定義されている場合は、デバッグメッセージをポップアップで表示
+if (env_mozdebug) {
+ alert("MOZILLA_DEBUG\nrunning LDAP server: " + running_ldap_server);
+ alert("MOZILLA_DEBUG\nExecuting " + ldap_http_server + \
+ ldap_http_unix_uri);
+ alert("MOZILLA_DEBUG\nfetching http://" + ldap_http_server \
+ + ldap_http_unix_uri + "");
+}
+
+// HTTP サーバから設定ファイルを取得
+// HTTP サーバが稼働しているか確認する方法が必要
+
+config(
+"autoadmin.global_config_url", "http://" + ldap_http_server + \
+ldap_http_unix_uri + ""
+);
+
+// ファイルを使用しているため、アクセスできない場合は、何か問題があります
+config(
+"autoadmin.failover_to_cached", false
+);
+
+// CGI による URL リクエストに ?useremail=email-addr を付加しない
+config(
+"autoadmin.append_emailaddr", false
+);
+
+} // with (PrefConfig)
+
+

Windows 版の netscape.cfg ファイルでは、LDAP クエリの "sn=http_unix_file""sn=http_win_file" に置き換えます。

+

 

+

LockPref 設定ファイル

+

このファイル (サーバ上では http://www/browser/config-file-system.jsc にあるとします) では、設定項目の設定やロックを行います。著者の環境では共有のコンピュータを使用しているため、ユーザごとに設定をカスタマイズする必要があります。ログイン名は環境変数から取得します。Unix では USER、Windows では USERNAME になります。このように、Windows と Unix では環境変数とパスが異なるため、別々の設定ファイルを用意しています。同じファイルで両方のシステムを管理する方法があるはずですが、残念ながら著者は JavaScript に詳しくないのです。

+

以下は Unix 用の設定ファイル (config_file_unix.jsc) での lockPref の記述例です。IMAP サーバ名、法人名、キャッシュの場所やサイズなど、いくつかの設定をロックし (lockPref)、ホームページなど他の設定は単に初期設定としています (defaultPref)。また、prefcalls.js で定義されている LDAP 関数を使用してログインユーザ (USER または USERNAME) のメールアドレスとコモンネーム、つまり LDAP 上の各自の mailcn を取得しています。

+
[root@lugdunum /var/www/html/browser]
+$ more config_file_unix.jsc
+// 利用できる関数:
+// lockPref(name, value) はユーザによる変更を許可しない
+//  (別名 lock_pref())
+// defaultPref(name, value) ユーザが変更しない限り、この値を使用
+//  (別名 default_pref())
+// unlockPref(name) 前にロックした設定を解除
+// config(name, value) 通常はメニューに使用
+// value = getPref(name) 現在の設定を取得
+// getLDAPAttributes(host, base, filter, attributes)
+// getLDAPValue(values, attribute)
+// .mime.type, .begin_mime_def, .end_mime_def..
+// .plat
+// alert(message);
+// var = prompt(message);
+// var = getPlatform() 戻り値は Win32 など
+//  getPlatform().contains("UNIX")...
+// var = getenv(envvar)
+// var = putenv(envvar)
+//
+// 利用できないオブジェクトや関数は、navigator.* で定義されていないため
+// (これは本当に良くないと思います)
+//=========================================================================
+// 設定を定義
+//=========================================================================
+with (PrefConfig) {
+var values = getLDAPAttributes("ldap2.int-evry.fr", \
+"ou=people,dc=int-evry,dc=fr", "uid=" + env_user, "cn,mail");
+var ldap_email = getLDAPValue(values, "mail");
+var ldap_gecos = getLDAPValue(values, "cn");
+//var toto = prompt("email");
+//alert("ldap_mail = " + ldap_email + "toto=" + toto);
+if (env_mozdebug) {
+ alert("env_user:" + env_user + "\nenv_home:" + env_home + \
+"\nldap_email:" + ldap_email + "\nldap_gecos:" + ldap_gecos + "\n");
+}
+//-----------------------------------------------------------------------
+// [ 一般的なブラウザ設定 ]
+//-----------------------------------------------------------------------
+config("autoadmin.refresh_interval", 1440); // 24 時間ごとに自動更新
+defaultPref("browser.startup.page",1);
+//0=blank page, 1=homepage, 2=last visited
+defaultPref("browser.startup.homepage", "http://www/mci/mode-d-emploi.shtml");
+lockPref("browser.cache.directory", "/tmp");
+lockPref("browser.cache.memory_cache_size", 0);
+
+lockPref("mail.server_type",1); // POP=0 IMAP=1
+lockPref("network.hosts.imap_servers", "pop-int");
+lockPref("mail.imap.server.pop-int.using_subscription",true);
+lockPref("mail.imap.server.pop-int.userName", env_user);
+lockPref("mail.identity.useremail", ldap_email);
+lockPref("mail.identity.username", ldap_gecos);
+lockPref("mail.check_new_mail", false);
+lockPref("mail.directory", env_home+"/nsmail");
+lockPref("mail.identity.defaultdomain", "int-evry.fr");
+lockPref("mail.identity.organization", "INT Evry Essonne ");
+
+// LDAP
+lockPref("ldap_2.autoComplete.useDirectory", true);
+lockPref("ldap_2.servers.LDAPINT.autoComplete.enabled", true);
+lockPref("ldap_2.servers.LDAPINT.csid", "UTF-8");
+lockPref("ldap_2.servers.LDAPINT.description", "LDAP INT");
+lockPref("ldap_2.servers.LDAPINT.filename", "LDAPINT.na2");
+lockPref("ldap_2.servers.LDAPINT.position", 2);
+lockPref("ldap_2.servers.LDAPINT.searchBase", "ou=people,dc=int-evry,dc=fr");
+lockPref("ldap_2.servers.LDAPINT.serverName", "ldap1.int-evry.fr");
+
+// News
+lockPref("news.directory", "/tmp");
+// プロキシ
+lockPref("network.proxy.autoconfig_url", \
+"http://www.int-evry.fr/local/config.proxy");
+
+} // with (PrefConfig)
+
+

 

+

 

+

 

+


+ この文書の最初のバージョンは HEVEA を用いて LaTeX から翻訳されました。

+

"author" : " Jehan Procaccia MCI INT-EVRY- jehan.procaccia AT int-evry.fr"

+

"creation date" : " 02 September 2006"

diff --git a/files/ja/archive/misc_top_level/same-origin_policy_for_file_colon__uris/index.html b/files/ja/archive/misc_top_level/same-origin_policy_for_file_colon__uris/index.html new file mode 100644 index 0000000000..3900c3c16d --- /dev/null +++ b/files/ja/archive/misc_top_level/same-origin_policy_for_file_colon__uris/index.html @@ -0,0 +1,22 @@ +--- +title: 'file: URI の同一オリジンポリシー' +slug: 'Archive/Misc_top_level/Same-origin_policy_for_file:_URIs' +tags: + - Same-origin policy + - Security + - XMLHttpRequest +translation_of: 'Archive/Misc_top_level/Same-origin_policy_for_file:_URIs' +--- +

Gecko 1.8 以前では、2つの file: URI は同一オリジンとみなされます。つまり、ローカルディスク上のHTMLファイルはローカルディスク上の別ファイルを読み込めます。

+ +

Gecko 1.9 からは、ファイルは特定のファイルのみ読み込みが許可されます。具体的には、読み込み元ファイルの親ディレクトリが、読み込み対象ファイルの祖先ディレクトリと同じ場合のみ、読み込みができます。ただし、ディレクトリはこの方法では読み込めません。

+ +

例えば別のファイル bar.html にアクセスするファイル foo.html があり、それをファイル index.html から操作した場合、読み込みが成功するのは bar.htmlindex.html と同じディレクトリ内にあるか、bar.html のあるディレクトリが index.html と同じディレクトリ内に含まれる場合のみです。

+ +

このポリシーは XMLHttpRequestXSLT、XBL を含む、同一オリジンチェックが行われるときすべてに影響します。

+ +

クロスウィンドウDOMアクセスの場合、各ファイルは別のオリジンとして扱われますが、例外が1つあります。ファイルが別のファイルから読み込まれたときにこの同一オリジンポリシーに従って読み込める場合は、それらは同じオリジンとみなされる、ということです。この読み込みは、サブフレーム、リンク、ロケーションセット、window.open() の呼び出しなどを通して発生します。

+ +

例えばファイル /home/user/foo.html がフレームセットで、フレームの1つが /home/user/subdir/bar.html のとき、このフレームとフレームセットは同じオリジンとみなされます。一方、ファイル /home/user/subdir/foo.html がフレームセットで、フレームが /home/user/bar.html のとき、このフレームとフレームセットは異なるオリジンとみなされます。

+ +

新しい security.fileuri.strict_origin_policy 設定の標準は true で、ユーザーが file: URI の際に厳密な同一オリジンポリシーの適用を求めない場合は false にすることもできます。

diff --git a/files/ja/archive/misc_top_level/source_code_directories_overview/index.html b/files/ja/archive/misc_top_level/source_code_directories_overview/index.html new file mode 100644 index 0000000000..455f46fcc3 --- /dev/null +++ b/files/ja/archive/misc_top_level/source_code_directories_overview/index.html @@ -0,0 +1,129 @@ +--- +title: Source code directories overview +slug: Archive/Misc_top_level/Source_code_directories_overview +tags: + - Developing Mozilla +translation_of: Archive/Misc_top_level/Source_code_directories_overview +--- +

+

この文書は、開発者のための Mozilla ソースコードツリーのディレクトリ構造のガイドである。ソースコード全体を鳥瞰し、 Mozilla を理解しやすくすることを目的とする。これは、新しく Mozilla の開発に加わる人が Mozilla のコードを学ぶスタートラインにするといい文書である。 +

この文書には SeaMonkey、Firefox、Toolkit に関する情報が含まれている。 +

これは Mozilla ソースツリーの変更に合わせて毎月更新される (べき) 生の文書である。 +

See also similar information in Mozilla Source Code Directory Structure. +

+

はじめに: 共通サブディレクトリ

+

Mozilla ソースツリー全体を通して1つの一貫した名前つけ規約が用いられている。最上位ではプロダクトの名前である (例えば、seamonkey)。次のレベルはモジュールの名前 (例えば、seamonkey の中の editor ディレクトリ)。3 番めのレベルでは共通の名前つけ規約をそのまま流用しているところが多い。多くの第 3 レベルには、basepublic そして idl ディレクトリがある。要求されているものではないが、これらの共通の名前は共通の目的に利用される。もしファイルがサブモジュールにグループ分けできる場合は、それぞれ独自の名前のディレクトリに入れられる。 (例えば seamonkey の中の editor ディレクトリにある txmgr)。この 3 番めのレベルのディレクトリの下に 4 番目のレベルのベースとして public や idl などのディレクトリがある。この規約は再帰的であり、サブモジュールや、サブサブモジュール等にも適用される。 +

+ +

他にもプラットフォームに依存したサブディレクトリが含まれている場合がある。このディレクトリには特定のプラットフォーム用のソースコードが含まれている。 +

+ +

SeaMonkey

+

SeaMonkey は Mozilla ブラウザスイートの開発コード名である。 +

+ +

Firefox

+

Firefox is contained in the browser directory +

+ +

Toolkit

+

Toolkit is used by the standalone products. +

+ +
+


+

+
+

原文書の情報

+ +
+
+
diff --git a/files/ja/archive/misc_top_level/using_content_preferences/index.html b/files/ja/archive/misc_top_level/using_content_preferences/index.html new file mode 100644 index 0000000000..a9b558d980 --- /dev/null +++ b/files/ja/archive/misc_top_level/using_content_preferences/index.html @@ -0,0 +1,107 @@ +--- +title: Using content preferences +slug: Archive/Misc_top_level/Using_content_preferences +tags: + - Firefox 3 +translation_of: Archive/Misc_top_level/Using_content_preferences +--- +
+ +

Firefox 3 は、コンテンツの設定を保存する事ができます。この機能はサイトごとの設定をコンピューターに保存するため chrome 権限が与えられたコードでしか利用できません。言い換えるなら、拡張機能とブラウザ自体(Web サイトを除く)からのみ利用できると言う事です。この機能を使用することで特定の Web サイトをカスタマイズする(例えば文字が小さく読み難いサイトで、文字を大きくする)拡張機能を作成する事ができます。

+ +

コンテンツ設定サービスは nsIContentPrefService によってインプリメントされています。この機能を使用して特定の Web サイトに設定したりブラウザの既定設定を割り当てる事ができます。もし特定の Web サイトから設定を取得できない場合はブラウザの既定設定が使用されます。

+ +

例: 設定の保存と読み込み

+ +

このサンプルは設定を保存した後、保存された設定を読み込んでいます。

+ +
var ioSvc = Components.classes["@mozilla.org/network/io-service;1"]
+            .getService(Components.interfaces.nsIIOService);
+var prefService = Components.classes["@mozilla.org/content-pref/service;1"]
+                  .getService(Components.interfaces.nsIContentPrefService);
+
+// Create a URI object referencing the site to save a preference for
+var uri = ioSvc.newURI("http://developer.mozilla.org/", null, null);
+
+// Set the value of the "devmo.somesetting" preference to "foo".
+
+prefService.setPref(uri, "devmo.somesetting", "foo");
+
+...
+
+// Retrieve the value of the "devmo.somesetting" preference.
+
+var value = prefService.getPref(uri, "devmo.somesetting");
+ +

Built-in site-specific preferences

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Preference NameMenu EquivalentValuesNotes
+

browser.content.full-zoom
+

+
View / ZoomExample: "1.10000002384186"
+ (Rounding variant of "1.1")
Related about:config preferences: +
    +
  • browser.zoom.full
    + Boolean, set by the menu item
    + View / Zoom / Zoom Text Only.
    + Despite the confusion in names, this preference is not site-specific.
  • +
  • browser.zoom.siteSpecific
  • +
  • toolkit.zoomManager.zoomValues
  • +
  • +

    zoom.maxPercent and zoom.minPercent

    +
  • +
+
+

browser.download.lastDir
+

+
 Path of a filesystem directoryRelated about:config preferences: +
    +
  • browser.download.lastDir
    + The last directory for any site
  • +
+ +

Use DownloadLastDir.jsm for access to these preferences.

+
browser.upload.lastDir
+
 Path of a filesystem directoryThis preference is stored and retrieved automatically by file upload controls.
+ +
+

Private browsing

+ Gecko 9.0 が必要(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6) +
+ +

Prior to Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6), the content preference service always stores preferences on disk. Because of this, in private browsing mode, use of the content preference service needed to be avoided while in private browsing mode; instead, information needed to be stored in memory or preferences had to be avoided. Starting in Gecko 9.0, when in private browsing mode, the content preference service stores preferences in memory instead of on disk, and automatically forgets them when leaving private browsing mode.

+ +

関連情報

+ + diff --git a/files/ja/archive/misc_top_level/using_xml_data_islands_in_mozilla/index.html b/files/ja/archive/misc_top_level/using_xml_data_islands_in_mozilla/index.html new file mode 100644 index 0000000000..14f59a9520 --- /dev/null +++ b/files/ja/archive/misc_top_level/using_xml_data_islands_in_mozilla/index.html @@ -0,0 +1,84 @@ +--- +title: MozillaでのXML データアイランドの利用 +slug: Archive/Misc_top_level/Using_XML_Data_Islands_in_Mozilla +translation_of: Archive/Misc_top_level/Using_XML_Data_Islands_in_Mozilla +--- +

Internet Explorer(IE)は,「XMLデータアイランド」と呼ばれる<xml>タグを用いてHTMLドキュメントに直接XMLデータを埋め込む仕組みを提供しています.この仕組みはマルチベンダーのウェブ標準に準拠しておらず,Firefoxや他の非IEブラウザではサポートされません.しかし,HTML5は「データブロック」と呼ばれる,より一般的な仕組みを提供しており,XMLを含む,ほぼすべてのテキストデータを埋め込むことが可能です.

+

JavaScriptでは,src属性が省かれ,かつtype属性が実行可能スクリプト型を指定しない場合に限り<script>エレメントの内容をデータブロックとして扱うことができます.  この場合 埋め込みたいXMLコンテントが"</script>"にマッチする(大文字・小文字無視で)終了タグを持たないことを確かめておく必要があります.

+

例として, 簡単な発注書はこのように埋め込むことができます:

+
<script id="purchase-order" type="application/xml">
+<purchaseOrder xmlns="http://example.mozilla.org/PurchaseOrderML">
+  <lineItem>
+    <name>Line Item 1</name>
+    <price>1.25</price>
+  </lineItem>
+  <lineItem>
+    <name>Line Item 2</name>
+    <price>2.48</price>
+  </lineItem>
+</purchaseOrder>
+</script>
+
+

埋め込んだXMLソーステキストはこのように取出せます:

+
var orderSource = document.getElementById("purchase-order").textContent;
+
+

XMLソーステキストはDOMParser APIを用いてDOM treeにパース出来ます:

+
var parser = new DOMParser();
+var doc = parser.parseFromString(orderSource, "application/xml");
+

ここで示した HTML5のデータブロック方式は,Firefox, Opera,WebKitベースのChromeとSafariおよびIE9で機能します.それに対し,IEのXMLデータアイランド方式はIEでしか使えません.

+

完全なデモです (アタッチメントとしても利用可能):

+
<!DOCTYPE html>
+<html>
+<head>
+<title>XML Data Block Demo</title>
+<script id="purchase-order" type="application/xml">
+<purchaseOrder xmlns="http://example.mozilla.org/PurchaseOrderML">
+  <lineItem>
+    <name>Line Item 1</name>
+    <price>1.25</price>
+  </lineItem>
+  <lineItem>
+    <name>Line Item 2</name>
+    <price>2.48</price>
+  </lineItem>
+</purchaseOrder>
+</script>
+<script>
+function runDemo() {
+  var orderSource = document.getElementById("purchase-order").textContent;
+  var parser = new DOMParser();
+  var doc = parser.parseFromString(orderSource, "application/xml");
+  var lineItems = doc.getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "lineItem");
+  var firstPrice = lineItems[0].getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "price")[0].textContent;
+  document.body.textContent = "The purchase order contains " + lineItems.length + " line items. The price of the first line item is " + firstPrice + ".";
+}
+</script>
+</head>
+<body onload="runDemo()";>
+Demo did not run
+</body>
+</html>
+
+

XMLソーステキストはDOMParser APIを用いてDOM treeにパース出来ます:

+
var parser = new DOMParser();
+var doc = parser.parseFromString(orderSource, "application/xml");
+

<script>タグ以外の方法として<object>タグを用いる例です.このデモではpurchase_order.xmlという名前の外部ドキュメントを生成しておかなければなりません:

+
<!DOCTYPE html>
+<html>
+<head>
+<title>XML Data Block Demo</title>
+<script>
+function runDemo() {
+  var doc = document.getElementById("purchase-order").contentDocument;
+  var lineItems = doc.getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "lineItem");
+  var firstPrice = lineItems[0].getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "price")[0].textContent;
+  document.getElementById("output-box").textContent = "The purchase order contains " + lineItems.length + " line items. The price of the first line item is " + firstPrice + ".";
+}
+</script>
+</head>
+<body onload="runDemo()";>
+<object id="purchase-order" data="purchase_order.xml" type="text/xml" style="display: none;"></object>
+<div id="output-box">Demo did not run</div>
+</body>
+</html>
+
-- cgit v1.2.3-54-g00ecf