+ AllowOverride None
+ Options +Indexes
+ AuthName "SME Server Manager"
+ AuthType Basic
+ AuthBasicProvider external
+ AuthExternal pwauth
+ Require user admin $lprusers
+
+
+ AllowOverride None
+ Options +Indexes
+ AuthName "SME Server Manager"
+ AuthType Basic
+ AuthBasicProvider external
+ AuthExternal pwauth
+ Require user admin $lprusers
+
+
+ Options ExecCGI
+ AllowOverride None
+ Require all granted
+
+
+ Options ExecCGI FollowSymLinks
+ AllowOverride None
+ Require all granted
+
+# LPRng end
+HERE
+}
diff --git a/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/VirtualHosts/91LPRng b/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/VirtualHosts/91LPRng
new file mode 100644
index 0000000..3f1ea5d
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/VirtualHosts/91LPRng
@@ -0,0 +1,2 @@
+ ScriptAlias /LPRng/cgi-bin /var/www/html/LPRng/cgi-bin
+ ScriptAlias /LPRng/admin/cgi-bin /var/www/html/LPRng/admin/cgi-bin
diff --git a/root/etc/e-smith/web/functions/LPRng b/root/etc/e-smith/web/functions/LPRng
new file mode 100644
index 0000000..bea666a
--- /dev/null
+++ b/root/etc/e-smith/web/functions/LPRng
@@ -0,0 +1,74 @@
+#!/usr/bin/perl -wT
+
+#----------------------------------------------------------------------
+# heading : Administration
+# description : Printerqueue Admin
+# navigation : 4000 4390
+#
+# (c) Copyright 2002 by SACO Software and Consulting GmbH, Germany
+#----------------------------------------------------------------------
+
+package esmith;
+
+use strict;
+use CGI ':all';
+use CGI::Carp qw(fatalsToBrowser);
+
+use esmith::cgi;
+use esmith::db;
+use esmith::util;
+
+sub showInitial ($);
+
+BEGIN
+{
+ # Clear PATH and related environment variables so that calls to
+ # external programs do not cause results to be tainted. See
+ # "perlsec" manual page for details.
+
+ $ENV {'PATH'} = '/bin:/usr/bin';
+ $ENV {'SHELL'} = '/bin/bash';
+ delete $ENV {'ENV'};
+}
+
+esmith::util::setRealToEffective ();
+
+$CGI::POST_MAX=1024 * 100; # max 100K posts
+$CGI::DISABLE_UPLOADS = 1; # no uploads
+
+my %conf;
+tie %conf, 'esmith::config';
+
+#------------------------------------------------------------
+# examine state parameter and display the appropriate form
+#------------------------------------------------------------
+
+my $q = new CGI;
+
+if (! grep (/^state$/, $q->param))
+{
+ showInitial ($q);
+}
+else
+{
+ esmith::cgi::genStateError ($q, \%conf);
+}
+
+exit (0);
+
+#------------------------------------------------------------
+# subroutine to display initial form
+#------------------------------------------------------------
+
+sub showInitial ($)
+{
+ my ($q) = @_;
+
+ my $url = "/LPRng";
+ print $q->redirect(-location => $url);
+
+## these lines aren't that important, they just prevent a
+## premature end of script headers error
+ esmith::cgi::genHeaderNonCacheable ($q, \%conf, 'Printerqueue Admin');
+ esmith::cgi::genFooter ($q);
+}
diff --git a/root/usr/local/lprng/bin/lpinfo b/root/usr/local/lprng/bin/lpinfo
new file mode 100644
index 0000000..e60098d
--- /dev/null
+++ b/root/usr/local/lprng/bin/lpinfo
@@ -0,0 +1,1194 @@
+#!/usr/bin/perl
+#^^^^^^^^^^^^^^^^^^^^ Update pathname appropriately to where you have Perl installed
+# And update the path below of the configuration file as appropriate.
+
+$lpinfo_ph = "/usr/local/lprng/info/lpinfo.ph";
+
+
+#-------------- Should be fairly boilerplate from here on out --------------
+# lpinfo - a Web/command line "printtool" for LPRng
+# Copyright 1997, 1998, 1999, 2000 by Alek Komarnitsky,
+# Use and distribution of this software is covered by the GNU GPL license.
+# Please see the LICENSE file and http://www.gnu.org/
+# Script to provide misc. info on LPRng from the Web and command line.
+# Perhaps more bloated than we need ...
+
+$version="2.63";
+
+$updatetime = 5 ; # Number of seconds between autoupdates
+$testpageupdatetime = 3; # Number of seconds betwen auto-update on printing test page
+$timeout = 35; # Number of seconds for lpq's and other system stuff to timeout
+$| = 1; # This seems to be needed so system calls don't write "too fast" to STDOUT
+
+require 5.002;
+use Socket;
+
+# These are how I color code what is returned from the lpq status
+# It is used in both the "middle" and "bottom" displays, so I put it here.
+@orange = ("spooling disabled" , "who knows - NT Q" , "who knows - A-T Q" , "who knows - forward" , "appears busy" , "appears waiting" );
+@red = ("WARNING" , "not in printcap","printing disabled","cannot open conn", "Connection refused" , "No Access" ,"unknown printer" , "paper jam" , "P-S does not know" , "No AppleTalk printer status", "queue not enabled" , "bad queue name" , "Stopped - NT Q" , "queue is turned off" , "ink low" , "cannot chdir" , "remove media" , "lpq timed out" , "out of ink" , "(Paused)" );
+@green = ("0 jobs", "no printable jobs" , "Ready" , "No Status" );
+@blue = ("job" );
+
+# Grab stuff from lpinfo.ph ...
+if ( -r "$lpinfo_ph" ) {
+ require "$lpinfo_ph";
+} else {
+ print "could not open $lpinfo_ph - serious error ... \n";
+ exit(2);
+}
+
+if ( ! ( ($lpq_all_dir) and ( -r "$lpq_all_dir/current" ) and ( ! -z "$lpq_all_dir/current") ) ) {
+ $lpq_all_dir = 0 ;
+}
+
+# See if we are running in a command line or as a CGI
+$html = 1 if (length($ENV{GATEWAY_INTERFACE}));
+$lookup_info = 1 if ( -d $info_dir );
+$locations_file = 0 if ( ! -r $locations_file );
+
+# Here we determine if hacks are allowed ... ;-)
+if (( -r "/etc/resolv.conf" ) && (`cat /etc/resolv.conf` =~ "SITE.com" )) {
+ $site_hacks = 1;
+}
+
+
+if ( $html ) {
+ print "Content-type: text/html\n\n\n" ;
+ print $meta_tags if (defined($meta_tags));
+ &ReadParse;
+ # Turn on admin mode as appropriate ...
+ $adminmode = 1;
+ $_ = &get_env_variable("^SCRIPT_NAME");
+ if ( $_ eq $thisURLadmin ) {
+ $thisURL = $thisURLadmin;
+ $_ = &get_env_variable("^REMOTE_USER");
+ $adminmode = $_;
+ $adminmode = "nobody" if ($adminmode eq "");
+ }
+ $counter2 = &Increment_Accumulator($count_file2) if (($count_file2) && (-w $count_file2));
+ $lpqlevel = -1;
+ $lpqlevel = $in{'lpqlevel'} if (defined($in{'lpqlevel'}));
+
+ # Generate some JavaScript to fire up new mode of operation ...
+ if (( defined($in{'poweruseron'}) ) || ( defined($in{'normaluseron'})) || ( defined($in{'adminmodeon'})) ) {
+ print "";
+ exit();
+ }
+
+ # Show the middle frame at startup ...
+ if ( defined($in{'show_middle_frame'}) ) {
+ if ( $webservers_subnets_file) {
+ print "Other Web Servers ";
+### print "debug";
+ }
+ $counter0 = &Get_Accumulator($count_file0) if (($count_file0) && (-r $count_file0));
+ $counter1 = &Increment_Accumulator($count_file1) if (($count_file1) && ( -w $count_file1));
+ $tempvar = "$counter1-$counter2" if (($counter1) && ($counter2));
+ $tempvar = "$counter0-$counter1-$counter2" if (( $counter0) && ($counter1) && ($counter2));
+ $_ = `uname -n`;
+ $tempvar = "($version: $tempvar - $_)";
+ print "Questions/suggestions on this web page can be directed to $email_address $tempvar";
+ exit();
+ }
+
+
+ # show initial page
+ if ( (!defined($in{'location'})) && ( !defined($in{'showqueue'})) && ( !defined($in{'printer'} )) && ( !defined($in{'auto'})) && ( !defined($in{'show_web_servers'})) && ( !defined($in{'getinfo'})) ) {
+ $counter0 = &Increment_Accumulator($count_file0) if (($count_file0) && (-w $count_file0) && ($adminmode));
+ print "
";
+ &clear_window("bottom");
+
+ # Generate admin table of contents in middle frame
+ } elsif ( defined($in{'adminsetup'})) {
+ print "";
+ &clear_window("bottom");
+
+ # Various lpc commands ...
+ } elsif ( (defined($in{'lpc_restart'})) || (defined($in{'lpc_release'})) || (defined($in{'lpc_enable'})) || (defined($in{'lpc_disable'})) || (defined($in{'lpc_pause'})) || (defined($in{'lpc_resume'})) ) {
+ if ($adminmode ) {
+ $_ = &get_env_variable("^REMOTE_ADDR");
+ if ( $_ ne "" ) {
+ @iplist = split(/\./,$_);
+ $ip = pack('C4',@iplist);
+ $browserhost = gethostbyaddr($ip,AF_INET);
+ }
+ $browserhost = &get_env_variable("^REMOTE_ADDR") if ( $browserhost eq "" );
+ if (defined($in{'lpc_restart'})) {
+ $lpc_options = "kill";
+ } elsif (defined($in{'lpc_release'})) {
+ $lpc_options = "release";
+ } elsif (defined($in{'lpc_enable'})) {
+ $lpc_options = "enable";
+ } elsif (defined($in{'lpc_disable'})) {
+ $lpc_options = "disable";
+ } elsif (defined($in{'lpc_pause'})) {
+ $lpc_options = "PA";
+ } elsif (defined($in{'lpc_resume'})) {
+ $lpc_options = "RE";
+ } else {
+ print "Could not figure out option to pass to lpc ...";
+ exit(2);
+ }
+ $printserver = "unix";
+ $queue_is_nt = &check_if_nt_queue($in{'printer'});
+ if ( $queue_is_nt) {
+ $printserver = &get_printserver($in{'printer'});
+ }
+ $_ = `$lpc_suid $adminmode $browserhost $in{'printer'} $printserver $lpc_options`;
+ print "$_ ";
+ } else {
+ print "You have not enabled adminmode ...";
+ }
+
+ # Misc. Admin fucntions/documentation ...
+ } elsif ( defined($in{'showactivebroke'})) {
+ if ( $lpq_all_dir ) {
+ $days = -M "$lpq_all_dir/current";
+ $minutes = int (60 * 24 * $days);
+ print "";
+ print "\"active/broke\" printers from an \"lpq-all\" run $minutes minutes ago
";
+ print "Transient Network and/or Print Server outages may result in reds
";
+ print "Queue Status Printer Name Description
";
+ print "
";
+ open (LPQALL,"<$lpq_all_dir/current") || ( print "Can't open $lpq_all_dir/current: $!" || die() ) ;
+ while () {
+ chomp ();
+ ($color,$results,$printer) = split(" +");
+ printf "%s%-22s%s%s%-24s" ,"" , $results , "" ,"", "$printer";
+ if ( $lookup_info ) {
+ $description = &get_shortinfo($printer);
+ }
+ print "
";
+ }
+ close (LPQALL);
+ } else {
+ print "Does not appear to be active/broke queue data available
";
+ }
+
+ # Show mis-configured queues ...
+ } elsif ( defined($in{'misconfigured'})) {
+ print "";
+ print "List of queues that are mis-configured";
+ print "
";
+ open (MISCONFIGURED,"<$misconfigured") || ( print "Can't open $misconfigured: $!" || die() ) ;
+ while () {
+ print $_;
+ }
+ close (MISCONFIGURED);
+
+ # Check LPRng print servers
+ } elsif ( defined($in{'checkprintservers'})) {
+ print "Checking status of LPRng print servers
";
+ printf "Print Server Status
";
+ open (SERVERS,"<$lprng_print_servers") || print "Can't open $lprng_print_servers: $!" ;
+ while () {
+ chomp($printer = $_ );
+ $results = `$lpc -Plp\@$printer lpd`;
+ chomp ($results);
+ if (( "$results" =~ "Server PID" ) || ( "$results" =~ "lpd server pid") ) {
+ printf "%s%-16s%s" ,"" , "$printer" , "OK - $results";
+ } else {
+ printf "%s%-16s%s" ,"" , "$printer", "$results";
+ }
+ print "
";
+ }
+ close (SERVERS);
+
+ # Print a test page ...
+ } elsif ( defined($in{'testpage'})) {
+ print "Printing test page to $in{'printer'}
\n";
+ $banner = "echo" if ( ! -x $banner );
+ $testpage = "/tmp/lp-testpage-$$";
+ open(TESTPAGE,">$testpage") || print "Can't open $testpage: $!" ;
+ $_ = `$banner -w40 "lpinfo"`;
+ print TESTPAGE "$_ \n\n";
+ $_ = `$banner -w40"test\ page"`;
+ print TESTPAGE "$_ \n\n\n\n\n";
+ $_ = `date`;
+ print TESTPAGE "printed to queue $in{'printer'} on $_ \n\n\014";
+ close(TESTPAGE);
+ system ("$lpr -h -P$in{'printer'} $testpage");
+ system ("rm $testpage");
+ print "