--- configure.in
+++ configure.in
@@ -1421,6 +1421,7 @@
 AC_MSG_RESULT(using $SHELL (FORCED))
 
 AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION(0.12)
 
 dnl XX AC_MSG_RESULT([LIBS $LIBS, INTLLIBS $INTLLIBS])
 dnl XX  if test "${USE_NLS}" = yes; then
@@ -1880,7 +1881,6 @@
 src/Makefile
 src/pclbanner
 src/psbanner
-po/Makefile.in
 ],
 [
 for i in  \
--- lpd.conf.SuSE
+++ lpd.conf.SuSE
@@ -0,0 +1,26 @@
+# See "man lpd.conf" for a list of options you can set here.
+#     check_for_nonprintable
+#   means the 'check_for_nonprintable' option default value is on or 1
+#   To set it to OFF or 0, change this to read:
+#     check_for_nonprintable@
+check_for_nonprintable@
+client_config_file=/etc/lpd.conf
+filter_ld_path=/lib:/usr/lib:/usr/X11R6/lib:/usr/local/lib
+filter_path=/bin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin:/usr/lib/filters:/usr/X11R6/bin
+mail_operator_on_error=root
+pr=/usr/bin/pr
+printcap_path=/etc/printcap
+# If you distribute your printcap entries through NIS,
+# use the following line instead:
+#printcap_path=|/usr/lib/yp/match_printcap
+printer_perms_path=/etc/lpd.perms
+server_config_file=/etc/lpd.conf
+server_user=lp
+user=lp
+group=lp
+# If your printer doesn't print the job remove the "@" from the following
+# line. (for example necessary for HP4M with a JetDirect Card)
+send_data_first@
+mc#0
+send_try#0
+max_connect_interval#10
--- lpd.perms.SuSE
+++ lpd.perms.SuSE
@@ -0,0 +1,2 @@
+# See "man lpd.perms" for a list of options you can set here.
+DEFAULT ACCEPT
--- man/lpd.conf.n
+++ man/lpd.conf.n
@@ -548,8 +548,12 @@
 the send_failure_action value is used to determine what to do on failure.
 .TP
 \fBsend_try\fR (default: 3)
-Numbers of times to try to send a job to the printer or remote host.
-A 0 value means an infinite number of times.
+Numbers of times to try to send a job to the printer or remote host. A
+pause of
+max(max_connect_interval, connect_interval*2^max(8, number of attempts - 1))
+seconds is inserted between consecutive attempts.
+A 0 or/and a negative value means an infinite number of times, but
+no pause is inserted for a negative value.
 .TP
 \fBsendmail\fR (default: "/usr/lib/sendmail -oi -t")
 If the argument is empty then all mail_related
--- printcap
+++ printcap
@@ -1,3 +1,16 @@
+# /etc/printcap: printer capability database. See printcap(5).
+# You can use the filter entries df, tf, cf, gf etc. for
+# your own filters. See the printcap(5) manual page for further
+# details.
+#
+# Default Postscript printer on "print-serv"
+#lp|ps|postscript:\
+#        :client:lp=postscript@print-serv
+#lp|ps|postscript:\
+#        :server:oh=print-serv:\
+#        :sd=/var/spool/lpd/ps:\
+#        :lp=/dev/lp1:\
+#        :sh:mx#0
 ## The Super Quick Guide to LPRng Printcaps
 ##  Patrick Powell <papowell@lprng.com>
 ##     Thu Nov 15 13:31:08 PST 2001
@@ -7,9 +20,9 @@
 #    The printcap entry below sets defaults.  Add default options
 #    or other entries here
 #
-.common:
-   :sd=/var/spool/lpd/%P
-   :sh:mx=0:mc=0
+#.common:
+#   :sd=/var/spool/lpd/%P
+#   :sh:mx=0:mc=0
 #
 #   [Translation:
 #   .common - the period (.) causes LPRng to treat this as a 'information
--- rc.lpd
+++ rc.lpd
@@ -0,0 +1,153 @@
+#! /bin/sh
+# Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany.
+#
+# Author: Thorsten Kukuk <feedback@suse.de>
+#
+# init.d/lpd
+#
+#   and symbolic its link
+#
+# /usr/sbin/rclpd
+#
+# System startup script for the lpd daemon
+#
+### BEGIN INIT INFO
+# Provides: lpd
+# Required-Start: $network $remote_fs syslog
+# Required-Stop: $network
+# Default-Start: 2 3 5
+# Default-Stop: 0 1 4 6
+# Description: Start lpd to allow printing
+### END INIT INFO
+
+LPD_BIN=/usr/sbin/lpd
+test -x $LPD_BIN || exit 5
+
+# Shell functions sourced from /etc/rc.status:
+#      rc_check         check and set local and overall rc status
+#      rc_status        check and set local and overall rc status
+#      rc_status -v     ditto but be verbose in local rc status
+#      rc_status -v -r  ditto and clear the local rc status
+#      rc_failed        set local and overall rc status to failed
+#      rc_reset         clear local rc status (overall remains)
+#      rc_exit          exit appropriate to overall rc status
+. /etc/rc.status
+
+# First reset status of this service
+rc_reset
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - misc error
+# 2 - invalid or excess args
+# 3 - unimplemented feature (e.g. reload)
+# 4 - insufficient privilege
+# 5 - program not installed
+# 6 - program not configured
+#
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signalling is not supported) are
+# considered a success.
+
+case "$1" in
+    start)
+	echo -n "Starting lpd"
+	## Start daemon with startproc(8). If this fails
+	## the echo return value is set appropriate.
+
+	## first run checkpc
+        #
+	checkpc -f
+
+	# startproc should return 0, even if service is
+	# already running to match LSB spec.
+	startproc $LPD_BIN
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    stop)
+	echo -n "Shutting down lpd"
+	## Stop daemon with killproc(8) and if this fails
+	## set echo the echo return value.
+
+	killproc -TERM $LPD_BIN -p /var/run/lpd.printer
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    try-restart)
+	## Stop the service and if this succeeds (i.e. the
+	## service was running before), start it again.
+	$0 status >/dev/null && $0 restart
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    restart)
+	## Stop the service and regardless of whether it was
+	## running or not, start it again.
+	$0 stop
+	$0 start
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    force-reload)
+	## Signal the daemon to reload its config. Most daemons
+	## do this on signal 1 (SIGHUP).
+	## If it does not support it, restart.
+
+	echo -n "Reload service lpd"
+	$0 stop
+       $0 start
+	rc_status
+
+	;;
+    reload)
+	## Like force-reload, but if daemon does not support
+	## signalling, do nothing (!)
+
+	# If it supports signalling:
+	echo -n "Reload service lpd"
+	killproc -HUP $LPD_BIN
+	rc_status -v
+
+	# If it does not support reload:
+	#exit 3
+	;;
+    status)
+	echo -n "Checking for lpd: "
+	## Check status with checkproc(8), if process is running
+	## checkproc will return with exit status 0.
+
+	# Status has a slightly different for the status command:
+	# 0 - service running
+	# 1 - service dead, but /var/run/  pid  file exists
+	# 2 - service dead, but /var/lock/ lock file exists
+	# 3 - service not running
+
+	# If checkproc would return LSB compliant ret values,
+	# things could be a little bit easier here. This will
+	# probably soon be the case ...
+	rc_checkproc() {
+		checkproc $1 || {
+			test -e $2 && return 1 || return 3
+		}
+	}
+	rc_checkproc $LPD_BIN /var/run/lpd.printer
+	rc_status -v
+	;;
+    probe)
+	## Optional: Probe for the necessity of a reload,
+	## give out the argument which is required for a reload.
+
+	test /etc/lpd.conf -nt /var/run/lpd.printer && echo reload
+	;;
+    *)
+	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
+	exit 1
+	;;
+esac
+rc_exit
--- src/common/checkpc.c
+++ src/common/checkpc.c
@@ -579,12 +579,22 @@
 		} else if(!S_ISREG(statb.st_mode)) {
 			WARNMSG("'%s' filter '%s' not a file", id, s);
 		} else {
-			n = statb.st_mode & 0111;
+			n = statb.st_mode & 0777;
 			if( !(n & 0001)
 				&& !((n & 0010) && statb.st_gid == DaemonGID )
 				&& !((n & 0100) && statb.st_uid == DaemonUID ) ){
 				WARNMSG("'%s' filter '%s' does not have execute perms",
 					id, s );
+				if( Fix )
+				{
+				    if( statb.st_uid == DaemonUID ) n |= 0100;
+				    else if( statb.st_gid == DaemonGID ) n |=0010;
+				    else n |=0001;
+
+				    WARNMSG("setting perms of '%s' filter '%s' to '0%o'", id, s, n);
+				    Fix_perms(s, n);
+				}
+
 			}
 		}
 	}
--- src/common/fileopen.c
+++ src/common/fileopen.c
@@ -169,6 +169,12 @@
 			fd = tfd;
 		}
     }
+        if (create) {
+                if (fchown(fd, DaemonUID, DaemonGID) < 0) {
+                        LOGERR(LOG_ERR) "Checkwrite: fchown of '%s' failed", file);
+                        status = -1;
+                }
+        }
 	if( status < 0 ){
 		close( fd );
 		fd = -1;
--- src/common/lpd_jobs.c
+++ src/common/lpd_jobs.c
@@ -2537,7 +2537,7 @@
 		if( device_fd < 0 ){
 			DEBUG1( "Printer_open: open '%s' failed, max_attempts %d, attempt %d '%s'",
 				lp_device, max_attempts, attempt, Errormsg(err) );
-			if( max_attempts && attempt <= max_attempts ){
+			if( !max_attempts || attempt <= max_attempts ){
 				n = 8;
 				if( attempt < n ) n = attempt;
 				n = interval*( 1 << n );
