pwdrestrict_method サブルーチン
目的
ロード可能なパスワード制限方式を定義します。
ライブラリー
構文
int pwdrestrict_method (UserName, NewPassword, OldPassword, Message)
char * UserName;
char * NewPassword;
char * OldPassword;
char ** Message;説明
pwdrestrict_method サブルーチンは、パスワード制限ソフトウェアの機能を拡張し、システム・ソフトウェアによって提供されていないパスワード制限を管理者が実施できるようにします。
ユーザーがパスワードを変更するたびに、システム・ソフトウェアはそのユーザーに定義されている pwdchecks 属性をスキャンして、サイト固有の制限を探します。 この属性フィールドにはロード・モジュール・ファイル名 (メソッドなど) が含まれる可能性があるため、管理者は、サイト固有のパスワード制限を適用するコードを作成してインストールすることができます。
システムは、 pwdchecks 属性の値フィールドを左から右の順序で評価します。 システムが検出するメソッドごとに、システムはそのメソッドをロードして呼び出します。 システムは load サブルーチンを使用してメソッドをロードします。 これは、 Flags 値 1 および LibraryPath 値 /usr/libを指定して load サブルーチンを呼び出します。 メソッドがロードされると、システムはメソッドを呼び出します。
ロード可能モジュールを作成するには、 ld コマンドの -e フラグを使用します。 構文で指定される名前 pwdrestrict_method は総称名であることに注意してください。 実際のサブルーチン名は、 main以外の任意の名前 (コンパイラーの名前空間内) にすることができます。 重要なことは、どの名前を選択しても、その名前を ld コマンドに通知して、 load サブルーチンがその名前をモジュールへのエントリー・ポイントとして使用できるようにする必要があるということです。 次の例では、C コンパイラーは pwdrestrict.c ファイルをコンパイルし、 -e pwdrestrict_method を ld コマンドに渡して、 pwdrestrictというメソッドを作成します。
cc -e pwdrestrict_method -o pwdrestrict pwdrestrict.cすべてのパスワード制限方式の規則は、呼び出しサブルーチンにメッセージを戻すことです。 メッセージを STDOUT または STDERR に出力しません。 この機能により、パスワード制限ソフトウェアは、stdout および stderr が無効なネットワーク接続を介して機能することができます。 メッセージは、動的に割り振られたメモリー内で呼び出し側プログラムに返される必要があることに注意してください。 呼び出し側プログラムは、メモリーの使用が完了すると、メモリーの割り振りを解除します。
ロード可能サブルーチン・モジュールには、以下のような多くの注意事項があります。
- NewPassword および OldPassword の値は、ユーザーが入力した実際の平文パスワードです。 これらのパスワードをメモリーの他の部分にコピーする場合は、呼び出し側プログラムに戻る前に、それらのメモリー位置をクリアしてください。 これにより、平文パスワードがコア・ダンプに表示されないようにすることができます。 また、これらのパスワードをファイルにコピーしたり、他のプログラムがアクセスできる場所にコピーしたりしないでください。 平文パスワードは、プロセス・スペースの外部に存在してはなりません。
- プロセスのシグナル・ハンドラーの現在の設定は変更しないでください。
- プログラムの実行を終了させる関数 (例えば、 exit サブルーチン、 exec サブルーチンなど) は呼び出さないでください。 常に呼び出し側プログラムに戻ります。
- コードはスレッド・セーフでなければなりません。
- 実際のロード・モジュールは、書き込み保護環境に保持する必要があります。 ロード・モジュールおよびディレクトリーは、root ユーザーのみが書き込み可能にする必要があります。
最後に、サイト固有のメソッドが呼び出される前に、すべての標準パスワード制限が実行されます。 したがって、メソッドは、システムによって強制される最後の制約事項です。
パラメーター
| 項目 | 説明 |
|---|---|
| UserName | 「ローカル」ユーザー名を指定します。 |
| NewPassword | 新規パスワードを平文で指定します (暗号化されません)。この値は NULL ポインターである可能性があります。 平文パスワードは常に 7 ビット ASCII です。 |
| OldPassword | 現在のパスワードを平文で指定します (暗号化されていません)。この値は NULL ポインターである可能性があります。 平文パスワードは常に 7 ビット ASCII です。 |
| Message | NLS エラー・メッセージを含む mallocされたメモリーへのポインターのアドレスを指定します。 メソッドは、 mallocされたメモリーとメッセージを提供する必要があります。 |
戻り値
このメソッドは、以下の値を返すことが予期されています。 戻り値は、優先順位に従ってリストされます。
| 項目 | 説明 |
|---|---|
| -1 | 内部エラー。 メソッドはパスワード評価を実行できませんでした。 メソッドは errno 変数を設定する必要があります。 メソッドは、メッセージにメモリーを割り振ることができない場合を除き、 「メッセージ」 にエラー・メッセージを提供する必要があります。 メモリーを割り振ることができない場合は、 Messageで NULL ポインターを返す必要があります。 |
| 1 | 失敗。 パスワードの変更が制限の要件を満たしていませんでした。 パスワード制限が正しく評価され、パスワード変更が受け入れられませんでした。 メソッドは、 Messageにエラー・メッセージを提供する必要があります。 errno 変数は無視されます。 コンポジションの失敗は累積されるため、失敗条件が返されても、末尾のコンポジション・メソッドが呼び出されることに注意してください。 |
| 0 | 成功。 パスワードの変更が制限の要件を満たしています。 必要であれば、メソッドは Messageにメッセージを提供することができます。それ以外の場合は、NULL ポインターを戻します。 errno 変数は無視されます。 |