commit 325a49010de4c810cbfbcfa6f6c343597914fc38
Author: Ken'ichi Ohmichi <[email protected]>
Date: Wed Nov 4 11:21:52 2009 +0900
[PATCH-v3 2/2] 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 <[email protected]>
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 $$;
}
}
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel