# HG changeset patch # User mb # Date 1386768859 -3600 # Node ID 76d9177ca5093f77aa8ddff8ceeed96132b661d9 # Parent b44a603b0b95d928d52d3c551faca57e3d8a98a9 changed handleBrowsingRequest and startVM diff -r b44a603b0b95 -r 76d9177ca509 OpenSecurity/bin/opensecurityd.py --- a/OpenSecurity/bin/opensecurityd.py Wed Dec 11 12:07:16 2013 +0100 +++ b/OpenSecurity/bin/opensecurityd.py Wed Dec 11 14:34:19 2013 +0100 @@ -81,9 +81,8 @@ """OpenSecurity '/device_change' handler""" def GET(self): - new_ip = gvm_mgr.handleDeviceChange() - if new_ip != None: - gvm_mgr.mapNetworkDrive('h:', '\\\\' + new_ip + '\\USB', None, None) + gvm_mgr.handleDeviceChange() + return "os_device_change" @@ -96,7 +95,6 @@ def GET(self): try: browsingVM = gvm_mgr.handleBrowsingRequest() - gvm_mgr.startVM(browsingVM) return browsingVM except: raise web.internalerror() diff -r b44a603b0b95 -r 76d9177ca509 OpenSecurity/bin/vmmanager.py --- a/OpenSecurity/bin/vmmanager.py Wed Dec 11 12:07:16 2013 +0100 +++ b/OpenSecurity/bin/vmmanager.py Wed Dec 11 14:34:19 2013 +0100 @@ -225,7 +225,14 @@ def startVM(self, vm_name): print('starting ' + vm_name) cmd = 'VBoxManage startvm ' + vm_name + ' --type headless' - print self.execute(cmd) #verify against (0, 'Waiting for VM "SecurityDVM0" to power on...\r\nVM "SecurityDVM0" has been successfully started.\r\n', '') + result = self.execute(cmd) + while result[0] != 0: + print "Failed to start SDVM: ", vm_name, " retrying" + time.sleep(1) + result = self.execute(cmd) + #verify against (0, 'Waiting for VM "SecurityDVM0" to power on...\r\nVM "SecurityDVM0" has been successfully started.\r\n', '') + return result[0] + # stop VM def stopVM(self, vm_name): @@ -319,25 +326,37 @@ new_sdvm = self.generateSDVMName() self.createVM(new_sdvm) self.attachRSD(new_sdvm, connected_device) - #sleep like method - self.listSDVM() + + self.startVM(new_sdvm) - + # wait for machine to come up while new_ip == None: time.sleep(1) new_ip = self.getHostOnlyIP(new_sdvm) while new_ip not in self.startNotifications: time.sleep(1) + if new_ip != None: + self.mapNetworkDrive('h:', '\\\\' + new_ip + '\\USB', None, None) #TODO: cleanup notifications somwhere else (eg. machine shutdown) self.startNotifications.remove(new_ip) VMManager.handleDeviceChangeLock.release() return new_ip def handleBrowsingRequest(self): - new_sdvm = self.generateSDVMName() - self.createVM(new_sdvm) - self.genCertificateISO(new_sdvm) - self.attachCertificateISO(new_sdvm) + if VMManager.handleDeviceChangeLock.acquire(True): + new_ip = None + new_sdvm = self.generateSDVMName() + self.createVM(new_sdvm) + self.genCertificateISO(new_sdvm) + self.attachCertificateISO(new_sdvm) + self.startVM(new_sdvm) + # wait for machine to come up + while new_ip == None: + time.sleep(1) + new_ip = self.getHostOnlyIP(new_sdvm) + while new_ip not in self.startNotifications: + time.sleep(1) + VMManager.handleDeviceChangeLock.release() return new_sdvm # executes command over ssh on guest vm @@ -350,7 +369,7 @@ return self.execute(cmd) # executes command over ssh on guest vm with X forwarding - def sshGuestX11Execute(self, vm_name, prog, user_name='opensec'): + def sshGuestX11Execute(self, vm_name, prog, user_name='osecuser'): #TODO: verify if X server is running on user account #TODO: set DISPLAY accordingly address = self.getHostOnlyIP(vm_name) @@ -410,13 +429,13 @@ return -1 return 1 -if __name__ == '__main__': +#if __name__ == '__main__': - man = VMManager.getInstance() + #man = VMManager.getInstance() #man.removeVM('SecurityDVM0') #man.netUse('192.168.56.134', 'USB\\') - ip = '192.168.56.139' - man.mapNetworkDrive('h:', '\\\\' + ip + '\USB', None, None) + #ip = '192.168.56.139' + #man.mapNetworkDrive('h:', '\\\\' + ip + '\USB', None, None) #man.cygwin_path = 'c:\\cygwin64\\bin\\' #man.handleDeviceChange()