#!/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 , CUPS_error , CUPS_warning , CUPS_info
if 98 - 98: I11iiIi11i1I % oOO
if 31 - 31: i1I
if 9 - 9: IiI11Ii111 / oOo0O00 / IiIIii11Ii - I11iiIi11i1I - iI1iII1I1I1i
from thinlinc import hiveconf
if 16 - 16: i1i1i1111I / i1iiIII111
if 3 - 3: i1 % i1 % i1i1i1111I . Ii * i1
if 9 - 9: i1iiIII111
if 10 - 10: ooOOO / IIiIIiIi11I1 * oOO / i1I / i1I
def oOooo0OOO ( ) :
 try :
  locale . setlocale ( locale . LC_ALL , "" )
 except locale . Error as Oo000ooO0Oooo :
  CUPS_warning ( "Could not set locale, got locale.Error: %s" % Oo000ooO0Oooo )
  if 25 - 25: OooOoo - I1Ii1I1 - iI1iII1I1I1i + i1i1i1111I / iI1iII1I1I1i
 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 71 - 71: Ii
 iiIII = hiveconf . open_hive ( '/opt/thinlinc/etc/thinlinc.hconf' )
 if 28 - 28: I1Ii1I1 . Iii1i - ooOOO - iI1iII1I1I1i
 if 37 - 37: oOO * IIiIIiIi11I1 * I1I / oOo0O00
 i11i1Iii1I1 = os . environ . get ( "PRINTER" , None )
 if 68 - 68: I11iiIi11i1I . i1i1i1111I
 ii1iIi1i11i = { }
 for I111IIi11IiI in sys . argv [ CUPS_ARGUMENT_OPTIONS ] . split ( " " ) :
  if "=" in I111IIi11IiI :
   o0OOOooO00oo , IIii = I111IIi11IiI . split ( "=" , 1 )
  else :
   if 48 - 48: iI1iII1I1I1i / oOo0O00 % IiI11Ii111
   if 84 - 84: oOO . Oo + ooOOO / Oo . oOO
   if 20 - 20: IiI11Ii111 + i1iiIII111 / I1I
   if 88 - 88: I11iiIi11i1I + ooOOO - i1i1i1111I . Ooo0Ooo * Ii + Iii1i
   if 43 - 43: ooOOO * I1Ii1I1
   o0OOOooO00oo = I111IIi11IiI
   IIii = None
  ii1iIi1i11i [ o0OOOooO00oo ] = IIii
  if 95 - 95: Ooo0Ooo % Iii1i % i1i1i1111I . OooOoo
  if 70 - 70: IiIIii11Ii
  if 75 - 75: Ooo0Ooo / Ii / IiIIii11Ii + IiIIii11Ii . I1I
 if 'CustomThinlocalQueue' in ii1iIi1i11i :
  i11i1Iii1I1 = ii1iIi1i11i [ 'CustomThinlocalQueue' ]
  if 88 - 88: Oo * IiIIii11Ii
  if 100 - 100: IiI11Ii111 - OooOoo * I1Ii1I1 / Ooo0Ooo / Iii1i
 I11iIi1i = sys . argv [ CUPS_ARGUMENT_TITLE ]
 if 49 - 49: IIiIIiIi11I1
 if 29 - 29: IiIIii11Ii - oOo0O00
 i1IIiII11 = int ( sys . argv [ CUPS_ARGUMENT_COPIES ] )
 if 52 - 52: i1iiIII111 % Oo . I1Ii1I1 + ooOOO % Oo . IiI11Ii111
 OOO00oO0oOo0O = None
 if 1 - 1: I1I % Ooo0Ooo + i1iiIII111 . i1iiIII111 % Oo
 if 93 - 93: oOo0O00 % Ooo0Ooo * i1iiIII111
 if len ( sys . argv ) < 7 :
  try :
   OOO00oO0oOo0O = generate_tempfile ( )
   OooO0O00o0 = open ( OOO00oO0oOo0O , 'wb+' )
   while True :
    OoOOoO000O = sys . stdin . buffer . read ( 1024 )
    if len ( OoOOoO000O ) == 0 :
     break
    OooO0O00o0 . write ( OoOOoO000O )
   OooO0O00o0 . close ( )
   O0o0O0o0o = OOO00oO0oOo0O
  except :
   Oo0 = sys . exc_info ( )
   CUPS_error ( "Couldn't receive and temporarily store printer data" ,
 Oo0 [ 0 ] , Oo0 [ 1 ] )
   if OOO00oO0oOo0O is not None :
    os . unlink ( OOO00oO0oOo0O )
    if 40 - 40: OooOoo / Iii1i
    if 6 - 6: IiI11Ii111 - i1i1i1111I
   return 1
   if 59 - 59: i1I * ooo000 / ooo000 - i1
   if 19 - 19: Iii1i * Ooo0Ooo . I1Ii1I1 / I11iiIi11i1I * Ii - oOO
 else :
  O0o0O0o0o = sys . argv [ CUPS_ARGUMENT_FILE ]
  if 32 - 32: iI1iII1I1I1i
  if 18 - 18: I11iiIi11i1I * IiI11Ii111 % iI1iII1I1I1i + IiI11Ii111
 O0OO = sys . argv [ CUPS_ARGUMENT_USER ]
 oO0O0oOOo0Oo , O0ooooO = get_lpd_tunnel_port ( iiIII , O0OO )
 if 89 - 89: I1I * i1i1i1111I
 if 54 - 54: oOO + Ooo0Ooo - I1I . Ooo0Ooo
 if oO0O0oOOo0Oo == None :
  CUPS_info ( "User has session on other machine, we need to respool to" ,
 O0ooooO )
  oOOoOOOO000 = respool ( O0o0O0o0o , O0ooooO , "thinlocal" , i11i1Iii1I1 )
  if OOO00oO0oOo0O is not None :
   os . unlink ( OOO00oO0oOo0O )
  return oOOoOOOO000
  if 70 - 70: IIiIIiIi11I1 / ooOOO / IIiIIiIi11I1 - ooo000 . i1iiIII111
  if 86 - 86: I1Ii1I1 - OooOoo - oOO % ooo000 . i1I % Iii1i
 IIiiOoOOOOO = open ( O0o0O0o0o , 'rb' )
 OOo = os . stat ( O0o0O0o0o ) [ stat . ST_SIZE ]
 if 96 - 96: IiIIii11Ii . i1i1i1111I / Ii * i1 . I1I
 if OOO00oO0oOo0O is not None :
  os . unlink ( OOO00oO0oOo0O )
  if 3 - 3: i1 / IIiIIiIi11I1 / Oo * I1I % iI1iII1I1I1i
 if OOo == 0 :
  CUPS_warning ( "Empty print job. Refusing to send anything to the client." )
  return 0 ;
  if 90 - 90: I1Ii1I1 + IiI11Ii111 % Oo
  if 100 - 100: Oo + i1I
 I1II1ii111i = None
 if 14 - 14: IiI11Ii111 + i1I . IiIIii11Ii . Ooo0Ooo % IiIIii11Ii * i1i1i1111I
 oOoOO0O0 = os . environ . get ( "SOFTWARE" , "" )
 if oOoOO0O0 . startswith ( "CUPS" ) :
  I111 = oOoOO0O0 [ 5 : ] . split ( "." )
  if 35 - 35: IIiIIiIi11I1 % Ooo0Ooo - i1I * i1iiIII111 + i1
  if I111 [ 0 ] < '1' or ( I111 [ 0 ] == '1' and I111 [ 1 ] < '2' ) or ( I111 [ 0 ] == '1' and I111 [ 1 ] == '2' and I111 [ 2 ] < '3' ) :
   if 12 - 12: i1 - i1I - IiI11Ii111
   if 86 - 86: Iii1i + i1iiIII111 - IIiIIiIi11I1 / I1I
   CUPS_warning ( "You have an old CUPS which does not "
 "properly specify the content type. "
 "Attempting to auto-detect." )
   if 46 - 46: ooOOO + ooOOO % oOO
   if IIiiOoOOOOO . read ( 4 ) == b'%PDF' :
    I1II1ii111i = "application/pdf"
   else :
    I1II1ii111i = "application/octet-stream"
   IIiiOoOOOOO . seek ( 0 )
   if 2 - 2: i1i1i1111I / Ooo0Ooo / oOO - IIiIIiIi11I1 / IIiIIiIi11I1
   if 58 - 58: i1i1i1111I
   if 38 - 38: i1 - oOo0O00
   if 85 - 85: IIiIIiIi11I1 + I11iiIi11i1I % Ooo0Ooo + oOO * i1iiIII111
  if I111 [ 0 ] > '1' or ( I111 [ 0 ] == '1' and I111 [ 1 ] >= '7' ) :
   if 46 - 46: ooOOO - ooOOO + Oo / I1I * Oo + oOO
   i1II1 = os . environ . get ( "FINAL_CONTENT_TYPE" , "" )
   if i1II1 . startswith ( "printer/" ) :
    I1II1ii111i = os . environ . get ( "CONTENT_TYPE" )
    if 76 - 76: oOo0O00 % I1I . i1 + I1Ii1I1 + oOo0O00
 if I1II1ii111i is None :
  I1II1ii111i = os . environ . get ( "FINAL_CONTENT_TYPE" )
  if 2 - 2: OooOoo % Ii + oOO . OooOoo + IIiIIiIi11I1 * Oo
 if I1II1ii111i is None :
  IIIIiiIIi = os . environ . get ( "PPD" )
  if IIIIiiIIi is None or not os . path . exists ( IIIIiiIIi ) :
   I1II1ii111i = "application/octet-stream"
  else :
   I1II1ii111i = os . environ . get ( "CONTENT_TYPE" , "application/octet-stream" )
   if 9 - 9: i1i1i1111I - Ii % OooOoo / i1I
   if 39 - 39: i1
 if I1II1ii111i . startswith ( "printer/" ) or I1II1ii111i == "application/vnd.cups-raw" or I1II1ii111i == "application/vnd.cups-postscript" :
  if 16 - 16: IiI11Ii111 - IiI11Ii111 % I11iiIi11i1I / iI1iII1I1I1i - iI1iII1I1I1i
  if 39 - 39: oOo0O00 - IiI11Ii111 % IiI11Ii111 . Oo * I1I
  I1II1ii111i = "application/octet-stream"
  if 81 - 81: i1i1i1111I + I1Ii1I1
  if 31 - 31: i1i1i1111I % I1Ii1I1
 CUPS_info ( "Sending job to queue %s@127.0.0.1:%d" % ( i11i1Iii1I1 , oO0O0oOOo0Oo ) )
 if 1 - 1: IiI11Ii111 - oOo0O00 - i1 . oOo0O00
 if 91 - 91: iI1iII1I1I1i * i1 . ooOOO
 I1i = os . fork ( )
 if I1i == 0 :
  try :
   Iiii = os . open ( os . devnull , os . O_RDWR )
   os . dup2 ( Iiii , sys . stdin . fileno ( ) )
   os . dup2 ( Iiii , sys . stdout . fileno ( ) )
   os . dup2 ( Iiii , sys . stderr . fileno ( ) )
   if 40 - 40: i1I * iI1iII1I1I1i + iI1iII1I1I1i . oOo0O00 * ooo000
   Oo0oO0O0O = LPD_Client ( '127.0.0.1' , oO0O0oOOo0Oo )
   Oo0oO0O0O . connect ( )
   if 4 - 4: i1
   Oo0oO0O0O . print_fd ( i11i1Iii1I1 , IIiiOoOOOOO , OOo ,
 job_name = I11iIi1i , title = I1II1ii111i , copies = i1IIiII11 )
   if 87 - 87: Iii1i % ooOOO * Ii % IIiIIiIi11I1 / I11iiIi11i1I
   Oo0oO0O0O . close ( )
   IIiiOoOOOOO . close ( )
   os . close ( Iiii )
  except :
   if 84 - 84: I1Ii1I1 + Ooo0Ooo % IIiIIiIi11I1 * i1i1i1111I
   pass
  return 0
  if 61 - 61: i1iiIII111 - Oo + I1Ii1I1
  if 43 - 43: IIiIIiIi11I1 * ooo000 + Ii % iI1iII1I1I1i
  if 12 - 12: i1iiIII111 + ooo000 . I11iiIi11i1I
 IIiiOoOOOOO . close ( )
 return 0
 if 1 - 1: iI1iII1I1I1i % Ii - I11iiIi11i1I / IiI11Ii111 + iI1iII1I1I1i - Ii
if __name__ == '__main__' :
 sys . exit ( oOooo0OOO ( ) )
 if 27 - 27: OooOoo % iI1iII1I1I1i + IIiIIiIi11I1
 if 16 - 16: IiI11Ii111
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
