summaryrefslogtreecommitdiffstats
path: root/usr.sbin/lpr/common_source
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1999-04-27 07:09:18 +0000
committerjkh <jkh@FreeBSD.org>1999-04-27 07:09:18 +0000
commitaba5e776bb95610ea3e3355cbf47aadb844773eb (patch)
treef694a1be41be9a102fed7c6f8993388aa612b95b /usr.sbin/lpr/common_source
parentd3809450efbb1bc19acc8a7c487c2fe2b536e366 (diff)
downloadFreeBSD-src-aba5e776bb95610ea3e3355cbf47aadb844773eb.zip
FreeBSD-src-aba5e776bb95610ea3e3355cbf47aadb844773eb.tar.gz
lpd tries to be clever and checks if RM == my_hostname.
However, it doesn't check if the remote printer name it is sending it to is the same as the local printer name, and so chokes 'cos "laser" is not a real printer. PR: 7081 Submitted by: David Malone <dwmalone@maths.tcd.ie>
Diffstat (limited to 'usr.sbin/lpr/common_source')
-rw-r--r--usr.sbin/lpr/common_source/lp.h3
-rw-r--r--usr.sbin/lpr/common_source/net.c7
-rw-r--r--usr.sbin/lpr/common_source/printcap.c18
3 files changed, 25 insertions, 3 deletions
diff --git a/usr.sbin/lpr/common_source/lp.h b/usr.sbin/lpr/common_source/lp.h
index 8b3cd5f..7ab0e76 100644
--- a/usr.sbin/lpr/common_source/lp.h
+++ b/usr.sbin/lpr/common_source/lp.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* From: @(#)lp.h 8.2 (Berkeley) 4/28/95
- * $Id$
+ * $Id: lp.h,v 1.7 1997/12/02 20:45:21 wollman Exp $
*/
#include <sys/queue.h>
@@ -50,6 +50,7 @@ enum lpd_filters { LPF_CIFPLOT, LPF_DVI, LPF_GRAPH, LPF_INPUT,
struct printer {
char *printer; /* printer name */
int remote; /* true if RM points to a remote host */
+ int rp_matches_local; /* true if rp has same name as us */
int tof; /* true if we are at top-of-form */
/* ------------------------------------------------------ */
char *acct_file; /* AF: accounting file */
diff --git a/usr.sbin/lpr/common_source/net.c b/usr.sbin/lpr/common_source/net.c
index d5886f9..05c8085 100644
--- a/usr.sbin/lpr/common_source/net.c
+++ b/usr.sbin/lpr/common_source/net.c
@@ -40,7 +40,7 @@
#ifndef lint
static const char rcsid[] =
- "$Id$";
+ "$Id: net.c,v 1.1 1997/12/02 20:45:22 wollman Exp $";
#endif /* not lint */
#include <sys/param.h>
@@ -160,6 +160,11 @@ checkremote(struct printer *pp)
struct in_addr *localaddrs;
int i, j, nlocaladdrs, ncommonaddrs;
+ if (!pp->rp_matches_local) { /* Remote printer doesn't match local */
+ pp->remote = 1;
+ return NULL;
+ }
+
pp->remote = 0; /* assume printer is local */
if (pp->remote_host != NULL) {
/* get the addresses of the local host */
diff --git a/usr.sbin/lpr/common_source/printcap.c b/usr.sbin/lpr/common_source/printcap.c
index a061c0e..ff82589 100644
--- a/usr.sbin/lpr/common_source/printcap.c
+++ b/usr.sbin/lpr/common_source/printcap.c
@@ -40,7 +40,7 @@
#ifndef lint
static const char rcsid[] =
- "$Id: printcap.c,v 1.3 1997/12/02 20:45:25 wollman Exp $";
+ "$Id: printcap.c,v 1.4 1997/12/27 20:49:39 wollman Exp $";
#endif /* not lint */
#include <errno.h>
@@ -215,6 +215,8 @@ getprintcap_int(bp, pp)
struct printer *pp;
{
enum lpd_filters filt;
+ char *rp_name;
+ int error;
if ((pp->printer = capdb_canonical_name(bp)) == 0)
return PCAPERR_OSERR;
@@ -263,6 +265,20 @@ getprintcap_int(bp, pp)
pp->tof = !capdb_getaltlog(bp, "fo", "job.topofform");
/*
+ * Decide if the remote printer name matches the local printer name.
+ * If no name is given then we assume they mean them to match.
+ * If a name is given see if the rp_name is one of the names for
+ * this printer.
+ */
+ pp->rp_matches_local = 1;
+ CHK((error = capdb_getaltstr(bp, "rp", "remote.queue", 0, &rp_name)));
+ if (error != PCAPERR_NOTFOUND && rp_name != NULL) {
+ if (cgetmatch(bp,rp_name) != 0)
+ pp->rp_matches_local = 0;
+ free(rp_name);
+ }
+
+ /*
* Filters:
*/
for (filt = 0; filt < LPF_COUNT; filt++) {
OpenPOWER on IntegriCloud