summaryrefslogtreecommitdiff
path: root/source3/libads/ldap_printer.c
diff options
context:
space:
mode:
authorJeremy Allison <jeremy@jeremy-desktop.(none)>2008-12-23 11:27:19 -0800
committerJeremy Allison <jeremy@jeremy-desktop.(none)>2008-12-23 11:27:19 -0800
commitb143938b8afaa7c7759e09228cc0d92ff97121d0 (patch)
treee9de7fc2f589705c0eadbe28fcbd9e00baff942a /source3/libads/ldap_printer.c
parent7c6a20a439e5e6e9b4149df77896eea57d931e73 (diff)
downloadsamba-b143938b8afaa7c7759e09228cc0d92ff97121d0.tar.gz
samba-b143938b8afaa7c7759e09228cc0d92ff97121d0.tar.bz2
samba-b143938b8afaa7c7759e09228cc0d92ff97121d0.zip
Fix more asprintf errors and error code paths.
Jeremy.
Diffstat (limited to 'source3/libads/ldap_printer.c')
-rw-r--r--source3/libads/ldap_printer.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/source3/libads/ldap_printer.c b/source3/libads/ldap_printer.c
index 0a42f00b39..169c3bba1d 100644
--- a/source3/libads/ldap_printer.c
+++ b/source3/libads/ldap_printer.c
@@ -31,7 +31,7 @@
const char *servername)
{
ADS_STATUS status;
- char *srv_dn, **srv_cn, *s;
+ char *srv_dn, **srv_cn, *s = NULL;
const char *attrs[] = {"*", "nTSecurityDescriptor", NULL};
status = ads_find_machine_acct(ads, res, servername);
@@ -41,25 +41,43 @@
return status;
}
if (ads_count_replies(ads, *res) != 1) {
+ if (res) {
+ ads_msgfree(ads, *res);
+ *res = NULL;
+ }
return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
}
srv_dn = ldap_get_dn(ads->ldap.ld, *res);
if (srv_dn == NULL) {
+ if (res) {
+ ads_msgfree(ads, *res);
+ *res = NULL;
+ }
return ADS_ERROR(LDAP_NO_MEMORY);
}
srv_cn = ldap_explode_dn(srv_dn, 1);
if (srv_cn == NULL) {
ldap_memfree(srv_dn);
+ if (res) {
+ ads_msgfree(ads, *res);
+ *res = NULL;
+ }
return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
}
- ads_msgfree(ads, *res);
+ if (res) {
+ ads_msgfree(ads, *res);
+ *res = NULL;
+ }
- asprintf(&s, "(cn=%s-%s)", srv_cn[0], printer);
+ if (asprintf(&s, "(cn=%s-%s)", srv_cn[0], printer) == -1) {
+ ldap_memfree(srv_dn);
+ return ADS_ERROR(LDAP_NO_MEMORY);
+ }
status = ads_search(ads, res, s, attrs);
ldap_memfree(srv_dn);
ldap_value_free(srv_cn);
- free(s);
+ SAFE_FREE(s);
return status;
}