OpenSecurity/bin/vmmanager.pyw
changeset 151 d0f24f265331
parent 149 cc7091df8c3f
child 159 30947d377e7c
     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()