1.1 --- a/OpenSecurity/bin/vmmanager.pyw Wed Oct 29 15:18:22 2014 +0100
1.2 +++ b/OpenSecurity/bin/vmmanager.pyw Tue Jan 13 18:26:41 2015 +0100
1.3 @@ -556,7 +556,7 @@
1.4
1.5 def removeVMFolder(self, vm_name):
1.6 machineFolder = Cygwin.cygPath(VMManager.machineFolder)
1.7 - Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '\\' + vm_name + '\\\"')
1.8 + Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/\"')
1.9
1.10 # start VM
1.11 def startVM(self, vm_name):
1.12 @@ -577,13 +577,13 @@
1.13 # stop VM
1.14 def stopVM(self, vm_name):
1.15 logger.info('Sending shutdown signal to ' + vm_name)
1.16 - Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key' )
1.17 + Cygwin.sshExecute( '"sudo shutdown -h now"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name) )
1.18 Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
1.19
1.20 # stop VM
1.21 def hibernateVM(self, vm_name):
1.22 logger.info('Sending hibernate-disk signal to ' + vm_name)
1.23 - Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False)
1.24 + Cygwin.sshBackgroundExecute( '"sudo hibernate-disk"', self.getHostOnlyIP(vm_name), 'osecuser', self.getCertificatePath(vm_name), wait_return=False)
1.25 Cygwin.vboxExecute('guestproperty set ' + vm_name + ' SDVMStarted False')
1.26
1.27 # poweroff VM
1.28 @@ -653,7 +653,11 @@
1.29 def detachCertificate(self, vm_name):
1.30 if self.isCertificateAttached(vm_name):
1.31 Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type hdd --medium none')
1.32 -
1.33 +
1.34 + # return path for the certificate of a specific vm
1.35 + def getCertificatePath(self, vm_name):
1.36 + return Cygwin.cygPath(VMManager.machineFolder) + '/' + vm_name + '/dvm_key'
1.37 +
1.38 # wait for machine to come up
1.39 def waitStartup(self, vm_name):
1.40 #Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout', try_count = 60)
1.41 @@ -906,13 +910,13 @@
1.42
1.43 import_logger.info('Updating components...')
1.44 tmp_ip = self.getHostOnlyIP(self.vmRootName)
1.45 - tmp_machine_folder = Cygwin.cygPath(VMManager.machineFolder)
1.46 - Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
1.47 - Cygwin.sshExecute('"sudo apt-get -y upgrade"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
1.48 +
1.49 + Cygwin.sshExecute('"sudo apt-get -y update"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
1.50 + Cygwin.sshExecute('"sudo apt-get -y dist-upgrade"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
1.51
1.52 import_logger.info('Restarting template VM...')
1.53 #check if reboot is required
1.54 - result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', tmp_machine_folder + '/' + self.vmRootName + '/dvm_key')
1.55 + result = Cygwin.sshExecute('"if [ -f /var/run/reboot-required ]; then echo \\\"Yes\\\"; fi"', tmp_ip, 'osecuser', self.getCertificatePath(self.vmRootName) )
1.56 if "Yes" in result[1]:
1.57 self.stopVM(self.vmRootName)
1.58 self.waitShutdown(self.vmRootName)
1.59 @@ -970,9 +974,10 @@
1.60 # create chromium settings dir on local machine if not existing
1.61 Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + appDataDir + '/OpenSecurity/chromium\\\"')
1.62 # create chromium settings dir on remote machine if not existing
1.63 - Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', Cygwin.cygPath(self.getMachineFolder()) + '/' + new_sdvm + '/dvm_key')
1.64 - #restore settings on vm
1.65 - self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
1.66 + Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', new_ip, 'osecuser', self.getCertificatePath(new_sdvm))
1.67 + # restore settings to svm from active user settings dir
1.68 + # self.restoreFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
1.69 + self.syncRemoteFile(new_sdvm, new_ip, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
1.70 return self.vms[new_sdvm]
1.71
1.72 def releaseSession(self, vm_name):
1.73 @@ -988,22 +993,31 @@
1.74 vm['used'] = True
1.75 self.sdvmFactory.trigger()
1.76 return vm
1.77 - return self.createSession(browsing)
1.78 -
1.79 + return self.createSession(browsing)
1.80
1.81 def backupFile(self, vm_name, ip_addr, src, dest):
1.82 global backup_lock
1.83 with backup_lock:
1.84 - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
1.85 + certificate = self.getCertificatePath(vm_name)
1.86 command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
1.87 return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
1.88
1.89 def restoreFile(self, vm_name, ip_addr, src, dest):
1.90 - certificate = Cygwin.cygPath(self.getMachineFolder()) + '/' + vm_name + '/dvm_key'
1.91 + certificate = self.getCertificatePath(vm_name)
1.92 command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
1.93 return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
1.94 -
1.95
1.96 + def syncRemoteFile(self, vm_name, ip_addr, src, dest):
1.97 + certificate = self.getCertificatePath(vm_name)
1.98 + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "' + src + '" "osecuser@' + ip_addr + ':' + dest + '"'
1.99 + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
1.100 +
1.101 + def syncLocalFile(self, vm_name, ip_addr, src, dest):
1.102 + global backup_lock
1.103 + with backup_lock:
1.104 + certificate = self.getCertificatePath(vm_name)
1.105 + command = '-av -e "\\"' + Cygwin.cygwin_ssh + '\\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i \\"' + certificate + '\\"" "osecuser@' + ip_addr + ':' + src + '" "' + dest + '"'
1.106 + return Cygwin.execute(Cygwin.cygwin_rsync, command, wait_return=True, window=False)
1.107
1.108 class SDVMFactory(threading.Thread):
1.109 vmm = None
1.110 @@ -1070,6 +1084,12 @@
1.111 self.net_resource = '\\\\' + self.ip_addr + '\\Download'
1.112 urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'net_resource='+self.net_resource)#.readline()
1.113
1.114 + # synchronize browser settings
1.115 + appDataDir = self.vmm.getAppDataDir()
1.116 + logger.info("Syncing browser settings in AppData dir " + appDataDir)
1.117 + # sync settings on vm
1.118 + self.vmm.syncRemoteFile(self.vm_name, self.ip_addr, appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
1.119 +
1.120 if self.wpad:
1.121 browser = '\\\"/usr/bin/chromium --proxy-pac-url=\\\"'+self.wpad+'\\\"\\\"'
1.122 elif self.proxy:
1.123 @@ -1077,9 +1097,10 @@
1.124 else:
1.125 browser = '\\\"/usr/bin/chromium\\\"'
1.126
1.127 - Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key')
1.128 + Cygwin.sshExecuteX11(browser, self.ip_addr, 'osecuser', self.vmm.getCertificatePath(self.vm_name))
1.129 appDataDir = self.vmm.getAppDataDir()
1.130 - self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
1.131 + # self.vmm.backupFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
1.132 + self.vmm.syncLocalFile(self.vm_name, self.ip_addr, '/home/osecuser/.config/chromium', appDataDir + '/OpenSecurity/')
1.133
1.134 except urllib2.URLError:
1.135 logger.error("Network drive connect failed. OpenSecurity Tray client not running.")
1.136 @@ -1101,8 +1122,6 @@
1.137 self.vmm.releaseSession(self.vm_name)
1.138
1.139 self.vmm.sdvmFactory.trigger()
1.140 -
1.141 -
1.142
1.143
1.144 class DeviceHandler(threading.Thread):