From a4279b515b4fa48c3277c13eaca1119e159b427a Mon Sep 17 00:00:00 2001 From: Ivana Hutarova Varekova Date: Mon, 25 Oct 2010 12:27:08 +0200 Subject: [PATCH] fixes the cgsnapshot problem with pfile permisssions cgpconfigparser changes the permissions of all files. That's why to test whether the variable file is writable, there have to be used the variable file from the root group. CHANGELOG: * add the information why root group is used for finding which variable is writable Signed-off-by: Ivana Hutarova Varekova Signed-off-by: Jan Safranek --- src/tools/cgsnapshot.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/tools/cgsnapshot.c b/src/tools/cgsnapshot.c index a593f91a..f347b393 100644 --- a/src/tools/cgsnapshot.c +++ b/src/tools/cgsnapshot.c @@ -273,7 +273,7 @@ static int display_permissions(const char *path, static int display_cgroup_data(struct cgroup *group, char controller[CG_CONTROLLER_MAX][FILENAME_MAX], - const char *group_path, int first, + const char *group_path, int root_path_len, int first, const char *program_name) { int i = 0, j; @@ -315,8 +315,14 @@ static int display_cgroup_data(struct cgroup *group, for (j = 0; j < nr_var; j++) { name = cgroup_get_value_name(group_controller, j); - /* test whether the variable file is writable */ - strncpy(var_path, group_path, FILENAME_MAX); + /* For the non-root groups cgconfigparser set + permissions of variable files to 777. Thus + It is necessary to test the permissions of + variable files in the root group to find out + whether the variable is writable. + */ + strncpy(var_path, group_path, root_path_len); + var_path[root_path_len] = '\0'; strncat(var_path, "/", FILENAME_MAX); var_path[FILENAME_MAX-1] = '\0'; strncat(var_path, name, FILENAME_MAX); @@ -450,7 +456,7 @@ static int display_controller_data( } display_cgroup_data(group, controller, info.full_path, - first, program_name); + prefix_len, first, program_name); first = 0; } } -- 2.47.2