__login()、__login_applid() — プロセス用の新しいセキュリティー環境の 作成

標準

標準/拡張機能 C/C++ 依存項目
z/OS®UNIX 両方 OS/390 V2R6

形式

#define  _OPEN_SYS
#include <unistd.h>

int __login(int   function_code,
            int   identity_type,
            int   identity_length,
            void  *identity,
            int   pass_length,
            char  *pass,
            int   certificate_length,
            char  *certificate,
            int   option_flags);

int __login_applid(int function_code,
				int identity_type,
				int identity_length,
				void *identity,
				int pass_length,
				char *pass,
				int certificate_length,
				char *certificate,
				int option_flags,
				const char *applid);

機能説明

__login() 関数は、プロセスがその識別を変更する方法を提供します。プロセスはアドレス・スペース識別とは別の識別を持つことになり、プロセスの 新しいセキュリティー環境が作成されます。プロセスが変更されたあとは、以前の識別およびセキュリティー環境に戻りません。 次の規則が適用されます。
  • 単一スレッド・プロセスは、__login を発行して、そのセキュリティー環境を変更 できます。
  • プロセスがマルチプロセッシング環境またはマルチユーザー環境にあって、 プロセスに関連付けられたタスク・レベルのセキュリティーがない場合は、 新しいセキュリティー環境がプロセスに関連付けられます。
  • プロセスがマルチプロセッシング環境またはマルチユーザー環境にあって、 プロセスに関連付けられたタスク・レベルのセキュリティーがある場合、 古いセキュリティー環境が新しいセキュリティー環境で置き換えられます。

__login_applid() 関数は、__login() と等価の 機能に加えて、アプリケーション ID (APPLID) の 指定も可能にする機能があります (アプリケーション ID はセキュリティー製品に渡されて 認証を支援します)。これは、例えば、パスチケットが提供されていて、 パスチケットが USERID/APPLID の組み合わせで作成されたような状況で有用です。 applid が NULL であるか、NULL を指すポインターである場合、セキュリティー製品 にアプリケーション ID は渡されません。

この関数は、以下のパラメーターをとります。
パラメーター
説明
function_code
関数を指定します。unistd.h ヘッダー・ファイル内で定義されている __LOGIN_CREATE を指定して、呼び出し元プロセス用のプロセス・レベルの セキュリティー環境を作成します。
identity_type
*identity で提供されているユーザー識別の形式を指定します。 unistd.h ヘッダー・ファイルで定義されている __LOGIN_USERID を 指定します。ユーザー ID 識別は 1 ~ 8 文字のユーザー ID 形式であり、入力として 渡されます。
identity_length
identity_type で定義されている identity の 長さを指定します。
*identity
identity_type で定義されているユーザー識別を指定します。
pass_length
pass で定義されるパスワード、 パスチケット、またはパスワード・フレーズの長さを指定します。
*pass
ユーザー・パスワード、パスチケット、またはパスワード・フレーズを 指定します。
certificate_length
現在は使用されないため、ゼロに設定する必要があります。
certificate
現在は使用されないため、ボイドを指す必要があります。
option_flags
要求を調整する場合に使用するオプションを指定します。0 に設定する 必要があります。
applid
セキュリティー製品での認証に使用されるアプリケーション ID を 指定します。

使用上の注意

  1. __login() サービスの意図するところは、アドレス・スペース識別とは 別のものになるように、プロセスにその識別を変更する方法を提供する ことです。プロセスは終了するか新しいユーザー ID を選択しますが、元の識別には戻りません。ユーザーは 元のユーザー ID を使って __login() を再発行することはできますが、タスクはそれ自身のセキュリティー環境を保持し、アドレス・スペース・レベルで セキュリティー環境を共用しません。
  2. マルチプロセッシング環境またはマルチユーザー環境をサポートするセキュリティー製品 がインストールされ、作動可能になっている必要があります。

戻り値

正常に実行された場合、__login() は 0 を戻します。

正常に実行されなかった場合、__login() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EACCES
許可が拒否されました。
EINVAL
パラメーターが無効です。例えば、applid の長さが 8 バイトを超えています。
EMVSERR
MVS™ 環境エラーまたは内部エラーが発生しました。
EMVSEXPIRE
指定したリソースのパスワード、パスチケット、またはパスワード・フレーズの 有効期限が切れています。
EMVSSAF2ERR
セキュリティー・プロダクトでエラーが発生しました。ユーザー ID が取り消されているか、またはこのアプリケーションを 使用することができません。
ENOSYS
関数がインプリメントされていません。
EPERM
操作が許可されていません。呼び出しプロセスに BPX.DAEMON 機能クラスの許可がない可能性があります。この関数は、非制御ライブラリーからロードされるアドレス・スペースでは サポートされていません。必要なパスワードまたはパスチケット、あるいはパスワード・フレーズが 指定されていませんでした。
ESRCH
この USERID を OMVS プロセスにすることはできません。指定された ユーザー ID は、セキュリティー製品に定義されていないか、OMVS セグメントが定義されていません。

関連情報