REXEC(3) | FreeBSD Library Functions Manual | REXEC(3) |
名称
rexec — リモートコマンドにストリームを戻すライブラリ
Compatibility Library (libcompat, -lcompat)書式
intrexec( char **ahost, int inport, char *user, char *passwd, char *cmd, int *fd2p);
解説
rexec() 関数は、 gethostbyname(3) を使用してホスト *ahost を検索し、ホストが存在しないなら、-1 を返します。そうでなければ、 *ahost は、ホストの標準名に設定されます。ユーザ名とパスワードの両方が指定されるなら、これらは、外部ホストの認証のために使用されます。そうでなければ、環境とホームディレクトリのユーザの .netrc ファイルは、適切な情報のために検索されます。これがすべて失敗するなら、ユーザは、情報のためにプロンプトを出します。
ポート inport は、接続に使用する、既知の DARPA インターネットポートを指定します。 getservbyname( "exec", "tcp") を呼び出すと ( getservent(3) 参照)、必要なポートを含む構造体のポインタが戻されます。接続のプロトコルについては、 rexecd(8) に詳細が説明されています。
接続が成功すると、 SOCK_STREAM タイプのインターネットドメインのソケットが呼び出し側に戻され、リモートコマンドの stdin と stdout として与えられます。 fd2p が 0 以外である場合は、制御プロセスの補助チャネルが設定され、その記述子が *fd2p に置かれます。制御プロセスは、このチャネルにコマンドからの診断出力 (ユニット 2) を戻し、また、 UNIX シグナル番号としてこのチャネルのバイトを受け入れ、コマンドのプロセスグループへ転送します。戻された診断情報には、認証が確認された後、第 2 の接続が設定されるので、リモート認証の失敗を含んでいません。 fd2p が 0 である場合は、 stderr (リモートコマンドのユニット 2) が stdout と同じものになり、帯域外データを使用して注目を集められますが、リモートプロセスに任意のシグナルを送信する準備は行なわれません。
歴史
rexec() 関数は、 4.2BSD で登場しました。バグ
rexec() 関数は、暗号化されていないパスワードをネットワークで送信します。根本的なサービスは大きなセキュリティホールと考えられるため、多くのサイトでは有効になっていません。説明のために rexecd(8) を参照してください。
June 4, 1993 | FreeBSD |