OBJS += udev_dbus.o
endif
+# if USE_SELINUX is enabled, then we do not strip or optimize
+ifeq ($(strip $(USE_SELINUX)),true)
+ CFLAGS += -DUSE_SELINUX
+ OBJS += udev_selinux.o
+ LIB_OBJS += -lselinux
+endif
+
+
# header files automatically generated
GEN_HEADERS = udev_version.h
creates or removes a device node. This requires that DBUS
development headers and libraries be present on your system to
build properly. Default value is 'false'.
+ USE_SELINUX
+ if set to 'true', SELinux support for udev will be built in.
+ This requires that SELinux development headers and libraries be
+ present on your system to build properly. Default value is
+ 'false'.
DEBUG
if set to 'true', debugging messages will be sent to the syslog
as udev is run. Default value is 'false'.
+
#include "udev.h"
#include "udev_version.h"
#include "udev_dbus.h"
+#include "udev_selinux.h"
#include "logging.h"
#include "namedev.h"
#include "udevdb.h"
}
}
+ if (!fake)
+ selinux_add_node(filename);
+
/* create symlink if requested */
if (dev->symlink[0] != '\0') {
symlinks = dev->symlink;
# 1 - DBUS support
%define dbus 0
+# if we want to build SELinux support in or not.
+# 0 - no SELinux support
+# 1 - SELinux support
+%define selinux 1
+
# if we want to enable debugging support in udev. If it is enabled, lots of
# stuff will get sent to the debug syslog.
# 0 - debugging disabled
%else
USE_DBUS=false \
%endif
+%if %{selinux}
+ USE_SELINUX=true \
+%else
+ USE_SELINUX=false \
+%endif
%if %{debug}
DEBUG=true \
%else
%else
USE_DBUS=false \
%endif
+%if %{selinux}
+ USE_SELINUX=true \
+%else
+ USE_SELINUX=false \
+%endif
%if %{lsb}
USE_LSB=true \
%else
--- /dev/null
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <ctype.h>
+#include <selinux/selinux.h>
+
+#include "udev.h"
+#include "udev_version.h"
+#include "udev_selinux.h"
+#include "logging.h"
+
+
+void selinux_add_node(char *filename)
+{
+ int retval;
+
+ if (is_selinux_enabled() > 0) {
+ security_context_t scontext;
+ retval = matchpathcon(filename, 0, &scontext);
+ if (retval < 0) {
+ dbg("matchpathcon(%s) failed\n", filename);
+ } else {
+ retval=setfilecon(filename,scontext);
+ if (retval < 0)
+ dbg("setfiles %s failed with error '%s'",
+ filename, strerror(errno));
+ free(scontext);
+ }
+ }
+}
+
--- /dev/null
+#ifndef UDEV_SELINUX_H
+#define UDEV_SELINUX_H
+
+#ifdef USE_SELINUX
+extern void selinux_add_node(char *filename);
+#else
+static void selinux_add_node(char *filename) { }
+#endif
+
+#endif