OpenSecurity/bin/vmmanager.pyw
changeset 183 a4ea59670b6b
parent 182 6e9b8f105de1
child 193 8d5b7c9ff783
     1.1 --- a/OpenSecurity/bin/vmmanager.pyw	Thu Jun 05 15:51:26 2014 +0100
     1.2 +++ b/OpenSecurity/bin/vmmanager.pyw	Fri Jun 06 10:38:21 2014 +0100
     1.3 @@ -73,14 +73,15 @@
     1.4      rsdHandler = None
     1.5      hostonlyIFs = None
     1.6      browsingManager = None
     1.7 +    blacklistedRSD = None
     1.8      status_message = 'Starting up...'
     1.9  
    1.10   
    1.11      def __init__(self):
    1.12 -
    1.13          self.systemProperties = self.getSystemProperties()
    1.14          self.machineFolder = self.systemProperties["Default machine folder"]
    1.15          self.hostonlyIFs = self.getHostOnlyIFs()
    1.16 +        VMManager.blacklistedRSD = self.loadRSDBlacklist()
    1.17          # only proceed if we have a working background environment
    1.18          if self.backend_ok():
    1.19              self.cleanup()
    1.20 @@ -207,18 +208,34 @@
    1.21                  return self.vmRootName+str(i)
    1.22          return ''
    1.23      
    1.24 +    @staticmethod
    1.25 +    def loadRSDBlacklist():
    1.26 +        blacklist = dict()
    1.27 +        try:
    1.28 +            fo = open(Environment('OpenSecurity').prefix_path +"\\bin\\blacklist.usb", "r")
    1.29 +        except IOError:
    1.30 +            logger.error("Could not open RSD blacklist file.")
    1.31 +            return blacklist
    1.32 +        
    1.33 +        lines = fo.readlines()
    1.34 +        for line in lines:
    1.35 +            if line != "":  
    1.36 +                parts = line.strip().split(' ')
    1.37 +                blacklist[parts[0].lower()] = parts[1].lower()
    1.38 +        return blacklist
    1.39 +         
    1.40 +    @staticmethod
    1.41 +    def isBlacklisted(device):
    1.42 +        if VMManager.blacklistedRSD:
    1.43 +            blacklisted = device.vendorid.lower() in VMManager.blacklistedRSD.keys() and device.productid.lower() == VMManager.blacklistedRSD[device.vendorid]
    1.44 +            return blacklisted
    1.45 +        return False 
    1.46 +    
    1.47      # check if the device is mass storage type
    1.48      @staticmethod
    1.49      def isMassStorageDevice(device):
    1.50 -        #TODO: implement filtering for card readers (this is olivers) 
    1.51 -        #      alternatively implement handling of multiple drives on same USB client
    1.52 -        if device.vendorid == '058f' and  device.productid=='6362':
    1.53 -            return False
    1.54          keyname = 'SYSTEM\CurrentControlSet\Enum\USB' + '\VID_' + device.vendorid+'&'+'PID_'+ device.productid
    1.55          key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, keyname)
    1.56 -        #subkeys = _winreg.QueryInfoKey(key)[0]
    1.57 -        #for i in range(0, subkeys):
    1.58 -        #    print _winreg.EnumKey(key, i)     
    1.59          devinfokeyname = win32api.RegEnumKey(key, 0)
    1.60          win32api.RegCloseKey(key)
    1.61  
    1.62 @@ -250,8 +267,9 @@
    1.63              serial = None
    1.64              if 'SerialNumber' in props.keys():
    1.65                  serial = re.search(r"(?P<ser>[0-9A-Fa-f]+)", props['SerialNumber']).groupdict()['ser']
    1.66 -            usb_filter = USBFilter( uuid, vid, pid, rev, serial) 
    1.67 -            if VMManager.isMassStorageDevice(usb_filter):
    1.68 +            usb_filter = USBFilter( uuid, vid, pid, rev, serial)
    1.69 +             
    1.70 +            if VMManager.isMassStorageDevice(usb_filter) and not VMManager.isBlacklisted(usb_filter):
    1.71                  rsds[uuid] = usb_filter
    1.72                  logger.debug(usb_filter)
    1.73          return rsds