単一のNSSライブラリを2回(または複数回)使用する一般的なソリューションはありますか?
私の場合、2つのLDAPサーバーがあります。 1つはコンピュータ自体にローカルで、もう1つはリモートです。 NSSを使用して作業する必要があります(必要なエントリがローカルで利用できない場合は、リモートNSSを使用してください)。
現在解決されているので、単一のライブラリ(PADL/nss_ldap)が2回構築されます。どちらの場合も、以前のビルドはソースから発生したすべてのイベントを別のものに変更するsed
ために使用されます。nss_ldap
各ケースに異なるテキスト(例:nss_ldap_1
とnss_ldap_2
)を使用してください。その結果、ビルド結果の名前が変更されます。どちらのバイナリもターゲットシステムに保存されます/etc/nsswitch.conf
。
また、両方のライブラリは異なる設定ファイルを使用します/etc/
(そうでなければ意味がありません!)。ただし、configure
これをビルドする前にライブラリの実行スクリプトでパラメータを変更するだけで簡単に実行できます。
しかし、それは「正しいとは感じません」ではありません。別の方法がありますか?
NSSライブラリ自体が2つの「単一インスタンス」として機能できるように、複数の構成をサポートできると想像できます。ただし、ライブラリの作成者でない場合は、これを達成するのは難しいです。また、両方の構成に対してライブラリへの後続の呼び出しが必要であり、その間に別のライブラリを使用する方が良いかもしれません。
別のアプローチは、構成が異なる別のライブラリを呼び出す単純なフォワーダを作成することです。ただし、これには他のライブラリが何らかの方法で再構成できる必要があります(/etc
フォワーダーでいくつかの固定構成ファイルを使用している場合は、最初のバージョンのように動作します)。そしてそれは一度だけ働きます。ライブラリを3回以上使用すると、リピータ自体が同じ問題を返します。
答え1
残念ながら、GNU libcのNSS実装ではこれを行うことはできません。根本的な問題を発見したので、別の角度で説明します。nsswitch.conf
構文はNSSサービスモジュールに追加情報を提供することを許可しないので、繰り返し呼び出すことは動作しません。したがって、libc側とモジュール側の両方でサポートされていません。しかもglibcもよりサービスモジュールを共有オブジェクトに直接接続できるようにすると、リンクのなりすましが防止されます。
できることは、両方のLDAPディレクトリからメタディレクトリを作成し、それらをNSS構成で使用することです。 OpenLDAPはこれをうまくサポートしています。slapd-meta(5)
マニュアルページまたはこのトピックを参照してください。合併概要例えば。もちろん、slapd
どちらかを設定できる場合は、そのために新しいインスタンスを作成する必要はありません。
(可能であればnss-ldap
使用しないでください。)nss-ldapd