#!/opt/thinlinc/libexec/python3
# -*-mode: python; coding: utf-8 -*-
#
# Copyright 2002-2014 Cendio AB.
# For more information, see http://www.cendio.com
if 82 - 82: Iii1i
if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I
if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii
import sys
import os
import stat
import locale
import socket
socket . setdefaulttimeout ( 30 )
if 84 - 84: ooo000 - Ooo0Ooo + iI1iII1I1I1i . IIiIIiIi11I1
from thinlinc . tlprinter import get_lpd_tunnel_port , CUPS_ARGUMENT_USER , CUPS_ARGUMENT_FILE , generate_tempfile , LPD_Client , respool , CUPS_ARGUMENT_TITLE , CUPS_ARGUMENT_COPIES , CUPS_ARGUMENT_OPTIONS
if 98 - 98: I11iiIi11i1I % oOO
if 31 - 31: i1I
from thinlinc import hiveconf
if 9 - 9: IiI11Ii111 / oOo0O00 / IiIIii11Ii - I11iiIi11i1I - iI1iII1I1I1i
if 16 - 16: i1i1i1111I / i1iiIII111
if 3 - 3: i1 % i1 % i1i1i1111I . Ii * i1
if 9 - 9: i1iiIII111
def i1Ii1i ( ) :
 try :
  locale . setlocale ( locale . LC_ALL , "" )
 except locale . Error as oOooo0OOO :
  print ( "WARNING: Could not set locale, got locale.Error: %s" % oOooo0OOO ,
 file = sys . stderr )
  if 53 - 53: Ii * Oo * ooo000 . i1iiIII111
 if len ( sys . argv ) == 1 :
  print ( 'direct thinlocal:/ "Raw" "ThinLinc Local printer"' )
  return 0
 if len ( sys . argv ) < 6 or len ( sys . argv ) > 7 :
  print ( 'Usage: %s job-id user title copies options [file]' % sys . argv [ 0 ] )
  return 1
  if 14 - 14: I1I / oOO
 ooOOooO0 = hiveconf . open_hive ( '/opt/thinlinc/etc/thinlinc.hconf' )
 if 13 - 13: oOO
 if 2 - 2: i1
 IIiIiiIiI = os . environ . get ( "PRINTER" , None )
 if 34 - 34: Ooo0Ooo + oOO * IIiIIiIi11I1 * OooOoo
 Ii111 = { }
 for Iio0 in sys . argv [ CUPS_ARGUMENT_OPTIONS ] . split ( " " ) :
  if "=" in Iio0 :
   i1i , I1i = Iio0 . split ( "=" , 1 )
  else :
   if 75 - 75: IiI11Ii111 . Ooo0Ooo . i1I * I11iiIi11i1I % i1iiIII111
   if 34 - 34: i1iiIII111 * i1
   if 34 - 34: oOo0O00 / i1iiIII111 - Iii1i . iI1iII1I1I1i
   if 80 - 80: i1i1i1111I . I1I % ooOOO % IiIIii11Ii / i1i1i1111I
   if 32 - 32: I1Ii1I1 + oOO - oOo0O00
   i1i = Iio0
   I1i = None
  Ii111 [ i1i ] = I1i
  if 79 - 79: Iii1i % oOO * Oo + ooOOO / Oo . oOO
  if 20 - 20: IiI11Ii111 + i1iiIII111 / I1I
  if 88 - 88: I11iiIi11i1I + ooOOO - i1i1i1111I . Ooo0Ooo * Ii + Iii1i
 if 'CustomThinlocalQueue' in Ii111 :
  IIiIiiIiI = Ii111 [ 'CustomThinlocalQueue' ]
  if 43 - 43: ooOOO * I1Ii1I1
  if 95 - 95: Ooo0Ooo % Iii1i % i1i1i1111I . OooOoo
 I1iIiiIIiIi = sys . argv [ CUPS_ARGUMENT_TITLE ]
 if 88 - 88: Oo * IiIIii11Ii
 if 100 - 100: IiI11Ii111 - OooOoo * I1Ii1I1 / Ooo0Ooo / Iii1i
 I11iIi1i = int ( sys . argv [ CUPS_ARGUMENT_COPIES ] )
 if 49 - 49: IIiIIiIi11I1
 iIIiii1iI = None
 if 43 - 43: ooOOO . I11iiIi11i1I + ooo000
 if 87 - 87: Iii1i + ooOOO . i1I / Ii + Oo
 if len ( sys . argv ) < 7 :
  try :
   iIIiii1iI = generate_tempfile ( )
   OOO00oO0oOo0O = open ( iIIiii1iI , 'wb+' )
   while True :
    iIi1I1I = sys . stdin . buffer . read ( 1024 )
    if len ( iIi1I1I ) == 0 :
     break
    OOO00oO0oOo0O . write ( iIi1I1I )
   OOO00oO0oOo0O . close ( )
   II1III1I1i = iIIiii1iI
  except :
   II11i11II1iI = sys . exc_info ( )
   print ( "ERROR: Couldn't receive and temporarily store printer data" ,
 II11i11II1iI [ 0 ] , II11i11II1iI [ 1 ] , file = sys . stderr )
   if iIIiii1iI is not None :
    os . unlink ( iIIiii1iI )
    if 37 - 37: i1I - IiI11Ii111
    if 84 - 84: iI1iII1I1I1i - I1I - I11iiIi11i1I
   return 1
   if 61 - 61: i1i1i1111I / I11iiIi11i1I + IiI11Ii111 * i1i1i1111I + oOo0O00 / i1
   if 26 - 26: Ii . i1
 else :
  II1III1I1i = sys . argv [ CUPS_ARGUMENT_FILE ]
  if 61 - 61: iI1iII1I1I1i . i1I - ooo000 / ooo000 - i1
  if 19 - 19: Iii1i * Ooo0Ooo . I1Ii1I1 / I11iiIi11i1I * Ii - oOO
 iiI1111II = sys . argv [ CUPS_ARGUMENT_USER ]
 O0OO , oO0O0oOOo0Oo = get_lpd_tunnel_port ( ooOOooO0 , iiI1111II )
 if 35 - 35: oOO + OooOoo . OooOoo
 if 30 - 30: OooOoo * I1I * Ooo0Ooo . Ooo0Ooo
 if O0OO == None :
  print ( "INFO: User has session on other machine, we need to respool to" ,
 oO0O0oOOo0Oo , file = sys . stderr )
  OooOO00o = respool ( II1III1I1i , oO0O0oOOo0Oo , "thinlocal" , IIiIiiIiI )
  if iIIiii1iI is not None :
   os . unlink ( iIIiii1iI )
  return OooOO00o
  if 98 - 98: IIiIIiIi11I1 - IiIIii11Ii . ooo000 + oOO - oOO
  if 78 - 78: i1 - ooOOO
 OO = open ( II1III1I1i , 'rb' )
 OoOo00oO000oo = os . stat ( II1III1I1i ) [ stat . ST_SIZE ]
 if 83 - 83: iI1iII1I1I1i / Ii / ooo000 + i1iiIII111
 if iIIiii1iI is not None :
  os . unlink ( iIIiii1iI )
  if 28 - 28: i1iiIII111 + ooOOO - ooOOO - i1i1i1111I
 if OoOo00oO000oo == 0 :
  print ( "WARNING: Empty print job. Refusing to send anything to the client." ,
 file = sys . stderr )
  return 0 ;
  if 61 - 61: oOO
  if 7 - 7: i1i1i1111I / Ii * Iii1i
 i1iI1i = None
 if 73 - 73: ooOOO - IiIIii11Ii
 iIi1 = os . environ . get ( "SOFTWARE" , "" )
 if iIi1 . startswith ( "CUPS" ) :
  I1II1ii111i = iIi1 [ 5 : ] . split ( "." )
  if 14 - 14: IiI11Ii111 + i1I . IiIIii11Ii . Ooo0Ooo % IiIIii11Ii * i1i1i1111I
  if I1II1ii111i [ 0 ] < '1' or ( I1II1ii111i [ 0 ] == '1' and I1II1ii111i [ 1 ] < '2' ) or ( I1II1ii111i [ 0 ] == '1' and I1II1ii111i [ 1 ] == '2' and I1II1ii111i [ 2 ] < '3' ) :
   if 65 - 65: Iii1i + IIiIIiIi11I1 - Ooo0Ooo . iI1iII1I1I1i + OooOoo * Ooo0Ooo
   if 23 - 23: ooOOO % oOO % iI1iII1I1I1i - i1I - i1iiIII111 + i1
   print ( "WARNING: You have an old CUPS which does not "
 "properly specify the content type. "
 "Attempting to auto-detect." , file = sys . stderr )
   if 12 - 12: i1 - i1I - IiI11Ii111
   if OO . read ( 4 ) == b'%PDF' :
    i1iI1i = "application/pdf"
   else :
    i1iI1i = "application/octet-stream"
   OO . seek ( 0 )
   if 86 - 86: Iii1i + i1iiIII111 - IIiIIiIi11I1 / I1I
   if 46 - 46: ooOOO + ooOOO % oOO
   if 2 - 2: i1i1i1111I / Ooo0Ooo / oOO - IIiIIiIi11I1 / IIiIIiIi11I1
   if 58 - 58: i1i1i1111I
  if I1II1ii111i [ 0 ] > '1' or ( I1II1ii111i [ 0 ] == '1' and I1II1ii111i [ 1 ] >= '7' ) :
   if 38 - 38: i1 - oOo0O00
   O0OO00OO0O = os . environ . get ( "FINAL_CONTENT_TYPE" , "" )
   if O0OO00OO0O . startswith ( "printer/" ) :
    i1iI1i = os . environ . get ( "CONTENT_TYPE" )
    if 35 - 35: i1 + I1I . i1iiIII111
 if i1iI1i is None :
  i1iI1i = os . environ . get ( "FINAL_CONTENT_TYPE" )
  if 16 - 16: I1Ii1I1 % I1I / IIiIIiIi11I1 * i1I + IiI11Ii111 % oOo0O00
 if i1iI1i is None :
  iiIiIi = os . environ . get ( "PPD" )
  if iiIiIi is None or not os . path . exists ( iiIiIi ) :
   i1iI1i = "application/octet-stream"
  else :
   i1iI1i = os . environ . get ( "CONTENT_TYPE" , "application/octet-stream" )
   if 91 - 91: ooOOO / Ii . oOo0O00 % OooOoo * IIiIIiIi11I1
   if 14 - 14: i1I
 if i1iI1i . startswith ( "printer/" ) or i1iI1i == "application/vnd.cups-raw" or i1iI1i == "application/vnd.cups-postscript" :
  if 37 - 37: iI1iII1I1I1i - I1Ii1I1 + ooOOO . IIiIIiIi11I1
  if 15 - 15: ooo000
  i1iI1i = "application/octet-stream"
  if 63 - 63: i1I
  if 81 - 81: OooOoo . i1I / i1i1i1111I + Oo / Ooo0Ooo % IiI11Ii111
 print ( "INFO: Sending job to queue %s@127.0.0.1:%d" % ( IIiIiiIiI , O0OO ) ,
 file = sys . stderr )
 if 77 - 77: I11iiIi11i1I / iI1iII1I1I1i - oOo0O00 - Ooo0Ooo % oOo0O00
 if 73 - 73: IiI11Ii111 . Oo * I1I / i1i1i1111I + I1Ii1I1
 iiiiII11II = os . fork ( )
 if iiiiII11II == 0 :
  try :
   i1I1Ii = os . open ( os . devnull , os . O_RDWR )
   os . dup2 ( i1I1Ii , sys . stdin . fileno ( ) )
   os . dup2 ( i1I1Ii , sys . stdout . fileno ( ) )
   os . dup2 ( i1I1Ii , sys . stderr . fileno ( ) )
   if 88 - 88: i1I + I1I
   oo0oOooooO = LPD_Client ( '127.0.0.1' , O0OO )
   oo0oOooooO . connect ( )
   if 77 - 77: oOo0O00 % Oo - oOo0O00 - ooo000 * I11iiIi11i1I + oOO
   oo0oOooooO . print_fd ( IIiIiiIiI , OO , OoOo00oO000oo ,
 job_name = I1iIiiIIiIi , title = i1iI1i , copies = I11iIi1i )
   if 64 - 64: IiI11Ii111 . Ooo0Ooo . i1iiIII111 * IiI11Ii111
   oo0oOooooO . close ( )
   OO . close ( )
   os . close ( i1I1Ii )
  except :
   if 33 - 33: i1i1i1111I
   pass
  return 0
  if 30 - 30: i1I % ooOOO . Ii % IIiIIiIi11I1 / iI1iII1I1I1i % ooOOO
  if 24 - 24: IIiIIiIi11I1 - IIiIIiIi11I1 . Ooo0Ooo + i1iiIII111 + Oo
  if 21 - 21: IIiIIiIi11I1 - ooo000 + oOO
 OO . close ( )
 return 0
 if 5 - 5: i1iiIII111 . i1iiIII111 + ooo000 . I11iiIi11i1I
if __name__ == '__main__' :
 sys . exit ( i1Ii1i ( ) )
 if 1 - 1: iI1iII1I1I1i % Ii - I11iiIi11i1I / IiI11Ii111 + iI1iII1I1I1i - Ii
 if 27 - 27: OooOoo % iI1iII1I1I1i + IIiIIiIi11I1
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
