Author: gd
Date: 2006-10-02 12:06:49 +0000 (Mon, 02 Oct 2006)
New Revision: 19039

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19039

Log:
Do not segfault in "net ads printer info" when a requested printserver
does not exist.

Guenther

Modified:
   branches/SAMBA_3_0/source/libads/ldap_printer.c
   branches/SAMBA_3_0/source/utils/net_ads.c
   branches/SAMBA_3_0_23/source/libads/ldap_printer.c
   branches/SAMBA_3_0_23/source/utils/net_ads.c


Changeset:
Modified: branches/SAMBA_3_0/source/libads/ldap_printer.c
===================================================================
--- branches/SAMBA_3_0/source/libads/ldap_printer.c     2006-10-02 11:35:41 UTC 
(rev 19038)
+++ branches/SAMBA_3_0/source/libads/ldap_printer.c     2006-10-02 12:06:49 UTC 
(rev 19039)
@@ -41,8 +41,18 @@
                          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);

Modified: branches/SAMBA_3_0/source/utils/net_ads.c
===================================================================
--- branches/SAMBA_3_0/source/utils/net_ads.c   2006-10-02 11:35:41 UTC (rev 
19038)
+++ branches/SAMBA_3_0/source/utils/net_ads.c   2006-10-02 12:06:49 UTC (rev 
19039)
@@ -1634,7 +1634,8 @@
        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;

Modified: branches/SAMBA_3_0_23/source/libads/ldap_printer.c
===================================================================
--- branches/SAMBA_3_0_23/source/libads/ldap_printer.c  2006-10-02 11:35:41 UTC 
(rev 19038)
+++ branches/SAMBA_3_0_23/source/libads/ldap_printer.c  2006-10-02 12:06:49 UTC 
(rev 19039)
@@ -40,8 +40,18 @@
                          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);

Modified: branches/SAMBA_3_0_23/source/utils/net_ads.c
===================================================================
--- branches/SAMBA_3_0_23/source/utils/net_ads.c        2006-10-02 11:35:41 UTC 
(rev 19038)
+++ branches/SAMBA_3_0_23/source/utils/net_ads.c        2006-10-02 12:06:49 UTC 
(rev 19039)
@@ -1426,7 +1426,8 @@
        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;

Reply via email to