http://d.hatena.ne.jp/hiboma/20140406/1396715760 の続きです
git リポジトリからバグを探す
git clone git://git.code.sf.net/p/libcg/libcg してバグが修正されたコミットを探していました。
どうやら下記のコミットで修正されたようです (このコミットの前後で serverspec の挙動が変わる)
- tempalte の記法で %u %g %p と大文字の %U %G %P のフォーマットが使えるのだが
- それぞれが逆に取り違えて実装されていた ...
commit 83248a9edad920e1ceb879bc26ef155a9554617c Author: Peter Schiffer <pschiffe@redhat.com> Date: Mon Oct 14 08:43:24 2013 +0200 Templates letter case is switched Man page cgrules.conf(5) says: %u username, uid if name resolving fails %U uid %g group name, gid if name resolving fails %G gid %p process name, pid if name not available %P pid However, in cgroup_change_cgroup_flags() function, the letter case is switched. This patch fixes the problem. Signed-off-by: Peter Schiffer <pschiffe@redhat.com> Acked-by: Ivana Hutarova Varekova <varekova@redhat.com> diff --git a/src/api.c b/src/api.c index ba97768..38314fb 100644 --- a/src/api.c +++ b/src/api.c @@ -2933,11 +2933,11 @@ int cgroup_change_cgroup_flags(uid_t uid, gid_t gid, available = FILENAME_MAX - j - 2; /* Substitution */ switch(tmp->destination[++i]) { - case 'u': + case 'U': written = snprintf(newdest+j, available, "%d", uid); break; - case 'U': + case 'u': user_info = getpwuid(uid); if(user_info) { written = snprintf(newdest + j, @@ -2948,11 +2948,11 @@ int cgroup_change_cgroup_flags(uid_t uid, gid_t gid, available, "%d", uid); } break; - case 'g': + case 'G': written = snprintf(newdest + j, available, "%d", gid); break; - case 'G': + case 'g': group_info = getgrgid(gid); if(group_info) { written = snprintf(newdest + j, @@ -2963,11 +2963,11 @@ int cgroup_change_cgroup_flags(uid_t uid, gid_t gid, available, "%d", gid); } break; - case 'p': + case 'P': written = snprintf(newdest + j, available, "%d", pid); break; - case 'P': + case 'p': if(procname) { written = snprintf(newdest + j, available, "%s",
単純だけど厄介なバグですね