.\" Copyright (c) 1983, 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. .\" .\" From: @(#)rcmd.3 8.1 (Berkeley) 6/4/93 .\" %Id: rcmd.3,v 1.7 1997/02/22 15:00:28 peter Exp % .\" .\" $FreeBSD$ .Dd February 15, 1996 .Dt RCMD 3 .Os BSD 4.2 .Sh 名称 .Nm rcmd , .Nm rresvport , .Nm iruserok , .Nm ruserok .Nd リモートコマンドにストリームを戻すルーチン .Sh 書式 .Fd #include .Ft int .Fn rcmd "char **ahost" "int inport" "const char *locuser" "const char *remuser" "const char *cmd" "int *fd2p" .Ft int .Fn rresvport "int *port" .Ft int .Fn iruserok "u_long raddr" "int superuser" "const char *ruser" "const char *luser" .Ft int .Fn ruserok "const char *rhost" "int superuser" "const char *ruser" "const char *luser" .Sh 解説 .Fn rcmd 関数はスーパユーザが使用するもので、予約されたポート番号に従って認証 スキームを使用してコマンドをリモートマシンで実行します。 .Fn rresvport 関数は、権利があるポートスペースのアドレスとともにソケットの記述子を戻 します。 .Fn ruserok 関数はサーバが使用するもので、 .Fn rcmd を使用してサービスを要求するクライアントを認証します。3つすべての関数 は同じファイルに存在し、 .Xr rshd 8 サーバによって使用されます。 .Pp .Fn rcmd 関数は .Xr gethostbyname 3 を使用してホスト .Fa *ahost を調べ、ホストが存在しない場合は \-1 を戻します。ホストが存在する場合 は、ホストの標準名に .Fa *ahost を設定し、既知のインターネットポート .Fa inport に常駐するサーバとの接続を確立します。 .Pp 接続が確立されると、タイプ .Dv SOCK_STREAM のインターネットドメインのソケットが呼び出し側に戻され、 .Em stdin と .Em stdout としてリモートコマンドに指定されます。 .Fa fd2p が 0以外である場合は、制御プロセスの任意のチャンネルが設定され、その記 述子が .Fa *fd2p に配置されます。制御プロセスは、このチャンネルでコマンド(ユニット 2) から診断出力を戻し、 .Tn UNIX シグナル番号としてこのチャンネルのバイトを受け取り、コマンドのプロセスグルー プに転送します。 .Fa fd2p が 0である場合は、 .Em stderr (リモートコマンドのユニット 2)が .Em stdout と同じように作成されます。任意のシグナルをリモートプロセスに送信する準備は されませんが、バンド外のデータを使用することで注目を得ることはできます。 .Pp プロトコルの詳細については、 .Xr rshd 8 を参照してください。 .Pp .Fn rresvport 関数は、権利があるアドレスが結び付いたソケットを 入手します。このソケットは、 .Fn rcmd やその他の関数での使用に適しています。権利があるインターネットポートは、 0から 1023の範囲にあるものです。この種のアドレスをソケットに結合でき るのはスーパユーザのみです。 .Pp .Fn iruserok 関数と .Fn ruserok 関数は、 .Xr gethostbyname 3 ルーチンが戻すリモートホストの IP アドレスか名前、2つのユーザ名、 ローカルユーザの名前が スーパユーザの名前であるかどうかを示すフラグを 使用します。ユーザがスーパユーザ .Em でない 場合は、 .Pa /etc/hosts.equiv ファイルをチェックします。この検索が実行されない場合、またはこの検索で 問題が発生した場合は、ローカルユーザのホームディレクトリの .Pa .rhosts をチェックし、サービスの要求が許可されているかどうかを確認します。 .Pp このファイルが存在しない場合や通常のファイルでない場合、またはユーザや スーパユーザ以外がこのファイルを所有する場合、あるいは所有者以外がこの ファイルに書き込める場合、チェックは自動的にエラーとなります。 マシン名が .Dq Pa hosts.equiv ファイルにリストされている場合、またはホストと リモートユーザ名が .Dq Pa .rhosts ファイルに存在する場合は 0が戻されます。その 他の場合、 .Fn iruserok と .Fn ruserok は \-1 を戻します。 .Xr gethostname 3 で入手したローカルドメインがリモートドメインと同じである場合は、マシン 名のみを指定する必要があります。 .Pp .Fn iruserok 関数は、セキュリティの理由で高く評価されます。 .Fn ruserok 関数は DNS 全体を信用する必要があり、侵害される可能性がありますが、 .Fn iruserok は最大でもローカル DNS を信頼する必要しかありません。 .Sh 診断 .Fn rcmd 関数は、問題がなければ有効なソケット記述子を戻します。エラーが 発生した場合は \-1 を戻し、診断メッセージを標準エラーに出力します。 .Pp .Fn rresvport 関数は、問題がなければ有効で結合したソケット記述子を戻します。エラーが 発生した場合は \-1 を戻し、エラーの原因に従ってグローバル変数 .Va errno を設定します。「すべてのネットワークポートが使用されている」ことを示す 場合は、エラーコード .Dv EAGAIN がオーバロードされます。 .Sh 関連項目 .Xr rlogin 1 , .Xr rsh 1 , .Xr intro 2 , .Xr rexec 3 , .Xr rexecd 8 , .Xr rlogind 8 , .Xr rshd 8 .Sh 歴史 この関数は、 .Bx 4.2 に追加されました。