This patch add options -f and -d to cgcreate, it cause the permission change of 
the files of the created group
                -d, --dperm mode
              sets the permission mode of control groups directory.  The mode 
have to be set using octal numbers e.g.  -d 775.
                -f, --fperm mode
              sets the permission mode of control groups files.  The mode have 
to be set using octal numbers e.g.  -f 775.

CHANGELOG v1:
* fix jsafrane foodback thanks for it)

EXAMPLE:
#cgcreate -f 775 -d 775 -g devices:with
#cgcreate -g devices:without
# ll /cgroup/devices/ | grep with
drwxrwxr-x. 2 root root 0 Oct 29 06:55 with
drwxr-xr-x. 2 root root 0 Oct 29 06:55 without
# ll /cgroup/devices/with
total 0
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 cgroup.event_control
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 cgroup.procs
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 devices.allow
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 devices.deny
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 devices.list
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 notify_on_release
-rwxrwxr-x. 1 root root 0 Oct 29 06:55 tasks
# ll /cgroup/devices/without/
total 0
--w--w--w-. 1 root root 0 Oct 29 06:55 cgroup.event_control
-r--r--r--. 1 root root 0 Oct 29 06:55 cgroup.procs
--w-------. 1 root root 0 Oct 29 06:55 devices.allow
--w-------. 1 root root 0 Oct 29 06:55 devices.deny
-r--r--r--. 1 root root 0 Oct 29 06:55 devices.list
-rw-r--r--. 1 root root 0 Oct 29 06:55 notify_on_release
-rw-r--r--. 1 root root 0 Oct 29 06:55 tasks




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

 src/tools/cgcreate.c |   72 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 69 insertions(+), 3 deletions(-)

diff --git a/doc/man/cgcreate.1 b/doc/man/cgcreate.1
index d8e0449..d067126 100644
--- a/doc/man/cgcreate.1
+++ b/doc/man/cgcreate.1
@@ -5,13 +5,16 @@
 cgcreate \- create new cgroup(s)
 
 .SH SYNOPSIS
-\fBcgcreate\fR [\fB-h\fR] [\fB-t\fR <\fItuid>:<tgid\fR>]
-[\fB-a\fR <\fIagid>:<auid\fR>] \fB-g\fR <\fIcontrollers>:<path\fR> [-g ...]
+\fBcgcreate\fR [\fB-h\fR] [\fB-s\fR] [\fB-t\fR <\fItuid>:<tgid\fR>]
+[\fB-a\fR <\fIagid>:<auid\fR>] [\fB-f\fR mode] [\fB-d\fR mode]
+\fB-g\fR <\fIcontrollers>:<path\fR> [-g ...]
 
 .SH DESCRIPTION
 The command creates new cgroup(s) defined by option 
 \fB-g\fR.
 
+
+
 .TP
 .B -t <tuid>:<tgid>
 defines the name of the user and the group, which owns tasks
@@ -27,6 +30,18 @@ allowed to set subsystem parameters and create subgroups.
 The default value is the same as has the parent cgroup.
 
 .TP
+.B -d, --dperm mode
+sets the permission mode of control groups directory.
+The mode have to be set using octal numbers e.g.
+\fB-d 775\fR.
+
+.TP
+.B -f, --fperm mode
+sets the permission mode of control groups files.
+The mode have to be set using octal numbers e.g.
+\fB-f 775\fR.
+
+.TP
 .B -g <controllers>:<path>
 defines control groups which will be added.
 \fBcontrollers\fR is a list of controllers and
diff --git a/src/tools/cgcreate.c b/src/tools/cgcreate.c
index c79183e..8a728ed 100644
--- a/src/tools/cgcreate.c
+++ b/src/tools/cgcreate.c
@@ -27,6 +27,7 @@
 #include <getopt.h>
 
 #include "tools-common.h"
+
 /*
  * Display the usage
  */
@@ -37,8 +38,9 @@ static void usage(int status, const char *program_name)
                        " try %s -h' for more information.\n",
                        program_name);
        } else {
-               fprintf(stdout, "Usage: %s [-h] [-t <tuid>:<tgid>] "\
-                       "[-a <agid>:<auid>] -g <controllers>:<path> [-g ...]\n",
+               fprintf(stdout, "Usage: %s [-h] [-f mode] [-d mode] "\
+                       "[-t <tuid>:<tgid>] [-a <agid>:<auid>] "\
+                       "-g <controllers>:<path> [-g ...]\n",
                        program_name);
                fprintf(stdout, "  -t <tuid>:<tgid>             Set "\
                        "the task permission\n");
@@ -48,9 +50,45 @@ static void usage(int status, const char *program_name)
                        "group which should be added\n");
                fprintf(stdout, "  -h,--help                    Display "\
                        "this help\n");
+               fprintf(stdout, "  -f, --fperm mode             Group "\
+                       "file permissions\n");
+               fprintf(stdout, "  -d, --dperm mode             Group "\
+                       "direrory permissions\n");
        }
 }
 
+/* allowed mode strings are octal version: "755" */
+
+int parse_mode(char *string, mode_t *pmode, const char *program_name)
+{
+       mode_t mode = 0;
+       int pos = 0; /* position of the number iin string */
+       int i;
+       int j = 64;
+
+       while (pos < 3) {
+               if ('0' <= string[pos] && string[pos] < '8') {
+                       i = (int)string[pos] - (int)'0';
+                       /* parse the permission triple*/
+                       mode = mode + i*j;
+                       j = j / 8;
+               } else {
+                       fprintf(stdout, "%s wrong mode format %s",
+                               program_name, string);
+                       return -1;
+               }
+               pos++;
+       }
+
+       /* the string have contains three characters */
+       if (string[pos] != '\0') {
+               fprintf(stdout, "%s wrong mode format %s",
+                       program_name, string);
+               return -1;
+       }
+       *pmode = mode;
+       return 0;
+}
 
 int main(int argc, char *argv[])
 {
@@ -63,6 +101,8 @@ int main(int argc, char *argv[])
                {"task", required_argument, NULL, 't'},
                {"admin", required_argument, NULL, 'a'},
                {"", required_argument, NULL, 'g'},
+               {"dperm", required_argument, NULL, 'd'},
+               {"fperm", required_argument, NULL, 'f' },
                {0, 0, 0, 0},
        };
 
@@ -84,6 +124,12 @@ int main(int argc, char *argv[])
        /* approximation of max. numbers of groups that will be created */
        int capacity = argc;
 
+       /* permission variables */
+       mode_t dir_mode = 0;
+       mode_t file_mode = 0;
+       int dirm_change = 0;
+       int filem_change = 0;
+
        /* no parametr on input */
        if (argc < 2) {
                usage(1, argv[0]);
@@ -96,7 +142,8 @@ int main(int argc, char *argv[])
        }
 
        /* parse arguments */
-       while ((c = getopt_long(argc, argv, "a:t:g:h", long_opts, NULL)) > 0) {
+       while ((c = getopt_long(argc, argv, "a:t:g:hd:f:", long_opts, NULL))
+               > 0) {
                switch (c) {
                case 'h':
                        usage(0, argv[0]);
@@ -178,6 +225,14 @@ int main(int argc, char *argv[])
                                return -1;
                        }
                        break;
+               case 'd':
+                       dirm_change = 1;
+                       ret = parse_mode(optarg, &dir_mode, argv[0]);
+                       break;
+               case 'f':
+                       filem_change = 1;
+                       ret = parse_mode(optarg, &file_mode, argv[0]);
+                       break;
                default:
                        usage(1, argv[0]);
                        return -1;
@@ -248,6 +303,17 @@ int main(int argc, char *argv[])
                        cgroup_free(&cgroup);
                        goto err;
                }
+               if (dirm_change + filem_change > 0) {
+                       ret = cg_chmod_recursive(cgroup, dir_mode, dirm_change,
+                               file_mode, filem_change);
+                       if (ret) {
+                               fprintf(stderr, "%s: can't change permission " \
+                                       "of cgroup %s: %s\n", argv[0],
+                                       cgroup->name, cgroup_strerror(ret));
+                               cgroup_free(&cgroup);
+                               goto err;
+                       }
+               }
                cgroup_free(&cgroup);
        }
 err:


------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to