summaryrefslogtreecommitdiffstats
path: root/ipa-client
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2011-11-08 17:59:45 +0100
committerRob Crittenden <rcritten@redhat.com>2011-11-23 00:30:41 -0500
commit216505d2a066fd0afb8228b7f05089a7f7d5ab19 (patch)
tree4d94a74b4b32182534019b7d14b410d41181f11a /ipa-client
parentd24dda2fe3e188b4904deb184cc098d979e7f611 (diff)
downloadfreeipa-216505d2a066fd0afb8228b7f05089a7f7d5ab19.tar.gz
freeipa-216505d2a066fd0afb8228b7f05089a7f7d5ab19.tar.xz
freeipa-216505d2a066fd0afb8228b7f05089a7f7d5ab19.zip
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
Diffstat (limited to 'ipa-client')
-rw-r--r--ipa-client/config.c20
-rw-r--r--ipa-client/ipa-getkeytab.c14
2 files changed, 24 insertions, 10 deletions
diff --git a/ipa-client/config.c b/ipa-client/config.c
index 493d74020..ecc126ff4 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);
+ free(data);
+ return NULL;
}
char *
diff --git a/ipa-client/ipa-getkeytab.c b/ipa-client/ipa-getkeytab.c
index 5a521d041..28ef5b5a5 100644
--- a/ipa-client/ipa-getkeytab.c
+++ b/ipa-client/ipa-getkeytab.c
@@ -82,14 +82,24 @@ static int ldap_sasl_interact(LDAP *ld, unsigned flags, void *priv_data, void *s
krberr = krb5_init_context(&krbctx);
if (krberr) {
- fprintf(stderr, _("Kerberos context initialization failed\n"));
+ fprintf(stderr, _("Kerberos context initialization failed: %s (%d)\n"),
+ error_message(krberr), krberr);
in->result = NULL;
in->len = 0;
ret = LDAP_LOCAL_ERROR;
break;
}
- krb5_unparse_name(krbctx, princ, &outname);
+ krberr = krb5_unparse_name(krbctx, princ, &outname);
+
+ if (krberr) {
+ fprintf(stderr, _("Unable to parse principal: %s (%d)\n"),
+ error_message(krberr), krberr);
+ in->result = NULL;
+ in->len = 0;
+ ret = LDAP_LOCAL_ERROR;
+ break;
+ }
in->result = outname;
in->len = strlen(outname);