#include <stdlib.h> char *getenv(const char *name); char *secure_getenv(const char *name);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
GNU 固有の secure_getenv() 関数は getenv() と同様だが、 "secure execution" (「安全な実行」) が必要な場合には NULL を返す点が異なる。 "secure execution" が必要となるのは、 呼び出し元プロセスにより実行されるプログラムがロードされる際に、 以下の条件のいずれか一つが成立する場合である。
Linux セキュリティモジュールにより要求された場合にも "secure execution" は必要となる場合がある。
secure_getenv() 関数は、 set-user-ID プログラムや set-group-ID プログラムが実行環境を偶然信用してしまった場合に起こり得る脆弱性を、 汎用ライブラリで回避するために使うことを意図して作られた。
インターフェース | 属性 | 値 |
getenv(), secure_getenv() | Thread safety | MT-Safe env |
secure_getenv() は GNU による拡張である。
通常の実装では、 getenv() は環境リスト内の文字列へのポインターを返す。 呼び出し元はこの文字列を変更しないように注意しなければならない。 この文字列を変更すると、そのプロセスの環境を変化させることになるからである。
getenv() の実装はリエントラント (再入可能) であることを要求されていない。 getenv() の返り値により参照される文字列は静的に割り当てられてもよく、 文字列の内容は後続の getenv(), putenv(3), setenv(3), unsetenv(3) の呼び出しにより変更されることがある。
secure_getenv() の "secure execution" モードは、 カーネルからユーザー空間に渡される補助ベクトル (auxiliary vector) の AT_SECURE フラグにより制御される。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]