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

Reply via email to