OpenBlockS266でSELinux その3
前回、タイプ付与が失敗していました。
restoreconは、/etc/selinux/seedit/contexts/files/file_contextsを読み込んでタイプ付与をしますが、読み込む際のコードは、
items = sscanf(line_buf, "%as %as %as", ®ex, &type, &context); if (items < 2) { COMPAT_LOG(SELINUX_WARNING, "%s: line %d is missing fields, skipping\n", path, lineno); return 0; } else if (items == 2) { /* The type field is optional. */ free(context); context = type; type = 0; }
となっています*1。
この中で、sscanfのフォーマットに"%as"とあり、フラグとして"a"というものが使われています。
Fedora 10のmanpageには、"fと一緒"としか書いてないですし、ググってもほとんどそれ以外の説明は出てきません。
ANSIではその説明であっていますが(でも"s"とはくっつかない)、Glibcでは抽出した文字列の大きさに合わせて自動的にメモリ確保してくれるそうです。
で、uClibcではどうかというと、
#ifdef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ #ifdef L_vfscanf /* only emit this once */ #warning Forcing undef of __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ until implemented! #endif #undef __UCLIBC_HAS_SCANF_GLIBC_A_FLAG__ #endif
ということで、まだ未実装…
そういうことで、"%as"を"%s"に置き換えて、必要な変数に対してはメモリ確保してやることで、OKのようですね。
実行すると、
# restorecon -R / # ls -Z drwxr-xr-x system_u:object_r:dir_bin_t bin drwxr-xr-x system_u:object_r:dir_dev_t dev drwxr-xr-x system_u:object_r:dir_etc_t etc drwxr-xr-x system_u:object_r:dir_homedir_rootdir_t home drwxr-xr-x system_u:object_r:dir_lib_t lib drwxr-xr-x system_u:object_r:dir_childdir__t mnt drwxr-xr-x system_u:object_r:dir_childdir__t opt dr-xr-xr-x system_u:object_r:proc_t proc drwxr-xr-x system_u:object_r:dir_childdir__t root drwxr-xr-x system_u:object_r:dir_sbin_t sbin drwxr-xr-x system_u:object_r:security_t selinux drwxr-xr-x system_u:object_r:sysfs_t sys drwxrwxrwt system_u:object_r:tmp_t tmp drwxr-xr-x system_u:object_r:dir_usr_t usr drwxr-xr-x system_u:object_r:dir_var_t var #
と、エラーもなく、タイプも付与されました。