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;
