Blame libsemanage-umask.patch
|
|
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;
|