summaryrefslogtreecommitdiff
path: root/udev_selinux.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2008-07-30 00:39:15 +0200
committerKay Sievers <kay.sievers@vrfy.org>2008-07-30 00:39:15 +0200
commit726687ad48bdececed1e7e44387c50e009e28208 (patch)
tree0a0084555d2362e87a8942dd630a72d3ef41d9fc /udev_selinux.c
parentaa5e29a58112aa838be8d04f9e6c994af056f1d1 (diff)
delete all Makefiles and move udev source to udev/
Diffstat (limited to 'udev_selinux.c')
-rw-r--r--udev_selinux.c173
1 files changed, 0 insertions, 173 deletions
diff --git a/udev_selinux.c b/udev_selinux.c
deleted file mode 100644
index eec950194c..0000000000
--- a/udev_selinux.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2004 Daniel Walsh
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stddef.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <limits.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <selinux/selinux.h>
-
-#include "udev.h"
-#include "udev_selinux.h"
-
-static security_context_t prev_scontext = NULL;
-
-static int is_selinux_running(void)
-{
- static int selinux_enabled = -1;
-
- if (selinux_enabled == -1)
- selinux_enabled = (is_selinux_enabled() > 0);
-
- dbg("selinux=%i\n", selinux_enabled);
- return selinux_enabled;
-}
-
-static char *get_media(const char *devname, int mode)
-{
- FILE *fp;
- char procfile[PATH_MAX];
- char mediabuf[256];
- int size;
- char *media = NULL;
-
- if (!(mode & S_IFBLK))
- return NULL;
-
- snprintf(procfile, PATH_MAX, "/proc/ide/%s/media", devname);
- procfile[PATH_MAX-1] = '\0';
-
- fp = fopen(procfile, "r");
- if (!fp)
- goto out;
-
- if (fgets(mediabuf, sizeof(mediabuf), fp) == NULL)
- goto close_out;
-
- size = strlen(mediabuf);
- while (size-- > 0) {
- if (isspace(mediabuf[size])) {
- mediabuf[size] = '\0';
- } else {
- break;
- }
- }
-
- media = strdup(mediabuf);
- info("selinux_get_media(%s)='%s'\n", devname, media);
-
-close_out:
- fclose(fp);
-out:
- return media;
-}
-
-void selinux_setfilecon(const char *file, const char *devname, unsigned int mode)
-{
- if (is_selinux_running()) {
- security_context_t scontext = NULL;
- char *media;
- int ret = -1;
-
- if (devname) {
- media = get_media(devname, mode);
- if (media) {
- ret = matchmediacon(media, &scontext);
- free(media);
- }
- }
-
- if (ret < 0)
- if (matchpathcon(file, mode, &scontext) < 0) {
- err("matchpathcon(%s) failed\n", file);
- return;
- }
-
- if (lsetfilecon(file, scontext) < 0)
- err("setfilecon %s failed: %s\n", file, strerror(errno));
-
- freecon(scontext);
- }
-}
-
-void selinux_setfscreatecon(const char *file, const char *devname, unsigned int mode)
-{
- if (is_selinux_running()) {
- security_context_t scontext = NULL;
- char *media;
- int ret = -1;
-
- if (devname) {
- media = get_media(devname, mode);
- if (media) {
- ret = matchmediacon(media, &scontext);
- free(media);
- }
- }
-
- if (ret < 0)
- if (matchpathcon(file, mode, &scontext) < 0) {
- err("matchpathcon(%s) failed\n", file);
- return;
- }
-
- if (setfscreatecon(scontext) < 0)
- err("setfscreatecon %s failed: %s\n", file, strerror(errno));
-
- freecon(scontext);
- }
-}
-
-void selinux_resetfscreatecon(void)
-{
- if (is_selinux_running()) {
- if (setfscreatecon(prev_scontext) < 0)
- err("setfscreatecon failed: %s\n", strerror(errno));
- }
-}
-
-void selinux_init(void)
-{
- /*
- * record the present security context, for file-creation
- * restoration creation purposes.
- */
- if (is_selinux_running()) {
- if (!udev_root[0])
- err("selinux_init: udev_root not set\n");
- matchpathcon_init_prefix(NULL, udev_root);
- if (getfscreatecon(&prev_scontext) < 0) {
- err("getfscreatecon failed\n");
- prev_scontext = NULL;
- }
- }
-}
-
-void selinux_exit(void)
-{
- if (is_selinux_running() && prev_scontext) {
- freecon(prev_scontext);
- prev_scontext = NULL;
- }
-}