From: Ken'ichi Ohmichi Date: Wed, 4 Nov 2009 01:54:30 +0000 (+0900) Subject: Fix a cgconfig behavior of wrong /etc/cgconfig.conf. X-Git-Tag: v0.35~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af926428555f0e827496a1a38ade18a97add7636;p=thirdparty%2Flibcgroup.git 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 Signed-off-by: Dhaval Giani --- diff --git a/include/libcgroup.h b/include/libcgroup.h index 52f79f8c..b58b2bb7 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 da2c268a..130fac1f 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 8c7ae242..d1f8678e 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 $$; } }