o
    àý°jÖo  ã                   @   sê   d dl mZ d dl mZ d dlm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 d dlmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZmZmZ d d
lmZm Z  d dl!m"Z" d dl#Z$G dd„ dej%ƒZ&dS )é    )Údivision)Úprint_function)ÚBytesION)ÚPY2)ÚsamrÚ	transportÚsrvs)ÚNULL)ÚLOG)	ÚSMBConnectionÚSMB2_DIALECT_002ÚSMB2_DIALECT_21ÚSMB_DIALECTÚSessionErrorÚFILE_READ_DATAÚFILE_SHARE_READÚFILE_SHARE_WRITEÚFILE_SHARE_DELETE)ÚFILE_DIRECTORY_FILEÚFILE_LIST_DIRECTORY)Ú
SMBFileACLc                   @   sj  e Zd ZdZdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd[d1d2„Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!d\dBdC„Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dS )]ÚMiniImpacketShellNc              	   C   s¾   |d ur"t jj| |j|jd |jt_|jt_|jt_d| _|| _n	t j | ¡ d | _d| _	|| _
| ¡ \| _| _| _| _| _| _| _| _d | _d| _d| _d | _d| _d | _g | _|| _d S )N)ÚstdinÚstdoutFz# zType help for list of commandsÚ T)ÚcmdÚCmdÚ__init__r   r   ÚsysÚstderrÚuse_rawinputÚshellÚpromptÚsmbÚgetCredentialsÚusernameÚpasswordÚdomainÚlmhashÚnthashÚaesKeyÚTGTÚTGSÚtidÚintroÚpwdÚshareÚloggedInÚlast_outputÚ
completionÚ
outputfile)ÚselfÚ	smbClientÚtcpShellr4   © r8   úŽ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/smbclient.pyr   *   s(   (
zMiniImpacketShell.__init__c                 C   s   d S ©Nr8   )r5   r8   r8   r9   Ú	emptylineE   s   zMiniImpacketShell.emptylinec                 C   sB   | j d urt| j dƒ}| d| d ¡ | ¡  tr| d¡S |S )NÚaz> Ú
zutf-8)r4   ÚopenÚwriteÚcloser   Údecode©r5   ÚlineÚfr8   r8   r9   ÚprecmdH   s   

zMiniImpacketShell.precmdc              
   C   sX   d}z
t j | |¡}W |S  ty+ } zt |¡ tjddd W Y d }~|S d }~ww )NFzException infoT)Úexc_info)r   r   ÚonecmdÚ	Exceptionr
   ÚerrorÚdebug)r5   ÚsÚretValÚer8   r8   r9   rG   R   s   ü
€üzMiniImpacketShell.onecmdc                 C   s   | j d ur
| j  ¡  dS )NT)r!   r@   ©r5   rC   r8   r8   r9   Údo_exit\   s   

zMiniImpacketShell.do_exitc                 C   s    t  |¡ ¡ }t|ƒ || _d S r:   )ÚosÚpopenÚreadÚprintr2   )r5   rC   Úoutputr8   r8   r9   Údo_shella   s   
zMiniImpacketShell.do_shellc                 C   s   t dƒ d S )NaÆ  
 open {host,port=445} - opens a SMB connection against the target host/port
 reconnect - reconnect connection, useful for broken pipes & interrupted sessions
 login {domain/username,passwd} - logs into the current SMB connection, no parameters for NULL connection. If no password specified, it'll be prompted
 kerberos_login {domain/username,passwd} - logs into the current SMB connection using Kerberos. If no password specified, it'll be prompted. Use the DNS resolvable domain name
 login_hash {domain/username,lmhash:nthash} - logs into the current SMB connection using the password hashes
 logoff - logs off
 shares - list available shares
 use {sharename} - connect to an specific share
 cd {path} - changes the current directory to {path}
 lcd {path} - changes the current local directory to {path}
 pwd - shows current remote directory
 password - changes the user password, the new password will be prompted for input
 ls {wildcard} - lists all the files in the current directory
 lls {dirname} - lists all the files on the local filesystem.
 tree {filepath} - recursively lists all files in folder and sub folders
 rm {file} - removes the selected file
 mkdir {dirname} - creates the directory under the current path
 rmdir {dirname} - removes the directory under the current path
 put {filename} - uploads the filename into the current path
 get {filename} - downloads the filename from the current path
 mget {mask} - downloads all files from the current directory matching the provided mask
 rget {mask} - recursively downloads all files from the current directory and subdirectories matching the provided mask
 cat {filename} - reads the filename from the current path
 mount {target,path} - creates a mount point from {path} to {target} (admin required)
 umount {path} - removes the mount point at {path} without deleting the directory (admin required)
 list_snapshots {path} - lists the vss snapshots for the specified path
 info - returns NetrServerInfo main results
 who - returns the sessions currently connected at the target host (admin required)
 acl {filename,action,permissions,user/group} - displays or modifies file ACLs
 close - closes the current SMB Session
 exit - terminates the server process (and this session)

©rS   rN   r8   r8   r9   Údo_helpf   s   zMiniImpacketShell.do_helpc              	   C   s”   | j du rt d¡ d S ddlm} |dƒ}tj| j ¡ d| jd}| ¡ }| 	¡  | 
tj¡ t |d| j| j|| j| j¡ || _d | _d | _d S )	NFúNot logged inr   ©ÚgetpasszNew Password:z\samr©ÚfilenameÚsmb_connectionú )r1   r
   rI   rZ   r   ÚSMBTransportr#   ÚgetRemoteHostÚget_dce_rpcÚconnectÚbindr   ÚMSRPC_UUID_SAMRÚhSamrUnicodeChangePasswordUser2r%   r&   r(   r)   )r5   rC   rZ   ÚnewPasswordÚrpctransportÚdcer8   r8   r9   Údo_passwordŠ   s   


zMiniImpacketShell.do_passwordc                 C   sè   |  d¡}d}t|ƒdkr|d }t|ƒdkrt|d ƒ}|dkr*td||d| _nt|||d| _| j ¡ }|tkrAt d¡ n|t	krKt d	¡ n|t
krUt d
¡ nt d¡ d | _d | _d| _d| _d | _d | _d | _d | _d S )Nú i½  r   é   é‹   z
*SMBSERVER)Ú	sess_portzSMBv1 dialect usedzSMBv2.0 dialect usedzSMBv2.1 dialect usedzSMBv3.0 dialect usedr   F)ÚsplitÚlenÚintr   r#   Ú
getDialectr   r
   Úinfor   r   r0   r-   r/   r1   r&   r(   r)   r%   )r5   rC   ÚlÚportÚhostÚdialectr8   r8   r9   Údo_open™   s2   



zMiniImpacketShell.do_openc                 C   s"   | j r
| j  ¡  d S t d¡ d S )Nz%Not reconnecting a closed connection.)r#   Ú	reconnectr
   ÚwarningrN   r8   r8   r9   Údo_reconnectº   s   zMiniImpacketShell.do_reconnectc                 C   sâ   | j d u rt d¡ d S | d¡}d}d}d}t|ƒdkr!|d }t|ƒdkr+|d }| d¡dkr9| d¡\}}|dkrK|dkrKddlm} |dƒ}| j j|||d	 || _|| _	| j  
¡ dkrgt d
¡ nt d¡ d| _d S )NúNo connection openrj   r   r   rk   ú/rY   ú	Password:©r'   úGUEST Session GrantedúUSER Session GrantedT)r#   r
   rI   rn   ro   ÚfindrZ   Úloginr&   r%   ÚisGuestSessionrr   r1   ©r5   rC   rs   r%   r&   r'   rZ   r8   r8   r9   Údo_loginÀ   s.   




zMiniImpacketShell.do_loginc                 C   sø   | j d u rt d¡ d S | d¡}d}d}d}t|ƒdkr!|d }t|ƒdkr+|d }| d¡dkr9| d¡\}}|dkrDt d¡ d S |dkrV|dkrVddlm} |d	ƒ}| j j|||d
 || _|| _	| j  
¡ dkrrt d¡ nt d¡ d| _d S )Nr{   rj   r   r   rk   r|   z+Domain must be specified for Kerberos loginrY   r}   r~   r   r€   T)r#   r
   rI   rn   ro   r   rZ   ÚkerberosLoginr&   r%   rƒ   rr   r1   r„   r8   r8   r9   Údo_kerberos_loginÞ   s4   





z#MiniImpacketShell.do_kerberos_loginc                 C   sÞ   | j d u rt d¡ d S | d¡}d}t|ƒdkr|d }t|ƒdkr(|d }nt d¡ d S | d¡dkr=| d¡\}}| d¡\}}| j j|d|||d	 || _|| _|| _	| j  
¡ dkret d
¡ nt d¡ d| _d S )Nr{   rj   r   r   rk   z&Hashes needed. Format is lmhash:nthashr|   ú:)r(   r)   r   r€   T)r#   r
   rI   rn   ro   r   r‚   r%   r(   r)   rƒ   rr   r1   )r5   rC   rs   r'   r%   Úhashesr(   r)   r8   r8   r9   Údo_login_hash   s,   






zMiniImpacketShell.do_login_hashc                 C   s`   | j d u rt d¡ d S | j  ¡  | ` d | _d | _ d | _d| _d| _d | _d | _	d | _
d | _d S )Nr{   r   F)r#   r
   rI   Úlogoffr0   r-   r/   r1   r&   r(   r)   r%   rN   r8   r8   r9   Ú	do_logoff  s   



zMiniImpacketShell.do_logoffc                 C   sì   | j du rt d¡ d S tj| j ¡ d| jd}| ¡ }| ¡  | 	t
j¡ t
 |d¡}td|d d d	  ƒ td
|d d d  ƒ td|d d d  ƒ td|d d d  ƒ td|d d d  ƒ td|d d d  ƒ d S )NFrX   ú\srvsvcr[   éf   zVersion Major: %dÚ
InfoStructÚServerInfo102Úsv102_version_majorzVersion Minor: %dÚsv102_version_minorzServer Name: %sÚ
sv102_namezServer Comment: %sÚsv102_commentzServer UserPath: %sÚsv102_userpathzSimultaneous Users: %dÚsv102_users)r1   r
   rI   r   r_   r#   r`   ra   rb   rc   r   ÚMSRPC_UUID_SRVSÚhNetrServerGetInforS   )r5   rC   rg   rh   Úrespr8   r8   r9   Údo_info.  s   

zMiniImpacketShell.do_infoc                 C   s®   | j du rt d¡ d S tj| j ¡ d| jd}| ¡ }| ¡  | 	t
j¡ t
 |ttd¡}|d d d d	 D ]}td
|d d d… |d d d… |d |d f ƒ q8d S )NFrX   r   r[   é
   r   ÚSessionInfoÚLevel10ÚBufferz-host: %15s, user: %5s, active: %5d, idle: %5dÚsesi10_cnameéÿÿÿÿÚsesi10_usernameÚsesi10_timeÚsesi10_idle_time)r1   r
   rI   r   r_   r#   r`   ra   rb   rc   r   r—   ÚhNetrSessionEnumr	   rS   )r5   rC   rg   rh   r™   Úsessionr8   r8   r9   Údo_who?  s   

"
þÿzMiniImpacketShell.do_whoc                 C   s    g }|t j@ r| d¡ |t jN }|t j@ r | d¡ |t jN }d}|t jkr*d}n|t jkr2d}n|t jkr:d}n|t jkrAd}|rN|› dd	 |¡› d
S |S )NÚSPECIALÚTEMPÚUNKNOWNÚDISKÚPRINTÚDEVICEÚIPCz (ú,ú))	r   ÚSTYPE_SPECIALÚappendÚSTYPE_TEMPORARYÚSTYPE_DISKTREEÚSTYPE_PRINTQÚSTYPE_DEVICEÚ	STYPE_IPCÚjoin)r5   Útype_intÚ
attributesÚtype_strr8   r8   r9   Ú_resolve_share_typeN  s&   









z%MiniImpacketShell._resolve_share_typec           
   	   C   sð   | j du rt d¡ d S | j ¡ }d}t| ddd¡ƒ tdƒ | jd ur+t| jdƒ}t	t
|ƒƒD ];}|| d	 d d
… }|| d d d
… }|| d }|  |¡}	| jrc| |› d|	› d|› d¡ t| ||	|¡ƒ q1| jrv| ¡  d S d S )NFrX   z{:<25} {:<15} {}z
Share NameÚTypeÚCommentzF----------------------------------------------------------------------r<   Úshi1_netnamer    Úshi1_remarkÚ	shi1_typeú|r=   )r1   r
   rI   r#   Ú
listSharesrS   Úformatr4   r>   Úrangero   r»   r?   r@   )
r5   rC   r™   ÚfmtrD   ÚiÚ
share_nameÚshare_remarkÚshare_type_intÚ
share_typer8   r8   r9   Ú	do_sharesc  s(   




ÿzMiniImpacketShell.do_sharesc                 C   sB   | j du rt d¡ d S || _| j |¡| _d| _|  dd¡ d S )NFrX   ú\r   )	r1   r
   rI   r0   r#   ÚconnectTreer-   r/   Údo_lsrN   r8   r8   r9   Údo_usex  s   

zMiniImpacketShell.do_usec                 C   ó   | j ||||ddS )Né   ©Úinclude©Úcomplete_get©r5   ÚtextrC   ÚbegidxÚendidxr8   r8   r9   Úcomplete_cd  ó   zMiniImpacketShell.complete_cdc                 C   s¬   | j d u rt d¡ d S | dd¡}| j}|d dkr|| _nt | j|¡| _t | j¡| _z| jj	| j | jt
ttB ttB d}| j | j |¡ W d S  tyU   || _‚ w )NúNo share selectedr|   rÌ   r   )ÚcreationOptionÚdesiredAccessÚ	shareMode)r-   r
   rI   Úreplacer/   Úntpathr·   Únormpathr#   ÚopenFiler   r   r   r   r   Ú	closeFiler   )r5   rC   ÚpÚoldpwdÚfidr8   r8   r9   Údo_cd„  s(   

ÿÿþzMiniImpacketShell.do_cdc                 C   s.   t |ƒ |dkrt t ¡ ƒ d S t |¡ d S )Nr   )rS   rP   ÚgetcwdÚchdir)r5   rK   r8   r8   r9   Údo_lcd˜  s   zMiniImpacketShell.do_lcdc                 C   sd   | j du rt d¡ d S t| j dd¡ƒ | jd ur0t| jdƒ}| | j dd¡¡ | 	¡  d S d S )NFrX   rÌ   r|   r<   )
r1   r
   rI   rS   r/   rà   r4   r>   r?   r@   rB   r8   r8   r9   Údo_pwdŸ  s   


ýzMiniImpacketShell.do_pwdTc                 C   sT  | j du rt d¡ d S | jd u rt d¡ d S |dkr$t | jd¡}nt | j|¡}g | _| dd¡}t 	|¡}| j
d urDt| j
dƒ}| j | j|¡D ]R}|d	u r’| j
ru| d
| ¡ dkr`dnd| ¡ t t| ¡ ƒ¡| ¡ f d ¡ td
| ¡ dkrdnd| ¡ t t| ¡ ƒ¡| ¡ f ƒ | j | ¡ | ¡ f¡ qL| j
r¨| ¡  d S d S )NFrX   rÜ   r   Ú*r|   rÌ   r<   Tz%crw-rw-rw- %10d  %s %sr   Údú-r=   )r1   r
   rI   r-   rá   r·   r/   r3   rà   râ   r4   r>   r#   ÚlistPathr0   r?   Úis_directoryÚget_filesizeÚtimeÚctimeÚfloatÚget_mtime_epochÚget_longnamerS   r±   r@   )r5   ÚwildcardÚdisplayr/   ÚofrD   r8   r8   r9   rÎ   ©  s>   





(þþ(þÿzMiniImpacketShell.do_lsc                 C   s,   |dkrd}n	 t  |¡D ]}t|ƒ qd S )Nr   z./)rP   ÚlistdirrS   )r5   Ú
currentDirÚLINEr8   r8   r9   Údo_llsÇ  s   
ÿzMiniImpacketShell.do_llsc                 C   sÌ   g }g }d}zV| j  | j|¡D ]K}| ¡ dks| ¡ dkrq|d }t| d¡ dd¡| ¡  ƒ | ¡ rH| d¡ dd¡| ¡  }| |¡ q| d¡ dd¡| ¡  }| |¡ qW n   Y |||fS )Nr   Ú.ú..rk   rí   ú//r|   )	r#   rð   r0   r÷   rS   Ústriprà   rñ   r±   )r5   r0   ÚipÚretListÚretFilesÚretIntrý   Úretvalr8   r8   r9   Údo_listFilesÏ  s$   õ
zMiniImpacketShell.do_listFilesc           
      C   sf  g }g }d}| j du rt d¡ d S | jd u rt d¡ d S | dd¡}| d¡s4| j dd¡d | }| d¡s=|d }tj	 
|¡ dd¡}| j | j|¡D ]/}| ¡ rs| ¡ d	ksa| ¡ d
krbqO|d }| | d¡| ¡  ¡ qOt| d¡| ¡  ƒ qO|D ]%}|d }z|  | j|¡\}}}|D ]}	| |	¡ q”|| }W q   Y qtdt|ƒ d ƒ d S )Nr   FrX   rÜ   rÌ   r|   z/*r  rÿ   r   rk   rí   zFinished - z files and folders)r1   r
   rI   r-   rà   Ú
startswithr/   ÚendswithrP   ÚpathÚabspathr#   rð   r0   rñ   r÷   r±   r  rS   r  Ústr)
r5   ÚfilepathÚ
folderListr  ÚtotalFilesReadrý   ÚITEMr  r  Úqr8   r8   r9   Údo_treeä  s@   





zMiniImpacketShell.do_treec                 C   óF   | j d u rt d¡ d S t | j|¡}| dd¡}| j | j	|¡ d S ©NrÜ   r|   rÌ   )
r-   r
   rI   rá   r·   r/   rà   r#   Ú
deleteFiler0   )r5   r\   rD   Úfiler8   r8   r9   Údo_rm
  ó   

zMiniImpacketShell.do_rmc                 C   r  r  )
r-   r
   rI   rá   r·   r/   rà   r#   ÚcreateDirectoryr0   ©r5   r  rå   Úpathnamer8   r8   r9   Údo_mkdir  r  zMiniImpacketShell.do_mkdirc                 C   r  r  )
r-   r
   rI   rá   r·   r/   rà   r#   ÚdeleteDirectoryr0   r  r8   r8   r9   Údo_rmdir  r  zMiniImpacketShell.do_rmdirc                 C   sl   | j d u rt d¡ d S |}tj |¡}t|dƒ}t | j	|¡}| 
dd¡}| j | j||j¡ | ¡  d S )NrÜ   Úrbr|   rÌ   )r-   r
   rI   rP   r  Úbasenamer>   rá   r·   r/   rà   r#   ÚputFiler0   rR   r@   )r5   r  Úsrc_pathÚdst_nameÚfhrD   Ú	finalpathr8   r8   r9   Údo_put"  s   


zMiniImpacketShell.do_putrk   c           
         st   |  dd¡}| d¡dk r8g }|dkrd}nd}| jD ]}	|	d |kr*| |	d ¡ qˆ r6‡ fdd„|D ƒS |S d S )Nr|   rÌ   r   rk   é   c                    s"   g | ]}|  ¡  ˆ   ¡ ¡r|‘qS r8   )Úupperr	  )Ú.0Úitem©r×   r8   r9   Ú
<listcomp>>  s    þÿz2MiniImpacketShell.complete_get.<locals>.<listcomp>)rà   r   r3   r±   )
r5   r×   rC   rØ   rÙ   rÓ   rå   ÚitemsÚmaskrÆ   r8   r,  r9   rÕ   /  s    
€
ÿñzMiniImpacketShell.complete_getc                 C   sð   |dkrt  d¡ d S | jd u rt  d¡ d S | j|dd t| jƒdkr,t  d¡ d S | jD ]F}|d dkru|d }| d	d
¡}tt 	|¡dƒ}t 
| j|¡}zt  d| ¡ | j | j||j¡ W n   | ¡  t |¡ ‚ | ¡  q/d S )Nr   zA mask must be providedrÜ   F©rù   r   z)No files found matching the provided maskrk   r|   rÌ   ÚwbúDownloading %s)r
   rI   r-   rÎ   ro   r3   rà   r>   rá   r!  r·   r/   rr   r#   Ú	getFileExr0   r?   r@   rP   Úremove)r5   r/  Ú
file_tupler\   r%  r  r8   r8   r9   Údo_mgetE  s4   





€ózMiniImpacketShell.do_mgetc              	   C   sÊ  |dkrd}| j d u rt d¡ d S | jdu rt d¡ d S | j}|g}|D ]¼}|| _z³| jddd | jD ]}|d }|d }|d	v rEq6|rP| t 	||¡¡ q6| j|dd | jD ]~}|d }|d }|d	v sk|rlq[| 
d
d¡}t ||¡}|dkr~d}| 
dtj¡}|r‘tj 	|t |¡¡nt |¡}	tj |	¡}
|
r©tj |
¡s©t |
¡ t|	dƒ}t 	||¡}zt d|	 ¡ | j | j||j¡ W n   | ¡  t |	¡ ‚ | ¡  q[W || _q&|| _w d S )Nr   rí   rÜ   FrX   r0  r   rk   )rÿ   r   r|   rÌ   rÿ   r1  r2  )r-   r
   rI   r1   r/   rÎ   r3   r±   rá   r·   rà   ÚrelpathrP   Úsepr  r!  ÚdirnameÚexistsÚmakedirsr>   rr   r#   r3  r0   r?   r@   r4  )r5   r/  Úroot_pwdr  r  r5  r\   rñ   Ú
local_pathÚ
local_fileÚ	local_dirr%  r  r8   r8   r9   Údo_rget_  sd   




€
"



åÑzMiniImpacketShell.do_rgetc                 C   s‚   | j d u rt d¡ d S | dd¡}tt |¡dƒ}t | j|¡}z| j	 
| j||j¡ W n   | ¡  t |¡ ‚ | ¡  d S )NrÜ   r|   rÌ   r1  )r-   r
   rI   rà   r>   rá   r!  r·   r/   r#   r3  r0   r?   r@   rP   r4  )r5   r\   r%  r  r8   r8   r9   Údo_get  s   


zMiniImpacketShell.do_getc                 C   rÐ   )Nrk   rÒ   rÔ   rÖ   r8   r8   r9   Úcomplete_cat¬  rÛ   zMiniImpacketShell.complete_catc                 C   sH  | j d u rt d¡ d S | dd¡}tƒ }t | j|¡}z| j 	| j
||j¡ W n   ‚ | ¡ }t |¡d }d}| jd urEt| jdƒ}|rŒz?z| jrZ| | |¡d ¡ | ¡  t| |¡ƒ W n   | jrt| |d ¡ | ¡  t|ƒ Y W | ¡  d S W | ¡  d S | ¡  w | jrš| |d ¡ | ¡  t|ƒ | ¡  d S )NrÜ   r|   rÌ   ÚencodingzK[-] Output cannot be correctly decoded, are you sure the text is readable ?r<   r=   )r-   r
   rI   rà   r   rá   r·   r/   r#   r3  r0   r?   ÚgetvalueÚchardetÚdetectr4   r>   rA   r@   rS   )r5   r\   r%  r  rT   rC  Ú	error_msgrD   r8   r8   r9   Údo_cat¯  sD   


ùzMiniImpacketShell.do_catc                 C   s   |   |¡ d S r:   )rŒ   rN   r8   r8   r9   Údo_closeÓ  s   zMiniImpacketShell.do_closec                 C   sx   |  d¡}t|ƒdkr|d  dd¡}| d¡dur!t | j|¡}| j | j	|¡}|s1t
dƒ d S |D ]}t
|ƒ q3d S )Nrj   r   r|   rÌ   TzNo snapshots found)rn   ro   rà   r	  rá   r·   r/   r#   ÚlistSnapshotsr-   rS   )r5   rC   rs   ÚpathNameÚsnapshotListÚ	timestampr8   r8   r9   Údo_list_snapshotsÖ  s   

ÿz#MiniImpacketShell.do_list_snapshotsc                 C   sh   |  d¡}t|ƒdkr|d  dd¡}|d  dd¡}| d¡dur)t | j|¡}| j | j	||¡ d S )Nrj   rk   r   r|   rÌ   T)
rn   ro   rà   r	  rá   r·   r/   r#   ÚcreateMountPointr-   )r5   rC   rs   ÚtargetrK  r8   r8   r9   Údo_mountè  s   
zMiniImpacketShell.do_mountc                 C   sJ   |  dd¡}| d¡durt | j|¡}t | j|¡}| j | j|¡ d S )Nr|   rÌ   T)rà   r	  rá   r·   r/   r#   ÚremoveMountPointr-   )r5   Ú
mountpointÚ	mountPathr8   r8   r9   Ú	do_umountô  s
   zMiniImpacketShell.do_umountc           	      C   s¨  | j d u rt d¡ d S | ¡ }t|ƒdkrt d¡ d S |d  dd¡}| d¡dur3t | j	|¡}d }z–t|ƒdkrNt
| jd}| | j|¡}t|ƒ ns|d  ¡ }|d	vrht d
¡ W |rf| ¡  d S d S t|ƒdk r~t d¡ W |r|| ¡  d S d S |d }t|ƒdk r˜t d¡ W |r–| ¡  d S d S |d }t
| jd}| | j||||¡ |dkr·td| ƒ n
|dkrÁtd| ƒ W |rÊ| ¡  d S d S |rÓ| ¡  w w )NrÜ   r   zlUsage: acl {filename,action,permissions,user/group} actions: grant/revoke, supported permissions : R/W/D/X/Fr|   rÌ   Trk   )r]   )ÚgrantÚrevokez"Action must be 'grant' or 'revoke'é   z_Permissions required. Supported: R (read), W (write), D (delete), X (execute), F (full control)rÑ   é   zUser/group name is requiredrV  z&Successfully granted permissions to %srW  z(Successfully revoked permissions from %s)r-   r
   rI   rn   ro   rà   r	  rá   r·   r/   r   r#   Úget_permissionsr0   rS   ÚlowerÚclose_connectionÚset_permissions)	r5   rC   Úpartsr\   Úsmb_file_aclr™   ÚactionÚpermissionsÚuserr8   r8   r9   Údo_acl   sb   




ÿí
ÿñ
ÿ÷€ÿ
ÿzMiniImpacketShell.do_aclc                 C   s   t dƒ dS )NzBye!
TrV   rN   r8   r8   r9   Údo_EOF3  s   zMiniImpacketShell.do_EOF)NN)T)rk   ).Ú__name__Ú
__module__Ú__qualname__r   r;   rE   rG   rO   rU   rW   ri   rw   rz   r…   r‡   rŠ   rŒ   rš   r¦   r»   rË   rÏ   rÚ   rè   rë   rì   rÎ   rþ   r  r  r  r  r  r'  rÕ   r6  r@  rA  rB  rH  rI  rN  rQ  rU  rc  rd  r8   r8   r8   r9   r   )   sX    


$!"	

&
>$3r   )'Ú
__future__r   r   Úior   r   ró   r   rP   rá   Úsixr   Úimpacket.dcerpc.v5r   r   r   Úimpacket.dcerpc.v5.dtypesr	   Úimpacketr
   Úimpacket.smbconnectionr   r   r   r   r   r   r   r   r   Úimpacket.smb3structsr   r   Úimpacket.aclr   Úcharset_normalizerrE  r   r   r8   r8   r8   r9   Ú<module>   s"   ,