rcmd

Autres langues

Langue: ja

Version: 98342 (fedora - 25/11/07)

Section: 3 (Bibliothèques de fonctions)


BSD mandoc
4.2BSD

名前

rcmd rresvport iruserok ruserok - リモートコマンドにストリームを返す関数群

書式

Fd #include <netdb.h>   /* Or <unistd.h> on some systems */ 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_int32_t raddr int superuser const char *ruser const char *luser Ft int Fn ruserok const char *rhost int superuser const char *ruser const char *luser

説明

Fn rcmd 関数は、スーパーユーザーがリモートマシンでコマンドを実行するために 用いられる。このとき特権ポート番号をもとにした認証スキームが 用いられる。 Fn rresvport 関数は、特権ポート空間のアドレスを持つソケットの ディスクリプターを返す。 Fn iruserok 関数と Fn ruserok 関数は、 Fn rcmd でサービス要求を行ったクライアントの認証を行うために サーバーが用いる関数である。 以上の 4 つの関数は、すべて同じファイルに記述されており、 rshd(8) サーバーによって (他の関数とともに) 利用される。

Fn rcmd 関数は gethostbyname(3) を用いて Fa *ahost の参照を行う。ホストが存在しない場合は -1 を返す。 見つかった場合は Fa *ahost にホストの標準名 (standard name) をセットして、 予約されているインターネットポート Fa inport 経由でサーバーへの接続を確立する。

接続に成功したら、インターネットドメインに存在するタイプ SOCK_STREAM のソケットが呼び出しもとに返される。 このソケットの相手側はリモートコマンドの stdin および stdout に接続される。 Fa fd2p がゼロでない場合は、制御プロセスへの接続がもう一つ用意され、 そのディスクリプターが Fa *fd2p にセットされる。 制御プロセスはリモートコマンドからの標準エラー出力 (unit 2) を このチャンネルに返す。 また制御プロセスはこの接続から受け取ったバイトデータを UNIX シグナルの番号として扱い、リモートコマンドのプロセス グループへとシグナルを送る。 Fa fd2p がゼロの場合は、 stderr (リモートコマンドの unit 2) は stdout と一緒にまとめられる。またこの場合はリモートプロセスへ 任意のシグナルを送ることはできなくなる。 ただし帯域外 (out-of-band) データを用いれば、 リモートプロセスの注意を引くことはできるかもしれない。

プロトコルの詳細は rshd(8) に記述されている。

Fn rresvport 関数は特権アドレスにバインドされたソケットを取得するために用いられる。 このソケットは Fn rcmd などの関数での利用に適している。インターネットポートの特権ポートは、 0 から 1023 の範囲である。スーパーユーザーだけがこれらのアドレスを ソケットにバインドすることができる。

Fn iruserok と Fn ruserok 関数は、まず以下の引数を取る: リモートホスト ( Fn iruserok は IP アドレスで、 Fn ruserok はホスト名で指定)、 2 つのユーザー名、ローカルユーザーの名前が スーパーユーザーのものであるかどうかを示すフラグ、である。 もしユーザーがスーパーユーザーではない場合は、これらの関数は /etc/hosts.equiv ファイルをチェックする。ファイルが見つからなかったり、 内容のチェックに失敗した場合には、 ローカルユーザーのホームディレクトリにある .rhosts ファイルをチェックして、サービス要求が許可されているかどうか調べる。

このファイルが存在しなかったり、 通常ファイル (regular file) ではなかったり、 指定ユーザーまたはスーパーユーザー以外の所有だったり、 所有者以外から書き込み可能だったりした場合には、 このチェックは自動的に失敗する。 マシンの名前が ``hosts.equiv '' にリストされていたり、 ホストとリモートユーザーの名前が ``.rhosts '' ファイルに書かれていた場合には 0 が返される。 それ以外の場合には、 Fn iruserok と Fn ruserok は -1 を返す。 ( gethostname(2) によって取得される) ローカルドメインがリモートのドメインと同じ場合は、 マシンの名前だけを指定すればよい。

リモートホストの IP アドレスがわかっている場合は、 Fn ruserok よりも Fn iruserok を用いる方が良いだろう。 Fn ruserok はリモートホストの所属するドメインの DNS サーバーが信頼できなくても 使用できるからである。

返り値

Fn rcmd 関数は成功すると有効なソケットディスクリプターを返す。 失敗すると -1 を返し、標準エラー出力に診断メッセージを 表示する。

Fn rresvport 関数は、成功するとバインドされた有効なソケットディスクリプターを返す。 失敗すると -1 を返し、グローバル変数 errno をエラーの原因に対応する値にセットする。 エラーコード EAGAIN は、この関数においては「すべてのネットワークポートが使用中」 という意味を表す。

準拠

POSIX.1-2001 にはない。 BSD 系、Solaris や他の多くのシステムに存在する。 これらの関数は BSD 4.2 で登場した。

関連項目

rlogin(1), rsh(1), intro(2), rexec(3), rexecd(8), rlogind(8), rshd(8)