aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man2/getlogin.2
blob: 9b34a450d0c1b1d463818a43dd213d5e7264c3e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
.\" Copyright (c) 1989, 1991, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"	@(#)getlogin.2	8.1 (Berkeley) 6/9/93
.\" %FreeBSD: src/lib/libc/sys/getlogin.2,v 1.14.2.5 2001/08/31 10:15:15 ru Exp %
.\"
.\" $FreeBSD: doc/ja_JP.eucJP/man/man2/getlogin.2,v 1.5 2001/08/19 07:14:26 horikawa Exp $
.Dd June 9, 1993
.Dt GETLOGIN 2
.Os
.Sh 名称
.Nm getlogin ,
.Nm getlogin_r ,
.Nm setlogin
.Nd ログイン名を取得 / 設定
.Sh ライブラリ
.Lb libc
.Sh 書式
.Fd #include <unistd.h>
.Ft char *
.Fn getlogin void
.Fd #include <sys/param.h>
.Ft int
.Fn getlogin_r "char *name" "int len"
.Ft int
.Fn setlogin "const char *name"
.Sh 解説
.Fn getlogin
ルーチンは、
.Fn setlogin
で設定した現在のセッションに対応する
ユーザのログイン名を返します。
通常、名前はセッションが作成された時点でログインシェルに対応し、
ログインシェルから派生する全てのプロセスに継承されます
(これらのプロセスが別のユーザ ID を想定している場合、たとえば、
.Xr su 1
が使用されるときでも該当します)。
.Pp
.Fn getlogin_r
は
.Fn getlogin
と同様のサービスを提供しますが、
呼び出し側は結果を保持するための長さ
.Fa len
バイトのバッファ
.Fa name
を用意しなければなりません。バッファは少なくとも
.Dv MAXLOGNAME
バイトの長さがあるべきです。
.Pp
.Fn setlogin
は、現在のセッションに対応するユーザのログイン名を
.Fa name
に対応させます。
この呼び出しはスーパユーザに制限されており、
新しいセッションがユーザのために
作成されるときにだけ使用されるのが普通です
(たとえば、ログイン時、またはリモートシェルが
起動されるときです)。
.Pp
.Em 注釈 :
セッションごとに 1 つのログイン名しかありません。
.Pp
プロセスが、確実に親のセッションから切り離されるような
適切なステップを取った後にのみ、
.Fn setlogin
が呼び出されるようにすることは
.Em 非常に
重要です。
.Fn setsid
システムコール
を行なうのがこれをする
.Em 唯一の
方法です。
.Fn daemon
ライブラリは
.Fn setsid
を呼び出しますが、これは制御端末を切り離して
フォークでバックグラウンドに入る理想的な方法です。
.Pp
特に、
.Fn ioctl ttyfd TIOCNOTTY ...\&
または
.Fn setpgrp ...\&
では十分では
.Em ありません。
.Pp
親プロセスがいったん
.Fn setsid
呼び出しを行なえば、セッションリーダでない
そのプロセスの子が
.Fn setlogin
を行なうことも受け入れられますが、親を含めてセッション内のすべての
プロセスが同時にログイン名を変更されることに注意してください。
.Pp
これは特権を継承する従来の UNIX の動作と同じではありません。
.Pp
.Fn setlogin
システムコールはスーパユーザに制限されているので、セキュリティ侵犯を
防止するために (他の特権のあるすべてのプログラムと同じように)
プログラマが適切な注意を払うものだと仮定しています。
.Sh 戻り値
.Fn getlogin
の呼び出しが成功すると、静的バッファ内のヌルで終端された文字列への
ポインタが返されます。
名前が設定されていない場合は、
.Dv NULL
が返されます。
.Fn getlogin_r
の呼び出しが成功すると、0 が返されます。失敗するとエラー番号
が返されます。
.Pp
.Fn setlogin
の呼び出しが成功すると
値 0 が返されます。
.Fn setlogin
が処理を失敗すると値 -1 が返され、エラーコードがグローバル変数
.Va errno
に設定されます。
.Sh エラー
これらの呼び出しによって以下のエラーが返される可能性があります。
.Bl -tag -width Er
.It Bq Er EFAULT
.Fa name
パラメータで無効なアドレスを与えました。
.It Bq Er EINVAL
.Fa name
パラメータが長すぎる文字列を指しています。ログイン名は
.Pf ( Ao Pa sys/param.h Ac の )
.Dv MAXLOGNAME
文字までに制限されます。現時点ではヌルを含めて 17 文字です。
.It Bq Er EPERM
ログイン名を設定しようとした呼び出し元が
スーパユーザではありませんでした。
.It Bq Er ERANGE
返される結果よりバッファのサイズが小さすぎます。
.El
.Sh 関連項目
.Xr setsid 2 ,
.Xr daemon 3
.Sh バグ
システムの以前のバージョンでは、
.Fn getlogin
はプロセスがログイン端末に対応していない限り
処理に失敗しました。現在では、
.Pf ( Fn setlogin
を使用して) プロセスに制御端末がないときでも
getlogin は正常に完了します。初期のバージョンでは、
.Fn getlogin
が返す値はユーザ ID をチェックせずには
信頼することができませんでした。
移植性の高いプログラムはおそらくまだこのチェックを行なっているはずです。
.Sh 歴史
.Fn getlogin
関数は
.Bx 4.4
ではじめて登場しました。
.Fn getlogin_r
の戻り値は
.St -p1003.1-96
に準拠するために
.Fx
の初期のバージョンから変更されました。
.Sh 規格
.Fn getlogin
と
.Fn getlogin_r
は
.St -p1003.1-96
に準拠しています。