シェルは~
をホームディレクトリに展開できます。 $HOME
は通常同じ取引をしますが、そのような拡張をサポートしていない可能性のあるコンテキストから現在のユーザーのホームディレクトリを参照したい場合がよくあります。
$HOME
が機能する設定ファイルがありますが、~
は機能しません。その逆も同様です。
Fuseは、これらの線に沿って/var/myself
-> $HOME
のようなものを提供できると思います。
それで、/var/myself/backdrops/pornography/wtf/yarly.jpg
のようなものを指すように設定ファイルに値を置くことができました
このようなものはもうありますか?そうでない場合、このようなものがない理由はありますか?
私はあなたの懸念を理解していますが、答えは「いいえ」です。そのようなことはありません。
通常の方法は、OSにユーザーのホームパスを尋ねるか、$ HOME変数を取得することです。
これらのオプションはすべて、常にアプリケーションからのコーディングが必要です。 bashのような多くのアプリケーションは、「エイリアス」を提供します〜(open(2)はそれを翻訳しません)。
もちろん、これを行うためにvfsまたはFuseモジュールを実装することもできます。おそらくそれをするために何かがあるでしょう、私はそれを尋ねるつもりです!
しかし、それは本当に必要ですか?次のような回避策を使用できます。
$ HOMEを相対パスまたは既知の場所にリンクするプログラムを開始するスクリプトを作成します。
Pam_execを使用して、$ HOMEディレクトリを既知の場所にリンクします http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
Requestinユーザーのpidを取得し、彼/彼女のホームディレクトリのシステムに問い合わせることができます。だからそれは可能です。
ただし、FSを静的と見なすSUIDプログラムがないかどうかはわかりません。
編集:
struct Fuse_context *ctx = Fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
if (ppwd == NULL) {
// No record found
} else {
// Handle record
}
} else {
// Handle error
}
上記のコードは理想的ではありませんが、一般的なケースでは機能するはずです。
(少なくともLinuxでは)1つのトリックは、アプリを実行する前にディレクトリを$HOME
に変更してから、構成ファイルで/proc/self/cwd/...
を使用することです。
ほとんどのプログラムでは、コマンドラインで構成ファイルへのパスを指定できます。したがって、標準の構成ファイルを受け取り、それをフィルター処理して現在のユーザーを$HOME
のように置き換え、変更された一時構成ファイルをプログラムに渡すラッパーを作成できます。