この章では、Oracle Virtual Directoryのマッピングについて説明します。この章の内容は次のとおりです。
注意: この章のマッピング情報は、履歴情報として提供されています。これまでのデフォルトのマッピング・スクリプトもサポートされていますが、新しいカスタマイズではJavaプラグインAPIを使用する必要があります。これは、Java APIがすべてのOracle Virtual Directory機能へのアクセスを完全にサポートし、一般的に開発が容易なためです。 |
Oracle Virtual Directoryには、Pythonスクリプト言語に基づく、双方向のマッピング・システムが含まれています。マッピングは、特別なPythonスクリプト(ファイル形式は.mpy)で、インバウンドおよびアウトバウンドのトランザクション・データ・フローを処理します。マッピングによりOracle Virtual Directoryサーバーにデータが渡されるため、Oracle Virtual Directoryの管理者は、データを操作およびマッピングできます。広く普及しているPythonスクリプト言語に基づくOracle Virtual Directoryのマッピング・システムでは、新しい固有の複雑なプログラミング言語を習得せずに、複雑なデータ操作を行うことができます。Oracle Virtual Directoryのマッピング・システムでは、アプリケーションからIDへのアクセスをさらに柔軟にサポートすることができます。Oracle Virtual Directoryは、マッピングを実行可能バイト・コードにコンパイルし、最高のパフォーマンスのためにインラインで実行します。
統合担当者は、1つのデータソースから別のデータソースに情報をマッピングするときに、カスタム変換を実行する使いやすいマッピング・スクリプトを開発できます。このようなスクリプトは、サーバーをリセットせずに、実行中のサーバーにインストールしてデプロイできます。マッピング・スクリプトは、リクエストがデータソースに到達するためにシステムに入る際にリクエストを調整し、クライアントに戻る途中でレスポンスを変換できます。たとえば、マッピングを使用すると、スキーマの正規化(Active DirectoryをInetOrgPersonのように見せるなど)、データ型の添付(ハッシュ・パスワードに対する{sha}など)、またはデータストアから取得した属性値に基づく仮想属性の作成を行うことができます。
マッピングの作成時には、事前定義済のマッピング・テンプレートを使用して構成を簡略化することも、新しいカスタム・マッピングを作成することもできます(マッピング・テンプレートの詳細は、「マッピング・テンプレートの概要」を参照してください)。通常、マッピングはコンパイル済JavaコードとしてOracle Virtual Directoryサーバーにデプロイされ、マッパーと呼ばれる特別なタイプのプラグイン内部で実行されます。プラグインと同様、マッピングは、グローバルに実行することも、アダプタ・レベルで実行することもできます。複数のマッピングとアダプタを組み合せて、総合的な変換サービスを実行する個々の機能のセットを作成できます。図5-1は、1つのマッピングを複数のアダプタで実行し、別のマッピングを特定のアダプタのみで実行する場合の一般的なシナリオを示しています。
各マッピングにはインバウンドおよびアウトバウンドのフローがあり、リクエストを受信するときに一方向の変換を行い、リクエスト元のアプリケーションに結果が戻されるときには、その変換を逆方向にすることができます。サーバーがこの意図を予測することは通常不可能なため、このようにプログラム上で方向を逆にすることは重要です。
Oracle Virtual Directoryでは、マッピングをグローバルに実行するべきか、または1つのアダプタのコンテキスト内で実行するべきかを非常に柔軟に判断できます。マッピングが適用される仮想ツリー内の場所をさらに制限する必要が生じる場合もあります。たとえば、アダプタがMicrosoft Active Directoryドメインのかわりになるように設定されているとします。アダプタは、DC=VAN,DC=Oracle,DC=comを指しています。ドメイン・ツリー内のそのポイントの下には、CN=UsersコンテナおよびCN=Groupsコンテナがあります。マッピングにネームスペース・フィルタを追加すると、ツリーの一部にのみマッピングを適用することができます。
次に、Oracle Virtual Directoryのマッピングに関して考慮する必要のある注意事項を示します。
Oracle Virtual Directoryのマッピングでは、LDAPデータ操作用のOracle提供の追加機能を使用して、Python言語を最大限に利用できます。Pythonに関する詳細は、次に示す、Pythonプログラミング言語の公式Webサイトを参照してください。
マッピングを使用して属性名を変更する場合、DB_Groupsマッピングで行われるように、カスタム・コードが受信フィルタ・オブジェクトを上書きする場合にのみ、Oracle Virtual Directoryで、名前の変更された属性/値の検索がサポートされます。次に例を示します。
アウトバウンド処理中に、マッピングはgivenname属性の名前をcnに変更します。インバウンド処理中に、cn=Johnなどの受信する検索フィルタは、マッピング・カスタム・コードによってgivenname=Johnに変換される必要があります。
マッピングをデプロイし、Oracle Virtual Directoryに対してldapsearchコマンドを実行する場合、検索ベースは、マッピングに構成されたネームスペースか、そのネームスペースの子であることが必要です。
マッピングを使用する顧客の多くは、Oracle Virtual Directoryに付属のデフォルトのマッピングを使用してアプリケーション要件を満たしています。マッパーAPIで対応しているのはJavaプラグイン機能のサブセットのみであること、PythonよりJavaに精通している開発者の方が多く、コードの開発に必要な時間を短縮できることから、カスタマイズが必要な場合は一般的にJavaプラグインAPIが使用されます。
次に、アダプタ・レベルおよびグローバル・サーバー・レベルで、マッピングをデプロイするプロセスの概要を示します。
マッピング・テンプレートを使用してマッピングを構成し、スクリプトにコンパイルして、Oracle Virtual Directoryサーバーにデプロイすると、グローバル・サーバー・レベルまたはアダプタ・レベルでアクティブ化されます。
マッピングをグローバル・サーバー・レベルまたはアダプタ・レベルで構成するには、名前を付け、マッピング・スクリプト・ファイルを指定し、実行予定の仮想ディレクトリでのネームスペースを決定してアクティブ化します。
関連項目:
|
この項では、Oracle Virtual Directoryマッピング・テンプレートについて説明します。この項の内容は次のとおりです。
Microsoft Active Directoryのユーザーとグループ・オブジェクトを、それぞれInetOrgPerson inetOrgPersonおよびgroupOfUniquenamesオブジェクトにマッピングします。
デフォルトのsnおよびgivennameの2つの属性の値を結合することで、仮想の共通名属性を作成します。通常、Common_Name_to_Given_Nameマッピングは、名前と姓のみはあるがフルネームはないデータベース・アダプタに使用されます。
注意: このマッピングでは、共通名属性のサブストリング・フィルタはサポートされていません。 |
別の属性の条件値が一致する場合に、指定された属性を削除します。ConditionalPublishマッピングは、さらに高度なトレーニング環境のFERPA保護属性を非表示にする際に便利です。
グループに関する表を有効なLDAPグループにマップするときにこのテンプレートを使用します。最初の列はcn(グループ名)になります。2番目の列はuniquememberになります。uniquememberの場合、RDN値のみが表内で使用されるように使用されるように、DNが削除されます。たとえば、(uniqueMember=cn=XXX,ou=testusers)が(uniqeMember=XXX)に変換されます。
インバウンドのバイナリ構文パスワードを、データベースと互換性のあるIA5Stringパスワードにマッピングします。
注意: Map_DB_Passwordマッピングとデータベース・アダプタを関連付け、changetypeをAdd、UserPasswordなどのバイナリ属性をOracle Virtual Directoryの既存の値にしてLDAP変更操作を実行すると、主キー制約がデータベース表に設定されていない場合、データベースに重複行が追加されます。 |
この項では、一般的なマッピング・デプロイの例を2つ示します。この項の内容は次のとおりです。
この例では、givennameとsurname(sn)から共通名(cn)を作成する方法を説明します。このタイプのマッピング・デプロイは、データベース・アダプタを使用して、データベースに格納されているユーザー・データへのLDAPインタフェースを提供する際に便利です。LDAPディレクトリには通常cnが格納されますが、データベースでは名前と姓のみが格納される傾向があります。検索の実行時には、共通名へのフィルタ処理が非常に複雑になります。たとえば、フィルタ(cn=Marc Boorshtein)は、(&(givenName=Marc)(sn=Boorshtein))と読み取る必要があります。
次に、このマッピング例の仮想要件のリストを示します。
アダプタからデータが取得されたら、givennameとsnを組み合せてcnを作成する必要があります。
インバウンド側では、cnをgivennameとsnに分割する必要があります。属性リクエスト・リストにcnが含まれている場合は、リストが変更され、givennameおよびsnが含められます。
インバウンド操作が検索操作の場合は、検索フィルタを確認してcnを適切に変換する必要があります。
def parceCN(val): return split(val,' ',2) def inbound(): #map the "cn" filters if operation == 'get': if haveAttribute('cn'): addAttribute('givenName') addAttribute('sn') cnFilters = findFilters('cn') for filter in cnFilters: target,op,val = filter.contents givenNameVal, snVal = parceCN(val) givenNameFilter = createFilter('givenName',op,givenNameVal) snFilter = createFilter('sn',op,snVal) filter.contents = createAndFilter([givenNameFilter,snFilter]) def outbound(): #outbound stuff addAttributeValue('cn',getAttributeValue('givenName') + ' ' + getAttributeValue('sn'))
inbound()
関数では、すべてのcnを変換し、givenname属性とsn属性に分割します。検索の場合には、cnの検索フィルタをgivennameとsnに対応する結合フィルタに変換し、新しい関数parceCN()
を作成します。
マッピングの最初の行では、Pythonのstringモジュールからsplit関数がインポートされます。parseCN()
というPython関数が定義され、cnが取得されて、スペースの検出に基づいて名前と姓に分割されます。
注意: ミドル・ネームが使用されているなど、実際にはより複雑です。この例の目的は、手始めにこの簡単なケースで考えることです。高度なマッピングの状況に関しては、Oracleサポートに連絡してください。 |
次に、inbound()
関数を定義します。inbound関数はすべてのLDAP操作に対応していますが、ここで必要としているのは検索操作です。したがって、インバウンドの後の最初の行は、値operationをテストするif
ブロックになります。この変数操作には、add、bind、delete、get、modify、renameのいずれかが含まれます。
操作がget
の場合、マッピングは、検索リクエストの属性リクエスト・リスト内にcnがあるかどうかを判別して続行します。cnを作成するには、givennameとsnを組み合せる以外に方法がないため、addAttribute()
関数を使用して、検索リストにgivennameとsnを追加する必要があります。
cnのフィルタ・リクエストを処理するために、マッピングは、ターゲットがcn属性であるすべてのフィルタ要素を取得します。マッピングは、フィルタごとに要素を解析し、parseCN
をコールして対応するgivenname値とsn値を計算し、新しいgivenNameフィルタおよびsnフィルタを作成します。最後に、マッピングのインバウンド関数は、cnを伴うフィルタ条件をgivenNameおよびsnを含む結合フィルタに置き換えます。
アウトバウンド関数は、アダプタからクライアントへ送られるすべてのトランザクションを処理します。この例では、その他2つの値からcnを作成する必要があり、addAttributeValue
関数を使用して、givenname、スペース1個、およびsn値を組み合せて新しいcn値を作成します。クライアントに戻される現在のエントリから特定の属性を取得するgetAttributeValue
関数を使用して、既存の値がどのように取得されるかに注意してください。
一般的に、アプリケーションでは、inetorgpersonおよびgroupofuniquenamesのスキーマ・オブジェクトを使用してLDAPディレクトリを使用することが求められます。ただし、多くの組織では、userオブジェクトとgroupオブジェクトのみをサポートするMicrosoft Active Directoryが使用されています。このサンプルのマッピング・デプロイでは、マッピングを使用してActive Directoryのスキーマを、inetorgpersonまたはgroupofuniquenamesを使用するinetorgスタイルのスキーマのようにする方法を説明します。
次に、このマッピング例の変換およびマッピング要件のリストを示します。
属性名の双方向マッピング。たとえば、uniquemember = member
、uid = samaccountname
などです。
オブジェクト・クラス名の変換。基本のオブジェクト・クラス名を変更するだけでなく、Microsoft Active Directoryでは補助オブジェクト・クラスが使用されないことも考慮する必要があります。たとえば、オブジェクト・クラス値のinterorgperson
、organizationalperson
またはperson
は、まとめて単にuser
にする必要があります。
特別な属性値の追加。Microsoftでは、groupType
やuserAccountControl
などの追加のオブジェクト・タイプ・コードを使用することが要求されます。操作に応じて、特別なタグをリクエストに追加する必要があります。
RDN変換。通常、Microsoftでは、cnはユーザー・アカウントの相対識別名として使用されます。多くのアプリケーションでは、uidを使用することが求められます。
次の小規模のスクリプトを使用すると、inetOrgアプリケーションでMicrosoft Active Directoryを使用できます。
def inbound(): #first rename the attributes rename({'uniqueMember':'member','uid':'samaccountname','userpassword': 'unicodepwd','ntgrouptype':'grouptype'}) #map nessasary object class values if haveAttributeValue('objectclass','groupifuniquenames'): removeAttributeValue('objectclass','groupofuniquenames') addAttributeValue('objectclass','group') if haveAttributeValue('objectclass','organizationalPerson'): removeAttributeValue('objectclass','organizationalPerson') addAttributeValue('objectclass','user') if haveAttributeValue('objectclass','inetOrgPerson'): removeAttributeValue('objectclass','inetOrgPerson') addAttributeValue('objectclass','user') #when adding an entry, certain values need to be added if operation == 'add': if haveAttributeValue('objectClass','group'): addAttributeValue('groupType','-2147483646') if not haveAttribute('samaccountname'): copy('cn','samaccountname') if haveAttributeValue('objectClass','user'): addAttributeValue('userAccountControl','66048') #collapse aux classes removeAttributeValue('objectClass','person') removeAttributeValue('objectClass','organizationalPerson') #set the rdn setRDN('samaccountname','cn') def outbound(): #first rename the attributes rename({'member':'uniqueMember','samaccountname':'uid','unicodepwd': 'userpassword','grouptype':'ntgrouptype'}) #map nessasary object class values if haveAttributeValue('objectclass','group'): removeAttributeValue('objectclass','group') addAttributeValue('objectclass','groupofuniquenames') if haveAttributeValue('objectclass','user'): removeAttributeValue('objectclass','user') addAttributeValue('objectclass','organizationalPerson')
inbound()
関数の最初の行では、すべてのinetorg属性がActive Directory属性に名前変更されます。すべての操作に対してrename関数がコールされます。たとえば、操作が検索の場合、リクエストされたすべての属性およびフィルタ内のすべての属性が名前変更されます。操作が追加または変更の場合は、影響するすべての属性が名前変更されます。
inbound関数の2番目のセクションでは、inetOrgのオブジェクト・クラスがInetADのオブジェクト・クラスに置き換えられます。条件文を使用して、実行するアクションを指定できることに注目してください。
inbound関数の3番目のセクションでは、操作が追加(add)かどうかがチェックされ、追加であれば、Active Directoryで必要になる特定の属性情報が追加されます。
inbound関数の4番目のセクションでは、すべての補助オブジェクト・クラスが削除されます。これは、Active Directoryでは、追加操作の際に補助オブジェクト・クラスを直接指定できないためです。
inbound関数の最後のセクションでは、RDNがuidからcnに変更されます。コードにより、samaccountname
がcn
に変換されます。これは、uid
がすでにsamaccountname
に変換されていたためです。また、RDNをuidからcnに変更するだけでなく、(変更や検索などで)cnが指定されていない場合は、cnの検出にも対応します。
Active Directoryからリクエストが戻されると、outbound()
関数が実行されます。outbound()
関数は、inbound関数を逆にします。つまり、最初にすべての適用可能な属性を名前変更し、オブジェクト・クラス名をマッピングして、すべての結果のRDNを変更します。
Oracle Virtual Directoryのマッピングは、Python言語に基づいており、Pythonで使用できるすべての機能またはサブルーチンを使用できます。Oracle Virtual DirectoryでサポートされているPythonの機能だけでなく、次の項で説明するライブラリ関数も提供されます。
次に、Python言語のメソッドと、Oracle Virtual Directoryのマッピングで使用可能なメソッドのリストを示します。
注意: Map xxxxx を指定するメソッドは、次の書式で値のリストを指定できることを意味します。
{'uniqueMember':'member','uid':'samaccountname',[…] } これは、本質的に、1つ以上のマップされた値の配列です。異なる名前のペア関係に特定のメソッドを複数回使用する場合は(「Microsoft Active Directoryスキーマのマッピング」の例の |
操作: add、modify、get、entry
appendAttribute
関数は、source属性の値をdestination属性に追加します。ソース属性は同じ場所に留まります。この関数は、検索フィルタに影響します。
Example: appendAttribute('sn','givenName') add/entry: dn: cn=User objectClass: person cn: User givenName: User sn: name becomes: dn: cn=User objectClass: person cn: User givenName: User givenName: name sn: name modify: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First becomes: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First givenName: Last get: (&(givenName=first)(sn=last)) becomes: (&(|(sn=last)(givenName=last))(givenName=first))
操作: add、modify、get、entry
copyAttribute
関数は、source属性の属性値をdestination属性にコピーします。destination属性がすでに存在する場合は、属性が上書きされます。
Example: copyAttribute('sn','givenName') add/entry: dn: cn=User objectClass: person cn: User givenName: User sn: name becomes: dn: cn=User objectClass: person cn: User givenName: User givenName: name sn: name modify: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First becomes: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First givenName: Last get: (&(givenName=first)(sn=last)) becomes: (|(sn=last)(givenName=last))
操作: add、modify、get、entry
source属性をdestination属性に名前変更します。destination属性がすでに存在する場合は、属性が上書きされます。source属性が存在せず、destination属性が存在する場合は、destination属性が削除されます。
Example: renameAttribute('sn','givenName') add/entry: dn: cn=User objectClass: person cn: User givenName: User sn: name becomes: dn: cn=User objectClass: person cn: User givenName: name modify: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First becomes: dn: cn=User changetype: modify add: givenName givenName: Last get: (&(givenName=first)(sn=last)) becomes: (givenName=last)
操作: add、modify、get、entry
指定された属性が削除され、その値がリストに戻されます。属性がエントリの一部である場合は、値が戻されます。値がchangelistの一部である場合は、EntryChangeオブジェクトが戻されます。
Example: removeAttribute('sn') add/entry: dn: cn=User objectClass: person cn: User givenName: User sn: name becomes: dn: cn=User objectClass: person cn: User givenName: User modify: dn: cn=User changetype: modify add: sn sn: Last - add: givenName givenName: First becomes: dn: cn=User changetype: modify add: givenName givenName: First givenName: Last get: (&(givenName=first)(sn=last)) becomes: (givenName=last)
操作: add、modify、entry、get
Example: revalueAttribute('sn','name','newname') add/entry: dn: cn=User objectClass: person cn: User givenName: User sn: name becomes: dn: cn=User objectClass: person cn: User givenName: User sn: newname modify: dn: cn=User changetype: modify add: sn sn: name - add: givenName givenName: First becomes: dn: cn=User changetype: modify add: sn sn: newname - add: givenName givenName: First givenName: Last get: (&(givenName=first)(sn=name)) becomes: (&(givenName=last)(sn=newname))
操作: add、modify、entry
構文値を新しい構文にマップします。最初の引数が構文オブジェクトである場合は、newSyntax
で指定された構文のインスタンスが関数によって戻されます。有効な構文: DirectoryString、IA5String、BinarySyntax
操作: add、modify、entry
属性値を新しい構文にマップします。最初の引数が属性の名前である場合は、その属性のすべてのインスタンスが新しい構文にマップされます。有効な構文: DirectoryString、IA5String、BinarySyntax
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
parseFunction: 空白とは異なる解析ルールが必要な場合に、データを解析するための関数を識別するオプションのパラメータ。
index: 複数値の属性の場合、このパラメータにより、分割する値が識別されます。
remove: true(1)の場合、結果に存在するautobootの元のデータが削除され、ソースはそのままになります。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
parseFunction: 空白とは異なる解析ルールが必要な場合に、データを解析するための関数を識別するオプションのパラメータ。
index: 複数値の属性の場合、このパラメータにより、分割する値が識別されます。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
parseFunction: 空白とは異なる解析ルールが必要な場合に、データを解析するための関数を識別するオプションのパラメータ。
remove: true(1)の場合、結果に存在するautobootの元のデータが削除され、ソースはそのままになります。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
parseFunction: 空白とは異なる解析ルールが必要な場合に、データを解析するための関数を識別するオプションのパラメータ。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
index: 複数値の属性の場合、このパラメータにより、分割する値が識別されます。
remove: true(1)の場合、結果に存在するautobootの元のデータが削除され、ソースはそのままになります。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
index: 複数値の属性の場合、このパラメータにより、分割する値が識別されます。
属性の既存の値が分割され、newNames
パラメータのリストされた属性にその分割の結果が追加されます。splitValue関数が便利な場合の例は、cn値のみのアダプタが存在するが、そのcn値からgivennameおよびsn値を作成する必要がある場合です。属性が複数値の場合は、検出された最初の値がデフォルトで使用され、分割は空白に基づいて行われ、初期値はそのままになります。次に、このメソッドのパラメータのリストと説明を示します。
newNames: 分割された値から作成される属性の配列。
currentName: 値の作成元の既存の属性。
remove: true(1)の場合、結果に存在するautobootの元のデータが削除され、ソースはそのままになります。
操作: add、modify、entry
Example: splitValue(['givenName','sn','cn',1) add/entry: dn: uid=User objectClass: person cn: First Last uid: User becomes: dn: uid=User objectClass: person givenName: First sn: Last uid: User modify: dn: uid=User changeType: modify replace: cn cn: First1 Last1 becomes: dn: uid=User changeType: modify replace: givenName givenName: First1 - replace: sn sn: :Last1 get: (cn=First Last) becomes: (&(givenName=First)(sn=last))
操作: add、modify、entry
名前属性に値を追加するか、この属性が存在しない場合は属性を作成します。modify操作で属性が存在しない場合は、変更項目Add
が作成されます。
Example: addAttributeValue('myattrib','myval') Example: addAttributeValue('noattrib','hasvalue') add/entry: dn: uid=User objectClass: person cn: First Last uid: User myattrib: noval becomes: dn: uid=User objectClass: person givenName: First sn: Last uid: User myattrib: noval myattrib: myval noattrib: hasValue modify: dn: uid=User changeType: modify delete: myattrib myattrib: someval becomes: dn: uid=User changeType: modify delete: myattrib myattrib: someval myattrib: myval - changetype: add add: noattrib noattrib: hasValue
操作: add、modify、entry、get
指定された属性が存在する場合は、1(true)または0(false)を戻します。
操作: add、modify、entry、get
指定された属性が存在する場合は、1(true)または0(false)を戻します。fetchFromServer
が1の場合は、サーバーからエントリがフェッチされます。
操作: add、modify、entry、get
指定された属性および関連付けられている値が存在する場合は、1(true)または0(false)を戻します。
操作: add、modify、entry、get
指定された属性および関連付けられている値が存在する場合は、1(true)または0(false)を戻します。fetchFromServer
が1の場合は、比較のためにサーバーからエントリが取得されます。
操作: add、modify、get、entry
属性値を削除して、値が削除された場合はtrueを戻します。
Example: removeAttributeValue('myattribute','myvalue') add/entry: dn: cn=user objectClass: person cn: user myattribute: myvalue myattribute: myvalue2 becomes: dn: cn=user objectClass: person cn: user myattribute: myvalue2 modify: dn: cn=User changetype: modify replace: myattribute myattribute: myvalue - add: sn sn: last becomes: dn: cn=User changetype: modify add: sn sn: last get: (&(sn=last)(myattribute=myvalue)) becomes: (sn=last)
操作: add、modify、delete、bind、rename、entry
現在の名前のRDN(getのベース)を古いRDN属性から新しいRDN属性に変更します。
Example: setRDN('cn','uid') add/entry: dn: cn=user objectClass: inetOrgPerson uid: userid cn: user becomes: dn: uid=userid cn: user objectClass: inetOrgPerson modify: dn: cn=user changetype: modify add: sn sn: last becomes: dn: uid=userid changetype: modify add: sn sn: last bind/get/delete: dn: cn=user becomes: dn: uid=userid
操作: get
検索時に戻り属性のリストに属性を追加します。
操作: get
指定された属性を伴うすべてのフィルタのリストを戻します。
操作: get
targetをテストされる属性、operationを使用できるコンパレータの1つ、およびvalueをフィルタ処理対象の値として、新しいフィルタ・オブジェクトを作成します。
操作: get
フィルタのリストからandフィルタを作成します。
操作: get
フィルタのリストからorフィルタを作成します。
操作: add、entry
指定された属性の最初の値を戻します。
操作: すべて
提供されたエントリから指定された属性の値を取得します。
操作: modify
新しいEntryChange
オブジェクトを作成して戻します。
操作: modify
エントリ変更のリストにen
エントリの変更を追加します。
操作: すべて
指定されたエントリを戻します。
操作: add、modify、entry、get
指定された属性の値について、oldBase
をnewBase
に置き換えます。
操作add、modify、get、entry
存在する場合は属性が削除され、その値が戻されます(変更操作中の場合はEntryChangeの値)。
Example: removeAttributeValue('myattribute') add/entry: dn: cn=user objectClass: person cn: user myattribute: myvalue myattribute: myvalue2 becomes: dn: cn=user objectClass: person cn: user modify: dn: cn=User changetype: modify replace: myattribute myattribute: myvalue - add: sn sn: last becomes: dn: cn=User changetype: modify add: sn sn: last get: (&(sn=last)(myattribute=myvalue)) becomes: (sn=last)
データ・オブジェクトは、Oracle Virtual DirectoryによってPython環境での使用が可能になった変数です。これらの変数は、Oracle Virtual Directoryデータ構造のハンドルの取得、および様々なオブジェクトとステータス項目の解釈に使用します。
現在の操作です。有効な値: add、modify、delete、rename、get、entry、bind
仮想サービス・インタフェース(VSI)のハンドルを取得します。
戻すことが要求されている属性です。操作: get
現在の検索ベースです。操作: get
フィルタを戻し、タプルの書式(target, operation, value)で設定します。
フィルタがANDフィルタの場合に、TRUEを戻します。
フィルタがORフィルタの場合に、TRUEを戻します。
フィルタがNOTフィルタの場合に、TRUEを戻します。
modify操作に関する一連の変更です。操作: modify
ユーザーの現在の資格証明(DN)です。操作: すべて
追加するエントリまたは検索から戻されるエントリです。操作: get、add
現在の検索フィルタです。操作: get
追加、バインド、変更または削除されるエントリです。すべての操作で使用可能です。
値の取得: val = request([String name])
値の格納: request(['myname'])='myvalue'
指定された現在のリクエスト情報のオブジェクト属性を戻し、設定します。このオブジェクトは、特定のトランザクションの間存在する異なるマッピングまたはプラグイン間で、任意の情報を渡すためのメソッドとして使用されます。たとえば、インバウンド操作中に特定の情報を格納して、後でアウトバウンド・リクエストでの処理に使用できます。
エラーが発生した場合に、結果コードを戻して設定します。操作: add、delete、modify
現在の検索範囲を0(ベース)、1(1レベル)または2(サブツリー)で示します。操作: get
サーバーが型のみを戻して値を戻さないかどうかを示します。操作: get