GETLOGIN
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
getlogin
getlogin_r
setlogin
- ログイン名を取得 / 設定する
索引
ライブラリ
Lb libc
索引
書式
In unistd.h
Ft char *
Fn getlogin void
In sys/param.h
Ft int
Fn getlogin_r char *name int len
Ft int
Fn setlogin const char *name
索引
解説
Fn getlogin
ルーチンは、
Fn setlogin
で設定した現在のセッションに対応するユーザのログイン名を返します。
通常、名前はセッションが作成された時点でログインシェルに対応し、
ログインシェルから派生する全てのプロセスに継承されます
(これらのプロセスが別のユーザ ID を想定している場合、たとえば、
su(1)
が使用されるときでも該当します)。
Fn getlogin_r
関数は
Fn getlogin
と同様のサービスを提供しますが、呼び出し側は結果を保持するための長さ
Fa len
バイトのバッファ
Fa name
を用意しなければなりません。
バッファは少なくとも
MAXLOGNAME
バイトの長さがあるべきです。
Fn setlogin
システムコールは、現在のセッションに対応するユーザのログイン名を
Fa name
に対応させます。
このシステムコールはスーパユーザに制限されており、
新しいセッションがユーザのために
作成されるときにだけ使用されるのが普通です
(たとえば、ログイン時、またはリモートシェルが起動されるときです)。
注釈
セッションごとに 1 つのログイン名しかありません。
プロセスが、確実に親のセッションから切り離されるような
適切なステップを取った後にのみ、
Fn setlogin
が呼び出されるようにすることは
非常に
重要です。
Fn setsid
システムコールを行うのがこれをする
唯一の
方法です。
daemon(3)
関数は
Fn setsid
を呼び出しますが、これは制御端末を切り離して
フォークでバックグラウンドに入る理想的な方法です。
特に、
Fn ioctl ttyfd TIOCNOTTY ...
または
Fn setpgrp ...
では十分では
ありません。
親プロセスがいったん
Fn setsid
システムコールを行えば、セッションリーダでないそのプロセスの子が
Fn setlogin
を行うことも受け入れられますが、親を含めてセッション内のすべての
プロセスが同時にログイン名を変更されることに注意してください。
これは特権を継承する従来の UNIX の動作と同じではありません。
Fn setlogin
システムコールはスーパユーザに制限されているので、セキュリティ侵犯を
防止するために (他の特権のあるすべてのプログラムと同じように)
プログラマが適切な注意を払うものだと仮定しています。
索引
戻り値
Fn getlogin
の呼び出しが成功すると、静的バッファ内のヌル文字で終わる文字列への
ポインタが返されます。
名前が設定されていない場合は、
NULL
が返されます。
Fn getlogin_r
関数の呼び出しが成功すると、0 が返されます。
失敗するとエラー番号が返されます。
Rv -std setlogin
索引
エラー
これらの呼び出しによって以下のエラーが返される可能性があります:
- Bq Er EFAULT
-
Fa name
引数が無効なアドレスを与えました。
- Bq Er EINVAL
-
Fa name
引数が長すぎる文字列を指しています。
ログイン名は
In ( sys/param.h
の)
MAXLOGNAME
文字までに制限されます。
現時点ではヌルを含めて 17 文字です。
- Bq Er EPERM
-
ログイン名を設定しようとした呼び出し元が
スーパユーザではありませんでした。
- Bq Er ERANGE
-
返される結果よりバッファのサイズが小さすぎます。
索引
関連項目
setsid(2),
daemon(3)
索引
バグ
システムの以前のバージョンでは、
Fn getlogin
はプロセスがログイン端末に対応していない限り処理に失敗しました。
現在では、
( Fn setlogin
を使用して) プロセスに制御端末がないときでも getlogin は正常に完了します。
初期のバージョンでは、
Fn getlogin
が返す値はユーザ ID をチェックせずには信頼することができませんでした。
移植性の高いプログラムはおそらくまだこのチェックを行っているはずです。
索引
歴史
Fn getlogin
システムコールは
BSD 4.4
ではじめて登場しました。
Fn getlogin_r
の戻り値は
St -p1003.1-96
に適合するために
Fx の初期のバージョンから変更されました。
索引
規格
Fn getlogin
システムコールと
Fn getlogin_r
関数は
St -p1003.1-96
に適合しています。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- バグ
-
- 歴史
-
- 規格
-
Time: 07:06:26 GMT, January 12, 2009