label: when clearing selinux context, don't mangle errno

(cherry picked from commit 874f1947e3)
(cherry picked from commit 00d967b989)

Conflicts:
	src/tmpfiles/tmpfiles.c
This commit is contained in:
Lennart Poettering
2014-06-18 12:34:18 -04:00
committed by Zbigniew Jędrzejewski-Szmek
parent 4a8d7c028d
commit 52af610616
2 changed files with 9 additions and 8 deletions
+4
View File
@@ -230,6 +230,8 @@ int label_socket_set(const char *label) {
void label_context_clear(void) {
#ifdef HAVE_SELINUX
PROTECT_ERRNO;
if (!use_selinux())
return;
@@ -240,6 +242,8 @@ void label_context_clear(void) {
void label_socket_clear(void) {
#ifdef HAVE_SELINUX
PROTECT_ERRNO;
if (!use_selinux())
return;
+5 -8
View File
@@ -460,18 +460,19 @@ static int item_set_perms(Item *i, const char *path) {
}
static int write_one_file(Item *i, const char *path) {
int r, e, fd, flags;
int r, fd, flags;
struct stat st;
assert(i);
assert(path);
flags = i->type == CREATE_FILE ? O_CREAT|O_APPEND :
i->type == TRUNCATE_FILE ? O_CREAT|O_TRUNC : 0;
RUN_WITH_UMASK(0) {
label_context_set(path, S_IFREG);
fd = open(path, flags|O_NDELAY|O_CLOEXEC|O_WRONLY|O_NOCTTY|O_NOFOLLOW, i->mode);
e = errno;
label_context_clear();
errno = e;
}
if (fd < 0) {
@@ -633,7 +634,7 @@ static int glob_item(Item *i, int (*action)(Item *, const char *)) {
}
static int create_item(Item *i) {
int r, e;
int r;
struct stat st;
assert(i);
@@ -728,9 +729,7 @@ static int create_item(Item *i) {
label_context_set(i->path, S_IFLNK);
r = symlink(i->argument, i->path);
e = errno;
label_context_clear();
errno = e;
if (r < 0 && errno != EEXIST) {
log_error("symlink(%s, %s) failed: %m", i->argument, i->path);
@@ -772,9 +771,7 @@ static int create_item(Item *i) {
RUN_WITH_UMASK(0000) {
label_context_set(i->path, file_type);
r = mknod(i->path, i->mode | file_type, i->major_minor);
e = errno;
label_context_clear();
errno = e;
}
if (r < 0 && errno != EEXIST) {