changed settings restore functionality for the browser.
Needs addition of rsync on VM and setup
1.1 --- a/OpenSecurity/bin/cygwin.py Tue Nov 11 16:19:03 2014 +0100
1.2 +++ b/OpenSecurity/bin/cygwin.py Tue Jan 13 18:26:41 2015 +0100
1.3 @@ -74,6 +74,7 @@
1.4 theClass.cygwin_bash = os.path.join(theClass.cygwin_bin, 'bash.exe')
1.5 theClass.cygwin_ssh = os.path.join(theClass.cygwin_bin, 'ssh.exe')
1.6 theClass.cygwin_scp = os.path.join(theClass.cygwin_bin, 'scp.exe')
1.7 + theClass.cygwin_rsync = os.path.join(theClass.cygwin_bin, 'rsync.exe')
1.8 theClass.cygwin_x11 = os.path.join(theClass.cygwin_bin, 'XWin.exe')
1.9 theClass.win_cmd = os.environ.get("COMSPEC", "cmd.exe")
1.10 """get the path to the VirtualBox installation on this system"""
1.11 @@ -93,6 +94,7 @@
1.12 cygwin_ssh = ''
1.13 cygwin_x11 = ''
1.14 cygwin_scp = ''
1.15 + cygwin_rsync = ''
1.16 vbox_root = ''
1.17 vbox_man = ''
1.18 win_cmd = ''
1.19 @@ -134,6 +136,10 @@
1.20 @staticmethod
1.21 def scp():
1.22 return Cygwin.cygwin_scp
1.23 +
1.24 + @staticmethod
1.25 + def rsync():
1.26 + return Cygwin.cygwin_rsync
1.27
1.28 @staticmethod
1.29 def x11():
2.1 --- a/OpenSecurity/bin/opensecurityd.pyw Tue Nov 11 16:19:03 2014 +0100
2.2 +++ b/OpenSecurity/bin/opensecurityd.pyw Tue Jan 13 18:26:41 2015 +0100
2.3 @@ -436,7 +436,7 @@
2.4
2.5
2.6 def main():
2.7 - """main startup for the opensecuirityd"""
2.8 + """main startup for the opensecurityd"""
2.9
2.10 global gvm_mgr
2.11 global server
3.1 --- a/OpenSecurity/bin/test_vmmanager.pyw Tue Nov 11 16:19:03 2014 +0100
3.2 +++ b/OpenSecurity/bin/test_vmmanager.pyw Tue Jan 13 18:26:41 2015 +0100
3.3 @@ -138,12 +138,20 @@
3.4
3.5 dhcpservers = gvm_mgr.getDHCPServers()
3.6 print dhcpservers
3.7 -
3.8 +
3.9 + @unittest.skip("skipping")
3.10 def testBrowsingRequest(self):
3.11 gvm_mgr.start()
3.12 gvm_mgr.handleBrowsingRequest()
3.13 time.sleep(3000)
3.14 pass
3.15 +
3.16 + def testRsync(self):
3.17 + gvm_mgr.start()
3.18 +
3.19 + gvm_mgr.syncRemoteFile("SecurityDVM0", gvm_mgr.getHostOnlyIP("SecurityDVM0"), gvm_mgr.getAppDataDir() + '/OpenSecurity/chromium', '/home/osecuser/.config/')
3.20 + pass
3.21 +
3.22
3.23 if __name__ == '__main__':
3.24 TestVMManager.setUpClass()
4.1 --- a/OpenSecurity/bin/vmmanager.pyw Tue Nov 11 16:19:03 2014 +0100
4.2 +++ b/OpenSecurity/bin/vmmanager.pyw Tue Jan 13 18:26:41 2015 +0100
4.3 @@ -556,7 +556,7 @@
4.4
4.5 def removeVMFolder(self, vm_name):
4.6 machineFolder = Cygwin.cygPath(VMManager.machineFolder)
4.7 - Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '\\' + vm_name + '\\\"')
4.8 + Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/\"')
4.9
4.10 # start VM
4.11 def startVM(self, vm_name):
4.12 @@ -577,13 +577,13 @@
4.13 # stop VM
4.14 def stopVM(self, vm_name):
4.15 logger.info('Sending shutdown signal to ' + vm_name)
4.16 - Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key' )
4.17 + Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name) )
4.18 Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
4.19
4.20 # stop VM
4.21 def hibernateVM(self, vm_name):
4.22 logger.info('Sending hibernate-disk signal to ' + vm_name)
4.23 - Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False)
4.24 + Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name), wait_return=False)
4.25 Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
4.26
4.27 # poweroff VM
4.28 @@ -653,7 +653,11 @@
4.29 def detachCertificate(self, vm_name):
4.30 if self.isCertificateAttached(vm_name):
4.31 Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type hdd --medium none')
4.32 -
4.33 +
4.34 + # return path for the certificate of a specific vm
4.35 + def getCertificatePath(self, vm_name):
4.36 + return Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key'
4.37 +
4.38 # wait for machine to come up
4.39 def waitStartup(self, vm_name):
4.40 #Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout', try_count = 60)
4.41 @@ -906,13 +910,13 @@
4.42
4.43 import_logger.info('Updating components...')
4.44 tmp_ip = self.getHostOnlyIP(self.vmRootName)
4.45 - tmp_machine_folder = Cygwin.cygPath(VMManager.machineFolder)
4.46 - Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
4.47 - Cygwin.sshExecute('"sudo apt-get -y upgrade"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
4.48 +
4.49 + Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
4.50 + Cygwin.sshExecute('"sudo apt-get -y dist-upgrade"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
4.51
4.52 import_logger.info('Restarting template VM...')
4.53 #check if reboot is required
4.54 - result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
4.55 + result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
4.56 if "Yes" in result[1]:
4.57 self.stopVM(self.vmRootName)
4.58 self.waitShutdown(self.vmRootName)
4.59 @@ -970,9 +974,10 @@
4.60 # create chromium settings dir on local machine if not existing
4.61 Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + appDataDir + '/OpenSecurity/chromium\\\"')
4.62 # create chromium settings dir on remote machine if not existing
4.63 - Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', Cygwin.cygPath(self.getMachineFolder()) + '/' + new_sdvm + '/dvm_key')
4.64 - #restore settings on vm
4.65 - self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
4.66 + Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', self.getCertificatePath(new_sdvm))
4.67 + # restore settings to svm from active user settings dir
4.68 + # self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
4.69 + self.syncRemoteFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
4.70 return self.vms[new_sdvm]
4.71
4.72 def releaseSession(self, vm_name):
4.73 @@ -988,22 +993,31 @@
4.74 vm['used'] = True
4.75 self.sdvmFactory.trigger()
4.76 return vm
4.77 - return self.createSession(browsing)
4.78 -
4.79 + return self.createSession(browsing)
4.80
4.81 def backupFile(self, vm_name, ip_addr, src, dest):
4.82 global backup_lock
4.83 with backup_lock:
4.84 - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
4.85 + certificate = self.getCertificatePath(vm_name)
4.86 command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
4.87 return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
4.88
4.89 def restoreFile(self, vm_name, ip_addr, src, dest):
4.90 - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
4.91 + certificate = self.getCertificatePath(vm_name)
4.92 command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
4.93 return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
4.94 -
4.95
4.96 + def syncRemoteFile(self, vm_name, ip_addr, src, dest):
4.97 + certificate = self.getCertificatePath(vm_name)
4.98 + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
4.99 + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
4.100 +
4.101 + def syncLocalFile(self, vm_name, ip_addr, src, dest):
4.102 + global backup_lock
4.103 + with backup_lock:
4.104 + certificate = self.getCertificatePath(vm_name)
4.105 + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
4.106 + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
4.107
4.108 class SDVMFactory(threading.Thread):
4.109 vmm = None
4.110 @@ -1070,6 +1084,12 @@
4.111 self.net_resource = '\\\\' + self.ip_addr + '\\Download'
4.112 urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'net_resource='+self.net_resource)#.readline()
4.113
4.114 + # synchronize browser settings
4.115 + appDataDir = self.vmm.getAppDataDir()
4.116 + logger.info("Syncing browser settings in AppData dir " + appDataDir)
4.117 + # sync settings on vm
4.118 + self.vmm.syncRemoteFile(self.vm_name, self.ip_addr, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
4.119 +
4.120 if self.wpad:
4.121 browser = '\\\"/usr/bin/chromium --proxy-pac-url=\\\"'+self.wpad+'\\\"\\\"'
4.122 elif self.proxy:
4.123 @@ -1077,9 +1097,10 @@
4.124 else:
4.125 browser = '\\\"/usr/bin/chromium\\\"'
4.126
4.127 - Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key')
4.128 + Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', self.vmm.getCertificatePath(self.vm_name))
4.129 appDataDir = self.vmm.getAppDataDir()
4.130 - self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
4.131 + # self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
4.132 + self.vmm.syncLocalFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
4.133
4.134 except urllib2.URLError:
4.135 logger.error("Network drive connect failed. OpenSecurity Tray client not running.")
4.136 @@ -1101,8 +1122,6 @@
4.137 self.vmm.releaseSession(self.vm_name)
4.138
4.139 self.vmm.sdvmFactory.trigger()
4.140 -
4.141 -
4.142
4.143
4.144 class DeviceHandler(threading.Thread):