From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../mozilla/xulrunner/ldap_xpcom/index.html | 150 +++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 files/ja/archive/mozilla/xulrunner/ldap_xpcom/index.html (limited to 'files/ja/archive/mozilla/xulrunner/ldap_xpcom/index.html') diff --git a/files/ja/archive/mozilla/xulrunner/ldap_xpcom/index.html b/files/ja/archive/mozilla/xulrunner/ldap_xpcom/index.html new file mode 100644 index 0000000000..38fe28447c --- /dev/null +++ b/files/ja/archive/mozilla/xulrunner/ldap_xpcom/index.html @@ -0,0 +1,150 @@ +--- +title: Using LDAP XPCOM with XULRunner +slug: Archive/Mozilla/XULRunner/LDAP_XPCOM +tags: + - XUL + - XULRunner +translation_of: Archive/Mozilla/XULRunner/LDAP_XPCOM +--- +

標準では XULRunner は LDAP XPCOM サポート無しでビルドされています。もし XUL アプリケーションで LDAP コンポーネントを使いたいのであれば、二つのオプションがあります: XULRunner を LDAP サポートを有効にしてビルドする事、もう一つは LDAP XPCOM を XUL アプリ(のコンポーネントディレクトリ)に直接追加する事です。 +

いずれのケースでも、 <tt>--enable-ldap</tt> ビルドオプションを追加して、 LDAP XPCOM をビルドする必要があるでしょう。 XULRunner のビルドの仕方について詳細な情報 +は Build_Documentation をごらんになってください。Configuring Build Options では、以下を .mozconfig ファイルに追加します: +

+
ac_add_options --enable-ldap
+
+

これでビルドパッケージのコンポーネントディレクトリに以下の二つのファイルが作成されます: +

+ +

そしてビルドパッケージのルートディレクトリに以下の二つのファイルが作成されます: +windows上では: +

+ +

linux上では: +

+ +

これらはネイティブの LDAP ライブラリです。 +

もし通常通りにこれらのファイルを XUL アプリの <tt>components</tt> に追加したとしても、これは動作しません。実際のところ、 LDAP インターフェイスは利用できます(例えば <tt>Components.interfaces.nsILDAPConnection</tt> は null ではありません)が、コンポーネントはロードできません(例えば、 <tt>Components.classes["@mozilla.org/network/ldap-connection;1"]</tt> は null になります)。これは実際にはネイティブの LDAP ライブラリファイルが XULRunner のプロセスが見つけられない事が原因となります。 +

解決方法としては bsmedberg の手法を使う事で、これは Using Dependent Libraries In Extension Components に述べられています: コンポーネントライブラリはリアルライブラリと全ての依存関係の loader となり、これは全ての必要なライブラリがロードされるという事です。 +

mozilla のソースコードディレクトリに <tt>extensions/ldapstub</tt> というサブディレクトリを作成し、二つのファイル、<tt>Makefile.in</tt> と <tt>LDAPStubLoader.cpp</tt> を入れます: +

Makefile.in: +

+
# Copyright (c) 2005 Benjamin Smedberg <benjamin@smedbergs.us>
+
+DEPTH = ../..
+srcdir = @srcdir@
+topsrcdir = @top_srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = mozldapstub
+LIBRARY_NAME = mozldap_stub
+IS_COMPONENT = 1
+FORCE_SHARED_LIB = 1
+
+REQUIRES = \
+	xpcom \
+	string \
+	$(NULL)
+
+CPPSRCS = LDAPStubLoader.cpp
+
+EXTRA_DSO_LDOPTS += \
+	$(DIST)/lib/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
+	$(XPCOM_FROZEN_LDOPTS) \
+        $(NSPR_LIBS) \
+	$(NULL)
+
+include $(topsrcdir)/config/rules.mk
+
+DEFINES += -DMOZ_DLL_PREFIX=\"$(DLL_PREFIX)\"
+
+

LDAPStubLoader.cpp: +

+
// Copyright (c) 2005 Benjamin Smedberg <benjamin@smedbergs.us>
+
+#include "nscore.h"
+#include "nsModule.h"
+#include "prlink.h"
+#include "nsILocalFile.h"
+#include "nsStringAPI.h"
+#include "nsCOMPtr.h"
+
+static char const *const kDependentLibraries[] =
+{
+#ifdef NS_WIN32
+  MOZ_DLL_PREFIX "nsldap32v50" MOZ_DLL_SUFFIX,
+  MOZ_DLL_PREFIX "nsldappr32v50" MOZ_DLL_SUFFIX,
+#endif //NS_WIN32
+#ifdef NS_UNIX
+  MOZ_DLL_PREFIX "ldap50" MOZ_DLL_SUFFIX,
+  MOZ_DLL_PREFIX "prldap50" MOZ_DLL_SUFFIX,
+#endif //NS_UNIX
+  nsnull
+};
+
+// component.dll on windows, libcomponent.dll on linux
+static char kRealComponent[] = MOZ_DLL_PREFIX "mozldap" MOZ_DLL_SUFFIX;
+
+nsresult
+NSGetModule(nsIComponentManager* aCompMgr,
+            nsIFile* aLocation,
+            nsIModule* *aResult)
+{
+  nsresult rv;
+
+  nsCOMPtr<nsIFile> libraries;
+  rv = aLocation->GetParent(getter_AddRefs(libraries));
+  if (NS_FAILED(rv))
+    return rv;
+
+  nsCOMPtr<nsILocalFile> library(do_QueryInterface(libraries));
+  if (!library)
+    return NS_ERROR_UNEXPECTED;
+
+  library->SetNativeLeafName(NS_LITERAL_CSTRING("libraries"));
+  library->AppendNative(NS_LITERAL_CSTRING("dummy"));
+
+  // loop through and load dependent libraries
+  for (char const *const *dependent = kDependentLibraries;
+       *dependent;
+       ++dependent) {
+    library->SetNativeLeafName(nsDependentCString(*dependent));
+    PRLibrary *lib;
+    library->Load(&lib);
+    // 1) We don't care if this failed!
+    // 2) We are going to leak this library. We don't care about that either.
+  }
+
+  library->SetNativeLeafName(NS_LITERAL_CSTRING(kRealComponent));
+
+  PRLibrary *lib;
+  rv = library->Load(&lib);
+  if (NS_FAILED(rv))
+    return rv;
+
+  nsGetModuleProc getmoduleproc = (nsGetModuleProc)
+    PR_FindFunctionSymbol(lib, NS_GET_MODULE_SYMBOL);
+
+  if (!getmoduleproc)
+    return NS_ERROR_FAILURE;
+
+  return getmoduleproc(aCompMgr, aLocation, aResult);
+}
+
+

そして <tt>.mozconfig</tt> を変更して次の行を追加します: +

+
ac_add_options --enable-extensions=ldapstub
+
+

XULRunnnerを再ビルドします。これでビルドパッケージの <tt>components</tt> サブディレクトリに新しいファイル、 <tt>mozldap_stub.dll</tt> (Windows上) もしくは <tt>libmozldap_stub.so</tt> (Linux上) が作られるでしょう。

<tt>mozldap.xpt</tt> と <tt>mozldap_stub.dll</tt> を XUL アプリの <tt>components</tt> サブディレクトリにコピーします。 +XULアプリのディレクトリに <tt>libraries</tt> サブディレクトリを作成し、<tt>mozldap.dll</tt> (もしくは <tt>libmozldap.so</tt>) をコピーして、そしてネイティブ LDAP バイナリをそこに入れます。 +

プロファイルを削除しておく事を忘れないでください。 +

これで LDAP コンポーネントが使えるようになります。 +

Interwiki Language Links +

-- cgit v1.2.3-54-g00ecf