
    d                         d dl Z d dlZd dlZd dlZd dlmc mZ d dlmZ d dl	m
Z
mZmZmZ d dlmc mZ d dlmZ d dlmZ d dlmc mc mZ d dlmc mc mZ d dlmc mc mZ  G d de      Zy)    N)OSUtilError)ustr
bytebufferrangeint)DefaultOSUtil)	CryptUtilc                        e Zd Z fdZd ZddZddZddZd Zd Z	 fdZ
d	 Z fd
ZddZd fd	Zd ZddZddZd Zd Zd Zd Zd Zd Zd Zd Z xZS )
GaiaOSUtilc                 *    t         t        |           y N)superr   __init__)self	__class__s    D/usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/gaia.pyr   zGaiaOSUtil.__init__%   s    j$(*    c                    d}d}t        d      D ]5  }	 ddddj                  |      g}t        j                  |d	      }d} ||fS  ||fS # t        j                  $ r"}|j
                  }|j                  }Y d }~n&d }~wt        $ r}d
}t        |      }Y d }~nd }~ww xY wd|v rd} ||fS t        j                  d       )Nr    
   z
/bin/clishz-sz-cz'{0}'T)	log_error
NMSHST0025   )r   format	shellutilrun_commandCommandError
returncodestdout	Exceptionr   timesleep)r   cmdretoutifinal_commandes          r   
_run_clishzGaiaOSUtil._run_clish(   s    r 	A
!-tT7>>#;N O++MTJ Cx#	" Cx )) llhh 1g s"Cx JJqMs#   .ABA<<BBBc                 .    t        j                  d       y )Nz useradd is not supported on GAiAloggerwarn)r   username
expirationcomments       r   useraddzGaiaOSUtil.useradd>   s    67r   c                     t        j                  d       t        j                  |||      }| j	                  d|z         \  }}|dk7  rt        dj                  d|            y )Nchpasswdzset user admin password-hash r   z#Failed to set password for {0}: {1}admin)r-   infotextutilgen_password_hashr*   r   r   )r   r/   passwordcrypt_idsalt_lenpasswd_hashr%   r&   s           r   r4   zGaiaOSUtil.chpasswdA   sf    J008XN??+k9;S!8  "#)6'3#79 9 r   c                 .    t        j                  d       y )Nz$conf_sudoer is not supported on GAiAr-   r6   )r   r/   nopasswdremoves       r   conf_sudoerzGaiaOSUtil.conf_sudoerJ       :;r   c                 v    t        j                  d       | j                  d      \  }}|dk7  rt        d      y )Ndel_root_passwordz#set user admin password-hash *LOCK*r   zFailed to delete root password)r-   r6   r*   r   )r   r%   r&   s      r   rD   zGaiaOSUtil.del_root_passwordM   s:    '(??#HIS!8>?? r   c                     |j                  d      rd|dd  z   }|j                  d      }||d<   dj                  |      S )Nz$HOMEz/home   /r   )
startswithsplitjoin)r   pathr/   partss       r   _replace_userzGaiaOSUtil._replace_userS   sB    ??7#T!"X%D

3axxr   c                     t        j                  d       d}|\  }}| j                  ||      }t        t        |   |||f       y )Ndeploy_ssh_keypairr5   )r-   r6   rM   r   r   rO   )r   r/   keypairrK   
thumbprintr   s        r   rO   zGaiaOSUtil.deploy_ssh_keypairZ   sJ    ()"j!!$1j$2tZ(	*r   c           
         t        t        j                               }t        j                  t        j                         dz   |z   dz         \  }}|dk7  rt        dj                  |            g }g }d }|j                  d      D ]  }	|	j                  d      r|}|j                  |	       (|	j                  d      r|}|j                  |	       M|sP|	sS|j                  |	j                         j                  dd	              d
 }
 |
|      } |
|      }t               }|j                  t        j                  dt!        d                   |j                  d       |j                  t        j                  dt!        |j#                  |                         |j                  |j#                  |             |j                  t        j                  dt!        |j#                  |            dz                |j                  d       |j                  |j#                  |             t%        j&                  t)        |            }t+        j,                  |t/        d|z   dz   d             y )Nz rsa -pubin -noout -text -in ''r   zopenssl failed with {0}
zModulus:z	Exponent::r   c                     t        |       dk(  rt        | d   j                         d         S t        dj                  | dd        d      S )N   r   r      )lenr   rI   rJ   )bufs    r   text_to_numz2GaiaOSUtil.openssl_to_openssh.<locals>.text_to_numy   sC    3x1}3q6<<>!,--rwws12w',,r   z>Izssh-rsas   ssh-rsarW       s   ssh-rsa    
zutf-8)encoding)r	   confget_openssl_cmdr   run_get_outputr   r   rI   rH   appendstripreplace	bytearrayextendstructpackrY   num_to_bytesbase64	b64encoder   fileutil
write_filer   )r   
input_fileoutput_file	cryptutilr%   r&   modulusexponentrZ   liner[   nr)   keydatakeydata_base64s                  r   openssl_to_opensshzGaiaOSUtil.openssl_to_opensshb   s   d2245	++  ",-/9:<?@AS !87>>sCDDIIdO 
	:Dz*

4 {+

4 t

4::<//R89
	:	-
  !+v{{4Y89z"v{{4Y-C-CA-F)GHIy--a01v{{4Y-C-CA-F)G!)KLMuy--a01))*W*=>K ~!=!E*13	4r   c                     t        j                  d       d}|\  }}}| j                  ||      }t        t        |   ||||f       y )Ndeploy_ssh_pubkeyr5   )r-   r6   rM   r   r   ry   )r   r/   pubkeyrK   rQ   valuer   s         r   ry   zGaiaOSUtil.deploy_ssh_pubkey   sN    '("(j%!!$1j$1tZ/	1r   c                 .    t        j                  d       y )Nzeject is not supported on GAiAr,   )r   chk_errs     r   	eject_dvdzGaiaOSUtil.eject_dvd       45r   c                     |sg }t        d |D              r>t        t        |   |||D cg c]  }|j	                  dd       c}|      \  }}|s||fS t        t        |   ||||      S c c}w )Nc              3   $   K   | ]  }d |v  
 yw)udf,iso9660N ).0opts     r   	<genexpr>z#GaiaOSUtil.mount.<locals>.<genexpr>   s     6}#6s   r   udf)optionr}   )anyr   r   mountrd   )	r   devicemount_pointr   r}   r   r%   r&   r   s	           r   r   zGaiaOSUtil.mount   s    F6v66Z4V[EKLcM59L 5 !HC CxZ,K - A 	A	 Ms   A-c                 .    t        j                  d       y )Nz'allow_dhcp_broadcast is ignored on GAiAr>   r   s    r   allow_dhcp_broadcastzGaiaOSUtil.allow_dhcp_broadcast   s    =>r   c                      y r   r   r   rules_filess     r   remove_rules_fileszGaiaOSUtil.remove_rules_files   s    r   c                 .    t        j                  d       y )Nz&restore_rules_files is ignored on GAiAr>   r   s     r   restore_rules_fileszGaiaOSUtil.restore_rules_files   s    <=r   c                 0    t        j                  dd      S )Nz/sbin/service sshd condrestartF)r}   )r   runr   s    r   restart_ssh_servicezGaiaOSUtil.restart_ssh_service   s    }}=uMMr   c                 T    t        j                  t        j                  d|            S )Nz!I)socket	inet_ntoarg   rh   )r   addrs     r   _address_to_stringzGaiaOSUtil._address_to_string   s    D$ 788r   c                     t        t        |j                  d      D cg c]%  }t        t	        |            j                  d      ' c}            S c c}w )N.1)strsumrI   binr   count)r   maskxs      r   _get_prefixzGaiaOSUtil._get_prefix   s;    3

3H1CF))#.HIJJHs   *Ac                    t        j                  d|||       |dk(  r|dk(  rd}n5| j                  |      dz   | j                  | j                  |            z   }| j	                  d|z   dz   | j                  |      z   dz         \  }}|S )Nzroute_add {0} {1} {2}r   defaultrG   zset static-route z nexthop gateway address z on)r-   r6   r   r   r*   )r   netr   gatewaycidrr%   r&   s          r   	route_addzGaiaOSUtil.route_add   s    +S$@!8	D**3/#58H8H''-9/ /D ??$&'(##G,-/456S 
r   c                 .    t        j                  d       y )Nzset_hostname is ignored on GAiAr,   r   hostnames     r   set_hostnamezGaiaOSUtil.set_hostname   s    56r   c                 .    t        j                  d       y )Nz$set_dhcp_hostname is ignored on GAiAr,   r   s     r   set_dhcp_hostnamezGaiaOSUtil.set_dhcp_hostname   rB   r   c                 .    t        j                  d       y )Nz#publish_hostname is ignored on GAiAr,   r   s     r   publish_hostnamezGaiaOSUtil.publish_hostname   s    9:r   c                 .    t        j                  d       y )Nzdel_account is ignored on GAiAr,   )r   r/   s     r   del_accountzGaiaOSUtil.del_account   r   r   )NN)   r   )FF)T)NT)r   )__name__
__module____qualname__r   r*   r2   r4   rA   rD   rM   rO   rw   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   #   s{    +,89<@**4X16A?>N9K7<;6r   r   )rj   r   rg   r"   azurelinuxagent.common.confcommonr_    azurelinuxagent.common.exceptionr   azurelinuxagent.common.futurer   r   r   r   azurelinuxagent.common.loggerr-   %azurelinuxagent.common.osutil.defaultr   &azurelinuxagent.common.utils.cryptutilr	   %azurelinuxagent.common.utils.fileutilutilsrl   &azurelinuxagent.common.utils.shellutilr   %azurelinuxagent.common.utils.textutilr7   r   r   r   r   <module>r      sN   &     * * 8 F F . . ? < 8 8 : : 8 8n6 n6r   