bug 9830: fix panic in nt_printer_publish_ads
authorDavid Disseldorp <ddiss@samba.org>
Thu, 25 Apr 2013 14:41:17 +0000 (16:41 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 25 Apr 2013 17:01:55 +0000 (19:01 +0200)
Check for ads_find_machine_acct() errors, to ensure a NULL LDAPMessage
pointer doesn't get passed to ldap_get_dn().

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-By: Günther Deschner <gd@samba.org>
Autobuild-User(master): Günther Deschner <gd@samba.org>
Autobuild-Date(master): Thu Apr 25 19:01:55 CEST 2013 on sn-devel-104

source3/printing/nt_printing_ads.c

index b99a972980e8c0304da60d7be65236ebb6c89480..3a2baf40f5e742c6e446b0e6ab6b764a07fb4a11 100644 (file)
@@ -192,17 +192,23 @@ static WERROR nt_printer_publish_ads(struct messaging_context *msg_ctx,
        DEBUG(5, ("publishing printer %s\n", printer));
 
        /* figure out where to publish */
-       ads_find_machine_acct(ads, &res, lp_netbios_name());
+       ads_rc = ads_find_machine_acct(ads, &res, lp_netbios_name());
+       if (!ADS_ERR_OK(ads_rc)) {
+               DEBUG(0, ("failed to find machine account for %s\n",
+                         lp_netbios_name()));
+               TALLOC_FREE(ctx);
+               return WERR_NOT_FOUND;
+       }
 
        /* We use ldap_get_dn here as we need the answer
         * in utf8 to call ldap_explode_dn(). JRA. */
 
        srv_dn_utf8 = ldap_get_dn((LDAP *)ads->ldap.ld, (LDAPMessage *)res);
+       ads_msgfree(ads, res);
        if (!srv_dn_utf8) {
                TALLOC_FREE(ctx);
                return WERR_SERVER_UNAVAILABLE;
        }
-       ads_msgfree(ads, res);
        srv_cn_utf8 = ldap_explode_dn(srv_dn_utf8, 1);
        if (!srv_cn_utf8) {
                TALLOC_FREE(ctx);