diff options
author | Jeremy Allison <jeremy@jeremy-desktop.(none)> | 2008-12-23 11:27:19 -0800 |
---|---|---|
committer | Jeremy Allison <jeremy@jeremy-desktop.(none)> | 2008-12-23 11:27:19 -0800 |
commit | b143938b8afaa7c7759e09228cc0d92ff97121d0 (patch) | |
tree | e9de7fc2f589705c0eadbe28fcbd9e00baff942a /source3/libads | |
parent | 7c6a20a439e5e6e9b4149df77896eea57d931e73 (diff) | |
download | samba-b143938b8afaa7c7759e09228cc0d92ff97121d0.tar.gz samba-b143938b8afaa7c7759e09228cc0d92ff97121d0.tar.bz2 samba-b143938b8afaa7c7759e09228cc0d92ff97121d0.zip |
Fix more asprintf errors and error code paths.
Jeremy.
Diffstat (limited to 'source3/libads')
-rw-r--r-- | source3/libads/ldap.c | 14 | ||||
-rw-r--r-- | source3/libads/ldap_printer.c | 26 |
2 files changed, 31 insertions, 9 deletions
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index cf8a7ebb1b..a598580941 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -603,7 +603,10 @@ got_connection: /* Must use the userPrincipalName value here or sAMAccountName and not servicePrincipalName; found by Guenther Deschner */ - asprintf(&ads->auth.user_name, "%s$", global_myname() ); + if (asprintf(&ads->auth.user_name, "%s$", global_myname() ) == -1) { + DEBUG(0,("ads_connect: asprintf fail.\n")); + ads->auth.user_name = NULL; + } } if (!ads->auth.realm) { @@ -619,10 +622,11 @@ got_connection: /* this is a really nasty hack to avoid ADS DNS problems. It needs a patch to MIT kerberos to work (tridge) */ { - char *env; - asprintf(&env, "KRB5_KDC_ADDRESS_%s", ads->config.realm); - setenv(env, ads->auth.kdc_server, 1); - free(env); + char *env = NULL; + if (asprintf(&env, "KRB5_KDC_ADDRESS_%s", ads->config.realm) > 0) { + setenv(env, ads->auth.kdc_server, 1); + free(env); + } } #endif 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; } |