added support for VC_IATTR_IMMUTABLE flag
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 5 Mar 2004 03:26:18 +0000 (03:26 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 5 Mar 2004 03:26:18 +0000 (03:26 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1083 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/src/fstool.c
util-vserver/src/fstool.h
util-vserver/src/setattr.c
util-vserver/src/showattr.c

index d732bc3..d493831 100644 (file)
@@ -195,8 +195,6 @@ int main(int argc, char *argv[])
     .do_display_dot    =  false,
     .do_display_dir    =  false,
     .do_mapping                =  true,
-    .immutable         =  false,
-    .immulink          =  false,
     .ctx               =  VC_NOCTX,
     .is_legacy          =  false,
     .do_set             =  false,
@@ -215,12 +213,14 @@ int main(int argc, char *argv[])
     switch (c) {
       case CMD_HELP            :  showHelp(1, argv[0], 0);
       case CMD_VERSION         :  showVersion();
-      case CMD_IMMU            :  args.set_mask |= VC_IATTR_IUNLINK; break;
+      case CMD_IMMU            :  args.set_mask |= VC_IATTR_IMMUTABLE; /*@fallthrough@*/
+      case CMD_IMMUX           :  args.set_mask |= VC_IATTR_IUNLINK; break;
       case CMD_ADMIN           :  args.set_mask |= VC_IATTR_ADMIN;   break;
       case CMD_WATCH           :  args.set_mask |= VC_IATTR_WATCH;   break;
       case CMD_HIDE            :  args.set_mask |= VC_IATTR_HIDE;    break;
       case CMD_BARRIER         :  args.set_mask |= VC_IATTR_BARRIER; break;
-      case CMD_UNSET_IMMU      :  args.del_mask |= VC_IATTR_IUNLINK; break;
+      case CMD_UNSET_IMMU      :  args.del_mask |= VC_IATTR_IMMUTABLE; /*@fallthrough@*/
+      case CMD_UNSET_IMMUX     :  args.del_mask |= VC_IATTR_IUNLINK; break;
       case CMD_UNSET_ADMIN     :  args.del_mask |= VC_IATTR_ADMIN;   break;
       case CMD_UNSET_WATCH     :  args.del_mask |= VC_IATTR_WATCH;   break;
       case CMD_UNSET_HIDE      :  args.del_mask |= VC_IATTR_HIDE;    break;
index 74c4d24..cfc2765 100644 (file)
 #define CMD_WATCH              0x8012
 #define CMD_HIDE               0x8013
 #define CMD_BARRIER            0x8014
+#define CMD_IMMUX              0x8015
 #define CMD_UNSET_IMMU         0x8020
 #define CMD_UNSET_ADMIN                0x8021
 #define CMD_UNSET_WATCH                0x8022
 #define CMD_UNSET_HIDE         0x8023
 #define CMD_UNSET_BARRIER      0x8024
+#define CMD_UNSET_IMMUX                0x8025
 
 
 struct stat;
@@ -46,8 +48,6 @@ struct Arguments {
     bool               do_display_dot;
     bool               do_display_dir;
     bool               do_mapping;
-    bool               immutable;
-    bool               immulink;
     char const *       ctx_str;
     xid_t              ctx;
     bool               is_legacy;
index bb603b8..4b7acee 100644 (file)
@@ -49,6 +49,8 @@ CMDLINE_OPTIONS[] = {
   { "~watch",      no_argument, 0, CMD_UNSET_WATCH },
   { "~hide",       no_argument, 0, CMD_UNSET_HIDE  },
   { "~barrier",    no_argument, 0, CMD_UNSET_BARRIER },
+  { "iunlink-but-not-immutable",   no_argument, 0, CMD_IMMUX },
+  { "~iunlink-but-not-immutable",  no_argument, 0, CMD_UNSET_IMMUX },
   { 0,0,0,0 }
 };
 
@@ -60,7 +62,7 @@ showHelp(int fd, char const *cmd, int res)
   WRITE_MSG(fd, "Usage:  ");
   WRITE_STR(fd, cmd);
   WRITE_MSG(fd,
-           " [-Rx] [--[~]iunlink] [--[~]admin] [--[~]watch] [--[~]hide] [--[~]barrier] [--] <file>+\n\n"
+           " [-Rx] [--[~](iunlink|admin|watch|hide|barrier|iunlink-but-not-immutable)]* [--] <file>+\n\n"
            " Options:\n"
            "   -R  ...  recurse through directories\n"
            "   -x  ...  do not cross filesystems\n\n"
index 91cb638..c5a04dd 100644 (file)
@@ -105,13 +105,14 @@ handleFile(char const *name, char const *display_name)
   memset(buf, ' ', sizeof buf);
 
   if (getFlags(name, &flags, &mask)) {
-      //                                   1       1       0       0
-      //                            fedcba9876543210fedcba9876543210
-    static char const  MARKER[33] = ".......x......ib.............hwa";
+      //                                     1       1       0       0
+      //                              fedcba9876543210fedcba9876543210
+    static char const  MARKER[33] = ".......x.....iub.............hwa";
     int                i;
     uint32_t           used_flags = (VC_IATTR_XID|VC_IATTR_ADMIN|
                                      VC_IATTR_WATCH|VC_IATTR_HIDE|
-                                     VC_IATTR_BARRIER|VC_IATTR_IUNLINK);
+                                     VC_IATTR_BARRIER|VC_IATTR_IUNLINK|
+                                     VC_IATTR_IMMUTABLE);
 
     for (i=0; i<32; ++i) {
       if (used_flags & 1) {
@@ -126,7 +127,7 @@ handleFile(char const *name, char const *display_name)
     }
   }      
   else {
-    memcpy(buf, "ERR   ", 6);
+    memcpy(buf, "ERR   ", 7);
     res = false;
   }