Patch 0001: Guarantee NULL-termination when reading the pidfile

Patch 0002: Always set umask when using mkstemp()
From 126f2389984a584b92fa906e6a574b1e2ea6516f Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgall...@redhat.com>
Date: Fri, 16 Dec 2011 10:45:46 -0500
Subject: [PATCH 1/2] Reorder pidfile() function to guarantee NULL-termination

Coverity 12400
---
 src/util/server.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/util/server.c b/src/util/server.c
index 0c9501b1f468be32a6e7fcc924c1c419069f1204..6ed6a75a3224f51ceaba50b1d1adb6f4c80cfd82 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -117,9 +117,6 @@ int pidfile(const char *path, const char *name)
     fd = open(file, O_RDONLY, 0644);
     err = errno;
     if (fd != -1) {
-
-        pid_str[pidlen] = '\0';
-
         len = 0;
         while ((ret = read(fd, pid_str + len, pidlen - len)) != 0) {
             if (ret == -1) {
@@ -141,6 +138,9 @@ int pidfile(const char *path, const char *name)
             }
         }
 
+        /* Ensure NULL-termination */
+        pid_str[pidlen] = '\0';
+
         if (ret == 0) {
             /* let's check the pid */
 
-- 
1.7.7.4

From ae94fe0c6c7bde4a4d1048080548472e05151e1c Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgall...@redhat.com>
Date: Fri, 16 Dec 2011 11:13:55 -0500
Subject: [PATCH 2/2] Securely set umask when using mkstemp

Coverity 12394, 12395 and 12398
---
 src/providers/krb5/krb5_child.c  |    3 +++
 src/providers/krb5/krb5_common.c |    3 +++
 src/tests/debug-tests.c          |    4 ++++
 3 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c
index fe87210947cb7b826d3c9b18beb9fbf96ef5a734..7543e934e4bd39e1e87b9a317eb3dcf5cefb02ac 100644
--- a/src/providers/krb5/krb5_child.c
+++ b/src/providers/krb5/krb5_child.c
@@ -230,6 +230,7 @@ static krb5_error_code create_ccache_file(krb5_context ctx,
     char *tmp_ccname;
     krb5_creds *l_cred;
     TALLOC_CTX *tmp_ctx = NULL;
+    mode_t old_umask;
 
     if (strncmp(ccname, "FILE:", 5) == 0) {
         cc_file_name = ccname + 5;
@@ -258,7 +259,9 @@ static krb5_error_code create_ccache_file(krb5_context ctx,
     }
     tmp_ccname = talloc_asprintf_append(tmp_ccname, "/.krb5cc_dummy_XXXXXX");
 
+    old_umask = umask(077);
     fd = mkstemp(tmp_ccname);
+    umask(old_umask);
     if (fd == -1) {
         DEBUG(1, ("mkstemp failed [%d][%s].\n", errno, strerror(errno)));
         kerr = errno;
diff --git a/src/providers/krb5/krb5_common.c b/src/providers/krb5/krb5_common.c
index a065727a7b410074c9e5c20b09166e792fc67e95..c2cb94b61463cbdaf3f4fa5a5cb311af55b4b960 100644
--- a/src/providers/krb5/krb5_common.c
+++ b/src/providers/krb5/krb5_common.c
@@ -290,6 +290,7 @@ errno_t write_krb5info_file(const char *realm, const char *server,
     const char *name_tmpl = NULL;
     int server_len;
     ssize_t written;
+    mode_t old_umask;
 
     if (realm == NULL || *realm == '\0' || server == NULL || *server == '\0' ||
         service == NULL || service == '\0') {
@@ -328,7 +329,9 @@ errno_t write_krb5info_file(const char *realm, const char *server,
         goto done;
     }
 
+    old_umask = umask(077);
     fd = mkstemp(tmp_name);
+    umask(old_umask);
     if (fd == -1) {
         ret = errno;
         DEBUG(1, ("mkstemp failed [%d][%s].\n", ret, strerror(ret)));
diff --git a/src/tests/debug-tests.c b/src/tests/debug-tests.c
index 8a338fb5f4c8796fb6fd67771b41b1aaf901d6ab..fefc833bcb210527e27b0e87236c9643a59e1953 100644
--- a/src/tests/debug-tests.c
+++ b/src/tests/debug-tests.c
@@ -191,10 +191,14 @@ int test_helper_debug_check_message(int level, int msgmode)
     int fd;
     int ret;
     int _errno = 0;
+    mode_t old_umask;
     FILE *file = NULL;
 
     strncpy(filename, "sssd_debug_tests.XXXXXX", 24);
+
+    old_umask = umask(077);
     fd = mkstemp(filename);
+    umask(old_umask);
     if (fd == -1) {
         _errno = errno;
         talloc_free(ctx);
-- 
1.7.7.4

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to