def __init__(self,token=None,pipename=None): super(SecureStringPipe,self).__init__(token) if pipename is None: self.pipename = b(r"\\.\pipe\esky-" + uuid.uuid4().hex) self.pipe = kernel32.CreateNamedPipeA( self.pipename,0x03,0x00,1,8192,8192,0,None ) else: self.pipename = pipename self.pipe = None
def spawn_sudo(proxy): """Spawn the sudo slave process, returning proc and a pipe to message it. This function spawns the proxy app with administrator privileges, using ShellExecuteEx and the undocumented-but-widely-recommended "runas" verb. """ pipe = SecureStringPipe() c_pipe = pipe.connect() if getattr(sys,"frozen",False): if not esky._startup_hooks_were_run: raise OSError(None,"unable to sudo: startup hooks not run") exe = [sys.executable] else: exe = [sys.executable,"-c","import esky; esky.run_startup_hooks()"] args = ["--esky-spawn-sudo"] args.append(base.b64pickle(proxy)) args.append(base.b64pickle(c_pipe)) # Make it a slave process so it dies if we die exe = exe + esky.slaveproc.get_slave_process_args() + args if sys.getwindowsversion()[0] < 6: kwds = {} if sys.hexversion >= 0x02060000: kwds["close_fds"] = True proc = KillablePopen(exe,**kwds) else: execinfo = SHELLEXECUTEINFO() execinfo.cbSize = sizeof(execinfo) execinfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NOASYNC execinfo.hwnd = None execinfo.lpVerb = b("runas") execinfo.lpFile = b(exe[0]) execinfo.lpParameters = b(" ".join(exe[1:])) execinfo.lpDirectory = None execinfo.nShow = 0 ShellExecuteEx(byref(execinfo)) proc = FakePopen(execinfo.hProcess) return (proc,pipe)