# HG changeset patch # User Bartha Mihai # Date 1421170001 -3600 # Node ID 824ae4324f57f5132f58d0a7394f1854beae9caa # Parent 5547ed24adf36878a309471a4eb81c19aed7467d changed settings restore functionality for the browser. Needs addition of rsync on VM and setup diff -r 5547ed24adf3 -r 824ae4324f57 OpenSecurity/bin/cygwin.py --- a/OpenSecurity/bin/cygwin.py Tue Nov 11 16:19:03 2014 +0100 +++ b/OpenSecurity/bin/cygwin.py Tue Jan 13 18:26:41 2015 +0100 @@ -74,6 +74,7 @@ theClass.cygwin_bash = os.path.join(theClass.cygwin_bin, 'bash.exe') theClass.cygwin_ssh = os.path.join(theClass.cygwin_bin, 'ssh.exe') theClass.cygwin_scp = os.path.join(theClass.cygwin_bin, 'scp.exe') + theClass.cygwin_rsync = os.path.join(theClass.cygwin_bin, 'rsync.exe') theClass.cygwin_x11 = os.path.join(theClass.cygwin_bin, 'XWin.exe') theClass.win_cmd = os.environ.get("COMSPEC", "cmd.exe") """get the path to the VirtualBox installation on this system""" @@ -93,6 +94,7 @@ cygwin_ssh = '' cygwin_x11 = '' cygwin_scp = '' + cygwin_rsync = '' vbox_root = '' vbox_man = '' win_cmd = '' @@ -134,6 +136,10 @@ @staticmethod def scp(): return Cygwin.cygwin_scp + + @staticmethod + def rsync(): + return Cygwin.cygwin_rsync @staticmethod def x11(): diff -r 5547ed24adf3 -r 824ae4324f57 OpenSecurity/bin/opensecurityd.pyw --- a/OpenSecurity/bin/opensecurityd.pyw Tue Nov 11 16:19:03 2014 +0100 +++ b/OpenSecurity/bin/opensecurityd.pyw Tue Jan 13 18:26:41 2015 +0100 @@ -436,7 +436,7 @@ def main(): - """main startup for the opensecuirityd""" + """main startup for the opensecurityd""" global gvm_mgr global server diff -r 5547ed24adf3 -r 824ae4324f57 OpenSecurity/bin/test_vmmanager.pyw --- a/OpenSecurity/bin/test_vmmanager.pyw Tue Nov 11 16:19:03 2014 +0100 +++ b/OpenSecurity/bin/test_vmmanager.pyw Tue Jan 13 18:26:41 2015 +0100 @@ -138,12 +138,20 @@ dhcpservers = gvm_mgr.getDHCPServers() print dhcpservers - + + @unittest.skip("skipping") def testBrowsingRequest(self): gvm_mgr.start() gvm_mgr.handleBrowsingRequest() time.sleep(3000) pass + + def testRsync(self): + gvm_mgr.start() + + gvm_mgr.syncRemoteFile("SecurityDVM0", gvm_mgr.getHostOnlyIP("SecurityDVM0"), gvm_mgr.getAppDataDir() + '/OpenSecurity/chromium', '/home/osecuser/.config/') + pass + if __name__ == '__main__': TestVMManager.setUpClass() diff -r 5547ed24adf3 -r 824ae4324f57 OpenSecurity/bin/vmmanager.pyw --- a/OpenSecurity/bin/vmmanager.pyw Tue Nov 11 16:19:03 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):