psss / rpms / libsemanage

Forked from rpms/libsemanage 5 years ago
Clone
018c5c8
diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
018c5c8
index e322992..a223aa7 100644
018c5c8
--- a/libsemanage/src/semanage_store.c
018c5c8
+++ b/libsemanage/src/semanage_store.c
018c5c8
@@ -495,6 +495,7 @@ static int semanage_copy_file(const char *src, const char *dst, mode_t mode)
018c5c8
 	int in, out, retval = 0, amount_read, n, errsv = errno;
018c5c8
 	char tmp[PATH_MAX];
018c5c8
 	char buf[4192];
018c5c8
+	mode_t mask;
018c5c8
 
018c5c8
 	n = snprintf(tmp, PATH_MAX, "%s.tmp", dst);
018c5c8
 	if (n < 0 || n >= PATH_MAX)
018c5c8
@@ -506,13 +507,16 @@ static int semanage_copy_file(const char *src, const char *dst, mode_t mode)
018c5c8
 
018c5c8
 	if (!mode)
018c5c8
 		mode = S_IRUSR | S_IWUSR;
018c5c8
-
018c5c8
+	
018c5c8
+	mask = umask(0);
018c5c8
 	if ((out = open(tmp, O_WRONLY | O_CREAT | O_TRUNC, mode)) == -1) {
018c5c8
+		umask(mask);
018c5c8
 		errsv = errno;
018c5c8
 		close(in);
018c5c8
 		retval = -1;
018c5c8
 		goto out;
018c5c8
 	}
018c5c8
+	umask(mask);
018c5c8
 	while (retval == 0 && (amount_read = read(in, buf, sizeof(buf))) > 0) {
018c5c8
 		if (write(out, buf, amount_read) < 0) {
018c5c8
 			errsv = errno;