;ò
Tóf?c           @   s+  d  k  Td k l Z l Z e i ƒ  d j o e d ƒ GHe i d ƒ n d Z d Z	 d Z
 d Z d	 Z e i i d
 ƒ o* e d
 d ƒ Z e i e ƒ e i ƒ  n d Z d k Z d „  Z x®e g D]£Z y, e i e i d d d d g ƒ \ Z Z Wn* e i j
 o e ƒ  e i d ƒ n Xx^ e D]U Z e d d j o e d ƒ d Z Pn e d d j o e ƒ  e i d ƒ q.q.We o Pn e i i d e ƒ o e d ƒ d Z Pn d e i j o d Z Pn e i i d ƒ o e d ƒ d Z Pn e i  d ƒ d e i  d
 ƒ d j  o e d ƒ d Z Pn e! d d d d ƒ o e d ƒ d Z PqÇ qÇ Wd  „  Z" e oP e d! ƒ e" d g ƒ o e d" ƒ e i d ƒ qÏe d# ƒ e i d ƒ n e# d d ƒ Z$ e% d d d d ƒ e$ oF e" d g ƒ o e d" ƒ e i d ƒ q?e d# ƒ e i d ƒ n e$ i& d$ Z' y d e' e$ i& d% i( _) Wn n Xg  Z* x; e' D]2 Z+ e, e+ ƒ o e+ i- ƒ  qe* i. e+ i/ ƒ qWx\ e' D]T Z+ e0 e+ ƒ xA e+ d& D]4 Z1 e1 i( e* j o e* i. e1 i( ƒ qØe1 i- ƒ  qØWq¼Wd k2 Z2 e2 i3 d' ƒ d( d) !\ Z4 Z5 d* „  Z6 d+ Z7 d, „  Z8 d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ g Z9 e a: dK „  Z; dL „  Z< dM „  Z= dN „  Z> e> ƒ  p e" d g ƒ o e d" ƒ e i d ƒ n e d# ƒ e i d ƒ d S(O   (   s   *(   s   _s   N_i    s'   You must run printconf-backend as root.iÿÿÿÿs   /var/spool/lpdsã  THIS DIRECTORY IS VOLATILE!!!

This directory was created by printconf for a printconf spool.
If printconf-backend does a spool rebuild, and finds volatile
directories that do not currently have valid configurations,
it will DELETE THEM!

printconf-backend detects volatility by the presence of this file.
If you have custom spool directories made in some other manor, they
will be safe from printconf-backend's deletion as long as they do
NOT have a file in them named 'VOLATILE'.

sÓ   # /etc/printcap
#
# DO NOT EDIT! MANUAL CHANGES WILL BE LOST!
# This file is autogenerated by printconf-backend during lpd init.
#
# Hand edited changes can be put in /etc/printcap.local, and will be included.

sð   ###############################################################################
## Everything below here is included verbatim from /etc/printcap.local       ##
###############################################################################
sŠ   # /etc/printcap.local
#
# This file is included by printconf's generated printcap,
# and can be used to specify custom printcap entries.

s   /etc/printcap.locals   wNc           C   s	   d GHd  S(   NsŠ   usage: printconf-backend [OPTIONS]

Options:
 --force-rebuild  Force the queues to be rebuilt
 --help           Display this usage message(    (    (    (    s.   /usr/share/printconf/util/printconf_backend.pys   help_messagem   s    i   s    s   force-rebuilds   helps   --force-rebuilds7   Rebuilding: Found '--force-rebuild' command line options   --helps   PRINTCONF_FORCE_REBUILDs@   Rebuilding: Found 'PRINTCONF_FORCE_REBUILD' environment variables   /etc/printcaps*   Rebuilding: '/etc/printcap' does not existi	   s?   Rebuilding: '/etc/printcap.local' is newer than '/etc/printcap's	   namespaces	   printconfs   marks   _PRINTCONF_BACKEND_s(   Rebuilding: printconf namespace is dirtyc         C   s  t  t ƒ xö t |  ƒ oè |  i ƒ  } | d d j o d | } n t d | ƒ t i i	 | ƒ o q n x t
 | ƒ i ƒ  D]y } t i d | ƒ } | o1 | i d ƒ } t d | ƒ |  i | ƒ q n t i d | ƒ o t d	 | ƒ d
 Sq q Wq Wt Sd  S(   Ni    s   /s   /etc/s   scanning %ss!   ^\s*include\s*(?P<include>.*)\n?$s   includes   found include directive: %ss   ^\s*\ws   found a printer line:
%si   (   s   calleds   scan_printcap_filess   lens   printcap_filess   pops   files   debug_prints   oss   paths   existss   opens	   readliness   lines   res   matchs   groups   includes   appends   None(   s   printcap_filess   lines   matchs   files   include(    (    s.   /usr/share/printconf/util/printconf_backend.pys   scan_printcap_filesª   s*    
  s3   Not rebuilding, scanning printcap files for entriess   Exit: Successs   Exit: Failures   /printconf/print_queuess   /printconf/default_queues
   alias_lists   lpi   i   c         C   s”   t  t ƒ t i i |  ƒ o t i |  ƒ n t i |  t i t i	 Bt i
 B| ƒ } t i | d ƒ } | i | ƒ t i |  | | ƒ | i ƒ  d  S(   Ns   w(   s   calleds   paranoid_file_writes   oss   paths   existss	   file_names   unlinks   opens   O_WRONLYs   O_CREATs   O_EXCLs   modes   fds   fdopens   files   writes   strs   chowns   uids   gids   close(   s	   file_names   strs   modes   uids   gids   files   fd(    (    s.   /usr/share/printconf/util/printconf_backend.pys   paranoid_file_write  s    
&sþ  

$postscript_wrapper = '/usr/share/printconf/util/mf_postscript_wrapper';
# This complex string, when appended to the postscript_wrapper,
# passes the contents of the LPRNGOPTS variable to lpdomatic.
$lprng_opts = "'``LPRNGOPTS''`";

undef $/;
umask 0077;

$mpage_page_size = $control->{'mpage_page_size'};
$enscript_cmd = "/usr/bin/mpage -b $mpage_page_size -1 -o -P- -";

$rerender_ps = ($control->{'flags'}{'rerender_Postscript'} == 1) ? '--rerender-ps' : '';

$termination = '';
if ($control->{'flags'}{'send_FF'} == 1) {
	$termination .= '\f';
}
if ($control->{'flags'}{'send_EOT'} == 1) {
	$termination .= '\004';
}

$spool_dir = $control->{'spool_dir'};
$mf_type = $control->{'mf_type'};

if ($mf_type eq 'POSTSCRIPT') {
	# This is a pure postscript printer
	
	#
	# Build the mf.cfg string
	#
	$printer_id = 'Postscript Printer';
	$gs_driver = 'None';

	$text_filter = "pipe/postscript/ $enscript_cmd";
	$ps_filter = "filter $postscript_wrapper $lprng_opts $rerender_ps";
	# Yes, this is stupid. But we don't have reliable information anywhere on #dnl
	# if a given printer supports pcl and pjl, so what ya gonna do? #dnl
	$pcl_filter = 'cat';
	$pjl_filter = 'cat';

} elsif ($mf_type eq 'TEXT') {
	# This is a pure text printer
	
	#
	# Build the mf.cfg string
	#
	$printer_id = 'TEXT Printer';
	$gs_driver = 'Dont be silly';

	$text_filter = 'text';
	$ps_filter = 'text';
	$pcl_filter = 'reject';
	$pjl_filter = 'reject';

} elsif ($mf_type eq 'MFOMATIC') {
	# This is a mfomatic printer configuration

	$gs_driver = $control->{'gs_driver'};
	$printer_id = $control->{'printer_id'};

	use Foomatic::Defaults;
	use Foomatic::DB;
	my $db = new Foomatic::DB;

	$foodata = $db->getdat($gs_driver, $printer_id, 0);
	if (!$foodata) {
		exit 1;
	}

	#
	# Override the foomatic file
	#
	for $override (@{$control->{'foomatic_defaults'}}) {
		$name = $override->{'name'};
		next if not ($option = $foodata->{'args_byname'}->{$name});
		next if not ($override->{'type'} == $option->{'type'});

		$option->{'default'} = $override->{'default'};
	}

	$local_foo_file = "$spool_dir/$gs_driver-$printer_id.foo";
	unlink $local_foo_file;
	open (LFOO, '>', $local_foo_file) or exit 1;
	use Data::Dumper;
	$Data::Dumper::Purity=1;
	$Data::Dumper::Indent=1;
	print LFOO Dumper($foodata);
	close LFOO;
	chown $control->{'lp_uid'}, $control->{'lp_gid'}, $local_foo_file;

	#
	# Build the mf.cfg string
	#
	$make = $foodata->{'make'};
	$model = $foodata->{'model'};
	$color = ($foodata->{'color'} ? 'true' : 'false');

	if ($control->{'flags'}{'convert_text_to_Postscript'} || !($foodata->{'ascii'})) {
		$text_filter = "pipe/postscript/ $enscript_cmd"; 
	} else {
		$text_filter = 'text "" \r\n\14 ';
	}

	$ps_filter = "filter $postscript_wrapper $lprng_opts $rerender_ps --mfomatic $gs_driver-$printer_id.foo";
	# Yes, this is stupid. But we don't have reliable information anywhere on #dnl
	# if a given printer supports pcl and pjl, so what ya gonna do? #dnl
	$pcl_filter = 'cat';
	$pjl_filter = 'cat';
} else {
	# I don't understand this format.
	exit 1;
}

if ($control->{'flags'}{'assume_data_is_text'}) {
	$default_filter = $text_filter;
} else {
	$default_filter = qw?`cat'?;
} 

$locale = $control->{'filter_locale'};
$page_size = $control->{'page_size'};
$gs_papersize = $control->{'gs_papersize'};

$mf_cfg_str = "# foomatic/magicfilter configuration
# Make:		$make
# Model:	$model
# Printer Id:	$printer_id
# Driver:	$gs_driver
# TERMINATION=$termination
# FILTER_LOCALE=$locale
# GS_PAPERSIZE=$gs_papersize

define(MAKE, `$make')dnl
define(MODEL, `$model')dnl
define(COLOR, `$color')dnl
define(PAGEsize, `$page_size')dnl
define(TEXTfilter, $text_filter)dnl
define(PSfilter, `$ps_filter')dnl
define(PDFfilter, `$ps_filter')dnl (Same as PS filter for now)
define(PCLfilter, `$pcl_filter')dnl
define(PJLfilter, `$pjl_filter')dnl
define(DEFAULTfilter, $default_filter)dnl
";

#
# Write out the mf.cfg file
#
$mf_cfg = $spool_dir . '/mf.cfg';
unlink $mf_cfg;
open (MF_CFG, '>', $mf_cfg) || exit 1;
print MF_CFG $mf_cfg_str;
close MF_CFG;
chown $control->{'lp_uid'}, $control->{'lp_gid'}, $mf_cfg;

c         C   s  t  t ƒ d t t f } | d i } | d } x1 | d D]% }	 d | |	 i	 t
 |	 i ƒ f } q< W| d } d } | d j o | d	 i } nÞ | d
 j oÐ | d i }
 | d i } | d |
 | f } | d } x‡ | d D]{ } | i	 d j o qã n | d i } | d i } | d i } | d | | | f } t i | ƒ d j o
 | } qã qã W| d } n y | d i } Wn d } n Xt | ƒ \ } } | d | | |  | | | f } t i d d ƒ } t | ƒ | i | ƒ | i t ƒ | i ƒ  Sd  S(   Ns+   $control = {'lp_uid' => %d, 'lp_gid' => %d,s   mf_types
   'flags'=>{s   flagss   %s '%s'=>'%s',s   },s   Letters
   POSTSCRIPTs	   page_sizes   MFOMATICs
   printer_ids	   gs_drivers%   'printer_id'=>'%s','gs_driver'=>'%s',s   'foomatic_defaults' => [s   foomatic_defaultss   option_defaults   names   types   defaults,   {'name'=>'%s','type'=>'%s','default'=>'%s'},s   pagesizes   ],s   filter_locales   Cs‰   'filter_locale' => '%s', 'mf_type' => '%s', 'spool_dir' => '%s', 'page_size' => '%s', 'mpage_page_size' => '%s', 'gs_papersize' => '%s'};s   perls   w(    s   calleds   magicfilter_cfgs   lp_uids   lp_gids   p_conts   filter_datas   values   mf_types   flags   names   strs	   page_sizes
   printer_ids	   gs_drivers   options   o_names   o_types	   o_defaults   strings   lowers   filter_locales   select_page_sizess   mpage_page_sizes   gs_papersizes	   spool_dirs   oss   popens	   perl_pipes   debug_prints   writes   make_mfomatic_perl_strs   close(   s	   spool_dirs   filter_datas   p_conts   filter_locales   mpage_page_sizes	   page_sizes	   perl_pipes   o_types   options   flags
   printer_ids   o_names	   gs_drivers	   o_defaults   mf_types   gs_papersize(    (    s.   /usr/share/printconf/util/printconf_backend.pys   magicfilter_cfgÉ  sL    

 #

 
 
s   a0s   a1s   a2s   a3s   a4s   a5s   a6s   a7s   a8s   a9s   a10s   b0s   b1s   b2s   b3s   b4s   b5s   archAs   archBs   archCs   archDs   archEs   flsas   flses
   halfletters   notes   letters   legals   11x17s   ledgerc         C   sL   t  t ƒ d „  } t o t ƒ  n | t |  d ƒ | t |  d ƒ f Sd  S(   Nc         C   sU   | |  j o | Sn x5 |  D]- } t i | ƒ t i | ƒ j o | Sq q W| Sd  S(   N(   s   sizes   arrays
   check_sizes   strings   lowers   default(   s   arrays   sizes   defaults
   check_size(    (    s.   /usr/share/printconf/util/printconf_backend.pys   match_sizes  s     s   Letters   letter(   s   calleds   select_page_sizess   match_sizess   _mpage_page_sizess   populate_mpage_page_sizess	   page_sizes   _gs_page_sizes(   s	   page_sizes   match_sizes(    (    s.   /usr/share/printconf/util/printconf_backend.pys   select_page_sizes  s
    
	c          C   s°   t  t ƒ g  a t i d d ƒ } | i ƒ  } | i ƒ  | i	 d ƒ | i	 d ƒ | i	 d ƒ t
 i d ƒ }  x; | D]3 } |  i | ƒ } | o t i | i ƒ  ƒ qu qu Wd  S(   Ns   /usr/bin/mpage -b?s   ri    s   ^(\w*)(   s   calleds   populate_mpage_page_sizess   _mpage_page_sizess   oss   popens
   mpage_pipes	   readliness   liness   closes   pops   res   compiles   regexs   lines   matchs   appends   group(   s   regexs   liness
   mpage_pipes   lines   match(    (    s.   /usr/share/printconf/util/printconf_backend.pys   populate_mpage_page_sizes&  s    
 
 c      	   C   sÑ  t  t ƒ |  i } t d | ƒ t d | } t i	 | t i
 ƒ o' t i | d ƒ t i | t t ƒ n t d | t d t t ƒ | g } | i t d „  |  d ƒ ƒ g  }	 |	 i t i | d ƒ d	 d
 d | d | | f g ƒ |  d i } |  d } |  d i } |  d }
 |
 i d ƒ p |
 d i o |	 i d ƒ n | d j o |	 i d | d i ƒ n	| d j oÄ |
 d i } | d j o |	 i d | d i ƒ qy| d j o6 t | d |
 d i d t t ƒ |	 i d | ƒ qy| d  j o6 t | d! |
 d" i d t t ƒ |	 i d# | ƒ qyt  Sn8| d$ j o~ |	 i d% | d& i ƒ | d' i } | d( j o |	 i d) | ƒ n | d* i o% |	 i d+ ƒ |	 i d, t" i# ƒ qyn­| d- j o± t i$ i% d. ƒ o t  Sn d/ | d0 i | d1 i | d2 i t& i' d3 d4 | d5 i ƒ | d6 i | d7 i o d8 p d9 f } t | d: | d t t ƒ |	 i d; t" i# ƒ nï | d< j o€ t i$ i% d= ƒ o t  Sn d> | d? i | d@ i | dA i | dB i f } t | d: | d t t ƒ |	 i dC t" i# ƒ nb | dD j oP dE | dF i | dG i f } t | d: | d t t ƒ |	 i dH t" i# ƒ n t  S| dI j o t  n,| dJ j o7 t) | |
 ƒ o t  Sn |	 i dK dL t" i# g ƒ nè | d j oÖ |
 d i } | d j o" |	 i dK dM |
 d i g ƒ q¹| d j o< t | dN |
 d i d t t ƒ |	 i dK dO | g ƒ q¹| d  j o< t | dP |
 d" i d t t ƒ |	 i dK dQ | g ƒ q¹t  Sn t  St i |	 dR ƒ dS Sd  S(T   Ns   Rebuilding: %ss   /iÀ  s   %s/VOLATILEi€  c         C   s   |  i S(   N(   s   xs   value(   s   x(    (    s.   /usr/share/printconf/util/printconf_backend.pys   <lambda>N  s    s
   alias_lists   |s   ml#0s   mx#0s   sd=%ss   af=%s/%s.accts
   queue_types
   queue_datas   filter_types   filter_datas   print_header_pages   shs   LOCALs   lp=%ss   local_printer_devices   CUSTOMs   custom_types   PATHs   lp=|%ss   custom_filter_paths   SCRIPTs   /filter-delivery.scripts   custom_filter_scriptií  s   lp=|%s/filter-delivery.scripts   BINARYs   /filter-delivery.binarys   custom_filter_binarys   lp=|%s/filter-delivery.binarys   LPDs   rm=%ss
   lpd_servers	   lpd_queues    s   rp=%ss   lpd_strict_rfc1179s   bks'   control_filter=%s/strip_control_file.shs   SMBs   /usr/bin/smbclientsN   
share='%s'
hostip='%s'
user='%s'
password="%s"
workgroup='%s'
translate='%s'
s	   smb_shares   smb_ips   smb_users
   ([\$`"\\])s   \\\1s   smb_passwords   smb_workgroups   smb_translates   yess   nos   /script.cfgs   lp=|%s/smbprints   NCPs   /usr/bin/nprints0   
server='%s'
queue='%s'
user='%s'
password='%s'
s
   ncp_servers	   ncp_queues   ncp_users   ncp_passwords   lp=|%s/ncpprints	   JETDIRECTs   
printer_ip=%s
port=%s
s   jetdirect_ips   jetdirect_ports   lp=|%s/jetdirectprints   NONEs   MAGICFILTERs   lpd_bounce=trues   if=%s/mf_wrappers   if=%ss   /filter-data.scripts   if=%s/filter-data.scripts   /filter-data.binarys   if=%s/filter-data.binarys   :\
	:s   :

(*   s   calleds   build_print_queues   queues   names
   queue_names   debug_prints   lpd_spool_dirs	   queue_dirs   oss   accesss   X_OKs   mkdirs   chowns   lp_uids   lp_gids   paranoid_file_writes   volatile_headers	   name_lists   extends   maps   options_lists   strings   joins   values
   queue_types
   queue_datas   filter_types   filter_datas   has_keys   appends   custom_types   binValues   Nones	   lpd_queues   confs   printconf_util_dirs   paths   existss   res   subs
   config_strs   magicfilter_cfg(   s   queues	   lpd_queues
   config_strs   custom_types
   queue_datas
   queue_names	   queue_dirs	   name_lists   filter_types   options_lists   filter_datas
   queue_type(    (    s.   /usr/share/printconf/util/printconf_backend.pys   build_print_queue>  sž    
		6

 

c2
"

c          C   s»  t  t ƒ g  } g  } x t D]w } t d | i ƒ y t | ƒ } Wn% t
 j
 o } t | i ƒ q n X| o! | i | i ƒ | i | ƒ q q Wt i i d ƒ o t i d ƒ n t d d ƒ } t d d ƒ }  | i t ƒ | i t i | d ƒ ƒ | i t ƒ | i |  i ƒ  ƒ | i ƒ  |  i ƒ  xv t d „  t i t ƒ ƒ D]Y } t i i d	 | ƒ o< y | i  t i i! | ƒ ƒ Wq©t i d
 | ƒ q©XqPqPWt" | ƒ Sd  S(   Ns   rebuilding %ss   /etc/printcaps%   cp -a /etc/printcap /etc/printcap.olds   ws   /etc/printcap.locals   rs    c         C   s   d t  |  f S(   Ns   %s/%s(   s   lpd_spool_dirs   x(   s   x(    (    s.   /usr/share/printconf/util/printconf_backend.pys   <lambda>  s    s   %s/VOLATILEs	   rm -rf %s(#   s   calleds   rebuild_queuess   printcap_entry_lists   active_queue_dirss   print_queuess   queues   debug_prints   names   build_print_queues   printcap_entry_strs	   Exceptions   es   argss   appends   oss   paths   existss   systems   opens   printcaps   printcap_locals   writes   printcap_headers   strings   joins   printcap_local_preambles   reads   closes   maps   listdirs   lpd_spool_dirs   dirs   indexs   basenames   len(   s   printcap_locals   printcaps   printcap_entry_strs   printcap_entry_lists   active_queue_dirss   es   queues   dir(    (    s.   /usr/share/printconf/util/printconf_backend.pys   rebuild_queuesí  s@    
 

 (?   s   printconf_confs   rhpl.translates   _s   N_s   oss   geteuids   syss   exits   lpd_spool_dirs   volatile_headers   printcap_headers   printcap_local_preambles   printcap_local_headers   paths   existss   opens   pls   writes   closes   rebuilds   getopts   help_messages   Nones   is   argvs   optionss   argss   errors   eachs   debug_prints   environs   gets   stats   checkNspMarks   scan_printcap_filess   readNsps   contexts   markNsps   datas   print_queuess   values   poss	   name_lists   queues   valid_queues   unlinks   appends   names   rectify_aliasess   aliass   pwds   getpwnams   lp_uids   lp_gids   paranoid_file_writes   make_mfomatic_perl_strs   magicfilter_cfgs   _gs_page_sizess   _mpage_page_sizess   select_page_sizess   populate_mpage_page_sizess   build_print_queues   rebuild_queues(    s   magicfilter_cfgs   print_queuess   help_messages   aliass   rebuilds   build_print_queues   volatile_headers   N_s   getopts   scan_printcap_filess   pls   paranoid_file_writes   printcap_local_preambles   lp_gids   rebuild_queuess   argss	   name_lists   pwds   select_page_sizess   lpd_spool_dirs   _s   printcap_local_headers   _gs_page_sizess   make_mfomatic_perl_strs   populate_mpage_page_sizess   queues   is   lp_uids   contexts   eachs   printcap_headers   options(    (    s.   /usr/share/printconf/util/printconf_backend.pys   ?   sÒ   		
		
  


'

		#




  
 			¢	F`			¯	/

