This patch fixes 2 coverity issues:
 * ipa-client/config.c: CID 11090: Resource leak
 * ipa-client/ipa-getkeytab.c: CID 11018: Unchecked return value

https://fedorahosted.org/freeipa/ticket/2035

>From 828dc2c448707fc48da97a2254d19db04e76fde2 Mon Sep 17 00:00:00 2001
From: Martin Kosek <mko...@redhat.com>
Date: Tue, 8 Nov 2011 17:59:45 +0100
Subject: [PATCH] Fix coverity issues in client CLI tools

This patch fixes 2 coverity issues:
 * ipa-client/config.c: CID 11090: Resource leak
 * ipa-client/ipa-getkeytab.c: CID 11018: Unchecked return value

https://fedorahosted.org/freeipa/ticket/2035
---
 ipa-client/config.c        |   20 ++++++++++++--------
 ipa-client/ipa-getkeytab.c |   10 +++++++++-
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/ipa-client/config.c b/ipa-client/config.c
index 493d740207ffca4275f512fad97d40e4f1e8fa05..95bd5c285cc785b354386ad41a73960888107af5 100644
--- a/ipa-client/config.c
+++ b/ipa-client/config.c
@@ -45,28 +45,29 @@
 char *
 read_config_file(const char *filename)
 {
-    int fd;
+    int fd = -1;
     struct stat st;
-    char *data, *dest;
+    char *data = NULL;
+    char *dest;
     size_t left;
 
     fd = open(filename, O_RDONLY);
     if (fd == -1) {
         fprintf(stderr, _("cannot open configuration file %s\n"), filename);
-        return NULL;
+        goto error_out;
     }
 
     /* stat() the file so we know the size and can pre-allocate the right
      * amount of memory. */
     if (fstat(fd, &st) == -1) {
         fprintf(stderr, _("cannot stat() configuration file %s\n"), filename);
-        return NULL;
+        goto error_out;
     }
     left = st.st_size;
     data = malloc(st.st_size + 1);
     if (data == NULL) {
         fprintf(stderr, _("out of memory\n"));
-        return NULL;
+        goto error_out;
     }
     dest = data;
     while (left != 0) {
@@ -77,9 +78,7 @@ read_config_file(const char *filename)
             break;
         if (res < 0) {
             fprintf(stderr, _("read error\n"));
-            close(fd);
-            free(dest);
-            return NULL;
+            goto error_out;
         }
         dest += res;
         left -= res;
@@ -87,6 +86,11 @@ read_config_file(const char *filename)
     close(fd);
     *dest = 0;
     return data;
+
+error_out:
+    if (fd != -1) close(fd);
+    if (data) free(data);
+    return NULL;
 }
 
 char *
diff --git a/ipa-client/ipa-getkeytab.c b/ipa-client/ipa-getkeytab.c
index 5a521d04127491193e971a00697f3e077796e01e..7218d7c54e527c0ecb92d0706c2310410e994036 100644
--- a/ipa-client/ipa-getkeytab.c
+++ b/ipa-client/ipa-getkeytab.c
@@ -89,7 +89,15 @@ static int ldap_sasl_interact(LDAP *ld, unsigned flags, void *priv_data, void *s
 				break;
 			}
 
-			krb5_unparse_name(krbctx, princ, &outname);
+			krberr = krb5_unparse_name(krbctx, princ, &outname);
+
+			if (krberr) {
+				fprintf(stderr, _("Unable to parse principal\n"));
+				in->result = NULL;
+				in->len = 0;
+				ret = LDAP_LOCAL_ERROR;
+				break;
+			}
 
 			in->result = outname;
 			in->len = strlen(outname);
-- 
1.7.6.4

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to