名 前
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, unsigned short
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, unsigned short
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(const void *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_INET か AF_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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。