6 static inline void selinux_setfilecon(char *file, unsigned int mode) { }
7 static inline void selinux_setfscreatecon(char *file, unsigned int mode) {}
8 static inline void selinux_init(void) {}
9 static inline void selinux_restore(void) {}
13 #include <selinux/selinux.h>
19 static int selinux_enabled=-1;
20 static security_context_t prev_scontext=NULL;
22 static inline int is_selinux_running(void) {
23 if ( selinux_enabled==-1 )
24 return selinux_enabled=is_selinux_enabled()>0;
25 return selinux_enabled;
28 static inline int selinux_get_media(char *path, int mode, char **media)
32 char mediabuf[PATH_MAX];
34 if (!( mode && S_IFBLK )) {
37 snprintf(buf,sizeof(buf), "/proc/ide/%s/media", basename(path));
40 if (fgets(mediabuf,sizeof(mediabuf), fp)) {
41 int size=strlen(mediabuf);
43 if (isspace(mediabuf[size])) {
49 *media=strdup(mediabuf);
50 info("selinux_get_media(%s)->%s \n", path, *media);
59 static inline void selinux_setfilecon(char *file, unsigned int mode) {
60 if (is_selinux_running()) {
61 security_context_t scontext=NULL;
63 int ret=selinux_get_media(file, mode, &media);
65 ret = matchmediacon(media, &scontext);
69 if (matchpathcon(file, mode, &scontext) < 0) {
70 dbg("matchpathcon(%s) failed\n", file);
73 if (setfilecon(file, scontext) < 0)
74 dbg("setfiles %s failed with error '%s'",
75 file, strerror(errno));
80 static inline void selinux_setfscreatecon(char *file, unsigned int mode) {
82 security_context_t scontext=NULL;
84 if (is_selinux_running()) {
86 int ret=selinux_get_media(file, mode, &media);
88 ret = matchmediacon(media, &scontext);
93 if (matchpathcon(file, mode, &scontext) < 0) {
94 dbg("matchpathcon(%s) failed\n", file);
98 retval=setfscreatecon(scontext);
100 dbg("setfiles %s failed with error '%s'",
101 file, strerror(errno));
105 static inline void selinux_init(void) {
106 /* record the present security context, for file-creation
107 * restoration creation purposes.
111 if (is_selinux_running())
113 if (getfscreatecon(&prev_scontext) < 0) {
114 dbg("getfscreatecon failed\n");
119 static inline void selinux_restore(void) {
120 if (is_selinux_running()) {
121 /* reset the file create context to its former glory */
122 if ( setfscreatecon(prev_scontext) < 0 )
123 dbg("setfscreatecon failed\n");
125 freecon(prev_scontext);
130 #endif /* USE_SELINUX */
131 #endif /* SELINUX_H */