.\" 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 .\" %FreeBSD: src/lib/libc/net/rcmd.3,v 1.12.2.8 2001/12/14 18:33:55 ru Exp % .\" $FreeBSD$ .\" .Dd March 3, 2000 .Dt RCMD 3 .Os .Sh 名称 .Nm rcmd , .Nm rresvport , .Nm iruserok , .Nm ruserok , .Nm rcmd_af , .Nm rresvport_af , .Nm iruserok_sa .Nd リモートコマンドにストリームを返すルーチン .Sh ライブラリ .Lb libc .Sh 書式 .In unistd.h .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" .Ft int .Fn rcmd_af "char **ahost" "int inport" "const char *locuser" "const char *remuser" "const char *cmd" "int *fd2p" "int af" .Ft int .Fn rresvport_af "int *port" "int af" .Ft int .Fn iruserok_sa "const void *addr" "int addrlen" "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 を信頼する必要しかありません。 .Pp .Dq Li _af や .Dq Li _sa といった接尾辞のついた関数、たとえば .Fn rcmd_af , .Fn rresvport_af や .Fn iruserok_sa などは、IPv6 と IPv4 ポートを扱えることを除いて、 対応する接尾辞のない関数と同じ動作をします。 .Pp .Dq Li _af 接尾辞は、アドレスファミリ (下記参照) を指定するために使われる .Fa af 引数が加わっていることを意味しています。 .Fa af 引数の拡張は、バイナリアドレス引数を持たない関数に対して実装されています。 バイナリアドレスの代わりに .Fa af 引数はどのアドレスファミリが必要かを指定します。 .Pp .Dq Li _sa 接尾辞は、関数が汎用ソケットアドレスと長さを 引数に持っていることを意味しています。 ソケットアドレスはプロトコルに依存しないデータ構造なので、 必要に応じて IPv4 と IPv6 のソケットアドレスを渡すことができます。 .Fa sa 引数の拡張は、プロトコルに依存したバイナリアドレス引数を渡す関数に対して 実装されています。 引数は、汎用的な方法でいくつものアドレスファミリをサポートするように、 更に汎用的なアドレス構造に置き換えられる必要があります。 .Pp .Dq Li _af 接尾辞も .Dq Li _sa 接尾辞もついていない関数は、IPv6 と IPv4 の両方とも扱える .Fn ruserok 関数を除いて、IPv4 のみで動作します。 アドレスファミリを切替えるには、 .Fa af 引数に .Dv AF_INET もしくは .Dv AF_INET6 を設定しなければなりません。 .Fn rcmd_af に対しては、 .Dv PF_UNSPEC も許されます。 .Sh 診断 成功した場合、 .Fn rcmd 関数は有効なソケット記述子を返します。 エラーが発生した場合は -1 を返し、診断メッセージを標準エラーに出力します。 .Pp 成功した場合、 .Fn rresvport 関数は有効で結合したソケット記述子を返します。 エラーが発生した場合は -1 を返し、エラーの原因に従ってグローバル変数 .Va errno が設定されます。 「すべてのネットワークポートが使用されている」ことを示す場合は、 エラーコード .Er EAGAIN がオーバロードされます。 .Sh 関連項目 .Xr rlogin 1 , .Xr rsh 1 , .Xr intro 2 , .Xr rexec 3 , .Xr rexecd 8 , .Xr rlogind 8 , .Xr rshd 8 .Pp .Rs .%A W. Stevens .%A M. Thomas .%T "Advanced Socket API for IPv6" .%O RFC2292 .Re .Rs .%A W. Stevens .%A M. Thomas .%A E. Nordmark .%T "Advanced Socket API for IPv6" .%O draft-ietf-ipngwg-rfc2292bis-01.txt .Re .Sh 歴史 これらのほとんどの関数は、 .Bx 4.2 で登場しました。 .Fn rresvport_af は RFC2292 で登場し、 Hydrangea IPv6 プロトコルスタックキットのために WIDE プロジェクトによって実装されました。 .Fn rcmd_af は draft-ietf-ipngwg-rfc2292bis-01.txt で登場し、 WIDE/KAME IPv6 プロトコルスタックキットで実装されました。 .Fn iruserok_sa は IETF の ipngwg メーリングリストの議論で登場し、 .Fx 4.0 で実装されました。