%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3/dist-packages/duplicity/backends/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/webdavbackend.cpython-312.pyc

�

�2e�I��p�ddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZ
ddl
mZddl
mZddl
mZddlmZmZGd�dej(j*�ZGd�d	ej.j0�ZGd
�de
j4j6�Ze
j4j;de�e
j4j;d
e�e
j4j;de�e
j4j;de�e
j4j<j?gd��y)�N)�config)�log)�util)�BackendException�FatalBackendExceptionc��eZdZdZd�Zd�Zy)�CustomMethodRequestz�
    This request subclass allows explicit specification of
    the HTTP request method. Basic urllib.request.Request class
    chooses GET or POST depending on self.has_data()
    c�l�||_tjjj|g|��i|��y�N)�method�urllib�request�Request�__init__)�selfr�args�kwargss    �B/usr/lib/python3/dist-packages/duplicity/backends/webdavbackend.pyrzCustomMethodRequest.__init__4s+����������'�'��>�t�>�v�>�c��|jSr)r�rs r�
get_methodzCustomMethodRequest.get_method8s���{�{�rN)�__name__�
__module__�__qualname__�__doc__rr�rrr	r	-s���?�rr	c��eZdZd�Zd�Zd�Zy)�VerifiedHTTPSConnectionc�n�	ddladdlatjjj|g|��i|��tj|_gd�|_|jsX|jD]I}tjj|�}tjj!|�s�B||_n|jrPtj"|jtj$�s!tt	d�|jz��yy#t$rtt	d���wxYw)Nrz%Missing socket or ssl python modules.)z~/.duplicity/cacert.pemz~/duplicity_cacert.pemz/etc/duplicity/cacert.pemz*Cacert database file '%s' is not readable.)�socket�ssl�ImportErrorr�_�http�client�HTTPSConnectionrr�ssl_cacert_file�cacert_file�cacert_candidates�os�path�
expanduser�isfile�access�R_OK)rrrr,s    rrz VerifiedHTTPSConnection.__init__=s��	T���	
���#�#�,�,�T�C�D�C�F�C�!�1�1���"
�������.�.�
���w�w�)�)�$�/���7�7�>�>�$�'�'+�D�$��	
����B�I�I�d�.>�.>����$H�'��*V�(W�Z^�Zj�Zj�(j�k�k�%I���)�	T�'��*Q�(R�S�S�	T�s�D�D4c��tj|j|jf|j�}|j
r||_|j�tjtjj|jtj��}|j||j��|_y)N)�cafile�capath)�server_hostname)r!�create_connection�host�port�timeout�_tunnel_host�sock�tunnelr"�create_default_context�Purpose�SERVER_AUTHr)r�ssl_cacert_path�wrap_socket)rr:�contexts   r�connectzVerifiedHTTPSConnection.connectYs����'�'����D�I�I�(>����M������D�I��K�K�M��,�,��K�K�#�#��#�#��)�)�-�
��
�'�'��d�i�i�'�H��	rc��	tjjj|g|��i|��S#tj
$r?}t
dtj|���tjj��d}~wwxYw)NzSSL failed: )r%r&r'rr"�SSLErrorrr�uexcr�	ErrorCode�
backend_error)rrr�es    rrzVerifiedHTTPSConnection.requestgsi��	_��;�;�.�.�6�6�t�M�d�M�f�M�M���|�|�	_�"�\�$�)�)�A�,��#@�#�-�-�B]�B]�^�^��	_�s�,/�B�:A<�<BN)rrrrrBrrrrrr<s��l�8I�_rrc��eZdZdZ	dZ	d�Zd�Zd�Zd�Zdd�Z	d�Z
dd
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy	)�
WebDAVBackendz}Backend for accessing a WebDAV repository.

    webdav backend contributed in 2006 by Jesper Zedlitz <jesper@zedlitz.de>
    z_<?xml version="1.0"?><D:propfind xmlns:D="DAV:"><D:prop><D:resourcetype/></D:prop></D:propfind>c��tjjj||�ddd�|_t
jrG	tj|jtjt
j��|_||_d|_d|_|j&|_|j)�|_|j-|j.�|_tj2t5d�|j6|j8fz�tj2t5d�|j0fz�d|_y#t$r}tjd�Yd}~��d}~wt$r }tjd�Yd}~��d}~wt$r#}tjd|���Yd}~��:d}~wwxYw)	Nz
keep-alivezapplication/octet-stream)�
ConnectionzContent-TypezG--webdav-headers value has an odd number of arguments.  Must be paired.z<--webdav-headers value has bad syntax.  Check quoting pairs.z%--webdav-headers value caused error: zUsing WebDAV host %s port %szUsing WebDAV directory %s)�	duplicity�backend�Backendr�headersr�webdav_headersr�merge_dicts�csv_args_to_dict�
IndexErrorr�
FatalError�SyntaxError�	Exception�
FatalErrof�
parsed_url�digest_challenge�digest_auth_handler�username�get_password�password�
sanitize_pathr,�	directory�Infor$�hostnamer7�conn)rrYrHs   rrzWebDAVBackend.__init__|s`�����!�!�*�*�4��<�'�6�
���� � �
L�#�/�/����d�>S�>S�TZ�Ti�Ti�>j�k���%��� $���#'�� �"�+�+��
��)�)�+��
��+�+�J�O�O�<�������1�2�j�6I�6I�:�?�?�5[�[�\�����.�/�4�>�>�2C�C�D���	��%�
j����h�i�i���
_����]�^�^���
L����!F�q�c�J�K�K��
L�s1�AE�	G�E5�5G�F�G�(G�Gc�\�|r*tjd�}|jd|�d��Sy)Nz/+�/)�re�compile�sub)rr,�foldpaths   rr_zWebDAVBackend.sanitize_path�s-����z�z�$�'�H��<�<���v�Q�Z�0�0�rc�j�d}|D]+}|j|jk(s�||jz}�-|S)N�)�nodeType�	TEXT_NODE�data)r�nodelist�rc�nodes    r�getTextzWebDAVBackend.getText�s:��
���	$�D��}�}����.��$�)�)�^��	$��	rc�(�|jd��y)NT)�forced)rBrs r�_retry_cleanupzWebDAVBackend._retry_cleanup�s�����D��!rc��|s:|jr.|jj|jjk(ryt	j
t
d�|jjz�|j�|jjdvrNtjj|jj|jj�|_y|jjdvr�tjrNtjj|jj|jj�|_yt!|jj|jj�|_yt#t
d�|jjz��)z�
        Connect or re-connect to the server, updates self.conn
        # reconnect on errors as a precaution, there are errors e.g.
        # "[Errno 32] Broken pipe" or SSl errors that render the connection unusable
        Nz WebDAV create connection on '%s')�webdavr%)�webdavs�httpszWebDAV Unknown URI scheme: %s)rcr6rYrbrrar$�_close�schemer%r&�HTTPConnectionr7r�ssl_no_check_certificater'rr)rrts  rrBzWebDAVBackend.connect�s���$�)�)��	�	���$�/�/�:R�:R�(R������5�6����9Q�9Q�Q�R����
��?�?�!�!�%7�7����2�2�4�?�?�3K�3K�T�_�_�Ma�Ma�b�D�I�
�_�_�
#�
#�';�
;��.�.� �K�K�7�7����8P�8P�RV�Ra�Ra�Rf�Rf�g��	�3�D�O�O�4L�4L�d�o�o�Nb�Nb�c��	�'��*I�(J�T�_�_�Mc�Mc�(c�d�drc�R�|jr|jj�yyr)rc�closers rrzzWebDAVBackend._close�s���9�9��I�I�O�O��rNc�@�|j�|j�tjj	|d�}|j
�|j
|�|jd<tjtd�|||jfz�tjtd�tt|��z�|jj||||j�|jj�}tjtd�|j |j"fz�|j dv�r|dk(r�|j%d	d�}|j'�|r�tj(td
�tjj+|�z�|dkDrt-td���t.j0j3|�|_|j7|j4j8�|_|j||j:||d
z�St-td���|j dk(�r7|j=�|j'�|j?||�|jd<tjtd��tjtd�|||jfz�tjtd�tt|��z�|jj||||j�|jj�}tjtd�|j |j"fz�|S)zi
        Wraps the connection.request method to retry once if authentication is
        required
        z/:~N�
Authorizationz&WebDAV %s %s request with headers: %s zWebDAV data length: %s z+WebDAV response status %s with reason '%s'.)i-i.�PROPFIND�locationzWebDAV redirect to: %s �
z&WebDAV redirected 10 times. Giving up.�z4WebDAV missing location header in redirect response.i�z3WebDAV retry request with authentification headers.z'WebDAV %s %s request2 with headers: %s z,WebDAV response2 status %s with reason '%s'.) rzrBr
�parse�quoterZ�get_digest_authorizationrPrrar$�len�strrcr�getresponse�status�reason�	getheaderr�Notice�unquoterrMrN�	ParsedUrlrYr_r,r`�read�get_authorization)rrr,rn�
redirected�quoted_path�response�redirect_urls        rrzWebDAVBackend.request�s���
	
���
������l�l�(�(��u�5��� � �,�,0�,I�,I�$�,O�D�L�L��)�����;�<���UY�Ua�Ua�?b�b�c�����,�-��C��I��>�?��	�	���&�+�t�T�\�\�B��9�9�(�(�*������@�A�X�_�_�V^�Ve�Ve�Df�f�g��?�?�j�(�V�z�-A�#�-�-�j�$�?�L��N�N����
�
�1�6�7�&�,�,�:N�:N�|�:\�\�]���?�/��2Z�0[�\�\�"+�"3�"3�"=�"=�l�"K���!%�!3�!3�D�O�O�4H�4H�!I����|�|�F�D�N�N�D�*�q�.�Q�Q�+�A�.d�,e�f�f�
�_�_��
#��M�M�O��N�N��,0�,B�,B�8�[�,Y�D�L�L��)��H�H�Q�L�M�N��H�H�Q�@�A�V�[�Z^�Zf�Zf�Dg�g�h��H�H�Q�0�1�C��D�	�N�B�C��I�I���f�k�4����F��y�y�,�,�.�H��H�H�Q�E�F�(�/�/�[c�[j�[j�Ik�k�l��rc�n�	|jdd�}|jdd�\}}|jd�dj�dk(r	|j	�S|j�dk(r|j�S|j|�|_|j|�S#t$rYywxYw#t
$r1t
jtd	��|j�cYSt$r;}t
jtd
�|z�|j�cYd}~Sd}~wwxYw)zY
        Fetches the auth header based on the requested method (basic or digest)
        zwww-authenticaterk� r�N�,r�	negotiatezkpython-kerberos needed to use kerberos                           authorization, falling back to basic auth.zWKerberos authorization failed: %s.                          Falling back to basic auth.�basic)r��split�
ValueError�lower�get_kerberos_authorizationr#r�Warnr$�get_basic_authorizationrW�parse_digest_challengerZr�)rr�r,�auth_hdr�token�	challengerHs       rr�zWebDAVBackend.get_authorization�s3��	��)�)�*<�b�A�H�'�~�~�c�1�5��E�9��;�;�s��A��$�$�&�+�5�
6��6�6�8�8�$�[�[�]�g�
%��/�/�1�1�$(�$?�$?�	�$J�D�!��0�0��6�6��5�	��	��
�
6�����F����3�3�5�5��
6�����7���	���3�3�5�5��
6�s5�'B)�B8�)	B5�4B5�87D4�1D4�90D/�)D4�/D4c�z�tjjtjj|��Sr)r
r�parse_keqv_list�parse_http_list)r�challenge_strings  rr�z$WebDAVBackend.parse_digest_challenges'���~�~�-�-�f�n�n�.L�.L�M]�.^�_�_rc��ddl}|jd|jj���\}}|j	|d�|j|�}d|��S)NrzHTTP@rkz
Negotiate )�kerberos�authGSSClientInitrcr6�authGSSClientStep�authGSSClientResponse)rr�r$�ctx�tgts     rr�z(WebDAVBackend.get_kerberos_authorizationsV����+�+�e�D�I�I�N�N�3C�,D�E���3��"�"�3��+��,�,�S�1���C�5�!�!rc��|j�d|j��}dtj|j	��j�j
���S)z/
        Returns the basic auth header
        �:zBasic )r\r^�base64�	b64encode�encode�strip�decode)r�auth_strings  rr�z%WebDAVBackend.get_basic_authorizationsP������q�����8����(�(��);�);�)=�>�D�D�F�M�M�O�P�Q�Qrc�r�|j}|j�~tjj	�}|jd|jj|j|j�tjj|�|_|jdk(xrdxsd}|jxr|j�d|j��xs|j}|�d|�|��}t|jj|�}|jj!||j"�}d|��S)z0
        Returns the digest auth header
        Nrxryr%r�z://zDigest )rYr[r
r�HTTPPasswordMgrWithDefaultRealm�add_passwordrcr6r\r^�HTTPDigestAuthHandlerr{r7rbr	�_methodr�rZ)	rr,�u�
pw_managerr{rb�	dummy_url�	dummy_reqr�s	         rr�z&WebDAVBackend.get_digest_authorization&s���
�O�O���#�#�+����G�G�I�J��#�#�D�$�)�)�.�.�$�-�-����W�'-�~�~�'K�'K�J�'W�D�$����Y�&�2�7�<�f���6�6�6�����A�a�f�f�X�6�D�!�*�*���h�c�(��D�6�2�	�'��	�	�(9�(9�9�E�	��.�.�@�@��D�La�La�b����
�&�&rc�b�d}	d|jd<|jd|j|j�}|jd=|jdk(r5|j�|j
�g|r|j�SS|jdvr!|j�}|j�n:|j}|j}|j�td|�d|�d���tj|��tjjj|�}g}|j!d	d
�D]'}|j#|�}|s�|j%|��)||r|j�SS#t&$r}	|	�d}	~	wwxYw#|r|j�wwxYw)N�1�Depthr��)����zBad status code z reason �.�*�href)rPrr`�listbodyr�r�makedirr�r�rr�Debug�xml�dom�minidom�parseString�getElementsByTagNameNS�
taste_href�appendrW)
rr��documentr�r�r��resultr��filenamerHs
          r�_listzWebDAVBackend._list9sz����	!�$'�D�L�L��!��|�|�J�����
�
�N�H����W�%����#�%���� ������*���� ��)���J�.�#�=�=�?����� �!����!������� �&�)9�&���&��QR�'S�T�T��I�I��
�$��'�'�/�/�-�-�h�7�C��F��2�2�3��?�
,���?�?�4�0����M�M�(�+�
,������ ����	��G��	������ ��s1�A3F�CF�F�	F�F�F�F�F.c	�t�|jjd�}|ddk(r|dd}tdt|��D]�}dj	|d|dz��d�}d|j
d<|j
d|�}|j
d=tjd	|�d
t|j����|jdk(s��tjtd�|z�|j
d
|�}|jdk7s��ttd�||j|jfz��y)z(Make (nested) directories on the server.re���rkrr�r�r�r�zChecking existence dir z: r�zCreating missing directory %s�MKCOL��zWebDAV MKCOL %s failed: %s %sN)r`r��ranger��joinrPrrra�intr�r$rr�)r�dirs�i�dr��ress      rr�zWebDAVBackend.makedir\s#���~�~�#�#�C�(����8�r�>���"�:�D��q�#�d�)�$�	m�A��8�8�D��1�q�5�M�*�+�1�-�A�$'�D�L�L��!��|�|�J��2�H����W�%��H�H�.�q�c��C����4H�3I�J�K����#�%�����:�;�a�?�@��l�l�7�A�.���:�:��$�*�1�-L�+M�QR�TW�T^�T^�`c�`j�`j�Pk�+k�l�l�	mrc�b�|j|j�j�}tjjtjj
|��}|j}tjtd�||fz�|j�U|j|jjk(s2d|j�d|jj�d�}t|��|j|j�r|j!|jdd�}|Sy)z�
        Internal helper to taste the given href node and, if
        it is a duplicity file, collect it as a result file.

        @return: A matching filename, or None if the href did not match.
        z.WebDAV path decoding and translation: %s -> %sNzCReceived filename was in the form of a full url, but the hostname (z0) did not match that of the webdav backend url (z`) - aborting as a conservative safety measure. If this happens to you, please report the problemrkr�)rr�
childNodesr�r
r��urlparser�r,rr�r$rbrYr�
startswithr`�replace)rr��raw_filenamerYr��ms      rr�zWebDAVBackend.taste_hrefss���|�|�D�O�O�4�:�:�<���\�\�*�*�6�<�<�+?�+?��+M�N�
��?�?���	�	�!�G�H�L�Zb�Kc�c�d����*�J�4G�4G�4�?�?�Kc�Kc�4c�U�V`�Vi�Vi�Uj�kA�AE���AY�AY�@Z�[o�p�
�
#�1�%�%����t�~�~�.��'�'�����A�>�H��O�rc�$�|jtj|�z}d}	|jd�}|j	d|�}|j
dk(r9t
j||�|j�rJ�|j�nA|j
}|j}|j�ttd�||fz��	|r|j�yy#t$r}|�d}~wwxYw#|r|j�wwxYw)N�wb�GETr�z(WebDAV GET Bad status code %s reason %s.)
r`r+�fsdecode�openrr��shutil�copyfileobjrr�rr$rW)	r�remote_filename�
local_path�urlr��target_filer�r�rHs	         r�_getzWebDAVBackend._get�s����n�n�r�{�{�?�;�;����	!�$�/�/�$�/�K��|�|�E�3�/�H����#�%��"�"�8�[�9�'�,�,�.�.�.���� �!����!������� �&�q�)S�'T�X^�`f�Wg�'g�h�h�!����� ����	��G��	������ ��s$�B,C'�'	C7�0C2�2C7�7C:�:Dc��|jtj|�z}d}	|jd�}|j	d||j��}|jdvr!|j�|j�nA|j}|j}|j�ttd�||fz��	|r|j�yy#t$r}|�d}~wwxYw#|r|j�wwxYw)N�rb�PUT)r�r���z(WebDAV PUT Bad status code %s reason %s.)r`r+r�r�rr�r�rr�rr$rW)	r�source_pathr�r�r��source_filer�r�rHs	         r�_putzWebDAVBackend._put�s����n�n�r�{�{�?�;�;����	!�%�*�*�4�0�K��|�|�E�3��0@�0@�0B�C�H����/�1��
�
����� �!����!������� �&�q�)S�'T�X^�`f�Wg�'g�h�h�!����� ����	��G��	������ ��s$�B"C�	C-�&C(�(C-�-C0�0Dc���|jtj|�z}d}	|jd|�}|jdvr!|j�|j
�nA|j}|j}|j
�ttd�||fz��	|r|j
�yy#t$r}|�d}~wwxYw#|r|j
�wwxYw)N�DELETE)r�r�z(WebDAV DEL Bad status code %s reason %s.)r`r+r�rr�r�rr�rr$rW)rr�r�r�r�r�rHs       r�_deletezWebDAVBackend._delete�s����n�n�r�{�{�8�4�4����	!��|�|�H�c�2�H����*�,��
�
����� �!����!������� �&�q�)S�'T�X^�`f�Wg�'g�h�h�!����� ����	��G��	������ ��s$�BB=�=	C
�C�C
�
C�C%)F)Nr)rrrrr�rr_rrrurBrzrr�r�r�r�r�r�r�r�r�r�rrrrrJrJosy���
�q�H�7��<��"�e�,�*�X!7�F`�"�R�'�&!!�Fm�.�@!�2!�*!rrJr%ryrwrx)r%ryrwrx) r��http.clientr%r+rfr��urllib.errorr
�urllib.parse�urllib.request�xml.dom.minidomr��duplicity.backendrMrrr�duplicity.errorsrrrrr	r&r'rrNrOrJ�register_backend�uses_netloc�extendrrr�<module>rs���2��	�	�
�����������&�.�.�0�0��0_�d�k�k�9�9�0_�fc!�I�%�%�-�-�c!�L
���"�"�6�=�9�	���"�"�7�M�:�	���"�"�8�]�;�	���"�"�9�m�<�	�����$�$�%K�Lr

Zerion Mini Shell 1.0