1.1 --- a/OpenSecurity/bin/vmmanager.pyw Wed May 14 13:04:12 2014 +0100
1.2 +++ b/OpenSecurity/bin/vmmanager.pyw Wed May 14 18:13:39 2014 +0100
1.3 @@ -24,6 +24,8 @@
1.4 import win32api
1.5 import win32con
1.6 import win32security
1.7 +import urllib
1.8 +import urllib2
1.9 DEBUG = True
1.10
1.11 class VMManagerException(Exception):
1.12 @@ -125,15 +127,15 @@
1.13 self.rsdHandler.join()
1.14 drives = self.getNetworkDrives()
1.15 for drive in drives.keys():
1.16 - driveHandler = UnmapDriveHandler(self, drive)
1.17 - driveHandler.start()
1.18 + result = urllib2.urlopen('http://127.0.0.1:8090/netumount?'+'drive_letter='+drive).readline()
1.19 +
1.20 for vm in self.listSDVM():
1.21 self.poweroffVM(vm)
1.22 self.removeVM(vm)
1.23
1.24 # return hosty system properties
1.25 def getSystemProperties(self):
1.26 - result = checkResult(Cygwin.vboxExecute('list systemproperties'))
1.27 + result = Cygwin.checkResult(Cygwin.vboxExecute('list systemproperties'))
1.28 if result[1]=='':
1.29 return None
1.30 props = dict((k.strip(),v.strip().strip('"')) for k,v in (line.split(':', 1) for line in result[1].strip().splitlines()))
1.31 @@ -145,13 +147,13 @@
1.32
1.33 # list all existing VMs registered with VBox
1.34 def listVM(self):
1.35 - result = checkResult(Cygwin.vboxExecute('list vms'))[1]
1.36 + result = Cygwin.checkResult(Cygwin.vboxExecute('list vms'))[1]
1.37 vms = list(k.strip().strip('"') for k,_ in (line.split(' ') for line in result.splitlines()))
1.38 return vms
1.39
1.40 # list running VMs
1.41 def listRunningVMS(self):
1.42 - result = checkResult(Cygwin.vboxExecute('list runningvms'))[1]
1.43 + result = Cygwin.checkResult(Cygwin.vboxExecute('list runningvms'))[1]
1.44 vms = list(k.strip().strip('"') for k,_ in (line.split(' ') for line in result.splitlines()))
1.45 return vms
1.46
1.47 @@ -192,7 +194,7 @@
1.48 # return the RSDs connected to the host
1.49 @staticmethod
1.50 def getConnectedRSDS():
1.51 - results = checkResult(Cygwin.vboxExecute('list usbhost'))[1]
1.52 + results = Cygwin.checkResult(Cygwin.vboxExecute('list usbhost'))[1]
1.53 results = results.split('Host USB Devices:')[1].strip()
1.54
1.55 items = list( "UUID:"+result for result in results.split('UUID:') if result != '')
1.56 @@ -232,10 +234,10 @@
1.57 #Cygwin.vboxExecute(cmd)
1.58 #cmd = 'vboxmanage hostonlyif create'
1.59 #Cygwin.vboxExecute(cmd)
1.60 - checkResult(Cygwin.vboxExecute('hostonlyif ipconfig \"VirtualBox Host-Only Ethernet Adapter\" --ip 192.168.56.1 --netmask 255.255.255.0'))
1.61 + Cygwin.checkResult(Cygwin.vboxExecute('hostonlyif ipconfig \"VirtualBox Host-Only Ethernet Adapter\" --ip 192.168.56.1 --netmask 255.255.255.0'))
1.62 #cmd = 'vboxmanage dhcpserver add'
1.63 #Cygwin.vboxExecute(cmd)
1.64 - checkResult(Cygwin.vboxExecute('dhcpserver modify --ifname \"VirtualBox Host-Only Ethernet Adapter\" --ip 192.168.56.100 --netmask 255.255.255.0 --lowerip 192.168.56.101 --upperip 192.168.56.200'))
1.65 + Cygwin.checkResult(Cygwin.vboxExecute('dhcpserver modify --ifname \"VirtualBox Host-Only Ethernet Adapter\" --ip 192.168.56.100 --netmask 255.255.255.0 --lowerip 192.168.56.101 --upperip 192.168.56.200'))
1.66
1.67 def isSDVMExisting(self, vm_name):
1.68 sdvms = self.listSDVM()
1.69 @@ -247,18 +249,18 @@
1.70 return
1.71 #remove eventually existing SDVM folder
1.72 machineFolder = Cygwin.cygPath(self.machineFolder)
1.73 - checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.74 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.75 hostonly_if = self.getHostOnlyIFs()
1.76 - checkResult(Cygwin.vboxExecute('createvm --name ' + vm_name + ' --ostype Debian --register'))
1.77 - checkResult(Cygwin.vboxExecute('modifyvm ' + vm_name + ' --memory 512 --vram 10 --cpus 1 --usb on --usbehci on --nic1 hostonly --hostonlyadapter1 \"' + hostonly_if['Name'] + '\" --nic2 nat'))
1.78 - checkResult(Cygwin.vboxExecute('storagectl ' + vm_name + ' --name SATA --add sata --portcount 2'))
1.79 + Cygwin.checkResult(Cygwin.vboxExecute('createvm --name ' + vm_name + ' --ostype Debian --register'))
1.80 + Cygwin.checkResult(Cygwin.vboxExecute('modifyvm ' + vm_name + ' --memory 512 --vram 10 --cpus 1 --usb on --usbehci on --nic1 hostonly --hostonlyadapter1 \"' + hostonly_if['Name'] + '\" --nic2 nat'))
1.81 + Cygwin.checkResult(Cygwin.vboxExecute('storagectl ' + vm_name + ' --name SATA --add sata --portcount 2'))
1.82 return
1.83
1.84 # attach storage image to controller
1.85 def storageAttach(self, vm_name):
1.86 if self.isStorageAttached(vm_name):
1.87 self.storageDetach(vm_name)
1.88 - checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 0 --device 0 --type hdd --medium \"'+ self.machineFolder + '\SecurityDVM\SecurityDVM.vmdk\"'))
1.89 + Cygwin.checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 0 --device 0 --type hdd --medium \"'+ self.machineFolder + '\SecurityDVM\SecurityDVM.vmdk\"'))
1.90
1.91 # return true if storage is attached
1.92 def isStorageAttached(self, vm_name):
1.93 @@ -268,10 +270,10 @@
1.94 # detach storage from controller
1.95 def storageDetach(self, vm_name):
1.96 if self.isStorageAttached(vm_name):
1.97 - checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 0 --device 0 --type hdd --medium none'))
1.98 + Cygwin.checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 0 --device 0 --type hdd --medium none'))
1.99
1.100 def changeStorageType(self, filename, storage_type):
1.101 - checkResult(Cygwin.vboxExecute('modifyhd \"' + filename + '\" --type ' + storage_type))
1.102 + Cygwin.checkResult(Cygwin.vboxExecute('modifyhd \"' + filename + '\" --type ' + storage_type))
1.103
1.104 # list storage snaphots for VM
1.105 def updateTemplate(self):
1.106 @@ -285,7 +287,7 @@
1.107 self.attachCertificateISO('SecurityDVM')
1.108
1.109 self.storageDetach('SecurityDVM')
1.110 - results = checkResult(Cygwin.vboxExecute('list hdds'))[1]
1.111 + results = Cygwin.checkResult(Cygwin.vboxExecute('list hdds'))[1]
1.112 results = results.replace('Parent UUID', 'Parent')
1.113 items = list( "UUID:"+result for result in results.split('UUID:') if result != '')
1.114
1.115 @@ -313,15 +315,15 @@
1.116 if hdd['Parent'] == template_uuid:
1.117 #template_uuid = hdd['UUID']
1.118 logger.debug('removing snapshot ' + hdd['UUID'])
1.119 - checkResult(Cygwin.vboxExecute('closemedium disk {' + hdd['UUID'] + '} --delete'))#[1]
1.120 + Cygwin.checkResult(Cygwin.vboxExecute('closemedium disk {' + hdd['UUID'] + '} --delete'))#[1]
1.121 # parse result 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
1.122
1.123 self.changeStorageType(template_storage,'normal')
1.124 self.storageAttach('SecurityDVM')
1.125 self.startVM('SecurityDVM')
1.126 self.waitStartup('SecurityDVM')
1.127 - checkResult(Cygwin.sshExecute('"sudo apt-get -y update"', VMManager.getHostOnlyIP('SecurityDVM'), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + 'SecurityDVM' + '/dvm_key'))
1.128 - checkResult(Cygwin.sshExecute('"sudo apt-get -y upgrade"', VMManager.getHostOnlyIP('SecurityDVM'), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + 'SecurityDVM' + '/dvm_key'))
1.129 + Cygwin.checkResult(Cygwin.sshExecute('"sudo apt-get -y update"', VMManager.getHostOnlyIP('SecurityDVM'), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + 'SecurityDVM' + '/dvm_key'))
1.130 + Cygwin.checkResult(Cygwin.sshExecute('"sudo apt-get -y upgrade"', VMManager.getHostOnlyIP('SecurityDVM'), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + 'SecurityDVM' + '/dvm_key'))
1.131 #self.stopVM('SecurityDVM')
1.132 self.hibernateVM('SecurityDVM')
1.133 self.waitShutdown('SecurityDVM')
1.134 @@ -334,19 +336,19 @@
1.135 #remove VM from the system. should be used on VMs returned by listSDVMs
1.136 def removeVM(self, vm_name):
1.137 logger.info('Removing ' + vm_name)
1.138 - checkResult(Cygwin.vboxExecute('unregistervm ' + vm_name + ' --delete'))
1.139 + Cygwin.checkResult(Cygwin.vboxExecute('unregistervm ' + vm_name + ' --delete'))
1.140 machineFolder = Cygwin.cygPath(self.machineFolder)
1.141 - checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.142 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.143
1.144 # start VM
1.145 def startVM(self, vm_name):
1.146 logger.info('Starting ' + vm_name)
1.147 - result = checkResult(Cygwin.vboxExecute('startvm ' + vm_name + ' --type headless' ))
1.148 + result = Cygwin.checkResult(Cygwin.vboxExecute('startvm ' + vm_name + ' --type headless' ))
1.149 while 'successfully started' not in result[1]:
1.150 logger.error("Failed to start SDVM: " + vm_name + " retrying")
1.151 logger.error("Command returned:\n" + result[2])
1.152 time.sleep(1)
1.153 - result = checkResult(Cygwin.vboxExecute('startvm ' + vm_name + ' --type headless'))
1.154 + result = Cygwin.checkResult(Cygwin.vboxExecute('startvm ' + vm_name + ' --type headless'))
1.155 return result[0]
1.156
1.157 # return wether VM is running or not
1.158 @@ -356,19 +358,19 @@
1.159 # stop VM
1.160 def stopVM(self, vm_name):
1.161 logger.info('Sending shutdown signal to ' + vm_name)
1.162 - checkResult(Cygwin.sshExecute( '"sudo shutdown -h now"', VMManager.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + vm_name + '/dvm_key' ))
1.163 + Cygwin.checkResult(Cygwin.sshExecute( '"sudo shutdown -h now"', VMManager.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + vm_name + '/dvm_key' ))
1.164
1.165 # stop VM
1.166 def hibernateVM(self, vm_name):
1.167 logger.info('Sending hibernate-disk signal to ' + vm_name)
1.168 - checkResult(Cygwin.sshExecute( '"sudo hibernate-disk&"', VMManager.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False))
1.169 + Cygwin.checkResult(Cygwin.sshExecute( '"sudo hibernate-disk&"', VMManager.getHostOnlyIP(vm_name), 'osecuser', Cygwin.cygPath(self.machineFolder) + '/' + vm_name + '/dvm_key', wait_return=False))
1.170
1.171 # poweroff VM
1.172 def poweroffVM(self, vm_name):
1.173 if not self.isVMRunning(vm_name):
1.174 return
1.175 logger.info('Powering off ' + vm_name)
1.176 - return checkResult(Cygwin.vboxExecute('controlvm ' + vm_name + ' poweroff'))
1.177 + return Cygwin.checkResult(Cygwin.vboxExecute('controlvm ' + vm_name + ' poweroff'))
1.178
1.179 #list the hostonly IFs exposed by the VBox host
1.180 @staticmethod
1.181 @@ -387,7 +389,7 @@
1.182 return VMManager.getHostOnlyIFs()['IPAddress']
1.183 else:
1.184 logger.info('Getting hostOnly IP address ' + vm_name)
1.185 - result = checkResult(Cygwin.vboxExecute('guestproperty get ' + vm_name + ' /VirtualBox/GuestInfo/Net/0/V4/IP'))
1.186 + result = Cygwin.checkResult(Cygwin.vboxExecute('guestproperty get ' + vm_name + ' /VirtualBox/GuestInfo/Net/0/V4/IP'))
1.187 if result=='':
1.188 return None
1.189 result = result[1]
1.190 @@ -397,15 +399,15 @@
1.191
1.192 # attach removable storage device to VM by provision of filter
1.193 def attachRSD(self, vm_name, rsd_filter):
1.194 - return checkResult(Cygwin.vboxExecute('usbfilter add 0 --target ' + vm_name + ' --name OpenSecurityRSD --vendorid ' + rsd_filter.vendorid + ' --productid ' + rsd_filter.productid + ' --revision ' + rsd_filter.revision))
1.195 + return Cygwin.checkResult(Cygwin.vboxExecute('usbfilter add 0 --target ' + vm_name + ' --name OpenSecurityRSD --vendorid ' + rsd_filter.vendorid + ' --productid ' + rsd_filter.productid + ' --revision ' + rsd_filter.revision))
1.196
1.197 # detach removable storage from VM by
1.198 def detachRSD(self, vm_name):
1.199 - return checkResult(Cygwin.vboxExecute('usbfilter remove 0 --target ' + vm_name))
1.200 + return Cygwin.checkResult(Cygwin.vboxExecute('usbfilter remove 0 --target ' + vm_name))
1.201
1.202 # return the description set for an existing VM
1.203 def getVMInfo(self, vm_name):
1.204 - results = checkResult(Cygwin.vboxExecute('showvminfo ' + vm_name + ' --machinereadable'))[1]
1.205 + results = Cygwin.checkResult(Cygwin.vboxExecute('showvminfo ' + vm_name + ' --machinereadable'))[1]
1.206 props = dict((k.strip().strip('"'),v.strip().strip('"')) for k,v in (line.split('=', 1) for line in results.splitlines()))
1.207 return props
1.208
1.209 @@ -423,32 +425,32 @@
1.210 def genCertificateISO(self, vm_name):
1.211 machineFolder = Cygwin.cygPath(self.machineFolder)
1.212 # remove .ssh folder if exists
1.213 - checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.214 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.215 # remove .ssh folder if exists
1.216 - checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/dvm_key\\\"'))
1.217 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/rm -rf \\\"' + machineFolder + '/' + vm_name + '/dvm_key\\\"'))
1.218 # create .ssh folder in vm_name
1.219 - checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.220 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.221 # generate dvm_key pair in vm_name / .ssh
1.222 - checkResult(Cygwin.bashExecute('/usr/bin/ssh-keygen -q -t rsa -N \\\"\\\" -C \\\"' + vm_name + '\\\" -f \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key\\\"'))
1.223 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/ssh-keygen -q -t rsa -N \\\"\\\" -C \\\"' + vm_name + '\\\" -f \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key\\\"'))
1.224 # move out private key
1.225 - checkResult(Cygwin.bashExecute('/usr/bin/mv \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key\\\" \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.226 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/mv \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key\\\" \\\"' + machineFolder + '/' + vm_name + '\\\"'))
1.227 # set permissions for private key
1.228 - checkResult(Cygwin.bashExecute('/usr/bin/chmod 500 \\\"' + machineFolder + '/' + vm_name + '/dvm_key\\\"'))
1.229 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/chmod 500 \\\"' + machineFolder + '/' + vm_name + '/dvm_key\\\"'))
1.230 # rename public key to authorized_keys
1.231 - checkResult(Cygwin.bashExecute('/usr/bin/mv \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key.pub\\\" \\\"' + machineFolder + '/' + vm_name + '/.ssh/authorized_keys\\\"'))
1.232 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/mv \\\"' + machineFolder + '/' + vm_name + '/.ssh/dvm_key.pub\\\" \\\"' + machineFolder + '/' + vm_name + '/.ssh/authorized_keys\\\"'))
1.233 # set permissions for authorized_keys
1.234 - checkResult(Cygwin.bashExecute('/usr/bin/chmod 500 \\\"' + machineFolder + '/' + vm_name + '/.ssh/authorized_keys\\\"'))
1.235 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/chmod 500 \\\"' + machineFolder + '/' + vm_name + '/.ssh/authorized_keys\\\"'))
1.236 # generate iso image with .ssh/authorized keys
1.237 - checkResult(Cygwin.bashExecute('/usr/bin/genisoimage -J -R -o \\\"' + machineFolder + '/' + vm_name + '/'+ vm_name + '.iso\\\" \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.238 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/genisoimage -J -R -o \\\"' + machineFolder + '/' + vm_name + '/'+ vm_name + '.iso\\\" \\\"' + machineFolder + '/' + vm_name + '/.ssh\\\"'))
1.239
1.240 # attaches generated ssh public cert to guest vm
1.241 def attachCertificateISO(self, vm_name):
1.242 - result = checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type dvddrive --mtype readonly --medium \"' + self.machineFolder + '\\' + vm_name + '\\'+ vm_name + '.iso\"'))
1.243 + result = Cygwin.checkResult(Cygwin.vboxExecute('storageattach ' + vm_name + ' --storagectl SATA --port 1 --device 0 --type dvddrive --mtype readonly --medium \"' + self.machineFolder + '\\' + vm_name + '\\'+ vm_name + '.iso\"'))
1.244 return result
1.245
1.246 # wait for machine to come up
1.247 def waitStartup(self, vm_name, timeout_ms = 30000):
1.248 - checkResult(Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout'))
1.249 + Cygwin.checkResult(Cygwin.vboxExecute('guestproperty wait ' + vm_name + ' SDVMStarted --timeout ' + str(timeout_ms) + ' --fail-on-timeout'))
1.250 return VMManager.getHostOnlyIP(vm_name)
1.251
1.252 # wait for machine to shutdown
1.253 @@ -459,52 +461,14 @@
1.254
1.255 #Small function to check if the mentioned location is a directory
1.256 def isDirectory(self, path):
1.257 - result = checkResult(Cygwin.cmdExecute('dir ' + path + ' | FIND ".."'))
1.258 + result = Cygwin.checkResult(Cygwin.cmdExecute('dir ' + path + ' | FIND ".."'))
1.259 return string.find(result[1], 'DIR',)
1.260 -
1.261 - def mapNetworkDrive(self, drive, networkPath, user, password):
1.262 - #self.unmapNetworkDrive(drive)
1.263 - #Check for drive availability
1.264 - if os.path.exists(drive):
1.265 - logger.error("Drive letter is already in use: " + drive)
1.266 - return -1
1.267 - #Check for network resource availability
1.268 - retry = 5
1.269 - while not os.path.exists(networkPath):
1.270 - time.sleep(1)
1.271 - if retry == 0:
1.272 - return -1
1.273 - logger.info("Path not accessible: " + networkPath + " retrying")
1.274 - retry-=1
1.275 -
1.276 - command = 'USE ' + drive + ' ' + networkPath + ' /PERSISTENT:NO'
1.277 - if user != None:
1.278 - command += ' ' + password + ' /User' + user
1.279 -
1.280 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\NET', command))
1.281 - #result = checkResult(Cygwin.cmdExecute('NET ' + command))
1.282 - if string.find(result[1], 'successfully',) == -1:
1.283 - logger.error("Failed: NET " + command)
1.284 - return -1
1.285 - return 1
1.286 -
1.287 - def unmapNetworkDrive(self, drive):
1.288 - #drives = self.getNetworkDrives()
1.289 - #if drive not in drives.keys():
1.290 - # return 1
1.291 - command = 'USE ' + drive + ' /DELETE /YES' #' ' + networkPath +
1.292 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', command))
1.293 - #result = checkResult(Cygwin.cmdExecute('NET ' + command))
1.294 - if string.find(str(result[1]), 'successfully',) == -1:
1.295 - logger.error(result[2])
1.296 - return -1
1.297 - return 1
1.298
1.299 def getNetworkDrives(self):
1.300 ip = VMManager.getHostOnlyIP(None)
1.301 ip = ip[:ip.rindex('.')]
1.302 drives = dict()
1.303 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', 'USE'))
1.304 + result = Cygwin.checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', 'USE'))
1.305 for line in result[1].splitlines():
1.306 if ip in line:
1.307 parts = line.split()
1.308 @@ -521,11 +485,12 @@
1.309
1.310 def getNetworkDrive(self, vm_name):
1.311 ip = self.getHostOnlyIP(vm_name)
1.312 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', 'USE'))
1.313 + result = Cygwin.checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', 'USE'))
1.314 for line in result[1].splitlines():
1.315 if line != None and ip in line:
1.316 parts = line.split()
1.317 return parts[1]
1.318 +
1.319 @staticmethod
1.320 def getLogicalDrives():
1.321 drive_bitmask = ctypes.cdll.kernel32.GetLogicalDrives()
1.322 @@ -595,34 +560,7 @@
1.323 #command = '-r -v -o StrictHostKeyChecking=no -i \"' + certificate + '\" \"' + src + '\" \"osecuser@' + self.browsingManager.ip_addr + ':' + dest + '\"'
1.324 command = '-r -o StrictHostKeyChecking=no -i "' + certificate + '" "' + src + '" "osecuser@' + self.browsingManager.ip_addr + ':' + dest + '"'
1.325 return Cygwin.execute(Cygwin.cygwin_scp, command, wait_return=True, window=False)
1.326 -
1.327 -
1.328
1.329 -def checkResult(result):
1.330 - if result[0] != 0:
1.331 - logger.error('Command failed:' + ''.join(result[2]))
1.332 - raise OpenSecurityException('Command failed:' + ''.join(result[2]))
1.333 - return result
1.334 -
1.335 -# handles browsing request
1.336 -class UnmapDriveHandler(threading.Thread):
1.337 - vmm = None
1.338 - drive = None
1.339 - running = True
1.340 - #Cygwin.start_X11()
1.341 - def __init__(self, vmmanager, drv):
1.342 - threading.Thread.__init__(self)
1.343 - self.vmm = vmmanager
1.344 - self.drive = drv
1.345 -
1.346 - def run(self):
1.347 - while self.running:
1.348 - self.vmm.unmapNetworkDrive(self.drive)
1.349 - mappedDrives = self.vmm.getNetworkDrives()
1.350 - #logger.info(mappedDrives)
1.351 - #logger.info(self.drive)
1.352 - if self.drive not in mappedDrives.keys():
1.353 - self.running = False
1.354
1.355 #handles browsing session creation
1.356 class BrowsingHandler(threading.Thread):
1.357 @@ -637,7 +575,7 @@
1.358 Cygwin.start_X11()
1.359 try:
1.360 self.vmm.browsingManager.started.wait()
1.361 - result = checkResult(Cygwin.sshExecuteX11(browser, self.vmm.browsingManager.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vmm.browsingManager.vm_name + '/dvm_key'))
1.362 + result = Cygwin.checkResult(Cygwin.sshExecuteX11(browser, self.vmm.browsingManager.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vmm.browsingManager.vm_name + '/dvm_key'))
1.363 #backup settings on vm
1.364 except:
1.365 logger.error("BrowsingHandler closing. Cleaning up")
1.366 @@ -667,9 +605,7 @@
1.367 self.restart.clear()
1.368 self.started.clear()
1.369 if self.drive != None:
1.370 - #driveHandler = UnmapDriveHandler(self.vmm, self.drive)
1.371 - #driveHandler.start()
1.372 - #driveHandler.join()
1.373 + browsing_vm = urllib2.urlopen('http://127.0.0.1:8090/netumount?'+'drive_letter='+self.drive).readline()
1.374 self.drive = None
1.375
1.376 self.ip_addr = None
1.377 @@ -691,8 +627,10 @@
1.378 self.drive = self.vmm.genNetworkDrive()
1.379 if self.drive == None:
1.380 continue
1.381 - networkPath = '\\\\' + self.ip_addr + '\\Download'
1.382 - #self.vmm.mapNetworkDrive(self.drive, networkPath, None, None)
1.383 +
1.384 + net_resource = '\\\\' + self.ip_addr + '\\Download'
1.385 + result = urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'drive_letter='+self.drive+'&net_resource='+net_resource).readline()
1.386 +
1.387 self.started.set()
1.388
1.389 user = self.vmm.getActiveUserName()
1.390 @@ -700,11 +638,11 @@
1.391 path = self.vmm.getAppDataDir(sid)
1.392 self.appDataDir = Cygwin.cygPath(path)
1.393 # create OpenSecurity settings dir on local machine user home /AppData/Roaming
1.394 - checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + self.appDataDir + '/OpenSecurity\\\"'))
1.395 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + self.appDataDir + '/OpenSecurity\\\"'))
1.396 # create chromium settings dir on local machine if not existing
1.397 - checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + self.appDataDir + '/OpenSecurity/chromium\\\"'))
1.398 + Cygwin.checkResult(Cygwin.bashExecute('/usr/bin/mkdir -p \\\"' + self.appDataDir + '/OpenSecurity/chromium\\\"'))
1.399 # create chromium settings dir on remote machine if not existing
1.400 - checkResult(Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key'))
1.401 + Cygwin.checkResult(Cygwin.sshExecute('"mkdir -p \\\"/home/osecuser/.config\\\""', self.ip_addr, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + self.vm_name + '/dvm_key'))
1.402 #restore settings on vm
1.403 self.vmm.restoreFile(self.appDataDir + '/OpenSecurity/chromium', '/home/osecuser/.config/')
1.404 self.restart.wait()
1.405 @@ -738,9 +676,7 @@
1.406 self.vmm.poweroffVM(vm_name)
1.407 self.vmm.removeVM(vm_name)
1.408 if drive != None:
1.409 - #self.vmm.unmapNetworkDrive(drive)
1.410 - driveHandler = UnmapDriveHandler(self.vmm, drive)
1.411 - driveHandler.start()
1.412 + result = urllib2.urlopen('http://127.0.0.1:8090/netumount?'+'drive_letter='+drive).readline()
1.413 break
1.414
1.415
1.416 @@ -767,7 +703,9 @@
1.417 new_ip = self.vmm.waitStartup(new_sdvm)
1.418 drive = self.vmm.genNetworkDrive()
1.419 if new_ip != None:
1.420 - self.vmm.mapNetworkDrive(drive, '\\\\' + new_ip + '\\USB', None, None)
1.421 + net_resource = '\\\\' + new_ip + '\\USB'
1.422 + result = urllib2.urlopen('http://127.0.0.1:8090/netmount?'+'drive_letter='+drive+'&net_resource='+net_resource).readline()
1.423 +
1.424
1.425 if __name__ == '__main__':
1.426 #man = VMManager.getInstance()