a c8hT-@sHdZddlmZmZddlZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZd ZdZdZdZdZ dZ!d Z"d Z#d Z$d Z%dZ&d Z'dZ(dZ)dZ*dZ+dZ,d Z-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d Z:ddZ;ddZddZ?ddZ@ddZAddZBdd ZCd!d"ZDdS)#z Get hardware info using HAL )HalTree HalDeviceNP c Cs|g}t}|dd}t|d}|}t}|D]6}|d|}t|d}|} t| } || q6t |j } | S)Norg.freedesktop.Halz/org/freedesktop/Hal/Managerzorg.freedesktop.Hal.Managerorg.freedesktop.Hal.Device) dbus SystemBus get_object InterfaceZ GetAllDevicesrZGetAllPropertiesraddprocess_hal_nodeshead) retbusZhal_manager_objZ hal_managerZ device_listZhal_treeZudiZ device_objdevice propertiesZhaldev kudzu_listr?/usr/lib/python3.9/site-packages/up2date_client/hardware_hal.pyread_hal\s$    rcCs"g}t||_|jr|j}i}|j|d<tt||d<|ddkrd|jvr\|jd|d<d|jvrt|jd|d<d|jvr|jd|d <d |jvr|jd |d <tt||d <t|}|rt||d <tt||d<tt ||d<d|d<| ||j D]}t |}| |q|S)NclassrZscsiz scsi.hostZprop1z scsi.targetZprop2zscsi.busZprop3zscsi.lunZprop4driverrdescZpciTyperZdetached) classify_halclassificationparentstrget_device_busrget_device_driverget_device_pathget_device_descriptionget_device_pcitypeappendZchildrenrextend)noderr%devZ device_pathchildZ child_listrrrrts8          rcCs^d|jvrdSd|jvr\d|jvr\|jddkr\d|jdvrFdSd|jdvr\d Sd |jvr|jd tkrzd S|jd tkr|jd tkrd S|jd tkr|jd tkrdS|jd tkrdS|jd tkrdS|jd t kr|jd t krdS|jd t kr"|jd t kr"dS|jd t krZ|jd tkrFdS|jd tkrZdS|jd tkr~|jd tkr~dS|jd tkr|jd tks|jd tkrdSd|jvr|jddkrdS|jddkrdS|jddkrdS|jddkrdSd |jvr.|jd d!kr.dSd"|jvr>d#Sd$|jvsVd%|jvrZd&SdS)'N net.interfaceNETWORK info.productz info.categoryinputZkeyboardZKEYBOARDZmouseZMOUSEpci.device_classZVIDEOpci.device_subclassZUSBZIDEZSCSIZRAIDZMODEMZSCANNERZCAPTUREZAUDIOZFIREWIREZSOCKETzstorage.drive_typeZcdromZCDROMZdiskZHDZfloppyZFLOPPYZtapeZTAPEzxen.typeZvbdzprinter.productZPRINTERzpci.product_idzusb.product_idZOTHER)rlowerPCI_BASE_CLASS_DISPLAYPCI_BASE_CLASS_SERIALPCI_CLASS_SERIAL_USBPCI_BASE_CLASS_STORAGEPCI_CLASS_STORAGE_IDEPCI_CLASS_STORAGE_SCSIPCI_CLASS_STORAGE_RAIDPCI_BASE_CLASS_COMMUNICATIONPCI_CLASS_COMMUNICATION_MODEMPCI_BASE_CLASS_INPUTPCI_CLASS_INPUT_SCANNERPCI_BASE_CLASS_MULTIMEDIAPCI_CLASS_MULTIMEDIA_VIDEOPCI_CLASS_MULTIMEDIA_AUDIOPCI_CLASS_SERIAL_FIREWIREPCI_BASE_CLASS_BRIDGEPCI_CLASS_BRIDGE_PCMCIAPCI_CLASS_BRIDGE_CARDBUS)r.rrrr#s            r#cCsHd|jvr|jd}n.d|jvr@|jddkr4d}qD|jd}nd}|S)Nz storage.businfo.busplatformZMISCr)r.rrrrr's    r'cCs4d|jvr|jd}nd|jvr,|jd}nd}|S)Nzinfo.linux.driverznet.linux.driverunknownrL)r.r!rrrr(s     r(cCs|d}d|jvr|jd}n4d|jvr0|jd}n|jdkrNd|jvrN|jd}|rx|drh|dd}t|dkrxd}|S) a% Return the device file path. As kudzu did not return a string with the /dev/ prefix, this function will not, either. RHN's DB has a limit of 16 characters for the device path. If the path is longer than that, return None. If no device path is found, return None. Nz block.devicezlinux.device_filer2r1z/dev/r )rr$ startswithlen)r.r/rrrr)s          r)cCsbd|jvr.d|jvr.|jdd|jd}n0d|jvrD|jd}nd|jvrZ|jd}nd}|S)Nz info.vendorr3|rL)r.r"rrrr**s     r*cCsrd}d}d}d|jo |jddkvrj|j}d|jvrd|jddkrd|jdd ks^|jdd krd|}qn|}n|}|S) NrrrJZpcir5r r6r r )rr%)r.ZPCI_TYPE_PCMCIAZ PCI_TYPE_PCIZPCI_TYPE_NOT_PCIr%Zpcityperrrr+7s$     r+cCs$t}|dd}t|d}|S)Nrz%/org/freedesktop/Hal/devices/computerr)rrrr)rZ computer_objZcomputerrrrget_hal_computerKs  rTcCs,ddl}|d\}}|d\}}||fS)Nrz/etc/init.d/haldaemon statusz/etc/init.d/messagebus status) subprocessZgetstatusoutput)ZcommandsZ hal_statusmsgZ dbus_statusrrrcheck_hal_dbus_statusSsrW)E__doc__Zhaltreerrrr;r=r<ZPCI_CLASS_STORAGE_FLOPPYZPCI_CLASS_STORAGE_IPIr>ZPCI_CLASS_STORAGE_OTHERZPCI_BASE_CLASS_NETWORKZPCI_CLASS_NETWORK_ETHERNETZPCI_CLASS_NETWORK_TOKEN_RINGZPCI_CLASS_NETWORK_FDDIZPCI_CLASS_NETWORK_ATMZPCI_CLASS_NETWORK_OTHERr8ZPCI_CLASS_DISPLAY_VGAZPCI_CLASS_DISPLAY_XGAZPCI_CLASS_DISPLAY_3DZPCI_CLASS_DISPLAY_OTHERrCrDrEZPCI_CLASS_MULTIMEDIA_PHONEZPCI_CLASS_MULTIMEDIA_OTHERrGZPCI_CLASS_BRIDGE_HOSTZPCI_CLASS_BRIDGE_ISAZPCI_CLASS_BRIDGE_EISAZPCI_CLASS_BRIDGE_MCZPCI_CLASS_BRIDGE_PCIrHZPCI_CLASS_BRIDGE_NUBUSrIZPCI_CLASS_BRIDGE_RACEWAYZPCI_CLASS_BRIDGE_OTHERr?ZPCI_CLASS_COMMUNICATION_SERIALZ PCI_CLASS_COMMUNICATION_PARALLELZ#PCI_CLASS_COMMUNICATION_MULTISERIALr@ZPCI_CLASS_COMMUNICATION_OTHERrAZPCI_CLASS_INPUT_KEYBOARDZPCI_CLASS_INPUT_PENZPCI_CLASS_INPUT_MOUSErBZPCI_CLASS_INPUT_GAMEPORTZPCI_CLASS_INPUT_OTHERr9rFZPCI_CLASS_SERIAL_ACCESSZPCI_CLASS_SERIAL_SSAr:ZPCI_CLASS_SERIAL_FIBERZPCI_CLASS_SERIAL_SMBUSrrr#r'r(r)r*r+rTrWrrrrs)Z