SKEY(3)

名称
skeylookup, skeyverify, skeychallenge, skeyinfo, skeyaccess, skey_getpass, skey_crypt - S/Key パスワード制御テーブルアクセス用のライブラリルーチン

書式
#include <stdio.h> #include <skey.h> int skeylookup(struct skey *mp, const char *name) int skeyverify(struct skey *mp, char *response) int skeychallenge(struct skey *mp, const char *name, char *challenge) int skeyinfo(struct skey *mp, const char *name, char *ss) int skeyaccess(char *user, const char *port, const char *host, const char *addr) char * skey_getpass(const char *prompt, struct passwd *pwd, int pwok) char * skey_crypt(char *pp, char *salt, struct passwd *pwd, int pwok)

解説
これらのルーチンは、コンピュータシステムへのアクセスに使用される S/Key 一時パスワードシステムをサポートします。 S/Key システム自体についての詳細は、 skey(1) を参照してください。

skeylookup() は、一時のパスワードデータベースでエントリを検出します。 処理が成功すると(指定の名前に対応するエントリが検出されると)、 呼び出し元によって渡された skey 構造が埋められ 0 が返されます。 ファイルの読み取り/書き込みポインタは検出されたレコードの先頭に配置されます。 指定の名前に対応するエントリが見つからない場合は、 ファイルの読み取り/書き込みポインタがファイルの末尾に配置され、 ルーチンは 1 を返します。 データベースが開けない場合、またはアクセスエラーが発生する場合、 skeylookup() は -1 を返します。

skeyinfo() 関数は、ユーザ「名」用の skey 情報をルックアップします。 処理が成功すると、呼び出し元の skey 構造が埋められ、 skeyinfo() は 0 を返します。 オプションのチャレンジストリングバッファが与えられた場合は、それが更新されます。 処理が失敗すると(たとえば、名前が未知の場合、または データベースにアクセスできない場合)、-1 が返されます。

skeychallenge() は、「名前」についての skey チャレンジストリングを返します。 処理が成功すると、呼び出し元の skey 構造が埋められ、関数は 0 を 返します。ファイル読み取り/書き込みポインタは レコードの先頭に残されます。 処理が成功しないと(すなわち、名前が見つからないと)、関数は -1 を返し、データベースは閉じられます。

skeyverify() は、s/key チャレンジへの応答を検証します。 この関数が 0 を返した場合、検証は成功であり、 データベースはアップデートされています。 1 が返された場合、検証は処理失敗し、データベースは変化しないままです。 -1 が返された場合、何らかの種類のエラーがデータベースについて発生しており、 データベースは変化しないままです。 s/key データベースは必ずこの呼び出しによって閉じられます。

skey_getpass() 関数を使用して、正規のパスワードまたは s/key パスワードを 読み取ることができます。 使用するプロンプトは、関数に渡されます。ユーザが 検証できる完全な(安全な) struct passwd と一緒にです。 skey_getpass() は、ユーザのパスワードを取り出そうとする最初の試みにおいて標準ライブラリ getpass を使用し、それがブランクの場合、エコーバックして S/Key パスワード を取り出します。 いずれの場合でも、入力したストリングは呼び出し元に 返されます。

skey_crypt() は、標準ライブラリ crypt(3) 用のラッパー関数です。 これは、指定の s/key パスワードまたは正規のパスワードのどちらかが OK の場合、暗号化された UNIX パスワードを返します。 skey_crypt() は、最初に skey 方式によって指定パスワードの確認を試み、 それが確認できる場合は、ユーザが正しい UNIX パスワードを実際に 入力したかのように、passwd 構造から暗号化されたパスワードを返します。 s/key パスワード検証が機能しない場合、 パスワードは通常の方法で暗号化され、結果は呼び出し元に渡されます。 passwd 構造ポインタが NULL の場合、 skey_crypt() は、NULL でないストリングを返します。このストリングは有効な UNIX パスワードとは言えません(すなわち、「:」の入ったストリングです)。

skeyaccess() 関数は、ユーザ名、グループメンバ、端末ポート、ホスト名、および ネットワークの組み合わせについて、従来の UNIX (S/Key でない) パスワードが使用できるかどうかを判定します。UNIX パスワードが使用できる場合、 skeyaccess() は、ゼロでない値を返します。UNIX パスワードが使用できない場合、 0 を返します。 この関数が使用する skey.access 構成ファイルのレイアウトと構造の詳細については、 skey.access(5) を参照してください。

戻り値
上記を参照。

関連項目
skey(1), skey.access(5)

バグ
複数のプロセスからの同時アクセスを防止するために s/key データベースについては助言のロックは行われません。 これはファイル内でキーが追加または更新されるときは、通常、 問題ではありませんが、キーが除去されるときは問題がある可能性があります。

作者
Phil Karn, Neil M. Haller, John S. Walden, Scott Chasin