summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>2009-11-04 10:54:30 +0900
committerDhaval Giani <dhaval@linux.vnet.ibm.com>2009-11-11 00:42:06 +0530
commitaf926428555f0e827496a1a38ade18a97add7636 (patch)
treeeb0fb9f4d01aeab35d89ef729ee5f71e94cb1561
parent2378c4f8fb6d32bb73d2f4b9a7281a7b1066fcc9 (diff)
downloadlibcg-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.h1
-rw-r--r--src/config.c2
-rw-r--r--src/parse.y26
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 $$;
}
}