diff options
author | Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp> | 2009-11-04 10:54:30 +0900 |
---|---|---|
committer | Dhaval Giani <dhaval@linux.vnet.ibm.com> | 2009-11-11 00:42:06 +0530 |
commit | af926428555f0e827496a1a38ade18a97add7636 (patch) | |
tree | eb0fb9f4d01aeab35d89ef729ee5f71e94cb1561 | |
parent | 2378c4f8fb6d32bb73d2f4b9a7281a7b1066fcc9 (diff) | |
download | libcg-af926428555f0e827496a1a38ade18a97add7636.tar.gz libcg-af926428555f0e827496a1a38ade18a97add7636.tar.xz libcg-af926428555f0e827496a1a38ade18a97add7636.zip |
Fix a cgconfig behavior of wrong /etc/cgconfig.conf.
Changelog since v2:
o Avoid breaking ABI by changing the ECGCONFIGPARSEFAIL value.
Changelog since v1:
o Change a parser error value of /etc/cgconfig.conf to ECGCONFIGPARSEFAIL.
The cgconfig service succeeds even if there are something wrong
in /etc/cgconfig.conf. For example, it succeeds even if specifying
not-existing user (nouser) as a perm.task.uid like the following:
# cat /etc/cgconfig.conf
mount {
cpuset = /mnt/cgroups/cpuset;
memory = /mnt/cgroups/memory;
}
group root {
perm {
task {
uid = nouser;
gid = root;
}
admin {
uid = root;
gid = root;
}
}
cpuset {
cpuset.cpus = 0;
cpuset.mems = 0;
}
memory {
memory.use_hierarchy = 1;
memory.limit_in_bytes = 1000000000000;
}
}
#
# service cgconfig start
Starting cgconfig service: parsing failed at line number 10
[ OK ]
# echo $?
0
#
That is not a good behavior and the cgconfig service should fail
if there are something wrong in /etc/cgconfig.conf.
This patch fixes the behavior. In the above case, the behavior is
changed like the following by this patch:
# service cgconfig start
Starting cgconfig service: parsing failed at line number 10
Loading configuration file /etc/cgconfig.conf failed
Cgroup parsing failed
Failed to parse /etc/cgconfig.conf [FAILED]
#
Signed-off-by: Ken'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>
Signed-off-by: Dhaval Giani <dhaval@linux.vnet.ibm.com>
-rw-r--r-- | include/libcgroup.h | 1 | ||||
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/parse.y | 26 |
3 files changed, 15 insertions, 14 deletions
diff --git a/include/libcgroup.h b/include/libcgroup.h index 52f79f8..b58b2bb 100644 --- a/include/libcgroup.h +++ b/include/libcgroup.h @@ -88,6 +88,7 @@ enum cgroup_errors { ECGMOUNTFAIL, ECGSENTINEL, /* Please insert further error codes above this */ ECGEOF, /* End of file, iterator */ + ECGCONFIGPARSEFAIL,/* Failed to parse config file (cgconfig.conf). */ }; #define ECGRULESPARSEFAIL ECGROUPPARSEFAIL diff --git a/src/config.c b/src/config.c index da2c268..130fac1 100644 --- a/src/config.c +++ b/src/config.c @@ -467,7 +467,7 @@ int cgroup_config_load_config(const char *pathname) if (yyparse() != 0) { cgroup_dbg("Failed to parse file %s\n", pathname); fclose(yyin); - return ECGROUPPARSEFAIL; + return ECGCONFIGPARSEFAIL; } error = cgroup_config_mount_fs(); diff --git a/src/parse.y b/src/parse.y index 8c7ae24..d1f8678 100644 --- a/src/parse.y +++ b/src/parse.y @@ -72,7 +72,7 @@ group : GROUP ID '{' group_conf '}' else { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -85,7 +85,7 @@ group_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -95,7 +95,7 @@ group_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -105,7 +105,7 @@ group_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -146,7 +146,7 @@ task_namevalue_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -156,7 +156,7 @@ task_namevalue_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -169,7 +169,7 @@ admin_namevalue_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -179,7 +179,7 @@ admin_namevalue_conf if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -192,7 +192,7 @@ task_or_admin if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -202,7 +202,7 @@ task_or_admin if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -214,7 +214,7 @@ admin_conf: ADMIN '{' admin_namevalue_conf '}' if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -226,7 +226,7 @@ task_conf: TASK '{' task_namevalue_conf '}' if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } @@ -259,7 +259,7 @@ mount : MOUNT '{' mountvalue_conf '}' if (!$$) { fprintf(stderr, "parsing failed at line number %d\n", line_no); - $$ = 0; + $$ = ECGCONFIGPARSEFAIL; return $$; } } |