
    @Oc                         d dl mZ d dlZd dlZd dlmZ d dlmZ ej        	                    ej
                            d          d          Z G d de          Z G d	 d
e          Z G d de          ZdS )    )BlackboxTestCaseN)check_output)SamDB
SRCDIR_ABSz(source4/scripting/bin/samba_downgrade_dbc                   8     e Zd ZdZ fdZ fdZd Zd Z xZS )DowngradeTestBasez>Test that sambadowngradedatabase downgrades the samba databasec                    t          t          |                                            t          | d          s|                     d           d}|                    |           }|                     |d           t          j        	                    | j
        d          t          j        	                    d          | _        t          j        | j        dg	          | _        | j                            d
t          j        dg          }|d         d         }d |D             }fd|D             | _        | j                            | j                   d S )Nbackendz%Subclass this class and set 'backend'zsamba-tool domain provision --domain FOO --realm foo.example.com --targetdir {self.tempdir} --backend-store {self.backend} --host-name downgradetest --option="vfs objects=dfs_samba4 acl_xattr fake_acls xattr_tdb")selfzProvisioning for downgradeprivatezsam.ldbzmodules:)optionsz
@PARTITION	partitionbasescopeattrsr   c                 ^    g | ]*}t          |                              d           d         +S ):   )strsplit).0ps     H/usr/lib/python3/dist-packages/samba/tests/blackbox/downgradedatabase.py
<listcomp>z+DowngradeTestBase.setUp.<locals>.<listcomp>5   s/    ???qc!ffll3''*???    c                 P    g | ]"}t           j                            |          #S  )ospathjoin)r   r   private_dirs     r   r   z+DowngradeTestBase.setUp.<locals>.<listcomp>6   s9     ) ) ) GLLa00 ) ) )r   )superr   setUphasattrfailformat	check_runr   r    r!   tempdirsam_pathldbLdbsearch
SCOPE_BASEdbsappend)r   prov_cmd
partitionsr"   	__class__s      @r   r$   zDowngradeTestBase.setUp   sO   &&,,...tY'' 	?II=>>>W ???--x!=>>>gll4<;;[)<<74=:,???X__,-0^.9] % < <
  ];/
??J???
) ) ) )') ) )&&&&&r   c                     |                      ddddd           |                     dd           t          t          |                                            d S )Nr   etcstatezbind-dnszmsg.lockz	names.tdbzgencache.tdb)rm_dirsrm_filesr#   r   tearDown)r   r3   s    r   r9   zDowngradeTestBase.tearDown:   s`    Y		! 	! 	!
 	k>222&&//11111r   c                 P  	
 g }| j         D ]M}t          dd|g          }|                    d          }|                    d          }|d |D             z  }Nd		fd|D             }dfd	|D             }d
 |D             }d

fd|D             }d |D             }|||fS )Nzbin/ldbdumpz-izutf-8
c                 <    g | ]}|                     d           |S )#
startswithr   ss     r   r   z?DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<listcomp>N   s)    >>>qALL,=,=>>>>r   z# key: GUID=c                 h    h | ].}|                               |t                    d          /S Nr?   len)r   cguid_key_tags     r   	<setcomp>z>DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<setcomp>Q   sL     4 4 4q\224Qs<(())* 4 4 4r   z
# key: DN=c                 h    h | ].}|                               |t                    d          /S rC   rD   )r   rF   
dn_key_tags     r   rH   z>DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<setcomp>U   sJ     0 0 01ll:..01S__%%& 0 0 0r   c                 <    h | ]}|                     d           |S )@r>   )r   ds     r   rH   z>DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<setcomp>Y   s)    KKKQc9J9JKqKKKr   z# pack format: c                 h    h | ].}|                               |t                    d          /S rC   rD   )r   rF   pack_format_tags     r   rH   z>DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<setcomp>\   sL     : : :Q<<88:#o..//0 : : :r   c                 .    g | ]}t          |d           S )   )intr@   s     r   r   z?DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<listcomp>^   s     999qAr

999r   )r/   r   decoder   )r   commentsdbdump	guid_keysdn_keysdn_keys_no_at_attrspack_formatsrJ   rG   rO   s           @@@r   ldbdump_keys_pack_formatsz+DowngradeTestBase.ldbdump_keys_pack_formatsG   s)   ( 	? 	?Bb 9::D;;w''D::d##D>>D>>>>HH%4 4 4 4H 4 4 4	 "
0 0 0 0 0 0 0 LK'KKK+: : : :( : : :99L999"I|;;r   c                     | j                             dt           j        dg          |                     t	                    d           d                                         }fd|D             }|S )Nz@ATTRIBUTES*r   r   r   c                 `    h | ]*}t          d                              |                    +S )r   )r   get)r   kat_attributess     r   rH   z4DowngradeTestBase.attribute_types.<locals>.<setcomp>i   s4    FFFA3}Q/33A6677FFFr   )r+   r-   r.   assertEqualrE   keys)r   rc   attribute_typesra   s      @r   rd   z!DowngradeTestBase.attribute_typesc   s~    ]0314 ( 7 7 	]++Q///Q$$&&FFFFFFFr   )	__name__
__module____qualname____doc__r$   r9   r[   rd   __classcell__)r3   s   @r   r   r      su        HH' ' ' ' '62 2 2 2 2< < <8      r   r   c                       e Zd ZdZd ZdS )DowngradeTestTDBtdbc                 V   d}t           j        t          |          d          }|                                 \  }}}|                     t          |          d           |                     t          |          d           |                     ||                                 v            |                     |t           j        g           t          |          }| 	                    t          d| j        d           |                                 \  }}}|                     t          |          d           |                     t          |          |           |                     ||                                 v           |                     |t           j        g           d S NLDB_SYNTAX_   r   z -H zRunning sambadowngradedatabase)msgr+   SYNTAX_ORDERED_INTEGERrE   r[   assertGreaterrb   
assertTruerd   PACKING_FORMAT_V2r(   COMMANDr*   PACKING_FORMATr   type_prefixordered_int_typerX   rW   rZ   num_guid_keys_before_downgrades          r   test_downgrade_databasez(DowngradeTestTDB.test_downgrade_databaset   s   #5c+6F6F6G6GH+/+I+I+K+K(L3y>>2...Wq)))(D,@,@,B,BBCCC(='>???),Y&WWWdmm<; 	 	= 	= 	= ,0+I+I+K+K(LY+++W'EFFF(0D0D0F0FFGGG(:';<<<<<r   N)re   rf   rg   r
   r}   r   r   r   rk   rk   m   (        G= = = = =r   rk   c                       e Zd ZdZd ZdS )DowngradeTestMDBmdbc                 V   d}t           j        t          |          d          }|                                 \  }}}|                     t          |          d           |                     t          |          d           |                     ||                                 v            |                     |t           j        g           t          |          }| 	                    t          d| j        d           |                                 \  }}}|                     t          |          |           |                     t          |          d           |                     ||                                 v           |                     |t           j        g           d S rn   rr   ry   s          r   test_undo_guidzDowngradeTestMDB.test_undo_guid   s   #5c+6F6F6G6GH+/+I+I+K+K(L3y>>2...Wq)))(D,@,@,B,BBCCC(='>???),Y&WWWdmm<; 	 	= 	= 	= ,0+I+I+K+K(LY)GHHHWq)))(0D0D0F0FFGGG(:';<<<<<r   N)re   rf   rg   r
   r   r   r   r   r   r      r~   r   r   )samba.testsr   r   r+   
subprocessr   samba.samdbr   r    r!   environr_   rw   r   rk   r   r   r   r   <module>r      s  $ ) ( ( ( ( ( 				 



 # # # # # #      
',,rz~~l339; ;O O O O O( O O Ob= = = = =( = = =8= = = = =( = = = = =r   