Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

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

書式

       #include <netdb.h>   /* Or <unistd.h> on some systems */

       int rcmd(char **ahost, int inport, const char *locuser,
                const char *remuser, const char *cmd, int *fd2p);

       int rresvport(int *port);

       int iruserok(uint32_t raddr, int superuser,
                    const char *ruser, const char *luser);

       int ruserok(const char *rhost, int superuser,
                   const char *ruser, const char *luser);

       int rcmd_af(char **ahost, int inport, const char *locuser,
                   const char *remuser, const char *cmd, int *fd2p,
                   sa_family_t af);

       int rresvport_af(int *port, sa_family_t af);

       int iruserok_af(uint32_t raddr, int superuser,
                       const char *ruser, const char *luser, sa_family_t af);

       int ruserok_af(const char *rhost, int superuser,
                      const char *ruser, const char *luser, sa_family_t af);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       rcmd(), rcmd_af(),  rresvport(),  rresvport_af(),  iruserok(),  iruserok_af(),  ruserok(),
       ruserok_af(): _BSD_SOURCE

説明

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

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

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

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

   rresvport()
       rresvport()  関数は特権ポートにバインドされたソケットを取得するために  用いられる。 このソ
       ケットは rcmd() などの関数での利用に適している。 インターネットポートの特権ポートは、 0 か
       ら  1023 の範囲である。特権プロ セス (CAP_NET_BIND_SERVICE) だけが特権ポートをバインドする
       ことができ る。 glibc の実装では、この関数は特権ポートの検索範囲を 512 から 1023  までの範
       囲に制限している。  port 引き数は入出力両用で使用される。呼び 出し時にこの引き数で渡された
       値は特権ポートを巡回検索する際の開始ポイン トとして使用され、(成功で) 返る際にはこの引き数
       にバインドされたポート 番号が格納される。

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

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

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

   *_af() 
       上記で述べた関数は全て IPv4 (AF_INET)  ソケットで動作する。  "_af"  版では追加の引き数があ
       り、この引き数でソケットアドレス  ファミリーを指定できる。これらの関数では、 af 引き数には
       AF_INETAF_INET6 が指定できる。 rcmd_af() では追加で AF_UNSPEC も指定できる。

返り値

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

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

       ruserok() と iruserok() の返り値については、上述の説明を参照。

バージョン

       関数 iruserok_af(), rcmd_af(), rresvport_af(), ruserok_af() は glibc バージョン 2.2 以降で
       提供されている。

準拠

       POSIX.1-2001 にはない。 BSD  系、Solaris  や他の多くのシステムに存在する。  これらの関数は
       4.2BSD  で登場した。 "_af" が付くバージョンはより最近に 追加されたもので、あまり多くのシス
       テムには存在しない。

バグ

       iruserok() と iruserok_af() は glibc バージョン 2.12 以降のヘッダ でのみ宣言されている。

関連項目

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

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部  である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。