chiark / gitweb /
udev: add SECLABEL{selinux}= support
authorKay Sievers <kay@vrfy.org>
Wed, 9 Oct 2013 15:31:00 +0000 (17:31 +0200)
committerKay Sievers <kay@vrfy.org>
Wed, 9 Oct 2013 15:31:41 +0000 (17:31 +0200)
src/shared/label.c
src/shared/label.h
src/udev/udev-node.c

index fde39f2..5c7cc1c 100644 (file)
@@ -384,3 +384,15 @@ skipped:
 #endif
         return bind(fd, addr, addrlen) < 0 ? -errno : 0;
 }
+
+int label_apply(const char *path, const char *label) {
+        int r = 0;
+
+#ifdef HAVE_SELINUX
+        if (!use_selinux())
+                return 0;
+
+        r = setfilecon(path, (char *)label);
+#endif
+        return r;
+}
index 09e15e3..b190e69 100644 (file)
@@ -46,6 +46,8 @@ void label_retest_selinux(void);
 
 int label_bind(int fd, const struct sockaddr *addr, socklen_t addrlen);
 
+int label_apply(const char *path, const char *label);
+
 int label_write_one_line_file_atomic(const char *fn, const char *line);
 int label_write_env_file(const char *fname, char **l);
 int label_fopen_temporary(const char *path, FILE **_f, char **_temp_path);
index 74c1953..187e24e 100644 (file)
@@ -305,8 +305,10 @@ static int node_permissions_apply(struct udev_device *dev, bool apply,
 
                         if (streq(name, "selinux")) {
                                 selinux = true;
-                                /* FIXME: hook up libselinux */
-                                log_error("SECLABEL: failed to set selinux label '%s'", label);
+                                if (label_apply(devnode, label) < 0)
+                                        log_error("SECLABEL: failed to set SELinux label '%s'", label);
+                                else
+                                        log_debug("SECLABEL: set SELinux label '%s'", label);
 
 #ifdef HAVE_SMACK
                         } else if (streq(name, "smack")) {