総合手引 | セクション 2 | English | オプション |
#include <unistd.h>
#include <sys/param.h>
getlogin_r() 関数は getlogin() と同様のサービスを提供しますが、呼び出し側は結果を保持するための長さ len バイトのバッファ name を用意しなければなりません。 バッファは少なくとも MAXLOGNAME バイトの長さがあるべきです。
setlogin() システムコールは、現在のセッションに対応するユーザのログイン名を name に対応させます。 このシステムコールはスーパユーザに制限されており、 新しいセッションがユーザのために 作成されるときにだけ使用されるのが普通です (たとえば、ログイン時、またはリモートシェルが起動されるときです)。
注釈: セッションごとに 1 つのログイン名しかありません。
プロセスが、確実に親のセッションから切り離されるような 適切なステップを取った後にのみ、 setlogin() が呼び出されるようにすることは 非常に 重要です。 setsid() システムコールを行うのがこれをする 唯一の 方法です。 daemon(3) 関数は setsid() を呼び出しますが、これは制御端末を切り離して フォークでバックグラウンドに入る理想的な方法です。
特に、 ioctl(ttyfd, TIOCNOTTY, ...amp;) または setpgrp(...amp;) では十分では ありません。
親プロセスがいったん setsid() システムコールを行えば、セッションリーダでないそのプロセスの子が setlogin() を行うことも受け入れられますが、親を含めてセッション内のすべての プロセスが同時にログイン名を変更されることに注意してください。
これは特権を継承する従来の UNIX の動作と同じではありません。
setlogin() システムコールはスーパユーザに制限されているので、セキュリティ侵犯を 防止するために (他の特権のあるすべてのプログラムと同じように) プログラマが適切な注意を払うものだと仮定しています。
The setlogin function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
[EFAULT] | |
name 引数が無効なアドレスを与えました。 | |
[EINVAL] | |
name 引数が長すぎる文字列を指しています。 ログイン名は <(> の) MAXLOGNAME 文字までに制限されます。 現時点ではヌルを含めて 17 文字です。 | |
[EPERM] | |
ログイン名を設定しようとした呼び出し元が スーパユーザではありませんでした。 | |
[ERANGE] | |
返される結果よりバッファのサイズが小さすぎます。 | |
GETLOGIN (2) | June 9, 1993 |
総合手引 | セクション 2 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | If you have an emergency I'm great at running around and flailing my arms | ” |
— Artur Bagyants |