You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.2 KiB
128 lines
4.2 KiB
diff -up shadow-4.1.5.1/lib/commonio.c.orig-context shadow-4.1.5.1/lib/commonio.c |
|
--- shadow-4.1.5.1/lib/commonio.c.orig-context 2012-09-19 20:27:16.000000000 +0200 |
|
+++ shadow-4.1.5.1/lib/commonio.c 2013-02-20 15:20:55.064962324 +0100 |
|
@@ -941,7 +941,7 @@ int commonio_close (struct commonio_db * |
|
snprintf (buf, sizeof buf, "%s-", db->filename); |
|
|
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (buf) != 0) { |
|
+ if (set_selinux_file_context (buf, db->filename) != 0) { |
|
errors++; |
|
} |
|
#endif |
|
@@ -975,7 +975,7 @@ int commonio_close (struct commonio_db * |
|
snprintf (buf, sizeof buf, "%s+", db->filename); |
|
|
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (buf) != 0) { |
|
+ if (set_selinux_file_context (buf, db->filename) != 0) { |
|
errors++; |
|
} |
|
#endif |
|
diff -up shadow-4.1.5.1/libmisc/copydir.c.orig-context shadow-4.1.5.1/libmisc/copydir.c |
|
--- shadow-4.1.5.1/libmisc/copydir.c.orig-context 2012-02-13 20:16:32.000000000 +0100 |
|
+++ shadow-4.1.5.1/libmisc/copydir.c 2013-02-20 15:19:01.495623232 +0100 |
|
@@ -484,7 +484,7 @@ static int copy_dir (const char *src, co |
|
*/ |
|
|
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (dst) != 0) { |
|
+ if (set_selinux_file_context (dst, NULL) != 0) { |
|
return -1; |
|
} |
|
#endif /* WITH_SELINUX */ |
|
@@ -605,7 +605,7 @@ static int copy_symlink (const char *src |
|
} |
|
|
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (dst) != 0) { |
|
+ if (set_selinux_file_context (dst, NULL) != 0) { |
|
free (oldlink); |
|
return -1; |
|
} |
|
@@ -684,7 +684,7 @@ static int copy_special (const char *src |
|
int err = 0; |
|
|
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (dst) != 0) { |
|
+ if (set_selinux_file_context (dst, NULL) != 0) { |
|
return -1; |
|
} |
|
#endif /* WITH_SELINUX */ |
|
@@ -744,7 +744,7 @@ static int copy_file (const char *src, c |
|
return -1; |
|
} |
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (dst) != 0) { |
|
+ if (set_selinux_file_context (dst, NULL) != 0) { |
|
return -1; |
|
} |
|
#endif /* WITH_SELINUX */ |
|
diff -up shadow-4.1.5.1/lib/prototypes.h.orig-context shadow-4.1.5.1/lib/prototypes.h |
|
--- shadow-4.1.5.1/lib/prototypes.h.orig-context 2012-01-08 17:04:29.000000000 +0100 |
|
+++ shadow-4.1.5.1/lib/prototypes.h 2013-02-20 15:24:17.251126575 +0100 |
|
@@ -295,7 +295,7 @@ extern /*@observer@*/const char *crypt_m |
|
|
|
/* selinux.c */ |
|
#ifdef WITH_SELINUX |
|
-extern int set_selinux_file_context (const char *dst_name); |
|
+extern int set_selinux_file_context (const char *dst_name, const char *orig_name); |
|
extern int reset_selinux_file_context (void); |
|
#endif |
|
|
|
diff -up shadow-4.1.5.1/lib/selinux.c.orig-context shadow-4.1.5.1/lib/selinux.c |
|
--- shadow-4.1.5.1/lib/selinux.c.orig-context 2012-01-08 17:35:44.000000000 +0100 |
|
+++ shadow-4.1.5.1/lib/selinux.c 2013-02-20 15:16:40.383716877 +0100 |
|
@@ -50,7 +50,7 @@ static bool selinux_enabled; |
|
* Callers may have to Reset SELinux to create files with default |
|
* contexts with reset_selinux_file_context |
|
*/ |
|
-int set_selinux_file_context (const char *dst_name) |
|
+int set_selinux_file_context (const char *dst_name, const char *orig_name) |
|
{ |
|
/*@null@*/security_context_t scontext = NULL; |
|
|
|
@@ -62,19 +62,23 @@ int set_selinux_file_context (const char |
|
if (selinux_enabled) { |
|
/* Get the default security context for this file */ |
|
if (matchpathcon (dst_name, 0, &scontext) < 0) { |
|
- if (security_getenforce () != 0) { |
|
- return 1; |
|
- } |
|
+ /* We could not get the default, copy the original */ |
|
+ if (orig_name == NULL) |
|
+ goto error; |
|
+ if (getfilecon (orig_name, &scontext) < 0) |
|
+ goto error; |
|
} |
|
/* Set the security context for the next created file */ |
|
- if (setfscreatecon (scontext) < 0) { |
|
- if (security_getenforce () != 0) { |
|
- return 1; |
|
- } |
|
- } |
|
+ if (setfscreatecon (scontext) < 0) |
|
+ goto error; |
|
freecon (scontext); |
|
} |
|
return 0; |
|
+ error: |
|
+ if (security_getenforce () != 0) { |
|
+ return 1; |
|
+ } |
|
+ return 0; |
|
} |
|
|
|
/* |
|
diff -up shadow-4.1.5.1/src/useradd.c.orig-context shadow-4.1.5.1/src/useradd.c |
|
--- shadow-4.1.5.1/src/useradd.c.orig-context 2012-09-19 20:23:33.000000000 +0200 |
|
+++ shadow-4.1.5.1/src/useradd.c 2013-02-20 15:19:31.221235459 +0100 |
|
@@ -1759,7 +1759,7 @@ static void create_home (void) |
|
{ |
|
if (access (user_home, F_OK) != 0) { |
|
#ifdef WITH_SELINUX |
|
- if (set_selinux_file_context (user_home) != 0) { |
|
+ if (set_selinux_file_context (user_home, NULL) != 0) { |
|
fail_exit (E_HOMEDIR); |
|
} |
|
#endif
|
|
|