Manpages

名 前

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_INETAF_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/ に 書 か れ て い る 。