# -*-mode: python; coding: utf-8 -*- # # Copyright 2012-2014 Peter Åstrand for Cendio AB. # For more information, see http://www.cendio.com if 82 - 82: Iii1i __all__ = [ "sudo_question" , "relaunch_via_sudo" ] if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I import os import sys if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii from thinlinc import prefix from thinlinc import tlgtk from thinlinc import wizard import subprocess import tempfile import shutil if 84 - 84: ooo000 - Ooo0Ooo + iI1iII1I1I1i . IIiIIiIi11I1 if 98 - 98: I11iiIi11i1I % oOO if 31 - 31: i1I def i1I1 ( title , text , secondary_text ) : if tlgtk . has_gtk : I1Ii111i1I = tlgtk . Gtk . MessageDialog ( message_type = tlgtk . Gtk . MessageType . ERROR , buttons = tlgtk . Gtk . ButtonsType . OK , text = text ) I1Ii111i1I . format_secondary_text ( secondary_text ) I1Ii111i1I . set_skip_taskbar_hint ( False ) I1Ii111i1I . set_title ( title ) I1Ii111i1I . run ( ) else : wizard . text_print_wrapped ( text ) wizard . text_print_wrapped ( secondary_text ) if 52 - 52: OOooooOo00 * i1I / Iii1i / Ii . i1i1i1111I / Ii if 43 - 43: I11iiIi11i1I def sudo_question ( title , program ) : try : if tlgtk . has_gtk : IIi1i111IiII = "This program must be run as root" I1Ii111i1I = tlgtk . Gtk . MessageDialog ( message_type = tlgtk . Gtk . MessageType . QUESTION , buttons = tlgtk . Gtk . ButtonsType . YES_NO , text = IIi1i111IiII ) I1Ii111i1I . format_secondary_text ( "Do you want to try re-launching %s through 'sudo'?" % program ) I1Ii111i1I . set_skip_taskbar_hint ( False ) I1Ii111i1I . set_title ( title ) I1Ii111i1I . set_default_response ( tlgtk . Gtk . ResponseType . YES ) i1IOO0o000o = I1Ii111i1I . run ( ) I1Ii111i1I . destroy ( ) while tlgtk . Gtk . events_pending ( ) : tlgtk . Gtk . main_iteration ( ) if i1IOO0o000o == tlgtk . Gtk . ResponseType . YES : relaunch_via_sudo ( title ) else : wizard . text_print_wrapped ( "This program must be run as root." ) IIiiii1IiIiII = "Do you want to try re-launching %s through 'sudo'?" % program i1ii11iii = wizard . text_prompt ( IIiiii1IiIiII , [ "Yes" , "no" ] ) if i1ii11iii == "yes" : relaunch_via_sudo ( title ) except KeyboardInterrupt : pass if 22 - 22: IIiIIiIi11I1 - ooo000 / I1Ii1I1 . ooo000 if 1 - 1: iI1iII1I1I1i + Ooo0Ooo + oOO * IIiIIiIi11I1 def iii111 ( ) : os . setsid ( ) if 8 - 8: Ii + i1I . I11iiIi11i1I - I1Ii1I1 % I11iiIi11i1I . i1i1i1111I ii1iIi1i11i = os . open ( os . ttyname ( 0 ) , os . O_RDWR ) os . close ( ii1iIi1i11i ) if 80 - 80: Ooo0Ooo if 85 - 85: I11iiIi11i1I % ooOOO + i1iiIII111 / ooOOO / ooo000 def relaunch_via_sudo ( title ) : if os . getenv ( "DISPLAY" ) : if 17 - 17: oOo0O00 * i1iiIII111 - Iii1i . OOooooOo00 - Oo % i1i1i1111I with tempfile . NamedTemporaryFile ( delete = False ) as IIii : OO00 = os . getenv ( "XAUTHORITY" ) if not OO00 : OO00 = os . path . expanduser ( "~/.Xauthority" ) try : with open ( OO00 , 'rb' ) as o0O0ooOoo00o : shutil . copyfileobj ( o0O0ooOoo00o , IIii ) IIii . flush ( ) os . environ [ "XAUTHORITY" ] = IIii . name except OSError as Oo0Oo00O0OO : print ( "warning: failed to copy %s to %s:" % ( OO00 , IIii . name ) , file = sys . stderr ) print ( Oo0Oo00O0OO , file = sys . stderr ) if 7 - 7: Ooo0Ooo if 36 - 36: Iii1i oOo0O00O0ooo = [ "sudo" , "-E" ] if tlgtk . has_gtk : os . environ [ "SUDO_ASKPASS" ] = os . path . join ( prefix . get_tl_prefix ( ) , "libexec/tl-ssh-askpass" ) if 89 - 89: Ii % IiIIii11Ii if 75 - 75: Ooo0Ooo / Ii / IiIIii11Ii + IiIIii11Ii . I1I if 88 - 88: Oo * IiIIii11Ii if 100 - 100: OOooooOo00 - OooOoo * I1Ii1I1 / Ooo0Ooo / Iii1i os . environ [ "TLSSOIGNORE" ] = "1" oOo0O00O0ooo . append ( "-A" ) if 23 - 23: Ooo0Ooo + i1 * I1Ii1I1 + Oo * Ii - IIiIIiIi11I1 if 29 - 29: IiIIii11Ii - oOo0O00 if 30 - 30: I1I . ooo000 if 43 - 43: ooOOO . I11iiIi11i1I + ooo000 if 87 - 87: Iii1i + ooOOO . i1I / Ii + Oo oOo0O00O0ooo . append ( sys . executable ) oOo0O00O0ooo . extend ( sys . argv ) if 77 - 77: i1iiIII111 + OOooooOo00 - Oo % ooo000 try : if 74 - 74: Ii + Ooo0Ooo if 1 - 1: I1I % Ooo0Ooo + i1iiIII111 . i1iiIII111 % Oo if 93 - 93: oOo0O00 % Ooo0Ooo * i1iiIII111 if tlgtk . has_gtk : if 52 - 52: oOO + I1I / ooo000 - I1Ii1I1 * i1I % oOo0O00 if 52 - 52: oOo0O00 . I1I + i1I - i1iiIII111 % iI1iII1I1I1i if 57 - 57: I1I * IIiIIiIi11I1 % I1Ii1I1 * i1i1i1111I if 37 - 37: OOooooOo00 * i1i1i1111I + oOo0O00 / I1I / OooOoo if 4 - 4: i1 oO00o00OO , o00o = os . openpty ( ) Ii11I = subprocess . Popen ( oOo0O00O0ooo , preexec_fn = iii111 , universal_newlines = True , pass_fds = [ oO00o00OO ] , stdin = o00o , stdout = subprocess . PIPE , stderr = subprocess . STDOUT , ) else : os . execvp ( oOo0O00O0ooo [ 0 ] , oOo0O00O0ooo ) except OSError as Oo0Oo00O0OO : i1I1 ( title , "Failed to execute 'sudo'" , str ( Oo0Oo00O0OO ) ) sys . exit ( 1 ) if 7 - 7: Oo / OooOoo - I11iiIi11i1I - OOooooOo00 % i1iiIII111 if 97 - 97: I11iiIi11i1I % oOO - I1Ii1I1 - IIiIIiIi11I1 O0O0O = "" while True : if 81 - 81: iI1iII1I1I1i + i1i1i1111I if 92 - 92: ooOOO / i1iiIII111 + oOO try : iiI1 = Ii11I . stdout . readline ( ) if iiI1 == "" : break sys . stdout . write ( iiI1 ) O0O0O += iiI1 except KeyboardInterrupt : if 20 - 20: i1i1i1111I / Ooo0Ooo - oOO + Ooo0Ooo - I1I . Ooo0Ooo if 50 - 50: Iii1i * ooo000 % Iii1i - oOo0O00 + ooo000 if 54 - 54: oOO * i1 % i1 - Ooo0Ooo + IIiIIiIi11I1 if 4 - 4: ooo000 + I1Ii1I1 * OooOoo - OOooooOo00 os . write ( oO00o00OO , b'\x03' ) if 69 - 69: ooo000 if 76 - 76: Iii1i * Ooo0Ooo . iI1iII1I1I1i / Ii / ooOOO OOOOO = Ii11I . wait ( ) Ii11I . stdout . close ( ) if OOOOO == 1 : if 36 - 36: i1i1i1111I + Iii1i - oOO * Ii i1I1 ( title , "Failed to re-launch through 'sudo'" , O0O0O ) else : if 45 - 45: i1i1i1111I * Ii if 97 - 97: i1 if 26 - 26: OOooooOo00 if 20 - 20: IIiIIiIi11I1 / Oo if 73 - 73: ooOOO - IiIIii11Ii if 22 - 22: Oo % oOo0O00 / i1I . oOo0O00 . i1I if 87 - 87: I1I - i1I . i1 * Oo if 90 - 90: OOooooOo00 * i1I . Ii if 45 - 45: IiIIii11Ii - I11iiIi11i1I . i1iiIII111 * Ooo0Ooo . IIiIIiIi11I1 if 14 - 14: iI1iII1I1I1i + OooOoo * I1Ii1I1 - I11iiIi11i1I os . _exit ( OOOOO ) # dd678faae9ac167bc83abf78e5cb2f3f0688d3a3