Xׯd^ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZdadZeddlmZddlmZddlmZmZmZmZmZmZddlmZmZddlmZm Z m!Z!m"Z"m#Z#m$Z$dd l%m&Z&dd l'm(Z(m)Z)m*Z*d@d Z+Gd de,Z-dZ.dZ/ej0d fdZ1dZ2ej3dtdddfdZ4ej3ddddfdZ5ej6dkre5Z7ne4Z7ej3dfdZ8gZ9Gdde,Z:Gdde:Z;e9<e;Gdde:Z=e9<e=Gdde:Z>e9<e>d Z?d!Z@d"ZAd#ZBd$ZCd%ZDGd&d'e:ZEe9<eEGd(d)eEZFe9<eFgZGGd*d+e,ZHeG<eHGd,d-e,ZIGd.d/eIZJeG<eJGd0d1e,ZKeG<eKGd2d3eIZLeG<eLGd4d5e,ZMeG<eMGd6d7e,ZNGd8d9e,ZOGd:d;e,ZPddlQZQGd<d=e,ZRGd>d?e,ZSdS)ANc dadS)Nz(/usr/bin/sudo -k -S -p EnterPasswordHere)default_sudo_prefix"..\modules\wb_server_management.pyreset_sudo_prefixr )s Jr)App) QueueFileMP)InvalidPasswordErrorPermissionDeniedErrorUserssanitize_sudo_output splitpath to_unicode) CmdOptions CmdOutput)log_info log_warning log_error log_debug log_debug2 log_debug3)CustomCommandListener) FileUtilsOSUtils FunctionTypeFc\|drtd|dztdt|dz|ddkrd|dvrtdd|r+t|dt|dzSt|dS) Nstderrz)An error occured during command exec: %s zExit status was: %s statusNo such file or directorystdout)rrstrOSError) return_value merge_outputs rhandle_ssh_command_outputr)8sHY>hAWWXXX&\(-C)D)DDEEEH"" &,x*@ @ @!899 9+<)**Sh1G-H-HHH<)***rc$eZdZdZdZdZdZdZdS)wbaOSunknownwindowslinuxdarwinctNNotImplementedError)selfnamevalues r __setattr__zwbaOS.__setattr__Ns!!rN)__name__ __module__ __qualname__r,r-r.r/r7rrrr+r+Hs7GGEF"""""rr+cx|dr d|ddzSd|ddzS)Nz~/z~/"%s"r#"%s""\") startswithreplacepaths r quote_pathrCQsB t1$qrr("" S%0000rc|dr |dd}d|ddddzS)N\r</r=r>)endswithr@rAs rquote_path_winrIXsL }}TCRCy DLLd++33C?? ??rc|std|st}|r |dz }|dz }|tjkr|tjkrd|z}|d|}d|vsd|vrKd|zd z|d d d d ddzd z}nJd|zdz|d d d d ddzd z}|S)Nz)Empty command passed to execution routinez &z /usr/bin/nohupz sudo -k -u %ssudo/bin/shz /bin/bashzLANG=C z "rEz\\r=r>$z\$z /bin/bash -c ") ExceptionrrCURRENTADMINr@)command sudo_prefixas_userto_spawn sudo_users r wrap_for_sudorV^sV ECDDD *) )4(( %- ek ! !''1I%--fi@@K  # #{k'A'A+-5f8U8U8]8]^ach8i8i8q8qruv{8|8||@DDGG+-0BBW__UY[aEbEbEjEjknpuEvEvE~E~@CDIFJFJJMQQG Nrcfd}|S)NcJtjfd}|S)Ncvd} jj}n+#t$rt djddYnwxYw|a||}t |ttfvstj |stdjdd||i|S)Nz&Error on path validation for function z, using invalid parameter "" z'Error on path validation for function "z", parameter "z" must be an absolute path: ) __code__ co_varnamesindex ValueErrorrr8typer%osrBisabs)argskw path_index path_valuefunctionparams rdecorated_functionzBuseAbsPath..abs_path_validator..decorated_function{sAJ F%.:@@GG  F F F ksk|k|k|DDDEFFFFF F %!*-  ##C:55RW]]:=V=V5$*CKCTCTCTV[V[V[]g]g&hiii8T(R(( (s%%A  A ) functoolswraps)rfrhrgs` rabs_path_validatorz&useAbsPath..abs_path_validatorzs?  " " ) ) ) ) ) # " )""!rr)rgrks` r useAbsPathrlys$"""""( rc |tjkrt|||}d}|rtd|d|d|d}|sdS|} d|zdz}d} d+d } d,d } t j} d | d <tj d d|gdtj tj tj d| }d}|tjkr| ||j d|}| dr{|s2td|td|rtd|pddzdz}|jt%|dd}nttdd}d}|g}t'j}|"| ||j dd}| dr|s2td|tdt+d|dd|dd}|rtd|j|pddzd}ng||t1||kst'j|z |krt3d n|"|r|r|D] }|||rtd!d"}d}|| |j |||}d}d#}|r*td$| t1||dd%fz|rU|ddks|d&dkr#|tdd}|r |r ||| |\}}|r|r|t9|n6#t:$r)}t=d't?|zYd}~nd}~wwxYw|j } |rtd(| ztCd)| d*| d| S)-NFzlocal_run_cmd_linux: z (as z)  zcd; z ; exit $?rcddl}g}tj}t||kr ||ggg|\}}}nM#|j$r@} | jddkr)|tj|z z}|dkrYd} ~ nhYd} ~ vd} ~ wwxYw|snW|t |d|r |ddkrnt||kd|S)Nrr!rF r) selecttimelenerrorrbappendrreadjoin) fdsizetimeoutreturn_on_newlinersdatatr_es rread_nonblockingz-local_run_cmd_linux..read_nonblockings'  IKK$ii$  --b"g>>1aa<   6!9>>ty{{Q.G{{HHHH    KK 2771::.. / / /  T"X%5%5$ii$wwt}}sA B0BBBcbddl}d}tj}tj|z |kr ||ggg|tj|z z \}}}n)#|j$r} | jddkrYd} ~ pd} ~ wwxYw|st dt |d} | r8|| z }||sd|vrt|} | |kr| }n0n| ntj|z |k|S)Nrrrqz#Could not read from file descriptorr!rr) rsrtrvrbrNrrxrHrpoll) procrztextr|rsr~rrrrnew_bytendatas rread_nonblocking_until_nl_orz9local_run_cmd_linux..read_nonblocking_until_nl_orsY  IKKikkAo''  --b"gq6QRR1aa<   6!9>>HHHH  G EFFF!"''!**--H  ==&&$$,,066E}}$  +7 (-ikkAo''0 s4A** B4B  B  BCLANGrLz-cT)bufsizestdinr$r close_fdsenvEnterPasswordHere)r|zKPassword required for sudo, but user_password is empty, throwing exception.zIncorrect password for sudoz2local_run_cmd_linux: sending password to child... rrutf-8z>sudo prompt available, but it's not standard. Trying to parse. r!z%Banner message from sudo for command z: rzVlocal_run_cmd_linux: sending password to child, after receiving greeting from sudo... zKlocal_run_cmd_linux: was expecting sudo password prompt, but it never came z)local_run_cmd_linux: waiting for data... (z:local_run_cmd_linux: %s: read %i bytes from child [%s...] 2zSorry, try againz:local_run_cmd_linux: error reading from child process: %s z'local_run_cmd_linux: child returned %s zlocal_run_cmd_linux(): script="z", ret=)rF)r)"rrOrVrstripr`environcopy subprocessPopenPIPESTDOUTr$rH terminater rwritebytesrtrrryrwrurfind communicaterrNrr% returncoder)rQrS user_passwordrRoutput_handleroutput_timeoutoptions debug_run_cmdscript script_to_logresultrrmy_envchildexpect_sudo_failurer~ data_to_write9max_lines_to_read_until_giving_up_waiting_for_sudo_promptNnum_seconds_to_wait_for_sudo_greeting_message_until_we_assume_prompt_wont_comebuffered_output start_timeline read_sizer} current_textrrs rlocal_run_cmd_linuxrs%-g>>MM '''777KLLL ]]3  F tM f_| +F F*>Z__  FF6N  iv6#-?:?S]Sd'+6 ; ; ;E %-++E5>Qc d}|tjkrd}|rt|}|t jt jtj d}| dd} | dvrd|z}|} d|j |j |j|fz} nd} d |z} | d| } dd lm} m} m}dd lm}m}m}m}| | ||||||}d }|d |jf|}|dd| | dd}|dkrt3d|r}|dkrw||jr\ t7|j}n+#t:$r}t=|j}Yd}~nd}~wwxYwt?d| d| d|d|d}|dkrd}n-|dkrt?d|znt?d||fz|S#t:$r}d}~wwxYw tAj!||}nH#t:$r;}ddl"}t?d|d|d|#dd}Yd}~nd}~wwxYw|S)Nr!zwbadminhelper.exeror)LISTDIRGETFILEGET_FREE_SPACECHECK_FILE_READABLECHECK_DIR_WRITABLECHECK_PATH_EXISTSCREATE_DIRECTORYCREATE_DIRECTORY_RECURSIVEREMOVE_DIRECTORYREMOVE_DIRECTORY_RECURSIVE DELETE_FILE COPY_FILEGET_FILE_OWNER GETFILE_LINESEXECzEXEC z %d %s %s %szcmd.exez/C)c_int WINFUNCTYPEwindll)HWNDLPCSTRLPCWSTRUINT))r!hwnd)r! operation)r!file)r!params)r!dir)r!showcmd ShellExecuteWrunasz'User did not accept privilege elevationz9Exception received from Windows command helper executing : rr z6local_run_cmd_windows(): Out of memory executing "%s" z1local_run_cmd_windows(): Error %i executing "%s" z#Exception executing local command: )$rrOrstartntpathryr`getcwdr getget_resource_pathsplitport handshake close_keyctypesrrrctypes.wintypesrrrrshell32r exit_statuseval exit_messagerN RuntimeErrorrr exec_command traceback format_exc)rQrSrrRrrretcodelistener helper_pathactual_commandcmdname cmdparamsrrrrrrr prototype paramflags SHellExecuterethelper_exceptionrrs rlocal_run_cmd_windowsr@s{G%-  '-^<z&local_get_cmd_output..sAHHTNNr)rQrSrrRrrr) local_run_cmdry)rQrSroutputrrcs rlocal_get_cmd_outputrsS F$*:::N w}bfxF G G GB IIf  r ""rc@eZdZdZdZdZdZejdfdZ dZ dS)ProcessOpsBaserc dSr1rr4kwargss r__init__zProcessOpsBase.__init__ rcdSr1rr4s r post_initzProcessOpsBase.post_initr rc|Sr1rr4rBs rexpand_path_variablesz$ProcessOpsBase.expand_path_variables rNcng}|fd}|||||}d||fS)Nc,||Sr1rrs rrz/ProcessOpsBase.get_cmd_output..srrr)exec_cmdry)r4rQrSrrrrs rget_cmd_outputzProcessOpsBase.get_cmd_outputsC(.>>> ]]7G]N K K &!!2&&rcdSr1rr4rbs r list2cmdlinezProcessOpsBase.list2cmdlinetr) r8r9r:cmd_output_encodingr rrrrOrrrrrrrss      /4m4'''' rrcteZdZedZdZejdddfdZejdddfdZ ejdfdZ dS)ProcessOpsNopec|\}}}|dkSNnonercls conn_paramshosttargetconnects rmatchzProcessOpsNope.matchs"-vw&  rc|Sr1rrs rrz$ProcessOpsNope.expand_path_variablesrrNcdSr1rr4rQrSrrrs rrzProcessOpsNope.exec_cmdrrc:td|jjzNz%s must implement spawn_processr3 __class__r8r*s r spawn_processzProcessOpsNope.spawn_process!"CdnF]"]^^^rcdS)N)rNr)r4rQrSrs rrzProcessOpsNope.get_cmd_outputszr) r8r9r: classmethodr'rrrOrr/rrrrrrs!![!). TZ^hl.3]$_cmq____/4m4rrcdeZdZedZdZejdddfdZejdddfdZ dZ dS)ProcessOpsLinuxLocalc|\}}}|dko3|tjtjfvo|tjtjfvSNlocalr+r.r/r!s rr'zProcessOpsLinuxLocal.matchsC"-vw'!ut U\/J'J'tvZ_ZeglgsYtOturc jtj|fi||dt|_dS)NrR)rr rrrRrs rr zProcessOpsLinuxLocal.__init__s8///// **]4GHHrNc 6t||||j|d|S)Nrm)rrRr*s rrzProcessOpsLinuxLocal.exec_cmds""7G]DDTVdfhjqrrrrc|j}|r%tj|vr|d|tj}|tjkrt |||d}|d}|t|dkrdStj |tj dd}|tjkr6|j |dz|j dS)N HOME=Tror)rshellrrr)rRrCMD_HOMErrOrVrrurrrrrflush) r4rQrSrrrrRrprocesss rr/z"ProcessOpsLinuxLocal.spawn_processs&  Uz*g55*5++wz?R7S7STK em # ##G['4HHGs## >S[[A--4"6X\]]] em # # M    4 5 5 5 M   ! ! !qrc@dd|DS)Nroc:g|]}tj|pdSz''pipesquote.0as r z5ProcessOpsLinuxLocal.list2cmdline..%>>>AQ/4>>>rryrs rrz!ProcessOpsLinuxLocal.list2cmdline#xx>>>>>???r r8r9r:r2r'r rrOrr/rrrrr4r4svv[vIII). TZ^jnssss.3]$_cmq0@@@@@rr4cdeZdZedZdZejdddfdZejdddfdZ dZ dS)ProcessOpsLinuxRemotecN|\}}}|dko|tjtjfvSNsshr8r!s rr'zProcessOpsLinuxRemote.matchs.#.vw%IFu{EL.I$IIrc tj|fi||dt|_|d|_dS)NrRrS)rr rrrRrSrs rr zProcessOpsLinuxRemote.__init__sA///// **]4GHH%=rNc d}|jrd} |tjkr2t||j|}|j||}n|j|}n;#t$r.}td|dt|dYd}~dSd}~wwxYw|d}t|d}|r ||nd}|r |dntd |S) NrUnable to execute: , error was: rrr!r TNo SSH connection is activeNo SSH connection is active ) rSrrOrVrRexecuteSudoCommandexecuteCommandrNrr%r)r r4rQrSrrrr dummy_textexs rrzProcessOpsLinuxRemote.exec_cmds$ 8 :J em+++GT5EwOOG!%!rVrSr)rZr[r)r4rQrSrrrrRrs rr/z#ProcessOpsLinuxRemote.spawn_process4s em # # *K Y:.'99.9kk7:CV;W;WX #G['4HHG 8 :%-'''1A7KK)$(*E*Egw*W*WXXXX)$(*A*A'*J*JKKKKC :<====8999qrc@dd|DS)Nroc:g|]}tj|pdSrCrDrGs rrJz6ProcessOpsLinuxRemote.list2cmdline..RrKrrLrs rrz"ProcessOpsLinuxRemote.list2cmdlineQrMrrNrrrrPrPsJJ[J !!! ). TZ^hl@.3]$_cmq:@@@@@rrPzMreg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v "ProgramFilesDir"zSreg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v "ProgramFilesDir (x86)"%ProgramFiles%%ProgramFiles(x86)%z%ProgramW6432%z %ProgramData%cdeZdZedZdZdZd dZej dddfdZ dZ dZ d Z dS) ProcessOpsWindowsLocalcV|\}}}|tjko|tjko|dvS)N)wmir7r+r-r!s rr'zProcessOpsWindowsLocal.matchcs2"-vw %a&EM*AagQaFabrc 8tj|fi|i|_dSr1)rr target_shell_variablesrs rr zProcessOpsWindowsLocal.__init__hs)/////&(###rc.|dSr1)fetch_windows_shell_infor s rrz ProcessOpsWindowsLocal.post_initls %%'''''rNc*t|||d||Sr1)rr*s rrzProcessOpsWindowsLocal.exec_cmdos$Wg}dN\cdddrc  d}tj|dd|dS#t$r:}ddl}t d|d|d|dYd}~dSd}~wwxYw)NT)r=r creationflagsrz'Error executing local Windows command: rrr)rrrNrrr) r4rQrSrrrDETACHED_PROCESSexcrs rr/z$ProcessOpsWindowsLocal.spawn_processrs v)   WDdRb c c c c c c v v v     IwwwX[X[X[]f]q]q]s]s]s]st u u u u u u u u u vs A"/AA"cp|jD]\}}|||}|S)a Expand some special variables in the path, such as %ProgramFiles% and %ProgramFiles(x86)% in Windows. Uses self.target_shell_variables for the substitutions, which should have been filled when the ssh connection to the remote host was made. )rjitemsr@)r4rBkvs rrz,ProcessOpsWindowsLocal.expand_path_variables|s@ /5577 & &DAq<<1%%DD rc |d\}}|dkrK|d}t|dkrd|dz|_nht |jjdt|d|d\}}|dkrtd td |d \}}|r|}d}d}|d krt}t}nQ|d \}}|r|}|dkrt}t}nt}t}|d|z\}}|dkrA|d|j d<|dkr|d|j |<n>td|zt |jjdt|d|d|z\}}|dkr|d|j d<n>td|zt |jjdt|d|dtz\}}|dkr#|d|j t<nk|j ||j t<td|d|j tt |jjdt|dt!|jjd|jdt|j ddS)Nzchcp.comrz . cprFzP.fetch_windows_shell_info(): WARNING: Unable to determine codepage from shell: "rZverzlTarget host is configured as Windows, but seems to be a different OS. Please review the connection settings.z}Unable to execute command chcp. Please make sure that the C:\Windows\System32 directory is in your PATH environment variable.zecho %PROCESSOR_ARCHITECTURE%x86zecho %PROCESSOR_ARCHITEW6432%z%PROCESSOR_ARCHITEW6432%zecho z rbzBWARNING: Unable to fetch ProgramFiles value in Windows machine: %sz^.fetch_windows_shell_info(): WARNING: Unable to fetch ProgramFiles value in Windows machine: "rczMWARNING: Unable to fetch ProgramFiles(x86) value in local Windows machine: %szi.fetch_windows_shell_info(): WARNING: Unable to fetch ProgramFiles(x86) value in local Windows machine: "zEWARNING: Unable to fetch ProgramData value in local Windows machine: z#, using ProgramFiles path instead: zc.fetch_windows_shell_info(): WARNING: Unable to fetch ProgramData value in local Windows machine: "z(.fetch_windows_shell_info(): Encoding: "z", Shell Variables: ")rrrrurrr.r8r%rWIN_PROGRAM_FILES_X86_VARWIN_PROGRAM_FILES_VARWIN_PROGRAM_FILES_X64_VARrjprintWIN_PROGRAM_DATA_VARr)r4rcoderProgramFilesVarx86vars rrlz/ProcessOpsWindowsLocal.fetch_windows_shell_infos**:66  199\\(++1133F6{{Q-1F2J->$* uyvDvMvMvMORSYOZOZOZOZ[ ] ] ]))%00GAtqyy"$RSSS abb b**+JKK   $\\^^F U??.F3OO../NOOLFD (333."7.";**7O+CDD  199 > abhh i i i OSO]OfOfOfhklrhshshshst v v v**74H+HII  199@F V@T@TD '(< = =AE@[\k@lD '(< = EEKEKEKMQMhi}M~M~ @ @ @ IMIWI`I`I`beflbmbmbmbmn p p p^b^l^u^u^uw{xPxPxPRUVZVqRrRrRrRrs t t t t trc*tj|Sr1rrrs rrz#ProcessOpsWindowsLocal.list2cmdline(.. .rNN)r8r9r:r2r'r rrrrOr/rrlrrrrrerebscc[c)))(((eeee.3]$_cmqvvvv@t@t@tD/////rrecjeZdZedZdZdZejdddfdZ ejdddfdZ dZ dS)ProcessOpsWindowsRemoteSSHc:|\}}}|tjko|dkSrRrhr!s rr'z ProcessOpsWindowsRemoteSSH.matchs'#.vw%-'d|z}|jstdd}d} |j|}|d}t|d}n<#t$r/}d}t d|dt |d Yd}~nd}~wwxYw|r |||S) Nz cmd.exe /c zNo SSH session activerr Tr!rVrWrr)rSrNr[r)rr%r\s rrz#ProcessOpsWindowsRemoteSSH.exec_cmds')x 5344 4  U0099JX&C2:tDDJJ U U UC I'''3r7777S T T T T T T T T U  ' N: & & & s2A B %BB c:td|jjzr,r-r*s rr/z(ProcessOpsWindowsRemoteSSH.spawn_processr0rc*tj|Sr1rrs rrz'ProcessOpsWindowsRemoteSSH.list2cmdlinerr) r8r9r:r2r'r rrrOrr/rrrrrrs>>[> !!! ,,, ). TZ^hl2.3]$_cmq____/////rrcbeZdZedZddZejddfdZejddfdZ ejddfdZ ejdfdZ ejdfd Z ejdfd Z ejdfd Zejdfd Zejdfd ZejddfdZejddfdZejdfdZejddfdZdZdZdS) FileOpsNopec|dkSrrr" target_osconnection_methods rr'zFileOpsNope.match s  F**rNcdSr1rr4 process_opsrSrs rr zFileOpsNope.__init__r rcdSr1rr4filenamecontentrSrmodes rsave_file_contentzFileOpsNope.save_file_contentr rcdSr1r)r4rrbackup_extensionrSrrs rsave_file_content_and_backupz(FileOpsNope.save_file_content_and_backupr rrcdSNrr)r4rrSr skip_liness rget_file_contentzFileOpsNope.get_file_contentsrrcdSr1rr4sourcedestrSrs r _copy_filezFileOpsNope._copy_filer rcdSNFrr4rBrSrs rcheck_file_readablezFileOpsNope.check_file_readableurcdSrrrs rcheck_path_existszFileOpsNope.check_path_exists!rrcdSrrrs rcheck_dir_writablezFileOpsNope.check_dir_writable$rrcdSrrrs r file_existszFileOpsNope.file_exists'rrcdSrrrs rget_file_ownerzFileOpsNope.get_file_owner*rrcdSr1rr4rBrSr with_owners rcreate_directoryzFileOpsNope.create_directory-r rcdSr1rrs rcreate_directory_recursivez&FileOpsNope.create_directory_recursive0r rcdSrrrs rget_available_spacezFileOpsNope.get_available_space3rrFcgSr1rr4rBrSr include_sizes rlistdirzFileOpsNope.listdir7 rcgSr1rrs r get_ownerzFileOpsNope.get_owner:rrcdSr1r)r4rBpathss r join_pathszFileOpsNope.join_paths=r rr)r8r9r:r2r'r rrOrrrrrrrrrrrrrrrrrrrr s++[+    >C]\`im    [`Zgy}GK    49=RVcd27PT    16 T/4m405}D+0-.3]D05}d_c    :?X\im    38-QU',mTX]     rrceZdZddZifdZedejdfdZedejdfdZ edejdfdZ edejdfd Z edejddfd Z edejddfd Z edejdfd Zedejdfd ZedejdfdZedejddfdZeddZejdfdZedejdfdZedejdfdZedejddfdZejddfdZdZdZedejddfdZdZdS)FileOpsLinuxBaseNc0||_||_||_dSr1)rrSrrs rr zFileOpsLinuxBase.__init__Bs&"rc t|r1)rN)r4messagecustom_messagess rraise_exceptionz FileOpsLinuxBase.raise_exceptionHs   rrBc|jdt|z||dtjt ji}|dkS)Nz test -d %scdSr1rrs rrz4FileOpsLinuxBase.check_path_exists..P$rrrrrrrCrCMD_WAIT_OUTPUTr WAIT_NEVER)r4rBrSrress rrz"FileOpsLinuxBase.check_path_existsKsU'' z$7G7G(G#)->->%/%? @T$U (WW axrrc|jdt|z||dtjt ji}|dkS)Nz test -e %scdSr1rrs rrz.FileOpsLinuxBase.file_exists..Yrrrrr)r4rrSrrs rrzFileOpsLinuxBase.file_existsTsU'' z(7K7K(K#)->->%/%? @T$U (WW axrctj}|jdt |z|||j}t |}d}|dkrS| dd }|dd|d d }|S) NzLC_ALL=C df -Ph %srCould not determinerrrrFz of r!z available) ioStringIOrrrCrrgetvaluerr)r4rBrSrrr availabletokenss rrz$FileOpsLinuxBase.get_available_space]s''(>@@) !88\\$''+113399;;F06q 6!999EIrcf|jtjkrd}nd}tj}|t |z}|j||||j}t|  }|dkr| ||S)NzLC_ALL=C stat -c %U z LC_ALL=C /usr/bin/stat -f "%Su" rr) rr+r.rrrCrrrrrrr)r4rBrSrrQrrs rrzFileOpsLinuxBase.get_file_ownerns >U[ ( (*''6'Jt,,,''#),2L(:: &foo&7&788>>@@ !88   ( ( ( rctj}|rH|tjkrt d|zdt |d|dt |}ndt |z}|j||||jtj tj i}|dkrJt|}||dSdS)N Cannot set owner of directory %sz /bin/mkdir z && chown roz /bin/mkdir %srSrrrr)rrrrOr rCrrrrrr WAIT_IF_FAILrrrr)r4rBrSrrrrQrs rrz!FileOpsLinuxBase.create_directorys  ;%-''+,NQU,UVVV(=Gt*>>GG.*Q, 8@T@T1UUG''4;8E9?(GG &foo&7&788>>@@ !88   ( ( ( rc t|d}|||dS#ttf$r.}|jt jkrtd|z|d}~wwxYw)Nw"Could not open file %s for writing)openrcloseIOErrorr&rEACCESr )r4rBrferrs r _create_filezFileOpsLinuxBase._create_files T3A GGG    GGIIIII!   yEL((+,PSW,WXXXI s9=A<)A77A<ctj}|jdt |zdzt |z|||jt jtj i}|dkrJt|  }| |dSdS)NzLC_ALL=C /bin/cp rorrr)r4rrrSrrrs rrzFileOpsLinuxBase._copy_files''(;j>P>P(PSV(VYcdhYiYi(i")&3'-|!+!;I>@@ S[[[[&&&IJJJ v;;!  ayCel,JT,QRRRc!!em-RUY-YZZZc!!BVKLL Lrcdd}tj}t|}d|d|d|d}|j||||jt |}tdt|d|d t|d kra|d d krttj d |z|dd krttjd|z|dd krd}ntd|z|S)NTrz;_fe=$?;test -d z;_fd=$?;test -w r rzcheck_dir_writable :rorrrrr r r! The path "%s" is not a directoryr#Fz+Unable to verify directory is writable : %s)rrrCrrrrrrrrur&rr r rNrs rrz#FileOpsLinuxBase.check_dir_writablesG$VZVZVZ\`\`\`bfbfbfg !!'")"/39< " A A A &foo&7&788>>@@ 3v;;;;GHHH v;;!  ayCel,JT,QRRRc!!em-ORV-VWWWc!!G&PQQ QrFc g}|rdt|z}ndt|z}tj}|j||||j}t |}|dkrFtj d|ztj d|ztj d|zi} | || n| |r*dd |d DD}nd |d D}n/#t$r"} t!| d |d |dYd} ~ nd} ~ wwxYw|S)NzLC_ALL=C /bin/ls -l -p %szLC_ALL=C /bin/ls -1 -p %srrr rzPermission denied accessing %sc Dg|]\ }}}}}}}}}|t|fSrint)rHrsrs rrJz,FileOpsLinuxBase.listdir..VsG![![![1JAq!Q1a!SVV![![![rcg|]?}|d|dd@S)-Nro)r?rrrHrs rrJz,FileOpsLinuxBase.listdir..VszOZOZOZlmHIHTHTUXHYHYOZqwwyy_cefOgOgOZOZOZrrrc6g|]}|Srrrs rrJz,FileOpsLinuxBase.listdir..Xs G G Gq G G Grz&: Could not parse output of remote ls z command: 'z' )rCrrrrrrrrrr r rrrrNr) r4rBrSrr file_listrQrrrrs rrzFileOpsLinuxBase.listdir9s  E2Jt4D4DDGG1Jt4D4DDG''(/(59?(GG&foo&7&7&=&=&?&?@@ !88 % -MPT-T % .RUY.Y % -MPT-T O   9 9 9 9 kH![![OZOZqwq}q}CrDrDOZOZOZ![![![II G GFLL4F4F G G GI k k kYZYZYZ\`\`\`bhbhbhijjjjjjjj ks A D,, E6EEcdSr1rrs rrz"FileOpsLinuxBase.save_file_content_r rcdSr1r)r4rBrs r_set_file_contentz"FileOpsLinuxBase._set_file_contentbr rctjd}|j} t|jjd|d|t|d|nU#t$rH}t|jjdt|d|r| d}~wwxYw|S)NFdelete%: Writing file contents to tmp file "rZr: Exception caught: rr) tempfileNamedTemporaryFiler5rr.r8rrr?rNrr%r)r4rtmptmp_namerrs r_create_temp_filez"FileOpsLinuxBase._create_temp_filees)59998  I`I`I`bjbjbjk m m m IIeGW-- . . . IIKKKK    dn6M6M6MsSVxxxxX Z Z Z     sAA55 C?ACCc t|jjd|dt|dt j|d}||||r|rX||||rAt|jjd|d||zd||||z|||tj kr | |}t|jjd |dt|jjd |d |d |||tj |td |jjz|tj krR|j d|dt|tj |dt jt$ji||n2td|jjz||||rT|j d|dt|tj |dt jt$jidSdSt-d|z)N: Saving file "" with backup (sudo="") rz: Creating backup of "z" to "rZ)rrrSrz#: Wrote file contents to tmp file "z6: Copying over tmp file to final filename using sudo: z -> rrz%s: Copying file done zchown rorz%s: Saving file... zchmod z!Cannot write to target folder: %s)rr.r8r% posixpathrrrrrrOr)rPrrrCrrrrrrr ) r4rrrrSrr target_dir temp_files rrz-FileOpsLinuxBase.save_file_content_and_backupvs$dnF]F]F]_g_g_gilmtiuiuiuiuvxxx_X..q1  " ":w F F+ Z RD$4$4Xw $V$V RdnF]F]F]_g_g_giqsCjCjCjCDEEE(EU:U*1= RRR%-'' 227;; 4>KbKbKbdmdmdmnpppbfbpbybyby|E|E|EGOGOGOPRRR8*/+} VVV3dn6MMNNNek))$---www S[H\H\H\.].3k2?37-7-G H^,_ .aaa   ++++04>3JJKKK!!(G444 _ )))444HAUAUAU*V,1K0=15+5+EiF\*] *_____ _ _((Kj(XYY Yrc*tj|g|R}|Sr1r.ryr4rBrrs rrzFileOpsLinuxBase.join_paths-u--- rr)r8r9r:r rrlrrOrrrrrrrrrrrrrrrrrr)rrrrrrrAs#### :<!!!!Z.3m4Z ,1MZ05 T Z-2]D(Z/4}d_c))))*Z9>X\im H H H HZ/4}d ) ) ) )Z9>X\ ) ) ) )Z*/- ) ) ) )Z 38=RVcd,Z27PT ) ) ) )Z05 T8Z/4}D:Z&+mTX]####J>C]\`im       "Z Z_Zgy}GK0Z0Z0Z0Zdrrc<eZdZedZdZddZifdZede j ddfdZ ede j ddfdZ ed e j dfd Z e j dfd Zed e j dd fd ZdZdS)FileOpsLocalUnixcB|dko|tjtjfvSr6r8rs rr'zFileOpsLocalUnix.matchs  G+X ek5<=X0XXrNc@t||||dSr1rr rs rr zFileOpsLocalUnix.__init__"!!$ S)DDDDDrcjtjD]r\}}tj||vrW|tjkr#t |||t||||st|d|r1) r errorcodertr`strerrorrr rr&rN)r4rrrr5s rrz FileOpsLocalUnix.raise_exceptions///11 H HJD${4  G++5<''/0C0CD'0R0RSSSdO$7$7g$F$FGGG , ++D'::;;;rrc:|||d|||dSr1rrs rrz"FileOpsLocalUnix.save_file_contents' ))(GT7M[_`````rrc |tjkr t|d}nB#ttf$r.}|jt jkrtd|z|d}~wwxYw|dkrRd}g}|D]5} ||krn'|| |dz}6d |} n| } | nt|||||} | S)NrzCan't open file '%s'rr!rr)rrOrrr&rrr rwrstripryrxrrr) r4rrSrrrrskippedlinesrconts rrz!FileOpsLocalUnix.get_file_contents em # # 3''W%   7el**/0F0QRRR  A~~**D++ T[[]]333%kGGyy''vvxx GGIIII#44T8Wm]ghhD s#A")AA"rBc|tjkrtj|dSt||||dSr1)rrOrrrrs rrzFileOpsLocalUnix.delete_filesF em # #  !$ ' ' ' ' '  ( (tWm L L L L Lrc|tjkrtj||dSt|||||dSr1)rrOr copy_filerrrs rrzFileOpsLocalUnix._copy_filesJ em # #   - - - - -  ' 'fdG] S S S S SrFcg|tjkrAtj||ffd |rddDDn+dDnt|||||S)Nc.|Sr1rrlistrs rrz*FileOpsLocalUnix.listdir.. yO_O_`aObObrc6g|]\}}|t|fSrrrHrrs rrJz,FileOpsLocalUnix.listdir..s&```41aAs1vv;```rc^g|]*}|dd+Sror!rrrs rrJz,FileOpsLocalUnix.listdir..s/3_3_3_PQAGGIIOOC4K4K3_3_3_rc6g|]}|Srrrs rrJz,FileOpsLocalUnix.listdir..s 88817799888r)rrOrlist_dirrrr4rBrSrrrs @rrzFileOpsLocalUnix.listdir s em # #  t\I3b3b3b3b3b c c c 9``3_3_U^3_3_3_```ii88i888ii(00tWmUabbIrc*tj|g|R}|Sr1r2r3s rrzFileOpsLocalUnix.join_pathsr4rr)r8r9r:r2r'rr rrlrrOrrrrrrrrrr6r6suYY[YKEEEE:<<<<<Z =B]\`imaaaaZ 38=RVcdBZ*/-MMMM27PTTTTTZ&+mTX]    rr6ceZdZedZddZdZejdfdZ ejdfdZ ejdfdZ ejdfdZ ejdfd Z ejdfd Zejddfd Zejddfd Zejdd fdZejdfdZejddfdZejddfdZejdfdZejdfdZejdfdZejddfdZdZdS)FileOpsLocalWindowsc*|dvo|tjkS)N)r7rgrhrs rr'zFileOpsLocalWindows.match!s $44Sem9SSrNc||_||_||_|jd\}}|r/|r||_dSdSdS)N echo %temp%)rrSrrrtempdir)r4rrSrr[rs rr zFileOpsLocalWindows.__init__&sp&"%44]CC   +w}} +"==??DLLL + + + +rcVd}g}|j||||fd}|dkrk|tjkr|ddkrd}n^|ddkrd}nO|tjkrn>|tjkr |d}n%|tjkr|}ntd |z|S) a( This function is in charge of executing a command through the admin helper and processes the result depending on the result_mode parameter It was created to avoid having a result parsing on each function called through the admin helper and simplify code Nc,||Sr1rrs rrz9FileOpsLocalWindows.exec_helper_command..=!((4..rrrTrueTFalseFz#Error executing helper command : %s)rrrBooleanSuccessStringDatarN)r4rQ result_moderSrroutrs rexec_helper_commandz'FileOpsLocalWindows.exec_helper_command/s''#)>A-P-P-P(RR !88l222q6V##"GGVw&&#G 444 333a& 111AGKLL Lrc|tjkrtj|}n%|d|zt j||}|S)NzGET_FILE_OWNER %s)rrOrrrgrrcr4rBrSrrs rrz"FileOpsLocalWindows.get_file_ownerYsJ em # #.t44GG../BT/Ir$)rr.r8r%r%r&r5rrrexistsrrOrgrrbrrGrNr) r4rrrrSrrr'r( backup_file copy_commandrrs rrz0FileOpsLocalWindows.save_file_content_and_backupsdnF]F]F]_g_g_gilmtiuiuiuiuvxxx -dUCCCCxH dnNeNeNegogogoqxqxqxy { { { IIg    IIKKKK :FM($;$; :&)99 %-''LL;C88XXX{{#[LLL9A((#KL((|7KWVcddddd#Hh DDDDD    dn6M6M6MsSVxxxxX Z Z Z  sC DD E"-EErcg}|tjkrtj|||fdn'|d||fzt j||}d|S)Nc,||Sr1r)rrKs rrz6FileOpsLocalWindows.get_file_content..sSWS^S^_`SaSarzGETFILE_LINES %d %sr)rrOrget_file_linesrgrrdry)r4rrSrrrCs rrz$FileOpsLocalWindows.get_file_contentsz em # #  $XzE;a;a;a b b b b,,-BjRZE[-[]i]npwzGHHEwwu~~rc|tjkr(tj||}|rt |dS|d|d|t j||dS)Nrurv)rrOrrGrNrgrrb)r4rrrSrrvs rrzFileOpsLocalWindows._copy_filesv em # #'55E '&&& ' '  $ $ $&&&$$%GI]_fhu v v v v vrc|td|z|tjkrtj|dS|d|zt j||dS)N4Changing owner of directory not supported in WindowszCREATE_DIRECTORY %s)r rrOrrrgrrbrs rrz$FileOpsLocalWindows.create_directorysl  !'(^ae(eff f em # #  &t , , , , ,  $ $%:T%ART[]j k k k k krFcg|tjkrtj||ffd n,|d|rdndd|t j|||rddDDn dDS) Nc.|Sr1rrJs rrz-FileOpsLocalWindows.listdir..rLrzLISTDIR r 0roc6g|]\}}|t|fSrrrNs rrJz/FileOpsLocalWindows.listdir..s&\\\tq!3q66{\\\rc^g|]*}|dd+SrPrQrs rrJz/FileOpsLocalWindows.listdir..s./[/[/[A Q0G0G/[/[/[rc6g|]}|Srrrs rrJz/FileOpsLocalWindows.listdir..s 444Qqwwyy444r)rrOrrSrgrrdrTs @rrzFileOpsLocalWindows.listdirs em # #  t\I3b3b3b3b3b c c c c000C]\`imaaaa[`Zgy}GK<49=RVcd27PTwwww05}d_cqqqq:?X\im{{{{05}dqqqq :?X\{{{{ +0-llll',mTX]    rrWceZdZedZd dZifdZejddfdZ ejdfdZ ejddfdZ dZ d Z d ZdS) FileOpsRemoteUnixcB|dko|tjtjfvSrRr8rs rr'zFileOpsRemoteUnix.matchs  E)ViEK;V.VVrNc@t||||dSr1r9rs rr zFileOpsRemoteUnix.__init__ r:rcd|vr-t|tj|d|vr8t tj|tj|d|vr8t tj|tj|d|vr8t tj|tj|d|vrKtj }t|dkr|dd}d|d |}t|t|d|) NzPermission deniedr"zNot a directoryzDirectory not emptyrXr!rzUnable to perform function z. ) r rrrr&r r  ENOTEMPTYinspectstackrurN)r4rrrrfs rrz!FileOpsRemoteUnix.raise_exceptions+ ' ) )'(;(;EL'(R(RSS S (G 3 3%,(;(;EL'(R(RSS S ' ) )%-)<)+>uPW+X+XYY Y *g 5 5MOOE5zzA~~ 8A;AI77SG$$ $O//g>>?? ?rcH|tjkrs|td|z |j|dS#t t f$r.}|jtjkrtd|z|d}~wwxYwt |||||dS)NrCould not create directory %s) rrOr rSmkdirrr&rrrr)r4rBrSrrrs rrz"FileOpsRemoteUnix.create_directory"s em # #%+,NQU,UVVV t$$$$$W%   9 ,,/0ORV0VWWW    - -dD'=R\ ] ] ] ] ]sAB)A<<Bc|tjkr_ |j|dS#tt f$r.}|jt jkrtd|z|d}~wwxYwt ||||dS)NCould not delete file %s) rrOrSunlinkrr&rrr rrr4rBrSrrs rrzFileOpsRemoteUnix.delete_file0s em # # %%%%%W%   9 ,,/0JT0QRRR    ( (tWm L L L L Ls.A-)A((A-c:|||d|||dSr1r?rs rrz#FileOpsRemoteUnix.save_file_content<rsrc |j||dS#ttf$r.}|jtjkrt d|z|d}~wwxYw)Nr)rS setContentrr&rrr )r4rBrrs rrzFileOpsRemoteUnix._create_fileAsr  H  g . . . . .!   yEL((+,PSW,WXXXI sA)AAcPd}|j d}d}|sdddtdDz} |j||t d|zd}n#t $ro}d t |vrz6FileOpsRemoteUnix._create_temp_file..Rs9/y/yjk f>TW]Wd>d0e0e/y/y/y/y/y/yrzCreated temp file: "%s". TFailurezDWARNING: Unable to create temp file: "%s", trying a different name. rr!zBERROR: Unable to create temp file max number of attempts reached. z:Unable to create temp file max number of attempts reached.z$ERROR: Unable to create temp file: "z" : z. 0No SSH session active, cannot save file remotely) rSryrangerrrr%rrN)r4r tmpfilenamedoneattemptsrrs rr)z#FileOpsRemoteUnix._create_temp_fileJs 8 DH %/y/yotuwoxox/y/y/y(y(yy H'' W===;kIJJJDD " " "!CHH,,#$kny$yzzz#b==$MHH'(mnnn")*f"g"gg# YdYdYdfififi$jkkk! %HHHH!KU`U`U`bebebe fgggI- 4NOO Os%/A22 DC]\`imaaaa ###JrrcXeZdZedZdZejdfdZejdfdZ ejdfdZ ejddfdZ ejddfdZ ejdfd Z ejdfd Zejdfd Zejddfd Zejdd fdZejdfdZejdfdZejddfdZdZdS)FileOpsRemoteWindowsc.|dko|tjkSrRrhrs rr'zFileOpsRemoteWindows.match~s E)Hi5=.HHrc"||_||_dSr1)rrSrs rr zFileOpsRemoteWindows.__init__s&rNc|jrF |j|S#t$r}td|z|Yd}~dSd}~wwxYwt dt d|jjztd)NzError on ssh.stat(%s), %sF/Attempt to read remote file with no ssh session4%s: Attempt to read remote file with no ssh session .Cannot read remote file without an SSH session)rS fileExistsrNrr~rr.r8)r4rrSrrs rrz FileOpsRemoteWindows.file_existss 8 N x**8444   6A2FFFuuuuu  C D D D MPTP^Pgg h h hLMM Ms# A AA cRg}|jdt|z|||fd}d}|dkrt|rgd}|ddd}t |d d d } d} | t|kr6| d kr0t | d z } | d z} | t|kr| d k0d| || fz}|S)Nzdir %sc,||Sr1rrs rrz:FileOpsRemoteWindows.get_available_space..r^rrrr)BKBMBGBTBrrrFr#,rrr!z%.2f %s available)rrrCrurrfloatr@) r4rBrSrrfrrmeasuresrtotalr]s rrz(FileOpsRemoteWindows.get_available_spaces7'':d3C3C(C#)>A-P-P-P(RR * !88C8444HV\\^^))$//399;;AACCF&)++C3344EE#h--''EDLLedl++ #h--''EDLL ,uhuo.FFIrc|jr.|jdt|z||}dStd|jjzt d)Nzif exist %s exit /b 0Trr)rSr[rCrr.r8rN)r4rBrSrrfs rrz&FileOpsRemoteWindows.check_path_existsse 8 N())*AJtDTDT*TV]_lmmC4 MPTP^Pgg h h hLMM Mrc|td|z|tjkrX |j|dS#t $r.}|jt jkrtd|z|d}~wwxYwtdt|z|j j |}|j |}|ddkrttdS)Nrrzmkdir r r)r rrOrSrr&rrrVrIrrRr[rrf)r4rBrSrrrrQrs rrz%FileOpsRemoteWindows.create_directorys  !'(^ae(eff f em # # t$$$$$   9 ,,/0ORV0VWWW   $H~d/C/C$CTEUEacjkkGX,,W55Fh1$$"3'''%$sA A: )A55A:cBt|\}}|st|\}}|r^|r\||sG |||||n-#t$r }|jtjkrYd}~nd}~wwxYw|||||dSr1rrs rrz/FileOpsRemoteWindows.create_directory_recursivest__ d )"4JD$  D !1!1$!7!7  //g}jYYYY   7el**+****  dG]JGGGGGrc|tjkrX |j|dS#t$r.}|jt jkrtd|z|d}~wwxYwtd|z)NzCould not remove directory %sz5Unable to remove directory %s owned by different user)rrOrSrmdirr&rrr rs rrz%FileOpsRemoteWindows.remove_directorys em # # t$$$$$   9 ,,/0ORV0VWWW   ((_bf(fgg g. A&)A!!A&c|jdt|z}|ddkrttdS)Nzrmdir %s /s /qr r)rSr[rIrrf)r4rBrSrrs rrz/FileOpsRemoteWindows.remove_directory_recursivesK(()9N4zError backing up file: %sdel z&: Copying file to final destination: "z6: Error copying temporary file over destination file: z to z4Error copying temporary file over destination file: z: Deleting tmp file: "z Could not delete temporary file z#: Could not delete temporary file "z": r)rrrrOrrr rSrrr_r%encoderr.r8rrrrIrrr~rrN)r4rBrrrSrrdirnamertmpdirr r backup_cmdmsgr copy_to_dest delete_tmps rrz1FileOpsRemoteWindows.save_file_content_and_backupsf"L.. em # #**7==+C+CDD V+,JW,TUUU 8 !-<<]KKNFFF||s""v..F||s""i00!9###ABBZFFTXTbTkTkTkmsmsmstvvv!F9P9P9PRXRXRXY[[[[ !  #>>K RVR`RiRiRikvkvkvw y y y T^%<%<%*>>D~VZ[kVkGlGll  ,;;JGG T1994>CZCZCZ\fgk\klo\o\o\oprrr&'BS'HIII%{(C(CCcIN[_L`L``L."="==J I`I`I`bnbnbno q q q(77 EEICqyyfjftf}f}f}@C@C@CEPEPEPRVRVRVWYYY"lilililnynyny{{$ABBB 9P9P9PR\R\R\] _ _ _(77 CCICqyy+++ssSTTTT^MdMdMdfqfqfqsvsvsvwyyyyyyNOO Orrc|jrZ |j|S#t$r2}|jtjkrt d|zYd}~dSd}~wwxYwt dtd)Nz,Permission denied attempting to read file %srr)rS getContentrrrr r~rN)r4rrSrrrrs rrz%FileOpsRemoteWindows.get_file_content&s 8 N kx**8444 k k k9 ,,/0^ai0ijjj-,,,,, k C D D DLMM Ms# A'AAc|jdt|zdzt|zdz\}}|dk}|S)Nz if exist z ( type z >NUL && echo 0 ) else ( echo 1 )rrrrCr4rBrSrrrrs rrz(FileOpsRemoteWindows.check_file_readable3s_$33K*TBRBR4RU_4_aklpaqaq4qtV5VWW Tqy rc|jdt|dzz\}}|dk}|r0|jdt|dzz\}}|S)Nz echo 1 > z/wba_tmp_file.bakrrrrs rrz'FileOpsRemoteWindows.check_dir_writable8ss$33K*TTgMgBhBh4hii Tqy  i(77DSfLfAgAg8ghhIC rFc0|jt}d|D}d|D}|g}|D]5} ||r| ddz| dfn | ddz6|t |zS)NcZg|](}|ddk|ddk|ddk&|)S)isDirr!r5...r)rHds rrJz0FileOpsRemoteWindows.listdir..BsDaaaaajAoo!F)t:K:KPQRXPY]`P`P`P`P`P`rcfg|].}|ddk|ddk|ddk&|d/S)rrr5rrr)rHrs rrJz0FileOpsRemoteWindows.listdir..CsIjjjqqzQ1V9PTCTCTYZ[aYbfiYiYi6YiYiYirr5rGr{)rSlscurdirsortrwrK) r4rBrSrrentriesdirsfilesrrs rrzFileOpsRemoteWindows.listdir?s(++f%%aa7aaajjGjjj  Z ZA JJ|X& C6336UX Y Y Y YT%[[  rc4tjj|g|R}|Sr1)r`rBryr3s rrzFileOpsRemoteWindows.join_pathsJs d+U+++ r)r8r9r:r2r'r rrOrrrrrrrrrrrrrrrrrrr}sII[I-2M    16 T0/4m405}d_c((((":?X\im H H H H05}d h h h h:?X\$$$$ +0- c c c cW\VcuyCG6P6P6P6Pr49=RVcd N N N N16 T 05}D',mTX] ! ! ! !rrceZdZdZedZejdfdZejdfdZ ejdfdZ ejdfdZ ejdfdZ ejdfd Z ejddfd Zejddfd Zejdfd Zejdfd ZejdfdZdZejddfdZejddfdZejddfdZejddfdZejdddfdZejdddfdZdZdZdS)ServerManagementHelperc"|}|j}td|vr5|d}|r|at dtzg|_||_d}|j|j |j f}tD]}| |r|}n|r<|j } | st} || ||_|jnt!dt#|zd}t$D]&}| |j |j r|}n'|r||j||j |_dSt!dt#|j dt#|j )Nzsys.mysqld.sudo_overridez'Overriding default sudo prefix to : %s )rRrSz*Unsupported administration target type: %s)rSrz(Unsupported administration target type: r)get_settings_object serverInfor rrr tmp_filesprofilehost_osrconnect_method_process_ops_classesr'rRr=rrNr%_file_ops_classesr) r4rrSsettingsr sudo_overrideklass match_tuplerurRs rr zServerManagementHelper.__init__Us..00(   % 3 3&'ABM""$$ ^&3#FI\\]]] (97;QR %  Aww{##    [+K 21 ;C@@@DJ J " " " "H[IYIYYZZ Z"  Awww('*@AA    Edjcw?PQQQDIII)sSZSdOeOeOeOegjkrlBhChChCDEE Erc,|jr |jjSdSr)r=rr s rrz*ServerManagementHelper.cmd_output_encodings : 2:1 1rrNc:|j|||Sr1)rrrs rrz*ServerManagementHelper.check_file_readabley,,T7MJJJrc:|j|||Sr1)rrrs rrz(ServerManagementHelper.check_path_existssy**4-HHHrc:|j|||Sr1)rrrs rrz)ServerManagementHelper.check_dir_writablesy++D'=IIIrc:|j|||Sr1)rrrs rrz"ServerManagementHelper.file_existsy$$T7MBBBrc:|j|||Sr1)rrrs rrz*ServerManagementHelper.get_available_spacerrc:|j|||Sr1)rrrs rrz%ServerManagementHelper.get_file_ownersy''g}EEErc<|j||||Sr1)rrrs rrz'ServerManagementHelper.create_directorysy))$ SSSrc<|j||||Sr1)rrrs rrz1ServerManagementHelper.create_directory_recursivesy33D'=R\]]]rc:|j|||Sr1)rrrs rrz'ServerManagementHelper.remove_directorysy))$GGGrc:|j|||Sr1)rrrs rrz1ServerManagementHelper.remove_directory_recursivesy33D'=QQQrc:|j|||Sr1)rrrs rrz"ServerManagementHelper.delete_filerrctr1r2r s rmake_local_tmpfilez)ServerManagementHelper.make_local_tmpfiles "!rrc>|j||||S)N)rSrr)rr)r4rBrSrrs rrz'ServerManagementHelper.get_file_contents"y))$}is)tttrc@|j|||||SN)rSrr)rr)r4rBcontentsrSrrs rset_file_contentz'ServerManagementHelper.set_file_contents%y**47Zgpt*uuurFc>|j||||S)N)r)rrrs rrzServerManagementHelper.listdirs!y  w L YYYrcB|j||||||Sr )rr)r4rBr rrSrrs rset_file_content_and_backupz2ServerManagementHelper.set_file_content_and_backups:y55dHFV`gxENR5SS Src>|j|||||Sr1)r=rr*s rexecute_commandz&ServerManagementHelper.execute_commands!z""7G]NT[\\\rc>|j|||||Sr1)r=r/r*s rr/z$ServerManagementHelper.spawn_processs!z''-Y`aaarc6|j|Sr1)r=rrs rrz#ServerManagementHelper.list2cmdlinesz&&t,,,rc,|jj|g|R}|Sr1)rrr3s rrz!ServerManagementHelper.join_pathss#%%d3U333 r)r8r9r:r propertyrrrOrrrrrrrrrrrrrr rrrr/rrrrrrrTs/E/E/EdX 16 TKKKK/4m4IIII05}DJJJJ+0-tCCCC38-tKKKK.3]$FFFF05}D]aTTTT:?VZgk^^^^05}DHHHH:?VZRRRR+0-tCCCC """05}d_`uuuu:?X\eivvvv',mTX]ZZZZW\VcuyCGSSSS 27dcgqu]]]].3]$_cmqbbbb---rrcHeZdZdZdZedZdZdZdZ dZ dS) LocalInputFilec<||_t||_dSr1)rBr_frs rr zLocalInputFile.__init__s t**rc4|jSr1rtellr s rrzLocalInputFile.tellw||~~rc>tj|jjSr1)r`statrBst_sizer s rr{zLocalInputFile.sizeswty!!))rcp|j||j||z Sr1)rseekrx)r4rends r get_rangezLocalInputFile.get_ranges.  Uw||CI&&&rc:|j|dSr1)rr")r4offsets rstart_read_fromzLocalInputFile.start_read_froms  Vrc6|j|Sr1)rrx)r4counts rrxzLocalInputFile.readsw||E"""rc4|jSr1)rreadliner s rr+zLocalInputFile.readlinesw!!!rN r8r9r:r rrr{r$r'rxr+rrrrrs**X*'''###"""""rrcHeZdZdZdZedZdZdZdZ dZ dS) SFTPInputFilec||_|jjjr]|jjjdkr6|jjjdkrtd||_ |jjj ||_ dS#t$rtd|zwxYw)NrzCould not connect to SSH serverzKCould not read file %s in remote server. Please verify path and permissions) ctrl_beserver_profileuses_ssheditor sshConnection isConnectedr&OperationCancelledErrorrBrrrr)r4r0rBs rr zSFTPInputFile.__init__s < & / U|"0<<>>!CC<&4<<>>!CC12STTT  u|*8==dCCDGGG u u ulosstt t us >)B))Cc4|jSr1rr s rrzSFTPInputFile.tellrrc |jjj|jdS#t $r7}ddl}td|d|dYd}~dSd}~wwxYw)Nr{rzException executing size: rrrF) r0r3r4rrB SystemErrorrrrr4rrs rr{zSFTPInputFile.sizes <&499$)DDVL L        IaaaAUAUAWAWAWAWX Y Y Y22222 s.1 A2,A--A2c |j||j||z S#t$r7}ddl}t d|d|dYd}~dSd}~wwxYw)NrzException executing get_range: rrrF)rr"rxr9rrr)r4rr#rrs rr$zSFTPInputFile.get_ranges  GLL   7<<E ** *        I111iFZFZF\F\F\F\] ^ ^ ^22222 s69 A:,A55A:c |j|dS#t$r7}ddl}t d|d|dYd}~dSd}~wwxYw)NrzException executing read_from: rrrF)rr"r9rrr)r4r&rrs rr'zSFTPInputFile.start_read_from#s  GLL         I111iFZFZF\F\F\F\] ^ ^ ^22222 s A,AAc |dkrtddS|j|S#t$r7}ddl}td|d|dYd}~dSd}~wwxYw)NrFzInvalid read size. rzException executing read: rr)rrrxr9rr)r4r)rrs rrxzSFTPInputFile.read+s {{0111r7<<&& &        IaaaAUAUAWAWAWAWX Y Y Y22222 s33 A4,A//A4c |jS#t$r7}ddl}t d|d|dYd}~dSd}~wwxYw)NrzException executing readline: rrr)rr+r9rrrr:s rr+zSFTPInputFile.readline7s~ 7##%% %        I!!!YEYEYE[E[E[E[\ ] ] ]22222 s A,AANr,rrrr.r.s u u uX   rr.cteZdZd dZdZdZedZedZdZ dZ d Z d Z dd Z d ZdS)SudoTailInputFileNc||_||_d|_||_||_d|_d|_d|_d|_|jj j |_ d|_ |j sV |j |jsd|_ dS#t$r }tdd|_ Yd}~nGd}~wwxYw|j|_|j |jt"j|jdS)NTrFz@check_file_readable returned OSError, we will try with sudo then)rSr)rB server_helperr~ _password _password_cbskip_first_newline_pos_proc_queueris_local _is_local _need_sudorr&r get_passwordrrP)r4rBrBpassword password_cbrs rr zSudoTailInputFile.__init__Bs * !'"&   +3< ? +-AA$)LL/*.E+++abbb&*DOOOOOO+"&!2"66tyEKgkgu6vvv s&&B B8B33B8cJ|jr|jdSdSr1rGryr s r__del__zSudoTailInputFile.__del__^. :  JOO       rc|jSr1rFr s rrzSudoTailInputFile.tellb yrcF|js|jn|Sr1)rDrCr s rrLzSudoTailInputFile.get_passwordes"%)%6Ot~~DJKK KQx{rctj}|jsI|jdt |j|||z fztjd|j }nM|jdt |j|||z fztj |j |j }|dkrtd|jz| S)Nz1/bin/dd if=%s ibs=1 skip=%i count=%i 2> /dev/nullrrCould not get data from file %s)rrrKrBrrCrBrrOrrPrLrrr4rr#rrs rr$zSudoTailInputFile.get_rangess\ KMM f$445hlvw{xAmBmBDIKNOTKTlU6Uafan~BSTSZ4[[CC$445hlvw{xAmBmBDIKNOTKTlU6Uafal|@|M^_^e4ffC !88@49LMM Mzz||rcX|jsE|jdt|j|fzt jd|jnI|jdt|j|fzt j|j |j| dS)N(/bin/dd if=%s ibs=1 skip=%i 2> /dev/nullr) rKrBrrCrBrrOrrPrLrr4r&rs r read_taskzSudoTailInputFile.read_task~s P   . ./Y]ghlhq]r]rtz\{/{HMHUeiz~zD . E E E E   . ./Y]ghlhq]r]rtz\{/{HMHScgctEIEO . P P P rc$||_tj|_t |j|_tj|j||jf|_ddl }|j |j |j }}}|j |j|jc|_ |_ |_ |j|||c|_ |_ |_ |jr:|jddkr|jddSdSdS)Nr%rbrr!rr)rFmultiprocessingQueuerHr r~Processr`rGsysr$rr real_stdout real_stderr real_stdinrrEpeekrxr4r&rfstdostdestdis rstart_read_task_fromz&SudoTailInputFile.start_read_task_froms %+--  ,, $,DN&RVR[I\]]]  :sz39Dd,/OS_cn) CJ  ,0$) CJ  " "y~~a  D(( q!!!!!  " ")(rcd|jr||S||_tj}|jsE|jdt|j |fztj d|j nI|jdt|j |fztj |j|j ||_|jd|jr:|jddkr|jddSdSdS)Nr^rrr!rr)rJrorFrrrKrBrrCrBrrOrrPrCr~r"rErxr4r&rs rr'z!SudoTailInputFile.start_read_fromsq > 5,,V44 4 KMM J   . ./Y]ghlhq]r]rtz\{/{HMHUeiz{zA . B B B B   . ./Y]ghlhq]r]rtz\{/{HMHScgcqBCBI . J J J  q  " "y~~a  D(( q!!!!! " "((rc|jJ|j|}|xjt|z c_|Sr1r~rxrFrur4r)rs rrxzSudoTailInputFile.read>y$$$ INN5 ! ! SVV rc|jJ|j}|xjt|z c_|Sr1r~r+rFrur4rs rr+zSudoTailInputFile.readline>y$$$ I    SVV rrr1)r8r9r:r rQrrrLr{r$r`ror'rxr+rrrr@r@As8PPXPX   """""""  rr@c`eZdZdZdZdZdZedZdZ dZ dZ d Z d d Z d Zd S)AdminTailInputFileaq This class is the windows like implementation for the tail as admin command It is aided with a command in the admin helper which has the next syntax GETFILE : position of the file where the read starts : number of bytes to be read, 0 indicates the rest of the file from the position ch||_||_d|_||_d|_d|_d|_dS)Nr)rBrBr~rCrFrGrH)r4rBrBrMs rr zAdminTailInputFile.__init__s8 * !   rcJ|jr|jdSdSr1rPr s rrQzAdminTailInputFile.__del__rRrc|jSr1rTr s rrzAdminTailInputFile.tellrUrc|j|jtj|jd}|st d|jz|ddSrX)rBrrBrrPrCrrYs rr{zAdminTailInputFile.sizesW"**49 [_[ix|*}} L>JKK KQx{rc$tj}|jd|||z t |jfzt j|j|j }|dkrtd|jz| S)NzGETFILE %i %i file=%srrr[) rrrBrrCrBrrPrCrrrr\s rr$zAdminTailInputFile.get_ranges KMM 001HESVW\S\^himir^s^sKt1tAFAL\`\j{|{B0CC !88@49LMM Mzz||rc|jd|t|jfztj|j|j|dS)NzGETFILE %i 0 file=%sr) rBrrCrBrrPrCrrr_s rr`zAdminTailInputFile.read_taskso **+AVZX\XaMbMbDc+cotozKOKYjnjt* u u u rc||_tj|_t |j|_tj|j||jf|_ddl }|j |j |j }}}|j |j|jc|_ |_ |_ |j|||c|_ |_ |_ dS)Nrbr)rFrcrdrHr r~rer`rGrfr$rrrgrhrirrks rroz'AdminTailInputFile.start_read_task_froms %+--  ,, $,DN&RVR[I\]]]  :sz39Dd,/OS_cn) CJ  ,0$) CJ rc||_tj}|jd|t |jfztj|j |j ||_ |j ddS)NzGETFILE %i 0 %srr) rFrrrBrrCrBrrPrCrr~r"rqs rr'z"AdminTailInputFile.start_read_froms KMM **+< SWS\H]H]?^+^jojuFJFTefel* m m m  qrNc|jJ|j|}|xjt|z c_|Sr1rsrts rrxzAdminTailInputFile.readrurc|jJ|j}|xjt|z c_|Sr1rwrxs rr+zAdminTailInputFile.readlineryrr1)r8r9r:__doc__r rQrrr{r$r`ror'rxr+rrrr{r{sX  = = = rr{)F)Tplatformr`r.rr threadingr%rrErrtrrrrirr mformsr workbench.utilsr wb_commonr r rrrrrr workbench.logrrrrrrworkbench.tcp_utilsrworkbench.os_utilsrrrr)objectr+rCrIrPrVrlrOrrsystemrrrrrrwr4rPWIN_REG_QUERY_PROGRAMFILESWIN_REG_QUERY_PROGRAMFILES_x86r|r{r}rrerrrrr6rWrrrrr.rcr@r{rrrrs2,     KKK''''''uuuuuuuuuuuuuuuu++++++++]]]]]]]]]]]]]]]]555555??????????++++ """""F"""111@@@ 38+%62,1=ZmCTV`dkkkk\,1=Z^os~B[[[[|8? !!)MM'M*/-t####V,^$N+++&@&@&@&@&@>&@&@&@R0111K@K@K@K@K@NK@K@K@Z1222 m!v(1,&g/g/g/g/g/^g/g/g/T23330/0/0/0/0/!70/0/0/d67774 4 4 4 4 &4 4 4 j%%%jjjjjvjjjz \\\\\'\\\|)***XXXXX&XXXv,---kkkkk(kkkZ*+++OOOOO6OOOb-... MMMMMVMMM`"""""V"""4?????F???DpppppppphIIIIIIIIIIr