diff -r d7ef04254e9c -r 824ae4324f57 OpenSecurity/bin/vmmanager.pyw --- a/OpenSecurity/bin/vmmanager.pyw Wed Oct 29 15:18:22 2014 +0100 +++ b/OpenSecurity/bin/vmmanager.pyw Tue Jan 13 18:26:41 2015 +0100 @@ -556,7 +556,7 @@ def removeVMFolder(self, vm_name): machineFolder = Cygwin.cygPath(VMManager.machineFolder) - Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '\\' + vm_name + '\\\"') + Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/\"') # start VM def startVM(self, vm_name): @@ -577,13 +577,13 @@ # stop VM def stopVM(self, vm_name): logger.info('Sending shutdown signal to ' + vm_name) - Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key' ) + Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name) ) Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False') # stop VM def hibernateVM(self, vm_name): logger.info('Sending hibernate-disk signal to ' + vm_name) - Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False) + Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name), wait_return=False) Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False') # poweroff VM @@ -653,7 +653,11 @@ def detachCertificate(self, vm_name): if self.isCertificateAttached(vm_name): Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type hdd --medium none') - + + # return path for the certificate of a specific vm + def getCertificatePath(self, vm_name): + return Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key' + # wait for machine to come up def waitStartup(self, vm_name): #Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout', try_count = 60) @@ -906,13 +910,13 @@ import_logger.info('Updating components...') tmp_ip = self.getHostOnlyIP(self.vmRootName) - tmp_machine_folder = Cygwin.cygPath(VMManager.machineFolder) - Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key') - Cygwin.sshExecute('"sudo apt-get -y upgrade"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key') + + Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) ) + Cygwin.sshExecute('"sudo apt-get -y dist-upgrade"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) ) import_logger.info('Restarting template VM...') #check if reboot is required - result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key') + result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) ) if "Yes" in result[1]: self.stopVM(self.vmRootName) self.waitShutdown(self.vmRootName) @@ -970,9 +974,10 @@ # create chromium settings dir on local machine if not existing Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + appDataDir + '/OpenSecurity/chromium\\\"') # create chromium settings dir on remote machine if not existing - Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', Cygwin.cygPath(self.getMachineFolder()) + '/' + new_sdvm + '/dvm_key') - #restore settings on vm - self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/') + Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', self.getCertificatePath(new_sdvm)) + # restore settings to svm from active user settings dir + # self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/') + self.syncRemoteFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/') return self.vms[new_sdvm] def releaseSession(self, vm_name): @@ -988,22 +993,31 @@ vm['used'] = True self.sdvmFactory.trigger() return vm - return self.createSession(browsing) - + return self.createSession(browsing) def backupFile(self, vm_name, ip_addr, src, dest): global backup_lock with backup_lock: - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key' + certificate = self.getCertificatePath(vm_name) command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"' return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False) def restoreFile(self, vm_name, ip_addr, src, dest): - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key' + certificate = self.getCertificatePath(vm_name) command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"' return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False) - + def syncRemoteFile(self, vm_name, ip_addr, src, dest): + certificate = self.getCertificatePath(vm_name) + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"' + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False) + + def syncLocalFile(self, vm_name, ip_addr, src, dest): + global backup_lock + with backup_lock: + certificate = self.getCertificatePath(vm_name) + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"' + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False) class SDVMFactory(threading.Thread): vmm = None @@ -1070,6 +1084,12 @@ self.net_resource = '\\\\' + self.ip_addr + '\\Download' urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'net_resource='+self.net_resource)#.readline() + # synchronize browser settings + appDataDir = self.vmm.getAppDataDir() + logger.info("Syncing browser settings in AppData dir " + appDataDir) + # sync settings on vm + self.vmm.syncRemoteFile(self.vm_name, self.ip_addr, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/') + if self.wpad: browser = '\\\"/usr/bin/chromium --proxy-pac-url=\\\"'+self.wpad+'\\\"\\\"' elif self.proxy: @@ -1077,9 +1097,10 @@ else: browser = '\\\"/usr/bin/chromium\\\"' - Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key') + Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', self.vmm.getCertificatePath(self.vm_name)) appDataDir = self.vmm.getAppDataDir() - self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/') + # self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/') + self.vmm.syncLocalFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/') except urllib2.URLError: logger.error("Network drive connect failed. OpenSecurity Tray client not running.") @@ -1101,8 +1122,6 @@ self.vmm.releaseSession(self.vm_name) self.vmm.sdvmFactory.trigger() - - class DeviceHandler(threading.Thread):