The previous patch is split so the first part of the patch (I hope I 
incorporate all comment):

This part standardise error messages form of the first part of cgclassify.

Signed-off-by: Ivana Varekova <[email protected]>

Ivana Varekova
--------------------------------------------------------

diff -up ./api.c.orig ./api.c
--- ./api.c.orig        2009-01-30 14:56:27.000000000 +0100
+++ ./api.c     2009-01-30 15:22:08.000000000 +0100
@@ -94,6 +94,8 @@ char *cgroup_strerror_codes[] = {
        "Cgroup parsing failed",
        "Cgroup, rules file does not exist",
        "Cgroup mounting failed",
+       "Process with given pid does not exist",
+       "euid or egid of the given proces can not be found",
 };
 
 static int cg_chown_file(FTS *fts, FTSENT *ent, uid_t owner, gid_t group)
diff -up ./cgclassify.c.orig ./cgclassify.c
--- ./cgclassify.c.orig 2009-01-30 14:56:27.000000000 +0100
+++ ./cgclassify.c      2009-01-30 15:31:20.000000000 +0100
@@ -34,33 +34,33 @@
  * It returns 0 on success and negative values on failure.
  */
 
-int euid_of_pid(pid_t pid)
+int euid_of_pid(pid_t pid, uid_t *euid)
 {
        FILE *fp;
        char path[FILENAME_MAX];
        char buf[TEMP_BUF];
-       uid_t ruid, euid, suid, fsuid;
+       uid_t ruid, suid, fsuid;
 
        sprintf(path, "/proc/%d/status", pid);
        fp = fopen(path, "r");
        if (!fp) {
                fprintf(stderr, "Error in opening file %s:%s\n", path,
                                strerror(errno));
-               return -1;
+               return ECGPROCNEXISTS;
        }
 
        while (fgets(buf, TEMP_BUF, fp)) {
                if (!strncmp(buf, "Uid:", 4)) {
                        sscanf((buf + 5), "%d%d%d%d", (int *)&ruid,
-                               (int *)&euid, (int *)&suid, (int *)&fsuid);
+                               (int *)euid, (int *)&suid, (int *)&fsuid);
                        dbg("Scanned proc values are %d %d %d %d\n",
-                               ruid, euid, suid, fsuid);
-                       return euid;
+                               ruid, *euid, suid, fsuid);
+                       return 0;
                }
        }
 
        /* If we are here, we could not find euid. Return error. */
-       return -1;
+       return ECGEUIDGIDFAIL;
 }
 
 /*
@@ -69,33 +69,33 @@ int euid_of_pid(pid_t pid)
  * It returns 0 on success and negative values on failure.
  */
 
-int egid_of_pid(pid_t pid)
+int egid_of_pid(pid_t pid, uid_t *egid)
 {
        FILE *fp;
        char path[FILENAME_MAX];
        char buf[TEMP_BUF];
-       gid_t rgid, egid, sgid, fsgid;
+       gid_t rgid, sgid, fsgid;
 
        sprintf(path, "/proc/%d/status", pid);
        fp = fopen(path, "r");
        if (!fp) {
                fprintf(stderr, "Error in opening file %s:%s\n", path,
                                strerror(errno));
-               return -1;
+               return ECGPROCNEXISTS;
        }
 
        while (fgets(buf, TEMP_BUF, fp)) {
                if (!strncmp(buf, "Gid:", 4)) {
                        sscanf((buf + 5), "%d%d%d%d", (int *)&rgid,
-                               (int *)&egid, (int *)&sgid, (int *)&fsgid);
+                               (int *)egid, (int *)&sgid, (int *)&fsgid);
                        dbg("Scanned proc values are %d %d %d %d\n",
-                               rgid, egid, sgid, fsgid);
-                       return egid;
+                               rgid, *egid, sgid, fsgid);
+                       return 0;
                }
        }
 
        /* If we are here, we could not find egid. Return error. */
-       return -1;
+       return ECGEUIDGIDFAIL;
 }
 
 int main(int argc, char *argv[])
@@ -122,17 +122,18 @@ int main(int argc, char *argv[])
        /* Put pids into right cgroups as per rules in /etc/cgrules.conf */
        for (i = 1; i < argc; i++) {
                pid = (uid_t) atoi(argv[i]);
-               euid = euid_of_pid(pid);
-               if (euid == -1) {
+               ret = euid_of_pid(pid, &euid);
+
+               if (ret > 0) {
                        fprintf(stderr, "Error in determining euid of"
-                                       " pid %d\n", pid);
+                                       " pid %d: %s\n", pid, 
cgroup_strerror(ret));
                        return -1;
                }
 
-               egid = egid_of_pid(pid);
-               if (egid == -1) {
+               ret = egid_of_pid(pid, &egid);
+               if (ret > 0) {
                        fprintf(stderr, "Error in determining egid of"
-                                       " pid %d\n", pid);
+                                       " pid %d: %s\n", pid, 
cgroup_strerror(ret));
                        return -1;
                }
 
diff -up ./libcgroup.h.orig ./libcgroup.h
--- ./libcgroup.h.orig  2009-01-30 14:56:27.000000000 +0100
+++ ./libcgroup.h       2009-01-30 15:22:08.000000000 +0100
@@ -94,6 +94,8 @@ enum cgroup_errors {
        ECGROUPPARSEFAIL, /* Failed to parse rules configuration file. */
        ECGROUPNORULES, /* Rules list does not exist. */
        ECGMOUNTFAIL,
+       ECGPROCNEXISTS, /* Proces with given pid does not exist */
+       ECGEUIDGIDFAIL, /* euid of the given proces can't be found */
        ECGSENTINEL,    /* Please insert further error codes above this */
 };
 

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to