r19039: Do not segfault in "net ads printer info" when a requested printserver
authorGünther Deschner <gd@samba.org>
Mon, 2 Oct 2006 12:06:49 +0000 (12:06 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:15:04 +0000 (12:15 -0500)
does not exist.

Guenther

source/libads/ldap_printer.c
source/utils/net_ads.c

index 50233140f0bbe8df30ac5d80b19412dc194352a4..f5168b05af0cf45abe98b6d024416e1175f07102 100644 (file)
                          servername));
                return status;
        }
+       if (ads_count_replies(ads, *res) != 1) {
+               return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
+       }
        srv_dn = ldap_get_dn(ads->ld, *res);
+       if (srv_dn == NULL) {
+               return ADS_ERROR(LDAP_NO_MEMORY);
+       }
        srv_cn = ldap_explode_dn(srv_dn, 1);
+       if (srv_cn == NULL) {
+               ldap_memfree(srv_dn);
+               return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
+       }
        ads_msgfree(ads, *res);
 
        asprintf(&s, "(cn=%s-%s)", srv_cn[0], printer);
index 2593a59603e51fe67c2594afd157360dee3165c1..53d9f65d6b8c3a169264aa5c6ee61010d8f57516 100644 (file)
@@ -1634,7 +1634,8 @@ static int net_ads_printer_info(int argc, const char **argv)
        rc = ads_find_printer_on_server(ads, &res, printername, servername);
 
        if (!ADS_ERR_OK(rc)) {
-               d_fprintf(stderr, "ads_find_printer_on_server: %s\n", ads_errstr(rc));
+               d_fprintf(stderr, "Server '%s' not found: %s\n", 
+                       servername, ads_errstr(rc));
                ads_msgfree(ads, res);
                ads_destroy(&ads);
                return -1;