chsmack: checking transmute on directories
authorJosé Bollo <jose.bollo@open.eurogiciel.org>
Tue, 10 Dec 2013 14:01:58 +0000 (15:01 +0100)
committerJosé Bollo <jose.bollo@open.eurogiciel.org>
Tue, 17 Dec 2013 11:01:26 +0000 (12:01 +0100)
The transmute flag is meaningfull only on directories.
The program now check that the transmute flag is set
only on directories.

Signed-off-by: José Bollo <jose.bollo@open.eurogiciel.org>
utils/chsmack.c

index b52f75d..84989e1 100644 (file)
@@ -114,6 +114,8 @@ int main(int argc, char *argv[])
        static char mmap_buf[SMACK_LABEL_LEN + 1];
        static int options_map[128];
 
+       struct stat st;
+
        char *label;
        int follow_flag = 0;
        int transmute_flag = 0;
@@ -193,10 +195,19 @@ int main(int argc, char *argv[])
                        }
 
                        if (transmute_flag) {
-                               rc = smack_set_label_for_path(argv[i],
-                                                       XATTR_NAME_SMACKTRANSMUTE, follow_flag, "TRUE");
+                               rc = follow_flag ?  stat(argv[i], &st) : lstat(argv[i], &st);
                                if (rc < 0)
                                        perror(argv[i]);
+                               else if (!S_ISDIR(st.st_mode)) {
+                                       fprintf(stderr, "%s: transmute: not a directory %s\n",
+                                               basename(argv[0]), argv[i]);
+                               }
+                               else {
+                                       rc = smack_set_label_for_path(argv[i],
+                                                               XATTR_NAME_SMACKTRANSMUTE, follow_flag, "TRUE");
+                                       if (rc < 0)
+                                               perror(argv[i]);
+                               }
                        }
                }
        }