1.1 --- a/OpenSecurity/bin/vmmanager.pyw Fri Apr 25 13:23:20 2014 +0200
1.2 +++ b/OpenSecurity/bin/vmmanager.pyw Tue Apr 29 15:40:48 2014 +0100
1.3 @@ -54,7 +54,6 @@
1.4 # return self.coords[item]
1.5
1.6 class VMManager(object):
1.7 -
1.8 vmRootName = "SecurityDVM"
1.9 systemProperties = None
1.10 _instance = None
1.11 @@ -121,7 +120,8 @@
1.12 self.rsdHandler.join()
1.13 drives = self.getNetworkDrives()
1.14 for drive in drives.keys():
1.15 - self.unmapNetworkDrive(drive)
1.16 + driveHandler = UnmapDriveHandler(self, drive)
1.17 + driveHandler.start()
1.18 for vm in self.listSDVM():
1.19 self.poweroffVM(vm)
1.20 self.removeVM(vm)
1.21 @@ -458,19 +458,13 @@
1.22 handler.start()
1.23 return 'ok'
1.24
1.25 - #Small function to check the availability of network resource.
1.26 - #def isAvailable(self, path):
1.27 - #return os.path.exists(path)
1.28 - #result = Cygwin.cmdExecute('IF EXIST "' + path + '" echo YES')
1.29 - #return string.find(result[1], 'YES',)
1.30 -
1.31 - #Small function to check if the mention location is a directory
1.32 + #Small function to check if the mentioned location is a directory
1.33 def isDirectory(self, path):
1.34 result = checkResult(Cygwin.cmdExecute('dir ' + path + ' | FIND ".."'))
1.35 return string.find(result[1], 'DIR',)
1.36
1.37 def mapNetworkDrive(self, drive, networkPath, user, password):
1.38 - self.unmapNetworkDrive(drive)
1.39 + #self.unmapNetworkDrive(drive)
1.40 #Check for drive availability
1.41 if os.path.exists(drive):
1.42 logger.error("Drive letter is already in use: " + drive)
1.43 @@ -483,24 +477,25 @@
1.44 return -1
1.45 logger.info("Path not accessible: " + networkPath + " retrying")
1.46 retry-=1
1.47 - #return -1
1.48
1.49 command = 'USE ' + drive + ' ' + networkPath + ' /PERSISTENT:NO'
1.50 if user != None:
1.51 command += ' ' + password + ' /User' + user
1.52
1.53 - #TODO: Execute 'NET USE' command with authentication
1.54 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', command))
1.55 + result = checkResult(Cygwin.execute('C:\\Windows\\system32\\NET ', command))
1.56 + #result = checkResult(Cygwin.cmdExecute('NET ' + command))
1.57 if string.find(result[1], 'successfully',) == -1:
1.58 logger.error("Failed: NET " + command)
1.59 return -1
1.60 return 1
1.61
1.62 def unmapNetworkDrive(self, drive):
1.63 - drives = self.getNetworkDrives()
1.64 - if drive not in drives.keys():
1.65 - return 1
1.66 - result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', 'USE ' + drive + ' /DELETE /YES'))
1.67 + #drives = self.getNetworkDrives()
1.68 + #if drive not in drives.keys():
1.69 + # return 1
1.70 + command = 'USE ' + drive + ' /DELETE /YES' #' ' + networkPath +
1.71 + result = checkResult(Cygwin.execute('C:\\Windows\\system32\\net.exe', command))
1.72 + #result = checkResult(Cygwin.cmdExecute('NET ' + command))
1.73 if string.find(str(result[1]), 'successfully',) == -1:
1.74 logger.error(result[2])
1.75 return -1
1.76 @@ -531,7 +526,7 @@
1.77 for line in result[1].splitlines():
1.78 if line != None and ip in line:
1.79 parts = line.split()
1.80 - return parts[0]
1.81 + return parts[1]
1.82 @staticmethod
1.83 def getLogicalDrives():
1.84 drive_bitmask = ctypes.cdll.kernel32.GetLogicalDrives()
1.85 @@ -565,12 +560,30 @@
1.86
1.87 def checkResult(result):
1.88 if result[0] != 0:
1.89 - logger.error('Command failed:\n' + result[2])
1.90 + logger.error('Command failed:' + ''.join(result[2]))
1.91 raise OpenSecurityException('Command failed:' + ''.join(result[2]))
1.92 return result
1.93
1.94 -
1.95 -
1.96 +# handles browsing request
1.97 +class UnmapDriveHandler(threading.Thread):
1.98 + vmm = None
1.99 + drive = None
1.100 + running = True
1.101 + #Cygwin.start_X11()
1.102 + def __init__(self, vmmanager, drv):
1.103 + threading.Thread.__init__(self)
1.104 + self.vmm = vmmanager
1.105 + self.drive = drv
1.106 +
1.107 + def run(self):
1.108 + while self.running:
1.109 + self.vmm.unmapNetworkDrive(self.drive)
1.110 + mappedDrives = self.vmm.getNetworkDrives()
1.111 + #logger.info(mappedDrives)
1.112 + #logger.info(self.drive)
1.113 + if self.drive not in mappedDrives.keys():
1.114 + self.running = False
1.115 +
1.116 # handles browsing request
1.117 class BrowsingHandler(threading.Thread):
1.118 vmm = None
1.119 @@ -581,6 +594,7 @@
1.120
1.121 def run(self):
1.122 drive = None
1.123 + networkPath = None
1.124 try:
1.125 new_sdvm = self.vmm.generateSDVMName()
1.126 self.vmm.createVM(new_sdvm)
1.127 @@ -591,7 +605,8 @@
1.128 new_ip = self.vmm.waitStartup(new_sdvm)
1.129 drive = self.vmm.genNetworkDrive()
1.130 if new_ip != None:
1.131 - self.vmm.mapNetworkDrive(drive, '\\\\' + new_ip + '\\Download', None, None)
1.132 + networkPath = '\\\\' + new_ip + '\\Download'
1.133 + self.vmm.mapNetworkDrive(drive, networkPath, None, None)
1.134 #browser = '/usr/bin/iceweasel'
1.135 #browser = '/usr/bin/midori'
1.136 #browser = '/usr/bin/chromium '
1.137 @@ -603,8 +618,13 @@
1.138 result = checkResult(Cygwin.sshExecuteX11(browser, new_ip, 'osecuser', Cygwin.cygPath(self.vmm.getMachineFolder()) + '/' + new_sdvm + '/dvm_key'))
1.139 except:
1.140 logger.error("BrowsingHandler failed. Cleaning up")
1.141 - if drive != None:
1.142 - self.vmm.unmapNetworkDrive(drive)
1.143 +
1.144 + if drive != None: # and networkPath != None:
1.145 + #self.vmm.unmapNetworkDrive(drive) #, networkPath)
1.146 + driveHandler = UnmapDriveHandler(self.vmm, drive)
1.147 + driveHandler.start()
1.148 +
1.149 +
1.150 self.vmm.poweroffVM(new_sdvm)
1.151 self.vmm.removeVM(new_sdvm)
1.152
1.153 @@ -622,6 +642,7 @@
1.154
1.155 def run(self):
1.156 self.connectedRSDs = dict()
1.157 +
1.158 while self.running:
1.159 tmp_rsds = self.vmm.getConnectedRSDS()
1.160
1.161 @@ -629,11 +650,14 @@
1.162 for vm_name in self.attachedRSDs.keys():
1.163 if self.attachedRSDs[vm_name] not in tmp_rsds.values():
1.164 drive = self.vmm.getNetworkDrive(vm_name)
1.165 - self.vmm.unmapNetworkDrive(drive)
1.166 #self.stopVM(vm_name)
1.167 self.vmm.detachRSD(vm_name)
1.168 self.vmm.poweroffVM(vm_name)
1.169 self.vmm.removeVM(vm_name)
1.170 + if drive != None:
1.171 + #self.vmm.unmapNetworkDrive(drive)
1.172 + driveHandler = UnmapDriveHandler(self.vmm, drive)
1.173 + driveHandler.start()
1.174 break
1.175
1.176
1.177 @@ -644,9 +668,7 @@
1.178
1.179 logger.info("Something's changed")
1.180 self.connectedRSDs = tmp_rsds
1.181 -
1.182 -
1.183 -
1.184 +
1.185 #create new vm for attached device if any
1.186 self.attachedRSDs = self.vmm.getAttachedRSDs()
1.187 self.connectedRSDs = self.vmm.getConnectedRSDS()