前エントリの通り、ユーザーのUIDやGIDに応じた処理を実装するには、全関数呼び出しについて引数にユーザーのUIDとGIDを付与してやる必要があるようです。というわけで、また魔改造してみました。
■改造場所
php_fuse_call_methodの中で、付いてない引数を勝手にねつ造します。
■改造内容(強引ですが)
HashTable *function_table; の直後に
uid_t uid;
gid_t gid;
uid = fuse_get_context()->uid;
gid = fuse_get_context()->gid;
zval *arg_uid;
zval *arg_gid;
MAKE_STD_ZVAL(arg_uid);
ZVAL_LONG(arg_uid, uid);
MAKE_STD_ZVAL(arg_gid);
ZVAL_LONG(arg_gid, gid);
-zval ***params = emalloc(sizeof(zval**) * (param_count));
+zval ***params = emalloc(sizeof(zval**) * (param_count+2));
va_end(va_params); の直後に
*(params+param_count) = &arg_uid;
*(params+param_count+1) = &arg_gid;
param_count = param_count+2;
efree(params); の直後に
zval_ptr_dtor(&arg_uid);
zval_ptr_dtor(&arg_gid);
■使い方
こんな感じで、全関数でUID/GIDを取得できるようになりました。
(変更前)function mknod($path, $mode, $dev)
(変更後)function mknod($path, $mode, $dev, $uid, $gid)
全然テストしてませんけど、一応動いてるみたいなんで、これでいいやw
0 件のコメント:
コメントを投稿