XׯdNddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZddlmZmZmZmZmZddlmZmZmZddlmZmZddlmZddlZddlZddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&dd lm'Z'd Z(d Z)d Z*Gd de+Z,Gdde+Z-Gdde+Z.dS)N)Version)MySQLConnection MySQLError QueryErrorstrip_passwordescape_sql_string)OperationCancelledErrorUsersPermissionDeniedErrorInvalidPasswordErrorSSHFingerprintNewError)PasswordHandlerServerControlShellServerControlWMI)ServerManagementHelperwbaOS)nc)log_info log_warning log_error log_debug log_debug2 log_debug3) to_unicodeiii c4eZdZgdZdZdZdZdZdZdS) EventManager)server_offline_eventserver_started_eventserver_stopped_eventshutdown_eventfirewall_installed_eventfirewall_removed_eventc0i|_d|_g|_dSNF)eventsdeferdeferred_eventsselfs ..\modules\wb_admin_control.py__init__zEventManager.__init__:s  !c6|dz }t||rad}||jvr|j|}n g}||j|<||td|jjzdz|zdzdSt |jjdz|zdzdS)N_eventzAdded z for event  z does not have method )hasattrr%appendr __class____name__r)r) event_namehandler handlers_lists r*add_event_handlerzEventManager.add_event_handler?sh 7J ' ' a MT[(( $ J 7 " *7 J'   ) ) ) x'"3"<<}LzY\`` a a a a a g'03KKjX[__ ` ` ` ` `r,cd|_dS)NT)r&r(s r* defer_eventszEventManager.defer_eventsOs  r,c`d|_|jD]}||g|_dSr$)r&r'event)r)ev_names r*continue_eventszEventManager.continue_eventsRs> +  G JJw    !r,c|jr|j|dS|dz }||jvrt d|zdzdS||jvrwt d|zdzdz|j|D]O}t||r=t d|zdz|jj zdzt||PdSt d|zdzdzdS) Nr.zEventManager: invalid event: r/z Found event z in listzPassing event z to z"Found valid but unrequested event ) r&r'r1 valid_eventsrr%rr0r2r3getattr)r)nameobjs r*r;zEventManager.eventXs$ :   ' ' - - - F  t( ( ( 5## r,c,|jduo |jjSN)rM is_connectedr(s r*rPzSQLQueryExecutor.is_connectedss{$&C4;+CCr,c |rr|j |jr|j|jn#|jwxYwd|_dSrO)rPrLacquirerM disconnectreleaser(s r*closezSQLQueryExecutor.closevs      # H      #;-K**,,,  """"  """" s A))BcHd}|j |r9tdt |z|j|}|jn#|jwxYw|S)NzExecuting query %s )rLrRrPrrrM executeQueryrTr)queryresults r* exec_queryzSQLQueryExecutor.exec_querys    "" 91N54I4IIJJJ11%88 H      DH       A BBcHd}|j |r9tdt |z|j|}|jn#|jwxYw|S)Nz Executing query multi result %s )rLrRrPrrrMexecuteQueryMultiResultrTrXs r*exec_query_multi_resultz(SQLQueryExecutor.exec_query_multi_results    "" D>PUAVAVVWWW< 4GWj* IpwpwpwzAzAzACMCMCMOYOYOYZ [ [ [   3 3GMr7=bR\Rb`bdndtrt u u u u > ? ? ?   ' k"243FHZ\`\q"r"rD    ) kT-@-I k"4T5H$J\^b^s"t"tD   "&"5">@S@\!]^ _ _ _ijj j   -2DKDMMM  r,c|jr3 |n#t$r}td|z|jt krjt jd|j zd|zddd}|t j krYd}~|t j krtdd|_np|jtkr>tjj|jjstdn"d|_|jjst+d Yd}~nd}~wwxYw|j3|jsA|js "dn88::a?? N % % ' ' '!DNNN " "??r,cR|jd}||d}td|z||krjd|jjd}|dkrd|d <n|d krd|d <nd|d <t jd |j||d ks|d kri|_d|_ i|_ |SdS) NrT)verboseforce_hard_checkz%Force check server state returned %s rm)state connectionrlrkrrnGRNServerStateChangedro) ris_server_runningrrsrrsendr}rrr)r)r old_state new_staters r*force_check_server_statez'WbAdminControl.force_check_server_state[s9!< **7T*RR :YFGGG  ! !!$2E2Z\\DI%% !W i'' "W !W  G+T[$ ? ? ?I%%i)?)?(*%-1*(*% tr,rcd}|j\}}|s|}n|d|rI|r5|d||j\}}|}|dvrS|dt jj|j j }t jj }t jj }|dkr$t jj ||dkr|dn|d||fz|d vrd }|d nN|tkrd }|d n+|d}|d|S)NrfzChecking server status...z!MySQL server is currently running)rlrnzTrying to connect to MySQL...rzConnection succeededz%s (%i))iiirozAssuming server is not runningrnzServer is in offline moderlzAssuming server is running)rris_sql_connectedsql_pingquery_server_inforr DbMySQLQueryopenConnectionrsr lastErrorCode lastErrorcloseConnectionMYSQL_ERR_OFFLINE_MODE) r)rrretstatusstimeconnrrs r*rz WbAdminControl.is_server_runningxs= " >CC KK3 4 4 4$$&& !==??!KK CDDD**,,,$($IMFE C000 ;<<<{/>>t?R?ghh{/==??k.88::!88K,<|j||fdSrO)rwput)r)taskargss r*uitaskzWbAdminControl.uitasks" T4L)))))r,c|jsU|j\}}|||j|jSdSdSrO)rwemptyget task_done)r)funcrs r*process_ui_task_queuez$WbAdminControl.process_ui_task_queuesz/'')) (,,..JD$ D$KK O % % ' ' '/'')) ( ( ( ( (r,c<|j||dSrO)r%r7)r)r;rBs r*r|zWbAdminControl.add_me_for_events  %%eS11111r,c:|j|dSrO)r%r;)r)rAs r*r;zWbAdminControl.events $r,c<||j|dSrO)rr;)r)r4s r*event_from_mainzWbAdminControl.event_from_mains DJ +++++r,c8|jdSrO)r%r9r(s r*r9zWbAdminControl.defer_eventss   """""r,c8|jdSrO)r%r=r(s r*r=zWbAdminControl.continue_eventss ##%%%%%r,cj|}|jr)|jj|jj}|SrO)rrrrsr)r)rrs r*rz$WbAdminControl.expand_path_variabless7   g$*@@ATAeffC r,c |s|nO#t$rB}td|ztjdd|zdddYd}~nd}~wwxYw|jsA|j s>>, ? S S S 89;O;Q;QQ R R R R R S -... '')))#((*****s+A A B7BBC F-GGctj|jjj|jj\}}|r|SdSrO)rrfind_cached_passwordrsrhostIdentifiermysql_username)r)foundr"s r*r#z!WbAdminControl.get_mysql_passwordMsN *??@S@h@wy}zMz\]]x  Otr,c"d}|rK |jdd}nZ#t$r }|sd}Yd}~n5d}~wwxYw |n#t $r }Yd}~nd}~wwxYw|S)NFzselect 1T)rr%r[ris_connection_errorrr)r)rrs r*rzWbAdminControl.sql_pingTs  " "  ##J///   ,,..C    """"      s&5 AAA#A88 B B c d}|j |j|}n#t$r}d|dtt t |d}t ||r9|r%t d||n|Yd}~nd}~wwxYwtd|S)NzError executing query : r/z=exec_query: Loss of connection to mysql server was detected. sql connection is down ) r%r[rrrrrr=handle_sql_disconnectionr)r)qauto_reconnectrrlogs r*r[zWbAdminControl.exec_queryhs 8  h))!,,    :;!!^JWZ[\W]W]L^L^=_=_=_=_`C   !a&;&;&=&= `aaa11!4444G54444   0 1 1 1 s& B6A">!"CCr,ci|_|d}|sdtjf|_dS|rZ|rF|d|j|d<|r|Ftj|_i|_|d}|rZ|rF|d|j|d<|r|F|jr|jd|_tj |j|_ |j j |jkrBt|jjd|j j d|jd |j|j _ |j r|j d d d r|j d d d rd nd}|d|z}|r|rw|d}|d}|d}|dkr|j||f|r|wd|jvr-|jddkrdtjf|_dSdtjf|_dS)NzSHOW VARIABLESror.r/r-versionzN.connect_sql(): The server version stored in the server instance profile was "z6". Changed it to the version reported by the server: "z" rk PLUGINSPLUGINzSHOW %sNameStatusTypeACTIVErrrnrl)rr[rrr2r3rrr'rfromstrr(rsr)rr2r3#is_supported_mysql_version_at_leastr{r)r)rZ plugin_varrAr plugin_types r*rz WbAdminControl.query_server_infos "!122 5> 4LD 1 F g)) gJPJ]J]^eJfJfD !&"5"5o"F"F G g)) g&*Y[[" "!566 g)) gJPJ]J]^eJfJfD !&"5"5o"F"F G g)) g   F#4Y?D ")/$2B"C"CD "1T5EEEZ^ZhZqZqZq />>>@P@P@PRTTT6:5E#2   H4#6#Z#Z[\^_ab#c#c H'+&9&]&]^_abde&f&ftltJ__Y%;< 4LD 1 1 15> 4LD 1 1 1r,c jjj}fd}|}jjpd}d}jrrjdd}|sjjrtj}jdd}|rjj |kr|j_ d}jdd}|rjj |kr|j_ d} jd d v} jj | kr| j_ d}n#t$rYnwxYw j rj d d d rd} nd} j| d v} jj| kr| j_d}n#t$rYnwxYwj rj d d d s||vr/||dddnd} | r || nd} | rKjj| kr;| p,t$jjj |dzj_d}||vr/||dddnd} | r || nd} | rKjj| kr;| p,t$jjj |dzj_d}||vr/||dddnd}|r ||nd}|rKjj|kr;|p,t$jjj |dzj_d}njrjd}|r|dkr ||nd} jj| kr| j_d}jd}|r|dkr ||nd}jj|kr|j_d}jd}|r|dkr ||nd}jj|kr|j_d}t/dt1jzdzt1zdzt7djDzdz|r%t:jj dSdS) Nc  jjrX jrP tj j jj}n;#t $rtd jjz j d}tj j jjtj |}nn#t$r j dYnGt$r;}td jjdt!|dicYd}~cYSd}~wwxYwYnEt$r9}td jjdt!|dicYd}~Sd}~wwxYwi}d}|D]}|}|d ks|d r2|d r2|d r|d d}y|d\}}}|pd} | ||i|<|SiS)NzBCould not open the file "%s" as the current user. Trying as admin Tfile)as_user user_passwordzCould not open the file "z": r/rootr#[]rkrm=r)rsrrioStringIOget_file_contentr rryget_password_forr ADMINr reset_password_forrrrstrip startswithendswith partition setdefault) cfg_filer"roptssectionlinekdvvalr)s r*get_config_optionszIWbAdminControl.query_server_installation_info..get_config_optionss"3 8J !{4+=+N+NtObOs+t+tuuHH, & & &cfjfygKKLLL & &'+'<'M'Mf'U'UH'){43E3V3VW[WjW{6;kS[4W4]4](^(^H!3MMM 1DDVLLLLL(&&&%IdNaNrNrNrtwx{t|t|t|t|&}~~~#%IIIIIIII& & "E !IdFYFjFjFjlopsltltltltuvvvIIIIII $ F FD::<zAWbAdminControl.query_server_installation_info..\s-W-W-Wqad-W-W-Wr,r/)!rs path_modulenormpathconfig_file_sectionrr rsocket gethostnamerrgeneral_log_enabled ValueErrorr(r]slow_log_enabledrpgeneral_log_file_pathrrrslow_log_file_patherror_log_file_pathrrIr'rrr{rrr saveInstances)r)rr}rvconfig_sectionrequest_save_profilerrrrslow_query_varrrrrrslow_query_log_file_pathlog_error_paths` r*rz-WbAdminControl.query_server_installation_infosR&2;" " " " " H"!##,@LH$  " ,00R@@H 0 3 < 0!-//+// 2>>G ,4.6'AA.5#+'+$+// 2>>G ,4.6'AA.5#+'+$ &*&;&?&? &N&NR]&]#&:>QQQ>QD';+/(     &84+>+b+bcdfgik+l+l8%5NN%7N#'#8#<#<^#L#LP[#[ &7;KKK;KD'8+/(    "% 0$*=*a*abcefhj*k*k% 0WeimWmWmD$8$<$"?"?"?\^ " ,t':'MQd'd'd9L:NPRPWP\P\]a]p]x{CFM{MQNQN#6'+$[imq[q[q$~"6":":;"K"K"Q"QRV"W"W"Wwy CV"^((+>"?"?"?\^ " ,t':'NRe'e'e:M;NQSQXQ]Q]^b^q^y|DGM|MRNRN#7'+$$ 0,001CDD:>(V43;;TV%&<@UUU@UD'=+/(,001FGG=A+Ydckk88D>>>WY(&9=UUU=UD':+/(,00==37!ODCKK$R&:nLL>LD';+/(?$tGWBXBXX#$&*4+@+@+B+B&C&CD&'),-W-WD)>)>56WWYY "'+KMM-==>N_`_f=ggklll&-G() (:(:(<(<(B(B4(H(H??'+zz||#'!?04s0C0CIAsA'(,<'<'<56WWYY )*i56WWYY ?()HIII%'+'9'J'JK`'a'a#'!b.5G19J15dii 6J6J16L6M6M1N1T1T1V1VWX1Y1_1_1a1aJ$+W#5%%% $%%'+'9'J'JK`'a'a#'!>.5G19J15J$+W#5%%% $%%'+'9'J'JK`'a'a#'!b.5G1?J15dii 6J6J16L6M6M1N1T1T1V1VWX1Y1_1_1a1aJ$+W#5%%% $%"GZCCjkkkts8(A*QQ'&Q'+4R R43R48A*T##T76T7)TF)F)rF)TrO)/r3rCrDrrrr%rr(r'r+rpropertyrrrrrrrrrr r|r;rr9r=rrrrrrrrrr#rr[r_rHrArOrQrrrrEr,r*reresMN CMNK))))VX//X/*...`'''D " " ":))))X***((( 222   ,,, ###&&& ' ' 'III III QQQ===.+++444 +++D($"$   <<<<DDD-M-M-M`}2}2}2BZZZZZr,re)/rrrJrrurjr4workbench.utilsrworkbench.db_utilsrrrrr wb_commonr r r r r wb_server_controlrrrwb_server_managementrrworkbench.notificationsrrr workbench.logrrrrrrrrrrobjectrrGrerEr,r*rs,  ######iiiiiiiiiiiiiiyyyyyyyyyyyyyySSSSSSSSSS>>>>>>>>&&&&&& ]]]]]]]]]]]]]]]] !/X/X/X/X/X6/X/X/Xf8)8)8)8)8)v8)8)8)xX X X X X VX X X X X r,