日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
LIBCASPER(3) FreeBSD ライブラリ関数マニュアル LIBCASPER(3) 名称 cap_init, cap_wrap, cap_unwrap, cap_sock, cap_clone, cap_close, cap_limit_get, cap_limit_set, cap_send_nvlist, cap_recv_nvlist, cap_xfer_nvlist, cap_service_open -- アプリケーションのケーパビリティを扱 うためのライブラリ ライブラリ libcasper Library (libcasper, -lcasper) 書式 #include <libcasper.h> #include <nv.h> cap_channel_t * cap_init(void); cap_channel_t * cap_wrap(int sock); int cap_unwrap(cap_channel_t *chan); int cap_sock(const cap_channel_t *chan); cap_channel_t * cap_clone(const cap_channel_t *chan); void cap_close(cap_channel_t *chan); int cap_limit_get(const cap_channel_t *chan, nvlist_t **limitsp); int cap_limit_set(const cap_channel_t *chan, nvlist_t *limits); int cap_send_nvlist(const cap_channel_t *chan, const nvlist_t *nvl); nvlist_t * cap_recv_nvlist(const cap_channel_t *chan, int flags); nvlist_t * cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl, int flags); cap_channel_t * cap_service_open(const cap_channel_t *chan, const char *name); 解説 libcapsicum ライブラリは、casper プロセスを通してアプリケーションのケーパ ビリティを管理することを可能にします。 (cap_channel_t タイプによって表される) アプリケーションのケーパビリティ は、呼び出し側と casper プロセスデーモンの間の通信チャネル、またはその サービスの 1 つのインスタンスです。cap_init() 関数で取得される casper プ ロセスへのケーパビリティは、cap_service_open() 関数を通して casper のサー ビスへのケーパビリティを作成することを可能にします。 cap_init() 関数は、casper プロセスへのケーパビリティをオープンします。 cap_wrap() 関数は、与えられたソケットに基づいて cap_channel_t を作成しま す。ケーパビリティが、execve(2) を通して継承されるか、または通常のファイ ル記述子として unix(4) ドメインソケットを越えて送信し、再び cap_channel_t として表されなければならないとき、関数は、使用されます。 cap_unwrap() 関数は、cap_wrap() 関数の反対です。それは、cap_channel_t 構 造体を解放し、それに関連した unix(4) ドメインソケットを返します。 cap_clone() 関数は、与えられたケーパビリティをクローン化します。 cap_close() 関数は、与えられたケーパビリティをクローズします。 cap_sock() 関数は、kevent(2), poll(2) と select(2) のようなシステムコール で使用するために与えられたケーパビリティと関連した unix(4) ドメインソケッ ト記述子を返します。 cap_limit_get() 関数は、与えられたケーパビリティの現在の制限を limitsp 引 数に格納します。関数が 0 を返し、NULL が limitsp に格納されるなら、それ は、設定の制限がないことを意味します。 cap_limit_set() 関数は、与えられたケーパビリティのための制限を設定しま す。制限は、nvlist として提供されます。正確な形式は、ケーパビリティが表し ているサービスに依存します。 cap_send_nvlist() 関数は、与えられたケーパビリティを越えて与えられた nvlist を送信します。これは、casper サービスと通信する低レベルのインタ フェースです。ほとんどのサービスは、より高いレベルの API が提供されるべき です。 cap_recv_nvlist() 関数は、与えられたケーパビリティを越えて与えられた nvlist を受信します。flags 引数は、どのようなタイプのトップの nvlist がそ うであることが期待されているかを定義します。nvlist フラグが、 cap_recv_nvlist() に渡されたフラグと一致していないなら、nvlist は、返され ません。 cap_xfer_nvlist() 関数は、与えられた nvlist を送信し、それを破壊し、与え られたケーパビリティを越える応答で新しい nvlist を受信します。flags 引数 は、どのようなタイプのトップの nvlist がそうであることが期待されているか を定義します。nvlist フラグが、cap_xfer_nvlist() に渡されたフラグと一致し ていないなら、nvlist は、返されません。関数が成功するか、または失敗するな らば、それは、重要ではなく、送信のために与えられた nvlist は、いったん関 数が返ると常に破壊されます。 cap_service_open() 関数は、cap_init() 関数によって取得された casper ケー パビリティを通して与えられた名前の casper サービスをオープンします。関数 は、オープンされたサービスへのアクセスを提供するケーパビリティを返しま す。 戻り値 cap_clone(), cap_init(), cap_recv_nvlist(), cap_service_open(), cap_wrap() と cap_xfer_nvlist() 関数は、失敗すれば、NULL を返し、errno 変 数を設定します。 cap_limit_get(), cap_limit_set() と cap_send_nvlist() 関数は、失敗すれ ば、-1 を返し、errno 変数を設定します。 cap_close(), cap_sock() と cap_unwrap() 関数は、常に成功します。 使用例 次の例は、最初に casper へのケーパビリティをオープンし、次にこのケーパビ リティを使用して system.dns casper サービスへの新しいケーパビリティを作成 し、IP アドレスを解決する後者のケーパビリティを使用します。 cap_channel_t *capcas, *capdns; nvlist_t *limits; const char *ipstr = "127.0.0.1"; struct in_addr ip; struct hostent *hp; /* Casper へのケーパビリティをオープンします. */ capcas = cap_init(); if (capcas == NULL) err(1, "Unable to contact Casper"); /* ケーパビリティモードの sandbox に入ります. */ if (cap_enter() < 0 && errno != ENOSYS) err(1, "Unable to enter capability mode"); /* system.dns サービスへのケーパビリティを作成するために Casper ケーパビリティを使用します. */ capdns = cap_service_open(capcas, "system.dns"); if (capdns == NULL) err(1, "Unable to open system.dns service"); /* Casper ケーパビリティをクローズします, もはや必要ではありません. */ cap_close(capcas); /* system.dns を DNS の逆引きと IPv4 アドレスに制限します. */ limits = nvlist_create(0); nvlist_add_string(limits, "type", "ADDR"); nvlist_add_number(limits, "family", (uint64_t)AF_INET); if (cap_limit_set(capdns, limits) < 0) err(1, "Unable to limit access to the system.dns service"); /* C 文字列の IP アドレスを in_addr に変換します. */ if (!inet_aton(ipstr, &ip)) errx(1, "Unable to parse IP address %s.", ipstr); /* 与えられた IP アドレスのためのホスト名を見つける. */ hp = cap_gethostbyaddr(capdns, (const void *)&ip, sizeof(ip), AF_INET); if (hp == NULL) errx(1, "No name associated with %s.", ipstr); printf("Name associated with %s is %s.\n", ipstr, hp->h_name); 関連項目 cap_enter(2), execve(2), kevent(2), poll(2), select(2), cap_gethostbyaddr(3), err(3), gethostbyaddr(3), inet_aton(3), nv(3), capsicum(4), unix(4) 作者 libcasper ライブラリは、FreeBSD 財団の資金提供の下で Pawel Jakub Dawidek <pawel@dawidek.net> によって実装されました。libcasper の新しいアーキテク チャは、 Mariusz Zaborski <oshogbo@FreeBSD.org> によって実装されました。 FreeBSD 11.4 February 25, 2016 FreeBSD 11.4