
    d                         d Z ddlZddlZddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ  ee          Zg d	Z G d
 de          Z G d de          ZdS )zTests for samba.dcerpc.mdssvc    N)
HTTPServerBaseHTTPRequestHandler)mdssvc)RpcInterfaceTestCase)mdscli)get_samba_logger)name)foobarx+xx*xx=xx'xx?xx"xx\xx(xx xc                       e Zd Zd ZdS )MdssvcHTTPRequestHandlerc           	         t          | j        d                   }| j                            |          }t	          j        |          }t	          j        | j        j                  }||k    rAt          	                    d|d|d           | 
                    ddd|d|d           d S t          | j        j        d	
          }|                     d           |                     dd           |                     dt          |                     |                                  | j                            |           d S )Nzcontent-lengthzBad request, expected:
z
Got:

i  zBad requestz
Expected: z
Got: zutf-8)encoding   zcontent-typezapplication/json; charset=UTF-8)intheadersrfilereadjsonloadsserverjson_inloggererror
send_errorbytesjson_outsend_responsesend_headerlenend_headerswfilewrite)selfcontent_lengthbodyactual_jsonexpected_jsonresps         ;/usr/lib/python3/dist-packages/samba/tests/dcerpc/mdssvc.pydo_POSTz MdssvcHTTPRequestHandler.do_POST1   sA   T\*:;<<z~..j$((
4;#677-''LLL]]]T_T_T_`aaaOOC)M +]]KKK9: : :
 FT[)G<<<3)JKKK)3t99555
    N)__name__
__module____qualname__r5    r6   r4   r   r   0   s#            r6   r   c                   @     e Zd Z fdZ fdZd Zd Zd Zd Z xZ	S )MdssvcTestsc                    t          t          |                                            t          j        d|                                           | _        t          dt          d          | _        t          j
        t          j        | f          | _        | j                            d           | j                                         t          j        d         | _        t%          j        d           t)          j        | j        d	d
          }|                                | _        |                    | j                   t0          D ]0}t3          | j        d|d          }|                                 1d S )Nz!ncacn_np:fileserver[/pipe/mdssvc])z10.53.57.35i  F)bind_and_activate)targetargsT
LOCAL_PATH   	spotlight/foo/w)superr<   setUpr   get_loadparmpiper   r   r!   	threadingThreadhttp_servert	setDaemonstartosenviron	sharepathtimesleepr   connfakepath
disconnect	testfilesopenclose)r.   rV   filef	__class__s       r4   rH   zMdssvcTests.setUpK   s:   k4  &&(((M"EtGXGXGZGZ[[	 !6!938: : : !)@wOOOL1
1{49k6::((	""" 	 	D5s;;AGGIIII	 	r6   c                     t          t          |                                            t          D ] }t	          j        | j        d|           !d S )NrE   )rG   r   tearDownrY   rQ   removerS   )r.   r\   r^   s     r4   r`   zMdssvcTests.tearDownb   sY    "D))22444 	8 	8DI67777	8 	8r6   c                     | j                                          | j                                          | j                                          d S )N)r!   server_bindserver_activateserve_forever)r.   s    r4   rM   zMdssvcTests.http_serverg   sD    !!!##%%%!!#####r6   c                     |                     d| j                  | j        _        |                     d| j                  | j        _        t          j        | j        dd          | _        | j                            | j        || j	                  }t          j        d           |                    | j                  }|                     ||           |                    | j                   | j                            | j                   d S )Nz
%BASEPATH%rC   rD   rB   )replacerS   r!   r"   r'   r   rV   rJ   searchrW   rT   rU   get_resultsassertEqualr[   rX   )r.   queryexpectr"   r'   rh   resultss          r4   run_testzMdssvcTests.run_testl   s    %oolDNKK'//dnMMK	;??	!!$)UDMBB
 	
1$$TY//&)))TY	TY'''''r6   c                 F    d}d}ddg}|                      d|||           d S )Nz{
          "from": 0, "size": 50, "_source": ["path.real"],
          "query": {
            "query_string": {
              "query": "(samba*) AND path.real.fulltext:\"%BASEPATH%\""
            }
          }
        }z{
          "hits" : {
            "total" : { "value" : 2},
            "hits" : [
              {"_source" : {"path" : {"real" : "%BASEPATH%/foo"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/bar"}}}
            ]
          }
        }r
   r   z*=="samba*"rn   )r.   exp_json_queryfake_json_responseexp_resultss       r4   test_mdscli_searchzMdssvcTests.test_mdscli_search~   s;     enm[.BTUUUUUr6   c                 J    d}d}d}g d}|                      ||||           d S )NzkMDItemFSName=="x+x"||kMDItemFSName=="x\*x"||kMDItemFSName=="x=x"||kMDItemFSName=="x'x"||kMDItemFSName=="x?x"||kMDItemFSName=="x x"||kMDItemFSName=="x(x"||kMDItemFSName=="x\"x"||kMDItemFSName=="x\\x"a  {
          "from": 0, "size": 50, "_source": ["path.real"],
          "query": {
            "query_string": {
              "query": "(file.filename:x\\+x OR file.filename:x\\*x OR file.filename:x=x OR file.filename:x'x OR file.filename:x\\?x OR file.filename:x\\ x OR file.filename:x\\(x OR file.filename:x\\\"x OR file.filename:x\\\\x) AND path.real.fulltext:\"%BASEPATH%\""
            }
          }
        }a  {
          "hits" : {
            "total" : {"value" : 9},
            "hits" : [
              {"_source" : {"path" : {"real" : "%BASEPATH%/x+x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x*x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x=x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x'x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x?x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x(x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x\"x"}}},
              {"_source" : {"path" : {"real" : "%BASEPATH%/x\\x"}}}
            ]
          }
        })	r   r   r   r   r   r   r   r   r   rp   )r.   sl_queryrq   rr   rs   s        r4   test_mdscli_search_escapesz&MdssvcTests.test_mdscli_search_escapes   sM    % 	 

 

 

 	h^=OPPPPPr6   )
r7   r8   r9   rH   r`   rM   rn   rt   rw   __classcell__)r^   s   @r4   r<   r<   I   s            .8 8 8 8 8
$ $ $
( ( ($V V V*/Q /Q /Q /Q /Q /Q /Qr6   r<   )__doc__rQ   rT   rK   loggingr   http.serverr   r   samba.dcerpcr   samba.testsr   samba.samba3r   samba.loggerr   r7   r#   rY   r   r<   r:   r6   r4   <module>r      s5  & $ # 				        : : : : : : : :       , , , , , ,       ) ) ) ) ) )		x	(	(	(  	    5   2yQ yQ yQ yQ yQ& yQ yQ yQ yQ yQr6   