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.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。