svn commit: samba r19039 - in branches: SAMBA_3_0/source/libads SAMBA_3_0/source/utils SAMBA_3_0_23/source/libads SAMBA_3_0_23/source/utils

gd at samba.org gd at samba.org
Mon Oct 2 12:06:50 GMT 2006


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;



More information about the samba-cvs mailing list