rexec, rexec_af -
リモートコマンドへのストリームを返す
#include <netdb.h>
int rexec(char **ahost, int inport, const char *user,
const char *passwd, const char *cmd, int *fd2p);
int rexec_af(char **ahost, int inport, const char *user,
const char *passwd, const char *cmd, int *fd2p,
sa_family_t af);
rexec(),
rexec_af():
Since glibc 2.19:
_DEFAULT_SOURCE
In glibc up to and including 2.19:
_BSD_SOURCE
このインターフェースは
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() 関数は IPv4 (
AF_INET)
上で動作する。
これに対して、
rexec_af()
関数は追加の引数
af
があり、
この引数で呼び出し側がプロトコルを選択できる。
この引数には
AF_INET,
AF_INET6,
AF_UNSPEC
を指定できる (
AF_UNSPEC
は実装側がプロトコルを選択することを意味する)。
rexec_af() 関数は glibc
バージョン 2.9
で追加された。
この節で使用されている用語の説明は
attributes(7) を参照のこと。
Interface |
Attribute |
Value |
rexec(), rexec_af() |
Thread safety |
MT-Unsafe |
これらの関数は POSIX.1
にはない。
rexec()
関数は 4.2BSD で始めて
登場し、BSD 系、Solaris
や他の多くのシステムに存在する。
rexec_af()
関数はもっと新しく、それほど広く使われているわけではない。
rexec()
関数はネットワークに暗号化されていないパスワードを送信する。
基礎的なサービスにおいては大きなセキュリティホールと考えられるため、
多くのサイトで無効になっている。詳細は
rexecd(8) を参照。
rcmd(3),
rexecd(8)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。