Private
Server IP : 195.201.23.43  /  Your IP : 3.137.214.24
Web Server : Apache
System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64
User : kdecoratie ( 1041)
PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/webmin/lpadmin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /usr/share/webmin/lpadmin/save_printer.cgi
#!/usr/bin/perl
# save_printer.cgi
# Create or modify a printer

require './lpadmin-lib.pl';
&ReadParse();
&error_setup($text{'save_err'});

if ($in{'delete'}) {
	# Redirect to delete page
	&redirect("delete_printer.cgi?name=".&urlize($in{'name'}));
	return;
	}

# Check ACL
if ($in{'new'}) {
	$access{'add'} || &error($text{'save_eadd'});
	}
else {
	&can_edit_printer($in{'name'}) ||
		&error($text{'save_eedit'});
	}

# validate and store printer details
$in{'name'} =~ /^[A-z0-9\-\_\.]+$/ ||
	&error(&text('save_ename', $in{'name'}));
if ($in{'new'} && &get_printer($in{'name'})) {
	&error(&text('save_edup', $in{'name'}));
	}
$prn{'name'} = $in{'name'};
$prn{'accepting'} = $in{'accepting'};
if (!$prn{'accepting'}) { $prn{'accepting_why'} = $in{'accepting_why'}; }
$prn{'enabled'} = $in{'enabled'};
if (!$prn{'enabled'}) { $prn{'enabled_why'} = $in{'enabled_why'}; }
$prn{'desc'} = $in{'desc'};
if (&printer_support('allow')) {
	@ul = split(/\s+/, $in{'users'});
	if ($in{'access'} == 0) { $prn{'allow_all'}++; }
	elsif ($in{'access'} == 1) { $prn{'deny_all'}++; }
	else {
		$w = $in{'access'} == 2 ? "allow" : "deny";
		if (!@ul) { &error($text{"save_e$w"}); }
		foreach $u (@ul) {
			if ($u !~ /^\S+\!\S+$/ && !(@dummy=getpwnam($u))) {
				&error(&text('save_euser', $u));
				}
			}
		$prn{$w} = \@ul;
		}
	}
if (&printer_support('banner')) {
	$prn{'banner'} = $in{'prbanner'};
	}
if (&printer_support('ctype')) {
	if ($in{'ctype_simple'}) { push(@ctype, "simple"); }
	if ($in{'ctype_postscript'}) { push(@ctype, "postscript"); }
	if ($in{'ctype_other'}) {
		push(@ctype, split(/\s+/, $in{'ctype_olist'}));
		}
	&error($text{'save_etype'}) if (!@ctype && $in{'dest'} != 2);
	$prn{'ctype'} = \@ctype;
	}
$prn{'default'} = $in{'default'};
if (&printer_support('msize')) {
	if ($in{'msize_def'} == 2) {
		$prn{'msize'} = 0;
		}
	elsif ($in{'msize_def'} == 0) {
		$in{'msize'} =~ /^\d+$/ ||
			&error($text{'save_emax'});
		$prn{'msize'} = $in{'msize'};
		}
	}
if (&printer_support('alias')) {
	@alias = split(/\s+/, $in{'alias'});
	$prn{'alias'} = \@alias;
	}

if ($in{'new'} || &printer_support('editdest')) {
	if ($in{'webmin'}) {
		$drv = &parse_webmin_driver();
		$dfunc = \&create_webmin_driver;
		}
	else {
		$drv = &parse_driver();
		$dfunc = \&create_driver;
		}

	# validate and store destination section
	$SIG{'ALRM'} = \&connect_time_out;
	if ($in{'dest'} == 0) {
		# printing to some device
		$prn{'dev'} = $in{'dev'};
		$prn{'iface'} = &$dfunc(\%prn, $drv);
		}
	elsif ($in{'dest'} == 1) {
		# printing to some file
		(-r $in{'file'}) || ($in{'file'} =~ /^\|(.*)/ && -r $1) ||
			&error(&text('save_efile', $in{'file'}));
		$prn{'dev'} = $in{'file'};
		$prn{'iface'} = &$dfunc(\%prn, $drv);
		}
	elsif ($in{'dest'} == 2) {
		# printing to a unix host
		local ($rhost, $rport);
		if ($in{'rhost'} =~ /^(\S+):(\d+)$/) {
			$rhost = $1;
			$rport = $2;
			}
		else {
			$rhost = $in{'rhost'};
			$rport = 515;
			}
		&to_ipaddress($rhost) || &to_ip6address($rhost) ||
			&error(&text('save_erhost', $rhost));
		$rport =~ /^\d+$/ || &error(&text('save_erport', $rport));
		$in{'rqueue'} =~ /^[A-z0-9\-\_\.\/]+$/ ||
			(!$in{'rqueue'} && &printer_support('rnoqueue')) ||
			&error(&text('save_erqueue', $in{'rqueue'}));
		$prn{'rhost'} = $in{'rhost'};
		$prn{'rqueue'} = $in{'rqueue'};
		$prn{'rtype'} = $in{'rtype'};
		if ($drv->{'mode'} && !&printer_support('riface')) {
			&error($text{'save_eremote'});
			}
		if ($in{'check'} && (!$in{'rtype'} || $in{'rtype'} eq 'bsd')) {
			# Try connecting to the LPR port
			alarm(10);
			&open_socket($rhost, 515, TEST);
			close(TEST);
			alarm(0);
			}
		$prn{'iface'} = &$dfunc(\%prn, $drv);
		}
	elsif ($in{'dest'} == 3) {
		# printing to windows
		$sdrv = { 'server' => $in{'server'},
			 'share' => $in{'share'},
			 'user' => $in{'suser'},
			 'pass' => $in{'spass'},
			 'workgroup' => $in{'wgroup'},
			 'program' => &$dfunc(\%prn, $drv) };
		$prn{'dev'} = "/dev/null";
		$prn{'iface'} = $in{'webmin'} ? 
			&create_webmin_windows_driver(\%prn, $sdrv) :
			&create_windows_driver(\%prn, $sdrv);
		if ($in{'check'}) {
			# Try connecting to the SMB port
			alarm(10);
			&open_socket($sdrv->{'server'}, 139, TEST);
			close(TEST);
			alarm(0);
			}
		}
	elsif ($in{'dest'} == 4) {
		# printing to hpnp server
		$hdrv = { 'server' => $in{'hpnp'},
			  'port' => $in{'port'},
			  'program' => &$dfunc(\%prn, $drv) };
		$prn{'iface'} = &create_hpnp_driver(\%prn, $hdrv);
		$prn{'dev'} = "/dev/null";
		}
	elsif ($in{'dest'} == 5) {
		# direct connection printing
		&to_ipaddress($in{'dhost'}) || &to_ip6address($in{'dhost'}) ||
			&error(&text('save_edhost', $in{'dhost'}));
		$in{'dport'} =~ /^\d+$/ || &error($text{'save_edport'});
		$prn{'dhost'} = $in{'dhost'};
		$prn{'dport'} = $in{'dport'};
		$prn{'iface'} = &$dfunc(\%prn, $drv);
		if ($in{'check'}) {
			# Try connecting to the port
			alarm(10);
			&open_socket($prn{'dhost'}, $prn{'dport'}, TEST);
			close(TEST);
			alarm(0);
			}
		}
	}

# Call os-specific validation function
if (defined(&validate_printer)) {
	$err = &validate_printer(\%prn);
	&error($err) if ($err);
	}

# Create the printer
if ($in{'new'}) {
	&create_printer(\%prn);
	&system_logged("$config{'apply_cmd'} >/dev/null 2>&1 </dev/null")
		if ($config{'apply_cmd'});
	&webmin_log("create", "printer", $prn{'name'}, &log_info(\%prn));
	}
else {
	&modify_printer(\%prn);
	&system_logged("$config{'apply_cmd'} >/dev/null 2>&1 </dev/null")
		if ($config{'apply_cmd'});
	&webmin_log("modify", "printer", $prn{'name'}, &log_info(\%prn));
	}

# Update ACL
if ($in{'new'} && $access{'printers'} ne '*') {
	$access{'printers'} .= " ".$in{'name'};
	&save_module_acl(\%access);
	}

# Create on cluster
@slaveerrs = &save_on_cluster($in{'new'}, \%prn, $drv, $sdrv || $hdrv,
			      $in{'webmin'}, $in{'dest'});
if (@slaveerrs) {
	&error(&text('save_errslave',
	     "<p>".join("<br>", map { "$_->[0]->{'host'} : $_->[1]" }
				    @slaveerrs)));
	}

&redirect("");

sub connect_time_out
{
$connect_timed_out++;
}

Private