EN JA
REXEC(3)
REXEC(3) Linux Programmer's Manual REXEC(3)

名前

rexec, rexec_af -リモートコマンドへのストリームを返す

書式


#define _BSD_SOURCE /* feature_test_macros(7) 参照 */
#include <netdb.h>
 

int rexec(char ** ahost , int inport , char * user ,
char * passwd , char * cmd , int * fd2p );
 

int rexec_af(char ** ahost , int inport , char * user ,
char * passwd , char * cmd , int * fd2p ,
sa_family_t af );

説明

このインタフェースは rcmd(3) によって置き換えられた。
 
rexec() 関数は gethostbyname(3) を使ってホスト *ahost を探す。ホストが存在しない場合は-1 を返し、それ以外の場合には *ahost にそのホストの標準的な名前を設定する。ユーザ名とパスワードの両方が指定された場合には、これらは接続先のホストへの認証に利用される。そうでない場合には、適切な情報を入手するために、環境変数と、そのユーザのホームディレクトリの .netrc ファイルが検索される。情報が見つからなかった時には、ユーザに対して情報を入力するプロンプトが表示される。

ポート inport には、接続に使用する DARPA Internet の well-known ポートを指定する。 getservbyname("exec", "tcp") を呼び出すと構造体へのポインタが返され ( getservent(3) 参照)、この構造体には必要なポートが入っている。接続に使用されるプロトコルについての詳細は rexecd(8) に書かれている (訳注: 現在のところ存在しない)。

接続に成功すると、インターネットドメインの SOCK_STREAM 型のソケットが返され、そのソケットはリモートコマンドの標準入力および標準出力となる。 fd2p が 0 以外の場合、制御プロセスへの補助チャンネルがセットアップされ、補助チャンネルのディスクリプタが *fd2p に書かれる。制御プロセスはコマンドからの診断メッセージ出力 (ファイルディスクリプタ 2) をこのチャンネルで返す。また、このチャンネル経由で UNIX のシグナル番号を示すバイトを受信する。受信したシグナルはコマンドが属すプロセスグループに転送される。診断情報にはリモートの認証失敗は含まれない。なぜなら、認証の確認が行われた後で補助チャンネルの接続はセットアップされるからである。 fd2p が 0 の場合、標準エラー (リモートコマンドのファイルディスクリプタ 2) は標準出力と同様に扱われ、リモートプロセスに任意のシグナルを送るための手段は提供されない。但し、リモートプロセスに対してトリガをかけるために、帯域外データ (out-of-band data) を使うことはできる。

rexec_af()

rexec() 関数は IPv4 ( AF_INET) 上で動作する。これに対して、 rexec_af() 関数は追加の引き数 af があり、この引き数で呼び出し側がプロトコルを選択できる。この引き数には AF_INET, AF_INET6, AF_UNSPEC を指定できる ( AF_UNSPEC は実装側がプロトコルを選択することを意味する)。

バージョン

rexec_af() 関数は glibc バージョン 2.9 で追加された。

準拠

これらの関数は POSIX.1-2001 にはない。 rexec() 関数は 4.2BSD で始めて登場し、BSD 系、Solaris や他の多くのシステムに存在する。 rexec_af() 関数はもっと新しく、それほど広く使われているわけではない。

バグ

rexec() 関数はネットワークに暗号化されていないパスワードを送信する。

基礎的なサービスにおいては大きなセキュリティホールと考えられるため、多くのサイトで無効になっている。詳細は rexecd(8) を参照。

関連項目

rcmd(3), rexecd(8)

この文書について

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