]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
Fix a cgconfig behavior of wrong /etc/cgconfig.conf.
authorKen'ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>
Wed, 4 Nov 2009 01:54:30 +0000 (10:54 +0900)
committerDhaval Giani <dhaval@linux.vnet.ibm.com>
Tue, 10 Nov 2009 19:12:06 +0000 (00:42 +0530)
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>
include/libcgroup.h
src/config.c
src/parse.y

index 52f79f8c845a31f17bbed916ddd4a02fe5ac8b23..b58b2bb710f72b5776eb904cfc56cba23611c8e3 100644 (file)
@@ -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
index da2c268aa706f6b4c3e03fe79d5fce4191e6c015..130fac1fedee56a34aeeb4c829b2a1b9e2a6e949 100644 (file)
@@ -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();
index 8c7ae2424f6a041cfa12df08183dd9099315fd50..d1f8678e5cc8806d316f8a99200f0f04c9bf64fe 100644 (file)
@@ -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 $$;
                }
        }