第8章 Red Hat Enterprise Linux の Directory Server
Red Hat Enterprise Linux の Directory Server について
このセクションでは、Red Hat Directory Server のメインサーバーコンポーネント( 389-ds-base パッケージ)の変更について説明します。これには、LDAP サーバー自体と、その管理用のコマンドラインユーティリティーとスクリプトが含まれます。このパッケージは、Red Hat Enterprise Linux ベースのサブスクリプションチャネルの一部であるため、依存する Red Hat Identity Management コンポーネントにより、すべての Red Hat Enterprise Linux Server システムで利用できます。
Directory Server
コンソールなどの追加の Red Hat Directory Server
コンポーネントは、rhel-x86_64-server-6-rhdirserv-9
の追加のサブスクリプションチャネルで利用できます。このチャネルのサブスクリプションは、Red Hat Directory Server のサポートを取得する必要もあります。このチャネルの追加コンポーネントへの変更は、このドキュメントでは説明していません。
Red Hat Directory Server バージョン 9 は、Red Hat Enterprise Linux 6 で利用できます。Directory Server 9 を使い始める方法は、https://access.redhat.com/products/red-hat-directory-server/get-started-v9 を、詳細なドキュメントについては https://access.redhat.com/documentation/en/red-hat-directory-server/?version=9 を参照してください。(BZ#1333801)
一部のレプリケーションでスキップされた更新の量が大きくなり、パフォーマンスが低下しなくなりました。
部分的なレプリケーションでスキップされた多数の更新が存在する場合、サプライヤーは長期間レプリカを取得し、セッションの最後にレプリカの更新に失敗する可能性がありました。これにより、次のセッションがスキップされた同じ更新を評価し、パフォーマンスが低下しました。このバグは、レプリケートされる適用可能な変更がない場合でも更新されるシステムサブエントリーを追加することで修正され、問題は発生しなくなります。(BZ#1259383)
retro changelog のトリミング中のクラッシュを修正しました。
retro changelog (
retroCL
)をトリミングする際に、エントリーが最初に changelog 自体から削除され、次にキャッシュからも削除されます。389-ds-base
サーバーは、エントリーがキャッシュに存在することを確認するチェックがありませんでした。これにより、サーバーが存在しないエントリーを削除しようとし、その後すべての変更ログエントリーがキャッシュに適合しないシステムでクラッシュする可能性がありました。キャッシュに存在するエントリーのみが削除され、Retro Changelog のトリミング時にサーバーがクラッシュしないようにするためのチェックが追加されました。(BZ#1244970)
バックエンド追加関数のクラッシュを修正しました。
バックエンド add 関数の
BE_TXN
のコールバックがキャッシュされたエントリーで失敗した場合、関数はキャッシュからエントリーを削除してから解放するのではなく、エントリーを 2 回解放しようとしていました。今回の更新で、バックエンド add 関数に remove および free コードが追加され、この関数はキャッシュされたエントリーを 2 回解放しようとしなくなりました。(BZ#1265851)
存在しない属性の置き換えの試行時に 389-DS-base
サーバーがクラッシュしなくなりました
存在しない属性の置き換え操作が新しい値を提供せずに実行されると、エントリーは誤ったメタデータ(属性の削除状態番号(CSN)なしで空の削除された値)で保存されました。このエントリーはメモリーが破損し、サーバーが予期せず終了する可能性があります。このバグを修正するために、メタデータを格納するための追加の領域が割り当てられ、このシナリオでサーバーがクラッシュしなくなりました。(BZ#1298496)
389-ds-base
は、変更済みのエントリーがロックされているためにハングしなくなりました
変更操作中に、変更されたエントリーはエントリーキャッシュに挿入され、変更されたエントリーが返されるまでロックされます。エントリーがコミットされた後、リターン操作の前にエントリーキャッシュから削除される場合は、以前に変更されたエントリーがロックされ、同じエントリーで後続の書き込み操作はすべてサーバーがハングします。このバグは、フラグを追加することで、エントリーキャッシュにエントリーが存在するかどうかに関係なく、エントリーのロックを解除できるようにすることで修正され、この状況でサーバーがハングしなくなりました。(BZ#1273552)
Directory Server でのバックエンド削除中のデッドロックを修正しました。
以前は、バックエンドの削除中にトランザクション情報がデータベースヘルパー関数のいずれかに渡されませんでした。これにより、プラグインがトランザクションによってロックされた領域内のデータにアクセスしようとすると、デッドロックが発生する可能性がありました。この更新により、トランザクション情報は必要なデータベースヘルパー関数すべてに渡され、上記の状況でデッドロックが発生しなくなりました。(BZ#127858585)
ns-slapd
が、要求が破棄された場合に複数の非同期検索でクラッシュしなくなりました
簡単なページ化された結果検索が永続接続で非同期的に要求され、要求の 1 つが破棄された場合、非同期要求間で競合が発生し、
ns-slapd
サービスがクラッシュする可能性がありました。このバグは修正され、破棄された要求により ns-slapd
がクラッシュしなくなりました。(BZ#1247792)
検索の失敗後に、簡単なページ結果スロットが正しくリリースされるようになりました
以前は、簡単なページ化された結果検索が Directory Server バックエンドで失敗した場合、そのスロットはリリースされず、接続オブジェクトが時間とともにリリースされていないスロットを蓄積していました。この問題は修正され、検索に失敗した場合にスロットが正しくリリースされるようになりました。(BZ#1290243)
検索結果オブジェクトを解放するときに ns-slapd
がクラッシュしなくなりました
以前は、Directory Server が検索結果オブジェクトを解放したときに、解放された情報が
pagedresults
ハンドルに設定されるまでに短い期間がありました。この期間中、paged-results
ハンドルがタイムアウトしたためにリリースされた場合は、二重の空きイベントが発生し、ns-slapd
がクラッシュします。この問題が排除され、検索結果オブジェクトを解放するときに二重無料は発生しません。(BZ#1267296)
非同期でページングされた結果のリクエストでデッドロックを修正
非同期の単純なページ化された要求でデッドロックになった以前の修正により、リグレッションが原因で別の自己デッドロックが発生していました。この問題に対処するために、接続オブジェクトの単純な
PR_Lock
が、再入力された PR_Monitor
に置き換えられました。その結果、デッドロックは発生しなくなります。(BZ#1296694)
マスターサーバーに値のない属性の削除が正しく複製されるようになりました。
以前は、マスターサーバーに値を持たない属性が削除されても、削除は他のサーバーに複製されませんでした。このバグの原因となったリグレッションが修正され、変更が期待どおりに複製されるようになりました。(BZ#1251288)
Directory Server が誤った attrlist_replace
エラーをログに記録しなくなりました。
以前は、Directory Server は、エラーでログ
attrlist_replace
エラーメッセージを繰り返すことがありました。この問題は、誤ったメモリーコピー関数が使用されているためにメモリーの破損が原因で発生しました。メモリーコピー関数は memmove
に置き換えられました。これにより、このケースのメモリー破損を回避し、サーバーはこれらのエラーメッセージを記録しなくなりました。(BZ#1267405)
cleanallruv
は changelog を完全に消去するようになりました。
以前は、
cleanAllRUV
タスクが終了した後、changelog に消去された rid
からのエントリーが含まれていました。そのため、RUV に望ましくないデータが含まれ、RUV 要素にレプリカ URL が欠落している可能性がありました。cleanAllRUV
は期待どおりに changelog を完全にクリーニングするようになりました。(BZ#1270002)
追加の更新後にレプリケーションの失敗によって変更が欠落していることがなくなりました。
以前は、レプリケートされた更新がコンシューマー側で失敗した場合、レプリケーション非同期結果スレッドのバグが原因で、再試行されませんでした。これにより、別の更新が正常にレプリケートされる前に失敗を見逃していました。2 つ目の更新では、コンシューマーレプリカ更新ベクトル(RUV)も更新され、最初の(失敗した)更新が失われました。このリリースでは、レプリケーションの失敗により接続が閉じられ、それ以降の更新がコンシューマー RUV を更新しないようにします。これにより、サプライヤーは次のレプリケーションセッションで操作を再試行できます。したがって、更新が失われることはありません。(BZ#1294770)
不要な キープアライブ
エントリーが原因でレプリケーションが欠落していることがなくなりました
以前は、レプリケーション中に
キープアライブ
エントリーが作成されすぎたため、レプリカの変更ログにエントリーを追加するときに競合状態が発生し、レプリケーションから操作がドロップされる可能性がありました。今回の更新により、不要な キープアライブ
エントリーの作成が削除され、レプリケーションが欠落していることは発生しなくなります。(BZ#1307152)
nsMatchingRule
が属性情報に正しく適用されるようになりました
以前は、
nsMatchingRule
がインデックスエントリーで動的に更新されると、値は属性情報に適用されていませんでした。これにより、dbverify
ユーティリティーがデータベース破損のエラーを報告していました。このリリースでは、nsMatchingRule
の変更が属性情報に正しく適用され、dbverify
はデータベースの破損を誤って報告しなくなりました。(BZ#1236656)
Tombstone エントリーで不要なインデックスエントリーが作成されなくなる
エントリーが削除されると、そのインデックス化された属性値も各インデックスファイルから削除されます。ただし、エントリーが tombstone エントリーに変換されると、削除済みの属性値がインデックスに戻されました。このバグは修正され、インデックスファイルには tombstone エントリーによって生成される不要なキーと値のペアが含まれなくなりました。(BZ#1255290)
同じ属性の一部の値が削除されるとインデックスが適切に更新されるようになりました
以前は、ldapmodify コマンドを使用して同じ属性の値が複数削除され、少なくとも 1 つが同じ操作で再度追加された場合、等価インデックスは更新されませんでした。その結果、再追加された属性値の正確な検索はエントリーを返しませんでした。エントリーの値のいずれかが変更され、再追加された属性値の正確な検索が正しいエントリーを返すようになりました。インデックスコードのロジックが変更され、インデックスを更新するようになりました。(BZ#1282457)
COS キャッシュがすべての定義を正しく追加するようになりました
Class of Service (COS)オブジェクトキャッシュに関連する以前のバグ修正によりリグレッションが導入され、すべての定義を追加するのではなく、最初の定義の後に定義の追加を停止しました。この問題は修正され、COS キャッシュは設計どおりにすべての定義を正しく追加するようになりました。(BZ#1259546)
ACL パフォーマンスの改善
以前は、Directory Server のアクセス制御リスト(ACL)実装で不必要な複雑な正規表現が使用されていました。これらの正規表現が削除され、ACL 実装が再開され、パフォーマンスが向上しました。(BZ#1236156)
ntUserLastLogon
属性と ntUserlastLogoff
属性が Directory Server と Active Directory の間で同期されるようになりました
以前は、
WinSync
アカウントの同期は、Active Directory との同期時に、Directory Server の ntUserlastLogon
属性と ntUserlastLogoff
属性を更新できませんでした。このバグは修正され、これらの属性は Active Directory の lastLogonTimestamp
属性と lastLogoffTimestamp
属性に基づいて正しく更新されるようになりました。(BZ#1245237)