diff --git a/.github/workflows/mkosi.yml b/.github/workflows/mkosi.yml index d6b056660..babdf7ae6 100644 --- a/.github/workflows/mkosi.yml +++ b/.github/workflows/mkosi.yml @@ -51,14 +51,8 @@ jobs: - name: Show ${{ matrix.distro }} image summary run: sudo python3 -m mkosi --password= --qemu-headless summary - # Ugly workaround for systemd/systemd#19442 where systemd-nspawn - # occasionally fails with 'Failed to dissect image xxx: Connection timed out - - name: Retry the build if necessary - if: ${{ matrix.distro == 'arch' }} - run: echo "BUILD_RETRY_MAX=3" >> $GITHUB_ENV - - name: Boot ${{ matrix.distro }} systemd-nspawn - run: sudo -E bash +e -x -c 'for _ in $(seq 1 ${BUILD_RETRY_MAX:-1}); do ./.github/workflows/test_mkosi_boot.py python3 -m mkosi --password= --qemu-headless boot && break; done' + run: sudo ./.github/workflows/test_mkosi_boot.py python3 -m mkosi --password= --qemu-headless boot - name: Boot ${{ matrix.distro }} QEMU run: sudo ./.github/workflows/test_mkosi_boot.py python3 -m mkosi --password= --qemu-headless qemu diff --git a/NEWS b/NEWS index bd879381c..6db192a06 100644 --- a/NEWS +++ b/NEWS @@ -61,8 +61,8 @@ CHANGES WITH 249 in spe: included in the image. For example, a disk image that contains a root, /home/, and /var/ partitions, may set MakeDirectories=yes to create /home/ and /var/ as empty directories in the root file system - on its creation, so that the resulting image can mounted immediately, - even in read-only mode. + on its creation, so that the resulting image can be mounted + immediately, even in read-only mode. * systemd-repart's CopyBlocks= setting gained support for the special value "auto". If used, a suitable matching partition on the booted OS @@ -104,6 +104,24 @@ CHANGES WITH 249 in spe: * A new udev hardware database has been added for FireWire devices (IEEE 1394). + * The "net_id" built-in of udev has been updated with three + backwards-incompatible changes: + + - PCI hotplug slot names on s390 systems are now parsed as + hexadecimal numbers. They were incorrectly parsed as decimal + previously, or ignored if the name was not a valid decimal + number. + + - PCI onboard indices up to 65535 are allowed. Previously, numbers + above 16383 were rejected. This primarily impacts s390 systems, + where values up to 65535 are used. + + - Invalid characters in interface names are replaced with "_". + + The new version of the net naming scheme is "v249". The previous + scheme can be selected via the "net.naming-scheme=v247" kernel + command line parameter. + * sd-bus' sd_bus_is_ready() and sd_bus_is_open() calls now accept a NULL bus object, for which they will return false. Or in other words, an unallocated bus connection is neither ready nor open. @@ -134,7 +152,7 @@ CHANGES WITH 249 in spe: * The native Journal protocol has been documented. Clients may talk this as alternative to the classic BSD syslog protocol for locally delivering log records to the Journal. The protocol has been stable - since a long time and in fact been implemented already in a variety + for a long time and in fact been implemented already in a variety of alternative client libraries. This documentation makes the support for that official: @@ -226,10 +244,10 @@ CHANGES WITH 249 in spe: that matters most, to the point where this is defined. * The Discoverable Partition Specification has been updated with a new - GPT partition flag "growsfs" defined for its partition types. - Whenever partitions with this flag set are automatically mounted - (i.e. via systemd-gpt-auto-generator or the --image= switch of - systemd-nspawn or other tools; and as opposed to explicit mounting + GPT partition flag "grow-file-system" defined for its partition + types. Whenever partitions with this flag set are automatically + mounted (i.e. via systemd-gpt-auto-generator or the --image= switch + of systemd-nspawn or other tools; and as opposed to explicit mounting via /etc/fstab), the file system within the partition is automatically grown to the full size of the partition. If the file system size already matches the partition size this flag has no @@ -256,10 +274,17 @@ CHANGES WITH 249 in spe: sockets created by the service may be bound to. This is implemented via BPF. - * A new ConditionFirmware= condition type has been added to unit files. - It may be used to detect certain firmware features. At the moment it - may check whether running on an UEFI system, a device.tree system, or - if the system is compatible with some specified device-tree feature. + * A new ConditionFirmware= setting has been added to unit files to + conditionalize on certain firmware features. At the moment it may + check whether running on an UEFI system, a device.tree system, or if + the system is compatible with some specified device-tree feature. + + * A new ConditionOSRelease= setting has been added to unit files to + check os-release(5) fields. The "=", "!=", "<", "<=", ">=", ">" + operators may be used to check if some field has some specific value + or do a aphanumerical comparison. Equality comparisons are useful for + fields like ID, but relative comparisons for fields like VERSION_ID + or IMAGE_VERSION. * hostnamed gained a new Describe() D-Bus method that returns a JSON serialization of the host data it exposes. This is exposed via @@ -476,35 +501,41 @@ CHANGES WITH 249 in spe: * systemd-journald-upload gained a new NetworkTimeoutSec= option for setting a network timeout time. + * If a system service is running in a new mount namespace (RootDirectory= + and friends), all file systems will be mounted with MS_NOSUID by + default, unless the system is running with SELinux enabled. + Contributions from: Aakash Singh, adrian5, Alexander Sverdlin, - alexlzhu, Allen Webb, Alvin Šipraga, Alyssa Ross, Anita Zhang, asavah, - Balint Reczey, Bertrand Jacquin, borna-blazevic, caoxia2008cxx, - Carlo Teubner, Christian Göttsche, Christian Hesse, Daniel Schaefer, - Dan Streetman, David Santamaría Rogado, David Tardon, Deepak Rawat, + alexlzhu, Allen Webb, Alvin Šipraga, Alyssa Ross, Anders Wenhaug, + Andrea Pappacoda, Anita Zhang, asavah, Balint Reczey, Bertrand Jacquin, + borna-blazevic, caoxia2008cxx, Carlo Teubner, Christian Göttsche, + Christian Hesse, Daniel Schaefer, Dan Streetman, + David Santamaría Rogado, David Tardon, Deepak Rawat, Dimitri John Ledkov, ei-ke, Emilio Herrera, Emil Renner Berthing, - Flos Lonicerae, Franck Bui, Francois Gervais, Frantisek Sumsal, - Gibeom Gwon, gitm0, Hans de Goede, Harsh Barsaiyan, Henri Chain, - Igor Zhbanov, imayoda, Jakub Warczarek, James Buren, Jan Janssen, - Jan Synacek, Jason Francis, Jayanth Ananthapadmanaban, - Jérôme Carretero, jiangchuangang, Joerg Behrmann, - Jóhann B. Guðmundsson, Jörg Deckert, Jörg Thalheim, Julia Kartseva, + Eric Cook, Flos Lonicerae, Franck Bui, Francois Gervais, + Frantisek Sumsal, Gibeom Gwon, gitm0, Hans de Goede, Harsh Barsaiyan, + Henri Chain, Hristo Venev, Igor Zhbanov, imayoda, Jakub Warczarek, + James Buren, Jan Janssen, Jan Macku, Jan Synacek, Jason Francis, + Jayanth Ananthapadmanaban, Jeremy Szu, Jérôme Carretero, + Jesse Stricker, jiangchuangang, Joerg Behrmann, Jóhann B. Guðmundsson, + Jörg Deckert, Jörg Thalheim, Juergen Hoetzel, Julia Kartseva, Kai-Heng Feng, Khem Raj, KoyamaSohei, Lennart Poettering, LetzteInstanz, Luca Adrian L, Luca Boccassi, Lucas Magasweran, Mantas Mikulėnas, Marco Antonio Mauro, Mark Wielaard, Masahiro Matsuya, Matt Johnston, Michael Catanzaro, Michal Koutný, Michal Sekletár, - Mike Kazantsev, Milan, Miroslav Suchý, Morten Linderud, nerdopolis, - nl6720, Noah Meyerhans, Oleg Popov, Olle Lundberg, Ondrej Kozina, - Perry.Yuan, Peter Hutterer, Peter Kjellerstedt, Peter Morrow, - Phaedrus Leeds, Roman Beranek, Roshan Shariff, Ryan Hendrickson, - Samuel BF, scootergrisen, Sebastian Blunt, Seong-ho Cho, Sergey Bugaev, - Sevan Janiyan, Sibo Dong, simmon, Simon Watts, Srinidhi Kaushik, - Štěpán Němec, Steve Bonds, Susant Sahani, sverdlin, syyhao1994, - Takashi Sakamoto, Topi Miettinen, tramsay, Uwe Kleine-König, - Viktor Mihajlovski, Vincent Dechenaux, Vito Caputo, - William A. Kennington III, Yangyang Shen, Yegor Alexeyev, Yi Gao, - Yu Watanabe, Zbigniew Jędrzejewski-Szmek, zsien, наб + Mike Crowe, Mike Kazantsev, Milan, Miroslav Suchý, Morten Linderud, + nerdopolis, nl6720, Noah Meyerhans, Oleg Popov, Olle Lundberg, + Ondrej Kozina, Perry.Yuan, Peter Hutterer, Peter Kjellerstedt, + Peter Morrow, Phaedrus Leeds, plattrap, Roman Beranek, Roshan Shariff, + Ryan Hendrickson, Samuel BF, scootergrisen, Sebastian Blunt, + Seong-ho Cho, Sergey Bugaev, Sevan Janiyan, Sibo Dong, simmon, + Simon Watts, Srinidhi Kaushik, Štěpán Němec, Steve Bonds, + Susant Sahani, sverdlin, syyhao1994, Takashi Sakamoto, Topi Miettinen, + tramsay, Uwe Kleine-König, Viktor Mihajlovski, Vincent Dechenaux, + Vito Caputo, William A. Kennington III, Yangyang Shen, Yegor Alexeyev, + Yi Gao, Yu Watanabe, Zbigniew Jędrzejewski-Szmek, zsien, наб - — Berlin, 2021-06-15 + — Warsaw, 2021-06-25 CHANGES WITH 248: diff --git a/README b/README index a12ffd6ef..0e5c326de 100644 --- a/README +++ b/README @@ -85,7 +85,7 @@ REQUIREMENTS: Optional but strongly recommended: CONFIG_IPV6 - CONFIG_AUTOFS4_FS + CONFIG_AUTOFS_FS CONFIG_TMPFS_XATTR CONFIG_{TMPFS,EXT4_FS,XFS,BTRFS_FS,...}_POSIX_ACL CONFIG_SECCOMP diff --git a/TODO b/TODO index 5b363ae40..c87f97807 100644 --- a/TODO +++ b/TODO @@ -26,6 +26,11 @@ Janitorial Clean-ups: Features: +* firstboot: allow provisioning of /etc/hosts entries, so that we can via the + credentials logic insert host name to resolve into containers/hosts. Usecase: + fork a container, and make it ping some specific address which is defined by + the host on invocation + * in sd-id128: also parse UUIDs in RFC4122 URN syntax (i.e. chop off urn:uuid: prefix) * ability to insert trusted configuration and secrets into the boot parameters @@ -880,6 +885,10 @@ Features: * fstab-generator: default to tmpfs-as-root if only usr= is specified on the kernel cmdline +* initrd-parse-etc.service: can we skip daemon-reload if /sysroot/etc/fstab is missing? + Note that we start initrd-fs.target and initrd-cleanup.target there, so a straightforward + ConditionPathExists= is not enough. + * docs: bring http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime up to date * add a job mode that will fail if a transaction would mean stopping diff --git a/docs/.gitignore b/docs/.gitignore index ca35be08d..ab2d6770b 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1 +1,2 @@ -_site +/_site/ +/.jekyll-cache/ diff --git a/docs/BOOT_LOADER_SPECIFICATION.md b/docs/BOOT_LOADER_SPECIFICATION.md index e0ac90bb9..b87246ede 100644 --- a/docs/BOOT_LOADER_SPECIFICATION.md +++ b/docs/BOOT_LOADER_SPECIFICATION.md @@ -210,7 +210,7 @@ Note that these configurations snippets do not need to be the only configuration To make this explicitly clear: this specification is designed with "free" operating systems in mind, starting Windows or macOS is out of focus with these configuration snippets, use boot-loader specific solutions for that. In the text above, if we say "OS" we hence imply "free", i.e. primarily Linux (though this could be easily be extended to the BSDs and whatnot). -Note that all paths used in the configuration snippets use a Unix-style "/" as path separator. This needs to be converted to an EFI-style "\" separator in EFI boot loaders. +Note that all paths used in the configuration snippets use a Unix-style "/" as path separator. This needs to be converted to an EFI-style "\\" separator in EFI boot loaders. ## Logic diff --git a/docs/CODING_STYLE.md b/docs/CODING_STYLE.md index 09b74d35d..54150e1ee 100644 --- a/docs/CODING_STYLE.md +++ b/docs/CODING_STYLE.md @@ -69,6 +69,14 @@ layout: default ``` - Do not write `foo ()`, write `foo()`. +- `else` blocks should generally start on the same line as the closing `}`: + ```c + if (foobar) { + find(); + waldo(); + } else + dont_find_waldo(); + ``` ## Code Organization and Semantics diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb index 1e6ab667f..dfaf2f019 100644 --- a/hwdb.d/20-OUI.hwdb +++ b/hwdb.d/20-OUI.hwdb @@ -34812,7 +34812,7 @@ OUI:0080E6* ID_OUI_FROM_DATABASE=PEER NETWORKS, INC. OUI:0080E7* - ID_OUI_FROM_DATABASE=Leonardo Tactical Systems. + ID_OUI_FROM_DATABASE=Leonardo UK Ltd OUI:0080E8* ID_OUI_FROM_DATABASE=CUMULUS CORPORATIION @@ -34919,6 +34919,9 @@ OUI:0088BA* OUI:008A55* ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. +OUI:008A76* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:008A96* ID_OUI_FROM_DATABASE=Cisco Systems, Inc @@ -39374,6 +39377,9 @@ OUI:00E6D3* OUI:00E6E8* ID_OUI_FROM_DATABASE=Netzin Technology Corporation,.Ltd. +OUI:00E7E3* + ID_OUI_FROM_DATABASE=zte corporation + OUI:00E8AB* ID_OUI_FROM_DATABASE=Meggitt Training Systems, Inc. @@ -40349,6 +40355,9 @@ OUI:04D3CF* OUI:04D437* ID_OUI_FROM_DATABASE=ZNV +OUI:04D442* + ID_OUI_FROM_DATABASE=GUANGDONG GENIUS TECHNOLOGY CO., LTD. + OUI:04D4C4* ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. @@ -41186,6 +41195,9 @@ OUI:0840F3* OUI:084296* ID_OUI_FROM_DATABASE=Mobile Technology Solutions LLC +OUI:0845D1* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + OUI:084656* ID_OUI_FROM_DATABASE=VEO-LABS @@ -41408,6 +41420,9 @@ OUI:088DC8* OUI:088E4F* ID_OUI_FROM_DATABASE=SF Software Solutions +OUI:088EDC* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:088F2C* ID_OUI_FROM_DATABASE=Amber Technology Ltd. @@ -41459,6 +41474,9 @@ OUI:089E01* OUI:089E08* ID_OUI_FROM_DATABASE=Google, Inc. +OUI:089E84* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:089F97* ID_OUI_FROM_DATABASE=LEROY AUTOMATION @@ -42251,6 +42269,9 @@ OUI:0C839A* OUI:0C83CC* ID_OUI_FROM_DATABASE=Alpha Networks Inc. +OUI:0C8408* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:0C8411* ID_OUI_FROM_DATABASE=A.O. Smith Water Products @@ -42380,6 +42401,9 @@ OUI:0CA694* OUI:0CA8A7* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:0CAAEE* + ID_OUI_FROM_DATABASE=Ansjer Electronics Co., Ltd. + OUI:0CAC05* ID_OUI_FROM_DATABASE=Unitend Technologies Inc. @@ -42755,6 +42779,9 @@ OUI:0CFE5DE* OUI:100000* ID_OUI_FROM_DATABASE=Private +OUI:100020* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:10005A* ID_OUI_FROM_DATABASE=IBM Corp @@ -42857,6 +42884,9 @@ OUI:100BA9* OUI:100C24* ID_OUI_FROM_DATABASE=pomdevices, LLC +OUI:100C29* + ID_OUI_FROM_DATABASE=Shenzhen NORCO lntelligent Technology Co.,Ltd + OUI:100C6B* ID_OUI_FROM_DATABASE=NETGEAR @@ -42995,6 +43025,9 @@ OUI:103034* OUI:103047* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:10321D* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:10327E* ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. @@ -43265,6 +43298,9 @@ OUI:1081B4* OUI:108286* ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co.,Ltd +OUI:1082D7* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + OUI:1083D2* ID_OUI_FROM_DATABASE=Microseven Systems, LLC @@ -47087,6 +47123,9 @@ OUI:203233* OUI:20326C* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:2032C6* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:2034FB* ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd @@ -47099,6 +47138,9 @@ OUI:2036D7* OUI:203706* ID_OUI_FROM_DATABASE=Cisco Systems, Inc +OUI:2037A5* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:2037BC* ID_OUI_FROM_DATABASE=Kuipers Electronic Engineering BV @@ -47420,6 +47462,9 @@ OUI:208986* OUI:208B37* ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd +OUI:208C47* + ID_OUI_FROM_DATABASE=Tenstorrent Inc + OUI:20906F* ID_OUI_FROM_DATABASE=Shenzhen Tencent Computer System Co., Ltd. @@ -48017,6 +48062,9 @@ OUI:24336C* OUI:2435CC* ID_OUI_FROM_DATABASE=Zhongshan Scinan Internet of Things Co.,Ltd. +OUI:2436DA* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + OUI:24374C* ID_OUI_FROM_DATABASE=Cisco SPVTG @@ -48569,6 +48617,9 @@ OUI:24D51C* OUI:24D76B* ID_OUI_FROM_DATABASE=Syntronic AB +OUI:24D7EB* + ID_OUI_FROM_DATABASE=Espressif Inc. + OUI:24D921* ID_OUI_FROM_DATABASE=Avaya Inc @@ -48911,9 +48962,51 @@ OUI:2834A2* OUI:283545* ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD +OUI:2836130* + ID_OUI_FROM_DATABASE=Shandong SIASUN Industrial Software Research Institute Co., Ltd + +OUI:2836131* + ID_OUI_FROM_DATABASE=Hi-p (Suzhou) Electronics Co,Ltd + OUI:2836132* ID_OUI_FROM_DATABASE=Shenzhen HQVT TECHNOLOGY Co.,LTD +OUI:2836133* + ID_OUI_FROM_DATABASE=Linear Computing Inc. + +OUI:2836134* + ID_OUI_FROM_DATABASE=Elytone Electronic Co., Ltd. + +OUI:2836135* + ID_OUI_FROM_DATABASE=Turing Video + +OUI:2836136* + ID_OUI_FROM_DATABASE=ESI Ventures, LLC + +OUI:2836137* + ID_OUI_FROM_DATABASE=shenzhen technology limited + +OUI:2836138* + ID_OUI_FROM_DATABASE=Fuzhou Lesi Intelligent Technology Co., Ltd + +OUI:2836139* + ID_OUI_FROM_DATABASE=Qingdao Airpoint Electronics Co.,Ltd. + +OUI:283613A* + ID_OUI_FROM_DATABASE=MAKEEN Energy + +OUI:283613B* + ID_OUI_FROM_DATABASE=Qorvo, Inc. + +OUI:283613C* + ID_OUI_FROM_DATABASE=midBit Technologies, LLC + +OUI:283613D* + ID_OUI_FROM_DATABASE=AVYCON + +OUI:283613E* + ID_OUI_FROM_DATABASE=EGMedical, s.r.o. + OUI:2836380* ID_OUI_FROM_DATABASE=Knowles Electronics LLC @@ -49479,7 +49572,7 @@ OUI:28D1B7* ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd OUI:28D244* - ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology Co., Ltd. + ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd OUI:28D3EA* ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. @@ -51239,6 +51332,9 @@ OUI:305D38* OUI:305DA6* ID_OUI_FROM_DATABASE=ADVALY SYSTEM Inc. +OUI:305F77* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + OUI:306023* ID_OUI_FROM_DATABASE=ARRIS Group, Inc. @@ -52007,6 +52103,9 @@ OUI:342FBD* OUI:343111* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:34317F* + ID_OUI_FROM_DATABASE=Panasonic Appliances Company + OUI:34318F* ID_OUI_FROM_DATABASE=Apple, Inc. @@ -53804,6 +53903,9 @@ OUI:38FB14* OUI:38FC98* ID_OUI_FROM_DATABASE=Intel Corporate +OUI:38FDF8* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + OUI:38FDFE0* ID_OUI_FROM_DATABASE=Edge I&D Co., Ltd. @@ -54554,6 +54656,9 @@ OUI:3C9D56* OUI:3C9F81* ID_OUI_FROM_DATABASE=Shenzhen CATIC Bit Communications Technology Co.,Ltd +OUI:3C9FC3* + ID_OUI_FROM_DATABASE=Beijing Sinead Technology Co., Ltd. + OUI:3CA067* ID_OUI_FROM_DATABASE=Liteon Technology Corporation @@ -56852,6 +56957,9 @@ OUI:44EA4B* OUI:44EAD8* ID_OUI_FROM_DATABASE=Texas Instruments +OUI:44EB2E* + ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD + OUI:44ECCE* ID_OUI_FROM_DATABASE=Juniper Networks @@ -57344,6 +57452,9 @@ OUI:487604* OUI:487746* ID_OUI_FROM_DATABASE=Calix Inc. +OUI:4877BD* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + OUI:48785E* ID_OUI_FROM_DATABASE=Amazon Technologies Inc. @@ -58757,6 +58868,9 @@ OUI:4CEB42* OUI:4CEBBD* ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD. +OUI:4CEBD6* + ID_OUI_FROM_DATABASE=Espressif Inc. + OUI:4CECEF* ID_OUI_FROM_DATABASE=Soraa, Inc. @@ -60125,6 +60239,9 @@ OUI:544249* OUI:544408* ID_OUI_FROM_DATABASE=Nokia Corporation +OUI:5444A3* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:544617* ID_OUI_FROM_DATABASE=zte corporation @@ -60794,6 +60911,9 @@ OUI:5809E5* OUI:580A20* ID_OUI_FROM_DATABASE=Cisco Systems, Inc +OUI:580AD4* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:58108C* ID_OUI_FROM_DATABASE=Intelbras @@ -61895,6 +62015,9 @@ OUI:5C5188* OUI:5C521E* ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd +OUI:5C5230* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:5C546D* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD @@ -63893,6 +64016,9 @@ OUI:6459F8* OUI:645A04* ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd. +OUI:645A36* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:645AED* ID_OUI_FROM_DATABASE=Apple, Inc. @@ -64245,7 +64371,7 @@ OUI:64B5C6* ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd OUI:64B623* - ID_OUI_FROM_DATABASE=CCS Care Communication Solutions GmbH + ID_OUI_FROM_DATABASE=Schrack Seconet Care Communication GmbH OUI:64B64A* ID_OUI_FROM_DATABASE=ViVOtech, Inc. @@ -65765,6 +65891,9 @@ OUI:6C710D* OUI:6C71BD* ID_OUI_FROM_DATABASE=EZELINK TELECOM +OUI:6C71D2* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:6C71D9* ID_OUI_FROM_DATABASE=AzureWave Technology Inc. @@ -80912,6 +81041,9 @@ OUI:785C72* OUI:785DC8* ID_OUI_FROM_DATABASE=LG Electronics +OUI:785EE8A* + ID_OUI_FROM_DATABASE=Yake (Tianjin) Technology Co.,Ltd. + OUI:785F36* ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd @@ -81605,6 +81737,9 @@ OUI:78E8B6* OUI:78E980* ID_OUI_FROM_DATABASE=RainUs Co.,Ltd +OUI:78E9CF* + ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO + OUI:78EB14* ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD @@ -81818,6 +81953,9 @@ OUI:7C2302* OUI:7C240C* ID_OUI_FROM_DATABASE=Telechips, Inc. +OUI:7C2499* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:7C2586* ID_OUI_FROM_DATABASE=Juniper Networks @@ -82742,6 +82880,9 @@ OUI:7CF9A0* OUI:7CFADF* ID_OUI_FROM_DATABASE=Apple, Inc. +OUI:7CFC16* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:7CFC3C* ID_OUI_FROM_DATABASE=Visteon Corporation @@ -83873,6 +84014,9 @@ OUI:84267A* OUI:842690* ID_OUI_FROM_DATABASE=BEIJING THOUGHT SCIENCE CO.,LTD. +OUI:8427B6* + ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited + OUI:8427CE* ID_OUI_FROM_DATABASE=Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints @@ -84398,6 +84542,9 @@ OUI:84A788* OUI:84A8E4* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD +OUI:84A938* + ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd + OUI:84A93E* ID_OUI_FROM_DATABASE=Hewlett Packard @@ -85445,6 +85592,9 @@ OUI:88B6EE* OUI:88B8D0* ID_OUI_FROM_DATABASE=Dongguan Koppo Electronic Co.,Ltd +OUI:88B945* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:88BA7F* ID_OUI_FROM_DATABASE=Qfiednet Co., Ltd. @@ -86021,6 +86171,9 @@ OUI:8C1F64372* OUI:8C1F64391* ID_OUI_FROM_DATABASE=CPC (UK) +OUI:8C1F64397* + ID_OUI_FROM_DATABASE=Intel Corporate + OUI:8C1F643A4* ID_OUI_FROM_DATABASE=QLM Technology Ltd @@ -86030,6 +86183,9 @@ OUI:8C1F643B5* OUI:8C1F643C4* ID_OUI_FROM_DATABASE=NavSys Technology Inc. +OUI:8C1F643E0* + ID_OUI_FROM_DATABASE=YPP Corporation + OUI:8C1F643E8* ID_OUI_FROM_DATABASE=Ruichuangte @@ -86060,6 +86216,12 @@ OUI:8C1F644DD* OUI:8C1F644FA* ID_OUI_FROM_DATABASE=Sanskruti +OUI:8C1F6453D* + ID_OUI_FROM_DATABASE=NEXCONTECH + +OUI:8C1F64542* + ID_OUI_FROM_DATABASE=Landis+Gyr Equipamentos de Medição Ltda + OUI:8C1F64549* ID_OUI_FROM_DATABASE=Brad Technology @@ -86072,6 +86234,9 @@ OUI:8C1F64575* OUI:8C1F64611* ID_OUI_FROM_DATABASE=Siemens Industry Software Inc. +OUI:8C1F64712* + ID_OUI_FROM_DATABASE=Nexion Data Systems P/L + OUI:8C1F64726* ID_OUI_FROM_DATABASE=DAVE SRL @@ -86090,6 +86255,9 @@ OUI:8C1F64768* OUI:8C1F6479D* ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. +OUI:8C1F6479E* + ID_OUI_FROM_DATABASE=Accemic Technologies GmbH + OUI:8C1F647A6* ID_OUI_FROM_DATABASE=OTMetric @@ -86129,9 +86297,15 @@ OUI:8C1F64947* OUI:8C1F6495A* ID_OUI_FROM_DATABASE=Shenzhen Longyun Lighting Electric Appliances Co., Ltd +OUI:8C1F64984* + ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd + OUI:8C1F64991* ID_OUI_FROM_DATABASE=DB Systel GmbH +OUI:8C1F64998* + ID_OUI_FROM_DATABASE=EVLO Stockage Énergie + OUI:8C1F649C1* ID_OUI_FROM_DATABASE=RealWear @@ -86162,12 +86336,18 @@ OUI:8C1F64AAB* OUI:8C1F64AB5* ID_OUI_FROM_DATABASE=JUSTMORPH PTE. LTD. +OUI:8C1F64ACE* + ID_OUI_FROM_DATABASE=Rayhaan Networks + OUI:8C1F64AE1* ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd OUI:8C1F64AED* ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme +OUI:8C1F64AF7* + ID_OUI_FROM_DATABASE=ard sa + OUI:8C1F64B03* ID_OUI_FROM_DATABASE=Shenzhen Pisoftware Technology Co.,Ltd. @@ -86213,6 +86393,9 @@ OUI:8C1F64D3C* OUI:8C1F64D4A* ID_OUI_FROM_DATABASE=Caproc Oy +OUI:8C1F64D54* + ID_OUI_FROM_DATABASE=Grupo Epelsa S.L. + OUI:8C1F64D7E* ID_OUI_FROM_DATABASE=Thales Belgium @@ -86222,6 +86405,9 @@ OUI:8C1F64DBD* OUI:8C1F64DC9* ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG +OUI:8C1F64E43* + ID_OUI_FROM_DATABASE=Daedalean AG + OUI:8C1F64E5C* ID_OUI_FROM_DATABASE=Scientific Lightning Solutions @@ -86231,6 +86417,12 @@ OUI:8C1F64EAC* OUI:8C1F64EE8* ID_OUI_FROM_DATABASE=Global Organ Group B.V. +OUI:8C1F64EEF* + ID_OUI_FROM_DATABASE=AiUnion Co.,Ltd + +OUI:8C1F64EF1* + ID_OUI_FROM_DATABASE=BIOTAGE GB LTD + OUI:8C1F64F41* ID_OUI_FROM_DATABASE=AUTOMATIZACION Y CONECTIVIDAD SA DE CV @@ -86627,6 +86819,12 @@ OUI:8C79F5* OUI:8C7A15* ID_OUI_FROM_DATABASE=Ruckus Wireless +OUI:8C7A3D* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +OUI:8C7AAA* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:8C7B9D* ID_OUI_FROM_DATABASE=Apple, Inc. @@ -87170,6 +87368,9 @@ OUI:900628* OUI:900917* ID_OUI_FROM_DATABASE=Far-sighted mobile +OUI:9009D0* + ID_OUI_FROM_DATABASE=Synology Incorporated + OUI:900A1A* ID_OUI_FROM_DATABASE=Taicang T&W Electronics @@ -87533,6 +87734,9 @@ OUI:9068C3* OUI:906976* ID_OUI_FROM_DATABASE=Withrobot Inc. +OUI:906A94* + ID_OUI_FROM_DATABASE=hangzhou huacheng network technology co., ltd + OUI:906CAC* ID_OUI_FROM_DATABASE=Fortinet, Inc. @@ -88445,6 +88649,9 @@ OUI:946372* OUI:9463D1* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:946424* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company + OUI:94652D* ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd @@ -89453,6 +89660,9 @@ OUI:984E97* OUI:984FEE* ID_OUI_FROM_DATABASE=Intel Corporate +OUI:98502E* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:98523D* ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd @@ -89612,6 +89822,9 @@ OUI:987E46* OUI:987ECA* ID_OUI_FROM_DATABASE=Inventus Power Eletronica do Brasil LTDA +OUI:987EE3* + ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. + OUI:9880EE* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -90284,6 +90497,9 @@ OUI:9C3DCF* OUI:9C3EAA* ID_OUI_FROM_DATABASE=EnvyLogic Co.,Ltd. +OUI:9C40CD* + ID_OUI_FROM_DATABASE=Synclayer Inc. + OUI:9C417C* ID_OUI_FROM_DATABASE=Hame Technology Co., Limited @@ -90386,6 +90602,9 @@ OUI:9C53CD* OUI:9C541C* ID_OUI_FROM_DATABASE=Shenzhen My-power Technology Co.,Ltd +OUI:9C54C2* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + OUI:9C54CA* ID_OUI_FROM_DATABASE=Zhengzhou VCOM Science and Technology Co.,Ltd @@ -91763,6 +91982,9 @@ OUI:A09E1A* OUI:A09F10* ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD +OUI:A09F7A* + ID_OUI_FROM_DATABASE=D-Link Middle East FZCO + OUI:A0A0DC* ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. @@ -91997,6 +92219,9 @@ OUI:A0CF5B* OUI:A0CFF5* ID_OUI_FROM_DATABASE=zte corporation +OUI:A0D05B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:A0D0DC* ID_OUI_FROM_DATABASE=Amazon Technologies Inc. @@ -92756,6 +92981,9 @@ OUI:A47758* OUI:A47760* ID_OUI_FROM_DATABASE=Nokia Corporation +OUI:A477F3* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:A47806* ID_OUI_FROM_DATABASE=Cisco Systems, Inc @@ -93572,6 +93800,9 @@ OUI:A8494D* OUI:A849A5* ID_OUI_FROM_DATABASE=Lisantech Co., Ltd. +OUI:A84A28* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:A84A63* ID_OUI_FROM_DATABASE=TPV Display Technology(Xiamen) Co.,Ltd. @@ -95735,6 +95966,9 @@ OUI:B0BDA1* OUI:B0BE76* ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. +OUI:B0BE83* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:B0BF99* ID_OUI_FROM_DATABASE=WIZITDONGDO @@ -96134,6 +96368,9 @@ OUI:B41D2B* OUI:B41DEF* ID_OUI_FROM_DATABASE=Internet Laboratories, Inc. +OUI:B42046* + ID_OUI_FROM_DATABASE=eero inc. + OUI:B4211D* ID_OUI_FROM_DATABASE=Beijing GuangXin Technology Co., Ltd @@ -97103,6 +97340,9 @@ OUI:B83241* OUI:B836D8* ID_OUI_FROM_DATABASE=Videoswitch +OUI:B8374A* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:B83765* ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD @@ -97175,6 +97415,9 @@ OUI:B853AC* OUI:B85510* ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd. +OUI:B85600* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:B856BD* ID_OUI_FROM_DATABASE=ITT LLC @@ -97349,6 +97592,9 @@ OUI:B88A60* OUI:B88AEC* ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd +OUI:B88C29* + ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd. + OUI:B88D12* ID_OUI_FROM_DATABASE=Apple, Inc. @@ -97889,6 +98135,9 @@ OUI:BC1AE4* OUI:BC1C81* ID_OUI_FROM_DATABASE=Sichuan iLink Technology Co., Ltd. +OUI:BC1E85* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:BC20A4* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -98246,6 +98495,9 @@ OUI:BC6A2F* OUI:BC6A44* ID_OUI_FROM_DATABASE=Commend International GmbH +OUI:BC6AD1* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + OUI:BC6B4D* ID_OUI_FROM_DATABASE=Nokia @@ -101909,6 +102161,9 @@ OUI:CC3E5F* OUI:CC3F1D* ID_OUI_FROM_DATABASE=Intesis Software SL +OUI:CC3F8A* + ID_OUI_FROM_DATABASE=KOMATSU LTD. + OUI:CC3FEA* ID_OUI_FROM_DATABASE=BAE Systems, Inc @@ -102338,6 +102593,9 @@ OUI:CCB8F1* OUI:CCBBFE* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD +OUI:CCBCE3* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:CCBD35* ID_OUI_FROM_DATABASE=Steinel GmbH @@ -105062,6 +105320,9 @@ OUI:D87533* OUI:D8760A* ID_OUI_FROM_DATABASE=Escort, Inc. +OUI:D876AE* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:D8778B* ID_OUI_FROM_DATABASE=Intelbras @@ -105344,6 +105605,9 @@ OUI:D8BBC1* OUI:D8BC59* ID_OUI_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd +OUI:D8BE1F* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:D8BE65* ID_OUI_FROM_DATABASE=Amazon Technologies Inc. @@ -106181,6 +106445,9 @@ OUI:DCB4AC* OUI:DCB4C4* ID_OUI_FROM_DATABASE=Microsoft XCG +OUI:DCB54F* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:DCB72E* ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd @@ -106433,6 +106700,9 @@ OUI:DCF110* OUI:DCF401* ID_OUI_FROM_DATABASE=Dell Inc. +OUI:DCF4CA* + ID_OUI_FROM_DATABASE=Apple, Inc. + OUI:DCF505* ID_OUI_FROM_DATABASE=AzureWave Technology Inc. @@ -106853,6 +107123,9 @@ OUI:E0693A* OUI:E06995* ID_OUI_FROM_DATABASE=PEGATRON CORPORATION +OUI:E069BA* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + OUI:E06C4E* ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp. @@ -107885,6 +108158,9 @@ OUI:E492E7* OUI:E492FB* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:E4936A* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + OUI:E4956E0* ID_OUI_FROM_DATABASE=SMC Networks, Inc @@ -108671,6 +108947,9 @@ OUI:E86DCB* OUI:E86DE9* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD +OUI:E86E44* + ID_OUI_FROM_DATABASE=zte corporation + OUI:E86F38* ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD. @@ -109529,6 +109808,9 @@ OUI:EC7949* OUI:EC79F2* ID_OUI_FROM_DATABASE=Startel +OUI:EC7C2C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:EC7C74* ID_OUI_FROM_DATABASE=Justone Technologies Co., Ltd. @@ -111905,6 +112187,9 @@ OUI:F4EC38* OUI:F4ED5F* ID_OUI_FROM_DATABASE=SHENZHEN KTC TECHNOLOGY GROUP +OUI:F4EE08* + ID_OUI_FROM_DATABASE=Dell Inc. + OUI:F4EE14* ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. @@ -111962,6 +112247,9 @@ OUI:F4FD2B* OUI:F4FEFB* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:F800A1* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:F80113* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD @@ -112364,6 +112652,9 @@ OUI:F854B8* OUI:F855CD* ID_OUI_FROM_DATABASE=Visteon Corporation +OUI:F856C3* + ID_OUI_FROM_DATABASE=zte corporation + OUI:F8572E* ID_OUI_FROM_DATABASE=Core Brands, LLC @@ -113153,6 +113444,9 @@ OUI:FC1BFF* OUI:FC1CA1* ID_OUI_FROM_DATABASE=Nokia +OUI:FC1D2A* + ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. + OUI:FC1D43* ID_OUI_FROM_DATABASE=Apple, Inc. @@ -113612,6 +113906,9 @@ OUI:FCA5D0* OUI:FCA621* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd +OUI:FCA64C* + ID_OUI_FROM_DATABASE=Alibaba cloud computing Co., Ltd + OUI:FCA667* ID_OUI_FROM_DATABASE=Amazon Technologies Inc. diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb index 5ce5365c3..aa61e0d62 100644 --- a/hwdb.d/20-acpi-vendor.hwdb +++ b/hwdb.d/20-acpi-vendor.hwdb @@ -3207,6 +3207,9 @@ acpi:HSL*: acpi:HSM*: ID_VENDOR_FROM_DATABASE=AT&T Microelectronics +acpi:HSN*: + ID_VENDOR_FROM_DATABASE=Hansung Co., Ltd + acpi:HSP*: ID_VENDOR_FROM_DATABASE=HannStar Display Corp @@ -4089,6 +4092,9 @@ acpi:LIN*: acpi:LIP*: ID_VENDOR_FROM_DATABASE=Linked IP GmbH +acpi:LIS*: + ID_VENDOR_FROM_DATABASE=Life is Style Inc. + acpi:LIT*: ID_VENDOR_FROM_DATABASE=Lithics Silicon Technology @@ -4797,6 +4803,9 @@ acpi:NAC*: acpi:NAD*: ID_VENDOR_FROM_DATABASE=NAD Electronics +acpi:NAF*: + ID_VENDOR_FROM_DATABASE=NAFASAE INDIA Pvt. Ltd + acpi:NAK*: ID_VENDOR_FROM_DATABASE=Nakano Engineering Co.,Ltd. @@ -5253,6 +5262,9 @@ acpi:PAC*: acpi:PAD*: ID_VENDOR_FROM_DATABASE=Promotion and Display Technology Ltd. +acpi:PAE*: + ID_VENDOR_FROM_DATABASE=PreSonus Audio Electronics + acpi:PAK*: ID_VENDOR_FROM_DATABASE=Many CNC System Co., Ltd. @@ -5409,6 +5421,9 @@ acpi:PIM*: acpi:PIO*: ID_VENDOR_FROM_DATABASE=Pioneer Electronic Corporation +acpi:PIR*: + ID_VENDOR_FROM_DATABASE=Pico Technology Inc. + acpi:PIS*: ID_VENDOR_FROM_DATABASE=TECNART CO.,LTD. @@ -7077,6 +7092,9 @@ acpi:TTL*: acpi:TTP*: ID_VENDOR_FROM_DATABASE=Toshiba Corporation +acpi:TTR*: + ID_VENDOR_FROM_DATABASE=Hubei Century Joint Innovation Technology Co.Ltd + acpi:TTS*: ID_VENDOR_FROM_DATABASE=TechnoTrend Systemtechnik GmbH @@ -7371,6 +7389,9 @@ acpi:VIM*: acpi:VIN*: ID_VENDOR_FROM_DATABASE=Vine Micros Ltd +acpi:VIO*: + ID_VENDOR_FROM_DATABASE=Zake IP Holdings LLC (3B tech) + acpi:VIR*: ID_VENDOR_FROM_DATABASE=Visual Interface, Inc diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch index 81aa39b7b..8f940a802 100644 --- a/hwdb.d/20-acpi-vendor.hwdb.patch +++ b/hwdb.d/20-acpi-vendor.hwdb.patch @@ -1,5 +1,5 @@ ---- 20-acpi-vendor.hwdb.base 2021-06-15 21:57:03.178869619 +0200 -+++ 20-acpi-vendor.hwdb 2021-06-15 21:57:03.185869634 +0200 +--- 20-acpi-vendor.hwdb.base 2021-06-25 14:20:43.637315960 +0200 ++++ 20-acpi-vendor.hwdb 2021-06-25 14:20:43.655316147 +0200 @@ -3,6 +3,8 @@ # Data imported from: # https://uefi.org/uefi-pnp-export @@ -195,7 +195,7 @@ acpi:HSM*: ID_VENDOR_FROM_DATABASE=AT&T Microelectronics -@@ -3286,6 +3327,9 @@ +@@ -3289,6 +3330,9 @@ acpi:ICI*: ID_VENDOR_FROM_DATABASE=Infotek Communication Inc @@ -205,7 +205,7 @@ acpi:ICM*: ID_VENDOR_FROM_DATABASE=Intracom SA -@@ -3382,6 +3426,9 @@ +@@ -3385,6 +3429,9 @@ acpi:IKE*: ID_VENDOR_FROM_DATABASE=Ikegami Tsushinki Co. Ltd. @@ -215,7 +215,7 @@ acpi:IKS*: ID_VENDOR_FROM_DATABASE=Ikos Systems Inc -@@ -3427,6 +3474,9 @@ +@@ -3430,6 +3477,9 @@ acpi:IMT*: ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation @@ -225,7 +225,7 @@ acpi:INA*: ID_VENDOR_FROM_DATABASE=Inventec Corporation -@@ -3940,6 +3990,9 @@ +@@ -3943,6 +3993,9 @@ acpi:LAN*: ID_VENDOR_FROM_DATABASE=Sodeman Lancom Inc @@ -235,7 +235,7 @@ acpi:LAS*: ID_VENDOR_FROM_DATABASE=LASAT Comm. A/S -@@ -3988,6 +4041,9 @@ +@@ -3991,6 +4044,9 @@ acpi:LED*: ID_VENDOR_FROM_DATABASE=Long Engineering Design Inc @@ -245,7 +245,7 @@ acpi:LEG*: ID_VENDOR_FROM_DATABASE=Legerity, Inc -@@ -4003,6 +4059,9 @@ +@@ -4006,6 +4062,9 @@ acpi:LGC*: ID_VENDOR_FROM_DATABASE=Logic Ltd @@ -255,7 +255,7 @@ acpi:LGI*: ID_VENDOR_FROM_DATABASE=Logitech Inc -@@ -4057,6 +4116,9 @@ +@@ -4063,6 +4122,9 @@ acpi:LND*: ID_VENDOR_FROM_DATABASE=Land Computer Company Ltd @@ -265,7 +265,7 @@ acpi:LNK*: ID_VENDOR_FROM_DATABASE=Link Tech Inc -@@ -4091,7 +4153,7 @@ +@@ -4097,7 +4159,7 @@ ID_VENDOR_FROM_DATABASE=Design Technology acpi:LPL*: @@ -274,7 +274,7 @@ acpi:LSC*: ID_VENDOR_FROM_DATABASE=LifeSize Communications -@@ -4267,6 +4329,9 @@ +@@ -4273,6 +4335,9 @@ acpi:MCX*: ID_VENDOR_FROM_DATABASE=Millson Custom Solutions Inc. @@ -284,7 +284,7 @@ acpi:MDA*: ID_VENDOR_FROM_DATABASE=Media4 Inc -@@ -4507,6 +4572,9 @@ +@@ -4513,6 +4578,9 @@ acpi:MOM*: ID_VENDOR_FROM_DATABASE=Momentum Data Systems @@ -294,7 +294,7 @@ acpi:MOS*: ID_VENDOR_FROM_DATABASE=Moses Corporation -@@ -4735,6 +4803,9 @@ +@@ -4744,6 +4812,9 @@ acpi:NAL*: ID_VENDOR_FROM_DATABASE=Network Alchemy @@ -304,7 +304,7 @@ acpi:NAT*: ID_VENDOR_FROM_DATABASE=NaturalPoint Inc. -@@ -5248,6 +5319,9 @@ +@@ -5260,6 +5331,9 @@ acpi:PCX*: ID_VENDOR_FROM_DATABASE=PC Xperten @@ -314,7 +314,7 @@ acpi:PDM*: ID_VENDOR_FROM_DATABASE=Psion Dacom Plc. -@@ -5311,9 +5385,6 @@ +@@ -5323,9 +5397,6 @@ acpi:PHE*: ID_VENDOR_FROM_DATABASE=Philips Medical Systems Boeblingen GmbH @@ -324,7 +324,7 @@ acpi:PHL*: ID_VENDOR_FROM_DATABASE=Philips Consumer Electronics Company -@@ -5401,9 +5472,6 @@ +@@ -5416,9 +5487,6 @@ acpi:PNL*: ID_VENDOR_FROM_DATABASE=Panelview, Inc. @@ -334,7 +334,7 @@ acpi:PNR*: ID_VENDOR_FROM_DATABASE=Planar Systems, Inc. -@@ -5539,15 +5607,9 @@ +@@ -5554,15 +5622,9 @@ acpi:PTS*: ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc @@ -350,7 +350,7 @@ acpi:PVG*: ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd -@@ -5863,9 +5925,6 @@ +@@ -5878,9 +5940,6 @@ acpi:RTI*: ID_VENDOR_FROM_DATABASE=Rancho Tech Inc @@ -360,7 +360,7 @@ acpi:RTL*: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Company Ltd -@@ -6034,9 +6093,6 @@ +@@ -6049,9 +6108,6 @@ acpi:SEE*: ID_VENDOR_FROM_DATABASE=SeeColor Corporation @@ -370,7 +370,7 @@ acpi:SEI*: ID_VENDOR_FROM_DATABASE=Seitz & Associates Inc -@@ -6499,6 +6555,9 @@ +@@ -6514,6 +6570,9 @@ acpi:SVD*: ID_VENDOR_FROM_DATABASE=SVD Computer @@ -380,7 +380,7 @@ acpi:SVI*: ID_VENDOR_FROM_DATABASE=Sun Microsystems -@@ -6583,6 +6642,9 @@ +@@ -6598,6 +6657,9 @@ acpi:SZM*: ID_VENDOR_FROM_DATABASE=Shenzhen MTC Co., Ltd @@ -390,7 +390,7 @@ acpi:TAA*: ID_VENDOR_FROM_DATABASE=Tandberg -@@ -6673,6 +6735,9 @@ +@@ -6688,6 +6750,9 @@ acpi:TDG*: ID_VENDOR_FROM_DATABASE=Six15 Technologies @@ -400,7 +400,7 @@ acpi:TDM*: ID_VENDOR_FROM_DATABASE=Tandem Computer Europe Inc -@@ -6715,6 +6780,9 @@ +@@ -6730,6 +6795,9 @@ acpi:TEV*: ID_VENDOR_FROM_DATABASE=Televés, S.A. @@ -410,7 +410,7 @@ acpi:TEZ*: ID_VENDOR_FROM_DATABASE=Tech Source Inc. -@@ -6838,9 +6906,6 @@ +@@ -6853,9 +6921,6 @@ acpi:TNC*: ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd @@ -420,7 +420,7 @@ acpi:TNM*: ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA -@@ -7147,14 +7212,14 @@ +@@ -7165,14 +7230,14 @@ acpi:UNC*: ID_VENDOR_FROM_DATABASE=Unisys Corporation @@ -441,7 +441,7 @@ acpi:UNI*: ID_VENDOR_FROM_DATABASE=Uniform Industry Corp. -@@ -7189,6 +7254,9 @@ +@@ -7207,6 +7272,9 @@ acpi:USA*: ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG @@ -451,7 +451,7 @@ acpi:USD*: ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation -@@ -7438,9 +7506,6 @@ +@@ -7459,9 +7527,6 @@ acpi:WAL*: ID_VENDOR_FROM_DATABASE=Wave Access @@ -461,7 +461,7 @@ acpi:WAV*: ID_VENDOR_FROM_DATABASE=Wavephore -@@ -7565,7 +7630,7 @@ +@@ -7586,7 +7651,7 @@ ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC acpi:WYS*: @@ -470,7 +470,7 @@ acpi:WYT*: ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd. -@@ -7579,9 +7644,6 @@ +@@ -7600,9 +7665,6 @@ acpi:XDM*: ID_VENDOR_FROM_DATABASE=XDM Ltd. @@ -480,7 +480,7 @@ acpi:XES*: ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc. -@@ -7612,9 +7674,6 @@ +@@ -7633,9 +7695,6 @@ acpi:XNT*: ID_VENDOR_FROM_DATABASE=XN Technologies, Inc. @@ -490,7 +490,7 @@ acpi:XQU*: ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD -@@ -7681,6 +7740,9 @@ +@@ -7702,6 +7761,9 @@ acpi:ZBX*: ID_VENDOR_FROM_DATABASE=Zebax Technologies diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb index eadccbeda..d645a84c6 100644 --- a/hwdb.d/20-pci-vendor-model.hwdb +++ b/hwdb.d/20-pci-vendor-model.hwdb @@ -1943,6 +1943,48 @@ pci:v00001000d00000097sv00001BD4sd00000027* pci:v00001000d00000097sv00001BD4sd00000028* ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IR RACK) +pci:v00001000d000000A5* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx + +pci:v00001000d000000A5sv00001000sd00004600* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9670W-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004610* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9670-24i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004620* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9660-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004630* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9660-8i8e Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004640* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600W-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004650* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600W-16e Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004660* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-24i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004670* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004680* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-16e Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd00004690* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9620-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd000046A0* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9660-24i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd000046B0* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9665W-16i Tri-Mode Storage Adapter) + +pci:v00001000d000000A5sv00001000sd000046C0* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (MegaRAID 9680W-16e Tri-Mode Storage Adapter) + pci:v00001000d000000AB* ID_MODEL_FROM_DATABASE=SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) @@ -2162,6 +2204,12 @@ pci:v00001000d000000E6sv00001D49sd00000205* pci:v00001000d000000E6sv00001D49sd00000206* ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA) +pci:v00001000d000000E6sv00001D49sd00000207* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA) + +pci:v00001000d000000E6sv00001D49sd00000208* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb HBA) + pci:v00001000d000000E7* ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx @@ -2495,6 +2543,9 @@ pci:v00001000d000010E2sv00001D49sd0000060E* pci:v00001000d000010E2sv00001D49sd0000060F* ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter) +pci:v00001000d000010E2sv00001D49sd00000610* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-16i 4GB Flash PCIe Gen4 12Gb Adapter) + pci:v00001000d000010E3* ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Unsupported SAS39xx @@ -2519,6 +2570,12 @@ pci:v00001000d000010E5* pci:v00001000d000010E6* ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx +pci:v00001000d000010E6sv00001D49sd00000505* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter) + +pci:v00001000d000010E6sv00001D49sd00000506* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (ThinkSystem RAID 540-16i PCIe Gen4 12Gb Adapter) + pci:v00001000d000010E7* ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Unsupported SAS38xx @@ -2780,6 +2837,9 @@ pci:v00001002d00001607* pci:v00001002d00001636* ID_MODEL_FROM_DATABASE=Renoir +pci:v00001002d00001637* + ID_MODEL_FROM_DATABASE=Renoir Radeon High Definition Audio Controller + pci:v00001002d00001638* ID_MODEL_FROM_DATABASE=Cezanne @@ -11253,7 +11313,7 @@ pci:v00001002d00009555sv0000103Csd00001411* ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4350/4550] (ProBook 4720s GPU (Mobility Radeon HD 4350)) pci:v00001002d00009557* - ID_MODEL_FROM_DATABASE=RV711 GL [FirePro RG220] + ID_MODEL_FROM_DATABASE=RV711/M93 GL [FirePro RG220] pci:v00001002d0000955F* ID_MODEL_FROM_DATABASE=RV710/M92 [Mobility Radeon HD 4330] @@ -14528,6 +14588,21 @@ pci:v00001022d00001637* pci:v00001022d00001639* ID_MODEL_FROM_DATABASE=Renoir USB 3.1 +pci:v00001022d0000163A* + ID_MODEL_FROM_DATABASE=VanGogh USB0 + +pci:v00001022d0000163B* + ID_MODEL_FROM_DATABASE=VanGogh USB1 + +pci:v00001022d0000163C* + ID_MODEL_FROM_DATABASE=VanGogh SecUSB + +pci:v00001022d0000163D* + ID_MODEL_FROM_DATABASE=VanGogh SecureFunction + +pci:v00001022d0000163E* + ID_MODEL_FROM_DATABASE=VanGogh HSP + pci:v00001022d00001641* ID_MODEL_FROM_DATABASE=Renoir 10GbE Controller Port 0 (XGBE0/1) @@ -35534,6 +35609,18 @@ pci:v000010DEd000017F1* pci:v000010DEd000017FD* ID_MODEL_FROM_DATABASE=GM200GL [Tesla M40] +pci:v000010DEd00001AD0* + ID_MODEL_FROM_DATABASE=Tegra PCIe x8 Endpoint + +pci:v000010DEd00001AD1* + ID_MODEL_FROM_DATABASE=Tegra PCIe x4/x8 Endpoint/Root Complex + +pci:v000010DEd00001AD2* + ID_MODEL_FROM_DATABASE=Tegra PCIe x1 Root Complex + +pci:v000010DEd00001AD3* + ID_MODEL_FROM_DATABASE=Xavier SATA Controller + pci:v000010DEd00001AD6* ID_MODEL_FROM_DATABASE=TU102 USB 3.1 Host Controller @@ -36216,7 +36303,7 @@ pci:v000010DEd00001FB0* ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T1000 Mobile] pci:v000010DEd00001FB1* - ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T600 Mobile] + ID_MODEL_FROM_DATABASE=TU117GL [T600] pci:v000010DEd00001FB2* ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T400 Mobile] @@ -36227,6 +36314,9 @@ pci:v000010DEd00001FB8* pci:v000010DEd00001FB9* ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T1000 Mobile] +pci:v000010DEd00001FBA* + ID_MODEL_FROM_DATABASE=TU117GLM [T600 Mobile] + pci:v000010DEd00001FBB* ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T500 Mobile] @@ -36332,6 +36422,9 @@ pci:v000010DEd00002208* pci:v000010DEd0000220D* ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Lite Hash Rate] +pci:v000010DEd00002216* + ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Lite Hash Rate] + pci:v000010DEd0000222B* ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Engineering Sample] @@ -36359,6 +36452,9 @@ pci:v000010DEd0000223F* pci:v000010DEd0000228B* ID_MODEL_FROM_DATABASE=GA104 High Definition Audio Controller +pci:v000010DEd00002296* + ID_MODEL_FROM_DATABASE=Tegra PCIe Endpoint Virtual Network + pci:v000010DEd00002302* ID_MODEL_FROM_DATABASE=GA103 @@ -36383,6 +36479,12 @@ pci:v000010DEd00002484sv000010DEsd000014AE* pci:v000010DEd00002486* ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti] +pci:v000010DEd00002488* + ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Lite Hash Rate] + +pci:v000010DEd00002489* + ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti Lite Hash Rate] + pci:v000010DEd0000249C* ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] @@ -37628,6 +37730,9 @@ pci:v000010ECd0000816D* pci:v000010ECd0000816Dsv0000EA50sd0000CE19* ID_MODEL_FROM_DATABASE=RTL811x EHCI host controller (mCOM10-L1900) +pci:v000010ECd0000816E* + ID_MODEL_FROM_DATABASE=Realtek RealManage BMC + pci:v000010ECd00008171* ID_MODEL_FROM_DATABASE=RTL8191SEvA Wireless LAN Controller @@ -43832,6 +43937,15 @@ pci:v0000117Cd000000BBsv0000117Csd000000BD* pci:v0000117Cd000000BBsv0000117Csd000000BE* ID_MODEL_FROM_DATABASE=Celerity FC 32/64Gb/s Gen 7 Fibre Channel HBA (Celerity FC-324P) +pci:v0000117Cd000000C5* + ID_MODEL_FROM_DATABASE=ExpressNVM PCIe Gen4 Switch + +pci:v0000117Cd000000C5sv0000117Csd000000C6* + ID_MODEL_FROM_DATABASE=ExpressNVM PCIe Gen4 Switch (ExpressNVM S48F PCIe Gen4) + +pci:v0000117Cd000000C5sv0000117Csd000000C7* + ID_MODEL_FROM_DATABASE=ExpressNVM PCIe Gen4 Switch (ExpressNVM S468 PCIe Gen4) + pci:v0000117Cd000000E6* ID_MODEL_FROM_DATABASE=ExpressSAS GT 12Gb/s SAS/SATA HBA @@ -44702,6 +44816,9 @@ pci:v000011AB* pci:v000011ABd00000100* ID_MODEL_FROM_DATABASE=88F3700 [Armada 3700 Family] ARM SoC +pci:v000011ABd00000110* + ID_MODEL_FROM_DATABASE=88F8040 PCI Express controller + pci:v000011ABd00000146* ID_MODEL_FROM_DATABASE=GT-64010/64010A System Controller @@ -46329,7 +46446,22 @@ pci:v000011F8d00008073* ID_MODEL_FROM_DATABASE=PM8073 Tachyon SPCve 12G 16-port SAS/SATA controller pci:v000011F8d00008531* - ID_MODEL_FROM_DATABASE=PM8531 PFX 24xG3 Fanout PCIe Switches + ID_MODEL_FROM_DATABASE=PM8531 PFX 24xG3 PCIe Fanout Switch + +pci:v000011F8d00008532* + ID_MODEL_FROM_DATABASE=PM8532 PFX 32xG3 PCIe Fanout Switch + +pci:v000011F8d00008533* + ID_MODEL_FROM_DATABASE=PM8533 PFX 48xG3 PCIe Fanout Switch + +pci:v000011F8d00008534* + ID_MODEL_FROM_DATABASE=PM8534 PFX 64xG3 PCIe Fanout Switch + +pci:v000011F8d00008535* + ID_MODEL_FROM_DATABASE=PM8535 PFX 80xG3 PCIe Fanout Switch + +pci:v000011F8d00008536* + ID_MODEL_FROM_DATABASE=PM8536 PFX 96xG3 PCIe Fanout Switch pci:v000011F8d00008546* ID_MODEL_FROM_DATABASE=PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch @@ -46353,7 +46485,7 @@ pci:v000011FD* ID_VENDOR_FROM_DATABASE=High Street Consultants pci:v000011FE* - ID_VENDOR_FROM_DATABASE=Pepperl+Fuchs Comtrol, Inc. + ID_VENDOR_FROM_DATABASE=Pepperl+Fuchs pci:v000011FEd00000001* ID_MODEL_FROM_DATABASE=RocketPort PCI 32-port w/external I/F @@ -47804,6 +47936,9 @@ pci:v00001268* pci:v00001269* ID_VENDOR_FROM_DATABASE=Thomson-CSF/TTM +pci:v00001269d000000B3* + ID_MODEL_FROM_DATABASE=5G Data Card [Cinterion MV31-W] + pci:v0000126A* ID_VENDOR_FROM_DATABASE=Lexmark International, Inc. @@ -55232,6 +55367,9 @@ pci:v00001462* pci:v00001462d00003483* ID_MODEL_FROM_DATABASE=MSI USB 3.0 (VIA VL80x-based xHCI USB Controller) +pci:v00001462d00007C56* + ID_MODEL_FROM_DATABASE=Realtek Ethernet controller RTL8111H + pci:v00001462d0000AAF0* ID_MODEL_FROM_DATABASE=Radeon RX 580 Gaming X 8G @@ -57212,6 +57350,9 @@ pci:v000014E4d000016D7sv000014E4sd00001404* pci:v000014E4d000016D7sv000014E4sd00004140* ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (NetXtreme E-Series Advanced Dual-port 25Gb SFP28 Network Daughter Card) +pci:v000014E4d000016D7sv000014E4sd00004143* + ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (NetXtreme-E Single-port 40Gb/50Gb Ethernet OCP 2.0 Adapter (BCM957414M4143C)) + pci:v000014E4d000016D7sv000014E4sd00004146* ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller (NetXtreme-E Dual-port 25G SFP28 Ethernet OCP 3.0 Adapter (BCM957414N4140C)) @@ -57426,10 +57567,10 @@ pci:v000014E4d00001804* ID_MODEL_FROM_DATABASE=BCM57504 NetXtreme-E RDMA Partition pci:v000014E4d00001805* - ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Partition + ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E RDMA Partition pci:v000014E4d00001805sv000014E4sd0000DF24* - ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Partition (NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz RDMA Partition) + ID_MODEL_FROM_DATABASE=BCM57508 NetXtreme-E RDMA Partition (NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz RDMA Partition) pci:v000014E4d00001806* ID_MODEL_FROM_DATABASE=BCM5750X NetXtreme-E Ethernet Virtual Function @@ -60360,11 +60501,14 @@ pci:v000015B3d00000255* ID_MODEL_FROM_DATABASE=Spectrum-4, Secure Flash recovery mode pci:v000015B3d00000256* - ID_MODEL_FROM_DATABASE=Ofek chiplet + ID_MODEL_FROM_DATABASE=Abir GearBox pci:v000015B3d00000257* ID_MODEL_FROM_DATABASE=Quantum-2 in Flash Recovery Mode +pci:v000015B3d00000258* + ID_MODEL_FROM_DATABASE=AbirGearBox Flash Recovery + pci:v000015B3d00000262* ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN @@ -60377,6 +60521,9 @@ pci:v000015B3d00000264* pci:v000015B3d00000281* ID_MODEL_FROM_DATABASE=NPS-600 Flash Recovery +pci:v000015B3d00000358* + ID_MODEL_FROM_DATABASE=Abir GearBox Secure Flash recovery mode + pci:v000015B3d00001002* ID_MODEL_FROM_DATABASE=MT25400 Family [ConnectX-2 Virtual Function] @@ -65270,6 +65417,9 @@ pci:v000018ECd0000C232sv000018ECsd0000FF00* pci:v000018ECd0000C232sv000018ECsd0000FF01* ID_MODEL_FROM_DATABASE=COMBO-FXT100 (Boot design) +pci:v000018ECd0000C400* + ID_MODEL_FROM_DATABASE=COMBO-400G1 + pci:v000018EE* ID_VENDOR_FROM_DATABASE=Chenming Mold Ind. Corp. @@ -66602,6 +66752,9 @@ pci:v00001987d00005013* pci:v00001987d00005016* ID_MODEL_FROM_DATABASE=E16 PCIe4 NVMe Controller +pci:v00001987d00005018* + ID_MODEL_FROM_DATABASE=E18 PCIe4 NVMe Controller + pci:v00001989* ID_VENDOR_FROM_DATABASE=Montilio Inc. @@ -67847,6 +68000,9 @@ pci:v00001B21d00002142* pci:v00001B21d00002142sv00001462sd00007A72* ID_MODEL_FROM_DATABASE=ASM2142 USB 3.1 Host Controller (H270 PC MATE) +pci:v00001B21d00002824* + ID_MODEL_FROM_DATABASE=ASM2824 PCIe Gen3 Packet Switch + pci:v00001B21d00003242* ID_MODEL_FROM_DATABASE=ASM3242 USB 3.2 Host Controller @@ -68814,7 +68970,7 @@ pci:v00001C5Cd00001285* ID_MODEL_FROM_DATABASE=PC300 NVMe Solid State Drive 1TB pci:v00001C5Cd00001327* - ID_MODEL_FROM_DATABASE=BC501 NVMe Solid State Drive 512GB + ID_MODEL_FROM_DATABASE=BC501 NVMe Solid State Drive pci:v00001C5Cd00001339* ID_MODEL_FROM_DATABASE=BC511 @@ -69749,6 +69905,12 @@ pci:v00001DCD* pci:v00001DD8* ID_VENDOR_FROM_DATABASE=Pensando Systems +pci:v00001DD8d00000002* + ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port + +pci:v00001DD8d00000002sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC2 Elba Upstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DD8d00001000* ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port @@ -69779,6 +69941,9 @@ pci:v00001DD8d00001000sv00001DD8sd0000400D* pci:v00001DD8d00001000sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001000sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + pci:v00001DD8d00001001* ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port @@ -69809,6 +69974,12 @@ pci:v00001DD8d00001001sv00001DD8sd0000400D* pci:v00001DD8d00001001sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001001sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + +pci:v00001DD8d00001001sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DD8d00001002* ID_MODEL_FROM_DATABASE=DSC Ethernet Controller @@ -69839,6 +70010,12 @@ pci:v00001DD8d00001002sv00001DD8sd0000400D* pci:v00001DD8d00001002sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001002sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + +pci:v00001DD8d00001002sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DD8d00001003* ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF @@ -69869,6 +70046,12 @@ pci:v00001DD8d00001003sv00001DD8sd0000400D* pci:v00001DD8d00001003sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001003sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + +pci:v00001DD8d00001003sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DD8d00001004* ID_MODEL_FROM_DATABASE=DSC Management Controller @@ -69899,6 +70082,12 @@ pci:v00001DD8d00001004sv00001DD8sd0000400D* pci:v00001DD8d00001004sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001004sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + +pci:v00001DD8d00001004sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DD8d00001007* ID_MODEL_FROM_DATABASE=DSC Storage Accelerator @@ -69929,6 +70118,12 @@ pci:v00001DD8d00001007sv00001DD8sd0000400D* pci:v00001DD8d00001007sv00001DD8sd0000400E* ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card) +pci:v00001DD8d00001007sv00001DD8sd00004014* + ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card) + +pci:v00001DD8d00001007sv00001DD8sd00005001* + ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card) + pci:v00001DE0* ID_VENDOR_FROM_DATABASE=Groq @@ -70319,6 +70514,15 @@ pci:v00001E3Bd00001098sv00001E3Bsd00000021* pci:v00001E3Bd00001098sv00001E3Bsd00000022* ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 7.68TB (H3200)) +pci:v00001E3Bd00001098sv00001E3Bsd00000052* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3900)) + +pci:v00001E3Bd00001098sv00001E3Bsd00000053* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3900)) + +pci:v00001E3Bd00001098sv00001E3Bsd00000059* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.75TB (H3900)) + pci:v00001E3Bd00001098sv00001E3Bsd00000061* ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H2100)) @@ -70355,12 +70559,24 @@ pci:v00001E3Bd00001098sv00001E3Bsd0000007F* pci:v00001E3Bd00001098sv00001E3Bsd00000080* ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 7.68TB (H3200)) +pci:v00001E3Bd00001098sv00001E3Bsd0000008A* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3900)) + +pci:v00001E3Bd00001098sv00001E3Bsd0000008B* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3900)) + +pci:v00001E3Bd00001098sv00001E3Bsd00000091* + ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.75TB (H3900)) + pci:v00001E3D* ID_VENDOR_FROM_DATABASE=Burlywood, Inc pci:v00001E49* ID_VENDOR_FROM_DATABASE=Yangtze Memory Technologies Co.,Ltd +pci:v00001E49d00001013* + ID_MODEL_FROM_DATABASE=PC210 + pci:v00001E4B* ID_VENDOR_FROM_DATABASE=MAXIO Technology (Hangzhou) Ltd. @@ -70400,6 +70616,12 @@ pci:v00001E57d00000100* pci:v00001E57d00000100sv00000000sd00000100* ID_MODEL_FROM_DATABASE=The device has already been deleted. (PY8800 64GB Accelerator) +pci:v00001E59* + ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies + +pci:v00001E59d00000001* + ID_MODEL_FROM_DATABASE=MinION Mk1C + pci:v00001E60* ID_VENDOR_FROM_DATABASE=Hailo Technologies Ltd. @@ -70442,6 +70664,12 @@ pci:v00001EA0* pci:v00001EA0d00002A16* ID_MODEL_FROM_DATABASE=Cloud Intelligent Inference Controller +pci:v00001EA7* + ID_VENDOR_FROM_DATABASE=Intelliprop, Inc + +pci:v00001EA7d0000223A* + ID_MODEL_FROM_DATABASE=Typhon+ PCIe to Gen-Z Bridge + pci:v00001EAB* ID_VENDOR_FROM_DATABASE=Hefei DATANG Storage Technology Co.,LTD. @@ -70481,6 +70709,9 @@ pci:v00001ED9* pci:v00001EE9* ID_VENDOR_FROM_DATABASE=SUSE LLC +pci:v00001EFB* + ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd + pci:v00001FC0* ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy @@ -77030,6 +77261,9 @@ pci:v00008086d000010FBsv00001BD4sd0000002F* pci:v00008086d000010FBsv00001BD4sd00000032* ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection (10G SFP+ DP EP102Fi4 Adapter) +pci:v00008086d000010FBsv00001BD4sd00000067* + ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection (F102I82599) + pci:v00008086d000010FBsv00008086sd00000002* ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection (Ethernet Server Adapter X520-DA2) @@ -78032,6 +78266,9 @@ pci:v00008086d00001521sv00001BD4sd0000001D* pci:v00008086d00001521sv00001BD4sd00000035* ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (1G base-T QP EP014Ti1 Adapter) +pci:v00008086d00001521sv00001BD4sd00000066* + ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (F014I350) + pci:v00008086d00001521sv00008086sd00000001* ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet Server Adapter I350-T4) @@ -78557,6 +78794,9 @@ pci:v00008086d00001572sv00001BD4sd00000042* pci:v00008086d00001572sv00001BD4sd00000056* ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Network Adapter X710-BM2 for OCP NIC 3.0) +pci:v00008086d00001572sv00001BD4sd00000065* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (F102IX710) + pci:v00008086d00001572sv00008086sd00000000* ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710) @@ -78983,6 +79223,9 @@ pci:v00008086d00001593sv00008086sd00000009* pci:v00008086d00001593sv00008086sd0000000A* ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV Adapter) +pci:v00008086d00001593sv00008086sd0000000C* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4 for OCP 3.0) + pci:v00008086d00001599* ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane @@ -79019,6 +79262,9 @@ pci:v00008086d0000159Bsv00008086sd00004001* pci:v00008086d0000159Bsv00008086sd00004002* ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 3.0) +pci:v00008086d0000159Bsv00008086sd00004003* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2) + pci:v00008086d000015A0* ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM @@ -79499,6 +79745,12 @@ pci:v00008086d000018A0* pci:v00008086d000018A1* ID_MODEL_FROM_DATABASE=C4XXX Series QAT Virtual Function +pci:v00008086d000018EE* + ID_MODEL_FROM_DATABASE=200xx Series QAT + +pci:v00008086d000018EF* + ID_MODEL_FROM_DATABASE=200xx Series QAT Virtual Function + pci:v00008086d00001900* ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers @@ -79907,6 +80159,9 @@ pci:v00008086d000019E0* pci:v00008086d000019E2* ID_MODEL_FROM_DATABASE=Atom Processor C3000 Series QuickAssist Technology +pci:v00008086d000019E3* + ID_MODEL_FROM_DATABASE=Atom Processor C3000 Series QuickAssist Technology Virtual Function + pci:v00008086d00001A1C* ID_MODEL_FROM_DATABASE=Ethernet Connection (17) I219-LM @@ -83649,7 +83904,10 @@ pci:v00008086d000024F0sv00001CB8sd00000004* ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600E QSFP28) pci:v00008086d000024F0sv0000434Esd00000001* - ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI 100 Series, 1 Port, OCP 3.0 Adapter) + ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, OCP 3.0) + +pci:v00008086d000024F0sv0000434Esd00002628* + ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16) pci:v00008086d000024F0sv00008086sd00002628* ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16) @@ -90671,6 +90929,9 @@ pci:v00008086d000037C8sv00008086sd00000001* pci:v00008086d000037C8sv00008086sd00000002* ID_MODEL_FROM_DATABASE=C62x Chipset QuickAssist Technology (QuickAssist Adapter 8970) +pci:v00008086d000037C9* + ID_MODEL_FROM_DATABASE=C62x Chipset QuickAssist Technology Virtual Function + pci:v00008086d000037CC* ID_MODEL_FROM_DATABASE=Ethernet Connection X722 @@ -92417,6 +92678,27 @@ pci:v00008086d000043F0sv00008086sd000002A4* pci:v00008086d0000444E* ID_MODEL_FROM_DATABASE=Turbo Memory Controller +pci:v00008086d0000461E* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 USB Controller + +pci:v00008086d0000461F* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #3 + +pci:v00008086d0000462F* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #2 + +pci:v00008086d0000463E* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #0 + +pci:v00008086d0000463F* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #1 + +pci:v00008086d0000466D* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #1 + +pci:v00008086d0000466E* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #0 + pci:v00008086d0000467F* ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller @@ -95768,6 +96050,9 @@ pci:v00008086d0000A0C8* pci:v00008086d0000A0E0* ID_MODEL_FROM_DATABASE=Tiger Lake-LP Management Engine Interface +pci:v00008086d0000A0E3* + ID_MODEL_FROM_DATABASE=Tiger Lake-LP Active Management Technology - SOL + pci:v00008086d0000A0E8* ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #0 diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb index dd9adec96..9246c7e7a 100644 --- a/hwdb.d/20-usb-vendor-model.hwdb +++ b/hwdb.d/20-usb-vendor-model.hwdb @@ -54471,10 +54471,10 @@ usb:v15C2pFFDC* ID_MODEL_FROM_DATABASE=iMON PAD Remote Controller usb:v15C5* - ID_VENDOR_FROM_DATABASE=Advance Multimedia Internet Technology Inc. (AMIT) + ID_VENDOR_FROM_DATABASE=Pressure Profile Systems, Inc. usb:v15C5p0008* - ID_MODEL_FROM_DATABASE=WL532U 802.11g Adapter + ID_MODEL_FROM_DATABASE=Advance Multimedia Internet Technology Inc. (AMIT) WL532U 802.11g Adapter usb:v15C6* ID_VENDOR_FROM_DATABASE=Laboratoires MXM diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb index a35e89d3a..7566798e2 100644 --- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb +++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb @@ -135,11 +135,16 @@ usb:v1C7Ap0603* # Supported by libfprint driver goodixmoc usb:v27C6p5840* -usb:v27C6p6496* +usb:v27C6p609C* usb:v27C6p60A2* -usb:v27C6p63AC* usb:v27C6p639C* +usb:v27C6p63AC* +usb:v27C6p6496* +usb:v27C6p6584* +usb:v27C6p658C* +usb:v27C6p6592* usb:v27C6p6594* +usb:v27C6p659C* usb:v27C6p6A94* ID_AUTOSUSPEND=1 @@ -149,7 +154,6 @@ usb:v298Dp1010* # Supported by libfprint driver synaptics usb:v06CBp00BD* -usb:v06CBp00E9* usb:v06CBp00DF* usb:v06CBp00F9* usb:v06CBp00FC* @@ -234,6 +238,7 @@ usb:v06CBp00C4* usb:v06CBp00CB* usb:v06CBp00D8* usb:v06CBp00DA* +usb:v06CBp00E9* usb:v0A5Cp5801* usb:v0A5Cp5805* usb:v0A5Cp5834* diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb index 82a92cf54..78afa0c05 100644 --- a/hwdb.d/60-evdev.hwdb +++ b/hwdb.d/60-evdev.hwdb @@ -560,6 +560,13 @@ evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoYoga500-14IBD:* EVDEV_ABS_35=117:3952:36 EVDEV_ABS_36=105:1960:26 +# Lenovo U41-70 (80JV) +evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoU41-70:* + EVDEV_ABS_00=117:3958:36 + EVDEV_ABS_01=104:1960:26 + EVDEV_ABS_35=117:3958:36 + EVDEV_ABS_36=104:1960:26 + # Lenovo Thinkpad T490 and T14 Gen1 evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadT490:* evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadT14Gen1:* diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb index 5ab62bf15..9a787b52f 100644 --- a/hwdb.d/60-keyboard.hwdb +++ b/hwdb.d/60-keyboard.hwdb @@ -623,6 +623,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPLicrice:* # HP EliteBook evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBook*:* evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook*:* +# HP Elite Dragonfly +evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonfly*:* # HP ProBook 440 G2 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP440G2:* # HP ProBook diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt index 13eb7216a..d7a820695 100644 --- a/hwdb.d/ma-large.txt +++ b/hwdb.d/ma-large.txt @@ -33698,12 +33698,6 @@ B4C26A (base 16) Garmin International Olathe KS 66062 US -64-B6-23 (hex) CCS Care Communication Solutions GmbH -64B623 (base 16) CCS Care Communication Solutions GmbH - Computerstrasse 6 - Vienna 1100 - AT - E8-9F-80 (hex) Belkin International Inc. E89F80 (base 16) Belkin International Inc. 12045 East Waterfront Drive @@ -35555,18 +35549,6 @@ F8BAE6 (base 16) Nokia Shenzhen Nanshan District 518000 CN -2C-48-81 (hex) vivo Mobile Communication Co., Ltd. -2C4881 (base 16) vivo Mobile Communication Co., Ltd. - #283,BBK Road - Wusha,Chang'An DongGuan City,Guangdong, 523860 - CN - -30-A1-76 (hex) Fiberhome Telecommunication Technologies Co.,LTD -30A176 (base 16) Fiberhome Telecommunication Technologies Co.,LTD - No.5 DongXin Road - Wuhan Hubei 430074 - CN - E4-0C-FD (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD E40CFD (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD NO.18 HAIBIN ROAD, @@ -35597,10 +35579,10 @@ AC74B1 (base 16) Intel Corporate Kulim Kedah 09000 MY -1C-3C-D4 (hex) HUAWEI TECHNOLOGIES CO.,LTD -1C3CD4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 +30-A1-76 (hex) Fiberhome Telecommunication Technologies Co.,LTD +30A176 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road + Wuhan Hubei 430074 CN F4-E4-51 (hex) HUAWEI TECHNOLOGIES CO.,LTD @@ -35609,11 +35591,11 @@ F4E451 (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN -60-26-EF (hex) Aruba, a Hewlett Packard Enterprise Company -6026EF (base 16) Aruba, a Hewlett Packard Enterprise Company - 3333 Scott Blvd - Santa Clara CA 95054 - US +1C-3C-D4 (hex) HUAWEI TECHNOLOGIES CO.,LTD +1C3CD4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN F4-60-77 (hex) Texas Instruments F46077 (base 16) Texas Instruments @@ -35639,10 +35621,16 @@ A4D73C (base 16) Seiko Epson Corporation Matsumoto-shi Nagano-ken 399-8702 JP -6C-10-8B (hex) WeLink Communications -6C108B (base 16) WeLink Communications - 4186 N Red Maple Court - Lehi UT 84043 +2C-48-81 (hex) vivo Mobile Communication Co., Ltd. +2C4881 (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road + Wusha,Chang'An DongGuan City,Guangdong, 523860 + CN + +60-26-EF (hex) Aruba, a Hewlett Packard Enterprise Company +6026EF (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 US F8-8E-A1 (hex) Edgecore Networks Corporation @@ -35657,11 +35645,11 @@ F88EA1 (base 16) Edgecore Networks Corporation Kanata Ontario K2K 2E6 CA -F4-63-E7 (hex) Nanjing Maxon O.E. Tech. Co., LTD -F463E7 (base 16) Nanjing Maxon O.E. Tech. Co., LTD - 6/F, Building A3, Zidong International Creative Park, Zidong Road, Qixia District, Nanjing - NAN JING JIANG SU 210000 - CN +64-D0-2D (hex) NEXT GENERATION INTEGRATION LIMITED (NGI) +64D02D (base 16) NEXT GENERATION INTEGRATION LIMITED (NGI) + Unit 1102, 11 / F, 29 Austin Road, TSIM SHA TSUI + KOWLOON Hong Kong 999077 + HK 24-28-FD (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. 2428FD (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. @@ -35675,12 +35663,6 @@ F463E7 (base 16) Nanjing Maxon O.E. Tech. Co., LTD Taipei City 11493 TW -64-D0-2D (hex) NEXT GENERATION INTEGRATION LIMITED (NGI) -64D02D (base 16) NEXT GENERATION INTEGRATION LIMITED (NGI) - Unit 1102, 11 / F, 29 Austin Road, TSIM SHA TSUI - KOWLOON Hong Kong 999077 - HK - A0-E7-0B (hex) Intel Corporate A0E70B (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 @@ -35693,17 +35675,23 @@ B0D888 (base 16) Panasonic Corporation Automotive Matsumoto City Nagano 399-8730 JP +F4-63-E7 (hex) Nanjing Maxon O.E. Tech. Co., LTD +F463E7 (base 16) Nanjing Maxon O.E. Tech. Co., LTD + 6/F, Building A3, Zidong International Creative Park, Zidong Road, Qixia District, Nanjing + NAN JING JIANG SU 210000 + CN + 04-EE-EE (hex) Laplace System Co., Ltd. 04EEEE (base 16) Laplace System Co., Ltd. 1-245 Kyo-machi Fushimi, Kyoto Kyoto 6128083 JP -68-96-6A (hex) OHSUNG -68966A (base 16) OHSUNG - 335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA - GUMI GYEONG BUK 730-030 - KR +6C-10-8B (hex) WeLink Communications +6C108B (base 16) WeLink Communications + 4186 N Red Maple Court + Lehi UT 84043 + US 90-2E-16 (hex) LCFC(HeFei) Electronics Technology co., ltd 902E16 (base 16) LCFC(HeFei) Electronics Technology co., ltd @@ -35711,12 +35699,30 @@ B0D888 (base 16) Panasonic Corporation Automotive Hefei Anhui 230000 CN +68-96-6A (hex) OHSUNG +68966A (base 16) OHSUNG + 335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA + GUMI GYEONG BUK 730-030 + KR + +38-45-3B (hex) Ruckus Wireless +38453B (base 16) Ruckus Wireless + 350 West Java Drive + Sunnyvale CA 94089 + US + 78-06-C9 (hex) Huawei Device Co., Ltd. 7806C9 (base 16) Huawei Device Co., Ltd. No.2 of Xincheng Road, Songshan Lake Zone Dongguan Guangdong 523808 CN +34-FE-9E (hex) Fujitsu Limited +34FE9E (base 16) Fujitsu Limited + 4-1-1 Kamikodanaka, Nakahara-ku + Kawasaki-shi Kanagawa 211-8588 + JP + E8-A6-CA (hex) Huawei Device Co., Ltd. E8A6CA (base 16) Huawei Device Co., Ltd. No.2 of Xincheng Road, Songshan Lake Zone @@ -35729,18 +35735,18 @@ CCFA66 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN +34-24-3E (hex) zte corporation +34243E (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + 1C-7D-22 (hex) FUJIFILM Business Innovation Corp. 1C7D22 (base 16) FUJIFILM Business Innovation Corp. 6-1 Minatomirai, Nishi-ku Yokohama Kanagawa 220-8668 JP -34-FE-9E (hex) Fujitsu Limited -34FE9E (base 16) Fujitsu Limited - 4-1-1 Kamikodanaka, Nakahara-ku - Kawasaki-shi Kanagawa 211-8588 - JP - 0C-71-8C (hex) TCT mobile ltd 0C718C (base 16) TCT mobile ltd No.86 hechang 7th road, zhongkai, Hi-Tech District @@ -35753,50 +35759,8 @@ E030F9 (base 16) Juniper Networks Sunnyvale CA 94089 US -24-08-5D (hex) Continental Aftermarket & Services GmbH -24085D (base 16) Continental Aftermarket & Services GmbH - Sodener Strasse 9 - Schwalbach am Taunus Hessen 65824 - DE - -34-24-3E (hex) zte corporation -34243E (base 16) zte corporation - 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China - shenzhen guangdong 518057 - CN - -38-45-3B (hex) Ruckus Wireless -38453B (base 16) Ruckus Wireless - 350 West Java Drive - Sunnyvale CA 94089 - US - -78-13-05 (hex) IEEE Registration Authority -781305 (base 16) IEEE Registration Authority - 445 Hoes Lane - Piscataway NJ 08554 - US - -20-54-76 (hex) Sony Corporation -205476 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -30-17-C8 (hex) Sony Corporation -3017C8 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -6C-23-B9 (hex) Sony Corporation -6C23B9 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -6C-0E-0D (hex) Sony Corporation -6C0E0D (base 16) Sony Corporation +00-1F-E4 (hex) Sony Corporation +001FE4 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP @@ -35819,17 +35783,17 @@ E030F9 (base 16) Juniper Networks Tokyo 108-0075 JP -D4-38-9C (hex) Sony Corporation -D4389C (base 16) Sony Corporation - 1-7-1 Konan Minato-ku - Tokyo 108-0075 +6C-23-B9 (hex) Sony Corporation +6C23B9 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 JP -68-1B-EF (hex) HUAWEI TECHNOLOGIES CO.,LTD -681BEF (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN +6C-0E-0D (hex) Sony Corporation +6C0E0D (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP 00-23-45 (hex) Sony Corporation 002345 (base 16) Sony Corporation @@ -35837,8 +35801,20 @@ D4389C (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -00-1F-E4 (hex) Sony Corporation -001FE4 (base 16) Sony Corporation +24-08-5D (hex) Continental Aftermarket & Services GmbH +24085D (base 16) Continental Aftermarket & Services GmbH + Sodener Strasse 9 + Schwalbach am Taunus Hessen 65824 + DE + +20-54-76 (hex) Sony Corporation +205476 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP + +30-17-C8 (hex) Sony Corporation +3017C8 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP @@ -35867,6 +35843,66 @@ F44637 (base 16) Intel Corporate Rueil Malmaison Cedex hauts de seine 92848 FR +FC-58-DF (hex) Interphone Service +FC58DF (base 16) Interphone Service + Inwestorow, 8 + Mielec Select a state or province 39-300 + PL + +98-10-82 (hex) Nsolution Co., Ltd. +981082 (base 16) Nsolution Co., Ltd. + 1001-1, 387, Simin-daero, Dongan-gu + Anyang-si Gyeonggi-do 14057 + KR + +9C-58-3C (hex) Apple, Inc. +9C583C (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +C4-12-34 (hex) Apple, Inc. +C41234 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +3C-A6-F6 (hex) Apple, Inc. +3CA6F6 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +68-1B-EF (hex) HUAWEI TECHNOLOGIES CO.,LTD +681BEF (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +E4-DC-5F (hex) Cofractal, Inc. +E4DC5F (base 16) Cofractal, Inc. + 209 E Java Dr. #61593 + Sunnyvale CA 94089 + US + +4C-AB-4F (hex) Apple, Inc. +4CAB4F (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +78-13-05 (hex) IEEE Registration Authority +781305 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + +D4-38-9C (hex) Sony Corporation +D4389C (base 16) Sony Corporation + 1-7-1 Konan Minato-ku + Tokyo 108-0075 + JP + 60-61-34 (hex) Genesis Technical Systems Corp 606134 (base 16) Genesis Technical Systems Corp Suite 1720, 510 5th St SW @@ -35885,48 +35921,6 @@ A848FA (base 16) Espressif Inc. shenzhen guangdong 518057 CN -FC-58-DF (hex) Interphone Service -FC58DF (base 16) Interphone Service - Inwestorow, 8 - Mielec Select a state or province 39-300 - PL - -98-10-82 (hex) Nsolution Co., Ltd. -981082 (base 16) Nsolution Co., Ltd. - 1001-1, 387, Simin-daero, Dongan-gu - Anyang-si Gyeonggi-do 14057 - KR - -C4-12-34 (hex) Apple, Inc. -C41234 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -3C-A6-F6 (hex) Apple, Inc. -3CA6F6 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -4C-AB-4F (hex) Apple, Inc. -4CAB4F (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -9C-58-3C (hex) Apple, Inc. -9C583C (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -E4-DC-5F (hex) Cofractal, Inc. -E4DC5F (base 16) Cofractal, Inc. - 209 E Java Dr. #61593 - Sunnyvale CA 94089 - US - 50-81-40 (hex) HP Inc. 508140 (base 16) HP Inc. 10300 Energy Dr @@ -35957,12 +35951,42 @@ D47350 (base 16) DBG Commnunications Technology Co., Ltd. Hong Kong KOWLOON 999077 HK +B0-37-95 (hex) LG Electronics +B03795 (base 16) LG Electronics + 222 LG-ro, JINWI-MYEON + Pyeongtaek-si Gyeonggi-do 451-713 + KR + +F4-26-79 (hex) Intel Corporate +F42679 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + 70-DA-17 (hex) Austrian Audio GmbH 70DA17 (base 16) Austrian Audio GmbH Eitnergasse 15 Vienna Vienna 1230 AT +A4-FF-95 (hex) Nokia +A4FF95 (base 16) Nokia + 600 March Road + Kanata Ontario K2K 2E6 + CA + +34-B4-72 (hex) Espressif Inc. +34B472 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +F8-0C-58 (hex) Taicang T&W Electronics +F80C58 (base 16) Taicang T&W Electronics + 89# Jiang Nan RD + Suzhou Jiangsu 215412 + CN + 50-41-1C (hex) AMPAK Technology,Inc. 50411C (base 16) AMPAK Technology,Inc. 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, @@ -35975,23 +35999,17 @@ D47350 (base 16) DBG Commnunications Technology Co., Ltd. Beijing Beijing 1000083 CN -B0-37-95 (hex) LG Electronics -B03795 (base 16) LG Electronics - 222 LG-ro, JINWI-MYEON - Pyeongtaek-si Gyeonggi-do 451-713 - KR +FC-A8-9B (hex) Texas Instruments +FCA89B (base 16) Texas Instruments + 12500 TI Blvd + Dallas TX 75243 + US -A4-FF-95 (hex) Nokia -A4FF95 (base 16) Nokia - 600 March Road - Kanata Ontario K2K 2E6 - CA - -F4-26-79 (hex) Intel Corporate -F42679 (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY +98-F0-7B (hex) Texas Instruments +98F07B (base 16) Texas Instruments + 12500 TI Blvd + Dallas TX 75243 + US 38-61-A5 (hex) Grabango Co 3861A5 (base 16) Grabango Co @@ -36011,16 +36029,28 @@ D08E79 (base 16) Dell Inc. Seoul 04795 KR -34-B4-72 (hex) Espressif Inc. -34B472 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 +4C-F2-02 (hex) Xiaomi Communications Co Ltd +4CF202 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 CN -F8-0C-58 (hex) Taicang T&W Electronics -F80C58 (base 16) Taicang T&W Electronics - 89# Jiang Nan RD - Suzhou Jiangsu 215412 +88-46-04 (hex) Xiaomi Communications Co Ltd +884604 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +A4-55-90 (hex) Xiaomi Communications Co Ltd +A45590 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +08-1C-6E (hex) Xiaomi Communications Co Ltd +081C6E (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 CN FC-19-99 (hex) Xiaomi Communications Co Ltd @@ -36047,16 +36077,16 @@ E4072B (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN -FC-A8-9B (hex) Texas Instruments -FCA89B (base 16) Texas Instruments - 12500 TI Blvd - Dallas TX 75243 +84-AC-16 (hex) Apple, Inc. +84AC16 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 US -98-F0-7B (hex) Texas Instruments -98F07B (base 16) Texas Instruments - 12500 TI Blvd - Dallas TX 75243 +2C-BC-87 (hex) Apple, Inc. +2CBC87 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 US 24-46-E4 (hex) HUAWEI TECHNOLOGIES CO.,LTD @@ -36071,60 +36101,48 @@ FCA89B (base 16) Texas Instruments Irvine CA 92618 US -BC-D7-A5 (hex) Aruba, a Hewlett Packard Enterprise Company -BCD7A5 (base 16) Aruba, a Hewlett Packard Enterprise Company - 3333 Scott Blvd - Santa Clara CA 95054 - US - -4C-F2-02 (hex) Xiaomi Communications Co Ltd -4CF202 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -88-46-04 (hex) Xiaomi Communications Co Ltd -884604 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -A4-55-90 (hex) Xiaomi Communications Co Ltd -A45590 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -08-1C-6E (hex) Xiaomi Communications Co Ltd -081C6E (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -84-AC-16 (hex) Apple, Inc. -84AC16 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -2C-BC-87 (hex) Apple, Inc. -2CBC87 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - 44-A9-2C (hex) IEEE Registration Authority 44A92C (base 16) IEEE Registration Authority 445 Hoes Lane Piscataway NJ 08554 US +BC-D7-A5 (hex) Aruba, a Hewlett Packard Enterprise Company +BCD7A5 (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 + US + +FC-42-65 (hex) Zhejiang Tmall Technology Co., Ltd. +FC4265 (base 16) Zhejiang Tmall Technology Co., Ltd. + Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province + Shenzhen GuangDong 518000 + CN + D8-80-83 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. D88083 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China Nanning Guangxi 530007 CN +44-D4-54 (hex) Sagemcom Broadband SAS +44D454 (base 16) Sagemcom Broadband SAS + 250, route de l'Empereur + Rueil Malmaison Cedex hauts de seine 92848 + FR + +68-87-C6 (hex) Cisco Systems, Inc +6887C6 (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +80-24-8F (hex) Cisco Systems, Inc +80248F (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + AC-B9-2F (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. ACB92F (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. No.555 Qianmo Road @@ -36149,12 +36167,24 @@ ACB92F (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. DONG GUAN GUANG DONG 523860 CN -FC-42-65 (hex) Zhejiang Tmall Technology Co., Ltd. -FC4265 (base 16) Zhejiang Tmall Technology Co., Ltd. - Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province - Shenzhen GuangDong 518000 +C8-C9-A3 (hex) Espressif Inc. +C8C9A3 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 CN +E4-3B-C9 (hex) HISENSE VISUAL TECHNOLOGY CO.,LTD +E43BC9 (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD + Qianwangang Road 218 + Qingdao Shandong 266510 + CN + +10-41-21 (hex) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO +104121 (base 16) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO + Av. Buriti, 1900 – Setor B – Distrito Industrial + Manaus Amazonas 69075-000 + BR + B4-E4-54 (hex) Amazon Technologies Inc. B4E454 (base 16) Amazon Technologies Inc. P.O Box 8102 @@ -36167,17 +36197,11 @@ B4E454 (base 16) Amazon Technologies Inc. Reno NV 89507 US -68-87-C6 (hex) Cisco Systems, Inc -6887C6 (base 16) Cisco Systems, Inc - 80 West Tasman Drive - San Jose CA 94568 - US - -80-24-8F (hex) Cisco Systems, Inc -80248F (base 16) Cisco Systems, Inc - 80 West Tasman Drive - San Jose CA 94568 - US +50-E7-A0 (hex) Renesas Electronics (Penang) Sdn. Bhd. +50E7A0 (base 16) Renesas Electronics (Penang) Sdn. Bhd. + Phase 3, Bayan Lepas FIZ + Bayan Lepas Penang 11900 + MY D4-94-FB (hex) Continental Automotive Systems Inc. D494FB (base 16) Continental Automotive Systems Inc. @@ -36185,54 +36209,12 @@ D494FB (base 16) Continental Automotive Systems Inc. Deer Park IL 60010 US -44-D4-54 (hex) Sagemcom Broadband SAS -44D454 (base 16) Sagemcom Broadband SAS - 250, route de l'Empereur - Rueil Malmaison Cedex hauts de seine 92848 - FR - E8-95-26 (hex) Luxshare Precision Industry CO., LTD. E89526 (base 16) Luxshare Precision Industry CO., LTD. East Jinshang Road, Jinxi Town, Kunshan City Jiangsu 215324 CN -C8-C9-A3 (hex) Espressif Inc. -C8C9A3 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 - CN - -E4-3B-C9 (hex) HISENSE VISUAL TECHNOLOGY CO.,LTD -E43BC9 (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD - Qianwangang Road 218 - Qingdao Shandong 266510 - CN - -D4-93-90 (hex) CLEVO CO. -D49390 (base 16) CLEVO CO. - NO. 129, XINGDE ROAD - New TAIPEI CITY 241 - TW - -BC-06-2D (hex) Wacom Co.,Ltd. -BC062D (base 16) Wacom Co.,Ltd. - Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1 - Nishi-shinjuku,Shinjuku-ku Tokyo 160-6131 - JP - -10-41-21 (hex) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO -104121 (base 16) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO - Av. Buriti, 1900 – Setor B – Distrito Industrial - Manaus Amazonas 69075-000 - BR - -50-E7-A0 (hex) Renesas Electronics (Penang) Sdn. Bhd. -50E7A0 (base 16) Renesas Electronics (Penang) Sdn. Bhd. - Phase 3, Bayan Lepas FIZ - Bayan Lepas Penang 11900 - MY - 00-13-98 (hex) TrafficSim Co.,Ltd 001398 (base 16) TrafficSim Co.,Ltd 1-19-56 Taiko, Nakamura-ku @@ -36245,6 +36227,54 @@ BC062D (base 16) Wacom Co.,Ltd. Shenzhen Guang Dong 518108 CN +50-4B-9E (hex) Huawei Device Co., Ltd. +504B9E (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +04-7A-AE (hex) Huawei Device Co., Ltd. +047AAE (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +BC-06-2D (hex) Wacom Co.,Ltd. +BC062D (base 16) Wacom Co.,Ltd. + Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1 + Nishi-shinjuku,Shinjuku-ku Tokyo 160-6131 + JP + +3C-93-F4 (hex) HUAWEI TECHNOLOGIES CO.,LTD +3C93F4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +64-33-B5 (hex) IEEE Registration Authority +6433B5 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + +D4-93-90 (hex) CLEVO CO. +D49390 (base 16) CLEVO CO. + NO. 129, XINGDE ROAD + New TAIPEI CITY 241 + TW + +8C-4B-14 (hex) Espressif Inc. +8C4B14 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +D4-E8-53 (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. +D4E853 (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. + No.555 Qianmo Road + Hangzhou Zhejiang 310052 + CN + 40-9C-A6 (hex) Curvalux 409CA6 (base 16) Curvalux Electric Works, 3 Concourse Way, @@ -36275,54 +36305,120 @@ E0B9E5 (base 16) Technicolor Delivery Technologies Belgium NV Shenzhen Guangdong 518000 CN -50-4B-9E (hex) Huawei Device Co., Ltd. -504B9E (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN - -04-7A-AE (hex) Huawei Device Co., Ltd. -047AAE (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN - -3C-93-F4 (hex) HUAWEI TECHNOLOGIES CO.,LTD -3C93F4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -64-33-B5 (hex) IEEE Registration Authority -6433B5 (base 16) IEEE Registration Authority - 445 Hoes Lane - Piscataway NJ 08554 - US - 4C-E2-F1 (hex) Udino srl 4CE2F1 (base 16) Udino srl Via Amedeo Avogadro 24 Torino 10121 IT -8C-4B-14 (hex) Espressif Inc. -8C4B14 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 +B8-8C-29 (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. +B88C29 (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. + Midea Global Innovation Center,Beijiao Town,Shunde + Foshan Guangdong 528311 CN -D4-E8-53 (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. -D4E853 (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. - No.555 Qianmo Road - Hangzhou Zhejiang 310052 +84-27-B6 (hex) China Mobile IOT Company Limited +8427B6 (base 16) China Mobile IOT Company Limited + NO.8 Yu Ma Road, NanAn Area + Chongqing Chongqing 401336 CN +54-44-A3 (hex) Samsung Electronics Co.,Ltd +5444A3 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu + Suwon Gyeonggi-Do 16677 + KR + 18-E2-15 (hex) Nokia 18E215 (base 16) Nokia 600 March Road Kanata Ontario K2K 2E6 CA +78-5E-E8 (hex) IEEE Registration Authority +785EE8 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + +CC-BC-E3 (hex) HUAWEI TECHNOLOGIES CO.,LTD +CCBCE3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +08-9E-84 (hex) HUAWEI TECHNOLOGIES CO.,LTD +089E84 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +10-82-D7 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +1082D7 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. + Chongqing China 401120 + CN + +08-8E-DC (hex) Apple, Inc. +088EDC (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +A8-4A-28 (hex) Apple, Inc. +A84A28 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +D8-BE-1F (hex) Apple, Inc. +D8BE1F (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +98-50-2E (hex) Apple, Inc. +98502E (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +BC-6A-D1 (hex) Xiaomi Communications Co Ltd +BC6AD1 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +58-0A-D4 (hex) Apple, Inc. +580AD4 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +A4-77-F3 (hex) Apple, Inc. +A477F3 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +64-B6-23 (hex) Schrack Seconet Care Communication GmbH +64B623 (base 16) Schrack Seconet Care Communication GmbH + Eibesbrunnergasse 18 + Vienna 1120 + AT + +08-45-D1 (hex) Cisco Systems, Inc +0845D1 (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +9C-40-CD (hex) Synclayer Inc. +9C40CD (base 16) Synclayer Inc. + 1-20 Himegaoka + Kani Gifu 5090249 + JP + 9C-FF-C2 (hex) AVI Systems GmbH 9CFFC2 (base 16) AVI Systems GmbH Dr. Franz Wilhelmstraße 2A @@ -66530,12 +66626,6 @@ D4AAFF (base 16) MICRO WORLD JP -00-80-E7 (hex) Leonardo Tactical Systems. -0080E7 (base 16) Leonardo Tactical Systems. - Silvertree, Coxbridge Business Park - Alton Road, Farnham GU10 5EH - GB - 00-80-20 (hex) NETWORK PRODUCTS 008020 (base 16) NETWORK PRODUCTS DIVISION OF ANDREW CORPORATION @@ -67457,12 +67547,6 @@ C49878 (base 16) SHANGHAI MOAAN INTELLIGENT TECHNOLOGY CO.,LTD San Diego CA 92121 US -5C-2A-EF (hex) r2p Asia-Pacific Pty Ltd -5C2AEF (base 16) r2p Asia-Pacific Pty Ltd - 65 Epping Road - Sydney NSW 2113 - AU - A4-BB-6D (hex) Dell Inc. A4BB6D (base 16) Dell Inc. One Dell Way @@ -71399,12 +71483,66 @@ E408E7 (base 16) Quectel Wireless Solutions Co.,Ltd. La plaine saint denis FRANCE 93634 FR -60-B6-E1 (hex) Texas Instruments -60B6E1 (base 16) Texas Instruments - 12500 TI Blvd - Dallas TX 75243 +60-DB-15 (hex) New H3C Technologies Co., Ltd +60DB15 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +5C-A7-21 (hex) New H3C Technologies Co., Ltd +5CA721 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +98-F2-17 (hex) Castlenet Technology Inc. +98F217 (base 16) Castlenet Technology Inc. + 5F., No. 10, Daye Rd., Beitou Dist. + Taipei City 112030 + TW + +6C-43-3C (hex) TECNO MOBILE LIMITED +6C433C (base 16) TECNO MOBILE LIMITED + ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG + Hong Kong Hong Kong 999077 + HK + +44-5B-ED (hex) Aruba, a Hewlett Packard Enterprise Company +445BED (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 US +70-A6-CC (hex) Intel Corporate +70A6CC (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +84-EB-EF (hex) Cisco Systems, Inc +84EBEF (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +90-80-60 (hex) Nilfisk A/S +908060 (base 16) Nilfisk A/S + Kornmarksvej 1 + Broendby 2605 + DK + +10-09-F9 (hex) Amazon Technologies Inc. +1009F9 (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + +D0-3E-7D (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. +D03E7D (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. + 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT + SHEN ZHEN GUANG DONG 518000 + CN + 6C-79-B8 (hex) Texas Instruments 6C79B8 (base 16) Texas Instruments 12500 TI Blvd @@ -71423,94 +71561,34 @@ A4D094 (base 16) VIVAVIS AG NEW DELHI NA IN -60-DB-15 (hex) New H3C Technologies Co., Ltd -60DB15 (base 16) New H3C Technologies Co., Ltd - 466 Changhe Road, Binjiang District - Hangzhou Zhejiang 310052 - CN - -5C-A7-21 (hex) New H3C Technologies Co., Ltd -5CA721 (base 16) New H3C Technologies Co., Ltd - 466 Changhe Road, Binjiang District - Hangzhou Zhejiang 310052 - CN - -98-F2-17 (hex) Castlenet Technology Inc. -98F217 (base 16) Castlenet Technology Inc. - 5F., No. 10, Daye Rd., Beitou Dist. - Taipei City 112030 - TW - -90-80-60 (hex) Nilfisk A/S -908060 (base 16) Nilfisk A/S - Kornmarksvej 1 - Broendby 2605 - DK - -70-A6-CC (hex) Intel Corporate -70A6CC (base 16) Intel Corporate +D4-54-8B (hex) Intel Corporate +D4548B (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 Kulim Kedah 09000 MY -6C-43-3C (hex) TECNO MOBILE LIMITED -6C433C (base 16) TECNO MOBILE LIMITED - ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG - Hong Kong Hong Kong 999077 - HK - -44-5B-ED (hex) Aruba, a Hewlett Packard Enterprise Company -445BED (base 16) Aruba, a Hewlett Packard Enterprise Company - 3333 Scott Blvd - Santa Clara CA 95054 - US - -84-EB-EF (hex) Cisco Systems, Inc -84EBEF (base 16) Cisco Systems, Inc - 80 West Tasman Drive - San Jose CA 94568 - US - -D0-3E-7D (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. -D03E7D (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. - 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT - SHEN ZHEN GUANG DONG 518000 - CN - -90-69-76 (hex) Withrobot Inc. -906976 (base 16) Withrobot Inc. - #1001, Seoul Forest M-tower, 31, Ttukseom-ro 1-gil, Seongdong-gu - Seoul Seoul 04778 - KR - -FC-92-57 (hex) Renesas Electronics (Penang) Sdn. Bhd. -FC9257 (base 16) Renesas Electronics (Penang) Sdn. Bhd. - Phase 3, Bayan Lepas FIZ - Bayan Lepas Penang 11900 - MY - 60-A5-E2 (hex) Intel Corporate 60A5E2 (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 Kulim Kedah 09000 MY -A4-2A-71 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD -A42A71 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD - No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County - Chengdu Sichuan 611330 - CN - -D4-54-8B (hex) Intel Corporate -D4548B (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 +FC-92-57 (hex) Renesas Electronics (Penang) Sdn. Bhd. +FC9257 (base 16) Renesas Electronics (Penang) Sdn. Bhd. + Phase 3, Bayan Lepas FIZ + Bayan Lepas Penang 11900 MY -10-09-F9 (hex) Amazon Technologies Inc. -1009F9 (base 16) Amazon Technologies Inc. - P.O Box 8102 - Reno NV 89507 +90-69-76 (hex) Withrobot Inc. +906976 (base 16) Withrobot Inc. + #1001, Seoul Forest M-tower, 31, Ttukseom-ro 1-gil, Seongdong-gu + Seoul Seoul 04778 + KR + +60-B6-E1 (hex) Texas Instruments +60B6E1 (base 16) Texas Instruments + 12500 TI Blvd + Dallas TX 75243 US D0-1E-1D (hex) SaiNXT Technologies LLP @@ -71519,18 +71597,6 @@ D01E1D (base 16) SaiNXT Technologies LLP Mumbai Maharashtra 400007 IN -58-4D-42 (hex) Dragos, Inc. -584D42 (base 16) Dragos, Inc. - 1745 Dorsey Rd, Suite R - Hanover MD 21076 - US - -60-8A-10 (hex) Microchip Technology Inc. -608A10 (base 16) Microchip Technology Inc. - 2355 W. Chandler Blvd. - Chandler AZ 85224 - US - A8-23-16 (hex) Nokia A82316 (base 16) Nokia 600 March Road @@ -71543,6 +71609,12 @@ A82316 (base 16) Nokia Chicago IL 60654 US +A4-2A-71 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +A42A71 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD + No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County + Chengdu Sichuan 611330 + CN + 44-67-52 (hex) Wistron INFOCOMM (Zhongshan) CORPORATION 446752 (base 16) Wistron INFOCOMM (Zhongshan) CORPORATION 15 Cuiwei Road, Cuiheng New District @@ -71561,18 +71633,24 @@ A864F1 (base 16) Intel Corporate Kulim Kedah 09000 MY +58-4D-42 (hex) Dragos, Inc. +584D42 (base 16) Dragos, Inc. + 1745 Dorsey Rd, Suite R + Hanover MD 21076 + US + +60-8A-10 (hex) Microchip Technology Inc. +608A10 (base 16) Microchip Technology Inc. + 2355 W. Chandler Blvd. + Chandler AZ 85224 + US + 10-6F-D9 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. 106FD9 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China Nanning Guangxi 530007 CN -E0-67-81 (hex) Dongguan Liesheng Electronic Co., Ltd. -E06781 (base 16) Dongguan Liesheng Electronic Co., Ltd. - F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci - dongguan guangdong 523000 - CN - 00-03-24 (hex) SANYO Techno Solutions Tottori Co., Ltd. 000324 (base 16) SANYO Techno Solutions Tottori Co., Ltd. 7-101 Tachikawa-cho @@ -71585,10 +71663,10 @@ B8AE1D (base 16) Guangzhou Xingyi Electronic Technology Co.,Ltd Guangzhou 51000 CN -3C-CD-57 (hex) Beijing Xiaomi Mobile Software Co., Ltd -3CCD57 (base 16) Beijing Xiaomi Mobile Software Co., Ltd - The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District - Beijing Beijing 100085 +E0-67-81 (hex) Dongguan Liesheng Electronic Co., Ltd. +E06781 (base 16) Dongguan Liesheng Electronic Co., Ltd. + F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci + dongguan guangdong 523000 CN B8-DA-E8 (hex) Huawei Device Co., Ltd. @@ -71603,12 +71681,6 @@ B8DAE8 (base 16) Huawei Device Co., Ltd. shenzhen guangdong 518057 CN -80-8A-BD (hex) Samsung Electronics Co.,Ltd -808ABD (base 16) Samsung Electronics Co.,Ltd - 129, Samsung-ro, Youngtongl-Gu - Suwon Gyeonggi-Do 16677 - KR - D8-BE-65 (hex) Amazon Technologies Inc. D8BE65 (base 16) Amazon Technologies Inc. P.O Box 8102 @@ -71627,11 +71699,11 @@ ACEC85 (base 16) eero inc. San Francisco CA 94107 US -EC-A8-1F (hex) Technicolor CH USA Inc. -ECA81F (base 16) Technicolor CH USA Inc. - 5030 Sugarloaf Parkway Bldg 6 - Lawrenceville GA 30044 - US +70-86-CE (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. +7086CE (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. + Midea Global Innovation Center,Beijiao Town,Shunde + Foshan Guangdong 528311 + CN 90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD 90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD @@ -71639,6 +71711,18 @@ ECA81F (base 16) Technicolor CH USA Inc. Shenzhen 518067 CN +E4-2A-AC (hex) Microsoft Corporation +E42AAC (base 16) Microsoft Corporation + One Microsoft Way + REDMOND WA 98052 + US + +DC-8D-8A (hex) Nokia Solutions and Networks GmbH & Co. KG +DC8D8A (base 16) Nokia Solutions and Networks GmbH & Co. KG + Werinherstrasse 91 + München Bavaria D-81541 + DE + C0-F8-27 (hex) Rapidmax Technology Corporation C0F827 (base 16) Rapidmax Technology Corporation 3F., No.531, Zhongzheng Rd. Xindian Dist. @@ -71651,35 +71735,23 @@ B4527E (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -70-86-CE (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. -7086CE (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. - Midea Global Innovation Center,Beijiao Town,Shunde - Foshan Guangdong 528311 +3C-CD-57 (hex) Beijing Xiaomi Mobile Software Co., Ltd +3CCD57 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District + Beijing Beijing 100085 CN -30-75-12 (hex) Sony Corporation -307512 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP +80-8A-BD (hex) Samsung Electronics Co.,Ltd +808ABD (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu + Suwon Gyeonggi-Do 16677 + KR -C4-3A-BE (hex) Sony Corporation -C43ABE (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -94-CE-2C (hex) Sony Corporation -94CE2C (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -DC-8D-8A (hex) Nokia Solutions and Networks GmbH & Co. KG -DC8D8A (base 16) Nokia Solutions and Networks GmbH & Co. KG - Werinherstrasse 91 - München Bavaria D-81541 - DE +EC-A8-1F (hex) Technicolor CH USA Inc. +ECA81F (base 16) Technicolor CH USA Inc. + 5030 Sugarloaf Parkway Bldg 6 + Lawrenceville GA 30044 + US 20-E7-B6 (hex) Universal Electronics, Inc. 20E7B6 (base 16) Universal Electronics, Inc. @@ -71693,23 +71765,11 @@ DC8D8A (base 16) Nokia Solutions and Networks GmbH & Co. KG Geneva, Plan-les-Quates 1228 CH -E4-2A-AC (hex) Microsoft Corporation -E42AAC (base 16) Microsoft Corporation - One Microsoft Way - REDMOND WA 98052 - US - -D4-3D-F3 (hex) Zyxel Communications Corporation -D43DF3 (base 16) Zyxel Communications Corporation - No. 6 Innovation Road II, Science Park - Hsichu Taiwan 300 - TW - -20-57-9E (hex) HUNAN FN-LINK TECHNOLOGY LIMITED -20579E (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED - No.8, Litong Road, Liuyan Economic & Tec - Changsha HUNAN 410329 - CN +00-1C-A4 (hex) Sony Corporation +001CA4 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP 00-1E-45 (hex) Sony Corporation 001E45 (base 16) Sony Corporation @@ -71729,36 +71789,30 @@ D43DF3 (base 16) Zyxel Communications Corporation Tokyo 108-0075 JP -00-23-F1 (hex) Sony Corporation -0023F1 (base 16) Sony Corporation +20-57-9E (hex) HUNAN FN-LINK TECHNOLOGY LIMITED +20579E (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED + No.8, Litong Road, Liuyan Economic & Tec + Changsha HUNAN 410329 + CN + +D4-3D-F3 (hex) Zyxel Communications Corporation +D43DF3 (base 16) Zyxel Communications Corporation + No. 6 Innovation Road II, Science Park + Hsichu Taiwan 300 + TW + +30-75-12 (hex) Sony Corporation +307512 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP -00-1A-75 (hex) Sony Corporation -001A75 (base 16) Sony Corporation +C4-3A-BE (hex) Sony Corporation +C43ABE (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP -00-1C-A4 (hex) Sony Corporation -001CA4 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -24-5E-48 (hex) Apple, Inc. -245E48 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -08-C7-29 (hex) Apple, Inc. -08C729 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - C8-84-CF (hex) HUAWEI TECHNOLOGIES CO.,LTD C884CF (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park @@ -71771,17 +71825,23 @@ C884CF (base 16) HUAWEI TECHNOLOGIES CO.,LTD Germantown MD 20876 US -E0-23-D7 (hex) Sleep Number -E023D7 (base 16) Sleep Number - 1001 Third Avenue South - Minneapolis MN 55404 - US +00-23-F1 (hex) Sony Corporation +0023F1 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP -C4-C3-6B (hex) Apple, Inc. -C4C36B (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US +00-1A-75 (hex) Sony Corporation +001A75 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP + +94-CE-2C (hex) Sony Corporation +94CE2C (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP 24-1D-48 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD 241D48 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD @@ -71807,12 +71867,6 @@ C4C36B (base 16) Apple, Inc. Hangzhou City Zhejiang Province 311400 CN -0C-E1-59 (hex) Shenzhen iStartek Technology Co., Ltd. -0CE159 (base 16) Shenzhen iStartek Technology Co., Ltd. - Zone B, 4/F, Building A6, Qinghu Dongli Industrial Park, No. 416 Xuegang North Road, Longhua District, - Shenzhen Guangdong 518109 - CN - E8-A7-30 (hex) Apple, Inc. E8A730 (base 16) Apple, Inc. 1 Infinite Loop @@ -71825,17 +71879,35 @@ E8A730 (base 16) Apple, Inc. Cupertino CA 95014 US +08-C7-29 (hex) Apple, Inc. +08C729 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +C4-C3-6B (hex) Apple, Inc. +C4C36B (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + A0-29-BD (hex) Team Group Inc A029BD (base 16) Team Group Inc 3F., No. 166 Jian 1st Rd., Zhonghe Dist. New Taipei City, 235 TW -98-B1-77 (hex) LANDIS + GYR -98B177 (base 16) LANDIS + GYR - 78th km Old National Road Athens-Corinth - Corinth 20100 - GR +E0-23-D7 (hex) Sleep Number +E023D7 (base 16) Sleep Number + 1001 Third Avenue South + Minneapolis MN 55404 + US + +24-5E-48 (hex) Apple, Inc. +245E48 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US 50-F9-08 (hex) Wizardlab Co., Ltd. 50F908 (base 16) Wizardlab Co., Ltd. @@ -71843,16 +71915,10 @@ A029BD (base 16) Team Group Inc Seoul 08594 KR -50-C2-E8 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. -50C2E8 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. - B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China - Nanning Guangxi 530007 - CN - -30-09-C0 (hex) Motorola Mobility LLC, a Lenovo Company -3009C0 (base 16) Motorola Mobility LLC, a Lenovo Company - 222 West Merchandise Mart Plaza - Chicago IL 60654 +70-1A-D5 (hex) Openpath Security, Inc. +701AD5 (base 16) Openpath Security, Inc. + 13428 Maxella Ave, #866 + Marina Del Rey CA 90292 US FC-2E-19 (hex) China Mobile Group Device Co.,Ltd. @@ -71861,11 +71927,23 @@ FC2E19 (base 16) China Mobile Group Device Co.,Ltd. Beijing 100053 CN -70-1A-D5 (hex) Openpath Security, Inc. -701AD5 (base 16) Openpath Security, Inc. - 13428 Maxella Ave, #866 - Marina Del Rey CA 90292 - US +50-C2-E8 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +50C2E8 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China + Nanning Guangxi 530007 + CN + +0C-E1-59 (hex) Shenzhen iStartek Technology Co., Ltd. +0CE159 (base 16) Shenzhen iStartek Technology Co., Ltd. + Zone B, 4/F, Building A6, Qinghu Dongli Industrial Park, No. 416 Xuegang North Road, Longhua District, + Shenzhen Guangdong 518109 + CN + +98-B1-77 (hex) LANDIS + GYR +98B177 (base 16) LANDIS + GYR + 78th km Old National Road Athens-Corinth + Corinth 20100 + GR 00-0E-82 (hex) Infinity Tech 000E82 (base 16) Infinity Tech @@ -71873,18 +71951,18 @@ FC2E19 (base 16) China Mobile Group Device Co.,Ltd. Perth W. A. 6924 AU -F0-B6-1E (hex) Intel Corporate -F0B61E (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - C8-4D-44 (hex) Shenzhen Jiapeng Huaxiang Technology Co.,Ltd C84D44 (base 16) Shenzhen Jiapeng Huaxiang Technology Co.,Ltd 2nd floor, building 5, taihemei Industrial Zone, 128 Chunfeng Road, longbeiling community, Tangxia Town Shenzhen Guangdong 518109 CN +EC-94-CB (hex) Espressif Inc. +EC94CB (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + B0-46-92 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD B04692 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD NO.18 HAIBIN ROAD, @@ -71903,11 +71981,17 @@ AC764C (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD Santa Clara CA 95054 US -EC-94-CB (hex) Espressif Inc. -EC94CB (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 - CN +F0-B6-1E (hex) Intel Corporate +F0B61E (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +30-09-C0 (hex) Motorola Mobility LLC, a Lenovo Company +3009C0 (base 16) Motorola Mobility LLC, a Lenovo Company + 222 West Merchandise Mart Plaza + Chicago IL 60654 + US 40-40-6B (hex) Icomera 40406B (base 16) Icomera @@ -71915,6 +71999,18 @@ EC94CB (base 16) Espressif Inc. Gothenburg 411 03 SE +60-CE-41 (hex) HUAWEI TECHNOLOGIES CO.,LTD +60CE41 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +28-17-09 (hex) HUAWEI TECHNOLOGIES CO.,LTD +281709 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + EC-97-E0 (hex) Hangzhou Ezviz Software Co.,Ltd. EC97E0 (base 16) Hangzhou Ezviz Software Co.,Ltd. Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District @@ -71927,6 +72023,42 @@ D0B66F (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION Suzhou 215021 CN +2C-3A-91 (hex) Huawei Device Co., Ltd. +2C3A91 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +64-F7-05 (hex) Huawei Device Co., Ltd. +64F705 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +F0-5E-CD (hex) Texas Instruments +F05ECD (base 16) Texas Instruments + 12500 TI Blvd + Dallas TX 75243 + US + +00-16-E8 (hex) Lumissil Microsystems +0016E8 (base 16) Lumissil Microsystems + 1623 Buckeye Dr. + Milpitas CA 95035 + US + +5C-DF-B8 (hex) Shenzhen Unionmemory Information System Limited +5CDFB8 (base 16) Shenzhen Unionmemory Information System Limited + Factory Flat D24/F-02, Dong Jiao Tou, Houhai Road, Shekou, Nan Shan District + Shenzhen Guangdong 518067 + CN + +E0-0A-F6 (hex) Liteon Technology Corporation +E00AF6 (base 16) Liteon Technology Corporation + 4F, 90, Chien 1 Road + New Taipei City Taiwan 23585 + TW + 7C-FD-6B (hex) Xiaomi Communications Co Ltd 7CFD6B (base 16) Xiaomi Communications Co Ltd #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road @@ -71945,70 +72077,16 @@ D0B66F (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION Beijing Haidian District 100085 CN -2C-3A-91 (hex) Huawei Device Co., Ltd. -2C3A91 (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN - -64-F7-05 (hex) Huawei Device Co., Ltd. -64F705 (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN - -60-6E-E8 (hex) Xiaomi Communications Co Ltd -606EE8 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -F0-5E-CD (hex) Texas Instruments -F05ECD (base 16) Texas Instruments - 12500 TI Blvd - Dallas TX 75243 - US - F8-38-69 (hex) LG Electronics F83869 (base 16) LG Electronics Science Park W5, 10, Magokjungang 10-ro, Gangseo-gu Seoul 07796 KR -00-16-E8 (hex) Lumissil Microsystems -0016E8 (base 16) Lumissil Microsystems - 1623 Buckeye Dr. - Milpitas CA 95035 - US - -60-CE-41 (hex) HUAWEI TECHNOLOGIES CO.,LTD -60CE41 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -28-17-09 (hex) HUAWEI TECHNOLOGIES CO.,LTD -281709 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -5C-DF-B8 (hex) Shenzhen Unionmemory Information System Limited -5CDFB8 (base 16) Shenzhen Unionmemory Information System Limited - Factory Flat D24/F-02, Dong Jiao Tou, Houhai Road, Shekou, Nan Shan District - Shenzhen Guangdong 518067 - CN - -E0-0A-F6 (hex) Liteon Technology Corporation -E00AF6 (base 16) Liteon Technology Corporation - 4F, 90, Chien 1 Road - New Taipei City Taiwan 23585 - TW - -B4-0E-CF (hex) Bouffalo Lab (Nanjing) Co., Ltd. -B40ECF (base 16) Bouffalo Lab (Nanjing) Co., Ltd. - 5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China - Nanjing Jiangsu 211800 +60-6E-E8 (hex) Xiaomi Communications Co Ltd +606EE8 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 CN E0-C5-8F (hex) China Mobile IOT Company Limited @@ -72023,12 +72101,6 @@ E0C58F (base 16) China Mobile IOT Company Limited Shenzhen 518108 CN -2C-1A-05 (hex) Cisco Systems, Inc -2C1A05 (base 16) Cisco Systems, Inc - 80 West Tasman Drive - San Jose CA 94568 - US - 9C-50-D1 (hex) Murata Manufacturing Co., Ltd. 9C50D1 (base 16) Murata Manufacturing Co., Ltd. 1-10-1, Higashikotari @@ -72041,24 +72113,6 @@ E0C58F (base 16) China Mobile IOT Company Limited ShangHai 201203 CN -44-17-93 (hex) Espressif Inc. -441793 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 - CN - -00-A3-88 (hex) BSkyB Ltd -00A388 (base 16) BSkyB Ltd - 130 Kings Road - Brentwood Essex 08854 - GB - -50-3D-EB (hex) Zhejiang Tmall Technology Co., Ltd. -503DEB (base 16) Zhejiang Tmall Technology Co., Ltd. - Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province - Shenzhen GuangDong 518000 - CN - 30-B9-30 (hex) zte corporation 30B930 (base 16) zte corporation 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China @@ -72071,10 +72125,10 @@ E0C58F (base 16) China Mobile IOT Company Limited shenzhen guangdong 518057 CN -7C-66-EF (hex) Hon Hai Precision IND.CO.,LTD -7C66EF (base 16) Hon Hai Precision IND.CO.,LTD - No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN - TAIPEI TAIWAN 33859 +B4-0E-CF (hex) Bouffalo Lab (Nanjing) Co., Ltd. +B40ECF (base 16) Bouffalo Lab (Nanjing) Co., Ltd. + 5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China + Nanjing Jiangsu 211800 CN 78-50-05 (hex) MOKO TECHNOLOGY Ltd @@ -72083,6 +72137,12 @@ E0C58F (base 16) China Mobile IOT Company Limited Shenzhen Guangdong 518110 CN +2C-1A-05 (hex) Cisco Systems, Inc +2C1A05 (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + F8-7F-A5 (hex) GREATEK F87FA5 (base 16) GREATEK ESTRADA MUNICIPAL PEDRO R SILVA @@ -72101,16 +72161,16 @@ F87FA5 (base 16) GREATEK Austin TX 78701 US -7C-84-37 (hex) China Post Communications Equipment Co., Ltd. -7C8437 (base 16) China Post Communications Equipment Co., Ltd. - 6 / F, block D, No.156, Beijing International Financial Building, Fuxingmennei street,Xicheng District - Beijing Beijing 100031 +50-3D-EB (hex) Zhejiang Tmall Technology Co., Ltd. +503DEB (base 16) Zhejiang Tmall Technology Co., Ltd. + Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province + Shenzhen GuangDong 518000 CN -B8-4D-43 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED -B84D43 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED - No.8, Litong Road, Liuyan Economic & Tec - Changsha HUNAN 410329 +D8-68-52 (hex) HUAWEI TECHNOLOGIES CO.,LTD +D86852 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 CN AC-64-90 (hex) HUAWEI TECHNOLOGIES CO.,LTD @@ -72119,6 +72179,36 @@ AC6490 (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN +7C-66-EF (hex) Hon Hai Precision IND.CO.,LTD +7C66EF (base 16) Hon Hai Precision IND.CO.,LTD + No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN + TAIPEI TAIWAN 33859 + CN + +84-E3-42 (hex) Tuya Smart Inc. +84E342 (base 16) Tuya Smart Inc. + FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL + hongkong Hong Kong 999077 + CN + +44-17-93 (hex) Espressif Inc. +441793 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +C8-9F-1A (hex) HUAWEI TECHNOLOGIES CO.,LTD +C89F1A (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +00-A3-88 (hex) BSkyB Ltd +00A388 (base 16) BSkyB Ltd + 130 Kings Road + Brentwood Essex 08854 + GB + A8-4A-63 (hex) TPV Display Technology(Xiamen) Co.,Ltd. A84A63 (base 16) TPV Display Technology(Xiamen) Co.,Ltd. No.1, Xianghai Road, Xiamen Torch Hi-Tech Industrial Development Zone, China @@ -72143,30 +72233,36 @@ D867D3 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN +7C-84-37 (hex) China Post Communications Equipment Co., Ltd. +7C8437 (base 16) China Post Communications Equipment Co., Ltd. + 6 / F, block D, No.156, Beijing International Financial Building, Fuxingmennei street,Xicheng District + Beijing Beijing 100031 + CN + +B8-4D-43 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED +B84D43 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED + No.8, Litong Road, Liuyan Economic & Tec + Changsha HUNAN 410329 + CN + +94-A4-08 (hex) Shenzhen Trolink Technology CO, LTD +94A408 (base 16) Shenzhen Trolink Technology CO, LTD + 201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area. + Shenzhen GuangDong 518000 + CN + +D0-F8-65 (hex) ITEL MOBILE LIMITED +D0F865 (base 16) ITEL MOBILE LIMITED + RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K + Hong Kong KOWLOON 999077 + HK + 80-6F-1C (hex) Huawei Device Co., Ltd. 806F1C (base 16) Huawei Device Co., Ltd. No.2 of Xincheng Road, Songshan Lake Zone Dongguan Guangdong 523808 CN -C8-9F-1A (hex) HUAWEI TECHNOLOGIES CO.,LTD -C89F1A (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -D8-68-52 (hex) HUAWEI TECHNOLOGIES CO.,LTD -D86852 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -84-E3-42 (hex) Tuya Smart Inc. -84E342 (base 16) Tuya Smart Inc. - FLAT/RM 806 BLK ? 8/F CHEUNG SHA WAN PLAZA 833 CHEUNG SHA WAN ROAD KL - hongkong Hong Kong 999077 - CN - E0-A2-58 (hex) Wanbang Digital Energy Co.,Ltd E0A258 (base 16) Wanbang Digital Energy Co.,Ltd NO.39 Longhui Road,Wujin District @@ -72185,17 +72281,11 @@ E0A258 (base 16) Wanbang Digital Energy Co.,Ltd Shenzhen Guangdong 518055 CN -94-A4-08 (hex) Shenzhen Trolink Technology CO, LTD -94A408 (base 16) Shenzhen Trolink Technology CO, LTD - 201 B building 4 shijie, Chashu industry 505 block, Baoan airport Sanwei community, Hangcheng street Baoan area. - Shenzhen GuangDong 518000 - CN - -D0-F8-65 (hex) ITEL MOBILE LIMITED -D0F865 (base 16) ITEL MOBILE LIMITED - RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K - Hong Kong KOWLOON 999077 - HK +60-8F-A4 (hex) Nokia Solutions and Networks GmbH & Co. KG +608FA4 (base 16) Nokia Solutions and Networks GmbH & Co. KG + Werinherstrasse 91 + München Bavaria D-81541 + DE 38-5C-76 (hex) PLANTRONICS, INC. 385C76 (base 16) PLANTRONICS, INC. @@ -72215,11 +72305,89 @@ D0F865 (base 16) ITEL MOBILE LIMITED Moscow 115432 RU -60-8F-A4 (hex) Nokia Solutions and Networks GmbH & Co. KG -608FA4 (base 16) Nokia Solutions and Networks GmbH & Co. KG - Werinherstrasse 91 - München Bavaria D-81541 - DE +3C-9F-C3 (hex) Beijing Sinead Technology Co., Ltd. +3C9FC3 (base 16) Beijing Sinead Technology Co., Ltd. + Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China + Beijing Beijing 100094 + CN + +84-A9-38 (hex) LCFC(HeFei) Electronics Technology co., ltd +84A938 (base 16) LCFC(HeFei) Electronics Technology co., ltd + No.3188,YunGu Road?Hefei   Economic and Technological   Development Area + HEFEI ANHUI 230601 + CN + +38-FD-F8 (hex) Cisco Systems, Inc +38FDF8 (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +20-8C-47 (hex) Tenstorrent Inc +208C47 (base 16) Tenstorrent Inc + 150 Ferrand Dr #901 + Toronto ON M3C 3E5 + CA + +5C-2A-EF (hex) r2p Asia-Pacific Pty Ltd +5C2AEF (base 16) r2p Asia-Pacific Pty Ltd + Unit 5, 18 Lexington Avenue, Bella Vista + Sydney NSW 2153 + AU + +F8-56-C3 (hex) zte corporation +F856C3 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +DC-F4-CA (hex) Apple, Inc. +DCF4CA (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +7C-FC-16 (hex) Apple, Inc. +7CFC16 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +88-B9-45 (hex) Apple, Inc. +88B945 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +B0-BE-83 (hex) Apple, Inc. +B0BE83 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +10-32-1D (hex) HUAWEI TECHNOLOGIES CO.,LTD +10321D (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +E4-93-6A (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +E4936A (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, + DONG GUAN GUANG DONG 523860 + CN + +48-77-BD (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +4877BD (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, + DONG GUAN GUANG DONG 523860 + CN + +00-80-E7 (hex) Leonardo UK Ltd +0080E7 (base 16) Leonardo UK Ltd + Christopher Martin Road + Basildon Essex SS14 3EL + GB 84-80-94 (hex) Meter, Inc. 848094 (base 16) Meter, Inc. @@ -107660,12 +107828,6 @@ C8F5D6 (base 16) IEEE Registration Authority New Taipei City 231 TW -04-B9-E3 (hex) Samsung Electronics Co.,Ltd -04B9E3 (base 16) Samsung Electronics Co.,Ltd - 129, Samsung-ro, Youngtongl-Gu - Suwon Gyeonggi-Do 16677 - KR - 98-43-FA (hex) Intel Corporate 9843FA (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 @@ -107684,6 +107846,12 @@ C8F5D6 (base 16) IEEE Registration Authority beijing 100094 CN +04-B9-E3 (hex) Samsung Electronics Co.,Ltd +04B9E3 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu + Suwon Gyeonggi-Do 16677 + KR + C4-5E-5C (hex) HUAWEI TECHNOLOGIES CO.,LTD C45E5C (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park @@ -107696,12 +107864,6 @@ E85C0A (base 16) Cisco Systems, Inc San Jose CA 94568 US -2C-6D-C1 (hex) Intel Corporate -2C6DC1 (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - 70-B9-50 (hex) Texas Instruments 70B950 (base 16) Texas Instruments 12500 TI Blvd @@ -107714,24 +107876,6 @@ D09FD9 (base 16) IEEE Registration Authority Piscataway NJ 08554 US -54-C2-50 (hex) Iskratel d.o.o. -54C250 (base 16) Iskratel d.o.o. - Ljubljanska cesta 24a - Kranj 4000 - SI - -00-FA-B6 (hex) Kontakt Micro-Location Sp z o.o. -00FAB6 (base 16) Kontakt Micro-Location Sp z o.o. - Stoczniowcow 3 - Krakow 30-709 - PL - -D0-17-69 (hex) Murata Manufacturing Co., Ltd. -D01769 (base 16) Murata Manufacturing Co., Ltd. - 1-10-1, Higashikotari - Nagaokakyo-shi Kyoto 617-8555 - JP - A0-B0-86 (hex) Hirschmann Automation and Control GmbH A0B086 (base 16) Hirschmann Automation and Control GmbH Stuttgarter Straße 45-51 @@ -107750,11 +107894,23 @@ A0B086 (base 16) Hirschmann Automation and Control GmbH Kulim Kedah 09000 MY -A8-55-6A (hex) 3S System Technology Inc. -A8556A (base 16) 3S System Technology Inc. - 6F, No. 5, Ln. 16, Sec. 2, Sichuan Rd., Banqiao Dist., - New Taipei City 220620 - TW +2C-6D-C1 (hex) Intel Corporate +2C6DC1 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +00-FA-B6 (hex) Kontakt Micro-Location Sp z o.o. +00FAB6 (base 16) Kontakt Micro-Location Sp z o.o. + Stoczniowcow 3 + Krakow 30-709 + PL + +54-C2-50 (hex) Iskratel d.o.o. +54C250 (base 16) Iskratel d.o.o. + Ljubljanska cesta 24a + Kranj 4000 + SI 00-0B-3A (hex) PESA 000B3A (base 16) PESA @@ -107780,12 +107936,24 @@ F0C814 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD shenzhen guangdong 518000 CN +D0-17-69 (hex) Murata Manufacturing Co., Ltd. +D01769 (base 16) Murata Manufacturing Co., Ltd. + 1-10-1, Higashikotari + Nagaokakyo-shi Kyoto 617-8555 + JP + CC-3A-DF (hex) Neptune Technology Group Inc. CC3ADF (base 16) Neptune Technology Group Inc. 1600 AL Highway 229 S Tallassee AL 36078 US +A8-55-6A (hex) 3S System Technology Inc. +A8556A (base 16) 3S System Technology Inc. + 6F, No. 5, Ln. 16, Sec. 2, Sichuan Rd., Banqiao Dist., + New Taipei City 220620 + TW + 68-EC-8A (hex) Private 68EC8A (base 16) Private @@ -107795,12 +107963,6 @@ CC3ADF (base 16) Neptune Technology Group Inc. Miao-Lih Hsuan 115 TW -98-3B-67 (hex) DWnet Technologies(Suzhou) Corporation -983B67 (base 16) DWnet Technologies(Suzhou) Corporation - No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China - Suzhou 21500 - CN - 58-35-5D (hex) Huawei Device Co., Ltd. 58355D (base 16) Huawei Device Co., Ltd. No.2 of Xincheng Road, Songshan Lake Zone @@ -107813,6 +107975,12 @@ AC7E01 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN +98-3B-67 (hex) DWnet Technologies(Suzhou) Corporation +983B67 (base 16) DWnet Technologies(Suzhou) Corporation + No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China + Suzhou 21500 + CN + 6C-93-92 (hex) BEKO Technologies GmbH 6C9392 (base 16) BEKO Technologies GmbH Im Taubental 7 @@ -107831,12 +107999,6 @@ F8F082 (base 16) NAGTECH LLC Ekaterinburg Sverdlovskaya oblast 620110 RU -8C-1F-64 (hex) IEEE Registration Authority -8C1F64 (base 16) IEEE Registration Authority - 445 Hoes Lane - Piscataway NJ 08554 - US - 08-5A-11 (hex) D-Link International 085A11 (base 16) D-Link International 1 Internal Business Park, #03-12,The Synergy @@ -107873,12 +108035,6 @@ EC9468 (base 16) META SYSTEM SPA Santa Ana CA 92707 US -64-C4-03 (hex) Quectel Wireless Solutions Co.,Ltd. -64C403 (base 16) Quectel Wireless Solutions Co.,Ltd. - 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District - Shanghai 200233 - CN - A0-E4-53 (hex) Sony Corporation A0E453 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa @@ -107903,18 +108059,36 @@ A0E453 (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP +64-C4-03 (hex) Quectel Wireless Solutions Co.,Ltd. +64C403 (base 16) Quectel Wireless Solutions Co.,Ltd. + 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District + Shanghai 200233 + CN + C0-25-A5 (hex) Dell Inc. C025A5 (base 16) Dell Inc. One Dell Way Round Rock TX 78682 US +8C-1F-64 (hex) IEEE Registration Authority +8C1F64 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + B4-C8-10 (hex) Umpi srl B4C810 (base 16) Umpi srl Via Consolare Rimini-San Marino, 11 Rimini 47923 IT +44-D5-CC (hex) Amazon Technologies Inc. +44D5CC (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + 48-5A-67 (hex) Shaanxi Ruixun Electronic Information Technology Co., Ltd 485A67 (base 16) Shaanxi Ruixun Electronic Information Technology Co., Ltd 11th Floor, Building A, Xi 'an National Digital Publishing Base, No. 996, Tiangu 7th Road, Software New City, Xi 'an High-tech Zone, Shaanxi Province @@ -107951,30 +108125,6 @@ D05162 (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -44-D5-CC (hex) Amazon Technologies Inc. -44D5CC (base 16) Amazon Technologies Inc. - P.O Box 8102 - Reno NV 89507 - US - -9C-5C-F9 (hex) Sony Corporation -9C5CF9 (base 16) Sony Corporation - 1-7-1 Konan Minato-ku - Tokyo 108-0075 - JP - -84-C7-EA (hex) Sony Corporation -84C7EA (base 16) Sony Corporation - 1-7-1 Konan Minato-ku - Tokyo 108-0075 - JP - -38-78-62 (hex) Sony Corporation -387862 (base 16) Sony Corporation - 1-7-1 Konan Minato-ku - Tokyo 108-0075 - JP - 00-25-E7 (hex) Sony Corporation 0025E7 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa @@ -107999,6 +108149,18 @@ D05162 (base 16) Sony Corporation Dongguan 523808 CN +9C-5C-F9 (hex) Sony Corporation +9C5CF9 (base 16) Sony Corporation + 1-7-1 Konan Minato-ku + Tokyo 108-0075 + JP + +84-C7-EA (hex) Sony Corporation +84C7EA (base 16) Sony Corporation + 1-7-1 Konan Minato-ku + Tokyo 108-0075 + JP + 94-5C-9A (hex) Apple, Inc. 945C9A (base 16) Apple, Inc. 1 Infinite Loop @@ -108011,12 +108173,24 @@ D05162 (base 16) Sony Corporation Cupertino CA 95014 US +38-78-62 (hex) Sony Corporation +387862 (base 16) Sony Corporation + 1-7-1 Konan Minato-ku + Tokyo 108-0075 + JP + 30-39-A9 (hex) Hongshan Information Science and Technology (HangZhou) Co.,Ltd. 3039A9 (base 16) Hongshan Information Science and Technology (HangZhou) Co.,Ltd. 32 / F, Yuesheng International Center, Pinglan Road, Xiaoshan District, Hangzhou, Zhejiang Province Hangzhou Zhejiang Province 311215 CN +9C-6B-F0 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. +9C6BF0 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. + 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China + Shenzhen Nanshan District 518000 + CN + 1C-57-3E (hex) Altice Labs S.A. 1C573E (base 16) Altice Labs S.A. NIF 504705610, Rua Eng. José Ferreira Pinto Basto @@ -108029,24 +108203,12 @@ D0167C (base 16) eero inc. San Francisco CA 94107 US -A8-5B-36 (hex) IEEE Registration Authority -A85B36 (base 16) IEEE Registration Authority - 445 Hoes Lane - Piscataway NJ 08554 - US - 4C-77-CB (hex) Intel Corporate 4C77CB (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 Kulim Kedah 09000 MY -9C-6B-F0 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. -9C6BF0 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. - 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China - Shenzhen Nanshan District 518000 - CN - 44-95-3B (hex) RLTech India Private Limited 44953B (base 16) RLTech India Private Limited C-2, Sector-85, Noida @@ -108059,12 +108221,30 @@ A85B36 (base 16) IEEE Registration Authority Kulim Kedah 09000 MY +A8-5B-36 (hex) IEEE Registration Authority +A85B36 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + +2C-11-65 (hex) Silicon Laboratories +2C1165 (base 16) Silicon Laboratories + 400 West Cesar Chavez Street + Austin TX 78701 + US + 20-B8-68 (hex) Motorola Mobility LLC, a Lenovo Company 20B868 (base 16) Motorola Mobility LLC, a Lenovo Company 222 West Merchandise Mart Plaza Chicago IL 60654 US +B4-1C-AB (hex) ICR, inc. +B41CAB (base 16) ICR, inc. + 6200 S Main St Suite 200 + Aurora CO 80016 + US + 28-9C-6E (hex) Shanghai High-Flying Electronics Technology Co., Ltd 289C6E (base 16) Shanghai High-Flying Electronics Technology Co., Ltd Room 1002,#1Building,No.3000 Longdong Avenue,Pudong @@ -108077,18 +108257,6 @@ A85B36 (base 16) IEEE Registration Authority Shanghai Shanghai 201203 CN -2C-11-65 (hex) Silicon Laboratories -2C1165 (base 16) Silicon Laboratories - 400 West Cesar Chavez Street - Austin TX 78701 - US - -B4-1C-AB (hex) ICR, inc. -B41CAB (base 16) ICR, inc. - 6200 S Main St Suite 200 - Aurora CO 80016 - US - 1C-2A-8B (hex) Nokia 1C2A8B (base 16) Nokia 600 March Road @@ -108101,11 +108269,11 @@ B41CAB (base 16) ICR, inc. Reno NV 89507 US -BC-D7-D4 (hex) Roku, Inc -BCD7D4 (base 16) Roku, Inc - 1155 Coleman Ave - San Jose CA 95110 - US +DC-ED-83 (hex) Beijing Xiaomi Mobile Software Co., Ltd +DCED83 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District + Beijing Beijing 100085 + CN AC-0B-FB (hex) Espressif Inc. AC0BFB (base 16) Espressif Inc. @@ -108113,41 +108281,17 @@ AC0BFB (base 16) Espressif Inc. Shanghai Shanghai 201203 CN -DC-ED-83 (hex) Beijing Xiaomi Mobile Software Co., Ltd -DCED83 (base 16) Beijing Xiaomi Mobile Software Co., Ltd - The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District - Beijing Beijing 100085 - CN - 00-D7-6D (hex) Intel Corporate 00D76D (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 Kulim Kedah 09000 MY -50-8E-49 (hex) Xiaomi Communications Co Ltd -508E49 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -8C-AA-CE (hex) Xiaomi Communications Co Ltd -8CAACE (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -70-5F-A3 (hex) Xiaomi Communications Co Ltd -705FA3 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN - -FC-D9-08 (hex) Xiaomi Communications Co Ltd -FCD908 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 - CN +BC-D7-D4 (hex) Roku, Inc +BCD7D4 (base 16) Roku, Inc + 1155 Coleman Ave + San Jose CA 95110 + US 30-B0-37 (hex) New H3C Technologies Co., Ltd 30B037 (base 16) New H3C Technologies Co., Ltd @@ -108173,6 +108317,24 @@ A88940 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN +8C-AA-CE (hex) Xiaomi Communications Co Ltd +8CAACE (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +70-5F-A3 (hex) Xiaomi Communications Co Ltd +705FA3 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +FC-D9-08 (hex) Xiaomi Communications Co Ltd +FCD908 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + CC-31-2A (hex) HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD CC312A (base 16) HUIZHOU TCL COMMUNICATION ELECTRON CO.,LTD 2nd Floor, Building 1,Dongnan Jiahao Industrial Park,NO.3 Donghe South Road, Dongxing District,Dongjiang high-tech Zone @@ -108185,6 +108347,12 @@ DCB72E (base 16) Xiaomi Communications Co Ltd Beijing Haidian District 100085 CN +50-8E-49 (hex) Xiaomi Communications Co Ltd +508E49 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + 38-B8-00 (hex) Wistron Neweb Corporation 38B800 (base 16) Wistron Neweb Corporation No.20,Park Avenue II,Hsinchu Science Park @@ -108215,12 +108383,6 @@ DCB72E (base 16) Xiaomi Communications Co Ltd Shenzhen Guangdong 518116 CN -10-47-38 (hex) Nokia Shanghai Bell Co., Ltd. -104738 (base 16) Nokia Shanghai Bell Co., Ltd. - No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai - Shanghai 201206 - CN - 6C-11-B3 (hex) Wu Qi Technologies,Inc. 6C11B3 (base 16) Wu Qi Technologies,Inc. 14/F, 107 Middle Road, Xiantao Big Data Valley, Yubei District @@ -108233,12 +108395,24 @@ A0941A (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD DONG GUAN GUANG DONG 523860 CN +10-47-38 (hex) Nokia Shanghai Bell Co., Ltd. +104738 (base 16) Nokia Shanghai Bell Co., Ltd. + No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai + Shanghai 201206 + CN + 1C-2C-E0 (hex) Shanghai Mountain View Silicon 1C2CE0 (base 16) Shanghai Mountain View Silicon Suite 4C, Building 3, 1238 Zhangjiang Rd., Pudong Shanghai 201210 CN +F8-CA-85 (hex) NEC Corporation +F8CA85 (base 16) NEC Corporation + 7-1 Shiba 5-chome + Minato-Ku Tokyo 108-8001 + JP + 00-0C-EC (hex) Orolia USA 000CEC (base 16) Orolia USA 45 Becker Road Suite A @@ -108251,6 +108425,12 @@ A0941A (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD Dongguan 523808 CN +1C-9D-C2 (hex) Espressif Inc. +1C9DC2 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + F4-B1-9C (hex) AltoBeam (China) Inc. F4B19C (base 16) AltoBeam (China) Inc. B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian @@ -108287,17 +108467,17 @@ A8D081 (base 16) Huawei Device Co., Ltd. Dongguan 523808 CN -F8-CA-85 (hex) NEC Corporation -F8CA85 (base 16) NEC Corporation - 7-1 Shiba 5-chome - Minato-Ku Tokyo 108-8001 - JP +58-98-35 (hex) Technicolor Delivery Technologies Belgium NV +589835 (base 16) Technicolor Delivery Technologies Belgium NV + Prins Boudewijnlaan 47 + Edegem - Belgium B-2650 + BE -1C-9D-C2 (hex) Espressif Inc. -1C9DC2 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 - CN +18-FC-26 (hex) Qorvo International Pte. Ltd. +18FC26 (base 16) Qorvo International Pte. Ltd. + 1 Changi Business Park Avenue 1 + #04-01 486058 + SG C4-EA-1D (hex) Technicolor Delivery Technologies Belgium NV C4EA1D (base 16) Technicolor Delivery Technologies Belgium NV @@ -108323,47 +108503,53 @@ ECC1AB (base 16) Guangzhou Shiyuan Electronic Technology Company Limited Guangzhou Guangdong 510530 CN +00-CE-30 (hex) Express LUCK Industrial Ltd. +00CE30 (base 16) Express LUCK Industrial Ltd. + No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District + Shenzhen Guangdong 518100 + CN + EC-93-7D (hex) Technicolor CH USA Inc. EC937D (base 16) Technicolor CH USA Inc. 5030 Sugarloaf Parkway Bldg 6 Lawrenceville GA 30044 US -18-FC-26 (hex) Qorvo International Pte. Ltd. -18FC26 (base 16) Qorvo International Pte. Ltd. - 1 Changi Business Park Avenue 1 - #04-01 486058 - SG - -58-98-35 (hex) Technicolor Delivery Technologies Belgium NV -589835 (base 16) Technicolor Delivery Technologies Belgium NV - Prins Boudewijnlaan 47 - Edegem - Belgium B-2650 - BE - C4-6E-33 (hex) Zhong Ge Smart Technology Co., Ltd. C46E33 (base 16) Zhong Ge Smart Technology Co., Ltd. Zhong Ge Smart Technology Co., Ltd Shanghai 201199 CN -00-CE-30 (hex) Express LUCK Industrial Ltd. -00CE30 (base 16) Express LUCK Industrial Ltd. - No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District - Shenzhen Guangdong 518100 - CN - 74-32-C2 (hex) KYOLIS 7432C2 (base 16) KYOLIS 2 RUE DE LA RENAISSANCE ANTONY 92160 FR -5C-83-82 (hex) Nokia -5C8382 (base 16) Nokia - 600 March Road - Kanata Ontario K2K 2E6 - CA +90-6A-94 (hex) hangzhou huacheng network technology co., ltd +906A94 (base 16) hangzhou huacheng network technology co., ltd + Room 412, Building 2, No.2930, Nanhuan Road, Binjiang District + hangzhou zhejiang 310052 + CN + +10-0C-29 (hex) Shenzhen NORCO lntelligent Technology Co.,Ltd +100C29 (base 16) Shenzhen NORCO lntelligent Technology Co.,Ltd + 6th Fl., Bldg. B, Shum Yip U Centre, Hangcheng Sub-district, Baoan District, Shenzhen + Shenzhen 518126 + CN + +44-EB-2E (hex) ALPSALPINE CO .,LTD +44EB2E (base 16) ALPSALPINE CO .,LTD + nishida 6-1 + kakuda-City Miyagi-Pref 981-1595 + JP + +0C-AA-EE (hex) Ansjer Electronics Co., Ltd. +0CAAEE (base 16) Ansjer Electronics Co., Ltd. + 4 Bldg., Pinglan Indl. Park, Nanping, + Zhuhai Guangdong 519060 + CN 28-36-13 (hex) IEEE Registration Authority 283613 (base 16) IEEE Registration Authority @@ -108377,6 +108563,66 @@ C46E33 (base 16) Zhong Ge Smart Technology Co., Ltd. Freiburg 79106 DE +FC-A6-4C (hex) Alibaba cloud computing Co., Ltd +FCA64C (base 16) Alibaba cloud computing Co., Ltd + No.12, Zhuantang science and technology economic block, Xihu District + Hangzhou Zhejiang 310024 + CN + +4C-EB-D6 (hex) Espressif Inc. +4CEBD6 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +5C-83-82 (hex) Nokia +5C8382 (base 16) Nokia + 600 March Road + Kanata Ontario K2K 2E6 + CA + +E0-69-BA (hex) Cisco Systems, Inc +E069BA (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +24-36-DA (hex) Cisco Systems, Inc +2436DA (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +00-8A-76 (hex) Apple, Inc. +008A76 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +20-37-A5 (hex) Apple, Inc. +2037A5 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +DC-B5-4F (hex) Apple, Inc. +DCB54F (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +B8-37-4A (hex) Apple, Inc. +B8374A (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +EC-7C-2C (hex) HUAWEI TECHNOLOGIES CO.,LTD +EC7C2C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + F8-D0-27 (hex) Seiko Epson Corporation F8D027 (base 16) Seiko Epson Corporation 2070 Kotobuki Koaka @@ -143645,42 +143891,12 @@ AC976C (base 16) Greenliant Round Rock TX 78682 US -74-5D-68 (hex) Fiberhome Telecommunication Technologies Co.,LTD -745D68 (base 16) Fiberhome Telecommunication Technologies Co.,LTD - No.5 DongXin Road - Wuhan Hubei 430074 - CN - -20-CF-AE (hex) Cisco Systems, Inc -20CFAE (base 16) Cisco Systems, Inc - 80 West Tasman Drive - San Jose CA 94568 - US - 98-49-9F (hex) Domo Tactical Communications 98499F (base 16) Domo Tactical Communications DTC Fusion 2, 1100 Parkway Whiteley Hampshire PO15 7AB GB -C0-F9-B0 (hex) HUAWEI TECHNOLOGIES CO.,LTD -C0F9B0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -14-8C-4A (hex) HUAWEI TECHNOLOGIES CO.,LTD -148C4A (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -60-9B-B4 (hex) HUAWEI TECHNOLOGIES CO.,LTD -609BB4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - C0-23-8D (hex) Samsung Electronics Co.,Ltd C0238D (base 16) Samsung Electronics Co.,Ltd 129, Samsung-ro, Youngtongl-Gu @@ -143693,16 +143909,34 @@ C0238D (base 16) Samsung Electronics Co.,Ltd Kulim Kedah 09000 MY +20-CF-AE (hex) Cisco Systems, Inc +20CFAE (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + C0-FB-F9 (hex) IEEE Registration Authority C0FBF9 (base 16) IEEE Registration Authority 445 Hoes Lane Piscataway NJ 08554 US -4C-D5-77 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD. -4CD577 (base 16) CHONGQING FUGUI ELECTRONICS CO.,LTD. - Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District - Chongqing Chongqing 401332 +60-9B-B4 (hex) HUAWEI TECHNOLOGIES CO.,LTD +609BB4 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +7C-27-BC (hex) Hui Zhou Gaoshengda Technology Co.,LTD +7C27BC (base 16) Hui Zhou Gaoshengda Technology Co.,LTD + No.75,Zhongkai High-Tech Development District,Huizhou + Hui Zhou Guangdong 516006 + CN + +74-5D-68 (hex) Fiberhome Telecommunication Technologies Co.,LTD +745D68 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road + Wuhan Hubei 430074 CN EC-08-E5 (hex) Motorola Mobility LLC, a Lenovo Company @@ -143717,18 +143951,24 @@ EC08E5 (base 16) Motorola Mobility LLC, a Lenovo Company San Jose CA 95134 US -7C-27-BC (hex) Hui Zhou Gaoshengda Technology Co.,LTD -7C27BC (base 16) Hui Zhou Gaoshengda Technology Co.,LTD - No.75,Zhongkai High-Tech Development District,Huizhou - Hui Zhou Guangdong 516006 - CN - 0C-60-46 (hex) vivo Mobile Communication Co., Ltd. 0C6046 (base 16) vivo Mobile Communication Co., Ltd. #283,BBK Road Wusha,Chang'An DongGuan City,Guangdong, 523860 CN +C0-F9-B0 (hex) HUAWEI TECHNOLOGIES CO.,LTD +C0F9B0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +14-8C-4A (hex) HUAWEI TECHNOLOGIES CO.,LTD +148C4A (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + 50-70-97 (hex) China Mobile Group Device Co.,Ltd. 507097 (base 16) China Mobile Group Device Co.,Ltd. 32 Xuanwumen West Street,Xicheng District @@ -143747,12 +143987,24 @@ CC1531 (base 16) Intel Corporate Gwangju Gwangsan-gu 506-731 KR +4C-D5-77 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD. +4CD577 (base 16) CHONGQING FUGUI ELECTRONICS CO.,LTD. + Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District + Chongqing Chongqing 401332 + CN + 74-E2-0C (hex) Amazon Technologies Inc. 74E20C (base 16) Amazon Technologies Inc. P.O Box 8102 Reno NV 89507 US +84-47-09 (hex) Shenzhen IP3 Century Intelligent Technology CO.,Ltd +844709 (base 16) Shenzhen IP3 Century Intelligent Technology CO.,Ltd + aiying.li@ip3-tech.com + Shenzhen 518057 + CN + 10-54-03 (hex) INTARSO GmbH 105403 (base 16) INTARSO GmbH Schuchardstr. 3 @@ -143765,11 +144017,11 @@ CC1531 (base 16) Intel Corporate Waukegan IL 60087-1836 US -84-47-09 (hex) Shenzhen IP3 Century Intelligent Technology CO.,Ltd -844709 (base 16) Shenzhen IP3 Century Intelligent Technology CO.,Ltd - aiying.li@ip3-tech.com - Shenzhen 518057 - CN +00-00-60 (hex) Kontron Europe GmbH +000060 (base 16) Kontron Europe GmbH + Gutenbergstraße 2 + Ismaning 85737 + DE 00-91-EB (hex) Renesas Electronics (Penang) Sdn. Bhd. 0091EB (base 16) Renesas Electronics (Penang) Sdn. Bhd. @@ -143777,11 +144029,11 @@ CC1531 (base 16) Intel Corporate Bayan Lepas Penang 11900 MY -44-9F-46 (hex) Huawei Device Co., Ltd. -449F46 (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN +C0-D0-63 (hex) EM Microelectronic +C0D063 (base 16) EM Microelectronic + Rue des Sors 3 + Marin-Epagnier Neuchatel 2074 + CH 34-51-84 (hex) Huawei Device Co., Ltd. 345184 (base 16) Huawei Device Co., Ltd. @@ -143807,12 +144059,6 @@ DCF56E (base 16) Wellysis Corp. Seocho-gu Seoul 06628 KR -00-00-60 (hex) Kontron Europe GmbH -000060 (base 16) Kontron Europe GmbH - Gutenbergstraße 2 - Ismaning 85737 - DE - 60-FC-F1 (hex) Private 60FCF1 (base 16) Private @@ -143822,22 +144068,22 @@ E84FA7 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN -C0-D0-63 (hex) EM Microelectronic -C0D063 (base 16) EM Microelectronic - Rue des Sors 3 - Marin-Epagnier Neuchatel 2074 - CH +44-9F-46 (hex) Huawei Device Co., Ltd. +449F46 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN -7C-10-C9 (hex) ASUSTek COMPUTER INC. -7C10C9 (base 16) ASUSTek COMPUTER INC. - 15,Li-Te Rd., Peitou, Taipei 112, Taiwan - Taipei Taiwan 112 - TW +4C-21-D0 (hex) Sony Corporation +4C21D0 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP -00-C0-6F (hex) KOMATSU LTD. -00C06F (base 16) KOMATSU LTD. - 3-25-1, Shinomiya - Hiratsuka-Shi Kanagawa-Ken 254-8555 +1C-7B-21 (hex) Sony Corporation +1C7B21 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 JP A8-67-1E (hex) RATP @@ -143852,12 +144098,24 @@ A8671E (base 16) RATP Hangzhou Zhejiang 310053 CN +7C-10-C9 (hex) ASUSTek COMPUTER INC. +7C10C9 (base 16) ASUSTek COMPUTER INC. + 15,Li-Te Rd., Peitou, Taipei 112, Taiwan + Taipei Taiwan 112 + TW + 08-85-5B (hex) Kontron Europe GmbH 08855B (base 16) Kontron Europe GmbH Gutenbergstraße 2 Ismaning 85737 DE +00-C0-6F (hex) KOMATSU LTD. +00C06F (base 16) KOMATSU LTD. + 3-25-1, Shinomiya + Hiratsuka-Shi Kanagawa-Ken 254-8555 + JP + E4-B5-03 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. E4B503 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. @@ -143888,6 +144146,18 @@ C44D84 (base 16) Cisco Systems, Inc San Jose CA 94568 US +50-D0-65 (hex) ESYLUX GmbH +50D065 (base 16) ESYLUX GmbH + An der Strusbek, 40 + Ahrensburg Deutschland 22926 + DE + +10-2C-EF (hex) EMU Electronic AG +102CEF (base 16) EMU Electronic AG + Joechlerweg 2 + Baar Zug 6340 + CH + 20-53-83 (hex) HUAWEI TECHNOLOGIES CO.,LTD 205383 (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park @@ -143900,6 +144170,12 @@ B8857B (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN +B8-F9-34 (hex) Sony Corporation +B8F934 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP + 24-21-AB (hex) Sony Corporation 2421AB (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa @@ -143918,14 +144194,20 @@ B8857B (base 16) HUAWEI TECHNOLOGIES CO.,LTD Shinagawa-ku Tokyo 140-0002 JP -8C-64-22 (hex) Sony Corporation -8C6422 (base 16) Sony Corporation +00-0F-DE (hex) Sony Corporation +000FDE (base 16) Sony Corporation + 1-7-1 Konan Minato-ku + Tokyo 108-0075 + JP + +E0-63-E5 (hex) Sony Corporation +E063E5 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP -B8-F9-34 (hex) Sony Corporation -B8F934 (base 16) Sony Corporation +8C-64-22 (hex) Sony Corporation +8C6422 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP @@ -143936,72 +144218,30 @@ B8F934 (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -E0-63-E5 (hex) Sony Corporation -E063E5 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -4C-21-D0 (hex) Sony Corporation -4C21D0 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -1C-7B-21 (hex) Sony Corporation -1C7B21 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -00-0F-DE (hex) Sony Corporation -000FDE (base 16) Sony Corporation - 1-7-1 Konan Minato-ku - Tokyo 108-0075 - JP - 3C-01-EF (hex) Sony Corporation 3C01EF (base 16) Sony Corporation 1-7-1 Konan Minato-ku Tokyo 108-0075 JP -10-2C-EF (hex) EMU Electronic AG -102CEF (base 16) EMU Electronic AG - Joechlerweg 2 - Baar Zug 6340 - CH - -6C-CF-39 (hex) Guangdong Starfive Technology Co., Ltd. -6CCF39 (base 16) Guangdong Starfive Technology Co., Ltd. - Room S201, Zone A, No.2 Haoyang Road, Yunlu Community, Daliang Street, Shunde District, Foshan, Guangdong, 528309, China - Foshan Guangdong 528309 - CN - B4-CD-F5 (hex) CUB ELECPARTS INC. B4CDF5 (base 16) CUB ELECPARTS INC. No. 6, Lane 546, Sec. 6, Changlu Road Fuhsin Township, Changhua County Taiwan 50648 TW +6C-CF-39 (hex) Guangdong Starfive Technology Co., Ltd. +6CCF39 (base 16) Guangdong Starfive Technology Co., Ltd. + Room S201, Zone A, No.2 Haoyang Road, Yunlu Community, Daliang Street, Shunde District, Foshan, Guangdong, 528309, China + Foshan Guangdong 528309 + CN + D8-8C-73 (hex) zte corporation D88C73 (base 16) zte corporation 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China shenzhen guangdong 518057 CN -38-65-B2 (hex) Apple, Inc. -3865B2 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - -D8-DE-3A (hex) Apple, Inc. -D8DE3A (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US - E8-78-65 (hex) Apple, Inc. E87865 (base 16) Apple, Inc. 1 Infinite Loop @@ -144014,11 +144254,17 @@ A04ECF (base 16) Apple, Inc. Cupertino CA 95014 US -50-D0-65 (hex) ESYLUX GmbH -50D065 (base 16) ESYLUX GmbH - An der Strusbek, 40 - Ahrensburg Deutschland 22926 - DE +D8-DE-3A (hex) Apple, Inc. +D8DE3A (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +38-65-B2 (hex) Apple, Inc. +3865B2 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US 08-87-C7 (hex) Apple, Inc. 0887C7 (base 16) Apple, Inc. @@ -144026,17 +144272,11 @@ A04ECF (base 16) Apple, Inc. Cupertino CA 95014 US -8C-1D-96 (hex) Intel Corporate -8C1D96 (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - -60-DD-8E (hex) Intel Corporate -60DD8E (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY +28-64-EF (hex) Shenzhen Fsan Intelligent Technology Co.,Ltd +2864EF (base 16) Shenzhen Fsan Intelligent Technology Co.,Ltd + Building 14C, Zhonghaixin Innovation Industry City, Ganli Road, Jihua street, + SHENZHEN GUANGDONG 518000 + CN 90-59-3C (hex) AZ-TECHNOLOGY SDN BHD 90593C (base 16) AZ-TECHNOLOGY SDN BHD @@ -144068,11 +144308,17 @@ D0DBB7 (base 16) Casa Systems LANE COVE NSW 2066 AU -28-64-EF (hex) Shenzhen Fsan Intelligent Technology Co.,Ltd -2864EF (base 16) Shenzhen Fsan Intelligent Technology Co.,Ltd - Building 14C, Zhonghaixin Innovation Industry City, Ganli Road, Jihua street, - SHENZHEN GUANGDONG 518000 - CN +8C-1D-96 (hex) Intel Corporate +8C1D96 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +60-DD-8E (hex) Intel Corporate +60DD8E (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY C8-9E-43 (hex) NETGEAR C89E43 (base 16) NETGEAR @@ -144092,24 +144338,6 @@ C89E43 (base 16) NETGEAR 518000 Shenzhen 518000 CN -20-BE-CD (hex) eero inc. -20BECD (base 16) eero inc. - 660 3rd Street - San Francisco CA 94107 - US - -00-08-AC (hex) BST GmbH -0008AC (base 16) BST GmbH - Remusweg 1 - Bielefeld Nordrhein-Westfalen 33729 - DE - -BC-09-1B (hex) Intel Corporate -BC091B (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - 00-BF-AF (hex) Hui Zhou Gaoshengda Technology Co.,LTD 00BFAF (base 16) Hui Zhou Gaoshengda Technology Co.,LTD No.75,Zhongkai High-Tech Development District,Huizhou @@ -144128,6 +144356,12 @@ BC091B (base 16) Intel Corporate Kulim Kedah 09000 MY +20-BE-CD (hex) eero inc. +20BECD (base 16) eero inc. + 660 3rd Street + San Francisco CA 94107 + US + F0-2A-2B (hex) IEEE Registration Authority F02A2B (base 16) IEEE Registration Authority 445 Hoes Lane @@ -144152,18 +144386,6 @@ B4ECFF (base 16) Wuhan IPG Technologies Co., Ltd. Wuhan HUBEI 430070 CN -F0-57-A6 (hex) Intel Corporate -F057A6 (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - -64-26-77 (hex) BKM-Micronic Richtfunkanlagen GmbH -642677 (base 16) BKM-Micronic Richtfunkanlagen GmbH - Im Steinernen Kreuz 19 - Wurmberg 75449 - DE - 4C-2F-D7 (hex) Huawei Device Co., Ltd. 4C2FD7 (base 16) Huawei Device Co., Ltd. No.2 of Xincheng Road, Songshan Lake Zone @@ -144182,11 +144404,29 @@ D47415 (base 16) Huawei Device Co., Ltd. Dongguan Guangdong 523808 CN -8C-67-94 (hex) vivo Mobile Communication Co., Ltd. -8C6794 (base 16) vivo Mobile Communication Co., Ltd. - #283,BBK Road - Wusha,Chang'An DongGuan City,Guangdong, 523860 - CN +00-08-AC (hex) BST GmbH +0008AC (base 16) BST GmbH + Remusweg 1 + Bielefeld Nordrhein-Westfalen 33729 + DE + +BC-09-1B (hex) Intel Corporate +BC091B (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +64-26-77 (hex) BKM-Micronic Richtfunkanlagen GmbH +642677 (base 16) BKM-Micronic Richtfunkanlagen GmbH + Im Steinernen Kreuz 19 + Wurmberg 75449 + DE + +70-07-77 (hex) OnTarget Technologies, Inc +700777 (base 16) OnTarget Technologies, Inc + 355 Madison Ave + New York 10017 + US F0-B1-3F (hex) Huawei Device Co., Ltd. F0B13F (base 16) Huawei Device Co., Ltd. @@ -144200,18 +144440,18 @@ F0B13F (base 16) Huawei Device Co., Ltd. Dongguan 523808 CN +F0-57-A6 (hex) Intel Corporate +F057A6 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + 20-D7-78 (hex) Texas Instruments 20D778 (base 16) Texas Instruments 12500 TI Blvd Dallas TX 75243 US -70-07-77 (hex) OnTarget Technologies, Inc -700777 (base 16) OnTarget Technologies, Inc - 355 Madison Ave - New York 10017 - US - 10-F6-05 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. 10F605 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. @@ -144290,16 +144530,10 @@ E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD München Bavaria D-81541 DE -E4-46-B0 (hex) Fujitsu Client Computing Limited -E446B0 (base 16) Fujitsu Client Computing Limited - 1-1-2 Kashimada, Saiwai-ku - Kawasaki Kanagawa 212-0058 - JP - -80-CB-BC (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. -80CBBC (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. - No.218 Qianwangang Road - Qingdao Shangdong 266510 +8C-67-94 (hex) vivo Mobile Communication Co., Ltd. +8C6794 (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road + Wusha,Chang'An DongGuan City,Guangdong, 523860 CN E0-75-AA (hex) Beijing Jingling Information System Technology Co., Ltd. @@ -144308,6 +144542,18 @@ E075AA (base 16) Beijing Jingling Information System Technology Co., Ltd. Beijing 100080 CN +80-CB-BC (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. +80CBBC (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. + No.218 Qianwangang Road + Qingdao Shangdong 266510 + CN + +E4-46-B0 (hex) Fujitsu Client Computing Limited +E446B0 (base 16) Fujitsu Client Computing Limited + 1-1-2 Kashimada, Saiwai-ku + Kawasaki Kanagawa 212-0058 + JP + 54-CE-82 (hex) zte corporation 54CE82 (base 16) zte corporation 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China @@ -144332,12 +144578,6 @@ F4CE48 (base 16) Extreme Networks, Inc. hongkong Hong Kong 999077 CN -08-99-E8 (hex) KEMAS GmbH -0899E8 (base 16) KEMAS GmbH - Wüstenbrander Str. 9 - Oberlungwitz 09353 - DE - 18-F8-7F (hex) Wha Yu Industrial Co., Ltd. 18F87F (base 16) Wha Yu Industrial Co., Ltd. No.326, Sec 2. Kung Tao 5 Road @@ -144356,47 +144596,11 @@ F4CE48 (base 16) Extreme Networks, Inc. Brentwood Essex 08854 GB -1C-88-0C (hex) Shenzhen Skyworth Digital Technology CO., Ltd -1C880C (base 16) Shenzhen Skyworth Digital Technology CO., Ltd - 4F,Block A, Skyworth?Building, - Shenzhen Guangdong 518057 - CN - -EC-35-4D (hex) Wingtech Mobile Communications Co.,Ltd -EC354D (base 16) Wingtech Mobile Communications Co.,Ltd - No.777,Yazhong Road,Nanhu District - Jiaxing Zhejiang 314001 - CN - -80-61-5F (hex) Beijing Sinead Technology Co., Ltd. -80615F (base 16) Beijing Sinead Technology Co., Ltd. - Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China - Beijing Beijing 100094 - CN - -44-AE-44 (hex) Huawei Device Co., Ltd. -44AE44 (base 16) Huawei Device Co., Ltd. - No.2 of Xincheng Road, Songshan Lake Zone - Dongguan Guangdong 523808 - CN - -20-B0-01 (hex) Technicolor Delivery Technologies Belgium NV -20B001 (base 16) Technicolor Delivery Technologies Belgium NV - Prins Boudewijnlaan 47 - Edegem - Belgium B-2650 - BE - -7C-39-85 (hex) HUAWEI TECHNOLOGIES CO.,LTD -7C3985 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -A4-B1-E9 (hex) Technicolor Delivery Technologies Belgium NV -A4B1E9 (base 16) Technicolor Delivery Technologies Belgium NV - Prins Boudewijnlaan 47 - Edegem - Belgium B-2650 - BE +08-99-E8 (hex) KEMAS GmbH +0899E8 (base 16) KEMAS GmbH + Wüstenbrander Str. 9 + Oberlungwitz 09353 + DE 30-56-96 (hex) Infinix mobility limited 305696 (base 16) Infinix mobility limited @@ -144410,6 +144614,60 @@ A4B1E9 (base 16) Technicolor Delivery Technologies Belgium NV Chongqing China 401120 CN +EC-35-4D (hex) Wingtech Mobile Communications Co.,Ltd +EC354D (base 16) Wingtech Mobile Communications Co.,Ltd + No.777,Yazhong Road,Nanhu District + Jiaxing Zhejiang 314001 + CN + +7C-39-85 (hex) HUAWEI TECHNOLOGIES CO.,LTD +7C3985 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +80-61-5F (hex) Beijing Sinead Technology Co., Ltd. +80615F (base 16) Beijing Sinead Technology Co., Ltd. + Room 504,Block A, New material Building, Yongfeng industrial, Haiding District, Beijing.China + Beijing Beijing 100094 + CN + +A4-B1-E9 (hex) Technicolor Delivery Technologies Belgium NV +A4B1E9 (base 16) Technicolor Delivery Technologies Belgium NV + Prins Boudewijnlaan 47 + Edegem - Belgium B-2650 + BE + +20-B0-01 (hex) Technicolor Delivery Technologies Belgium NV +20B001 (base 16) Technicolor Delivery Technologies Belgium NV + Prins Boudewijnlaan 47 + Edegem - Belgium B-2650 + BE + +1C-88-0C (hex) Shenzhen Skyworth Digital Technology CO., Ltd +1C880C (base 16) Shenzhen Skyworth Digital Technology CO., Ltd + 4F,Block A, Skyworth?Building, + Shenzhen Guangdong 518057 + CN + +44-AE-44 (hex) Huawei Device Co., Ltd. +44AE44 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +0C-E5-A3 (hex) SharkNinja +0CE5A3 (base 16) SharkNinja + 85 Cude Ln + Madison TN 37115 + US + +CC-3F-8A (hex) KOMATSU LTD. +CC3F8A (base 16) KOMATSU LTD. + 3-25-1, Shinomiya + Hiratsuka-Shi Kanagawa-Ken 254-8555 + JP + B0-E9-FE (hex) Woan Technology (Shenzhen) Co., Ltd. B0E9FE (base 16) Woan Technology (Shenzhen) Co., Ltd. 1-2F, Building B4, Yintian Industrial Zone, Yantian Community, Xixiang Street, Bao'an District, Shenzhen, Guangdong, P.R.China @@ -144422,27 +144680,87 @@ B0E9FE (base 16) Woan Technology (Shenzhen) Co., Ltd. Irvine CA 92618 US +6C-91-06 (hex) Private +6C9106 (base 16) Private + C8-96-65 (hex) Microsoft Corporation C89665 (base 16) Microsoft Corporation One Microsoft Way REDMOND WA 98052 US -0C-E5-A3 (hex) SharkNinja -0CE5A3 (base 16) SharkNinja - 85 Cude Ln - Madison TN 37115 - US - -6C-91-06 (hex) Private -6C9106 (base 16) Private - 40-91-51 (hex) Espressif Inc. 409151 (base 16) Espressif Inc. Room 204, Building 2, 690 Bibo Rd, Pudong New Area Shanghai Shanghai 201203 CN +8C-7A-3D (hex) Xiaomi Communications Co Ltd +8C7A3D (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +98-7E-E3 (hex) vivo Mobile Communication Co., Ltd. +987EE3 (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road + Wusha,Chang'An DongGuan City,Guangdong, 523860 + CN + +30-5F-77 (hex) New H3C Technologies Co., Ltd +305F77 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +34-31-7F (hex) Panasonic Appliances Company +34317F (base 16) Panasonic Appliances Company + 2-3-1-2 Noji-higashi + Kusatsu City Shiga 525-8555 + JP + +F4-EE-08 (hex) Dell Inc. +F4EE08 (base 16) Dell Inc. + One Dell Way + Round Rock TX 78682 + US + +8C-7A-AA (hex) Apple, Inc. +8C7AAA (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +7C-24-99 (hex) Apple, Inc. +7C2499 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +10-00-20 (hex) Apple, Inc. +100020 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +94-64-24 (hex) Aruba, a Hewlett Packard Enterprise Company +946424 (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 + US + +BC-1E-85 (hex) HUAWEI TECHNOLOGIES CO.,LTD +BC1E85 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +B8-56-00 (hex) HUAWEI TECHNOLOGIES CO.,LTD +B85600 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE @@ -159197,12 +159515,6 @@ E89AFF (base 16) Fujian LANDI Commercial Equipment Co.,Ltd beijing beijing 100086 CN -28-D2-44 (hex) LCFC(HeFei) Electronics Technology Co., Ltd. -28D244 (base 16) LCFC(HeFei) Electronics Technology Co., Ltd. - 6 Cui Wei Road - Hefei Anhui 230000 - CN - B4-DF-3B (hex) Chromlech B4DF3B (base 16) Chromlech 19 av. Gabriel Faure @@ -167708,12 +168020,6 @@ EC6C9F (base 16) Chengdu Volans Technology CO.,LTD Burnsville Minnesota 55306-4898 US -00-11-32 (hex) Synology Incorporated -001132 (base 16) Synology Incorporated - 6F-2, No.106, Chang An W. Rd., - Taipei 103 - TW - 00-11-4B (hex) Francotyp-Postalia GmbH 00114B (base 16) Francotyp-Postalia GmbH Triftweg 21-26 @@ -179675,12 +179981,6 @@ E8DA00 (base 16) Kivo Technology, Inc. Kirkland 98033 US -CC-B5-D1 (hex) Beijing Xiaomi Mobile Software Co., Ltd -CCB5D1 (base 16) Beijing Xiaomi Mobile Software Co., Ltd - The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District - Beijing Beijing 100085 - CN - 78-D6-DC (hex) Motorola (Wuhan) Mobility Technologies Communication Co., Ltd. 78D6DC (base 16) Motorola (Wuhan) Mobility Technologies Communication Co., Ltd. No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan @@ -179693,66 +179993,54 @@ CCB5D1 (base 16) Beijing Xiaomi Mobile Software Co., Ltd Austin TX 78701 US +F4-C0-2F (hex) BlueBite +F4C02F (base 16) BlueBite + 230, Simin-daero + Anyang-si Gyeonggi-do 14067 + KR + 78-86-B6 (hex) Shenzhen YOUHUA Technology Co., Ltd 7886B6 (base 16) Shenzhen YOUHUA Technology Co., Ltd Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District Shenzhen Guangdong 518055 CN +CC-B5-D1 (hex) Beijing Xiaomi Mobile Software Co., Ltd +CCB5D1 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District + Beijing Beijing 100085 + CN + 24-E1-24 (hex) Xiamen Milesight IoT Co., Ltd. 24E124 (base 16) Xiamen Milesight IoT Co., Ltd. 4/F, No. 63-2 Wanghai Road, 2nd Software Park Xiamen Fujian 361008 CN -F4-C0-2F (hex) BlueBite -F4C02F (base 16) BlueBite - 230, Simin-daero - Anyang-si Gyeonggi-do 14067 - KR - -98-F0-83 (hex) HUAWEI TECHNOLOGIES CO.,LTD -98F083 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +28-FB-AE (hex) HUAWEI TECHNOLOGIES CO.,LTD +28FBAE (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park Dongguan 523808 CN -8C-64-A2 (hex) OnePlus Technology (Shenzhen) Co., Ltd -8C64A2 (base 16) OnePlus Technology (Shenzhen) Co., Ltd - 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING, - Shenzhen Guangdong 518000 - CN - -D0-54-75 (hex) SAVI Controls -D05475 (base 16) SAVI Controls - 2420 Tarpley Rd, Suite 205 - Carrollton TX 75006 - US - 88-A0-BE (hex) HUAWEI TECHNOLOGIES CO.,LTD 88A0BE (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park Dongguan 523808 CN -94-90-10 (hex) HUAWEI TECHNOLOGIES CO.,LTD -949010 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -28-FB-AE (hex) HUAWEI TECHNOLOGIES CO.,LTD -28FBAE (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - A4-78-06 (hex) Cisco Systems, Inc A47806 (base 16) Cisco Systems, Inc 80 West Tasman Drive San Jose CA 94568 US +D0-54-75 (hex) SAVI Controls +D05475 (base 16) SAVI Controls + 2420 Tarpley Rd, Suite 205 + Carrollton TX 75006 + US + 08-05-E2 (hex) Juniper Networks 0805E2 (base 16) Juniper Networks 1133 Innovation Way @@ -179765,6 +180053,12 @@ B8D56B (base 16) Mirka Ltd. Jeppo 66850 FI +B8-A1-4A (hex) Raisecom Technology CO.,LTD +B8A14A (base 16) Raisecom Technology CO.,LTD + No. 11, East Area, No. 10 Block, East Xibeiwang Road + Beijing 100094 + CN + BC-A3-7F (hex) Rail-Mil Sp. z o.o. Sp. K. BCA37F (base 16) Rail-Mil Sp. z o.o. Sp. K. Kosmatki 82 @@ -179777,21 +180071,30 @@ BCA37F (base 16) Rail-Mil Sp. z o.o. Sp. K. San Jose CA 95110 US +94-90-10 (hex) HUAWEI TECHNOLOGIES CO.,LTD +949010 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +98-F0-83 (hex) HUAWEI TECHNOLOGIES CO.,LTD +98F083 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +8C-64-A2 (hex) OnePlus Technology (Shenzhen) Co., Ltd +8C64A2 (base 16) OnePlus Technology (Shenzhen) Co., Ltd + 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING, + Shenzhen Guangdong 518000 + CN + 28-FA-19 (hex) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd 28FA19 (base 16) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd 3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District Shenzhen Guangdong 518055 CN -64-B3-79 (hex) Private -64B379 (base 16) Private - -50-09-E5 (hex) Drimsys,Inc -5009E5 (base 16) Drimsys,Inc - 147, Baumoe-ro - Seocho-gu Seoul 06752 - KR - 20-3C-C0 (hex) Beijing Tosee Technology Co., Ltd. 203CC0 (base 16) Beijing Tosee Technology Co., Ltd. Room S125, 1st Floor, Building 1, No. 9, Keyuan Road, Economic Development Zone, Daxing District @@ -179804,17 +180107,14 @@ D8A011 (base 16) WiZ Kowloon Bay Hong Kong 0000 HK -B8-A1-4A (hex) Raisecom Technology CO.,LTD -B8A14A (base 16) Raisecom Technology CO.,LTD - No. 11, East Area, No. 10 Block, East Xibeiwang Road - Beijing 100094 - CN +50-09-E5 (hex) Drimsys,Inc +5009E5 (base 16) Drimsys,Inc + 147, Baumoe-ro + Seocho-gu Seoul 06752 + KR -AC-7A-42 (hex) iConnectivity -AC7A42 (base 16) iConnectivity - 4620 Manilla Road SE, Unit 58 - Calgary Alberta T2G 4B7 - CA +64-B3-79 (hex) Private +64B379 (base 16) Private 28-DF-EB (hex) Intel Corporate 28DFEB (base 16) Intel Corporate @@ -179828,17 +180128,23 @@ AC7A42 (base 16) iConnectivity Aachen NRW 52068 DE +AC-7A-42 (hex) iConnectivity +AC7A42 (base 16) iConnectivity + 4620 Manilla Road SE, Unit 58 + Calgary Alberta T2G 4B7 + CA + 48-9E-BD (hex) HP Inc. 489EBD (base 16) HP Inc. 10300 Energy Dr Spring TX 77389 US -08-00-37 (hex) FUJIFILM Business Innovation Corp. -080037 (base 16) FUJIFILM Business Innovation Corp. - ADVANCED TECH & ENG'G CENTER - Yokohama 220-8668 - JP +00-30-59 (hex) Kontron Europe GmbH +003059 (base 16) Kontron Europe GmbH + Nordstrasse 11/F + LUTERBACH 4542 + CH 88-8E-7F (hex) ATOP CORPORATION 888E7F (base 16) ATOP CORPORATION @@ -179852,24 +180158,12 @@ E8EDD6 (base 16) Fortinet, Inc. Sunnyvale 94086 US -00-30-59 (hex) Kontron Europe GmbH -003059 (base 16) Kontron Europe GmbH - Nordstrasse 11/F - LUTERBACH 4542 - CH - 54-77-87 (hex) Earda Technologies co Ltd 547787 (base 16) Earda Technologies co Ltd Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District Guangzhou Guangdong 511455 CN -5C-0C-E6 (hex) Nintendo Co.,Ltd -5C0CE6 (base 16) Nintendo Co.,Ltd - 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU - KYOTO KYOTO 601-8501 - JP - D0-C2-4E (hex) Samsung Electronics Co.,Ltd D0C24E (base 16) Samsung Electronics Co.,Ltd 129, Samsung-ro, Youngtongl-Gu @@ -179882,28 +180176,22 @@ D0C24E (base 16) Samsung Electronics Co.,Ltd Marin-Epagnier Neuchatel 2074 CH -70-CD-0D (hex) Intel Corporate -70CD0D (base 16) Intel Corporate - Lot 8, Jalan Hi-Tech 2/3 - Kulim Kedah 09000 - MY - -04-39-26 (hex) China Dragon Technology Limited -043926 (base 16) China Dragon Technology Limited - B4 Bldg.Haoshan 1st Industry Park, - Shenzhen Guangdong 518104 - CN - -BC-6E-64 (hex) Sony Corporation -BC6E64 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 +08-00-37 (hex) FUJIFILM Business Innovation Corp. +080037 (base 16) FUJIFILM Business Innovation Corp. + ADVANCED TECH & ENG'G CENTER + Yokohama 220-8668 JP -40-40-A7 (hex) Sony Corporation -4040A7 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 +84-01-12 (hex) Kaonmedia CO., LTD. +840112 (base 16) Kaonmedia CO., LTD. + 884-3, Seongnam-daero, Bundang-gu + Seongnam-si Gyeonggi-do 13517 + KR + +5C-0C-E6 (hex) Nintendo Co.,Ltd +5C0CE6 (base 16) Nintendo Co.,Ltd + 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU + KYOTO KYOTO 601-8501 JP B4-52-7D (hex) Sony Corporation @@ -179930,18 +180218,48 @@ B4527D (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -40-2B-A1 (hex) Sony Corporation -402BA1 (base 16) Sony Corporation +44-D4-E0 (hex) Sony Corporation +44D4E0 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP -00-18-13 (hex) Sony Corporation -001813 (base 16) Sony Corporation +44-74-6C (hex) Sony Corporation +44746C (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa Shinagawa-ku Tokyo 140-0002 JP +BC-6E-64 (hex) Sony Corporation +BC6E64 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP + +40-40-A7 (hex) Sony Corporation +4040A7 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP + +04-39-26 (hex) China Dragon Technology Limited +043926 (base 16) China Dragon Technology Limited + B4 Bldg.Haoshan 1st Industry Park, + Shenzhen Guangdong 518104 + CN + +70-CD-0D (hex) Intel Corporate +70CD0D (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +A0-C4-A5 (hex) SYGN HOUSE INC. +A0C4A5 (base 16) SYGN HOUSE INC. + 2-9-14 Tamagawa-denenchofu + Setagaya-ku Tokyo 1580085 + JP + 00-1D-28 (hex) Sony Corporation 001D28 (base 16) Sony Corporation 4-12-3 Higashi – Shinagawa @@ -179954,24 +180272,6 @@ B4527D (base 16) Sony Corporation Shinagawa-ku Tokyo 140-0002 JP -84-01-12 (hex) Kaonmedia CO., LTD. -840112 (base 16) Kaonmedia CO., LTD. - 884-3, Seongnam-daero, Bundang-gu - Seongnam-si Gyeonggi-do 13517 - KR - -44-D4-E0 (hex) Sony Corporation -44D4E0 (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - -44-74-6C (hex) Sony Corporation -44746C (base 16) Sony Corporation - 4-12-3 Higashi – Shinagawa - Shinagawa-ku Tokyo 140-0002 - JP - 28-3F-69 (hex) Sony Corporation 283F69 (base 16) Sony Corporation 1-7-1 Konan Minato-ku @@ -179984,12 +180284,6 @@ B4527D (base 16) Sony Corporation Tokyo 108-0075 JP -A0-C4-A5 (hex) SYGN HOUSE INC. -A0C4A5 (base 16) SYGN HOUSE INC. - 2-9-14 Tamagawa-denenchofu - Setagaya-ku Tokyo 1580085 - JP - 68-81-E0 (hex) HUAWEI TECHNOLOGIES CO.,LTD 6881E0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park @@ -180020,10 +180314,10 @@ D86D17 (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN -D0-4D-C6 (hex) Aruba, a Hewlett Packard Enterprise Company -D04DC6 (base 16) Aruba, a Hewlett Packard Enterprise Company - 3333 Scott Blvd - Santa Clara CA 95054 +AC-49-DB (hex) Apple, Inc. +AC49DB (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 US 44-F0-9E (hex) Apple, Inc. @@ -180038,23 +180332,23 @@ D04DC6 (base 16) Aruba, a Hewlett Packard Enterprise Company Cupertino CA 95014 US -1C-93-C4 (hex) Amazon Technologies Inc. -1C93C4 (base 16) Amazon Technologies Inc. - P.O Box 8102 - Reno NV 89507 +D0-4D-C6 (hex) Aruba, a Hewlett Packard Enterprise Company +D04DC6 (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 US -AC-49-DB (hex) Apple, Inc. -AC49DB (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US +40-2B-A1 (hex) Sony Corporation +402BA1 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP -18-56-C3 (hex) Apple, Inc. -1856C3 (base 16) Apple, Inc. - 1 Infinite Loop - Cupertino CA 95014 - US +00-18-13 (hex) Sony Corporation +001813 (base 16) Sony Corporation + 4-12-3 Higashi – Shinagawa + Shinagawa-ku Tokyo 140-0002 + JP 48-18-8D (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD 48188D (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD @@ -180068,11 +180362,11 @@ AC49DB (base 16) Apple, Inc. Tianjin 300385 CN -38-D5-7A (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. -38D57A (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. - B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China - Nanning Guangxi 530007 - CN +68-F3-8E (hex) Juniper Networks +68F38E (base 16) Juniper Networks + 1133 Innovation Way + Sunnyvale CA 94089 + US 7C-87-CE (hex) Espressif Inc. 7C87CE (base 16) Espressif Inc. @@ -180086,23 +180380,29 @@ AC49DB (base 16) Apple, Inc. Chengdu Sichuan 611330 CN +1C-93-C4 (hex) Amazon Technologies Inc. +1C93C4 (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + 44-E5-17 (hex) Intel Corporate 44E517 (base 16) Intel Corporate Lot 8, Jalan Hi-Tech 2/3 Kulim Kedah 09000 MY -68-F3-8E (hex) Juniper Networks -68F38E (base 16) Juniper Networks - 1133 Innovation Way - Sunnyvale CA 94089 +18-56-C3 (hex) Apple, Inc. +1856C3 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 US -74-5D-43 (hex) BSH Hausgeraete GmbH -745D43 (base 16) BSH Hausgeraete GmbH - Im Gewerbepark B10 - Regensburg 93059 - DE +78-5F-36 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +785F36 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd + 4F,Block A, Skyworth?Building, + Shenzhen Guangdong 518057 + CN 70-A5-6A (hex) Shenzhen C-Data Technology Co., Ltd. 70A56A (base 16) Shenzhen C-Data Technology Co., Ltd. @@ -180110,10 +180410,16 @@ AC49DB (base 16) Apple, Inc. Shenzhen Guangdong 518055 CN -78-5F-36 (hex) Shenzhen Skyworth Digital Technology CO., Ltd -785F36 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd - 4F,Block A, Skyworth?Building, - Shenzhen Guangdong 518057 +74-5D-43 (hex) BSH Hausgeraete GmbH +745D43 (base 16) BSH Hausgeraete GmbH + Im Gewerbepark B10 + Regensburg 93059 + DE + +38-D5-7A (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +38D57A (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China + Nanning Guangxi 530007 CN A0-18-42 (hex) Comtrend Corporation @@ -180128,12 +180434,6 @@ A01842 (base 16) Comtrend Corporation Roseville CA 95747 US -EC-94-D5 (hex) Juniper Networks -EC94D5 (base 16) Juniper Networks - 1133 Innovation Way - Sunnyvale CA 94089 - US - 70-1F-0B (hex) WILOGY SRL 701F0B (base 16) WILOGY SRL VIA BOSCO SNC @@ -180146,22 +180446,10 @@ EC94D5 (base 16) Juniper Networks Gothenburg 411 03 SE -64-6D-4E (hex) HUAWEI TECHNOLOGIES CO.,LTD -646D4E (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -08-5C-1B (hex) HUAWEI TECHNOLOGIES CO.,LTD -085C1B (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 - CN - -50-9A-88 (hex) HUAWEI TECHNOLOGIES CO.,LTD -509A88 (base 16) HUAWEI TECHNOLOGIES CO.,LTD - No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park - Dongguan 523808 +D0-9C-AE (hex) vivo Mobile Communication Co., Ltd. +D09CAE (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road + Wusha,Chang'An DongGuan City,Guangdong, 523860 CN 50-6F-0C (hex) Sagemcom Broadband SAS @@ -180182,12 +180470,6 @@ A0445C (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN -D0-9C-AE (hex) vivo Mobile Communication Co., Ltd. -D09CAE (base 16) vivo Mobile Communication Co., Ltd. - #283,BBK Road - Wusha,Chang'An DongGuan City,Guangdong, 523860 - CN - 7C-2A-DB (hex) Xiaomi Communications Co Ltd 7C2ADB (base 16) Xiaomi Communications Co Ltd #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road @@ -180206,16 +180488,22 @@ D09CAE (base 16) vivo Mobile Communication Co., Ltd. Beijing Haidian District 100085 CN -50-3D-C6 (hex) Xiaomi Communications Co Ltd -503DC6 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 +64-6D-4E (hex) HUAWEI TECHNOLOGIES CO.,LTD +646D4E (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 CN -8C-D9-D6 (hex) Xiaomi Communications Co Ltd -8CD9D6 (base 16) Xiaomi Communications Co Ltd - #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road - Beijing Haidian District 100085 +08-5C-1B (hex) HUAWEI TECHNOLOGIES CO.,LTD +085C1B (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +50-9A-88 (hex) HUAWEI TECHNOLOGIES CO.,LTD +509A88 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 CN 44-A6-42 (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. @@ -180236,12 +180524,36 @@ D48660 (base 16) Arcadyan Corporation Hsinchu City Hsinchu 30071 TW +EC-94-D5 (hex) Juniper Networks +EC94D5 (base 16) Juniper Networks + 1133 Innovation Way + Sunnyvale CA 94089 + US + B8-3B-CC (hex) Xiaomi Communications Co Ltd B83BCC (base 16) Xiaomi Communications Co Ltd #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road Beijing Haidian District 100085 CN +20-41-81 (hex) ESYSE GmbH Embedded Systems Engineering +204181 (base 16) ESYSE GmbH Embedded Systems Engineering + Ruth-Niehaus Str. 8 + Meerbusch Nordrhein-Westfalen 40667 + DE + +50-3D-C6 (hex) Xiaomi Communications Co Ltd +503DC6 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +8C-D9-D6 (hex) Xiaomi Communications Co Ltd +8CD9D6 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + 88-D1-99 (hex) Vencer Co., Ltd. 88D199 (base 16) Vencer Co., Ltd. 14F-12, No. 79, Section 1, Hsin Tai Wu Road, Hsi-Chih District, @@ -180254,12 +180566,6 @@ CCE236 (base 16) Hangzhou Yaguan Technology Co. LTD Hangzhou Zhejiang 311100 CN -20-41-81 (hex) ESYSE GmbH Embedded Systems Engineering -204181 (base 16) ESYSE GmbH Embedded Systems Engineering - Ruth-Niehaus Str. 8 - Meerbusch Nordrhein-Westfalen 40667 - DE - DC-BB-96 (hex) Full Solution Telecom DCBB96 (base 16) Full Solution Telecom Calle 130A #59C-42, Barrio Ciudad Jardin Norte @@ -180272,12 +180578,6 @@ DCBB96 (base 16) Full Solution Telecom Shanghai 200233 CN -B4-37-D8 (hex) D-Link (Shanghai) Limited Corp. -B437D8 (base 16) D-Link (Shanghai) Limited Corp. - Room 612, Floor 6, No.88, Taigu Road, - Shanghai 200131 - CN - 9C-D5-7D (hex) Cisco Systems, Inc 9CD57D (base 16) Cisco Systems, Inc 80 West Tasman Drive @@ -180290,11 +180590,11 @@ B437D8 (base 16) D-Link (Shanghai) Limited Corp. Austin TX 78730 US -80-D2-E5 (hex) Nintendo Co.,Ltd -80D2E5 (base 16) Nintendo Co.,Ltd - 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU - KYOTO KYOTO 601-8501 - JP +70-66-E1 (hex) dnt Innovation GmbH +7066E1 (base 16) dnt Innovation GmbH + Maiburger Straße 29 + Leer 26789 + DE F8-CE-72 (hex) Wistron Corporation F8CE72 (base 16) Wistron Corporation @@ -180308,6 +180608,12 @@ CC9DA2 (base 16) Eltex Enterprise Ltd. Novosibirsk 630020 RU +80-D2-E5 (hex) Nintendo Co.,Ltd +80D2E5 (base 16) Nintendo Co.,Ltd + 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU + KYOTO KYOTO 601-8501 + JP + 60-53-75 (hex) HUAWEI TECHNOLOGIES CO.,LTD 605375 (base 16) HUAWEI TECHNOLOGIES CO.,LTD No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park @@ -180326,47 +180632,29 @@ A031DB (base 16) HUAWEI TECHNOLOGIES CO.,LTD Dongguan 523808 CN -58-BF-25 (hex) Espressif Inc. -58BF25 (base 16) Espressif Inc. - Room 204, Building 2, 690 Bibo Rd, Pudong New Area - Shanghai Shanghai 201203 +B4-37-D8 (hex) D-Link (Shanghai) Limited Corp. +B437D8 (base 16) D-Link (Shanghai) Limited Corp. + Room 612, Floor 6, No.88, Taigu Road, + Shanghai 200131 CN -10-13-31 (hex) Technicolor Delivery Technologies Belgium NV -101331 (base 16) Technicolor Delivery Technologies Belgium NV - Prins Boudewijnlaan 47 - Edegem - Belgium B-2650 - BE - 00-40-66 (hex) APRESIA Systems Ltd 004066 (base 16) APRESIA Systems Ltd Tsukuba Network Technical Center, Kidamari 3550 Tsuchiura-shi Ibaraki-ken 300-0026 JP -70-66-E1 (hex) dnt Innovation GmbH -7066E1 (base 16) dnt Innovation GmbH - Maiburger Straße 29 - Leer 26789 - DE - 2C-35-57 (hex) ELIIY Power CO., Ltd. 2C3557 (base 16) ELIIY Power CO., Ltd. 1-6-4, Osaki Shinagawa-ku 141-0032 JP -08-00-42 (hex) MACNICA, Inc. -080042 (base 16) MACNICA, Inc. - 1-6-3 Shin-Yokohama - Kohoku-ku Yokohama 222-8561 - JP - -54-6F-71 (hex) uAvionix Corporation -546F71 (base 16) uAvionix Corporation - 300 Pine Needle Lane - Bigfork MT 59911 - US +5C-75-C6 (hex) China Mobile Group Device Co.,Ltd. +5C75C6 (base 16) China Mobile Group Device Co.,Ltd. + 32 Xuanwumen West Street,Xicheng District + Beijing 100053 + CN 54-EF-33 (hex) SHENZHEN BILIAN ELECTRONIC CO.,LTD 54EF33 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD @@ -180380,20 +180668,158 @@ A031DB (base 16) HUAWEI TECHNOLOGIES CO.,LTD Beijing 102209 CN -5C-75-C6 (hex) China Mobile Group Device Co.,Ltd. -5C75C6 (base 16) China Mobile Group Device Co.,Ltd. - 32 Xuanwumen West Street,Xicheng District - Beijing 100053 +58-BF-25 (hex) Espressif Inc. +58BF25 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 CN +10-13-31 (hex) Technicolor Delivery Technologies Belgium NV +101331 (base 16) Technicolor Delivery Technologies Belgium NV + Prins Boudewijnlaan 47 + Edegem - Belgium B-2650 + BE + 44-48-B9 (hex) MitraStar Technology Corp. 4448B9 (base 16) MitraStar Technology Corp. No. 6, Innovation Road II, Hsinchu 300 TW +08-00-42 (hex) MACNICA, Inc. +080042 (base 16) MACNICA, Inc. + 1-6-3 Shin-Yokohama + Kohoku-ku Yokohama 222-8561 + JP + +A0-D0-5B (hex) Samsung Electronics Co.,Ltd +A0D05B (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu + Suwon Gyeonggi-Do 16677 + KR + +04-D4-42 (hex) GUANGDONG GENIUS TECHNOLOGY CO., LTD. +04D442 (base 16) GUANGDONG GENIUS TECHNOLOGY CO., LTD. + No.168, Middle Road Of East Gate + Xiaobian Community Chang'an Town 523851 + CN + +54-6F-71 (hex) uAvionix Corporation +546F71 (base 16) uAvionix Corporation + 300 Pine Needle Lane + Bigfork MT 59911 + US + A4-E1-1A (hex) Juniper Networks A4E11A (base 16) Juniper Networks 1133 Innovation Way Sunnyvale CA 94089 US + +E8-6E-44 (hex) zte corporation +E86E44 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +00-E7-E3 (hex) zte corporation +00E7E3 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +9C-54-C2 (hex) New H3C Technologies Co., Ltd +9C54C2 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +78-E9-CF (hex) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO +78E9CF (base 16) TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO + Av. Buriti, 1900 – Setor B – Distrito Industrial + Manaus Amazonas 69075-000 + BR + +24-D7-EB (hex) Espressif Inc. +24D7EB (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +FC-1D-2A (hex) vivo Mobile Communication Co., Ltd. +FC1D2A (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road + Wusha,Chang'An DongGuan City,Guangdong, 523860 + CN + +B4-20-46 (hex) eero inc. +B42046 (base 16) eero inc. + 660 3rd Street + San Francisco CA 94107 + US + +00-11-32 (hex) Synology Incorporated +001132 (base 16) Synology Incorporated + 9F., No.1, Yuandong Rd., Banqiao Dist., + New Taipei City 220632 + TW + +90-09-D0 (hex) Synology Incorporated +9009D0 (base 16) Synology Incorporated + 9F., No.1, Yuandong Rd., Banqiao Dist., + New Taipei City 220632 + TW + +A0-9F-7A (hex) D-Link Middle East FZCO +A09F7A (base 16) D-Link Middle East FZCO + PIot No.S31102, PO Box:18224, Jebel Ali Free Zone,Dubai,UAE + Dubai 18224 + AE + +28-D2-44 (hex) LCFC(HeFei) Electronics Technology co., ltd +28D244 (base 16) LCFC(HeFei) Electronics Technology co., ltd + 6 Cui Wei Road + Hefei Anhui 230000 + CN + +20-32-C6 (hex) Apple, Inc. +2032C6 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +5C-52-30 (hex) Apple, Inc. +5C5230 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +64-5A-36 (hex) Apple, Inc. +645A36 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +6C-71-D2 (hex) HUAWEI TECHNOLOGIES CO.,LTD +6C71D2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +F8-00-A1 (hex) HUAWEI TECHNOLOGIES CO.,LTD +F800A1 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +D8-76-AE (hex) HUAWEI TECHNOLOGIES CO.,LTD +D876AE (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +0C-84-08 (hex) HUAWEI TECHNOLOGIES CO.,LTD +0C8408 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt index 0849b9669..dffda4165 100644 --- a/hwdb.d/ma-medium.txt +++ b/hwdb.d/ma-medium.txt @@ -4598,18 +4598,24 @@ B00000-BFFFFF (base 16) Amethystum Storage Technology Co., Ltd Walnut CA 91789 US -64-33-B5 (hex) Geksacon -C00000-CFFFFF (base 16) Geksacon - revolutionary street - Ufa Republic of Bashkortostan 450005 - RU - 04-71-4B (hex) uAvionix Corporation 100000-1FFFFF (base 16) uAvionix Corporation 300 Pine Needle Lane Bigfork MT 59911 US +28-36-13 (hex) shenzhen technology limited +700000-7FFFFF (base 16) shenzhen technology limited + 903,No. 1 Shifeng Building, Xinzhuang Community Villa Road, Matian Street, Guangming District, Shenzhen City + Shenzhen Guangdong 518000 + CN + +64-33-B5 (hex) Geksacon +C00000-CFFFFF (base 16) Geksacon + Revolutionary Street 78 + Ufa Republic of Bashkortostan 450005 + RU + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district @@ -8810,12 +8816,24 @@ B00000-BFFFFF (base 16) Daatrics LTD Kwai Chung NT 999077 HK +28-36-13 (hex) Qingdao Airpoint Electronics Co.,Ltd. +900000-9FFFFF (base 16) Qingdao Airpoint Electronics Co.,Ltd. + Yuhuangling industrial Park, Xiazhuang-Rd, Chengyang-Qu + QingDao City ShanDong Province 266109 + CN + 64-33-B5 (hex) University of Texas at Austin E00000-EFFFFF (base 16) University of Texas at Austin 1 University Station C3800 Austin TX 78713-7407 US +28-36-13 (hex) Elytone Electronic Co., Ltd. +400000-4FFFFF (base 16) Elytone Electronic Co., Ltd. + #218, Sec.2, Chung Cheng Road + San-Hsia District, New Taipei City 23742 + TW + 20-85-93 (hex) UNILUMIN GROUP CO.,LTD 300000-3FFFFF (base 16) UNILUMIN GROUP CO.,LTD No.112 Yongfu Rd.,BaoanDistrict, @@ -13319,6 +13337,24 @@ D00000-DFFFFF (base 16) IIYAMA CORPORATION Hoofddorp 2131HA NL +28-36-13 (hex) Linear Computing Inc. +300000-3FFFFF (base 16) Linear Computing Inc. + 110 Galaxy Blvd + Etobicoke Ontario M9W 4Y6 + CA + +28-36-13 (hex) Hi-p (Suzhou) Electronics Co,Ltd +100000-1FFFFF (base 16) Hi-p (Suzhou) Electronics Co,Ltd + 5th floor, building G, no. 2337 gudai road (weijing center) + Shanghai minhang district 215128 + CN + +78-5E-E8 (hex) Yake (Tianjin) Technology Co.,Ltd. +A00000-AFFFFF (base 16) Yake (Tianjin) Technology Co.,Ltd. + No.2, Zhengtong Road, Caozili Town, Wuqing District, Tianjin + Tianjin Tianjin 301727 + CN + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone @@ -17693,6 +17729,24 @@ C00000-CFFFFF (base 16) Haag-Streit AG China Guang Dong 518000 CN +28-36-13 (hex) Shandong SIASUN Industrial Software Research Institute Co., Ltd +000000-0FFFFF (base 16) Shandong SIASUN Industrial Software Research Institute Co., Ltd + Rm301,Artificial Intelligence Building,Jingshi Road,Jinan Area Of China(Shandong) Pilot Free Trade Zone + jinan 250000 + CN + +28-36-13 (hex) AVYCON +D00000-DFFFFF (base 16) AVYCON + 16682 Millikan Ave + Irvine CA 92606 + US + +28-36-13 (hex) ESI Ventures, LLC +600000-6FFFFF (base 16) ESI Ventures, LLC + 2085 Humphrey Street + Fort Wayne IN 46803 + US + 20-85-93 (hex) Great Lite International 700000-7FFFFF (base 16) Great Lite International 11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist., @@ -22195,3 +22249,39 @@ B00000-BFFFFF (base 16) electroCore Inc. Matam Scientific Industries Center, Building 8.2 Mail box 15123 Haifa 3508409 IL + +28-36-13 (hex) midBit Technologies, LLC +C00000-CFFFFF (base 16) midBit Technologies, LLC + 153 Homestead Ln + Romney WV 26757 + US + +28-36-13 (hex) Turing Video +500000-5FFFFF (base 16) Turing Video + 1730 S El Camino Real, Suite 350 + San Mateo CA 94402 + US + +28-36-13 (hex) MAKEEN Energy +A00000-AFFFFF (base 16) MAKEEN Energy + Alsvej 21 + Randers 8940 + DK + +28-36-13 (hex) Fuzhou Lesi Intelligent Technology Co., Ltd +800000-8FFFFF (base 16) Fuzhou Lesi Intelligent Technology Co., Ltd + Room 1-3-5, north 9 / F, building 1, Fujian hi tech Pioneer Park, 611 Gongye Road, Gulou District + Fuzhou Fujian 350000 + CN + +28-36-13 (hex) EGMedical, s.r.o. +E00000-EFFFFF (base 16) EGMedical, s.r.o. + KRENOVA 19 + Brno JHMK 60200 + CZ + +28-36-13 (hex) Qorvo, Inc. +B00000-BFFFFF (base 16) Qorvo, Inc. + 500 W. Renner Road + Richardson TX 75080 + US diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt index c874b87d2..5488e6cc8 100644 --- a/hwdb.d/ma-small.txt +++ b/hwdb.d/ma-small.txt @@ -5117,18 +5117,18 @@ E05000-E05FFF (base 16) Lobaro GmbH Malaga Malaga 29590 ES -70-B3-D5 (hex) HORIZON.INC -69B000-69BFFF (base 16) HORIZON.INC - 1600 Aza-Shironoshita Asahi - Shin Asahi-cho Takashima, Shiga 520-1501 - JP - 70-B3-D5 (hex) aelettronica group srl A14000-A14FFF (base 16) aelettronica group srl via matteotti,22 gaggiano milano 20083 IT +70-B3-D5 (hex) HORIZON.INC +69B000-69BFFF (base 16) HORIZON.INC + 1600 Aza-Shironoshita Asahi + Shin Asahi-cho Takashima, Shiga 520-1501 + JP + 70-B3-D5 (hex) MedRx, Inc 3B6000-3B6FFF (base 16) MedRx, Inc 1200 Starkey Rd Ste.105 @@ -5147,18 +5147,18 @@ A14000-A14FFF (base 16) aelettronica group srl Gothenburg Västra Götaland 41250 SE -70-B3-D5 (hex) Vendanor AS -D0B000-D0BFFF (base 16) Vendanor AS - Grandevegen 13 - Stryn 6783 - NO - 70-B3-D5 (hex) Tinkerforge GmbH 509000-509FFF (base 16) Tinkerforge GmbH Zur Brinke 7 Schloss Holte-Stukenbrock NRW 33758 DE +70-B3-D5 (hex) Vendanor AS +D0B000-D0BFFF (base 16) Vendanor AS + Grandevegen 13 + Stryn 6783 + NO + 70-B3-D5 (hex) 4neXt S.r.l.s. E41000-E41FFF (base 16) 4neXt S.r.l.s. Via Leonardo da Vinci 15/4 @@ -5189,18 +5189,18 @@ F41000-F41FFF (base 16) AUTOMATIZACION Y CONECTIVIDAD SA DE CV PORCIA PORDENONE 330850 IT -8C-1F-64 (hex) LLC EMS-Expert -21C000-21CFFF (base 16) LLC EMS-Expert - Gorodskoy, st., d.39,1 - Tula Tula region 300012 - RU - 8C-1F-64 (hex) Gamber Johnson-LLC 42B000-42BFFF (base 16) Gamber Johnson-LLC 3001 Borham Ave Stevens Point WI 54481 US +8C-1F-64 (hex) LLC EMS-Expert +21C000-21CFFF (base 16) LLC EMS-Expert + Gorodskoy, st., d.39,1 + Tula Tula region 300012 + RU + 8C-1F-64 (hex) Green Access Ltd 878000-878FFF (base 16) Green Access Ltd Unit 1 Kensworthgate 200-204 High Street South @@ -5225,11 +5225,11 @@ B9A000-B9AFFF (base 16) QUERCUS TECHNOLOGIES, S.L. LOS ANGELES CA 90067 US -8C-1F-64 (hex) Arcopie -28A000-28AFFF (base 16) Arcopie - Office 438, YTC, 847, Buheung-ro, Gwangjeok-myeon - Yangju-si Alabama 11416 - KR +8C-1F-64 (hex) Pixel Design & Manufacturing Sdn. Bhd. +CE3000-CE3FFF (base 16) Pixel Design & Manufacturing Sdn. Bhd. + 87, Jalan 20/7, Paramount Garden + Petaling Jaya Selangor 46300 + MY 8C-1F-64 (hex) Prosys A5C000-A5CFFF (base 16) Prosys @@ -5237,29 +5237,17 @@ A5C000-A5CFFF (base 16) Prosys fillinges 74250 FR -8C-1F-64 (hex) Pixel Design & Manufacturing Sdn. Bhd. -CE3000-CE3FFF (base 16) Pixel Design & Manufacturing Sdn. Bhd. - 87, Jalan 20/7, Paramount Garden - Petaling Jaya Selangor 46300 - MY - -8C-1F-64 (hex) Antai technology Co.,Ltd -72C000-72CFFF (base 16) Antai technology Co.,Ltd - T2-704, No.159 Shenwu Road, Minhang District - Shanghai Shanghai 201100 - CN - 8C-1F-64 (hex) mapna group 768000-768FFF (base 16) mapna group mirdamad Tehran 0512258788 IR -8C-1F-64 (hex) Esys Srl -C1F000-C1FFFF (base 16) Esys Srl - via Spagna 240/242 - Rende Calabria 87036 - IT +8C-1F-64 (hex) Arcopie +28A000-28AFFF (base 16) Arcopie + Office 438, YTC, 847, Buheung-ro, Gwangjeok-myeon + Yangju-si Alabama 11416 + KR 8C-1F-64 (hex) Sicon srl 193000-193FFF (base 16) Sicon srl @@ -5267,12 +5255,42 @@ C1F000-C1FFFF (base 16) Esys Srl Isola Vicentina Vicenza 36033 IT +8C-1F-64 (hex) Antai technology Co.,Ltd +72C000-72CFFF (base 16) Antai technology Co.,Ltd + T2-704, No.159 Shenwu Road, Minhang District + Shanghai Shanghai 201100 + CN + 8C-1F-64 (hex) YULISTA INTEGRATED SOLUTION 128000-128FFF (base 16) YULISTA INTEGRATED SOLUTION 7600 ADVANCED GATEWAY HUNTSVILLE AL 35808 US +8C-1F-64 (hex) Esys Srl +C1F000-C1FFFF (base 16) Esys Srl + via Spagna 240/242 + Rende Calabria 87036 + IT + +8C-1F-64 (hex) Abacus Peripherals Pvt Ltd +984000-984FFF (base 16) Abacus Peripherals Pvt Ltd + 29 Apurva Industrial Estate, Makwana Road, Marol, Andheri East + Mumbai Maharashtra 400059 + IN + +8C-1F-64 (hex) Rayhaan Networks +ACE000-ACEFFF (base 16) Rayhaan Networks + Tuchmacherstrasse 36 + Zurich 8041 + CH + +8C-1F-64 (hex) Intel Corporate +397000-397FFF (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + 70-B3-D5 (hex) EVCO SPA A80000-A80FFF (base 16) EVCO SPA VIA FELTRE N. 81 @@ -10349,16 +10367,22 @@ F74000-F74FFF (base 16) TESSA AGRITECH SRL Leiferde Niedersachsen 38542 DE +70-B3-D5 (hex) Code Blue Corporation +271000-271FFF (base 16) Code Blue Corporation + 259 Hedcor Street + Holland MI 49423 + US + 70-B3-D5 (hex) MBJ E03000-E03FFF (base 16) MBJ Jochim-Klindt-Straße 7 Ahrensburg Schleswig Holstein 22926 DE -70-B3-D5 (hex) Code Blue Corporation -271000-271FFF (base 16) Code Blue Corporation - 259 Hedcor Street - Holland MI 49423 +70-B3-D5 (hex) VK Integrated Systems +A8F000-A8FFFF (base 16) VK Integrated Systems + 810 Crossland Ave + Clarksville TN 37040 US 70-B3-D5 (hex) Fischer Connectors @@ -10367,42 +10391,30 @@ BF7000-BF7FFF (base 16) Fischer Connectors Waterlooville Hampshire PO7 7YH GB -70-B3-D5 (hex) VK Integrated Systems -A8F000-A8FFFF (base 16) VK Integrated Systems - 810 Crossland Ave - Clarksville TN 37040 - US - 70-B3-D5 (hex) Wisebox.,Co.Ltd AC2000-AC2FFF (base 16) Wisebox.,Co.Ltd 23, Geoje-daero 108beon-gil, Yeonje-gu Busan 47547 KR -8C-1F-64 (hex) DB Systel GmbH -991000-991FFF (base 16) DB Systel GmbH - Jürgen-Ponto-Platz1 - Frankfurt Hessen 60329 - DE - 8C-1F-64 (hex) Katronic AG & Co. KG C41000-C41FFF (base 16) Katronic AG & Co. KG Gießerweg 5 Wernigerode 38855 DE +8C-1F-64 (hex) DB Systel GmbH +991000-991FFF (base 16) DB Systel GmbH + Jürgen-Ponto-Platz1 + Frankfurt Hessen 60329 + DE + 8C-1F-64 (hex) NAGTECH LLC 29F000-29FFFF (base 16) NAGTECH LLC 12A, Krasnolesya Str., off 507 Ekaterinburg Sverdlovskaya oblast 620110 RU -8C-1F-64 (hex) ROBOfiber, Inc. -CF1000-CF1FFF (base 16) ROBOfiber, Inc. - 3000F Danville Blvd, #300 - Alamo CA 94507 - US - 8C-1F-64 (hex) QLM Technology Ltd 3A4000-3A4FFF (base 16) QLM Technology Ltd Unit DX, Albert Road @@ -10427,24 +10439,30 @@ C03000-C03FFF (base 16) Abiman Engineering Moscow 115093 RU +8C-1F-64 (hex) ROBOfiber, Inc. +CF1000-CF1FFF (base 16) ROBOfiber, Inc. + 3000F Danville Blvd, #300 + Alamo CA 94507 + US + 8C-1F-64 (hex) castcore 204000-204FFF (base 16) castcore D1210, 947 Hanam-daero Hanam-si, Gyeonggi-do 12982 KR -8C-1F-64 (hex) Zhejiang Laolan Information Technology Co., Ltd -801000-801FFF (base 16) Zhejiang Laolan Information Technology Co., Ltd - Zhejiang Laolan Information Technology Co., Ltd - Hangzhou Zhejiang 311700 - CN - 8C-1F-64 (hex) BlueSword Intelligent Technology Co., Ltd. AAB000-AABFFF (base 16) BlueSword Intelligent Technology Co., Ltd. No. 909, Longaobei Road,Jinan,Shandong Jinan Shandong 250101 CN +8C-1F-64 (hex) Zhejiang Laolan Information Technology Co., Ltd +801000-801FFF (base 16) Zhejiang Laolan Information Technology Co., Ltd + Zhejiang Laolan Information Technology Co., Ltd + Hangzhou Zhejiang 311700 + CN + 8C-1F-64 (hex) Aton srl 19C000-19CFFF (base 16) Aton srl Via Guido Rossa 5 @@ -10457,12 +10475,6 @@ AED000-AEDFFF (base 16) MB connect line GmbH Fernwartungssysteme Dinkelsbuehl Bavaria 91550 DE -8C-1F-64 (hex) RealWear -9C1000-9C1FFF (base 16) RealWear - 600 Hathaway Rd, Ste 105 - Vancouver WA 98661 - US - 8C-1F-64 (hex) Jacquet Dechaume 7C8000-7C8FFF (base 16) Jacquet Dechaume 1 Rue Louis Armand @@ -10475,17 +10487,29 @@ AED000-AEDFFF (base 16) MB connect line GmbH Fernwartungssysteme Kalmar 39356 SE +8C-1F-64 (hex) Sanskruti +4FA000-4FAFFF (base 16) Sanskruti + 76/121, Mohit House, 2nd cross, Dasarahali Main Road, buvaneswari Nagar + bangalore karnataka 560024 + IN + 8C-1F-64 (hex) HEINEN ELEKTRONIK GmbH AA4000-AA4FFF (base 16) HEINEN ELEKTRONIK GmbH Hunsrückstraße 7 HAAN NRW 42781 DE -8C-1F-64 (hex) Sanskruti -4FA000-4FAFFF (base 16) Sanskruti - 76/121, Mohit House, 2nd cross, Dasarahali Main Road, buvaneswari Nagar - bangalore karnataka 560024 - IN +8C-1F-64 (hex) RealWear +9C1000-9C1FFF (base 16) RealWear + 600 Hathaway Rd, Ste 105 + Vancouver WA 98661 + US + +8C-1F-64 (hex) INFOSTECH Co., Ltd. +F86000-F86FFF (base 16) INFOSTECH Co., Ltd. + 26, Namsan-ro 39beon-gil, Uichang-gu + Changwon-si Gyeongsangnam-do 51368 + KR 8C-1F-64 (hex) Figment Design Laboratories 445000-445FFF (base 16) Figment Design Laboratories @@ -10505,12 +10529,24 @@ AB5000-AB5FFF (base 16) JUSTMORPH PTE. LTD. Singapore 059507 SG -8C-1F-64 (hex) INFOSTECH Co., Ltd. -F86000-F86FFF (base 16) INFOSTECH Co., Ltd. - 26, Namsan-ro 39beon-gil, Uichang-gu - Changwon-si Gyeongsangnam-do 51368 +8C-1F-64 (hex) NEXCONTECH +53D000-53DFFF (base 16) NEXCONTECH + 138, Ilsan-ro, Ilsandong-gu, Goyang-si + Gyeonggi-do 10442 KR +8C-1F-64 (hex) Daedalean AG +E43000-E43FFF (base 16) Daedalean AG + Albisriederstrasse 199 + Zürich 8047 + CH + +8C-1F-64 (hex) Grupo Epelsa S.L. +D54000-D54FFF (base 16) Grupo Epelsa S.L. + C/ Punto Net,3 + Alcala de Henares Madrid 28805 + ES + 70-B3-D5 (hex) System West dba ICS Electronics E06000-E06FFF (base 16) System West dba ICS Electronics 7034 Commerce Circle Suite A @@ -15542,18 +15578,18 @@ AFD000-AFDFFF (base 16) dongsheng Soest 59494 DE -70-B3-D5 (hex) Apantac LLC -450000-450FFF (base 16) Apantac LLC - 7556 SW Bridgeport Road - Durham OR 97224 - US - 8C-1F-64 (hex) GIORDANO CONTROLS SPA DBD000-DBDFFF (base 16) GIORDANO CONTROLS SPA VIA PARALLELA 2/4 VILLA BARTOLOMEA IT 37049 IT +70-B3-D5 (hex) Apantac LLC +450000-450FFF (base 16) Apantac LLC + 7556 SW Bridgeport Road + Durham OR 97224 + US + 70-B3-D5 (hex) i2Systems FFD000-FFDFFF (base 16) i2Systems 355 Bantam Lake Road @@ -15626,36 +15662,36 @@ D29000-D29FFF (base 16) Secure Bits Leeuwarden 8938 AG NL -8C-1F-64 (hex) Potter Electric Signal Company -FE0000-FE0FFF (base 16) Potter Electric Signal Company - 1609 Park 370 Place - Hazelwood MO 63042 - US - 8C-1F-64 (hex) Invisense AB 2EF000-2EFFFF (base 16) Invisense AB Nygatan 56 Linköping 582 27 SE +8C-1F-64 (hex) Potter Electric Signal Company +FE0000-FE0FFF (base 16) Potter Electric Signal Company + 1609 Park 370 Place + Hazelwood MO 63042 + US + 8C-1F-64 (hex) NewAgeMicro 73D000-73DFFF (base 16) NewAgeMicro 171 Forbes Blvd, Suite 5000 Mansfield MA 02048 US -8C-1F-64 (hex) DEUTA-WERKE GmbH -BA3000-BA3FFF (base 16) DEUTA-WERKE GmbH - Paffrather Str. 140 - Bergisch Gladbach North Rhine-Westphalia 51465 - DE - 8C-1F-64 (hex) INSEVIS GmbH 414000-414FFF (base 16) INSEVIS GmbH Am Weichselgarten 7 Erlangen D-91058 DE +8C-1F-64 (hex) DEUTA-WERKE GmbH +BA3000-BA3FFF (base 16) DEUTA-WERKE GmbH + Paffrather Str. 140 + Bergisch Gladbach North Rhine-Westphalia 51465 + DE + 8C-1F-64 (hex) Shenzhen Longyun Lighting Electric Appliances Co., Ltd 95A000-95AFFF (base 16) Shenzhen Longyun Lighting Electric Appliances Co., Ltd Building A5 , Silicon Valley Power Industrial Park, No.334, Guiyue Road, Guanlan @@ -15680,6 +15716,12 @@ DC9000-DC9FFF (base 16) Peter Huber Kaeltemaschinenbau AG Osaka Osaka 531-6048 JP +8C-1F-64 (hex) Nexion Data Systems P/L +712000-712FFF (base 16) Nexion Data Systems P/L + Unit 1, 53 Boyland Avenue + Coopers Plains Queensland 4108 + AU + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd 3-3-1 @@ -20867,51 +20909,57 @@ B33000-B33FFF (base 16) Aplex Technology Inc. Shenzhen City Guangdong 518129 CN -70-B3-D5 (hex) FARHO DOMOTICA SL -ACE000-ACEFFF (base 16) FARHO DOMOTICA SL - POLIGONO DE TABAZA II, NAVES 9-13 - TABAZA ASTURIAS 33439 - ES - -70-B3-D5 (hex) The Engineerix Group -C71000-C71FFF (base 16) The Engineerix Group - 1418 Beech Ave 119A - McAllen TX 78501 - US - 70-B3-D5 (hex) Flextronics International Kft 1BC000-1BCFFF (base 16) Flextronics International Kft 38. Zrinyi Str. Zalaegerszeg Zala 8900 HU +70-B3-D5 (hex) FARHO DOMOTICA SL +ACE000-ACEFFF (base 16) FARHO DOMOTICA SL + POLIGONO DE TABAZA II, NAVES 9-13 + TABAZA ASTURIAS 33439 + ES + 70-B3-D5 (hex) Research Laboratory of Design Automation, Ltd. 223000-223FFF (base 16) Research Laboratory of Design Automation, Ltd. 8 Birzhevoy Spusk Taganrog 347900 RU +70-B3-D5 (hex) The Engineerix Group +C71000-C71FFF (base 16) The Engineerix Group + 1418 Beech Ave 119A + McAllen TX 78501 + US + 70-B3-D5 (hex) Private 315000-315FFF (base 16) Private -70-B3-D5 (hex) JOLANYEE Technology Co., Ltd. -9D8000-9D8FFF (base 16) JOLANYEE Technology Co., Ltd. - 2F., No. 13, Sec. 1, Yonghe Rd. - Yonghe Dist., New Taipei City 234014 - TW - 70-B3-D5 (hex) SEASONS 4 INC D5D000-D5DFFF (base 16) SEASONS 4 INC 3601 LA GRANGE PKWY, SUITE 500 TOANO VA 23168 US +70-B3-D5 (hex) JOLANYEE Technology Co., Ltd. +9D8000-9D8FFF (base 16) JOLANYEE Technology Co., Ltd. + 2F., No. 13, Sec. 1, Yonghe Rd. + Yonghe Dist., New Taipei City 234014 + TW + 70-B3-D5 (hex) VulcanForms E0E000-E0EFFF (base 16) VulcanForms 20 North Ave. Burlington MA 01803 US +8C-1F-64 (hex) GSP Sprachtechnologie GmbH +B64000-B64FFF (base 16) GSP Sprachtechnologie GmbH + Teltowkanalstraße 1 + Berlin 12247 + DE + 8C-1F-64 (hex) Xi‘an Hangguang Satellite and Control Technology Co.,Ltd 270000-270FFF (base 16) Xi‘an Hangguang Satellite and Control Technology Co.,Ltd Hi-tech Industrial Park Zaozitai Road No.10,Chang’an, Xi’an, Shaanxi China @@ -20924,12 +20972,6 @@ D7E000-D7EFFF (base 16) Thales Belgium Tubize Brussels 1480 BE -8C-1F-64 (hex) GSP Sprachtechnologie GmbH -B64000-B64FFF (base 16) GSP Sprachtechnologie GmbH - Teltowkanalstraße 1 - Berlin 12247 - DE - 8C-1F-64 (hex) Brad Technology 549000-549FFF (base 16) Brad Technology 20 Avenue des Erables @@ -20942,18 +20984,18 @@ B64000-B64FFF (base 16) GSP Sprachtechnologie GmbH Tel Aviv 6986519 IL -8C-1F-64 (hex) EkspertStroyProekt -A57000-A57FFF (base 16) EkspertStroyProekt - office 422, str.1, d.1, ul. Eniseyskaya - Moscow 129344 - RU - 8C-1F-64 (hex) GS Elektromedizinsiche Geräte G. Stemple GmbH BC0000-BC0FFF (base 16) GS Elektromedizinsiche Geräte G. Stemple GmbH Hauswiesenstr. 26 Kaufering Bayern 86916 DE +8C-1F-64 (hex) EkspertStroyProekt +A57000-A57FFF (base 16) EkspertStroyProekt + office 422, str.1, d.1, ul. Eniseyskaya + Moscow 129344 + RU + 8C-1F-64 (hex) BR. Voss Ingenjörsfirma AB 264000-264FFF (base 16) BR. Voss Ingenjörsfirma AB Getängsvägen 4 @@ -20984,36 +21026,36 @@ E5C000-E5CFFF (base 16) Scientific Lightning Solutions Titusville FL 32780 US +8C-1F-64 (hex) Grossenbacher Systeme AG +83A000-83AFFF (base 16) Grossenbacher Systeme AG + Spinnereistrasse 10 + St. Gallen 9008 + CH + 8C-1F-64 (hex) WOLF Advanced Technology 370000-370FFF (base 16) WOLF Advanced Technology 175 Mostar Street, Suite 200 Stouffville Ontario L4A 0Y2 CA -8C-1F-64 (hex) YUYAMA MFG Co.,Ltd -AE1000-AE1FFF (base 16) YUYAMA MFG Co.,Ltd - 3-3-1 - TOYONAKASHI OSAKA 561-0841 - JP - 8C-1F-64 (hex) Roog zhi tong Technology(Beijing) Co.,Ltd 296000-296FFF (base 16) Roog zhi tong Technology(Beijing) Co.,Ltd Room 806, Huizhong building, building 2, Yard 1, Shangdi Seventh Street, Haidian District, Beijing Beijing 100089 CN +8C-1F-64 (hex) YUYAMA MFG Co.,Ltd +AE1000-AE1FFF (base 16) YUYAMA MFG Co.,Ltd + 3-3-1 + TOYONAKASHI OSAKA 561-0841 + JP + 8C-1F-64 (hex) SBS SpA 4C7000-4C7FFF (base 16) SBS SpA via Circonvallazione s/n Miasino NO 28010 IT -8C-1F-64 (hex) Grossenbacher Systeme AG -83A000-83AFFF (base 16) Grossenbacher Systeme AG - Spinnereistrasse 10 - St. Gallen 9008 - CH - 8C-1F-64 (hex) Murata Manufacturing Co., Ltd. 79D000-79DFFF (base 16) Murata Manufacturing Co., Ltd. 2288, Oaza-Ohshinohara, Yasu-cho, @@ -21032,6 +21074,12 @@ AE1000-AE1FFF (base 16) YUYAMA MFG Co.,Ltd Portsmouth NH 03801 US +8C-1F-64 (hex) UBISCALE +73F000-73FFFF (base 16) UBISCALE + 1 Avenue de Bellefontaine + Cesson-Sevigne 35510 + FR + 8C-1F-64 (hex) Florida R&D Associates LLC 2F5000-2F5FFF (base 16) Florida R&D Associates LLC 76 Spring Vista Drive @@ -21050,12 +21098,36 @@ EE8000-EE8FFF (base 16) Global Organ Group B.V. EDE The Netherlands 6716BS NL -8C-1F-64 (hex) UBISCALE -73F000-73FFFF (base 16) UBISCALE - 1 Avenue de Bellefontaine - Cesson-Sevigne 35510 +8C-1F-64 (hex) BIOTAGE GB LTD +EF1000-EF1FFF (base 16) BIOTAGE GB LTD + UNIT 10 DYFFRYN BUSINESS PARK + YSTRAD MYNACH CF82 7TS + GB + +8C-1F-64 (hex) AiUnion Co.,Ltd +EEF000-EEFFFF (base 16) AiUnion Co.,Ltd + 3F.-1, No. 268, Liancheng Rd., Zhonghe Dist. + New Taipei City Taiwan (R.O.C.) 235 + TW + +8C-1F-64 (hex) Accemic Technologies GmbH +79E000-79EFFF (base 16) Accemic Technologies GmbH + Franz-Huber-Str. 39 + Kiefersfelden Bavaria 83088 + DE + +8C-1F-64 (hex) ard sa +AF7000-AF7FFF (base 16) ard sa + Micropolis Bat Clematis + Gap France 05000 FR +8C-1F-64 (hex) YPP Corporation +3E0000-3E0FFF (base 16) YPP Corporation + 24 + Geumchon-gu Seoul 153-802 + KR + 70-B3-D5 (hex) DISMUNTEL SAL 92C000-92CFFF (base 16) DISMUNTEL SAL Pol ind cotes @@ -26030,36 +26102,36 @@ EAA000-EAAFFF (base 16) Druck Ltd. Karlsruhe 76187 DE -70-B3-D5 (hex) Orlaco Products B.V. -333000-333FFF (base 16) Orlaco Products B.V. - Albert Plesmanstraat 42 - Barneveld 3772MN - NL - 70-B3-D5 (hex) ScopeSensor Oy DF7000-DF7FFF (base 16) ScopeSensor Oy Teollisuustie 1 Haukipudas 90830 FI -70-B3-D5 (hex) KBPR LLC -11E000-11EFFF (base 16) KBPR LLC - Raketny bulvar street 16 - Moscow Select State 129164 - RU - 70-B3-D5 (hex) Anello Photonics 96A000-96AFFF (base 16) Anello Photonics 3964 Rivermark Plaza, Suite 144 Santa Clara CA 95054 US +70-B3-D5 (hex) Orlaco Products B.V. +333000-333FFF (base 16) Orlaco Products B.V. + Albert Plesmanstraat 42 + Barneveld 3772MN + NL + 70-B3-D5 (hex) HORIZON.INC F40000-F40FFF (base 16) HORIZON.INC 1600 Aza-Shironoshita Asahi Shin Asahi-cho Takashima, Shiga 520-1501 JP +70-B3-D5 (hex) KBPR LLC +11E000-11EFFF (base 16) KBPR LLC + Raketny bulvar street 16 + Moscow Select State 129164 + RU + 70-B3-D5 (hex) SUS Corporation 1ED000-1EDFFF (base 16) SUS Corporation 6F, S-patio Bldg. 14-25 Minami-cho, Suruga-ku, @@ -26084,11 +26156,11 @@ A0C000-A0CFFF (base 16) Lumiplan Duhamel Suzhou Jiangsu 215000 CN -8C-1F-64 (hex) CPC (UK) -391000-391FFF (base 16) CPC (UK) - Unit 3 Beta Way - Egham Surrey TW208RE - GB +8C-1F-64 (hex) SamabaNova Systems +0A8000-0A8FFF (base 16) SamabaNova Systems + 2100 Geng Rd #103 + Palo Alto CA 94303 + US 8C-1F-64 (hex) NavSys Technology Inc. 3C4000-3C4FFF (base 16) NavSys Technology Inc. @@ -26096,23 +26168,17 @@ A0C000-A0CFFF (base 16) Lumiplan Duhamel Geumcheon-gu Seoul, Republic of Korea 08511 KR -8C-1F-64 (hex) SamabaNova Systems -0A8000-0A8FFF (base 16) SamabaNova Systems - 2100 Geng Rd #103 - Palo Alto CA 94303 - US - 8C-1F-64 (hex) Edgeware AB FD1000-FD1FFF (base 16) Edgeware AB Master Samuelsgatan 42 Stockholm 11157 SE -8C-1F-64 (hex) Intamsys Technology Co.Ltd -466000-466FFF (base 16) Intamsys Technology Co.Ltd - 3/F, Building C9, No.3188 Xiupu Road Pudong New District,Shanghai - Shanghai 201315 - CN +8C-1F-64 (hex) CPC (UK) +391000-391FFF (base 16) CPC (UK) + Unit 3 Beta Way + Egham Surrey TW208RE + GB 8C-1F-64 (hex) Power Electronics Espana, S.L. C2F000-C2FFFF (base 16) Power Electronics Espana, S.L. @@ -26120,6 +26186,12 @@ C2F000-C2FFFF (base 16) Power Electronics Espana, S.L. Paterna Valencia 46980 ES +8C-1F-64 (hex) Intamsys Technology Co.Ltd +466000-466FFF (base 16) Intamsys Technology Co.Ltd + 3/F, Building C9, No.3188 Xiupu Road Pudong New District,Shanghai + Shanghai 201315 + CN + 8C-1F-64 (hex) Hikari Alphax Inc. 166000-166FFF (base 16) Hikari Alphax Inc. 2-2-2, Nakanoshima, Kita-ku @@ -26150,30 +26222,30 @@ FFA000-FFAFFF (base 16) Barracuda Measurement Solutions Stafford TX 77477 US -8C-1F-64 (hex) ASAP Electronics GmbH -9CF000-9CFFFF (base 16) ASAP Electronics GmbH - Sachsstraße 1A - Gaimersheim Bayern 85080 - DE - -8C-1F-64 (hex) WINK Streaming -372000-372FFF (base 16) WINK Streaming - 3 Prados Del Convento - Escazu SJ 10201 - CR - 8C-1F-64 (hex) Yu-Heng Electric Co., LTD 575000-575FFF (base 16) Yu-Heng Electric Co., LTD No 8 , Gongye 2nd Rd., Renwu Industry Park Kaohsiung Kaohsiung City 814 TW +8C-1F-64 (hex) ASAP Electronics GmbH +9CF000-9CFFFF (base 16) ASAP Electronics GmbH + Sachsstraße 1A + Gaimersheim Bayern 85080 + DE + 70-B3-D5 (hex) Siemens Industry Software Inc. 3FE000-3FEFFF (base 16) Siemens Industry Software Inc. 46871 Bayside Parkway Fremont CA 94538 US +8C-1F-64 (hex) WINK Streaming +372000-372FFF (base 16) WINK Streaming + 3 Prados Del Convento + Escazu SJ 10201 + CR + 8C-1F-64 (hex) OTMetric 7A6000-7A6FFF (base 16) OTMetric 1 rue de La Haye @@ -26215,3 +26287,15 @@ D3C000-D3CFFF (base 16) KIB Energo LLC Drielse Wetering 17 Kerkdriel Gelderland 5331RK NL + +8C-1F-64 (hex) Landis+Gyr Equipamentos de Medição Ltda +542000-542FFF (base 16) Landis+Gyr Equipamentos de Medição Ltda + Hasdrubal Bellegard, 400, CIC + Curitiba Paraná 81460-120 + BR + +8C-1F-64 (hex) EVLO Stockage Énergie +998000-998FFF (base 16) EVLO Stockage Énergie + 1804 Boulevard Lionel-Boulet, Édifice Archimède + VARENNES Quebec J3X 1S1 + CA diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids index d2c6db4c0..e124261a1 100644 --- a/hwdb.d/pci.ids +++ b/hwdb.d/pci.ids @@ -1,8 +1,8 @@ # # List of PCI ID's # -# Version: 2021.05.16 -# Date: 2021-05-16 03:15:02 +# Version: 2021.06.22 +# Date: 2021-06-22 03:15:02 # # Maintained by Albert Pool, Martin Mares, and other volunteers from # the PCI ID Project at https://pci-ids.ucw.cz/. @@ -683,6 +683,20 @@ 1bd4 0026 12G SAS3008IT RACK 1bd4 0027 12G SAS3008IMR RACK 1bd4 0028 12G SAS3008IR RACK + 00a5 Fusion-MPT 24GSAS/PCIe SAS40xx + 1000 4600 MegaRAID 9670W-16i Tri-Mode Storage Adapter + 1000 4610 MegaRAID 9670-24i Tri-Mode Storage Adapter + 1000 4620 MegaRAID 9660-16i Tri-Mode Storage Adapter + 1000 4630 MegaRAID 9660-8i8e Tri-Mode Storage Adapter + 1000 4640 eHBA 9600W-16i Tri-Mode Storage Adapter + 1000 4650 eHBA 9600W-16e Tri-Mode Storage Adapter + 1000 4660 eHBA 9600-24i Tri-Mode Storage Adapter + 1000 4670 eHBA 9600-16i Tri-Mode Storage Adapter + 1000 4680 eHBA 9600-16e Tri-Mode Storage Adapter + 1000 4690 eHBA 9620-16i Tri-Mode Storage Adapter + 1000 46a0 MegaRAID 9660-24i Tri-Mode Storage Adapter + 1000 46b0 MegaRAID 9665W-16i Tri-Mode Storage Adapter + 1000 46c0 MegaRAID 9680W-16e Tri-Mode Storage Adapter 00ab SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) # 8 Internal and 8 External port channel 9400 HBA 1000 3040 HBA 9400-8i8e @@ -773,6 +787,8 @@ 1028 200e HBA350i MX 1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA 1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA + 1d49 0207 ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA + 1d49 0208 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb HBA 00e7 Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx # Tampered part 1028 200b HBA355i Adapter Tampered @@ -892,6 +908,7 @@ 1d49 060d ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter 1d49 060e ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060f ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter + 1d49 0610 ThinkSystem RAID 940-16i 4GB Flash PCIe Gen4 12Gb Adapter 10e3 MegaRAID 12GSAS/PCIe Unsupported SAS39xx 1028 1ae0 PERC H755 Adapter - Tampered Device 1028 1ae1 PERC H755 Front - Tampered Device @@ -900,6 +917,8 @@ 10e4 MegaRAID 12GSAS/PCIe Unsupported SAS38xx 10e5 MegaRAID 12GSAS/PCIe SAS38xx 10e6 MegaRAID 12GSAS/PCIe Secure SAS38xx + 1d49 0505 ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter + 1d49 0506 ThinkSystem RAID 540-16i PCIe Gen4 12Gb Adapter 10e7 MegaRAID 12GSAS/PCIe Unsupported SAS38xx 1960 MegaRAID 1000 0518 MegaRAID 518 SCSI 320-2 Controller @@ -988,6 +1007,7 @@ 15ff Fenghuang [Zhongshan Subor Z+] 1607 Arden 1636 Renoir + 1637 Renoir Radeon High Definition Audio Controller 1638 Cezanne 163f VanGogh 164c Lucienne @@ -3833,7 +3853,7 @@ 17aa 21bb Mobility Radeon HD 545v 9555 RV710/M92 [Mobility Radeon HD 4350/4550] 103c 1411 ProBook 4720s GPU (Mobility Radeon HD 4350) - 9557 RV711 GL [FirePro RG220] + 9557 RV711/M93 GL [FirePro RG220] 955f RV710/M92 [Mobility Radeon HD 4330] 9580 RV630 [Radeon HD 2600 PRO] 9581 RV630/M76 [Mobility Radeon HD 2600] @@ -4934,6 +4954,11 @@ 1635 Renoir Internal PCIe GPP Bridge to Bus 1637 Renoir HD Audio Controller 1639 Renoir USB 3.1 + 163a VanGogh USB0 + 163b VanGogh USB1 + 163c VanGogh SecUSB + 163d VanGogh SecureFunction + 163e VanGogh HSP 1641 Renoir 10GbE Controller Port 0 (XGBE0/1) 1642 Renoir WLAN 1643 Renoir BT @@ -11998,6 +12023,10 @@ 10de 1141 VCA 6000 17f1 GM200GL [Quadro M6000 24GB] 17fd GM200GL [Tesla M40] + 1ad0 Tegra PCIe x8 Endpoint + 1ad1 Tegra PCIe x4/x8 Endpoint/Root Complex + 1ad2 Tegra PCIe x1 Root Complex + 1ad3 Xavier SATA Controller 1ad6 TU102 USB 3.1 Host Controller 1ad7 TU102 USB Type-C UCSI Controller 1ad8 TU104 USB 3.1 Host Controller @@ -12225,10 +12254,11 @@ 1f9d TU117M [GeForce GTX 1650 Mobile / Max-Q] 1fae TU117GL 1fb0 TU117GLM [Quadro T1000 Mobile] - 1fb1 TU117GLM [Quadro T600 Mobile] + 1fb1 TU117GL [T600] 1fb2 TU117GLM [Quadro T400 Mobile] 1fb8 TU117GLM [Quadro T2000 Mobile / Max-Q] 1fb9 TU117GLM [Quadro T1000 Mobile] + 1fba TU117GLM [T600 Mobile] 1fbb TU117GLM [Quadro T500 Mobile] 1fbf TU117GL 1fd9 TU117BM [GeForce GTX 1650 Mobile Refresh] @@ -12264,6 +12294,7 @@ 1462 3892 RTX 3080 10GB GAMING X TRIO 2208 GA102 [GeForce RTX 3080 Ti] 220d GA102 [GeForce RTX 3080 Lite Hash Rate] + 2216 GA102 [GeForce RTX 3080 Lite Hash Rate] 222b GA102 [GeForce RTX 3090 Engineering Sample] 222f GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample] 2230 GA102GL [RTX A6000] @@ -12273,6 +12304,7 @@ 2237 GA102GL [A10G] 223f GA102GL 228b GA104 High Definition Audio Controller + 2296 Tegra PCIe Endpoint Virtual Network 2302 GA103 2321 GA103 2482 GA104 [GeForce RTX 3070 Ti] @@ -12281,6 +12313,8 @@ 10de 146b GA104 [GeForce RTX 3070] 10de 14ae GA104 [GeForce RTX 3070 16GB] 2486 GA104 [GeForce RTX 3060 Ti] + 2488 GA104 [GeForce RTX 3070 Lite Hash Rate] + 2489 GA104 [GeForce RTX 3060 Ti Lite Hash Rate] 249c GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] 249d GA104M [GeForce RTX 3070 Mobile / Max-Q] 249f GA104M @@ -12698,6 +12732,7 @@ ea50 ce19 mCOM10-L1900 816d RTL811x EHCI host controller ea50 ce19 mCOM10-L1900 + 816e Realtek RealManage BMC 8171 RTL8191SEvA Wireless LAN Controller 8172 RTL8191SEvB Wireless LAN Controller 8173 RTL8192SE Wireless LAN Controller @@ -14798,6 +14833,9 @@ 117c 00bc Celerity FC-321P 117c 00bd Celerity FC-322P 117c 00be Celerity FC-324P + 00c5 ExpressNVM PCIe Gen4 Switch + 117c 00c6 ExpressNVM S48F PCIe Gen4 + 117c 00c7 ExpressNVM S468 PCIe Gen4 00e6 ExpressSAS GT 12Gb/s SAS/SATA HBA 117c 00c0 ExpressSAS H1280 GT 117c 00c1 ExpressSAS H1208 GT @@ -15092,6 +15130,7 @@ # Nee Galileo Technology, Inc. 11ab Marvell Technology Group Ltd. 0100 88F3700 [Armada 3700 Family] ARM SoC + 0110 88F8040 PCI Express controller 0146 GT-64010/64010A System Controller 0f53 88E6318 Link Street network controller 11ab MV88SE614x SATA II PCI-E controller @@ -15640,7 +15679,12 @@ 8071 PM8071 Tachyon SPCve 12G eight-port SAS/SATA controller 8072 PM8072 Tachyon SPCv 12G 16-port SAS/SATA controller 8073 PM8073 Tachyon SPCve 12G 16-port SAS/SATA controller - 8531 PM8531 PFX 24xG3 Fanout PCIe Switches + 8531 PM8531 PFX 24xG3 PCIe Fanout Switch + 8532 PM8532 PFX 32xG3 PCIe Fanout Switch + 8533 PM8533 PFX 48xG3 PCIe Fanout Switch + 8534 PM8534 PFX 64xG3 PCIe Fanout Switch + 8535 PM8535 PFX 80xG3 PCIe Fanout Switch + 8536 PM8536 PFX 96xG3 PCIe Fanout Switch 8546 PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch 8562 PM8562 Switchtec PFX-L 32xG3 Fanout-Lite PCIe Gen3 Switch 11f9 I-Cube Inc @@ -15648,7 +15692,8 @@ 11fb Datel Inc 11fc Silicon Magic 11fd High Street Consultants -11fe Pepperl+Fuchs Comtrol, Inc. +# nee Comtrol, Inc. +11fe Pepperl+Fuchs 0001 RocketPort PCI 32-port w/external I/F 0002 RocketPort PCI 8-port w/external I/F 0003 RocketPort PCI 16-port w/external I/F @@ -16142,6 +16187,8 @@ 5a4b Telsat Turbo 1268 Tektronix 1269 Thomson-CSF/TTM +# MBIM on top of MHI + 00b3 5G Data Card [Cinterion MV31-W] 126a Lexmark International, Inc. 126b Adax, Inc. 126c Northern Telecom @@ -18645,6 +18692,7 @@ 1462 Micro-Star International Co., Ltd. [MSI] # VIA Driver-inf 3483 MSI USB 3.0 (VIA VL80x-based xHCI USB Controller) + 7c56 Realtek Ethernet controller RTL8111H aaf0 Radeon RX 580 Gaming X 8G 1463 Fast Corporation 1464 Interactive Circuits & Systems Ltd @@ -19317,6 +19365,8 @@ 14e4 1402 BCM957414A4142CC 10Gb/25Gb Ethernet PCIe 14e4 1404 BCM957414M4142C OCP 2x25G Type1 wRoCE 14e4 4140 NetXtreme E-Series Advanced Dual-port 25Gb SFP28 Network Daughter Card +# BCM957414M4143C + 14e4 4143 NetXtreme-E Single-port 40Gb/50Gb Ethernet OCP 2.0 Adapter (BCM957414M4143C) 14e4 4146 NetXtreme-E Dual-port 25G SFP28 Ethernet OCP 3.0 Adapter (BCM957414N4140C) 1590 020e Ethernet 25Gb 2-port 631SFP28 Adapter 1590 0211 Ethernet 25Gb 2-port 631FLR-SFP28 Adapter @@ -19388,7 +19438,7 @@ 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Partition 1803 BCM57502 NetXtreme-E RDMA Partition 1804 BCM57504 NetXtreme-E RDMA Partition - 1805 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Partition + 1805 BCM57508 NetXtreme-E RDMA Partition 14e4 df24 NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz RDMA Partition 1806 BCM5750X NetXtreme-E Ethernet Virtual Function 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Virtual Function @@ -20379,12 +20429,14 @@ 0253 Amos GearBox Manager 0254 Spectrum-4, Flash recovery mode 0255 Spectrum-4, Secure Flash recovery mode - 0256 Ofek chiplet + 0256 Abir GearBox 0257 Quantum-2 in Flash Recovery Mode + 0258 AbirGearBox Flash Recovery 0262 MT27710 [ConnectX-4 Lx Programmable] EN 0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN 0264 Innova-2 Flex Burn image 0281 NPS-600 Flash Recovery + 0358 Abir GearBox Secure Flash recovery mode 1002 MT25400 Family [ConnectX-2 Virtual Function] 1003 MT27500 Family [ConnectX-3] 1014 04b5 PCIe3 40GbE RoCE Converged Host Bus Adapter for Power @@ -22071,6 +22123,7 @@ 18ec 4200 Flexible FlowMon (szedata2) 1x10G 18ec ff00 Testing design 18ec ff01 Boot design + c400 COMBO-400G1 18ee Chenming Mold Ind. Corp. 18f1 Spectrum GmbH 18f4 Napatech A/S @@ -22534,6 +22587,7 @@ 5012 E12 NVMe Controller 5013 PS5013 E13 NVMe Controller 5016 E16 PCIe4 NVMe Controller + 5018 E18 PCIe4 NVMe Controller 1989 Montilio Inc. 0001 RapidFile Bridge 8001 RapidFile @@ -22995,6 +23049,7 @@ 1343 ASM1143 USB 3.1 Host Controller 2142 ASM2142 USB 3.1 Host Controller 1462 7a72 H270 PC MATE + 2824 ASM2824 PCIe Gen3 Packet Switch 3242 ASM3242 USB 3.2 Host Controller 1b26 Netcope Technologies, a.s. c132 COMBO-LXT155 @@ -23344,7 +23399,7 @@ 1283 PC300 NVMe Solid State Drive 256GB 1284 PC300 NVMe Solid State Drive 512GB 1285 PC300 NVMe Solid State Drive 1TB - 1327 BC501 NVMe Solid State Drive 512GB + 1327 BC501 NVMe Solid State Drive 1339 BC511 1504 SC300 512GB M.2 2280 SATA Solid State Drive 1527 PC401 NVMe Solid State Drive 256GB @@ -23669,6 +23724,8 @@ 1dc5 FADU Inc. 1dcd Liqid Inc. 1dd8 Pensando Systems + 0002 DSC2 Elba Upstream Port + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1000 DSC Capri Upstream Port 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23679,6 +23736,7 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1001 DSC Virtual Downstream Port 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23689,6 +23747,8 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1002 DSC Ethernet Controller 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23699,6 +23759,8 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1003 DSC Ethernet Controller VF 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23709,6 +23771,8 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1004 DSC Management Controller 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23719,6 +23783,8 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1007 DSC Storage Accelerator 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB @@ -23729,6 +23795,8 @@ 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card + 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card + 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1de0 Groq # rename due to conflict with a term in use by another company for an entirely different product. 0000 TSP100 Tensor Streaming Processor @@ -23882,6 +23950,9 @@ 1e3b 0015 Enterprise NVMe SSD U.2 3.84TB (H3200) 1e3b 0021 Enterprise NVMe SSD U.2 6.4TB (H3100) 1e3b 0022 Enterprise NVMe SSD U.2 7.68TB (H3200) + 1e3b 0052 Enterprise NVMe SSD U.2 0.8TB (H3900) + 1e3b 0053 Enterprise NVMe SSD U.2 1.6TB (H3900) + 1e3b 0059 Enterprise NVMe SSD U.2 0.75TB (H3900) 1e3b 0061 Enterprise NVMe SSD HHHL 0.8TB (H2100) 1e3b 0062 Enterprise NVMe SSD HHHL 0.96TB (H2200) 1e3b 0064 Enterprise NVMe SSD HHHL 1.6TB (H2100) @@ -23894,8 +23965,13 @@ 1e3b 007d Enterprise NVMe SSD HHHL 3.84TB (H3200) 1e3b 007f Enterprise NVMe SSD HHHL 6.4TB (H3100) 1e3b 0080 Enterprise NVMe SSD HHHL 7.68TB (H3200) + 1e3b 008a Enterprise NVMe SSD HHHL 0.8TB (H3900) + 1e3b 008b Enterprise NVMe SSD HHHL 1.6TB (H3900) + 1e3b 0091 Enterprise NVMe SSD HHHL 0.75TB (H3900) 1e3d Burlywood, Inc 1e49 Yangtze Memory Technologies Co.,Ltd +# YMTC PCIe/NVMe SSD + 1013 PC210 1e4b MAXIO Technology (Hangzhou) Ltd. 1001 NVMe SSD Controller MAP1001 1002 NVMe SSD Controller MAP1002 @@ -23910,6 +23986,8 @@ 1e57 Beijing Panyi Technology Co., Ltd 0100 The device has already been deleted. 0000 0100 PY8800 64GB Accelerator +1e59 Oxford Nanopore Technologies + 0001 MinION Mk1C 1e60 Hailo Technologies Ltd. 2864 Hailo-8 AI Processor 1e6b Axiado Corp. @@ -23925,6 +24003,8 @@ 1e95 Solid State Storage Technology Corporation 1ea0 Tencent Technology (Shenzhen) Company Limited 2a16 Cloud Intelligent Inference Controller +1ea7 Intelliprop, Inc + 223a Typhon+ PCIe to Gen-Z Bridge 1eab Hefei DATANG Storage Technology Co.,LTD. 300a NVMe SSD Controller 300A 300b NVMe SSD Controller 300B @@ -23938,6 +24018,7 @@ 0101 FG4 PCIe Frame Grabber 1ed9 Myrtle.ai 1ee9 SUSE LLC +1efb Flexxon Pte Ltd # nee Tumsan Oy 1fc0 Ascom (Finland) Oy 0300 E2200 Dual E1/Rawpipe Card @@ -26272,6 +26353,7 @@ 1bd4 001b 10G SFP+ DP ER102Fi4 Rack Adapter 1bd4 002f 10G SFP+ DP EP102Fi4A Adapter 1bd4 0032 10G SFP+ DP EP102Fi4 Adapter + 1bd4 0067 F102I82599 8086 0002 Ethernet Server Adapter X520-DA2 8086 0003 Ethernet Server Adapter X520-2 8086 0006 Ethernet Server Adapter X520-1 @@ -26607,6 +26689,7 @@ 193d 1080 NIC-ETH360T-3S-4P 1bd4 001d 1G base-T QP EP014Ti1 Adapter 1bd4 0035 1G base-T QP EP014Ti1 Adapter + 1bd4 0066 F014I350 8086 0001 Ethernet Server Adapter I350-T4 8086 0002 Ethernet Server Adapter I350-T2 8086 0003 Ethernet Network Adapter I350-T4 for OCP NIC 3.0 @@ -26783,6 +26866,7 @@ 19e5 d11c Ethernet 2-port X710 10Gb SFP+ Adapter SP330 1bd4 0042 10G SFP+ DP EP102Fi4 Adapter 1bd4 0056 Ethernet Network Adapter X710-BM2 for OCP NIC 3.0 + 1bd4 0065 F102IX710 8086 0000 Ethernet Converged Network Adapter X710 8086 0001 Ethernet Converged Network Adapter X710-4 8086 0002 Ethernet Converged Network Adapter X710-4 @@ -26933,6 +27017,7 @@ 8086 0008 Ethernet Network Adapter E810-XXV-2 8086 0009 Ethernet Network Adapter E810-XXV-2 for OCP 2.0 8086 000a Ethernet 25G 4P E810-XXV Adapter + 8086 000c Ethernet Network Adapter E810-XXV-4 for OCP 3.0 1599 Ethernet Controller E810-XXV for backplane 159a Ethernet Controller E810-XXV for QSFP 159b Ethernet Controller E810-XXV for SFP @@ -26945,6 +27030,7 @@ 8086 0005 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 8086 4001 Ethernet Network Adapter E810-XXV-2 8086 4002 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 + 8086 4003 Ethernet Network Adapter E810-XXV-2 15a0 Ethernet Connection (2) I218-LM 15a1 Ethernet Connection (2) I218-V 15a2 Ethernet Connection (3) I218-LM @@ -27106,6 +27192,8 @@ 189a Ethernet Connection E822-L 1GbE 18a0 C4xxx Series QAT 18a1 C4XXX Series QAT Virtual Function + 18ee 200xx Series QAT + 18ef 200xx Series QAT Virtual Function 1900 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1901 6th-10th Gen Core Processor PCIe Controller (x16) 1902 HD Graphics 510 @@ -27242,6 +27330,7 @@ 19df Atom Processor C3000 Series SMBus controller 19e0 Atom Processor C3000 Series SPI Controller 19e2 Atom Processor C3000 Series QuickAssist Technology + 19e3 Atom Processor C3000 Series QuickAssist Technology Virtual Function 1a1c Ethernet Connection (17) I219-LM 1a1d Ethernet Connection (17) I219-V 1a1e Ethernet Connection (16) I219-LM @@ -28492,7 +28581,8 @@ 1cb8 0002 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC6600 Fixed Port 1cb8 0003 Omni-Path HFI Adapter 100 Series, 2 Port, 2 PCIe x16, Earth Simulation QSFP28 1cb8 0004 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600E QSFP28 - 434e 0001 Omni-Path HFI 100 Series, 1 Port, OCP 3.0 Adapter + 434e 0001 Omni-Path HFI Adapter 100 Series, 1 Port, OCP 3.0 + 434e 2628 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16 8086 2628 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16 8086 2629 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x8 8086 262a Omni-Path HFI Adapter 100 Series, 2 Ports, Split PCIe x16 @@ -30839,6 +30929,7 @@ 37c8 C62x Chipset QuickAssist Technology 8086 0001 QuickAssist Adapter 8960 8086 0002 QuickAssist Adapter 8970 + 37c9 C62x Chipset QuickAssist Technology Virtual Function 37cc Ethernet Connection X722 37cd Ethernet Virtual Function 700 Series 37ce Ethernet Connection X722 for 10GbE backplane @@ -31421,6 +31512,13 @@ 8086 0264 Wireless-AC 9461 8086 02a4 Wireless-AC 9462 444e Turbo Memory Controller + 461e Alder Lake-P Thunderbolt 4 USB Controller + 461f Alder Lake-P Thunderbolt 4 PCI Express Root Port #3 + 462f Alder Lake-P Thunderbolt 4 PCI Express Root Port #2 + 463e Alder Lake-P Thunderbolt 4 NHI #0 + 463f Alder Lake-P Thunderbolt 4 PCI Express Root Port #1 + 466d Alder Lake-P Thunderbolt 4 NHI #1 + 466e Alder Lake-P Thunderbolt 4 PCI Express Root Port #0 467f Volume Management Device NVMe RAID Controller 4680 AlderLake-S GT1 46a0 AlderLake-P GT2 @@ -32538,6 +32636,7 @@ a0c6 Tiger Lake-LP Serial IO I2C Controller #5 a0c8 Tiger Lake-LP Smart Sound Technology Audio Controller a0e0 Tiger Lake-LP Management Engine Interface + a0e3 Tiger Lake-LP Active Management Technology - SOL a0e8 Tiger Lake-LP Serial IO I2C Controller #0 a0e9 Tiger Lake-LP Serial IO I2C Controller #1 a0ea Tiger Lake-LP Serial IO I2C Controller #2 diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html index 1fae6f4b8..53165153f 100644 --- a/hwdb.d/pnp_id_registry.html +++ b/hwdb.d/pnp_id_registry.html @@ -2484,6 +2484,13 @@ New H3C Technology Co., Ltd.NHC06/10/2021 Seco S.p.A.SCG06/10/2021 Silent Power Electronics GmbHLCP06/10/2021 + NAFASAE INDIA Pvt. LtdNAF06/18/2021 + Pico Technology Inc.PIR06/18/2021 + Life is Style Inc.LIS06/18/2021 + Hansung Co., LtdHSN06/18/2021 + Hubei Century Joint Innovation Technology Co.LtdTTR06/18/2021 + Zake IP Holdings LLC (3B tech)VIO06/18/2021 + PreSonus Audio ElectronicsPAE06/24/2021 diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids index a578a525e..dcab0a465 100644 --- a/hwdb.d/usb.ids +++ b/hwdb.d/usb.ids @@ -9,8 +9,8 @@ # The latest version can be obtained from # http://www.linux-usb.org/usb.ids # -# Version: 2021.06.06 -# Date: 2021-06-06 20:34:10 +# Version: 2021.06.16 +# Date: 2021-06-16 20:34:10 # # Vendors, devices and interfaces. Please keep sorted. @@ -18177,8 +18177,8 @@ 0042 Antec Veris Multimedia Station E-Z IR Receiver ffda iMON PAD Remote Controller ffdc iMON PAD Remote Controller -15c5 Advance Multimedia Internet Technology Inc. (AMIT) - 0008 WL532U 802.11g Adapter +15c5 Pressure Profile Systems, Inc. + 0008 Advance Multimedia Internet Technology Inc. (AMIT) WL532U 802.11g Adapter 15c6 Laboratoires MXM 1000 DigistimSP (cold) 1001 DigistimSP (warm) diff --git a/man/50-xdg-data-dirs.sh b/man/50-xdg-data-dirs.sh index 89e9fbb59..ce062e394 100755 --- a/man/50-xdg-data-dirs.sh +++ b/man/50-xdg-data-dirs.sh @@ -5,8 +5,8 @@ XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share/:/usr/share}" # add a directory if it exists if [[ -d /opt/foo/share ]]; then - XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS} + XDG_DATA_DIRS="/opt/foo/share:${XDG_DATA_DIRS}" fi # write our output -echo XDG_DATA_DIRS=$XDG_DATA_DIRS +echo "XDG_DATA_DIRS=${XDG_DATA_DIRS}" diff --git a/man/repart.d.xml b/man/repart.d.xml index 8f86c4154..1773e0588 100644 --- a/man/repart.d.xml +++ b/man/repart.d.xml @@ -571,33 +571,34 @@ Flags= - Configures the 64bit GPT partition flags to set for the partition when creating + Configures the 64bit GPT partition flags field to set for the partition when creating it. This option has no effect if the partition already exists. If not specified the flags values is - set to all zeroes, except if the partition type (as configured with Type= above) - refers to a Verity partition, in which case bit 60 is set (i.e. the read-only bit). This bit may also - be configured separately via ReadOnly=, see below. Specify the flags value in - hexadecimal (by prefixing it with 0x), binary (prefix 0b) or - decimal (no prefix). + set to all zeroes, except for the three bits that can also be configured via + NoAuto=, ReadOnly= and GrowFileSystem=; see + below for details on the defaults for these three flags. Specify the flags value in hexadecimal (by + prefixing it with 0x), binary (prefix 0b) or decimal (no + prefix). + NoAuto= ReadOnly= GrowFileSystem= - Configures the Read-Only and Grow-File-System partition flags (bit 60 and 59) of the - partition table entry, as defined by the Configures the No-Auto, Read-Only and Grow-File-System partition flags (bit 63, 60 + and 59) of the partition table entry, as defined by the Discoverable Partitions Specification. Only - available for partition types supported by the specification. This option is a friendly way to set bit - 60 and 59 of the partition flags value without setting any of the other bits, and may be set via - Flags= too, see above. + available for partition types supported by the specification. This option is a friendly way to set + bits 63, 60 and 59 of the partition flags value without setting any of the other bits, and may be set + via Flags= too, see above. - If Flags= is used in conjunction with one or both of - ReadOnly=/GrowFileSystem= the latter control the value of the - relevant flags, i.e. the high-level settings - ReadOnly=/GrowFileSystem= override the low-level setting - Flags=. + If Flags= is used in conjunction with one or more of + NoAuto=/ReadOnly=/GrowFileSystem= the latter + control the value of the relevant flags, i.e. the high-level settings + NoAuto=/ReadOnly=/GrowFileSystem= override + the relevant bits of the low-level setting Flags=. - Note that the two flags affect only automatic partition mounting, as implemented by + Note that the three flags affect only automatic partition mounting, as implemented by systemd-gpt-auto-generator8 or the option of various commands (such as systemd-nspawn1). It @@ -611,10 +612,10 @@ precedence in most tools reading these flags, and since growing the file system involves writing to the partition it is consequently ignored. - ReadOnly= defaults to on for Verity partition - types. GrowFileSystem= defaults to on for all partition types that support it, - except if the partition is marked read-only (and thus effectively, defaults to off for Verity - partitions). + NoAuto= defaults to off. ReadOnly= defaults to on for + Verity partition types, and off for all others. GrowFileSystem= defaults to on for + all partition types that support it, except if the partition is marked read-only (and thus + effectively, defaults to off for Verity partitions). diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml index 0b1137539..c3c9f573a 100644 --- a/man/systemd-ask-password.xml +++ b/man/systemd-ask-password.xml @@ -210,10 +210,19 @@ - Do not print passwords to standard output. - This is useful if you want to store a password in kernel - keyring with but do not want it - to show up on screen or in logs. + Do not print passwords to standard output. This is useful if you want to store a + password in kernel keyring with but do not want it to show up on screen + or in logs. + + + + + + By default, when writing the acquired password to standard output it is suffixed by a + newline character. This may be turned off with the switch, similar to the switch + of the same name of the echo1 + command. diff --git a/man/systemd-resolved.service.xml b/man/systemd-resolved.service.xml index 7d4d7bb16..661e36b00 100644 --- a/man/systemd-resolved.service.xml +++ b/man/systemd-resolved.service.xml @@ -242,7 +242,7 @@ control of the client library. nss-dns will first try to resolve names using search domains and even if those queries are routed to systemd-resolved, it will send them out over the network using the usual rules for multi-label name routing For - example, if /etc/nsswitch.conf has nameserver 127.0.0.53 + example, if /etc/resolv.conf has nameserver 127.0.0.53 search foobar.com barbar.com and we look up localhost, nss-dns will send the following queries to systemd-resolved listening on 127.0.0.53:53: first diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index 893b56d93..b17635c5d 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -675,7 +675,9 @@ CapabilityBoundingSet=~CAP_B CAP_C SystemCallArchitectures=, SystemCallFilter=, or SystemCallLog= are specified. Note that even if this setting is overridden - by them, systemctl show shows the original value of this setting. Also see + by them, systemctl show shows the original value of this setting. In case the + service will be run in a new mount namespace anyway and SELinux is disabled, all file systems + are mounted with MS_NOSUID flag. Also see No New Privileges Flag. diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml index bc1ff7876..6c14810a3 100644 --- a/man/systemd.net-naming-scheme.xml +++ b/man/systemd.net-naming-scheme.xml @@ -381,7 +381,12 @@ Some firmware and hypervisor implementations report unreasonable high numbers for the onboard index. To prevent the generation of bogus onbard interface names, index numbers greater than 16381 (2^14-1) were ignored. For s390 PCI devices index values up to 65535 (2^16-1) are valid. To account - for that, the limit is increased to now 65535. + for that, the limit is increased to now 65535. + + The udev rule NAME= replaces :, + /, and % with an underscore (_), and + refuses strings which contain only numerics. + diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 8d3d65024..282ce57a0 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -220,11 +220,16 @@ systemd-networkd-wait-online). When no, the network is ignored when determining the online state. When a minimum operational state and an optional maximum operational state are set, yes is implied, and this controls the minimum and maximum - operational state required for the network interface to be considered online. - Defaults to yes. + operational state required for the network interface to be considered online. - The network will be brought up normally in all cases, but in - the event that there is no address being assigned by DHCP or the + Defaults to yes when ActivationPolicy= is not set, + or set to up, always-up, or bound. + Defaults to no when ActivationPolicy= is set to + manual or down. This is forced to no + when ActivationPolicy= is set to always-down. + + The network will be brought up normally (as configured by ActivationPolicy=), + but in the event that there is no address being assigned by DHCP or the cable is not plugged in, the link will simply remain offline and be skipped automatically by systemd-networkd-wait-online if RequiredForOnline=no. @@ -265,6 +270,11 @@ the administrative state. When BindCarrier= is also set, this is automatically set to bound and any other value is ignored. + When the policy is set to down or manual, + the default value of RequiredForOnline= is no. + When the policy is set to always-down, the value of + RequiredForOnline= forced to no. + The administrative state is not the same as the carrier state, so using always-up does not mean the link will never lose carrier. The link carrier depends on both the administrative state as well as the network device's physical @@ -1098,8 +1108,8 @@ IPv6Token=prefixstable:2002:da8:1:: Takes one of ipv4, ipv6, both, none. When ipv4, - performs IPv4 Duplicate Address Detection. See - RFC 5224. + performs IPv4 Address Conflict Detection. See + RFC 5227. When ipv6, performs IPv6 Duplicate Address Detection. See RFC 4862. Defaults to ipv6. diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index a17b752d5..78ba9731d 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -1646,6 +1646,19 @@ + + ConditionOSRelease= + + Verify that a specific key=value pair is set in the host's + os-release5. + + Other than exact matching with =, and !=, relative + comparisons are supported for versioned parameters (e.g. VERSION_ID). The + comparator can be one of <, <=, =, + !=, >= and >. + + + AssertArchitecture= AssertVirtualization= @@ -1673,6 +1686,7 @@ AssertControlGroupController= AssertMemory= AssertCPUs= + AssertOSRelease= Similar to the ConditionArchitecture=, ConditionVirtualization=, …, condition settings described above, these settings diff --git a/man/udev.xml b/man/udev.xml index 8782bb15c..f6ea2abc1 100644 --- a/man/udev.xml +++ b/man/udev.xml @@ -117,7 +117,7 @@ := - Assign a value to a key finally; disallow any later changes. + Assign a value to a key finally; disallow any later changes. @@ -607,9 +607,12 @@ - Usually, control and other possibly unsafe characters are replaced - in strings used for device naming. The mode of replacement can be specified - with this option. + When replace, possibly unsafe characters in strings + assigned to NAME, SYMLINK, and + ENV{key} are replaced. When + none, no replacement is performed. When unset, the replacement + is performed for NAME, SYMLINK, but not for + ENV{key}. Defaults to unset. diff --git a/meson.build b/meson.build index 0b136529e..32e5413a6 100644 --- a/meson.build +++ b/meson.build @@ -793,12 +793,37 @@ endif conf.set_quoted('NOBODY_USER_NAME', nobody_user) conf.set_quoted('NOBODY_GROUP_NAME', nobody_group) -tty_gid = get_option('tty-gid') -conf.set('TTY_GID', tty_gid) +static_ugids = [] +foreach option : ['adm-gid', + 'audio-gid', + 'cdrom-gid', + 'dialout-gid', + 'disk-gid', + 'input-gid', + 'kmem-gid', + 'kvm-gid', + 'lp-gid', + 'render-gid', + 'sgx-gid', + 'tape-gid', + 'tty-gid', + 'users-gid', + 'utmp-gid', + 'video-gid', + 'wheel-gid', + 'systemd-journal-gid', + 'systemd-network-uid', + 'systemd-resolve-uid', + 'systemd-timesync-uid'] + name = option.underscorify().to_upper() + val = get_option(option) -# Ensure provided GID argument is numeric, otherwise fall back to default assignment -users_gid = get_option('users-gid') -conf.set('USERS_GID', users_gid < 0 ? '-' : users_gid) + # Ensure provided GID argument is numeric, otherwise fall back to default assignment + conf.set(name, val >= 0 ? val : '-') + if val >= 0 + static_ugids += '@0@:@1@'.format(option, val) + endif +endforeach conf.set10('ENABLE_ADM_GROUP', get_option('adm-group')) conf.set10('ENABLE_WHEEL_GROUP', get_option('wheel-group')) @@ -1682,7 +1707,6 @@ install_libsystemd_static = static_library( libcap, libblkid, libmount, - libselinux, libgcrypt], c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC'])) @@ -3713,14 +3737,13 @@ status = [ 'extra start script: @0@'.format(get_option('rc-local')), 'debug shell: @0@ @ @1@'.format(get_option('debug-shell'), get_option('debug-tty')), - 'TTY GID: @0@'.format(tty_gid), - 'users GID: @0@'.format(conf.get('USERS_GID')), 'system UIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'), conf.get('SYSTEM_ALLOC_UID_MIN')), 'system GIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'), conf.get('SYSTEM_ALLOC_GID_MIN')), 'dynamic UIDs: @0@…@1@'.format(dynamic_uid_min, dynamic_uid_max), 'container UID bases: @0@…@1@'.format(container_uid_base_min, container_uid_base_max), + 'static UID/GID allocations: @0@'.format(' '.join(static_ugids)), '/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')), 'render group access mode: @0@'.format(get_option('group-render-mode')), 'certificate root directory: @0@'.format(get_option('certificate-root')), diff --git a/meson_options.txt b/meson_options.txt index fc58e888d..5048de755 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -204,6 +204,7 @@ option('status-unit-format-default', type : 'combo', description : 'use unit name or description in messages by default') option('time-epoch', type : 'integer', value : '-1', description : 'time epoch for time clients') + option('system-alloc-uid-min', type : 'integer', value : '-1', description : 'minimum system UID used when allocating') option('system-alloc-gid-min', type : 'integer', value : '-1', @@ -220,10 +221,6 @@ option('container-uid-base-min', type : 'integer', value : 0x00080000, description : 'minimum container UID base') option('container-uid-base-max', type : 'integer', value : 0x6FFF0000, description : 'maximum container UID base') -option('tty-gid', type : 'integer', value : 5, - description : 'the numeric GID of the "tty" group') -option('users-gid', type : 'integer', value : '-1', - description : 'the numeric GID of the "users" group') option('adm-group', type : 'boolean', description : 'the ACL for adm group should be added') option('wheel-group', type : 'boolean', @@ -234,6 +231,49 @@ option('nobody-user', type : 'string', option('nobody-group', type : 'string', description : 'The name of the nobody group (the one with GID 65534)', value : 'nobody') +option('adm-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "adm" group') +option('audio-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "audio" group') +option('cdrom-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "cdrom" group') +option('dialout-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "dialout" group') +option('disk-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "disk" group') +option('input-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "input" group') +option('kmem-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "kmem" group') +option('kvm-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "kvm" group') +option('lp-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "lp" group') +option('render-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "render" group') +option('sgx-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "sgx" group') +option('tape-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "tape" group') +option('tty-gid', type : 'integer', value : 5, + description : 'the numeric GID of the "tty" group') +option('users-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "users" group') +option('utmp-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "utmp" group') +option('video-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "video" group') +option('wheel-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the "wheel" group') +option('systemd-journal-gid', type : 'integer', value : '-1', + description : 'soft-static allocation for the systemd-journal group') +option('systemd-network-uid', type : 'integer', value : '-1', + description : 'soft-static allocation for the systemd-network user') +option('systemd-resolve-uid', type : 'integer', value : '-1', + description : 'soft-static allocation for the systemd-resolve user') +option('systemd-timesync-uid', type : 'integer', value : '-1', + description : 'soft-static allocation for the systemd-timesync user') + option('dev-kvm-mode', type : 'string', value : '0666', description : '/dev/kvm access mode') option('group-render-mode', type : 'string', value : '0666', diff --git a/po/ko.po b/po/ko.po index a67bb87bf..a0d20e906 100644 --- a/po/ko.po +++ b/po/ko.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: systemd\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-08 17:48+0100\n" -"PO-Revision-Date: 2021-04-15 10:01+0000\n" +"PO-Revision-Date: 2021-06-22 10:04+0000\n" "Last-Translator: simmon \n" "Language-Team: Korean \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.5.3\n" +"X-Generator: Weblate 4.7\n" "X-Poedit-SourceCharset: UTF-8\n" #: src/core/org.freedesktop.systemd1.policy.in:22 @@ -112,7 +112,7 @@ msgstr "홈 영역 암호 변경" #: src/home/org.freedesktop.home1.policy:64 msgid "" "Authentication is required to change the password of a user's home area." -msgstr "사용자 홈 영역의 암호를 바꾸려면 인증이 필요합니다." +msgstr "사용자 홈 영역의 비밀번호를 변경하려면 인증이 필요합니다." #: src/hostname/org.freedesktop.hostname1.policy:20 msgid "Set hostname" diff --git a/rules.d/60-persistent-storage.rules b/rules.d/60-persistent-storage.rules index 50b357f8d..b26182121 100644 --- a/rules.d/60-persistent-storage.rules +++ b/rules.d/60-persistent-storage.rules @@ -38,13 +38,13 @@ KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{wwid}=="?*", ENV{ID_WWN KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}" KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ - ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" + OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{model}=="?*", ENV{ID_MODEL}="$attr{model}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{firmware_rev}=="?*", ENV{ID_REVISION}="$attr{firmware_rev}" KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ENV{ID_MODEL}=="?*", ENV{ID_SERIAL_SHORT}=="?*", \ - ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" + OPTIONS="string_escape=replace", ENV{ID_SERIAL}="$env{ID_MODEL}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" # virtio-blk KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}" diff --git a/shell-completion/bash/bootctl b/shell-completion/bash/bootctl index 391fa67bf..e61188fee 100644 --- a/shell-completion/bash/bootctl +++ b/shell-completion/bash/bootctl @@ -69,7 +69,7 @@ _bootctl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then comps='' diff --git a/shell-completion/bash/busctl b/shell-completion/bash/busctl index 5a4acd337..1cc41d461 100644 --- a/shell-completion/bash/busctl +++ b/shell-completion/bash/busctl @@ -140,7 +140,7 @@ _busctl() { n=$(($COMP_CWORD - $i)) - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then comps='' diff --git a/shell-completion/bash/coredumpctl b/shell-completion/bash/coredumpctl index 5fc11fdbd..54b857251 100644 --- a/shell-completion/bash/coredumpctl +++ b/shell-completion/bash/coredumpctl @@ -83,7 +83,7 @@ _coredumpctl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[LIST]} ${VERBS[DUMP]}; then comps='' diff --git a/shell-completion/bash/homectl b/shell-completion/bash/homectl index fe909fbb4..f738bfb37 100644 --- a/shell-completion/bash/homectl +++ b/shell-completion/bash/homectl @@ -170,7 +170,7 @@ _homectl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[NAME]}; then comps=$(__get_homes) diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl index af4339111..6f1909b59 100644 --- a/shell-completion/bash/hostnamectl +++ b/shell-completion/bash/hostnamectl @@ -39,7 +39,7 @@ _hostnamectl() { [ARG]='-H --host -M --machine --json' ) - if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then + if __contains_word "$prev" ${OPTS[ARG]}; then case $prev in --host|-H) comps=$(compgen -A hostname) @@ -77,7 +77,7 @@ _hostnamectl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[CHASSIS]}; then comps='desktop laptop convertible server tablet handset watch embedded vm container' diff --git a/shell-completion/bash/localectl b/shell-completion/bash/localectl index fa0f8fdca..987ae34cc 100644 --- a/shell-completion/bash/localectl +++ b/shell-completion/bash/localectl @@ -67,7 +67,7 @@ _localectl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[VARIANTS]}; then comps=$(command localectl list-x11-keymap-layouts) diff --git a/shell-completion/bash/loginctl b/shell-completion/bash/loginctl index f94f191d8..2d03fcca3 100644 --- a/shell-completion/bash/loginctl +++ b/shell-completion/bash/loginctl @@ -93,7 +93,7 @@ _loginctl () { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps="${VERBS[*]}" elif __contains_word "$verb" ${VERBS[SESSIONS]}; then diff --git a/shell-completion/bash/machinectl b/shell-completion/bash/machinectl index bc3a7889b..022716792 100644 --- a/shell-completion/bash/machinectl +++ b/shell-completion/bash/machinectl @@ -95,7 +95,7 @@ _machinectl() { return 0 fi - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then diff --git a/shell-completion/bash/networkctl b/shell-completion/bash/networkctl index 1e4d0a2aa..40ac13abf 100644 --- a/shell-completion/bash/networkctl +++ b/shell-completion/bash/networkctl @@ -69,7 +69,7 @@ _networkctl() { return 0 fi - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then comps='' diff --git a/shell-completion/bash/portablectl b/shell-completion/bash/portablectl index e18d04c7e..a0ccc733a 100644 --- a/shell-completion/bash/portablectl +++ b/shell-completion/bash/portablectl @@ -79,7 +79,7 @@ _portablectl() { n=$(($COMP_CWORD - $i)) - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then comps='' diff --git a/shell-completion/bash/resolvectl b/shell-completion/bash/resolvectl index dae4330d4..646a197a1 100644 --- a/shell-completion/bash/resolvectl +++ b/shell-completion/bash/resolvectl @@ -87,7 +87,7 @@ _resolvectl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps="${VERBS[*]}" elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[DOMAIN]}; then diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in index e6e6ca0d7..b61f88b01 100644 --- a/shell-completion/bash/systemctl.in +++ b/shell-completion/bash/systemctl.in @@ -254,7 +254,7 @@ _systemctl () { cur_orig="$(printf '%q' $cur)" fi - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps="${VERBS[*]}" elif __contains_word "$verb" ${VERBS[ALL_UNITS]}; then diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze index eded49b50..36fcf432f 100644 --- a/shell-completion/bash/systemd-analyze +++ b/shell-completion/bash/systemd-analyze @@ -93,12 +93,12 @@ _systemd_analyze() { return 0 fi - if [[ -z $verb && $cur = -* ]]; then + if [[ -z ${verb-} && $cur = -* ]]; then COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) return 0 fi - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then diff --git a/shell-completion/bash/systemd-delta b/shell-completion/bash/systemd-delta index f97b6dd5b..f94c12853 100644 --- a/shell-completion/bash/systemd-delta +++ b/shell-completion/bash/systemd-delta @@ -48,12 +48,12 @@ _systemd-delta() { return 0 fi - if [[ "$cur" = -* ]]; then + if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) return 0 fi - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) + COMPREPLY=( $(compgen -W '${comps-}' -- "$cur") ) return 0 } diff --git a/shell-completion/bash/systemd-id128 b/shell-completion/bash/systemd-id128 index 25110d130..ad4731de1 100644 --- a/shell-completion/bash/systemd-id128 +++ b/shell-completion/bash/systemd-id128 @@ -61,7 +61,7 @@ _systemd_id128() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[STANDALONE]}; then comps='' diff --git a/shell-completion/bash/systemd-resolve b/shell-completion/bash/systemd-resolve index ec4394827..b165010b8 100644 --- a/shell-completion/bash/systemd-resolve +++ b/shell-completion/bash/systemd-resolve @@ -71,7 +71,7 @@ _systemd-resolve() { return 0 fi - if [[ "$cur" = -* ]]; then + if [[ "$cur" = -* ]] || [[ -z ${comps-} ]]; then COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) return 0 fi diff --git a/shell-completion/bash/timedatectl b/shell-completion/bash/timedatectl index 3e72ce665..29dc27b39 100644 --- a/shell-completion/bash/timedatectl +++ b/shell-completion/bash/timedatectl @@ -76,7 +76,7 @@ _timedatectl() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then comps=${VERBS[*]} elif __contains_word "$verb" ${VERBS[BOOLEAN]}; then comps='true false' diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm index d2c325b86..81036f358 100644 --- a/shell-completion/bash/udevadm +++ b/shell-completion/bash/udevadm @@ -73,7 +73,7 @@ _udevadm() { fi done - if [[ -z $verb ]]; then + if [[ -z ${verb-} ]]; then if [[ "$cur" = -* ]]; then COMPREPLY=( $(compgen -W '${OPTS[COMMON]} ${OPTS[DEBUG]}' -- "$cur") ) else diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl index 9e024da34..2b50f307f 100644 --- a/shell-completion/zsh/_bootctl +++ b/shell-completion/zsh/_bootctl @@ -1,4 +1,4 @@ -#compdef bootctl -*- shell-script -*- +#compdef bootctl # SPDX-License-Identifier: LGPL-2.1-or-later __bootctl() { diff --git a/shell-completion/zsh/_busctl b/shell-completion/zsh/_busctl index 8085d5ad1..ae87ddc9a 100644 --- a/shell-completion/zsh/_busctl +++ b/shell-completion/zsh/_busctl @@ -1,4 +1,4 @@ -#compdef busctl -*- shell-script -*- +#compdef busctl # SPDX-License-Identifier: LGPL-2.1-or-later # busctl(1) completion -*- shell-script -*- diff --git a/shell-completion/zsh/_coredumpctl b/shell-completion/zsh/_coredumpctl index 54e935330..ae62e50f3 100644 --- a/shell-completion/zsh/_coredumpctl +++ b/shell-completion/zsh/_coredumpctl @@ -1,4 +1,4 @@ -#compdef coredumpctl -*- shell-script -*- +#compdef coredumpctl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_coredumpctl_commands] )) || diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl index 2f1f51005..bdd26b10f 100644 --- a/shell-completion/zsh/_hostnamectl +++ b/shell-completion/zsh/_hostnamectl @@ -1,4 +1,4 @@ -#compdef hostnamectl -*- shell-script -*- +#compdef hostnamectl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_hostnamectl_hostname] )) || diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl index 848c4fa1b..90d7579cc 100644 --- a/shell-completion/zsh/_journalctl +++ b/shell-completion/zsh/_journalctl @@ -1,4 +1,4 @@ -#compdef journalctl -*- shell-script -*- +#compdef journalctl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_journalctl_fields] )) || diff --git a/shell-completion/zsh/_kernel-install b/shell-completion/zsh/_kernel-install index b0dd82435..cb2565db7 100644 --- a/shell-completion/zsh/_kernel-install +++ b/shell-completion/zsh/_kernel-install @@ -1,4 +1,4 @@ -#compdef kernel-install -*- shell-script -*- +#compdef kernel-install # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_kernel-install_images] )) || diff --git a/shell-completion/zsh/_localectl b/shell-completion/zsh/_localectl index 851ac8253..23422a9a4 100644 --- a/shell-completion/zsh/_localectl +++ b/shell-completion/zsh/_localectl @@ -1,4 +1,4 @@ -#compdef localectl -*- shell-script -*- +#compdef localectl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_localectl_set-locale] )) || diff --git a/shell-completion/zsh/_loginctl b/shell-completion/zsh/_loginctl index 50c192daa..6478a52fe 100644 --- a/shell-completion/zsh/_loginctl +++ b/shell-completion/zsh/_loginctl @@ -1,4 +1,4 @@ -#compdef loginctl -*- shell-script -*- +#compdef loginctl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_loginctl_all_sessions] )) || diff --git a/shell-completion/zsh/_machinectl b/shell-completion/zsh/_machinectl index 9a4a32e62..8f4e57f12 100644 --- a/shell-completion/zsh/_machinectl +++ b/shell-completion/zsh/_machinectl @@ -1,4 +1,4 @@ -#compdef machinectl -*- shell-script -*- +#compdef machinectl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[__machinectl_get_machines] )) || diff --git a/shell-completion/zsh/_networkctl b/shell-completion/zsh/_networkctl index 273e7d94a..24d118045 100644 --- a/shell-completion/zsh/_networkctl +++ b/shell-completion/zsh/_networkctl @@ -1,4 +1,4 @@ -#compdef networkctl -*- shell-script -*- +#compdef networkctl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_networkctl_commands] )) || diff --git a/shell-completion/zsh/_resolvectl b/shell-completion/zsh/_resolvectl index 8a50fbdbb..eafc1ff42 100644 --- a/shell-completion/zsh/_resolvectl +++ b/shell-completion/zsh/_resolvectl @@ -1,4 +1,4 @@ -#compdef resolvectl systemd-resolve -*- shell-script -*- +#compdef resolvectl systemd-resolve # SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in index 217fac865..6fbe8737c 100644 --- a/shell-completion/zsh/_systemctl.in +++ b/shell-completion/zsh/_systemctl.in @@ -1,4 +1,4 @@ -#compdef systemctl -*- shell-script -*- +#compdef systemctl # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_systemctl_commands] )) || _systemctl_commands() diff --git a/shell-completion/zsh/_systemd b/shell-completion/zsh/_systemd index 5a8af1c91..863631571 100644 --- a/shell-completion/zsh/_systemd +++ b/shell-completion/zsh/_systemd @@ -1,4 +1,4 @@ -#compdef systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-detect-virt systemd-machine-id-setup systemd-notify systemd-tty-ask-password-agent -*- shell-script -*- +#compdef systemd-cat systemd-ask-password systemd-cgls systemd-cgtop systemd-detect-virt systemd-machine-id-setup systemd-notify systemd-tty-ask-password-agent # SPDX-License-Identifier: LGPL-2.1-or-later local curcontext="$curcontext" state lstate line diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze index 188d6b735..ce8e6162e 100644 --- a/shell-completion/zsh/_systemd-analyze +++ b/shell-completion/zsh/_systemd-analyze @@ -1,4 +1,4 @@ -#compdef systemd-analyze -*- shell-script -*- +#compdef systemd-analyze # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_systemd-analyze_log-level] )) || diff --git a/shell-completion/zsh/_systemd-delta b/shell-completion/zsh/_systemd-delta index 5cd140d1f..7d7456b87 100644 --- a/shell-completion/zsh/_systemd-delta +++ b/shell-completion/zsh/_systemd-delta @@ -1,4 +1,4 @@ -#compdef systemd-delta -*- shell-script -*- +#compdef systemd-delta # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_systemd-delta_types] )) || diff --git a/shell-completion/zsh/_systemd-inhibit b/shell-completion/zsh/_systemd-inhibit index 1ff8487bf..059ef9e6b 100644 --- a/shell-completion/zsh/_systemd-inhibit +++ b/shell-completion/zsh/_systemd-inhibit @@ -1,4 +1,4 @@ -#compdef systemd-inhibit -*- shell-script -*- +#compdef systemd-inhibit # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_systemd-inhibit_commands] )) || diff --git a/shell-completion/zsh/_systemd-nspawn b/shell-completion/zsh/_systemd-nspawn index d3cf06016..11c86df06 100644 --- a/shell-completion/zsh/_systemd-nspawn +++ b/shell-completion/zsh/_systemd-nspawn @@ -1,4 +1,4 @@ -#compdef systemd-nspawn -*- shell-script -*- +#compdef systemd-nspawn # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_systemd-nspawn_caps] )) || diff --git a/shell-completion/zsh/_systemd-run b/shell-completion/zsh/_systemd-run index d7af22610..322bb60e1 100644 --- a/shell-completion/zsh/_systemd-run +++ b/shell-completion/zsh/_systemd-run @@ -1,4 +1,4 @@ -#compdef systemd-run -*- shell-script -*- +#compdef systemd-run # SPDX-License-Identifier: LGPL-2.1-or-later # @todo _systemctl has a helper with the same name, so we must redefine diff --git a/shell-completion/zsh/_systemd-tmpfiles b/shell-completion/zsh/_systemd-tmpfiles index 8a23360bf..6c9094afd 100644 --- a/shell-completion/zsh/_systemd-tmpfiles +++ b/shell-completion/zsh/_systemd-tmpfiles @@ -1,4 +1,4 @@ -#compdef systemd-tmpfiles -*- shell-script -*- +#compdef systemd-tmpfiles # SPDX-License-Identifier: LGPL-2.1-or-later _arguments \ diff --git a/shell-completion/zsh/_timedatectl b/shell-completion/zsh/_timedatectl index eee086ea9..2dadb65db 100644 --- a/shell-completion/zsh/_timedatectl +++ b/shell-completion/zsh/_timedatectl @@ -1,4 +1,4 @@ -#compdef timedatectl -*- shell-script -*- +#compdef timedatectl # SPDX-License-Identifier: LGPL-2.1-or-later _timedatectl_set-timezone(){ diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm index 90800ccfc..a19829c1d 100644 --- a/shell-completion/zsh/_udevadm +++ b/shell-completion/zsh/_udevadm @@ -1,4 +1,4 @@ -#compdef udevadm -*- shell-script -*- +#compdef udevadm # SPDX-License-Identifier: LGPL-2.1-or-later (( $+functions[_udevadm_info] )) || diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c index 6a09a9a35..45305dec1 100644 --- a/src/ask-password/ask-password.c +++ b/src/ask-password/ask-password.c @@ -24,6 +24,7 @@ static usec_t arg_timeout = DEFAULT_TIMEOUT_USEC; static bool arg_multiple = false; static bool arg_no_output = false; static AskPasswordFlags arg_flags = ASK_PASSWORD_PUSH_CACHE; +static bool arg_newline = true; STATIC_DESTRUCTOR_REGISTER(arg_message, freep); @@ -54,6 +55,8 @@ static int help(void) { " --accept-cached Accept cached passwords\n" " --multiple List multiple passwords if available\n" " --no-output Do not print password to standard output\n" + " -n Do not suffix password written to standard output with\n" + " newline\n" "\nSee the %2$s for details.\n", program_invocation_short_name, link, @@ -104,7 +107,7 @@ static int parse_argv(int argc, char *argv[]) { /* Note the asymmetry: the long option --echo= allows an optional argument, the short option does * not. */ - while ((c = getopt_long(argc, argv, "+he", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "+hen", options, NULL)) >= 0) switch (c) { @@ -177,6 +180,10 @@ static int parse_argv(int argc, char *argv[]) { arg_credential_name = optarg; break; + case 'n': + arg_newline = false; + break; + case '?': return -EINVAL; @@ -237,8 +244,14 @@ static int run(int argc, char *argv[]) { return log_error_errno(r, "Failed to query password: %m"); STRV_FOREACH(p, l) { - if (!arg_no_output) - puts(*p); + if (!arg_no_output) { + if (arg_newline) + puts(*p); + else + fputs(*p, stdout); + } + + fflush(stdout); if (!arg_multiple) break; diff --git a/src/basic/dirent-util.c b/src/basic/dirent-util.c index 48aced748..f6213a305 100644 --- a/src/basic/dirent-util.c +++ b/src/basic/dirent-util.c @@ -7,7 +7,7 @@ #include "path-util.h" #include "string-util.h" -int dirent_ensure_type(DIR *d, struct dirent *de) { +static int dirent_ensure_type(DIR *d, struct dirent *de) { struct stat st; assert(d); @@ -59,11 +59,23 @@ bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) { return endswith(de->d_name, suffix); } -struct dirent* readdir_no_dot(DIR *dirp) { - struct dirent* d; +struct dirent *readdir_ensure_type(DIR *d) { + struct dirent *de; + + assert(d); + + errno = 0; + de = readdir(d); + if (de) + (void) dirent_ensure_type(d, de); + return de; +} + +struct dirent *readdir_no_dot(DIR *dirp) { + struct dirent *d; for (;;) { - d = readdir(dirp); + d = readdir_ensure_type(dirp); if (d && dot_or_dot_dot(d->d_name)) continue; return d; diff --git a/src/basic/dirent-util.h b/src/basic/dirent-util.h index 07750c39e..c7956e7c1 100644 --- a/src/basic/dirent-util.h +++ b/src/basic/dirent-util.h @@ -8,15 +8,14 @@ #include "macro.h" #include "path-util.h" -int dirent_ensure_type(DIR *d, struct dirent *de); - bool dirent_is_file(const struct dirent *de) _pure_; bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_; -struct dirent* readdir_no_dot(DIR *dirp); +struct dirent *readdir_ensure_type(DIR *d); +struct dirent *readdir_no_dot(DIR *dirp); #define FOREACH_DIRENT(de, d, on_error) \ - for (errno = 0, de = readdir(d);; errno = 0, de = readdir(d)) \ + for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \ if (!de) { \ if (errno > 0) { \ on_error; \ @@ -27,7 +26,7 @@ struct dirent* readdir_no_dot(DIR *dirp); else #define FOREACH_DIRENT_ALL(de, d, on_error) \ - for (errno = 0, de = readdir(d);; errno = 0, de = readdir(d)) \ + for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \ if (!de) { \ if (errno > 0) { \ on_error; \ diff --git a/src/basic/dlfcn-util.c b/src/basic/dlfcn-util.c deleted file mode 100644 index 2dbff0e35..000000000 --- a/src/basic/dlfcn-util.c +++ /dev/null @@ -1,40 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ - -#include "dlfcn-util.h" - -int dlsym_many_and_warn(void *dl, int level, ...) { - va_list ap; - int r; - - /* Tries to resolve a bunch of function symbols, and logs errors about the ones it cannot - * resolve. Note that this function possibly modifies the supplied function pointers if the whole - * operation fails */ - - va_start(ap, level); - - for (;;) { - void (**fn)(void); - void (*tfn)(void); - const char *symbol; - - fn = va_arg(ap, typeof(fn)); - if (!fn) - break; - - symbol = va_arg(ap, typeof(symbol)); - - tfn = (typeof(tfn)) dlsym(dl, symbol); - if (!tfn) { - r = log_full_errno(level, - SYNTHETIC_ERRNO(ELIBBAD), - "Can't find symbol %s: %s", symbol, dlerror()); - va_end(ap); - return r; - } - - *fn = tfn; - } - - va_end(ap); - return 0; -} diff --git a/src/basic/dlfcn-util.h b/src/basic/dlfcn-util.h deleted file mode 100644 index aa713d328..000000000 --- a/src/basic/dlfcn-util.h +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -#pragma once - -#include - -#include "macro.h" - -DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(void*, dlclose, NULL); - -int dlsym_many_and_warn(void *dl, int level, ...); - -/* Macro useful for putting together variable/symbol name pairs when calling dlsym_many_and_warn(). Assumes - * that each library symbol to resolve will be placed in a variable with the "sym_" prefix, i.e. a symbol - * "foobar" is loaded into a variable "sym_foobar". */ -#define DLSYM_ARG(arg) \ - &sym_##arg, STRINGIFY(arg) diff --git a/src/basic/extract-word.c b/src/basic/extract-word.c index 2c14b6f0c..9f9bb0c79 100644 --- a/src/basic/extract-word.c +++ b/src/basic/extract-word.c @@ -27,6 +27,7 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra assert(p); assert(ret); + assert(!FLAGS_SET(flags, EXTRACT_KEEP_QUOTE | EXTRACT_UNQUOTE)); /* Bail early if called after last value or with no input */ if (!*p) @@ -50,7 +51,8 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra goto finish_force_terminate; else if (strchr(separators, c)) { if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) { - (*p)++; + if (!(flags & EXTRACT_RETAIN_SEPARATORS)) + (*p)++; goto finish_force_next; } } else { @@ -123,48 +125,58 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra return -EINVAL; } else if (c == quote) { /* found the end quote */ quote = 0; - break; + if (flags & EXTRACT_UNQUOTE) + break; } else if (c == '\\' && !(flags & EXTRACT_RETAIN_ESCAPE)) { backslash = true; break; - } else { - if (!GREEDY_REALLOC(s, sz+2)) - return -ENOMEM; - - s[sz++] = c; } + + if (!GREEDY_REALLOC(s, sz+2)) + return -ENOMEM; + + s[sz++] = c; + + if (quote == 0) + break; } } else { for (;; (*p)++, c = **p) { if (c == 0) goto finish_force_terminate; - else if (IN_SET(c, '\'', '"') && (flags & EXTRACT_UNQUOTE)) { + else if (IN_SET(c, '\'', '"') && (flags & (EXTRACT_KEEP_QUOTE | EXTRACT_UNQUOTE))) { quote = c; - break; + if (flags & EXTRACT_UNQUOTE) + break; } else if (c == '\\' && !(flags & EXTRACT_RETAIN_ESCAPE)) { backslash = true; break; } else if (strchr(separators, c)) { if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) { - (*p)++; + if (!(flags & EXTRACT_RETAIN_SEPARATORS)) + (*p)++; goto finish_force_next; } - /* Skip additional coalesced separators. */ - for (;; (*p)++, c = **p) { - if (c == 0) - goto finish_force_terminate; - if (!strchr(separators, c)) - break; - } + if (!(flags & EXTRACT_RETAIN_SEPARATORS)) + /* Skip additional coalesced separators. */ + for (;; (*p)++, c = **p) { + if (c == 0) + goto finish_force_terminate; + if (!strchr(separators, c)) + break; + } goto finish; - } else { - if (!GREEDY_REALLOC(s, sz+2)) - return -ENOMEM; - - s[sz++] = c; } + + if (!GREEDY_REALLOC(s, sz+2)) + return -ENOMEM; + + s[sz++] = c; + + if (quote != 0) + break; } } } diff --git a/src/basic/extract-word.h b/src/basic/extract-word.h index 0e9e77e93..c82ad761e 100644 --- a/src/basic/extract-word.h +++ b/src/basic/extract-word.h @@ -8,9 +8,11 @@ typedef enum ExtractFlags { EXTRACT_CUNESCAPE = 1 << 1, /* Unescape known escape sequences. */ EXTRACT_UNESCAPE_RELAX = 1 << 2, /* Allow and keep unknown escape sequences, allow and keep trailing backslash. */ EXTRACT_UNESCAPE_SEPARATORS = 1 << 3, /* Unescape separators (those specified, or whitespace by default). */ - EXTRACT_UNQUOTE = 1 << 4, /* Remove quoting with "" and ''. */ - EXTRACT_DONT_COALESCE_SEPARATORS = 1 << 5, /* Don't treat multiple adjacent separators as one */ - EXTRACT_RETAIN_ESCAPE = 1 << 6, /* Treat escape character '\' as any other character without special meaning */ + EXTRACT_KEEP_QUOTE = 1 << 4, /* Ignore separators in quoting with "" and ''. */ + EXTRACT_UNQUOTE = 1 << 5, /* Ignore separators in quoting with "" and '', and remove the quotes. */ + EXTRACT_DONT_COALESCE_SEPARATORS = 1 << 6, /* Don't treat multiple adjacent separators as one */ + EXTRACT_RETAIN_ESCAPE = 1 << 7, /* Treat escape character '\' as any other character without special meaning */ + EXTRACT_RETAIN_SEPARATORS = 1 << 8, /* Do not advance the original string pointer past the separator(s) */ /* Note that if no flags are specified, escaped escape characters will be silently stripped. */ } ExtractFlags; diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c index 1a873601b..008f47434 100644 --- a/src/basic/fd-util.c +++ b/src/basic/fd-util.c @@ -2,19 +2,20 @@ #include #include +#include +#include +#include #include #include #include #include "alloc-util.h" -#include "copy.h" #include "dirent-util.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" #include "io-util.h" #include "macro.h" -#include "memfd-util.h" #include "missing_fcntl.h" #include "missing_syscall.h" #include "parse-util.h" @@ -520,343 +521,6 @@ int move_fd(int from, int to, int cloexec) { return to; } -int acquire_data_fd(const void *data, size_t size, unsigned flags) { - - _cleanup_close_pair_ int pipefds[2] = { -1, -1 }; - char pattern[] = "/dev/shm/data-fd-XXXXXX"; - _cleanup_close_ int fd = -1; - int isz = 0, r; - ssize_t n; - off_t f; - - assert(data || size == 0); - - /* Acquire a read-only file descriptor that when read from returns the specified data. This is much more - * complex than I wish it was. But here's why: - * - * a) First we try to use memfds. They are the best option, as we can seal them nicely to make them - * read-only. Unfortunately they require kernel 3.17, and – at the time of writing – we still support 3.14. - * - * b) Then, we try classic pipes. They are the second best options, as we can close the writing side, retaining - * a nicely read-only fd in the reading side. However, they are by default quite small, and unprivileged - * clients can only bump their size to a system-wide limit, which might be quite low. - * - * c) Then, we try an O_TMPFILE file in /dev/shm (that dir is the only suitable one known to exist from - * earliest boot on). To make it read-only we open the fd a second time with O_RDONLY via - * /proc/self/. Unfortunately O_TMPFILE is not available on older kernels on tmpfs. - * - * d) Finally, we try creating a regular file in /dev/shm, which we then delete. - * - * It sucks a bit that depending on the situation we return very different objects here, but that's Linux I - * figure. */ - - if (size == 0 && ((flags & ACQUIRE_NO_DEV_NULL) == 0)) { - /* As a special case, return /dev/null if we have been called for an empty data block */ - r = open("/dev/null", O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (r < 0) - return -errno; - - return r; - } - - if ((flags & ACQUIRE_NO_MEMFD) == 0) { - fd = memfd_new("data-fd"); - if (fd < 0) - goto try_pipe; - - n = write(fd, data, size); - if (n < 0) - return -errno; - if ((size_t) n != size) - return -EIO; - - f = lseek(fd, 0, SEEK_SET); - if (f != 0) - return -errno; - - r = memfd_set_sealed(fd); - if (r < 0) - return r; - - return TAKE_FD(fd); - } - -try_pipe: - if ((flags & ACQUIRE_NO_PIPE) == 0) { - if (pipe2(pipefds, O_CLOEXEC|O_NONBLOCK) < 0) - return -errno; - - isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); - if (isz < 0) - return -errno; - - if ((size_t) isz < size) { - isz = (int) size; - if (isz < 0 || (size_t) isz != size) - return -E2BIG; - - /* Try to bump the pipe size */ - (void) fcntl(pipefds[1], F_SETPIPE_SZ, isz); - - /* See if that worked */ - isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); - if (isz < 0) - return -errno; - - if ((size_t) isz < size) - goto try_dev_shm; - } - - n = write(pipefds[1], data, size); - if (n < 0) - return -errno; - if ((size_t) n != size) - return -EIO; - - (void) fd_nonblock(pipefds[0], false); - - return TAKE_FD(pipefds[0]); - } - -try_dev_shm: - if ((flags & ACQUIRE_NO_TMPFILE) == 0) { - fd = open("/dev/shm", O_RDWR|O_TMPFILE|O_CLOEXEC, 0500); - if (fd < 0) - goto try_dev_shm_without_o_tmpfile; - - n = write(fd, data, size); - if (n < 0) - return -errno; - if ((size_t) n != size) - return -EIO; - - /* Let's reopen the thing, in order to get an O_RDONLY fd for the original O_RDWR one */ - return fd_reopen(fd, O_RDONLY|O_CLOEXEC); - } - -try_dev_shm_without_o_tmpfile: - if ((flags & ACQUIRE_NO_REGULAR) == 0) { - fd = mkostemp_safe(pattern); - if (fd < 0) - return fd; - - n = write(fd, data, size); - if (n < 0) { - r = -errno; - goto unlink_and_return; - } - if ((size_t) n != size) { - r = -EIO; - goto unlink_and_return; - } - - /* Let's reopen the thing, in order to get an O_RDONLY fd for the original O_RDWR one */ - r = open(pattern, O_RDONLY|O_CLOEXEC); - if (r < 0) - r = -errno; - - unlink_and_return: - (void) unlink(pattern); - return r; - } - - return -EOPNOTSUPP; -} - -/* When the data is smaller or equal to 64K, try to place the copy in a memfd/pipe */ -#define DATA_FD_MEMORY_LIMIT (64U*1024U) - -/* If memfd/pipe didn't work out, then let's use a file in /tmp up to a size of 1M. If it's large than that use /var/tmp instead. */ -#define DATA_FD_TMP_LIMIT (1024U*1024U) - -int fd_duplicate_data_fd(int fd) { - - _cleanup_close_ int copy_fd = -1, tmp_fd = -1; - _cleanup_free_ void *remains = NULL; - size_t remains_size = 0; - const char *td; - struct stat st; - int r; - - /* Creates a 'data' fd from the specified source fd, containing all the same data in a read-only fashion, but - * independent of it (i.e. the source fd can be closed and unmounted after this call succeeded). Tries to be - * somewhat smart about where to place the data. In the best case uses a memfd(). If memfd() are not supported - * uses a pipe instead. For larger data will use an unlinked file in /tmp, and for even larger data one in - * /var/tmp. */ - - if (fstat(fd, &st) < 0) - return -errno; - - /* For now, let's only accept regular files, sockets, pipes and char devices */ - if (S_ISDIR(st.st_mode)) - return -EISDIR; - if (S_ISLNK(st.st_mode)) - return -ELOOP; - if (!S_ISREG(st.st_mode) && !S_ISSOCK(st.st_mode) && !S_ISFIFO(st.st_mode) && !S_ISCHR(st.st_mode)) - return -EBADFD; - - /* If we have reason to believe the data is bounded in size, then let's use memfds or pipes as backing fd. Note - * that we use the reported regular file size only as a hint, given that there are plenty special files in - * /proc and /sys which report a zero file size but can be read from. */ - - if (!S_ISREG(st.st_mode) || st.st_size < DATA_FD_MEMORY_LIMIT) { - - /* Try a memfd first */ - copy_fd = memfd_new("data-fd"); - if (copy_fd >= 0) { - off_t f; - - r = copy_bytes(fd, copy_fd, DATA_FD_MEMORY_LIMIT, 0); - if (r < 0) - return r; - - f = lseek(copy_fd, 0, SEEK_SET); - if (f != 0) - return -errno; - - if (r == 0) { - /* Did it fit into the limit? If so, we are done. */ - r = memfd_set_sealed(copy_fd); - if (r < 0) - return r; - - return TAKE_FD(copy_fd); - } - - /* Hmm, pity, this didn't fit. Let's fall back to /tmp then, see below */ - - } else { - _cleanup_(close_pairp) int pipefds[2] = { -1, -1 }; - int isz; - - /* If memfds aren't available, use a pipe. Set O_NONBLOCK so that we will get EAGAIN rather - * then block indefinitely when we hit the pipe size limit */ - - if (pipe2(pipefds, O_CLOEXEC|O_NONBLOCK) < 0) - return -errno; - - isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); - if (isz < 0) - return -errno; - - /* Try to enlarge the pipe size if necessary */ - if ((size_t) isz < DATA_FD_MEMORY_LIMIT) { - - (void) fcntl(pipefds[1], F_SETPIPE_SZ, DATA_FD_MEMORY_LIMIT); - - isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); - if (isz < 0) - return -errno; - } - - if ((size_t) isz >= DATA_FD_MEMORY_LIMIT) { - - r = copy_bytes_full(fd, pipefds[1], DATA_FD_MEMORY_LIMIT, 0, &remains, &remains_size, NULL, NULL); - if (r < 0 && r != -EAGAIN) - return r; /* If we get EAGAIN it could be because of the source or because of - * the destination fd, we can't know, as sendfile() and friends won't - * tell us. Hence, treat this as reason to fall back, just to be - * sure. */ - if (r == 0) { - /* Everything fit in, yay! */ - (void) fd_nonblock(pipefds[0], false); - - return TAKE_FD(pipefds[0]); - } - - /* Things didn't fit in. But we read data into the pipe, let's remember that, so that - * when writing the new file we incorporate this first. */ - copy_fd = TAKE_FD(pipefds[0]); - } - } - } - - /* If we have reason to believe this will fit fine in /tmp, then use that as first fallback. */ - if ((!S_ISREG(st.st_mode) || st.st_size < DATA_FD_TMP_LIMIT) && - (DATA_FD_MEMORY_LIMIT + remains_size) < DATA_FD_TMP_LIMIT) { - off_t f; - - tmp_fd = open_tmpfile_unlinkable(NULL /* NULL as directory means /tmp */, O_RDWR|O_CLOEXEC); - if (tmp_fd < 0) - return tmp_fd; - - if (copy_fd >= 0) { - /* If we tried a memfd/pipe first and it ended up being too large, then copy this into the - * temporary file first. */ - - r = copy_bytes(copy_fd, tmp_fd, UINT64_MAX, 0); - if (r < 0) - return r; - - assert(r == 0); - } - - if (remains_size > 0) { - /* If there were remaining bytes (i.e. read into memory, but not written out yet) from the - * failed copy operation, let's flush them out next. */ - - r = loop_write(tmp_fd, remains, remains_size, false); - if (r < 0) - return r; - } - - r = copy_bytes(fd, tmp_fd, DATA_FD_TMP_LIMIT - DATA_FD_MEMORY_LIMIT - remains_size, COPY_REFLINK); - if (r < 0) - return r; - if (r == 0) - goto finish; /* Yay, it fit in */ - - /* It didn't fit in. Let's not forget to use what we already used */ - f = lseek(tmp_fd, 0, SEEK_SET); - if (f != 0) - return -errno; - - CLOSE_AND_REPLACE(copy_fd, tmp_fd); - - remains = mfree(remains); - remains_size = 0; - } - - /* As last fallback use /var/tmp */ - r = var_tmp_dir(&td); - if (r < 0) - return r; - - tmp_fd = open_tmpfile_unlinkable(td, O_RDWR|O_CLOEXEC); - if (tmp_fd < 0) - return tmp_fd; - - if (copy_fd >= 0) { - /* If we tried a memfd/pipe first, or a file in /tmp, and it ended up being too large, than copy this - * into the temporary file first. */ - r = copy_bytes(copy_fd, tmp_fd, UINT64_MAX, COPY_REFLINK); - if (r < 0) - return r; - - assert(r == 0); - } - - if (remains_size > 0) { - /* Then, copy in any read but not yet written bytes. */ - r = loop_write(tmp_fd, remains, remains_size, false); - if (r < 0) - return r; - } - - /* Copy in the rest */ - r = copy_bytes(fd, tmp_fd, UINT64_MAX, COPY_REFLINK); - if (r < 0) - return r; - - assert(r == 0); - -finish: - /* Now convert the O_RDWR file descriptor into an O_RDONLY one (and as side effect seek to the beginning of the - * file again */ - - return fd_reopen(tmp_fd, O_RDONLY|O_CLOEXEC); -} - int fd_move_above_stdio(int fd) { int flags, copy; PROTECT_ERRNO; @@ -1057,3 +721,20 @@ int read_nr_open(void) { /* If we fail, fall back to the hard-coded kernel limit of 1024 * 1024. */ return 1024 * 1024; } + +/* This is here because it's fd-related and is called from sd-journal code. Other btrfs-related utilities are + * in src/shared, but libsystemd must not link to libsystemd-shared, see docs/ARCHITECTURE.md. */ +int btrfs_defrag_fd(int fd) { + int r; + + assert(fd >= 0); + + r = fd_verify_regular(fd); + if (r < 0) + return r; + + if (ioctl(fd, BTRFS_IOC_DEFRAG, NULL) < 0) + return -errno; + + return 0; +} diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h index aa8e082b3..9529a4723 100644 --- a/src/basic/fd-util.h +++ b/src/basic/fd-util.h @@ -76,10 +76,6 @@ enum { ACQUIRE_NO_REGULAR = 1 << 4, }; -int acquire_data_fd(const void *data, size_t size, unsigned flags); - -int fd_duplicate_data_fd(int fd); - int fd_move_above_stdio(int fd); int rearrange_stdio(int original_input_fd, int original_output_fd, int original_error_fd); @@ -107,5 +103,5 @@ static inline int make_null_stdio(void) { int fd_reopen(int fd, int flags); - int read_nr_open(void); +int btrfs_defrag_fd(int fd); diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 5fe8fbab9..1cfd17008 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -8,7 +8,6 @@ #include #include "alloc-util.h" -#include "blockdev-util.h" #include "dirent-util.h" #include "fd-util.h" #include "fileio.h" @@ -581,8 +580,6 @@ int get_files_in_directory(const char *path, char ***list) { return -errno; FOREACH_DIRENT_ALL(de, d, return -errno) { - dirent_ensure_type(d, de); - if (!dirent_is_file(de)) continue; @@ -1504,91 +1501,6 @@ int open_parent(const char *path, int flags, mode_t mode) { return fd; } -static int blockdev_is_encrypted(const char *sysfs_path, unsigned depth_left) { - _cleanup_free_ char *p = NULL, *uuids = NULL; - _cleanup_closedir_ DIR *d = NULL; - int r, found_encrypted = false; - - assert(sysfs_path); - - if (depth_left == 0) - return -EINVAL; - - p = path_join(sysfs_path, "dm/uuid"); - if (!p) - return -ENOMEM; - - r = read_one_line_file(p, &uuids); - if (r != -ENOENT) { - if (r < 0) - return r; - - /* The DM device's uuid attribute is prefixed with "CRYPT-" if this is a dm-crypt device. */ - if (startswith(uuids, "CRYPT-")) - return true; - } - - /* Not a dm-crypt device itself. But maybe it is on top of one? Follow the links in the "slaves/" - * subdir. */ - - p = mfree(p); - p = path_join(sysfs_path, "slaves"); - if (!p) - return -ENOMEM; - - d = opendir(p); - if (!d) { - if (errno == ENOENT) /* Doesn't have underlying devices */ - return false; - - return -errno; - } - - for (;;) { - _cleanup_free_ char *q = NULL; - struct dirent *de; - - errno = 0; - de = readdir_no_dot(d); - if (!de) { - if (errno != 0) - return -errno; - - break; /* No more underlying devices */ - } - - q = path_join(p, de->d_name); - if (!q) - return -ENOMEM; - - r = blockdev_is_encrypted(q, depth_left - 1); - if (r < 0) - return r; - if (r == 0) /* we found one that is not encrypted? then propagate that immediately */ - return false; - - found_encrypted = true; - } - - return found_encrypted; -} - -int path_is_encrypted(const char *path) { - char p[SYS_BLOCK_PATH_MAX(NULL)]; - dev_t devt; - int r; - - r = get_block_device(path, &devt); - if (r < 0) - return r; - if (r == 0) /* doesn't have a block device */ - return false; - - xsprintf_sys_block_path(p, NULL, devt); - - return blockdev_is_encrypted(p, 10 /* safety net: maximum recursion depth */); -} - int conservative_renameat( int olddirfd, const char *oldpath, int newdirfd, const char *newpath) { diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index 85bdea64d..7f15b558c 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -145,8 +145,6 @@ int syncfs_path(int atfd, const char *path); int open_parent(const char *path, int flags, mode_t mode); -int path_is_encrypted(const char *path); - int conservative_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath); static inline int conservative_rename(const char *oldpath, const char *newpath) { return conservative_renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath); diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c index b81807815..fd6b01cfa 100644 --- a/src/basic/locale-util.c +++ b/src/basic/locale-util.c @@ -169,8 +169,6 @@ static int add_locales_from_libdir (Set *locales) { FOREACH_DIRENT(entry, dir, return -errno) { char *z; - dirent_ensure_type(dir, entry); - if (entry->d_type != DT_DIR) continue; diff --git a/src/basic/meson.build b/src/basic/meson.build index 846301fec..9b016ce5e 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -15,10 +15,6 @@ basic_sources = files(''' async.h audit-util.c audit-util.h - blockdev-util.c - blockdev-util.h - btrfs-util.c - btrfs-util.h build.c build.h bus-label.c @@ -33,15 +29,11 @@ basic_sources = files(''' chattr-util.h conf-files.c conf-files.h - copy.c - copy.h creds-util.c creds-util.h def.h dirent-util.c dirent-util.h - dlfcn-util.c - dlfcn-util.h dns-def.h efivars.c efivars.h @@ -85,8 +77,6 @@ basic_sources = files(''' ioprio.h khash.c khash.h - label.c - label.h limits-util.c limits-util.h linux/btrfs.h @@ -144,6 +134,7 @@ basic_sources = files(''' missing_keyctl.h missing_magic.h missing_mman.h + missing_mount.h missing_network.h missing_prctl.h missing_random.h @@ -156,7 +147,6 @@ basic_sources = files(''' missing_syscall.h missing_timerfd.h missing_type.h - mkdir-label.c mkdir.c mkdir.h mountpoint-util.c @@ -187,8 +177,6 @@ basic_sources = files(''' procfs-util.c procfs-util.h pthread-util.h - quota-util.c - quota-util.h random-util.c random-util.h ratelimit.c @@ -201,10 +189,6 @@ basic_sources = files(''' replace-var.h rlimit-util.c rlimit-util.h - rm-rf.c - rm-rf.h - selinux-util.c - selinux-util.h set.h sigbus.c sigbus.h @@ -212,9 +196,6 @@ basic_sources = files(''' signal-util.h siphash24.c siphash24.h - smack-util.c - smack-util.h - socket-label.c socket-util.c socket-util.h sort-util.c @@ -393,10 +374,7 @@ libbasic = static_library( dependencies : [versiondep, threads, libcap, - libseccomp, - libselinux, - libm, - libdl], + libm], c_args : ['-fvisibility=default'], install : false) diff --git a/src/basic/missing_mount.h b/src/basic/missing_mount.h new file mode 100644 index 000000000..c60acf041 --- /dev/null +++ b/src/basic/missing_mount.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +/* dab741e0e02bd3c4f5e2e97be74b39df2523fc6e (5.10) */ +#ifndef MS_NOSYMFOLLOW +#define MS_NOSYMFOLLOW 256 +#endif diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c index 1d617e87b..8c836a1b7 100644 --- a/src/basic/mountpoint-util.c +++ b/src/basic/mountpoint-util.c @@ -8,7 +8,6 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "label.h" #include "missing_stat.h" #include "missing_syscall.h" #include "mkdir.h" @@ -510,25 +509,3 @@ int mount_propagation_flags_from_string(const char *name, unsigned long *ret) { return -EINVAL; return 0; } - -int make_mount_point_inode_from_stat(const struct stat *st, const char *dest, mode_t mode) { - assert(st); - assert(dest); - - if (S_ISDIR(st->st_mode)) - return mkdir_label(dest, mode); - else - return mknod(dest, S_IFREG|(mode & ~0111), 0); -} - -int make_mount_point_inode_from_path(const char *source, const char *dest, mode_t mode) { - struct stat st; - - assert(source); - assert(dest); - - if (stat(source, &st) < 0) - return -errno; - - return make_mount_point_inode_from_stat(&st, dest, mode); -} diff --git a/src/basic/mountpoint-util.h b/src/basic/mountpoint-util.h index cebcec5e7..aadb2123d 100644 --- a/src/basic/mountpoint-util.h +++ b/src/basic/mountpoint-util.h @@ -23,7 +23,3 @@ int dev_is_devtmpfs(void); const char *mount_propagation_flags_to_string(unsigned long flags); int mount_propagation_flags_from_string(const char *name, unsigned long *ret); - -/* Creates a mount point (not parents) based on the source path or stat - ie, a file or a directory */ -int make_mount_point_inode_from_stat(const struct stat *st, const char *dest, mode_t mode); -int make_mount_point_inode_from_path(const char *source, const char *dest, mode_t mode); diff --git a/src/basic/path-util.c b/src/basic/path-util.c index eb547e746..e5afb5f5f 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -514,10 +514,6 @@ int path_compare(const char *a, const char *b) { } } -bool path_equal(const char *a, const char *b) { - return path_compare(a, b) == 0; -} - bool path_equal_or_files_same(const char *a, const char *b, int flags) { return path_equal(a, b) || files_same(a, b, flags) > 0; } diff --git a/src/basic/path-util.h b/src/basic/path-util.h index c6d466879..26e7362d1 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -62,7 +62,11 @@ static inline char* path_startswith(const char *path, const char *prefix) { return path_startswith_full(path, prefix, true); } int path_compare(const char *a, const char *b) _pure_; -bool path_equal(const char *a, const char *b) _pure_; + +static inline bool path_equal(const char *a, const char *b) { + return path_compare(a, b) == 0; +} + bool path_equal_or_files_same(const char *a, const char *b, int flags); /* Compares only the last portion of the input paths, ie: the filenames */ bool path_equal_filename(const char *a, const char *b); diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index f6e751a09..1c353e86b 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -748,6 +748,22 @@ static const char* const ip_tos_table[] = { DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(ip_tos, int, 0xff); +bool ifname_valid_char(char a) { + if ((unsigned char) a >= 127U) + return false; + + if ((unsigned char) a <= 32U) + return false; + + if (IN_SET(a, + ':', /* colons are used by the legacy "alias" interface logic */ + '/', /* slashes cannot work, since we need to use network interfaces in sysfs paths, and in paths slashes are separators */ + '%')) /* %d is used in the kernel's weird foo%d format string naming feature which we really really don't want to ever run into by accident */ + return false; + + return true; +} + bool ifname_valid_full(const char *p, IfnameValidFlags flags) { bool numeric = true; @@ -781,16 +797,7 @@ bool ifname_valid_full(const char *p, IfnameValidFlags flags) { return false; for (const char *t = p; *t; t++) { - if ((unsigned char) *t >= 127U) - return false; - - if ((unsigned char) *t <= 32U) - return false; - - if (IN_SET(*t, - ':', /* colons are used by the legacy "alias" interface logic */ - '/', /* slashes cannot work, since we need to use network interfaces in sysfs paths, and in paths slashes are separators */ - '%')) /* %d is used in the kernel's weird foo%d format string naming feature which we really really don't want to ever run into by accident */ + if (!ifname_valid_char(*t)) return false; numeric = numeric && (*t >= '0' && *t <= '9'); diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h index e0b959f5d..f92e425fd 100644 --- a/src/basic/socket-util.h +++ b/src/basic/socket-util.h @@ -139,6 +139,7 @@ typedef enum { IFNAME_VALID_NUMERIC = 1 << 1, _IFNAME_VALID_ALL = IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC, } IfnameValidFlags; +bool ifname_valid_char(char a); bool ifname_valid_full(const char *p, IfnameValidFlags flags); static inline bool ifname_valid(const char *p) { return ifname_valid_full(p, 0); diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index ed0632b02..d769423d6 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -21,7 +21,6 @@ #include #include "alloc-util.h" -#include "copy.h" #include "def.h" #include "env-util.h" #include "fd-util.h" diff --git a/src/basic/time-util.c b/src/basic/time-util.c index 26a6762b1..48e4d8dea 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -429,19 +429,37 @@ char *format_timestamp_relative(char *buf, size_t l, usec_t t) { s = "left"; } - if (d >= USEC_PER_YEAR) - snprintf(buf, l, USEC_FMT " years " USEC_FMT " months %s", - d / USEC_PER_YEAR, - (d % USEC_PER_YEAR) / USEC_PER_MONTH, s); - else if (d >= USEC_PER_MONTH) - snprintf(buf, l, USEC_FMT " months " USEC_FMT " days %s", - d / USEC_PER_MONTH, - (d % USEC_PER_MONTH) / USEC_PER_DAY, s); - else if (d >= USEC_PER_WEEK) - snprintf(buf, l, USEC_FMT " weeks " USEC_FMT " days %s", - d / USEC_PER_WEEK, - (d % USEC_PER_WEEK) / USEC_PER_DAY, s); - else if (d >= 2*USEC_PER_DAY) + if (d >= USEC_PER_YEAR) { + usec_t years = d / USEC_PER_YEAR; + usec_t months = (d % USEC_PER_YEAR) / USEC_PER_MONTH; + + snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s", + years, + years == 1 ? "year" : "years", + months, + months == 1 ? "month" : "months", + s); + } else if (d >= USEC_PER_MONTH) { + usec_t months = d / USEC_PER_MONTH; + usec_t days = (d % USEC_PER_MONTH) / USEC_PER_DAY; + + snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s", + months, + months == 1 ? "month" : "months", + days, + days == 1 ? "day" : "days", + s); + } else if (d >= USEC_PER_WEEK) { + usec_t weeks = d / USEC_PER_WEEK; + usec_t days = (d % USEC_PER_WEEK) / USEC_PER_DAY; + + snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s", + weeks, + weeks == 1 ? "week" : "weeks", + days, + days == 1 ? "day" : "days", + s); + } else if (d >= 2*USEC_PER_DAY) snprintf(buf, l, USEC_FMT " days %s", d / USEC_PER_DAY, s); else if (d >= 25*USEC_PER_HOUR) snprintf(buf, l, "1 day " USEC_FMT "h %s", diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c index f20ae4dbe..884a0674a 100644 --- a/src/basic/unit-file.c +++ b/src/basic/unit-file.c @@ -321,7 +321,6 @@ int unit_file_build_name_map( if (hashmap_contains(ids, de->d_name)) continue; - dirent_ensure_type(d, de); if (de->d_type == DT_LNK) { /* We don't explicitly check for alias loops here. unit_ids_map_get() which * limits the number of hops should be used to access the map. */ diff --git a/src/basic/virt.c b/src/basic/virt.c index 9b8518bd0..7e88f09b4 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -186,6 +186,7 @@ static int detect_vm_dmi_vendor(void) { return dmi_vendor_table[j].id; } } + log_debug("No virtualization found in DMI vendor table."); return VIRTUALIZATION_NONE; } @@ -202,7 +203,8 @@ static int detect_vm_smbios(void) { r = read_full_virtual_file("/sys/firmware/dmi/entries/0-0/raw", &s, &readsize); if (r < 0) { - log_debug_errno(r, "Unable to read /sys/firmware/dmi/entries/0-0/raw, ignoring: %m"); + log_debug_errno(r, "Unable to read /sys/firmware/dmi/entries/0-0/raw, " + "using the virtualization information found in DMI vendor table, ignoring: %m"); return SMBIOS_VM_BIT_UNKNOWN; } if (readsize < 20 || s[1] < 20) { @@ -210,16 +212,17 @@ static int detect_vm_smbios(void) { * extension bytes. The data we're interested in is in extension byte 2, which would be at * 0x13. If we didn't read that much data, or if the BIOS indicates that we don't have that * much data, we don't infer anything from the SMBIOS. */ - log_debug("Only read %zu bytes from /sys/firmware/dmi/entries/0-0/raw (expected 20)", readsize); + log_debug("Only read %zu bytes from /sys/firmware/dmi/entries/0-0/raw (expected 20). " + "Using the virtualization information found in DMI vendor table.", readsize); return SMBIOS_VM_BIT_UNKNOWN; } uint8_t byte = (uint8_t) s[19]; if (byte & (1U<<4)) { - log_debug("DMI BIOS Extension table indicates virtualization"); + log_debug("DMI BIOS Extension table indicates virtualization."); return SMBIOS_VM_BIT_SET; } - log_debug("DMI BIOS Extension table does not indicate virtualization"); + log_debug("DMI BIOS Extension table does not indicate virtualization."); return SMBIOS_VM_BIT_UNSET; } #endif /* defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) */ diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 758dd8f1b..de057a024 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -11,6 +11,7 @@ #include "bus-common-errors.h" #include "bus-get-properties.h" #include "bus-log-control-api.h" +#include "data-fd-util.h" #include "dbus-cgroup.h" #include "dbus-execute.h" #include "dbus-job.h" diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c index 61c2f1a19..f45a5c16e 100644 --- a/src/core/dbus-socket.c +++ b/src/core/dbus-socket.c @@ -383,8 +383,8 @@ static int bus_socket_set_transient_property( return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown Socket type: %s", t); if (p->type != SOCKET_SOCKET) { - if (!path_is_valid(p->path)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid socket path: %s", t); + if (!path_is_valid(a)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid socket path: %s", a); p->path = strdup(a); if (!p->path) diff --git a/src/core/execute.c b/src/core/execute.c index f9d23272c..a83b1b569 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -46,6 +46,7 @@ #include "cgroup-setup.h" #include "chown-recursive.h" #include "cpu-set-util.h" +#include "data-fd-util.h" #include "def.h" #include "env-file.h" #include "env-util.h" @@ -3189,6 +3190,8 @@ static int apply_mount_namespace( .protect_proc = context->protect_proc, .proc_subset = context->proc_subset, .private_ipc = context->private_ipc || context->ipc_namespace_path, + /* If NNP is on, we can turn on MS_NOSUID, since it won't have any effect anymore. */ + .mount_nosuid = context->no_new_privileges && !mac_selinux_use(), }; } else if (!context->dynamic_user && root_dir) /* diff --git a/src/core/load-fragment-gperf.gperf.in b/src/core/load-fragment-gperf.gperf.in index 17f2bea5b..d343145fa 100644 --- a/src/core/load-fragment-gperf.gperf.in +++ b/src/core/load-fragment-gperf.gperf.in @@ -330,6 +330,7 @@ Unit.ConditionEnvironment, config_parse_unit_condition_string, Unit.ConditionUser, config_parse_unit_condition_string, CONDITION_USER, offsetof(Unit, conditions) Unit.ConditionGroup, config_parse_unit_condition_string, CONDITION_GROUP, offsetof(Unit, conditions) Unit.ConditionControlGroupController, config_parse_unit_condition_string, CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, conditions) +Unit.ConditionOSRelease, config_parse_unit_condition_string, CONDITION_OS_RELEASE, offsetof(Unit, conditions) Unit.AssertPathExists, config_parse_unit_condition_path, CONDITION_PATH_EXISTS, offsetof(Unit, asserts) Unit.AssertPathExistsGlob, config_parse_unit_condition_path, CONDITION_PATH_EXISTS_GLOB, offsetof(Unit, asserts) Unit.AssertPathIsDirectory, config_parse_unit_condition_path, CONDITION_PATH_IS_DIRECTORY, offsetof(Unit, asserts) @@ -356,6 +357,7 @@ Unit.AssertEnvironment, config_parse_unit_condition_string, Unit.AssertUser, config_parse_unit_condition_string, CONDITION_USER, offsetof(Unit, asserts) Unit.AssertGroup, config_parse_unit_condition_string, CONDITION_GROUP, offsetof(Unit, asserts) Unit.AssertControlGroupController, config_parse_unit_condition_string, CONDITION_CONTROL_GROUP_CONTROLLER, offsetof(Unit, asserts) +Unit.AssertOSRelease, config_parse_unit_condition_string, CONDITION_OS_RELEASE, offsetof(Unit, asserts) Unit.CollectMode, config_parse_collect_mode, 0, offsetof(Unit, collect_mode) Service.PIDFile, config_parse_pid_file, 0, offsetof(Service, pid_file) Service.ExecCondition, config_parse_exec, SERVICE_EXEC_CONDITION, offsetof(Service, exec_command) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index b18f3b34d..b0f246954 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -2660,7 +2660,7 @@ int config_parse_environ( if (u) r = unit_env_printf(u, word, &resolved); else - r = specifier_printf(word, sc_arg_max(), system_and_tmp_specifier_table, NULL, &resolved); + r = specifier_printf(word, sc_arg_max(), system_and_tmp_specifier_table, NULL, NULL, &resolved); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to resolve specifiers in %s, ignoring: %m", word); diff --git a/src/core/manager.c b/src/core/manager.c index 21358a046..f3275a407 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -4511,16 +4511,14 @@ void manager_status_printf(Manager *m, StatusType type, const char *status, cons va_end(ap); } -Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path) { - char p[strlen(path)+1]; - +Set* manager_get_units_requiring_mounts_for(Manager *m, const char *path) { assert(m); assert(path); - strcpy(p, path); - path_simplify(p); + if (path_equal(path, "/")) + path = ""; - return hashmap_get(m->units_requiring_mounts_for, streq(p, "/") ? "" : p); + return hashmap_get(m->units_requiring_mounts_for, path); } int manager_update_failed_units(Manager *m, Unit *u, bool failed) { diff --git a/src/core/namespace.c b/src/core/namespace.c index 6d77ce996..160ed9bc0 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -1157,6 +1157,15 @@ static int mount_image(const MountEntry *m, const char *root_directory) { host_os_release_id, host_os_release_version_id, host_os_release_sysext_level); if (r == -ENOENT && m->ignore) return 0; + if (r == -ESTALE && host_os_release_id) + return log_error_errno(r, + "Failed to mount image %s, extension-release metadata does not match the lower layer's: ID=%s%s%s%s%s", + mount_entry_source(m), + host_os_release_id, + host_os_release_version_id ? " VERSION_ID=" : "", + strempty(host_os_release_version_id), + host_os_release_sysext_level ? " SYSEXT_LEVEL=" : "", + strempty(host_os_release_sysext_level)); if (r < 0) return log_debug_errno(r, "Failed to mount image %s on %s: %m", mount_entry_source(m), mount_entry_path(m)); @@ -1464,6 +1473,27 @@ static int make_noexec(const MountEntry *m, char **deny_list, FILE *proc_self_mo return 0; } +static int make_nosuid(const MountEntry *m, FILE *proc_self_mountinfo) { + bool submounts = false; + int r = 0; + + assert(m); + assert(proc_self_mountinfo); + + submounts = !IN_SET(m->mode, EMPTY_DIR, TMPFS); + + if (submounts) + r = bind_remount_recursive_with_mountinfo(mount_entry_path(m), MS_NOSUID, MS_NOSUID, NULL, proc_self_mountinfo); + else + r = bind_remount_one_with_mountinfo(mount_entry_path(m), MS_NOSUID, MS_NOSUID, proc_self_mountinfo); + if (r == -ENOENT && m->ignore) + return 0; + if (r < 0) + return log_debug_errno(r, "Failed to re-mount '%s'%s: %m", mount_entry_path(m), + submounts ? " and its submounts" : ""); + return 0; +} + static bool namespace_info_mount_apivfs(const NamespaceInfo *ns_info) { assert(ns_info); @@ -1660,6 +1690,17 @@ static int apply_mounts( } } + /* Fourth round, flip the nosuid bits without a deny list. */ + if (ns_info->mount_nosuid) + for (MountEntry *m = mounts; m < mounts + *n_mounts; ++m) { + r = make_nosuid(m, proc_self_mountinfo); + if (r < 0) { + if (error_path && mount_entry_path(m)) + *error_path = strdup(mount_entry_path(m)); + return r; + } + } + return 1; } diff --git a/src/core/namespace.h b/src/core/namespace.h index 737d6eae8..c9373a4ad 100644 --- a/src/core/namespace.h +++ b/src/core/namespace.h @@ -74,6 +74,7 @@ struct NamespaceInfo { bool mount_apivfs; bool protect_hostname; bool private_ipc; + bool mount_nosuid; ProtectHome protect_home; ProtectSystem protect_system; ProtectProc protect_proc; diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c index 58ad085dc..79c480847 100644 --- a/src/core/smack-setup.c +++ b/src/core/smack-setup.c @@ -82,7 +82,6 @@ static int write_access2_rules(const char *srcdir) { FOREACH_DIRENT(entry, dir, return 0) { _cleanup_fclose_ FILE *policy = NULL; - dirent_ensure_type(dir, entry); if (!dirent_is_file(entry)) continue; @@ -149,7 +148,6 @@ static int write_cipso2_rules(const char *srcdir) { FOREACH_DIRENT(entry, dir, return 0) { _cleanup_fclose_ FILE *policy = NULL; - dirent_ensure_type(dir, entry); if (!dirent_is_file(entry)) continue; diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index 113dd1cc8..46c383b84 100644 --- a/src/core/unit-printf.c +++ b/src/core/unit-printf.c @@ -12,7 +12,7 @@ #include "unit.h" #include "user-util.h" -static int specifier_prefix_and_instance(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; assert(u); @@ -20,7 +20,7 @@ static int specifier_prefix_and_instance(char specifier, const void *data, const return unit_name_to_prefix_and_instance(u->id, ret); } -static int specifier_prefix(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; assert(u); @@ -28,7 +28,7 @@ static int specifier_prefix(char specifier, const void *data, const void *userda return unit_name_to_prefix(u->id, ret); } -static int specifier_prefix_unescaped(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_prefix_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) { _cleanup_free_ char *p = NULL; const Unit *u = userdata; int r; @@ -42,7 +42,7 @@ static int specifier_prefix_unescaped(char specifier, const void *data, const vo return unit_name_unescape(p, ret); } -static int specifier_instance_unescaped(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_instance_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; assert(u); @@ -50,7 +50,7 @@ static int specifier_instance_unescaped(char specifier, const void *data, const return unit_name_unescape(strempty(u->instance), ret); } -static int specifier_last_component(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_last_component(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; _cleanup_free_ char *prefix = NULL; char *dash; @@ -64,24 +64,24 @@ static int specifier_last_component(char specifier, const void *data, const void dash = strrchr(prefix, '-'); if (dash) - return specifier_string(specifier, dash + 1, userdata, ret); + return specifier_string(specifier, dash + 1, root, userdata, ret); *ret = TAKE_PTR(prefix); return 0; } -static int specifier_last_component_unescaped(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_last_component_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) { _cleanup_free_ char *p = NULL; int r; - r = specifier_last_component(specifier, data, userdata, &p); + r = specifier_last_component(specifier, data, root, userdata, &p); if (r < 0) return r; return unit_name_unescape(p, ret); } -static int specifier_filename(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_filename(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; assert(u); @@ -96,7 +96,7 @@ static void bad_specifier(const Unit *u, char specifier) { log_unit_warning(u, "Specifier '%%%c' used in unit configuration, which is deprecated. Please update your unit file, as it does not work as intended.", specifier); } -static int specifier_cgroup(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_cgroup(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; char *n; @@ -115,7 +115,7 @@ static int specifier_cgroup(char specifier, const void *data, const void *userda return 0; } -static int specifier_cgroup_root(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_cgroup_root(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; char *n; @@ -131,7 +131,7 @@ static int specifier_cgroup_root(char specifier, const void *data, const void *u return 0; } -static int specifier_cgroup_slice(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_cgroup_slice(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata, *slice; char *n; @@ -154,7 +154,7 @@ static int specifier_cgroup_slice(char specifier, const void *data, const void * return 0; } -static int specifier_special_directory(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_special_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const Unit *u = userdata; char *n = NULL; @@ -198,7 +198,7 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) { assert(format); assert(ret); - return specifier_printf(format, UNIT_NAME_MAX, table, u, ret); + return specifier_printf(format, UNIT_NAME_MAX, table, NULL, u, ret); } int unit_full_printf_full(const Unit *u, const char *format, size_t max_length, char **ret) { @@ -262,5 +262,5 @@ int unit_full_printf_full(const Unit *u, const char *format, size_t max_length, {} }; - return specifier_printf(format, max_length, table, u, ret); + return specifier_printf(format, max_length, table, NULL, u, ret); } diff --git a/src/core/unit.c b/src/core/unit.c index 4dc6ff08d..3792cee71 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -4562,45 +4562,43 @@ int unit_kill_context( } int unit_require_mounts_for(Unit *u, const char *path, UnitDependencyMask mask) { - _cleanup_free_ char *p = NULL; - UnitDependencyInfo di; int r; assert(u); assert(path); - /* Registers a unit for requiring a certain path and all its prefixes. We keep a hashtable of these paths in - * the unit (from the path to the UnitDependencyInfo structure indicating how to the dependency came to - * be). However, we build a prefix table for all possible prefixes so that new appearing mount units can easily - * determine which units to make themselves a dependency of. */ + /* Registers a unit for requiring a certain path and all its prefixes. We keep a hashtable of these + * paths in the unit (from the path to the UnitDependencyInfo structure indicating how to the + * dependency came to be). However, we build a prefix table for all possible prefixes so that new + * appearing mount units can easily determine which units to make themselves a dependency of. */ if (!path_is_absolute(path)) return -EINVAL; - r = hashmap_ensure_allocated(&u->requires_mounts_for, &path_hash_ops); - if (r < 0) - return r; + if (hashmap_contains(u->requires_mounts_for, path)) /* Exit quickly if the path is already covered. */ + return 0; - p = strdup(path); + _cleanup_free_ char *p = strdup(path); if (!p) return -ENOMEM; + /* Use the canonical form of the path as the stored key. We call path_is_normalized() + * only after simplification, since path_is_normalized() rejects paths with '.'. + * path_is_normalized() also verifies that the path fits in PATH_MAX. */ path = path_simplify(p); if (!path_is_normalized(path)) return -EPERM; - if (hashmap_contains(u->requires_mounts_for, path)) - return 0; - - di = (UnitDependencyInfo) { + UnitDependencyInfo di = { .origin_mask = mask }; - r = hashmap_put(u->requires_mounts_for, path, di.data); + r = hashmap_ensure_put(&u->requires_mounts_for, &path_hash_ops, p, di.data); if (r < 0) return r; - p = NULL; + assert(r > 0); + TAKE_PTR(p); /* path remains a valid pointer to the string stored in the hashmap */ char prefix[strlen(path) + 1]; PATH_FOREACH_PREFIX_MORE(prefix, path) { @@ -5520,7 +5518,11 @@ int unit_pid_attachable(Unit *u, pid_t pid, sd_bus_error *error) { void unit_log_success(Unit *u) { assert(u); - log_unit_struct(u, LOG_INFO, + /* Let's show message "Deactivated successfully" in debug mode (when manager is user) rather than in info mode. + * This message has low information value for regular users and it might be a bit overwhelming on a system with + * a lot of devices. */ + log_unit_struct(u, + MANAGER_IS_USER(u->manager) ? LOG_DEBUG : LOG_INFO, "MESSAGE_ID=" SD_MESSAGE_UNIT_SUCCESS_STR, LOG_UNIT_INVOCATION_ID(u), LOG_UNIT_MESSAGE(u, "Deactivated successfully.")); diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c index 460e895a0..d253b2bc0 100644 --- a/src/cryptenroll/cryptenroll.c +++ b/src/cryptenroll/cryptenroll.c @@ -97,7 +97,7 @@ static int help(void) { " Whether to require user verification to unlock the volume\n" " --tpm2-device=PATH\n" " Enroll a TPM2 device\n" - " --tpm2-pcrs=PCR1+PCR2+PCR3,…\n" + " --tpm2-pcrs=PCR1+PCR2+PCR3+…\n" " Specify TPM2 PCRs to seal against\n" " --wipe-slot=SLOT1,SLOT2,…\n" " Wipe specified slots\n" diff --git a/src/delta/delta.c b/src/delta/delta.c index 9ebe435a4..f78c6b9c0 100644 --- a/src/delta/delta.c +++ b/src/delta/delta.c @@ -311,8 +311,6 @@ static int enumerate_dir( } FOREACH_DIRENT_ALL(de, d, return -errno) { - dirent_ensure_type(d, de); - if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d")) { if (!GREEDY_REALLOC0(dirs, n_dirs + 2)) return -ENOMEM; diff --git a/src/home/homed-home.c b/src/home/homed-home.c index 39dd501a3..104427dab 100644 --- a/src/home/homed-home.c +++ b/src/home/homed-home.c @@ -11,6 +11,7 @@ #include "blockdev-util.h" #include "btrfs-util.h" #include "bus-common-errors.h" +#include "data-fd-util.h" #include "env-util.h" #include "errno-list.h" #include "errno-util.h" diff --git a/src/home/homework.c b/src/home/homework.c index 073d12e50..bdd9ac649 100644 --- a/src/home/homework.c +++ b/src/home/homework.c @@ -3,6 +3,7 @@ #include #include +#include "blockdev-util.h" #include "chown-recursive.h" #include "copy.h" #include "fd-util.h" diff --git a/src/journal/pcre2-dlopen.c b/src/journal/pcre2-dlopen.c index 5f78f7667..475d7eb26 100644 --- a/src/journal/pcre2-dlopen.c +++ b/src/journal/pcre2-dlopen.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "alloc-util.h" #include "dlfcn-util.h" +#include "log.h" #include "pcre2-dlopen.h" #if HAVE_PCRE2 @@ -16,17 +16,6 @@ int (*sym_pcre2_match)(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, u PCRE2_SIZE* (*sym_pcre2_get_ovector_pointer)(pcre2_match_data *); int dlopen_pcre2(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (pcre2_dl) - return 0; /* Already loaded */ - - dl = dlopen("libpcre2-8.so.0", RTLD_LAZY); - if (!dl) - return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "PCRE2 support is not installed: %s", dlerror()); - /* So here's something weird: PCRE2 actually renames the symbols exported by the library via C * macros, so that the exported symbols carry a suffix "_8" but when used from C the suffix is * gone. In the argument list below we ignore this mangling. Surprisingly (at least to me), we @@ -35,25 +24,15 @@ int dlopen_pcre2(void) { * string actually contains the "_8" suffix already due to that and we don't have to append it * manually anymore. C is weird. 🤯 */ - r = dlsym_many_and_warn( - dl, - LOG_ERR, + return dlopen_many_sym_or_warn( + &pcre2_dl, "libpcre2-8.so.0", LOG_ERR, DLSYM_ARG(pcre2_match_data_create), DLSYM_ARG(pcre2_match_data_free), DLSYM_ARG(pcre2_code_free), DLSYM_ARG(pcre2_compile), DLSYM_ARG(pcre2_get_error_message), DLSYM_ARG(pcre2_match), - DLSYM_ARG(pcre2_get_ovector_pointer), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - pcre2_dl = TAKE_PTR(dl); - - return 1; + DLSYM_ARG(pcre2_get_ovector_pointer)); } #else diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index ff021f4ea..dc8ff19d1 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -1587,9 +1587,17 @@ static int client_handle_forcerenew(sd_dhcp_client *client, DHCPMessage *force, if (r != DHCP_FORCERENEW) return -ENOMSG; +#if 0 log_dhcp_client(client, "FORCERENEW"); return 0; +#else + /* FIXME: Ignore FORCERENEW requests until we implement RFC3118 (Authentication for DHCP + * Messages) and/or RFC6704 (Forcerenew Nonce Authentication), as unauthenticated FORCERENEW + * requests causes a security issue (TALOS-2020-1142, CVE-2020-13529). */ + log_dhcp_client(client, "Received FORCERENEW, ignoring."); + return -ENOMSG; +#endif } static bool lease_equal(const sd_dhcp_lease *a, const sd_dhcp_lease *b) { @@ -1777,7 +1785,7 @@ static int client_set_lease_timeouts(sd_dhcp_client *client) { static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, int len) { DHCP_CLIENT_DONT_DESTROY(client); char time_string[FORMAT_TIMESPAN_MAX]; - int r = 0, notify_event = 0; + int r, notify_event; assert(client); assert(client->event); @@ -1787,22 +1795,19 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, i case DHCP_STATE_SELECTING: r = client_handle_offer(client, message, len); - if (r >= 0) { + if (r == -ENOMSG) + return 0; /* invalid message, let's ignore it */ + if (r < 0) + goto error; - client->state = DHCP_STATE_REQUESTING; - client->attempt = 0; - - r = event_reset_time(client->event, &client->timeout_resend, - clock_boottime_or_monotonic(), - 0, 0, - client_timeout_resend, client, - client->event_priority, "dhcp4-resend-timer", true); - if (r < 0) - goto error; - } else if (r == -ENOMSG) - /* invalid message, let's ignore it */ - return 0; + client->state = DHCP_STATE_REQUESTING; + client->attempt = 0; + r = event_reset_time(client->event, &client->timeout_resend, + clock_boottime_or_monotonic(), + 0, 0, + client_timeout_resend, client, + client->event_priority, "dhcp4-resend-timer", true); break; case DHCP_STATE_REBOOTING: @@ -1811,47 +1816,9 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, i case DHCP_STATE_REBINDING: r = client_handle_ack(client, message, len); - if (r >= 0) { - client->start_delay = 0; - (void) event_source_disable(client->timeout_resend); - client->receive_message = - sd_event_source_unref(client->receive_message); - client->fd = safe_close(client->fd); - - if (IN_SET(client->state, DHCP_STATE_REQUESTING, - DHCP_STATE_REBOOTING)) - notify_event = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE; - else if (r != SD_DHCP_CLIENT_EVENT_IP_ACQUIRE) - notify_event = r; - - client->state = DHCP_STATE_BOUND; - client->attempt = 0; - - client->last_addr = client->lease->address; - - r = client_set_lease_timeouts(client); - if (r < 0) { - log_dhcp_client(client, "could not set lease timeouts"); - goto error; - } - - r = dhcp_network_bind_udp_socket(client->ifindex, client->lease->address, client->port, client->ip_service_type); - if (r < 0) { - log_dhcp_client(client, "could not bind UDP socket"); - goto error; - } - - client->fd = r; - - client_initialize_io_events(client, client_receive_message_udp); - - if (notify_event) { - client_notify(client, notify_event); - if (client->state == DHCP_STATE_STOPPED) - return 0; - } - - } else if (r == -EADDRNOTAVAIL) { + if (r == -ENOMSG) + return 0; /* invalid message, let's ignore it */ + if (r == -EADDRNOTAVAIL) { /* got a NAK, let's restart the client */ client_notify(client, SD_DHCP_CLIENT_EVENT_EXPIRED); @@ -1868,34 +1835,71 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, i client->start_delay = CLAMP(client->start_delay * 2, RESTART_AFTER_NAK_MIN_USEC, RESTART_AFTER_NAK_MAX_USEC); - - return 0; - } else if (r == -ENOMSG) - /* invalid message, let's ignore it */ return 0; + } + if (r < 0) + goto error; + if (IN_SET(client->state, DHCP_STATE_REQUESTING, DHCP_STATE_REBOOTING)) + notify_event = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE; + else + notify_event = r; + + client->start_delay = 0; + (void) event_source_disable(client->timeout_resend); + client->receive_message = sd_event_source_unref(client->receive_message); + client->fd = safe_close(client->fd); + + client->state = DHCP_STATE_BOUND; + client->attempt = 0; + + client->last_addr = client->lease->address; + + r = client_set_lease_timeouts(client); + if (r < 0) { + log_dhcp_client(client, "could not set lease timeouts"); + goto error; + } + + r = dhcp_network_bind_udp_socket(client->ifindex, client->lease->address, client->port, client->ip_service_type); + if (r < 0) { + log_dhcp_client(client, "could not bind UDP socket"); + goto error; + } + + client->fd = r; + + client_initialize_io_events(client, client_receive_message_udp); + + if (IN_SET(client->state, DHCP_STATE_RENEWING, DHCP_STATE_REBINDING) && + notify_event == SD_DHCP_CLIENT_EVENT_IP_ACQUIRE) + /* FIXME: hmm, maybe this is a bug... */ + log_dhcp_client(client, "client_handle_ack() returned SD_DHCP_CLIENT_EVENT_IP_ACQUIRE while DHCP client is %s the address, skipping callback.", + client->state == DHCP_STATE_RENEWING ? "renewing" : "rebinding"); + else + client_notify(client, notify_event); break; case DHCP_STATE_BOUND: r = client_handle_forcerenew(client, message, len); - if (r >= 0) { - r = client_timeout_t1(NULL, 0, client); - if (r < 0) - goto error; - } else if (r == -ENOMSG) - /* invalid message, let's ignore it */ - return 0; + if (r == -ENOMSG) + return 0; /* invalid message, let's ignore it */ + if (r < 0) + goto error; + r = client_timeout_t1(NULL, 0, client); break; case DHCP_STATE_INIT: case DHCP_STATE_INIT_REBOOT: - + r = 0; break; case DHCP_STATE_STOPPED: r = -EINVAL; goto error; + default: + assert_not_reached("invalid state"); } error: diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build index 5af8b75af..489ed12a7 100644 --- a/src/libsystemd/meson.build +++ b/src/libsystemd/meson.build @@ -131,8 +131,6 @@ libsystemd_sources = files(''' sd-device/device-util.h sd-device/sd-device.c sd-hwdb/hwdb-internal.h - sd-hwdb/hwdb-util.c - sd-hwdb/hwdb-util.h sd-hwdb/sd-hwdb.c sd-netlink/generic-netlink.c sd-netlink/generic-netlink.h diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c index 16e61e1e8..378774fe8 100644 --- a/src/libsystemd/sd-bus/bus-socket.c +++ b/src/libsystemd/sd-bus/bus-socket.c @@ -22,7 +22,6 @@ #include "path-util.h" #include "process-util.h" #include "rlimit-util.h" -#include "selinux-util.h" #include "signal-util.h" #include "stdio-util.h" #include "string-util.h" diff --git a/src/libsystemd/sd-device/device-internal.h b/src/libsystemd/sd-device/device-internal.h index 19dac5c21..f4d02f995 100644 --- a/src/libsystemd/sd-device/device-internal.h +++ b/src/libsystemd/sd-device/device-internal.h @@ -107,7 +107,7 @@ int device_set_devmode(sd_device *device, const char *devmode); int device_set_devname(sd_device *device, const char *devname); int device_set_devtype(sd_device *device, const char *devtype); int device_set_devnum(sd_device *device, const char *major, const char *minor); -int device_set_subsystem(sd_device *device, const char *_subsystem); +int device_set_subsystem(sd_device *device, const char *subsystem); int device_set_drivers_subsystem(sd_device *device); -int device_set_driver(sd_device *device, const char *_driver); +int device_set_driver(sd_device *device, const char *driver); int device_set_usec_initialized(sd_device *device, usec_t when); diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 7ec3f6f0d..37c655578 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -765,18 +765,15 @@ int device_shallow_clone(sd_device *old_device, sd_device **new_device) { if (r < 0) return r; - if (sd_device_get_subsystem(old_device, &val) >= 0) { - r = device_set_subsystem(ret, val); + (void) sd_device_get_subsystem(old_device, &val); + r = device_set_subsystem(ret, val); + if (r < 0) + return r; + if (streq_ptr(val, "drivers")) { + r = free_and_strdup(&ret->driver_subsystem, old_device->driver_subsystem); if (r < 0) return r; - - if (streq(val, "drivers")) { - ret->driver_subsystem = strdup(old_device->driver_subsystem); - if (!ret->driver_subsystem) - return -ENOMEM; - } - } else - ret->subsystem_set = true; + } /* The device may be already removed. Let's copy minimal set of information to make * device_get_device_id() work without uevent file. */ diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index b5e7a1a44..0d04e1681 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -779,23 +779,24 @@ _public_ int sd_device_get_parent(sd_device *child, sd_device **ret) { return 0; } -int device_set_subsystem(sd_device *device, const char *_subsystem) { - _cleanup_free_ char *subsystem = NULL; +int device_set_subsystem(sd_device *device, const char *subsystem) { + _cleanup_free_ char *s = NULL; int r; assert(device); - assert(_subsystem); - subsystem = strdup(_subsystem); - if (!subsystem) - return -ENOMEM; + if (subsystem) { + s = strdup(subsystem); + if (!s) + return -ENOMEM; + } - r = device_add_property_internal(device, "SUBSYSTEM", subsystem); + r = device_add_property_internal(device, "SUBSYSTEM", s); if (r < 0) return r; device->subsystem_set = true; - return free_and_replace(device->subsystem, subsystem); + return free_and_replace(device->subsystem, s); } int device_set_drivers_subsystem(sd_device *device) { @@ -956,23 +957,24 @@ _public_ int sd_device_get_devnum(sd_device *device, dev_t *devnum) { return 0; } -int device_set_driver(sd_device *device, const char *_driver) { - _cleanup_free_ char *driver = NULL; +int device_set_driver(sd_device *device, const char *driver) { + _cleanup_free_ char *d = NULL; int r; assert(device); - assert(_driver); - driver = strdup(_driver); - if (!driver) - return -ENOMEM; + if (driver) { + d = strdup(driver); + if (!d) + return -ENOMEM; + } - r = device_add_property_internal(device, "DRIVER", driver); + r = device_add_property_internal(device, "DRIVER", d); if (r < 0) return r; device->driver_set = true; - return free_and_replace(device->driver, driver); + return free_and_replace(device->driver, d); } _public_ int sd_device_get_driver(sd_device *device, const char **ret) { @@ -990,14 +992,14 @@ _public_ int sd_device_get_driver(sd_device *device, const char **ret) { path = strjoina(syspath, "/driver"); r = readlink_value(path, &driver); - if (r >= 0) { - r = device_set_driver(device, driver); - if (r < 0) - return log_device_debug_errno(device, r, "sd-device: Failed to set driver for %s: %m", device->devpath); - } else if (r == -ENOENT) - device->driver_set = true; - else - return log_device_debug_errno(device, r, "sd-device: Failed to set driver for %s: %m", device->devpath); + if (r < 0 && r != -ENOENT) + return log_device_debug_errno(device, r, + "sd-device: readlink(\"%s\") failed: %m", path); + + r = device_set_driver(device, driver); + if (r < 0) + return log_device_debug_errno(device, r, + "sd-device: Failed to set driver \"%s\": %m", driver); } if (!device->driver) diff --git a/src/libsystemd/sd-hwdb/hwdb-internal.h b/src/libsystemd/sd-hwdb/hwdb-internal.h index 5c20688cd..5ddc2211e 100644 --- a/src/libsystemd/sd-hwdb/hwdb-internal.h +++ b/src/libsystemd/sd-hwdb/hwdb-internal.h @@ -3,10 +3,27 @@ #include +#include "def.h" +#include "hashmap.h" #include "sparse-endian.h" #define HWDB_SIG { 'K', 'S', 'L', 'P', 'H', 'H', 'R', 'H' } +struct sd_hwdb { + unsigned n_ref; + + FILE *f; + struct stat st; + union { + struct trie_header_f *head; + const char *map; + }; + + OrderedHashmap *properties; + Iterator properties_iterator; + bool properties_modified; +}; + /* on-disk trie objects */ struct trie_header_f { uint8_t signature[8]; @@ -63,3 +80,10 @@ struct trie_value_entry2_f { le16_t file_priority; le16_t padding; } _packed_; + +#define hwdb_bin_paths \ + "/etc/systemd/hwdb/hwdb.bin\0" \ + "/etc/udev/hwdb.bin\0" \ + "/usr/lib/systemd/hwdb/hwdb.bin\0" \ + _CONF_PATHS_SPLIT_USR_NULSTR("systemd/hwdb/hwdb.bin") \ + UDEVLIBEXECDIR "/hwdb.bin\0" diff --git a/src/libsystemd/sd-hwdb/sd-hwdb.c b/src/libsystemd/sd-hwdb/sd-hwdb.c index cb3c77ce9..53601765f 100644 --- a/src/libsystemd/sd-hwdb/sd-hwdb.c +++ b/src/libsystemd/sd-hwdb/sd-hwdb.c @@ -17,26 +17,10 @@ #include "fd-util.h" #include "hashmap.h" #include "hwdb-internal.h" -#include "hwdb-util.h" #include "nulstr-util.h" #include "string-util.h" #include "time-util.h" -struct sd_hwdb { - unsigned n_ref; - - FILE *f; - struct stat st; - union { - struct trie_header_f *head; - const char *map; - }; - - OrderedHashmap *properties; - Iterator properties_iterator; - bool properties_modified; -}; - struct linebuf { char bytes[LINE_MAX]; size_t size; @@ -296,15 +280,6 @@ static int trie_search_f(sd_hwdb *hwdb, const char *search) { return 0; } -static const char hwdb_bin_paths[] = - "/etc/systemd/hwdb/hwdb.bin\0" - "/etc/udev/hwdb.bin\0" - "/usr/lib/systemd/hwdb/hwdb.bin\0" -#if HAVE_SPLIT_USR - "/lib/systemd/hwdb/hwdb.bin\0" -#endif - UDEVLIBEXECDIR "/hwdb.bin\0"; - _public_ int sd_hwdb_new(sd_hwdb **ret) { _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL; const char *hwdb_bin_path; @@ -372,30 +347,6 @@ static sd_hwdb *hwdb_free(sd_hwdb *hwdb) { DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_hwdb, sd_hwdb, hwdb_free) -bool hwdb_validate(sd_hwdb *hwdb) { - bool found = false; - const char* p; - struct stat st; - - if (!hwdb) - return false; - if (!hwdb->f) - return false; - - /* if hwdb.bin doesn't exist anywhere, we need to update */ - NULSTR_FOREACH(p, hwdb_bin_paths) - if (stat(p, &st) >= 0) { - found = true; - break; - } - if (!found) - return true; - - if (timespec_load(&hwdb->st.st_mtim) != timespec_load(&st.st_mtim)) - return true; - return false; -} - static int properties_prepare(sd_hwdb *hwdb, const char *modalias) { assert(hwdb); assert(modalias); diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index 64aa132c7..2c17435de 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -13,7 +14,6 @@ #include "sd-event.h" #include "alloc-util.h" -#include "btrfs-util.h" #include "chattr-util.h" #include "compress.h" #include "env-util.h" @@ -3379,7 +3379,7 @@ static int journal_file_warn_btrfs(JournalFile *f) { * expense of data integrity features (which shouldn't be too * bad, given that we do our own checksumming). */ - r = btrfs_is_filesystem(f->fd); + r = fd_is_fs_type(f->fd, BTRFS_SUPER_MAGIC); if (r < 0) return log_warning_errno(r, "Failed to determine if journal is on btrfs: %m"); if (!r) diff --git a/src/libsystemd/sd-journal/journal-verify.c b/src/libsystemd/sd-journal/journal-verify.c index 6bc0796f0..d5b49194a 100644 --- a/src/libsystemd/sd-journal/journal-verify.c +++ b/src/libsystemd/sd-journal/journal-verify.c @@ -170,7 +170,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o h2 = journal_file_hash_data(f, o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload)); if (h1 != h2) { - error(offset, "Invalid hash (%08"PRIx64" vs. %08"PRIx64, h1, h2); + error(offset, "Invalid hash (%08" PRIx64 " vs. %08" PRIx64 ")", h1, h2); return -EBADMSG; } diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index b4e010e74..f6fff204f 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -795,8 +795,6 @@ _public_ int sd_get_uids(uid_t **users) { int k; uid_t uid; - dirent_ensure_type(d, de); - if (!dirent_is_file(de)) continue; diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 1754c9dc5..19c3f9bd6 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1374,7 +1374,6 @@ static int flush_devices(Manager *m) { struct dirent *de; FOREACH_DIRENT_ALL(de, d, break) { - dirent_ensure_type(d, de); if (!dirent_is_file(de)) continue; diff --git a/src/login/logind.c b/src/login/logind.c index b782938a5..ec52a57ac 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -299,7 +299,6 @@ static int manager_enumerate_linger_users(Manager *m) { FOREACH_DIRENT(de, d, return -errno) { int k; - dirent_ensure_type(d, de); if (!dirent_is_file(de)) continue; diff --git a/src/mount/mount-tool.c b/src/mount/mount-tool.c index 1d78ff28c..c213c905a 100644 --- a/src/mount/mount-tool.c +++ b/src/mount/mount-tool.c @@ -787,8 +787,6 @@ static int find_loop_device(const char *backing_file, char **loop_dev) { _cleanup_free_ char *sys = NULL, *fname = NULL; int r; - dirent_ensure_type(d, de); - if (de->d_type != DT_DIR) continue; diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 1c2cb7691..6035a7728 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -2226,6 +2226,16 @@ static int link_status_one( return table_log_add_error(r); } + r = sd_network_link_get_required_for_online(info->ifindex); + if (r >= 0) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Required For Online:", + TABLE_BOOLEAN, r); + if (r < 0) + return table_log_add_error(r); + } + if (lease) { const void *client_id; size_t client_id_len; diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index b84181892..04ad2aa69 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -2111,9 +2111,17 @@ static int address_section_verify(Address *address) { address->scope = RT_SCOPE_HOST; } - if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6)) + if (address->family == AF_INET6 && + !FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6)) address->flags |= IFA_F_NODAD; + if (address->family == AF_INET && in4_addr_is_link_local(&address->in_addr.in) && + !FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV4)) { + log_debug("%s: An IPv4 link-local address is specified, enabling IPv4 Address Conflict Detection (ACD).", + address->section->filename); + address->duplicate_address_detection |= ADDRESS_FAMILY_IPV4; + } + return 0; } diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 011cb9446..850b4f449 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -229,6 +229,21 @@ int network_verify(Network *network) { if (network->ignore_carrier_loss < 0) network->ignore_carrier_loss = network->configure_without_carrier; + if (IN_SET(network->activation_policy, ACTIVATION_POLICY_DOWN, ACTIVATION_POLICY_ALWAYS_DOWN, ACTIVATION_POLICY_MANUAL)) { + if (network->required_for_online < 0 || + (network->required_for_online == true && network->activation_policy == ACTIVATION_POLICY_ALWAYS_DOWN)) { + log_debug("%s: Setting RequiredForOnline=no because ActivationPolicy=%s.", network->filename, + activation_policy_to_string(network->activation_policy)); + network->required_for_online = false; + } else if (network->required_for_online == true) + log_warning("%s: RequiredForOnline=yes and ActivationPolicy=%s, " + "this may cause a delay at boot.", network->filename, + activation_policy_to_string(network->activation_policy)); + } + + if (network->required_for_online < 0) + network->required_for_online = true; + if (network->keep_configuration < 0) network->keep_configuration = KEEP_CONFIGURATION_NO; @@ -303,7 +318,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .manager = manager, .n_ref = 1, - .required_for_online = true, + .required_for_online = -1, .required_operstate_for_online = LINK_OPERSTATE_RANGE_DEFAULT, .activation_policy = _ACTIVATION_POLICY_INVALID, .arp = -1, @@ -1108,7 +1123,7 @@ int config_parse_required_for_online( assert(network); if (isempty(rvalue)) { - network->required_for_online = true; + network->required_for_online = -1; network->required_operstate_for_online = LINK_OPERSTATE_RANGE_DEFAULT; return 0; } diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 98b8b9529..b39063fe8 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -102,7 +102,7 @@ struct Network { int allmulticast; int promiscuous; bool unmanaged; - bool required_for_online; /* Is this network required to be considered online? */ + int required_for_online; /* Is this network required to be considered online? */ LinkOperationalStateRange required_operstate_for_online; AddressFamily required_family_for_online; ActivationPolicy activation_policy; diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index 39b773fcc..411022a24 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -402,7 +402,7 @@ static int routing_policy_rule_set_netlink_message(const RoutingPolicyRule *rule /* link may be NULL. */ - if (in_addr_is_set(rule->family, &rule->from)) { + if (rule->from_prefixlen > 0) { r = netlink_message_append_in_addr_union(m, FRA_SRC, rule->family, &rule->from); if (r < 0) return log_link_error_errno(link, r, "Could not append FRA_SRC attribute: %m"); @@ -412,7 +412,7 @@ static int routing_policy_rule_set_netlink_message(const RoutingPolicyRule *rule return log_link_error_errno(link, r, "Could not set source prefix length: %m"); } - if (in_addr_is_set(rule->family, &rule->to)) { + if (rule->to_prefixlen > 0) { r = netlink_message_append_in_addr_union(m, FRA_DST, rule->family, &rule->to); if (r < 0) return log_link_error_errno(link, r, "Could not append FRA_DST attribute: %m"); diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c index c28e42993..60f956da0 100644 --- a/src/nspawn/nspawn-mount.c +++ b/src/nspawn/nspawn-mount.c @@ -398,7 +398,7 @@ int tmpfs_patch_options( #if HAVE_SELINUX if (selinux_apifs_context) - if (!strextend_with_separator(&buf, ",", "context=\"", selinux_apifs_context, "\"")) + if (strextendf_with_separator(&buf, ",", "context=\"%s\"", selinux_apifs_context) < 0) return -ENOMEM; #endif diff --git a/src/oom/oomd-manager-bus.c b/src/oom/oomd-manager-bus.c index 4ea2a338f..b41e36630 100644 --- a/src/oom/oomd-manager-bus.c +++ b/src/oom/oomd-manager-bus.c @@ -4,6 +4,7 @@ #include "bus-common-errors.h" #include "bus-polkit.h" +#include "data-fd-util.h" #include "fd-util.h" #include "oomd-manager-bus.h" #include "oomd-manager.h" diff --git a/src/partition/repart.c b/src/partition/repart.c index fdb376060..d0ee02067 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -169,6 +169,7 @@ struct Partition { EncryptMode encrypt; uint64_t gpt_flags; + int no_auto; int read_only; int growfs; @@ -243,6 +244,7 @@ static Partition *partition_new(void) { .offset = UINT64_MAX, .copy_blocks_fd = -1, .copy_blocks_size = UINT64_MAX, + .no_auto = -1, .read_only = -1, .growfs = -1, }; @@ -971,7 +973,7 @@ static int config_parse_label( /* Nota bene: the empty label is a totally valid one. Let's hence not follow our usual rule of * assigning the empty string to reset to default here, but really accept it as label to set. */ - r = specifier_printf(rvalue, GPT_LABEL_MAX, system_and_tmp_specifier_table, NULL, &resolved); + r = specifier_printf(rvalue, GPT_LABEL_MAX, system_and_tmp_specifier_table, arg_root, NULL, &resolved); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to expand specifiers in Label=, ignoring: %s", rvalue); @@ -1136,7 +1138,7 @@ static int config_parse_copy_files( if (!isempty(p)) return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), "Too many arguments: %s", rvalue); - r = specifier_printf(source, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_source); + r = specifier_printf(source, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_source); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to expand specifiers in CopyFiles= source, ignoring: %s", rvalue); @@ -1147,7 +1149,7 @@ static int config_parse_copy_files( if (r < 0) return 0; - r = specifier_printf(target, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_target); + r = specifier_printf(target, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_target); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to expand specifiers in CopyFiles= target, ignoring: %s", resolved_target); @@ -1196,7 +1198,7 @@ static int config_parse_copy_blocks( return 0; } - r = specifier_printf(rvalue, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &d); + r = specifier_printf(rvalue, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &d); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to expand specifiers in CopyBlocks= source path, ignoring: %s", rvalue); @@ -1244,7 +1246,7 @@ static int config_parse_make_dirs( if (r == 0) return 0; - r = specifier_printf(word, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &d); + r = specifier_printf(word, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &d); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to expand specifiers in MakeDirectories= parameter, ignoring: %s", word); @@ -1312,6 +1314,7 @@ static int partition_read_definition(Partition *p, const char *path) { { "Partition", "Encrypt", config_parse_encrypt, 0, &p->encrypt }, { "Partition", "Flags", config_parse_gpt_flags, 0, &p->gpt_flags }, { "Partition", "ReadOnly", config_parse_tristate, 0, &p->read_only }, + { "Partition", "NoAuto", config_parse_tristate, 0, &p->no_auto }, { "Partition", "GrowFileSystem", config_parse_tristate, 0, &p->growfs }, {} }; @@ -3269,6 +3272,17 @@ static uint64_t partition_merge_flags(Partition *p) { f = p->gpt_flags; + if (p->no_auto >= 0) { + if (gpt_partition_type_knows_no_auto(p->type_uuid)) + SET_FLAG(f, GPT_FLAG_NO_AUTO, p->no_auto); + else { + char buffer[ID128_UUID_STRING_MAX]; + log_warning("Configured NoAuto=%s for partition type '%s' that doesn't support it, ignoring.", + yes_no(p->no_auto), + gpt_partition_type_uuid_to_string_harder(p->type_uuid, buffer)); + } + } + if (p->read_only >= 0) { if (gpt_partition_type_knows_read_only(p->type_uuid)) SET_FLAG(f, GPT_FLAG_READ_ONLY, p->read_only); @@ -3409,7 +3423,7 @@ static int context_mangle_partitions(Context *context) { if (r < 0) return log_error_errno(r, "Failed to set partition label: %m"); - /* Merge the read only + growfs setting with the literal flags, and set them for the partition */ + /* Merge the no auto + read only + growfs setting with the literal flags, and set them for the partition */ r = set_gpt_flags(q, partition_merge_flags(p)); if (r < 0) return log_error_errno(r, "Failed to set GPT partition flags: %m"); diff --git a/src/portable/portable.c b/src/portable/portable.c index 9e33299ed..4cf5fb4f0 100644 --- a/src/portable/portable.c +++ b/src/portable/portable.c @@ -6,6 +6,7 @@ #include "bus-error.h" #include "conf-files.h" #include "copy.h" +#include "data-fd-util.h" #include "def.h" #include "dirent-util.h" #include "discover-image.h" @@ -153,7 +154,7 @@ static int send_item( assert(name); assert(fd >= 0); - data_fd = fd_duplicate_data_fd(fd); + data_fd = copy_data_fd(fd); if (data_fd < 0) return data_fd; @@ -311,7 +312,6 @@ static int extract_now( if (hashmap_get(unit_files, de->d_name)) continue; - dirent_ensure_type(d, de); if (!IN_SET(de->d_type, DT_LNK, DT_REG)) continue; @@ -1396,7 +1396,6 @@ int portable_detach( if (set_contains(unit_files, de->d_name)) continue; - dirent_ensure_type(d, de); if (!IN_SET(de->d_type, DT_LNK, DT_REG)) continue; @@ -1569,7 +1568,6 @@ static int portable_get_state_internal( if (set_contains(unit_files, de->d_name)) continue; - dirent_ensure_type(d, de); if (!IN_SET(de->d_type, DT_LNK, DT_REG)) continue; diff --git a/src/resolve/resolvconf-compat.c b/src/resolve/resolvconf-compat.c index b3f1e12fa..93ded6d56 100644 --- a/src/resolve/resolvconf-compat.c +++ b/src/resolve/resolvconf-compat.c @@ -211,7 +211,7 @@ int resolvconf_parse_argv(int argc, char *argv[]) { return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Expected interface name as argument."); - r = ifname_mangle(argv[optind]); + r = ifname_resolvconf_mangle(argv[optind]); if (r <= 0) return r; diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c index 23f4ff107..7d13ed390 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -104,18 +104,11 @@ static int interface_info_compare(const InterfaceInfo *a, const InterfaceInfo *b int ifname_mangle(const char *s) { _cleanup_free_ char *iface = NULL; - const char *dot; int ifi; assert(s); - dot = strchr(s, '.'); - if (dot) { - log_debug("Ignoring protocol specifier '%s'.", dot + 1); - iface = strndup(s, dot - s); - - } else - iface = strdup(s); + iface = strdup(s); if (!iface) return log_oom(); @@ -138,6 +131,24 @@ int ifname_mangle(const char *s) { return 1; } +int ifname_resolvconf_mangle(const char *s) { + const char *dot; + + assert(s); + + dot = strchr(s, '.'); + if (dot) { + _cleanup_free_ char *iface = NULL; + + log_debug("Ignoring protocol specifier '%s'.", dot + 1); + iface = strndup(s, dot - s); + if (!iface) + return log_oom(); + return ifname_mangle(iface); + } else + return ifname_mangle(s); +} + static void print_source(uint64_t flags, usec_t rtt) { char rtt_str[FORMAT_TIMESTAMP_MAX]; diff --git a/src/resolve/resolvectl.h b/src/resolve/resolvectl.h index 468a87957..1d0f14734 100644 --- a/src/resolve/resolvectl.h +++ b/src/resolve/resolvectl.h @@ -27,3 +27,4 @@ extern char **arg_set_domain; extern bool arg_ifindex_permissive; int ifname_mangle(const char *s); +int ifname_resolvconf_mangle(const char *s); diff --git a/src/resolve/resolved-conf.c b/src/resolve/resolved-conf.c index 9b7f7f9ba..283c06345 100644 --- a/src/resolve/resolved-conf.c +++ b/src/resolve/resolved-conf.c @@ -255,7 +255,7 @@ int config_parse_dnssd_service_name( return 0; } - r = specifier_printf(rvalue, DNS_LABEL_MAX, specifier_table, NULL, &name); + r = specifier_printf(rvalue, DNS_LABEL_MAX, specifier_table, NULL, NULL, &name); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Invalid service instance name template '%s', ignoring assignment: %m", rvalue); diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c index 1c7f16c4d..ab2773e4e 100644 --- a/src/resolve/resolved-dnssd.c +++ b/src/resolve/resolved-dnssd.c @@ -135,7 +135,7 @@ static int dnssd_service_load(Manager *manager, const char *filename) { return 0; } -static int specifier_dnssd_host_name(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_dnssd_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { DnssdService *s = (DnssdService *) userdata; char *n; @@ -170,7 +170,7 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) { assert(s); assert(s->name_template); - r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, s, &name); + r = specifier_printf(s->name_template, DNS_LABEL_MAX, specifier_table, NULL, s, &name); if (r < 0) return log_debug_errno(r, "Failed to replace specifiers: %m"); diff --git a/src/basic/blockdev-util.c b/src/shared/blockdev-util.c similarity index 76% rename from src/basic/blockdev-util.c rename to src/shared/blockdev-util.c index 676ad9351..4d545dfa5 100644 --- a/src/basic/blockdev-util.c +++ b/src/shared/blockdev-util.c @@ -256,3 +256,88 @@ int blockdev_partscan_enabled(int fd) { return !FLAGS_SET(ull, GENHD_FL_NO_PART_SCAN); } + +static int blockdev_is_encrypted(const char *sysfs_path, unsigned depth_left) { + _cleanup_free_ char *p = NULL, *uuids = NULL; + _cleanup_closedir_ DIR *d = NULL; + int r, found_encrypted = false; + + assert(sysfs_path); + + if (depth_left == 0) + return -EINVAL; + + p = path_join(sysfs_path, "dm/uuid"); + if (!p) + return -ENOMEM; + + r = read_one_line_file(p, &uuids); + if (r != -ENOENT) { + if (r < 0) + return r; + + /* The DM device's uuid attribute is prefixed with "CRYPT-" if this is a dm-crypt device. */ + if (startswith(uuids, "CRYPT-")) + return true; + } + + /* Not a dm-crypt device itself. But maybe it is on top of one? Follow the links in the "slaves/" + * subdir. */ + + p = mfree(p); + p = path_join(sysfs_path, "slaves"); + if (!p) + return -ENOMEM; + + d = opendir(p); + if (!d) { + if (errno == ENOENT) /* Doesn't have underlying devices */ + return false; + + return -errno; + } + + for (;;) { + _cleanup_free_ char *q = NULL; + struct dirent *de; + + errno = 0; + de = readdir_no_dot(d); + if (!de) { + if (errno != 0) + return -errno; + + break; /* No more underlying devices */ + } + + q = path_join(p, de->d_name); + if (!q) + return -ENOMEM; + + r = blockdev_is_encrypted(q, depth_left - 1); + if (r < 0) + return r; + if (r == 0) /* we found one that is not encrypted? then propagate that immediately */ + return false; + + found_encrypted = true; + } + + return found_encrypted; +} + +int path_is_encrypted(const char *path) { + char p[SYS_BLOCK_PATH_MAX(NULL)]; + dev_t devt; + int r; + + r = get_block_device(path, &devt); + if (r < 0) + return r; + if (r == 0) /* doesn't have a block device */ + return false; + + xsprintf_sys_block_path(p, NULL, devt); + + return blockdev_is_encrypted(p, 10 /* safety net: maximum recursion depth */); +} diff --git a/src/basic/blockdev-util.h b/src/shared/blockdev-util.h similarity index 95% rename from src/basic/blockdev-util.h rename to src/shared/blockdev-util.h index 10048ff31..56c50cecb 100644 --- a/src/basic/blockdev-util.h +++ b/src/shared/blockdev-util.h @@ -22,3 +22,5 @@ int get_block_device_harder(const char *path, dev_t *dev); int lock_whole_block_device(dev_t devt, int operation); int blockdev_partscan_enabled(int fd); + +int path_is_encrypted(const char *path); diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index dc334cf19..e538e2bd8 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -482,7 +482,6 @@ static int boot_entries_find_unified( _cleanup_free_ char *j = NULL, *osrelease = NULL, *cmdline = NULL; _cleanup_close_ int fd = -1; - dirent_ensure_type(d, de); if (!dirent_is_file(de)) continue; diff --git a/src/shared/bpf-dlopen.c b/src/shared/bpf-dlopen.c index 055614845..45ab986ab 100644 --- a/src/shared/bpf-dlopen.c +++ b/src/shared/bpf-dlopen.c @@ -1,8 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "alloc-util.h" #include "dlfcn-util.h" #include "bpf-dlopen.h" +#include "log.h" #if HAVE_LIBBPF static void *bpf_dl = NULL; @@ -24,20 +24,8 @@ bool (*sym_bpf_probe_prog_type)(enum bpf_prog_type, __u32); const char* (*sym_bpf_program__name)(const struct bpf_program *); int dlopen_bpf(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (bpf_dl) - return 0; /* Already loaded */ - - dl = dlopen("libbpf.so.0", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libbpf is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + return dlopen_many_sym_or_warn( + &bpf_dl, "libbpf.so.0", LOG_DEBUG, DLSYM_ARG(bpf_link__destroy), DLSYM_ARG(bpf_link__fd), DLSYM_ARG(bpf_map__fd), @@ -52,15 +40,7 @@ int dlopen_bpf(void) { DLSYM_ARG(bpf_probe_prog_type), DLSYM_ARG(bpf_program__attach_cgroup), DLSYM_ARG(bpf_program__name), - DLSYM_ARG(libbpf_get_error), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - bpf_dl = TAKE_PTR(dl); - return 1; + DLSYM_ARG(libbpf_get_error)); } #else diff --git a/src/basic/btrfs-util.c b/src/shared/btrfs-util.c similarity index 98% rename from src/basic/btrfs-util.c rename to src/shared/btrfs-util.c index adf9d03eb..f4e291385 100644 --- a/src/basic/btrfs-util.c +++ b/src/shared/btrfs-util.c @@ -69,17 +69,6 @@ static int extract_subvolume_name(const char *path, const char **subvolume) { return 0; } -int btrfs_is_filesystem(int fd) { - struct statfs sfs; - - assert(fd >= 0); - - if (fstatfs(fd, &sfs) < 0) - return -errno; - - return F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC); -} - int btrfs_is_subvol_fd(int fd) { struct stat st; @@ -93,7 +82,7 @@ int btrfs_is_subvol_fd(int fd) { if (!btrfs_might_be_subvol(&st)) return 0; - return btrfs_is_filesystem(fd); + return fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); } int btrfs_is_subvol(const char *path) { @@ -286,7 +275,7 @@ int btrfs_get_block_device_fd(int fd, dev_t *dev) { assert(fd >= 0); assert(dev); - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -361,7 +350,7 @@ int btrfs_subvol_get_id_fd(int fd, uint64_t *ret) { assert(fd >= 0); assert(ret); - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -481,7 +470,7 @@ int btrfs_subvol_get_info_fd(int fd, uint64_t subvol_id, BtrfsSubvolInfo *ret) { if (r < 0) return r; } else { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -575,7 +564,7 @@ int btrfs_qgroup_get_quota_fd(int fd, uint64_t qgroupid, BtrfsQuotaInfo *ret) { if (r < 0) return r; } else { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -762,21 +751,6 @@ int btrfs_subvol_get_subtree_quota(const char *path, uint64_t subvol_id, BtrfsQu return btrfs_subvol_get_subtree_quota_fd(fd, subvol_id, ret); } -int btrfs_defrag_fd(int fd) { - int r; - - assert(fd >= 0); - - r = fd_verify_regular(fd); - if (r < 0) - return r; - - if (ioctl(fd, BTRFS_IOC_DEFRAG, NULL) < 0) - return -errno; - - return 0; -} - int btrfs_defrag(const char *p) { _cleanup_close_ int fd = -1; @@ -795,7 +769,7 @@ int btrfs_quota_enable_fd(int fd, bool b) { assert(fd >= 0); - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -832,7 +806,7 @@ int btrfs_qgroup_set_limit_fd(int fd, uint64_t qgroupid, uint64_t referenced_max if (r < 0) return r; } else { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -924,7 +898,7 @@ static int qgroup_create_or_destroy(int fd, bool b, uint64_t qgroupid) { }; int r; - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (r == 0) @@ -1042,7 +1016,7 @@ static int qgroup_assign_or_unassign(int fd, bool b, uint64_t child, uint64_t pa }; int r; - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (r == 0) @@ -1269,7 +1243,7 @@ int btrfs_qgroup_copy_limits(int fd, uint64_t old_qgroupid, uint64_t new_qgroupi int r; - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -1738,7 +1712,7 @@ int btrfs_qgroup_find_parents(int fd, uint64_t qgroupid, uint64_t **ret) { if (r < 0) return r; } else { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) @@ -1979,7 +1953,7 @@ int btrfs_subvol_get_parent(int fd, uint64_t subvol_id, uint64_t *ret) { if (r < 0) return r; } else { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (!r) diff --git a/src/basic/btrfs-util.h b/src/shared/btrfs-util.h similarity index 98% rename from src/basic/btrfs-util.h rename to src/shared/btrfs-util.h index 0f569b6f5..7b18f5771 100644 --- a/src/basic/btrfs-util.h +++ b/src/shared/btrfs-util.h @@ -42,8 +42,6 @@ typedef enum BtrfsRemoveFlags { BTRFS_REMOVE_QUOTA = 1 << 1, } BtrfsRemoveFlags; -int btrfs_is_filesystem(int fd); - int btrfs_is_subvol_fd(int fd); int btrfs_is_subvol(const char *path); @@ -53,7 +51,6 @@ int btrfs_clone_range(int infd, uint64_t in_offset, int ofd, uint64_t out_offset int btrfs_get_block_device_fd(int fd, dev_t *dev); int btrfs_get_block_device(const char *path, dev_t *dev); -int btrfs_defrag_fd(int fd); int btrfs_defrag(const char *p); int btrfs_quota_enable_fd(int fd, bool b); diff --git a/src/shared/condition.c b/src/shared/condition.c index b86312548..ec9d57b29 100644 --- a/src/shared/condition.c +++ b/src/shared/condition.c @@ -17,12 +17,14 @@ #include "apparmor-util.h" #include "architecture.h" #include "audit-util.h" +#include "blockdev-util.h" #include "cap-list.h" #include "cgroup-util.h" #include "condition.h" #include "cpu-set-util.h" #include "efi-loader.h" #include "env-file.h" +#include "env-util.h" #include "extract-word.h" #include "fd-util.h" #include "fileio.h" @@ -34,6 +36,7 @@ #include "list.h" #include "macro.h" #include "mountpoint-util.h" +#include "os-util.h" #include "parse-util.h" #include "path-util.h" #include "proc-cmdline.h" @@ -262,6 +265,61 @@ static int condition_test_kernel_version(Condition *c, char **env) { return true; } +static int condition_test_osrelease(Condition *c, char **env) { + const char *parameter = c->parameter; + int r; + + assert(c); + assert(c->parameter); + assert(c->type == CONDITION_OS_RELEASE); + + for (;;) { + _cleanup_free_ char *key = NULL, *condition = NULL, *actual_value = NULL; + OrderOperator order; + const char *word; + bool matches; + + r = extract_first_word(¶meter, &condition, NULL, EXTRACT_UNQUOTE); + if (r < 0) + return log_debug_errno(r, "Failed to parse parameter: %m"); + if (r == 0) + break; + + /* parse_order() needs the string to start with the comparators */ + word = condition; + r = extract_first_word(&word, &key, "!<=>", EXTRACT_RETAIN_SEPARATORS); + if (r < 0) + return log_debug_errno(r, "Failed to parse parameter: %m"); + /* The os-release spec mandates env-var-like key names */ + if (r == 0 || isempty(word) || !env_name_is_valid(key)) + return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), + "Failed to parse parameter, key/value format expected: %m"); + + /* Do not allow whitespace after the separator, as that's not a valid os-release format */ + order = parse_order(&word); + if (order < 0 || isempty(word) || strchr(WHITESPACE, *word) != NULL) + return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), + "Failed to parse parameter, key/value format expected: %m"); + + r = parse_os_release(NULL, key, &actual_value); + if (r < 0) + return log_debug_errno(r, "Failed to parse os-release: %m"); + + /* Might not be comparing versions, so do exact string matching */ + if (order == ORDER_EQUAL) + matches = streq_ptr(actual_value, word); + else if (order == ORDER_UNEQUAL) + matches = !streq_ptr(actual_value, word); + else + matches = test_order(strverscmp_improved(actual_value, word), order); + + if (!matches) + return false; + } + + return true; +} + static int condition_test_memory(Condition *c, char **env) { OrderOperator order; uint64_t m, k; @@ -934,6 +992,7 @@ int condition_test(Condition *c, char **env) { [CONDITION_MEMORY] = condition_test_memory, [CONDITION_ENVIRONMENT] = condition_test_environment, [CONDITION_CPU_FEATURE] = condition_test_cpufeature, + [CONDITION_OS_RELEASE] = condition_test_osrelease, }; int r, b; @@ -1058,6 +1117,7 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = { [CONDITION_MEMORY] = "ConditionMemory", [CONDITION_ENVIRONMENT] = "ConditionEnvironment", [CONDITION_CPU_FEATURE] = "ConditionCPUFeature", + [CONDITION_OS_RELEASE] = "ConditionOSRelease", }; DEFINE_STRING_TABLE_LOOKUP(condition_type, ConditionType); @@ -1091,6 +1151,7 @@ static const char* const assert_type_table[_CONDITION_TYPE_MAX] = { [CONDITION_MEMORY] = "AssertMemory", [CONDITION_ENVIRONMENT] = "AssertEnvironment", [CONDITION_CPU_FEATURE] = "AssertCPUFeature", + [CONDITION_OS_RELEASE] = "AssertOSRelease", }; DEFINE_STRING_TABLE_LOOKUP(assert_type, ConditionType); diff --git a/src/shared/condition.h b/src/shared/condition.h index 6678689d7..3a5420c40 100644 --- a/src/shared/condition.h +++ b/src/shared/condition.h @@ -21,6 +21,7 @@ typedef enum ConditionType { CONDITION_CPUS, CONDITION_ENVIRONMENT, CONDITION_CPU_FEATURE, + CONDITION_OS_RELEASE, CONDITION_NEEDS_UPDATE, CONDITION_FIRST_BOOT, diff --git a/src/basic/copy.c b/src/shared/copy.c similarity index 99% rename from src/basic/copy.c rename to src/shared/copy.c index ed9f2ba3f..04f99a2d6 100644 --- a/src/basic/copy.c +++ b/src/shared/copy.c @@ -244,7 +244,6 @@ int copy_bytes_full( break; try_sendfile = try_splice = false; /* same logic as above for copy_file_range() */ - break; } else /* Success! */ goto next; diff --git a/src/basic/copy.h b/src/shared/copy.h similarity index 100% rename from src/basic/copy.h rename to src/shared/copy.h diff --git a/src/shared/cryptsetup-util.c b/src/shared/cryptsetup-util.c index 9deae39de..b93f702af 100644 --- a/src/shared/cryptsetup-util.c +++ b/src/shared/cryptsetup-util.c @@ -51,20 +51,10 @@ crypt_token_info (*sym_crypt_token_status)(struct crypt_device *cd, int token, c int (*sym_crypt_volume_key_get)(struct crypt_device *cd, int keyslot, char *volume_key, size_t *volume_key_size, const char *passphrase, size_t passphrase_size); int dlopen_cryptsetup(void) { - _cleanup_(dlclosep) void *dl = NULL; int r; - if (cryptsetup_dl) - return 0; /* Already loaded */ - - dl = dlopen("libcryptsetup.so.12", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libcryptsetup support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + r = dlopen_many_sym_or_warn( + &cryptsetup_dl, "libcryptsetup.so.12", LOG_DEBUG, DLSYM_ARG(crypt_activate_by_passphrase), #if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY DLSYM_ARG(crypt_activate_by_signed_key), @@ -104,15 +94,10 @@ int dlopen_cryptsetup(void) { DLSYM_ARG(crypt_token_max), #endif DLSYM_ARG(crypt_token_status), - DLSYM_ARG(crypt_volume_key_get), - NULL); - if (r < 0) + DLSYM_ARG(crypt_volume_key_get)); + if (r <= 0) return r; - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - cryptsetup_dl = TAKE_PTR(dl); - /* Redirect the default logging calls of libcryptsetup to our own logging infra. (Note that * libcryptsetup also maintains per-"struct crypt_device" log functions, which we'll also set * whenever allocating a "struct crypt_device" context. Why set both? To be defensive: maybe some diff --git a/src/shared/data-fd-util.c b/src/shared/data-fd-util.c new file mode 100644 index 000000000..a827ef5a8 --- /dev/null +++ b/src/shared/data-fd-util.c @@ -0,0 +1,350 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include +#include + +#include "alloc-util.h" +#include "copy.h" +#include "data-fd-util.h" +#include "fd-util.h" +#include "fs-util.h" +#include "io-util.h" +#include "memfd-util.h" +#include "tmpfile-util.h" + +/* When the data is smaller or equal to 64K, try to place the copy in a memfd/pipe */ +#define DATA_FD_MEMORY_LIMIT (64U*1024U) + +/* If memfd/pipe didn't work out, then let's use a file in /tmp up to a size of 1M. If it's large than that use /var/tmp instead. */ +#define DATA_FD_TMP_LIMIT (1024U*1024U) + +int acquire_data_fd(const void *data, size_t size, unsigned flags) { + _cleanup_close_pair_ int pipefds[2] = { -1, -1 }; + char pattern[] = "/dev/shm/data-fd-XXXXXX"; + _cleanup_close_ int fd = -1; + int isz = 0, r; + ssize_t n; + off_t f; + + assert(data || size == 0); + + /* Acquire a read-only file descriptor that when read from returns the specified data. This is much more + * complex than I wish it was. But here's why: + * + * a) First we try to use memfds. They are the best option, as we can seal them nicely to make them + * read-only. Unfortunately they require kernel 3.17, and – at the time of writing – we still support 3.14. + * + * b) Then, we try classic pipes. They are the second best options, as we can close the writing side, retaining + * a nicely read-only fd in the reading side. However, they are by default quite small, and unprivileged + * clients can only bump their size to a system-wide limit, which might be quite low. + * + * c) Then, we try an O_TMPFILE file in /dev/shm (that dir is the only suitable one known to exist from + * earliest boot on). To make it read-only we open the fd a second time with O_RDONLY via + * /proc/self/. Unfortunately O_TMPFILE is not available on older kernels on tmpfs. + * + * d) Finally, we try creating a regular file in /dev/shm, which we then delete. + * + * It sucks a bit that depending on the situation we return very different objects here, but that's Linux I + * figure. */ + + if (size == 0 && ((flags & ACQUIRE_NO_DEV_NULL) == 0)) { + /* As a special case, return /dev/null if we have been called for an empty data block */ + r = open("/dev/null", O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (r < 0) + return -errno; + + return r; + } + + if ((flags & ACQUIRE_NO_MEMFD) == 0) { + fd = memfd_new("data-fd"); + if (fd < 0) + goto try_pipe; + + n = write(fd, data, size); + if (n < 0) + return -errno; + if ((size_t) n != size) + return -EIO; + + f = lseek(fd, 0, SEEK_SET); + if (f != 0) + return -errno; + + r = memfd_set_sealed(fd); + if (r < 0) + return r; + + return TAKE_FD(fd); + } + +try_pipe: + if ((flags & ACQUIRE_NO_PIPE) == 0) { + if (pipe2(pipefds, O_CLOEXEC|O_NONBLOCK) < 0) + return -errno; + + isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); + if (isz < 0) + return -errno; + + if ((size_t) isz < size) { + isz = (int) size; + if (isz < 0 || (size_t) isz != size) + return -E2BIG; + + /* Try to bump the pipe size */ + (void) fcntl(pipefds[1], F_SETPIPE_SZ, isz); + + /* See if that worked */ + isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); + if (isz < 0) + return -errno; + + if ((size_t) isz < size) + goto try_dev_shm; + } + + n = write(pipefds[1], data, size); + if (n < 0) + return -errno; + if ((size_t) n != size) + return -EIO; + + (void) fd_nonblock(pipefds[0], false); + + return TAKE_FD(pipefds[0]); + } + +try_dev_shm: + if ((flags & ACQUIRE_NO_TMPFILE) == 0) { + fd = open("/dev/shm", O_RDWR|O_TMPFILE|O_CLOEXEC, 0500); + if (fd < 0) + goto try_dev_shm_without_o_tmpfile; + + n = write(fd, data, size); + if (n < 0) + return -errno; + if ((size_t) n != size) + return -EIO; + + /* Let's reopen the thing, in order to get an O_RDONLY fd for the original O_RDWR one */ + return fd_reopen(fd, O_RDONLY|O_CLOEXEC); + } + +try_dev_shm_without_o_tmpfile: + if ((flags & ACQUIRE_NO_REGULAR) == 0) { + fd = mkostemp_safe(pattern); + if (fd < 0) + return fd; + + n = write(fd, data, size); + if (n < 0) { + r = -errno; + goto unlink_and_return; + } + if ((size_t) n != size) { + r = -EIO; + goto unlink_and_return; + } + + /* Let's reopen the thing, in order to get an O_RDONLY fd for the original O_RDWR one */ + r = open(pattern, O_RDONLY|O_CLOEXEC); + if (r < 0) + r = -errno; + + unlink_and_return: + (void) unlink(pattern); + return r; + } + + return -EOPNOTSUPP; +} + +int copy_data_fd(int fd) { + _cleanup_close_ int copy_fd = -1, tmp_fd = -1; + _cleanup_free_ void *remains = NULL; + size_t remains_size = 0; + const char *td; + struct stat st; + int r; + + /* Creates a 'data' fd from the specified source fd, containing all the same data in a read-only fashion, but + * independent of it (i.e. the source fd can be closed and unmounted after this call succeeded). Tries to be + * somewhat smart about where to place the data. In the best case uses a memfd(). If memfd() are not supported + * uses a pipe instead. For larger data will use an unlinked file in /tmp, and for even larger data one in + * /var/tmp. */ + + if (fstat(fd, &st) < 0) + return -errno; + + /* For now, let's only accept regular files, sockets, pipes and char devices */ + if (S_ISDIR(st.st_mode)) + return -EISDIR; + if (S_ISLNK(st.st_mode)) + return -ELOOP; + if (!S_ISREG(st.st_mode) && !S_ISSOCK(st.st_mode) && !S_ISFIFO(st.st_mode) && !S_ISCHR(st.st_mode)) + return -EBADFD; + + /* If we have reason to believe the data is bounded in size, then let's use memfds or pipes as backing fd. Note + * that we use the reported regular file size only as a hint, given that there are plenty special files in + * /proc and /sys which report a zero file size but can be read from. */ + + if (!S_ISREG(st.st_mode) || st.st_size < DATA_FD_MEMORY_LIMIT) { + + /* Try a memfd first */ + copy_fd = memfd_new("data-fd"); + if (copy_fd >= 0) { + off_t f; + + r = copy_bytes(fd, copy_fd, DATA_FD_MEMORY_LIMIT, 0); + if (r < 0) + return r; + + f = lseek(copy_fd, 0, SEEK_SET); + if (f != 0) + return -errno; + + if (r == 0) { + /* Did it fit into the limit? If so, we are done. */ + r = memfd_set_sealed(copy_fd); + if (r < 0) + return r; + + return TAKE_FD(copy_fd); + } + + /* Hmm, pity, this didn't fit. Let's fall back to /tmp then, see below */ + + } else { + _cleanup_(close_pairp) int pipefds[2] = { -1, -1 }; + int isz; + + /* If memfds aren't available, use a pipe. Set O_NONBLOCK so that we will get EAGAIN rather + * then block indefinitely when we hit the pipe size limit */ + + if (pipe2(pipefds, O_CLOEXEC|O_NONBLOCK) < 0) + return -errno; + + isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); + if (isz < 0) + return -errno; + + /* Try to enlarge the pipe size if necessary */ + if ((size_t) isz < DATA_FD_MEMORY_LIMIT) { + + (void) fcntl(pipefds[1], F_SETPIPE_SZ, DATA_FD_MEMORY_LIMIT); + + isz = fcntl(pipefds[1], F_GETPIPE_SZ, 0); + if (isz < 0) + return -errno; + } + + if ((size_t) isz >= DATA_FD_MEMORY_LIMIT) { + + r = copy_bytes_full(fd, pipefds[1], DATA_FD_MEMORY_LIMIT, 0, &remains, &remains_size, NULL, NULL); + if (r < 0 && r != -EAGAIN) + return r; /* If we get EAGAIN it could be because of the source or because of + * the destination fd, we can't know, as sendfile() and friends won't + * tell us. Hence, treat this as reason to fall back, just to be + * sure. */ + if (r == 0) { + /* Everything fit in, yay! */ + (void) fd_nonblock(pipefds[0], false); + + return TAKE_FD(pipefds[0]); + } + + /* Things didn't fit in. But we read data into the pipe, let's remember that, so that + * when writing the new file we incorporate this first. */ + copy_fd = TAKE_FD(pipefds[0]); + } + } + } + + /* If we have reason to believe this will fit fine in /tmp, then use that as first fallback. */ + if ((!S_ISREG(st.st_mode) || st.st_size < DATA_FD_TMP_LIMIT) && + (DATA_FD_MEMORY_LIMIT + remains_size) < DATA_FD_TMP_LIMIT) { + off_t f; + + tmp_fd = open_tmpfile_unlinkable(NULL /* NULL as directory means /tmp */, O_RDWR|O_CLOEXEC); + if (tmp_fd < 0) + return tmp_fd; + + if (copy_fd >= 0) { + /* If we tried a memfd/pipe first and it ended up being too large, then copy this into the + * temporary file first. */ + + r = copy_bytes(copy_fd, tmp_fd, UINT64_MAX, 0); + if (r < 0) + return r; + + assert(r == 0); + } + + if (remains_size > 0) { + /* If there were remaining bytes (i.e. read into memory, but not written out yet) from the + * failed copy operation, let's flush them out next. */ + + r = loop_write(tmp_fd, remains, remains_size, false); + if (r < 0) + return r; + } + + r = copy_bytes(fd, tmp_fd, DATA_FD_TMP_LIMIT - DATA_FD_MEMORY_LIMIT - remains_size, COPY_REFLINK); + if (r < 0) + return r; + if (r == 0) + goto finish; /* Yay, it fit in */ + + /* It didn't fit in. Let's not forget to use what we already used */ + f = lseek(tmp_fd, 0, SEEK_SET); + if (f != 0) + return -errno; + + CLOSE_AND_REPLACE(copy_fd, tmp_fd); + + remains = mfree(remains); + remains_size = 0; + } + + /* As last fallback use /var/tmp */ + r = var_tmp_dir(&td); + if (r < 0) + return r; + + tmp_fd = open_tmpfile_unlinkable(td, O_RDWR|O_CLOEXEC); + if (tmp_fd < 0) + return tmp_fd; + + if (copy_fd >= 0) { + /* If we tried a memfd/pipe first, or a file in /tmp, and it ended up being too large, than copy this + * into the temporary file first. */ + r = copy_bytes(copy_fd, tmp_fd, UINT64_MAX, COPY_REFLINK); + if (r < 0) + return r; + + assert(r == 0); + } + + if (remains_size > 0) { + /* Then, copy in any read but not yet written bytes. */ + r = loop_write(tmp_fd, remains, remains_size, false); + if (r < 0) + return r; + } + + /* Copy in the rest */ + r = copy_bytes(fd, tmp_fd, UINT64_MAX, COPY_REFLINK); + if (r < 0) + return r; + + assert(r == 0); + +finish: + /* Now convert the O_RDWR file descriptor into an O_RDONLY one (and as side effect seek to the beginning of the + * file again */ + + return fd_reopen(tmp_fd, O_RDONLY|O_CLOEXEC); +} diff --git a/src/shared/data-fd-util.h b/src/shared/data-fd-util.h new file mode 100644 index 000000000..827e14966 --- /dev/null +++ b/src/shared/data-fd-util.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include + +int acquire_data_fd(const void *data, size_t size, unsigned flags); +int copy_data_fd(int fd); diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c index c572e8dae..5c833afc7 100644 --- a/src/shared/discover-image.c +++ b/src/shared/discover-image.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,7 @@ #include "os-util.h" #include "path-util.h" #include "rm-rf.h" +#include "stat-util.h" #include "string-table.h" #include "string-util.h" #include "strv.h" @@ -262,7 +264,7 @@ static int image_make( if (btrfs_might_be_subvol(st)) { - r = btrfs_is_filesystem(fd); + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); if (r < 0) return r; if (r) { diff --git a/src/shared/dlfcn-util.c b/src/shared/dlfcn-util.c new file mode 100644 index 000000000..a321df3c6 --- /dev/null +++ b/src/shared/dlfcn-util.c @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "dlfcn-util.h" + +static int dlsym_many_or_warnv(void *dl, int log_level, va_list ap) { + void (**fn)(void); + + /* Tries to resolve a bunch of function symbols, and logs an error about if it cannot resolve one of + * them. Note that this function possibly modifies the supplied function pointers if the whole + * operation fails. */ + + while ((fn = va_arg(ap, typeof(fn)))) { + void (*tfn)(void); + const char *symbol; + + symbol = va_arg(ap, typeof(symbol)); + + tfn = (typeof(tfn)) dlsym(dl, symbol); + if (!tfn) + return log_full_errno(log_level, + SYNTHETIC_ERRNO(ELIBBAD), + "Can't find symbol %s: %s", symbol, dlerror()); + *fn = tfn; + } + + return 0; +} + +int dlsym_many_or_warn_sentinel(void *dl, int log_level, ...) { + va_list ap; + int r; + + va_start(ap, log_level); + r = dlsym_many_or_warnv(dl, log_level, ap); + va_end(ap); + + return r; +} + +int dlopen_many_sym_or_warn_sentinel(void **dlp, const char *filename, int log_level, ...) { + _cleanup_(dlclosep) void *dl = NULL; + int r; + + if (*dlp) + return 0; /* Already loaded */ + + dl = dlopen(filename, RTLD_LAZY); + if (!dl) + return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), + "%s is not installed: %s", filename, dlerror()); + + va_list ap; + va_start(ap, log_level); + r = dlsym_many_or_warnv(dl, log_level, ap); + va_end(ap); + + if (r < 0) + return r; + + /* Note that we never release the reference here, because there's no real reason to. After all this + * was traditionally a regular shared library dependency which lives forever too. */ + *dlp = TAKE_PTR(dl); + return 1; +} diff --git a/src/shared/dlfcn-util.h b/src/shared/dlfcn-util.h new file mode 100644 index 000000000..d786d035d --- /dev/null +++ b/src/shared/dlfcn-util.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include + +#include "macro.h" + +DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(void*, dlclose, NULL); + +int dlsym_many_or_warn_sentinel(void *dl, int log_level, ...) _sentinel_; +int dlopen_many_sym_or_warn_sentinel(void **dlp, const char *filename, int log_level, ...) _sentinel_; + +#define dlsym_many_or_warn(dl, log_level, ...) \ + dlsym_many_or_warn_sentinel(dl, log_level, __VA_ARGS__, NULL) +#define dlopen_many_sym_or_warn(dlp, filename, log_level, ...) \ + dlopen_many_sym_or_warn_sentinel(dlp, filename, log_level, __VA_ARGS__, NULL) + +/* Macro useful for putting together variable/symbol name pairs when calling dlsym_many_or_warn(). Assumes + * that each library symbol to resolve will be placed in a variable with the "sym_" prefix, i.e. a symbol + * "foobar" is loaded into a variable "sym_foobar". */ +#define DLSYM_ARG(arg) \ + &sym_##arg, STRINGIFY(arg) diff --git a/src/shared/gpt.c b/src/shared/gpt.c index bd1f43ffd..882d11ca6 100644 --- a/src/shared/gpt.c +++ b/src/shared/gpt.c @@ -174,3 +174,17 @@ bool gpt_partition_type_knows_growfs(sd_id128_t id) { GPT_TMP, GPT_XBOOTLDR); } + +bool gpt_partition_type_knows_no_auto(sd_id128_t id) { + return gpt_partition_type_is_root(id) || + gpt_partition_type_is_root_verity(id) || + gpt_partition_type_is_usr(id) || + gpt_partition_type_is_usr_verity(id) || + sd_id128_in_set(id, + GPT_HOME, + GPT_SRV, + GPT_VAR, + GPT_TMP, + GPT_XBOOTLDR, + GPT_SWAP); +} diff --git a/src/shared/gpt.h b/src/shared/gpt.h index c92d9c097..dc530ef1b 100644 --- a/src/shared/gpt.h +++ b/src/shared/gpt.h @@ -140,3 +140,4 @@ bool gpt_partition_type_is_usr_verity(sd_id128_t id); bool gpt_partition_type_knows_read_only(sd_id128_t id); bool gpt_partition_type_knows_growfs(sd_id128_t id); +bool gpt_partition_type_knows_no_auto(sd_id128_t id); diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/shared/hwdb-util.c similarity index 96% rename from src/libsystemd/sd-hwdb/hwdb-util.c rename to src/shared/hwdb-util.c index 8964a40e3..d7626aed9 100644 --- a/src/libsystemd/sd-hwdb/hwdb-util.c +++ b/src/shared/hwdb-util.c @@ -13,6 +13,7 @@ #include "hwdb-util.h" #include "label.h" #include "mkdir.h" +#include "nulstr-util.h" #include "path-util.h" #include "sort-util.h" #include "strbuf.h" @@ -586,10 +587,10 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co uint16_t file_priority = 1; int r = 0, err; - /* The argument 'compat' controls the format version of database. If false, then hwdb.bin will be created with - * additional information such that priority, line number, and filename of database source. If true, then hwdb.bin - * will be created without the information. systemd-hwdb command should set the argument false, and 'udevadm hwdb' - * command should set it true. */ + /* The argument 'compat' controls the format version of database. If false, then hwdb.bin will be + * created with additional information such that priority, line number, and filename of database + * source. If true, then hwdb.bin will be created without the information. systemd-hwdb command + * should set the argument false, and 'udevadm hwdb' command should set it true. */ trie = new0(struct trie, 1); if (!trie) @@ -666,3 +667,27 @@ int hwdb_query(const char *modalias) { return 0; } + +bool hwdb_validate(sd_hwdb *hwdb) { + bool found = false; + const char* p; + struct stat st; + + if (!hwdb) + return false; + if (!hwdb->f) + return false; + + /* if hwdb.bin doesn't exist anywhere, we need to update */ + NULSTR_FOREACH(p, hwdb_bin_paths) + if (stat(p, &st) >= 0) { + found = true; + break; + } + if (!found) + return true; + + if (timespec_load(&hwdb->st.st_mtim) != timespec_load(&st.st_mtim)) + return true; + return false; +} diff --git a/src/libsystemd/sd-hwdb/hwdb-util.h b/src/shared/hwdb-util.h similarity index 100% rename from src/libsystemd/sd-hwdb/hwdb-util.h rename to src/shared/hwdb-util.h diff --git a/src/shared/idn-util.c b/src/shared/idn-util.c index 1c4472dc6..d4108d0c8 100644 --- a/src/shared/idn-util.c +++ b/src/shared/idn-util.c @@ -21,32 +21,11 @@ const char *(*sym_idn2_strerror)(int rc) = NULL; int (*sym_idn2_to_unicode_8z8z)(const char * input, char ** output, int flags) = NULL; int dlopen_idn(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (idn_dl) - return 0; /* Already loaded */ - - dl = dlopen("libidn2.so.0", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libidn2 support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + return dlopen_many_sym_or_warn( + &idn_dl, "libidn2.so.0", LOG_DEBUG, DLSYM_ARG(idn2_lookup_u8), DLSYM_ARG(idn2_strerror), - DLSYM_ARG(idn2_to_unicode_8z8z), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - idn_dl = TAKE_PTR(dl); - - return 1; + DLSYM_ARG(idn2_to_unicode_8z8z)); } #endif @@ -73,14 +52,13 @@ int dlopen_idn(void) { "libidn support is not installed: %s", dlerror()); } - r = dlsym_many_and_warn( + r = dlsym_many_or_warn( dl, LOG_DEBUG, DLSYM_ARG(idna_to_ascii_4i), DLSYM_ARG(idna_to_unicode_44i), DLSYM_ARG(stringprep_ucs4_to_utf8), - DLSYM_ARG(stringprep_utf8_to_ucs4), - NULL); + DLSYM_ARG(stringprep_utf8_to_ucs4)); if (r < 0) return r; diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c index a697b5c4e..403d6013c 100644 --- a/src/shared/install-printf.c +++ b/src/shared/install-printf.c @@ -13,7 +13,7 @@ #include "unit-name.h" #include "user-util.h" -static int specifier_prefix_and_instance(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const UnitFileInstallInfo *i = userdata; _cleanup_free_ char *prefix = NULL; int r; @@ -37,7 +37,7 @@ static int specifier_prefix_and_instance(char specifier, const void *data, const return 0; } -static int specifier_name(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const UnitFileInstallInfo *i = userdata; char *ans; @@ -53,7 +53,7 @@ static int specifier_name(char specifier, const void *data, const void *userdata return 0; } -static int specifier_prefix(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const UnitFileInstallInfo *i = userdata; assert(i); @@ -61,7 +61,7 @@ static int specifier_prefix(char specifier, const void *data, const void *userda return unit_name_to_prefix(i->name, ret); } -static int specifier_instance(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const UnitFileInstallInfo *i = userdata; char *instance; int r; @@ -82,12 +82,12 @@ static int specifier_instance(char specifier, const void *data, const void *user return 0; } -static int specifier_last_component(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_last_component(char specifier, const void *data, const char *root, const void *userdata, char **ret) { _cleanup_free_ char *prefix = NULL; char *dash; int r; - r = specifier_prefix(specifier, data, userdata, &prefix); + r = specifier_prefix(specifier, data, root, userdata, &prefix); if (r < 0) return r; @@ -103,7 +103,7 @@ static int specifier_last_component(char specifier, const void *data, const void return 0; } -int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, char **ret) { +int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret) { /* This is similar to unit_name_printf() */ const Specifier table[] = { @@ -123,5 +123,5 @@ int install_full_printf_internal(const UnitFileInstallInfo *i, const char *forma assert(format); assert(ret); - return specifier_printf(format, max_length, table, i, ret); + return specifier_printf(format, max_length, table, root, i, ret); } diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h index 13a39829e..af32acc2c 100644 --- a/src/shared/install-printf.h +++ b/src/shared/install-printf.h @@ -4,10 +4,11 @@ #include "install.h" #include "unit-name.h" -int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, char **ret); -static inline int install_name_printf(const UnitFileInstallInfo *i, const char *format, char **ret) { - return install_full_printf_internal(i, format, UNIT_NAME_MAX, ret); +int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret); + +static inline int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { + return install_full_printf_internal(i, format, UNIT_NAME_MAX, root, ret); } -static inline int install_path_printf(const UnitFileInstallInfo *i, const char *format, char **ret) { - return install_full_printf_internal(i, format, PATH_MAX-1, ret); +static inline int install_path_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { + return install_full_printf_internal(i, format, PATH_MAX-1, root, ret); } diff --git a/src/shared/install.c b/src/shared/install.c index ba4fa5b13..4bf868f8e 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -568,8 +568,6 @@ static int remove_marked_symlinks_fd( FOREACH_DIRENT(de, d, return -errno) { - dirent_ensure_type(d, de); - if (de->d_type == DT_DIR) { _cleanup_free_ char *p = NULL; int nfd, q; @@ -738,8 +736,6 @@ static int find_symlinks_in_directory( bool found_path = false, found_dest, b = false; int q; - dirent_ensure_type(dir, de); - if (de->d_type != DT_LNK) continue; @@ -836,8 +832,6 @@ static int find_symlinks( _cleanup_free_ const char *path = NULL; _cleanup_closedir_ DIR *d = NULL; - dirent_ensure_type(config_dir, de); - if (de->d_type != DT_DIR) continue; @@ -969,6 +963,7 @@ static void install_info_free(UnitFileInstallInfo *i) { free(i->name); free(i->path); + free(i->root); strv_free(i->aliases); strv_free(i->wanted_by); strv_free(i->required_by); @@ -1029,6 +1024,7 @@ static int install_info_add( InstallContext *c, const char *name, const char *path, + const char *root, bool auxiliary, UnitFileInstallInfo **ret) { @@ -1072,6 +1068,14 @@ static int install_info_add( goto fail; } + if (root) { + i->root = strdup(root); + if (!i->root) { + r = -ENOMEM; + goto fail; + } + } + if (path) { i->path = strdup(path); if (!i->path) { @@ -1153,11 +1157,11 @@ static int config_parse_also( if (r == 0) break; - r = install_name_printf(info, word, &printed); + r = install_name_printf(info, word, info->root, &printed); if (r < 0) return r; - r = install_info_add(c, printed, NULL, true, NULL); + r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL); if (r < 0) return r; @@ -1200,7 +1204,7 @@ static int config_parse_default_instance( return log_syntax(unit, LOG_WARNING, filename, line, 0, "DefaultInstance= only makes sense for template units, ignoring."); - r = install_name_printf(i, rvalue, &printed); + r = install_name_printf(i, rvalue, i->root, &printed); if (r < 0) return r; @@ -1643,7 +1647,7 @@ static int install_info_traverse( bn = buffer; } - r = install_info_add(c, bn, NULL, false, &i); + r = install_info_add(c, bn, NULL, paths->root_dir, /* auxiliary= */ false, &i); if (r < 0) return r; @@ -1682,9 +1686,9 @@ static int install_info_add_auto( pp = prefix_roota(paths->root_dir, name_or_path); - return install_info_add(c, NULL, pp, false, ret); + return install_info_add(c, NULL, pp, paths->root_dir, /* auxiliary= */ false, ret); } else - return install_info_add(c, name_or_path, NULL, false, ret); + return install_info_add(c, name_or_path, NULL, paths->root_dir, /* auxiliary= */ false, ret); } static int install_info_discover( @@ -1826,7 +1830,7 @@ static int install_info_symlink_alias( STRV_FOREACH(s, i->aliases) { _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; - q = install_path_printf(i, *s, &dst); + q = install_path_printf(i, *s, i->root, &dst); if (q < 0) return q; @@ -1911,7 +1915,7 @@ static int install_info_symlink_wants( STRV_FOREACH(s, list) { _cleanup_free_ char *path = NULL, *dst = NULL; - q = install_name_printf(i, *s, &dst); + q = install_name_printf(i, *s, i->root, &dst); if (q < 0) return q; @@ -2693,7 +2697,7 @@ int unit_file_disable( if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) return -EINVAL; - r = install_info_add(&c, *i, NULL, false, NULL); + r = install_info_add(&c, *i, NULL, paths.root_dir, /* auxiliary= */ false, NULL); if (r < 0) return r; } @@ -3379,8 +3383,6 @@ int unit_file_preset_all( if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY)) continue; - dirent_ensure_type(d, de); - if (!IN_SET(de->d_type, DT_LNK, DT_REG)) continue; @@ -3457,8 +3459,6 @@ int unit_file_get_list( if (hashmap_get(h, de->d_name)) continue; - dirent_ensure_type(d, de); - if (!IN_SET(de->d_type, DT_LNK, DT_REG)) continue; diff --git a/src/shared/install.h b/src/shared/install.h index c3a0249f5..cdc543503 100644 --- a/src/shared/install.h +++ b/src/shared/install.h @@ -79,6 +79,7 @@ enum UnitFileType { struct UnitFileInstallInfo { char *name; char *path; + char *root; char **aliases; char **wanted_by; diff --git a/src/basic/label.c b/src/shared/label.c similarity index 100% rename from src/basic/label.c rename to src/shared/label.c diff --git a/src/basic/label.h b/src/shared/label.h similarity index 100% rename from src/basic/label.h rename to src/shared/label.h diff --git a/src/shared/libfido2-util.c b/src/shared/libfido2-util.c index ec09937d8..12c644dcf 100644 --- a/src/shared/libfido2-util.c +++ b/src/shared/libfido2-util.c @@ -61,20 +61,8 @@ int (*sym_fido_dev_open)(fido_dev_t *, const char *) = NULL; const char* (*sym_fido_strerr)(int) = NULL; int dlopen_libfido2(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (libfido2_dl) - return 0; /* Already loaded */ - - dl = dlopen("libfido2.so.1", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libfido2 support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + return dlopen_many_sym_or_warn( + &libfido2_dl, "libfido2.so.1", LOG_DEBUG, DLSYM_ARG(fido_assert_allow_cred), DLSYM_ARG(fido_assert_free), DLSYM_ARG(fido_assert_hmac_secret_len), @@ -118,15 +106,7 @@ int dlopen_libfido2(void) { DLSYM_ARG(fido_dev_make_cred), DLSYM_ARG(fido_dev_new), DLSYM_ARG(fido_dev_open), - DLSYM_ARG(fido_strerr), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - libfido2_dl = TAKE_PTR(dl); - return 1; + DLSYM_ARG(fido_strerr)); } static int verify_features( diff --git a/src/shared/meson.build b/src/shared/meson.build index 8d9cb3235..5008cda50 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -17,6 +17,8 @@ shared_sources = files(''' bitmap.c bitmap.h blkid-util.h + blockdev-util.c + blockdev-util.h bond-util.c bond-util.h boot-timestamps.c @@ -29,6 +31,8 @@ shared_sources = files(''' bpf-program.h bridge-util.c bridge-util.h + btrfs-util.c + btrfs-util.h bus-get-properties.c bus-get-properties.h bus-locator.c @@ -71,6 +75,8 @@ shared_sources = files(''' condition.h conf-parser.c conf-parser.h + copy.c + copy.h coredump-util.c coredump-util.h cpu-set-util.c @@ -78,6 +84,8 @@ shared_sources = files(''' cryptsetup-util.c cryptsetup-util.h daemon-util.h + data-fd-util.c + data-fd-util.h dev-setup.c dev-setup.h device-nodes.c @@ -87,6 +95,8 @@ shared_sources = files(''' discover-image.h dissect-image.c dissect-image.h + dlfcn-util.c + dlfcn-util.h dm-util.c dm-util.h dns-domain.c @@ -129,6 +139,8 @@ shared_sources = files(''' group-record.h hostname-setup.c hostname-setup.h + hwdb-util.c + hwdb-util.h id128-print.c id128-print.h idn-util.c @@ -142,10 +154,10 @@ shared_sources = files(''' install-printf.h install.c install.h - ipvlan-util.c - ipvlan-util.h ip-protocol-list.c ip-protocol-list.h + ipvlan-util.c + ipvlan-util.h journal-importer.c journal-importer.h journal-util.c @@ -157,6 +169,8 @@ shared_sources = files(''' kbd-util.h killall.c killall.h + label.c + label.h libcrypt-util.c libcrypt-util.h libfido2-util.c @@ -186,6 +200,7 @@ shared_sources = files(''' macvlan-util.c macvlan-util.h main-func.h + mkdir-label.c mkfs-util.c mkfs-util.h module-util.h @@ -223,21 +238,30 @@ shared_sources = files(''' pwquality-util.h qrcode-util.c qrcode-util.h + quota-util.c + quota-util.h reboot-util.c reboot-util.h resize-fs.c resize-fs.h resolve-util.c resolve-util.h + rm-rf.c + rm-rf.h seccomp-util.h securebits-util.c securebits-util.h + selinux-util.c + selinux-util.h serialize.c serialize.h service-util.c service-util.h sleep-config.c sleep-config.h + smack-util.c + smack-util.h + socket-label.c socket-netlink.c socket-netlink.h spawn-ask-password-agent.c @@ -264,10 +288,10 @@ shared_sources = files(''' user-record-show.h user-record.c user-record.h - userdb.c - userdb.h userdb-dropin.c userdb-dropin.h + userdb.c + userdb.h utmp-wtmp.h varlink.c varlink.h diff --git a/src/basic/mkdir-label.c b/src/shared/mkdir-label.c similarity index 100% rename from src/basic/mkdir-label.c rename to src/shared/mkdir-label.c diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c index 34e0d53bc..ff95fbc56 100644 --- a/src/shared/mount-util.c +++ b/src/shared/mount-util.c @@ -16,7 +16,9 @@ #include "fileio.h" #include "fs-util.h" #include "hashmap.h" +#include "label.h" #include "libmount-util.h" +#include "missing_mount.h" #include "missing_syscall.h" #include "mkdir.h" #include "mount-util.h" @@ -530,71 +532,54 @@ int mode_to_inaccessible_node( return 0; } -#define FLAG(name) (flags & name ? STRINGIFY(name) "|" : "") -static char* mount_flags_to_string(long unsigned flags) { - char *x; - _cleanup_free_ char *y = NULL; - long unsigned overflow; +int mount_flags_to_string(long unsigned flags, char **ret) { + static const struct { + long unsigned flag; + const char *name; + } map[] = { + { .flag = MS_RDONLY, .name = "MS_RDONLY", }, + { .flag = MS_NOSUID, .name = "MS_NOSUID", }, + { .flag = MS_NODEV, .name = "MS_NODEV", }, + { .flag = MS_NOEXEC, .name = "MS_NOEXEC", }, + { .flag = MS_SYNCHRONOUS, .name = "MS_SYNCHRONOUS", }, + { .flag = MS_REMOUNT, .name = "MS_REMOUNT", }, + { .flag = MS_MANDLOCK, .name = "MS_MANDLOCK", }, + { .flag = MS_DIRSYNC, .name = "MS_DIRSYNC", }, + { .flag = MS_NOSYMFOLLOW, .name = "MS_NOSYMFOLLOW", }, + { .flag = MS_NOATIME, .name = "MS_NOATIME", }, + { .flag = MS_NODIRATIME, .name = "MS_NODIRATIME", }, + { .flag = MS_BIND, .name = "MS_BIND", }, + { .flag = MS_MOVE, .name = "MS_MOVE", }, + { .flag = MS_REC, .name = "MS_REC", }, + { .flag = MS_SILENT, .name = "MS_SILENT", }, + { .flag = MS_POSIXACL, .name = "MS_POSIXACL", }, + { .flag = MS_UNBINDABLE, .name = "MS_UNBINDABLE", }, + { .flag = MS_PRIVATE, .name = "MS_PRIVATE", }, + { .flag = MS_SLAVE, .name = "MS_SLAVE", }, + { .flag = MS_SHARED, .name = "MS_SHARED", }, + { .flag = MS_RELATIME, .name = "MS_RELATIME", }, + { .flag = MS_KERNMOUNT, .name = "MS_KERNMOUNT", }, + { .flag = MS_I_VERSION, .name = "MS_I_VERSION", }, + { .flag = MS_STRICTATIME, .name = "MS_STRICTATIME", }, + { .flag = MS_LAZYTIME, .name = "MS_LAZYTIME", }, + }; + _cleanup_free_ char *str = NULL; - overflow = flags & ~(MS_RDONLY | - MS_NOSUID | - MS_NODEV | - MS_NOEXEC | - MS_SYNCHRONOUS | - MS_REMOUNT | - MS_MANDLOCK | - MS_DIRSYNC | - MS_NOATIME | - MS_NODIRATIME | - MS_BIND | - MS_MOVE | - MS_REC | - MS_SILENT | - MS_POSIXACL | - MS_UNBINDABLE | - MS_PRIVATE | - MS_SLAVE | - MS_SHARED | - MS_RELATIME | - MS_KERNMOUNT | - MS_I_VERSION | - MS_STRICTATIME | - MS_LAZYTIME); + assert(ret); - if (flags == 0 || overflow != 0) - if (asprintf(&y, "%lx", overflow) < 0) - return NULL; + for (size_t i = 0; i < ELEMENTSOF(map); i++) + if (flags & map[i].flag) { + if (!strextend_with_separator(&str, "|", map[i].name)) + return -ENOMEM; + flags &= ~map[i].flag; + } - x = strjoin(FLAG(MS_RDONLY), - FLAG(MS_NOSUID), - FLAG(MS_NODEV), - FLAG(MS_NOEXEC), - FLAG(MS_SYNCHRONOUS), - FLAG(MS_REMOUNT), - FLAG(MS_MANDLOCK), - FLAG(MS_DIRSYNC), - FLAG(MS_NOATIME), - FLAG(MS_NODIRATIME), - FLAG(MS_BIND), - FLAG(MS_MOVE), - FLAG(MS_REC), - FLAG(MS_SILENT), - FLAG(MS_POSIXACL), - FLAG(MS_UNBINDABLE), - FLAG(MS_PRIVATE), - FLAG(MS_SLAVE), - FLAG(MS_SHARED), - FLAG(MS_RELATIME), - FLAG(MS_KERNMOUNT), - FLAG(MS_I_VERSION), - FLAG(MS_STRICTATIME), - FLAG(MS_LAZYTIME), - y); - if (!x) - return NULL; - if (!y) - x[strlen(x) - 1] = '\0'; /* truncate the last | */ - return x; + if (!str || flags != 0) + if (strextendf_with_separator(&str, "|", "%lx", flags) < 0) + return -ENOMEM; + + *ret = TAKE_PTR(str); + return 0; } int mount_verbose_full( @@ -616,7 +601,7 @@ int mount_verbose_full( "Failed to mangle mount options %s: %m", strempty(options)); - fl = mount_flags_to_string(f); + (void) mount_flags_to_string(f, &fl); if ((f & MS_REMOUNT) && !what && !type) log_debug("Remounting %s (%s \"%s\")...", @@ -669,7 +654,6 @@ int mount_option_mangle( const struct libmnt_optmap *map; _cleanup_free_ char *ret = NULL; - const char *p; int r; /* This extracts mount flags from the mount options, and store @@ -694,12 +678,11 @@ int mount_option_mangle( if (!map) return -EINVAL; - p = options; - for (;;) { + for (const char *p = options;;) { _cleanup_free_ char *word = NULL; const struct libmnt_optmap *ent; - r = extract_first_word(&p, &word, ",", EXTRACT_UNQUOTE); + r = extract_first_word(&p, &word, ",", EXTRACT_KEEP_QUOTE); if (r < 0) return r; if (r == 0) @@ -1089,3 +1072,25 @@ int remount_idmap( return 0; } + +int make_mount_point_inode_from_stat(const struct stat *st, const char *dest, mode_t mode) { + assert(st); + assert(dest); + + if (S_ISDIR(st->st_mode)) + return mkdir_label(dest, mode); + else + return mknod(dest, S_IFREG|(mode & ~0111), 0); +} + +int make_mount_point_inode_from_path(const char *source, const char *dest, mode_t mode) { + struct stat st; + + assert(source); + assert(dest); + + if (stat(source, &st) < 0) + return -errno; + + return make_mount_point_inode_from_stat(&st, dest, mode); +} diff --git a/src/shared/mount-util.h b/src/shared/mount-util.h index 837afc2e8..36501c2c4 100644 --- a/src/shared/mount-util.h +++ b/src/shared/mount-util.h @@ -3,6 +3,7 @@ #include #include +#include #include #include "alloc-util.h" @@ -89,6 +90,7 @@ int mount_option_mangle( char **ret_remaining_options); int mode_to_inaccessible_node(const char *runtime_dir, mode_t mode, char **dest); +int mount_flags_to_string(long unsigned flags, char **ret); /* Useful for usage with _cleanup_(), unmounts, removes a directory and frees the pointer */ static inline char* umount_and_rmdir_and_free(char *p) { @@ -107,3 +109,7 @@ int mount_image_in_namespace(pid_t target, const char *propagate_path, const cha int make_mount_point(const char *path); int remount_idmap(const char *p, uid_t uid_shift, uid_t uid_range); + +/* Creates a mount point (not parents) based on the source path or stat - ie, a file or a directory */ +int make_mount_point_inode_from_stat(const struct stat *st, const char *dest, mode_t mode); +int make_mount_point_inode_from_path(const char *source, const char *dest, mode_t mode); diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h index c0f94d040..119b80178 100644 --- a/src/shared/netif-naming-scheme.h +++ b/src/shared/netif-naming-scheme.h @@ -34,6 +34,7 @@ typedef enum NamingSchemeFlags { NAMING_BRIDGE_NO_SLOT = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */ NAMING_SLOT_FUNCTION_ID = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */ NAMING_16BIT_INDEX = 1 << 11, /* Allow full 16-bit for the onboard index */ + NAMING_REPLACE_STRICTLY = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */ /* And now the masks that combine the features above */ NAMING_V238 = 0, @@ -43,7 +44,7 @@ typedef enum NamingSchemeFlags { NAMING_V243 = NAMING_V241 | NAMING_NETDEVSIM | NAMING_LABEL_NOPREFIX, NAMING_V245 = NAMING_V243 | NAMING_NSPAWN_LONG_HASH, NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT, - NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX, + NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY, _NAMING_SCHEME_FLAGS_INVALID = -EINVAL, } NamingSchemeFlags; diff --git a/src/shared/numa-util.c b/src/shared/numa-util.c index 7e41d6866..644b0bde5 100644 --- a/src/shared/numa-util.c +++ b/src/shared/numa-util.c @@ -139,8 +139,6 @@ static int numa_max_node(void) { int node; const char *n; - (void) dirent_ensure_type(d, de); - if (de->d_type != DT_DIR) continue; diff --git a/src/shared/openssl-util.h b/src/shared/openssl-util.h index 0f527e74c..e6c2bd931 100644 --- a/src/shared/openssl-util.h +++ b/src/shared/openssl-util.h @@ -4,7 +4,8 @@ #include "macro.h" #if HAVE_OPENSSL -# include +# include +# include DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(X509*, X509_free, NULL); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(X509_NAME*, X509_NAME_free, NULL); diff --git a/src/shared/pwquality-util.c b/src/shared/pwquality-util.c index 5bd33eee4..12efe6260 100644 --- a/src/shared/pwquality-util.c +++ b/src/shared/pwquality-util.c @@ -24,20 +24,8 @@ int (*sym_pwquality_set_int_value)(pwquality_settings_t *pwq, int setting, int v const char* (*sym_pwquality_strerror)(char *buf, size_t len, int errcode, void *auxerror); int dlopen_pwquality(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (pwquality_dl) - return 0; /* Already loaded */ - - dl = dlopen("libpwquality.so.1", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libpwquality support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + return dlopen_many_sym_or_warn( + &pwquality_dl, "libpwquality.so.1", LOG_DEBUG, DLSYM_ARG(pwquality_check), DLSYM_ARG(pwquality_default_settings), DLSYM_ARG(pwquality_free_settings), @@ -45,15 +33,7 @@ int dlopen_pwquality(void) { DLSYM_ARG(pwquality_get_str_value), DLSYM_ARG(pwquality_read_config), DLSYM_ARG(pwquality_set_int_value), - DLSYM_ARG(pwquality_strerror), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - pwquality_dl = TAKE_PTR(dl); - return 1; + DLSYM_ARG(pwquality_strerror)); } void pwq_maybe_disable_dictionary(pwquality_settings_t *pwq) { diff --git a/src/shared/qrcode-util.c b/src/shared/qrcode-util.c index 79ac64067..db48c7361 100644 --- a/src/shared/qrcode-util.c +++ b/src/shared/qrcode-util.c @@ -5,9 +5,9 @@ #if HAVE_QRENCODE #include -#include "alloc-util.h" #include "dlfcn-util.h" #include "locale-util.h" +#include "log.h" #include "terminal-util.h" #define ANSI_WHITE_ON_BLACK "\033[40;37;1m" @@ -18,30 +18,10 @@ static QRcode* (*sym_QRcode_encodeString)(const char *string, int version, QRecL static void (*sym_QRcode_free)(QRcode *qrcode) = NULL; int dlopen_qrencode(void) { - _cleanup_(dlclosep) void *dl = NULL; - int r; - - if (qrcode_dl) - return 0; /* Already loaded */ - - dl = dlopen("libqrencode.so.4", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "libqrcode support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, + return dlopen_many_sym_or_warn( + &qrcode_dl, "libqrencode.so.4", LOG_DEBUG, DLSYM_ARG(QRcode_encodeString), - DLSYM_ARG(QRcode_free), - NULL); - if (r < 0) - return r; - - /* Note that we never release the reference here, because there's no real reason to, after all this - * was traditionally a regular shared library dependency which lives forever too. */ - qrcode_dl = TAKE_PTR(dl); - return 1; + DLSYM_ARG(QRcode_free)); } static void print_border(FILE *output, unsigned width) { diff --git a/src/basic/quota-util.c b/src/shared/quota-util.c similarity index 100% rename from src/basic/quota-util.c rename to src/shared/quota-util.c diff --git a/src/basic/quota-util.h b/src/shared/quota-util.h similarity index 100% rename from src/basic/quota-util.h rename to src/shared/quota-util.h diff --git a/src/basic/rm-rf.c b/src/shared/rm-rf.c similarity index 100% rename from src/basic/rm-rf.c rename to src/shared/rm-rf.c diff --git a/src/basic/rm-rf.h b/src/shared/rm-rf.h similarity index 100% rename from src/basic/rm-rf.h rename to src/shared/rm-rf.h diff --git a/src/basic/selinux-util.c b/src/shared/selinux-util.c similarity index 97% rename from src/basic/selinux-util.c rename to src/shared/selinux-util.c index 30229509b..03cee76f6 100644 --- a/src/basic/selinux-util.c +++ b/src/shared/selinux-util.c @@ -36,9 +36,9 @@ static int mac_selinux_reload(int seqno); static int cached_use = -1; static bool initialized = false; -static int (*enforcing_status_func)(void) = security_getenforce; static int last_policyload = 0; static struct selabel_handle *label_hnd = NULL; +static bool have_status_page = false; #define log_enforcing(...) \ log_full(mac_selinux_enforcing() ? LOG_ERR : LOG_WARNING, __VA_ARGS__) @@ -70,11 +70,19 @@ bool mac_selinux_use(void) { } bool mac_selinux_enforcing(void) { + int r = 0; #if HAVE_SELINUX - return enforcing_status_func() != 0; -#else - return false; + + /* If the SELinux status page has been successfully opened, retrieve the enforcing + * status over it to avoid system calls in security_getenforce(). */ + + if (have_status_page) + r = selinux_status_getenforce(); + else + r = security_getenforce(); + #endif + return r != 0; } void mac_selinux_retest(void) { @@ -142,7 +150,6 @@ static int open_label_db(void) { int mac_selinux_init(void) { #if HAVE_SELINUX int r; - bool have_status_page = false; if (initialized) return 0; @@ -170,11 +177,6 @@ int mac_selinux_init(void) { * first call without any actual change. */ last_policyload = selinux_status_policyload(); - if (have_status_page) - /* Now that the SELinux status page has been successfully opened, retrieve the enforcing - * status over it (to avoid system calls in security_getenforce()). */ - enforcing_status_func = selinux_status_getenforce; - initialized = true; #endif return 0; @@ -215,9 +217,8 @@ void mac_selinux_finish(void) { label_hnd = NULL; } - enforcing_status_func = security_getenforce; - selinux_status_close(); + have_status_page = false; initialized = false; #endif diff --git a/src/basic/selinux-util.h b/src/shared/selinux-util.h similarity index 100% rename from src/basic/selinux-util.h rename to src/shared/selinux-util.h diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c index 645b7e242..dbaecb3a0 100644 --- a/src/shared/sleep-config.c +++ b/src/shared/sleep-config.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include "parse-util.h" #include "path-util.h" #include "sleep-config.h" +#include "stat-util.h" #include "stdio-util.h" #include "string-table.h" #include "string-util.h" @@ -232,7 +234,7 @@ static int calculate_swap_file_offset(const SwapEntry *swap, uint64_t *ret_offse _cleanup_close_ int fd = -1; _cleanup_free_ struct fiemap *fiemap = NULL; struct stat sb; - int r, btrfs; + int r; assert(swap); assert(swap->device); @@ -245,10 +247,10 @@ static int calculate_swap_file_offset(const SwapEntry *swap, uint64_t *ret_offse if (fstat(fd, &sb) < 0) return log_debug_errno(errno, "Failed to stat %s: %m", swap->device); - btrfs = btrfs_is_filesystem(fd); - if (btrfs < 0) - return log_debug_errno(btrfs, "Error checking %s for Btrfs filesystem: %m", swap->device); - if (btrfs > 0) { + r = fd_is_fs_type(fd, BTRFS_SUPER_MAGIC); + if (r < 0) + return log_debug_errno(r, "Error checking %s for Btrfs filesystem: %m", swap->device); + if (r > 0) { log_debug("%s: detection of swap file offset on Btrfs is not supported", swap->device); *ret_offset = UINT64_MAX; return 0; diff --git a/src/basic/smack-util.c b/src/shared/smack-util.c similarity index 100% rename from src/basic/smack-util.c rename to src/shared/smack-util.c diff --git a/src/basic/smack-util.h b/src/shared/smack-util.h similarity index 100% rename from src/basic/smack-util.h rename to src/shared/smack-util.h diff --git a/src/basic/socket-label.c b/src/shared/socket-label.c similarity index 100% rename from src/basic/socket-label.c rename to src/shared/socket-label.c diff --git a/src/shared/specifier.c b/src/shared/specifier.c index 1712c1c29..cb4d6daf6 100644 --- a/src/shared/specifier.c +++ b/src/shared/specifier.c @@ -10,9 +10,11 @@ #include "alloc-util.h" #include "architecture.h" +#include "fd-util.h" #include "format-util.h" #include "fs-util.h" #include "hostname-util.h" +#include "id128-util.h" #include "macro.h" #include "os-util.h" #include "specifier.h" @@ -29,7 +31,7 @@ * and "%" used for escaping. */ #define POSSIBLE_SPECIFIERS ALPHANUMERICAL "%" -int specifier_printf(const char *text, size_t max_length, const Specifier table[], const void *userdata, char **ret) { +int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret) { _cleanup_free_ char *result = NULL; bool percent = false; const char *f; @@ -60,7 +62,7 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ _cleanup_free_ char *w = NULL; size_t k, j; - r = i->lookup(i->specifier, i->data, userdata, &w); + r = i->lookup(i->specifier, i->data, root, userdata, &w); if (r < 0) return r; @@ -104,7 +106,7 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ /* Generic handler for simple string replacements */ -int specifier_string(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *n; n = strdup(strempty(data)); @@ -115,12 +117,21 @@ int specifier_string(char specifier, const void *data, const void *userdata, cha return 0; } -int specifier_machine_id(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { sd_id128_t id; char *n; int r; - r = sd_id128_get_machine(&id); + if (root) { + _cleanup_close_ int fd = -1; + + fd = chase_symlinks_and_open("/etc/machine-id", root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL); + if (fd < 0) + return fd; + + r = id128_read_fd(fd, ID128_PLAIN, &id); + } else + r = sd_id128_get_machine(&id); if (r < 0) return r; @@ -132,7 +143,7 @@ int specifier_machine_id(char specifier, const void *data, const void *userdata, return 0; } -int specifier_boot_id(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { sd_id128_t id; char *n; int r; @@ -149,7 +160,7 @@ int specifier_boot_id(char specifier, const void *data, const void *userdata, ch return 0; } -int specifier_host_name(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *n; n = gethostname_malloc(); @@ -160,7 +171,7 @@ int specifier_host_name(char specifier, const void *data, const void *userdata, return 0; } -int specifier_short_host_name(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_short_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *n; n = gethostname_short_malloc(); @@ -171,7 +182,7 @@ int specifier_short_host_name(char specifier, const void *data, const void *user return 0; } -int specifier_kernel_release(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret) { struct utsname uts; char *n; int r; @@ -188,7 +199,7 @@ int specifier_kernel_release(char specifier, const void *data, const void *userd return 0; } -int specifier_architecture(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_architecture(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *t; t = strdup(architecture_to_string(uname_architecture())); @@ -199,11 +210,11 @@ int specifier_architecture(char specifier, const void *data, const void *userdat return 0; } -static int specifier_os_release_common(const char *field, char **ret) { +static int specifier_os_release_common(const char *field, const char *root, char **ret) { char *t = NULL; int r; - r = parse_os_release(NULL, field, &t); + r = parse_os_release(root, field, &t); if (r < 0) return r; if (!t) { @@ -218,31 +229,31 @@ static int specifier_os_release_common(const char *field, char **ret) { return 0; } -int specifier_os_id(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("ID", ret); +int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("ID", root, ret); } -int specifier_os_version_id(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("VERSION_ID", ret); +int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("VERSION_ID", root, ret); } -int specifier_os_build_id(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("BUILD_ID", ret); +int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("BUILD_ID", root, ret); } -int specifier_os_variant_id(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("VARIANT_ID", ret); +int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("VARIANT_ID", root, ret); } -int specifier_os_image_id(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("IMAGE_ID", ret); +int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("IMAGE_ID", root, ret); } -int specifier_os_image_version(char specifier, const void *data, const void *userdata, char **ret) { - return specifier_os_release_common("IMAGE_VERSION", ret); +int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return specifier_os_release_common("IMAGE_VERSION", root, ret); } -int specifier_group_name(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *t; t = gid_to_name(getgid()); @@ -253,14 +264,14 @@ int specifier_group_name(char specifier, const void *data, const void *userdata, return 0; } -int specifier_group_id(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { if (asprintf(ret, UID_FMT, getgid()) < 0) return -ENOMEM; return 0; } -int specifier_user_name(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { char *t; /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want to be able @@ -278,7 +289,7 @@ int specifier_user_name(char specifier, const void *data, const void *userdata, return 0; } -int specifier_user_id(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { if (asprintf(ret, UID_FMT, getuid()) < 0) return -ENOMEM; @@ -286,7 +297,7 @@ int specifier_user_id(char specifier, const void *data, const void *userdata, ch return 0; } -int specifier_user_home(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_user_home(char specifier, const void *data, const char *root, const void *userdata, char **ret) { /* On PID 1 (which runs as root) this will not result in NSS, * which is good. See above */ @@ -294,7 +305,7 @@ int specifier_user_home(char specifier, const void *data, const void *userdata, return get_home_dir(ret); } -int specifier_user_shell(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_user_shell(char specifier, const void *data, const char *root, const void *userdata, char **ret) { /* On PID 1 (which runs as root) this will not result in NSS, * which is good. See above */ @@ -302,15 +313,18 @@ int specifier_user_shell(char specifier, const void *data, const void *userdata, return get_shell(ret); } -int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_tmp_dir(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const char *p; char *copy; int r; - r = tmp_dir(&p); - if (r < 0) - return r; - + if (root) /* If root dir is set, don't honour $TMP or similar */ + p = "/tmp"; + else { + r = tmp_dir(&p); + if (r < 0) + return r; + } copy = strdup(p); if (!copy) return -ENOMEM; @@ -319,15 +333,18 @@ int specifier_tmp_dir(char specifier, const void *data, const void *userdata, ch return 0; } -int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret) { +int specifier_var_tmp_dir(char specifier, const void *data, const char *root, const void *userdata, char **ret) { const char *p; char *copy; int r; - r = var_tmp_dir(&p); - if (r < 0) - return r; - + if (root) + p = "/var/tmp"; + else { + r = var_tmp_dir(&p); + if (r < 0) + return r; + } copy = strdup(p); if (!copy) return -ENOMEM; diff --git a/src/shared/specifier.h b/src/shared/specifier.h index 839515da4..c433ee2d6 100644 --- a/src/shared/specifier.h +++ b/src/shared/specifier.h @@ -3,7 +3,7 @@ #include "string-util.h" -typedef int (*SpecifierCallback)(char specifier, const void *data, const void *userdata, char **ret); +typedef int (*SpecifierCallback)(char specifier, const void *data, const char *root, const void *userdata, char **ret); typedef struct Specifier { const char specifier; @@ -11,32 +11,32 @@ typedef struct Specifier { const void *data; } Specifier; -int specifier_printf(const char *text, size_t max_length, const Specifier table[], const void *userdata, char **ret); +int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret); -int specifier_string(char specifier, const void *data, const void *userdata, char **ret); +int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret); -int specifier_machine_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_boot_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_host_name(char specifier, const void *data, const void *userdata, char **ret); -int specifier_short_host_name(char specifier, const void *data, const void *userdata, char **ret); -int specifier_kernel_release(char specifier, const void *data, const void *userdata, char **ret); -int specifier_architecture(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_version_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_build_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_variant_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_image_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_os_image_version(char specifier, const void *data, const void *userdata, char **ret); +int specifier_machine_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_short_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_architecture(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret); -int specifier_group_name(char specifier, const void *data, const void *userdata, char **ret); -int specifier_group_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_user_name(char specifier, const void *data, const void *userdata, char **ret); -int specifier_user_id(char specifier, const void *data, const void *userdata, char **ret); -int specifier_user_home(char specifier, const void *data, const void *userdata, char **ret); -int specifier_user_shell(char specifier, const void *data, const void *userdata, char **ret); +int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_user_home(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_user_shell(char specifier, const void *data, const char *root, const void *userdata, char **ret); -int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); -int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); +int specifier_tmp_dir(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_var_tmp_dir(char specifier, const void *data, const char *root, const void *userdata, char **ret); /* Typically, in places where one of the above specifier is to be resolved the other similar ones are to be * resolved, too. Hence let's define common macros for the relevant array entries. diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c index b2540c62f..df6d2eef5 100644 --- a/src/shared/tpm2-util.c +++ b/src/shared/tpm2-util.c @@ -42,84 +42,38 @@ TSS2_RC (*sym_Tss2_MU_TPM2B_PUBLIC_Marshal)(TPM2B_PUBLIC const *src, uint8_t buf TSS2_RC (*sym_Tss2_MU_TPM2B_PUBLIC_Unmarshal)(uint8_t const buffer[], size_t buffer_size, size_t *offset, TPM2B_PUBLIC *dest) = NULL; int dlopen_tpm2(void) { - int r, k = 0; + int r; - if (!libtss2_esys_dl) { - _cleanup_(dlclosep) void *dl = NULL; + r = dlopen_many_sym_or_warn( + &libtss2_esys_dl, "libtss2-esys.so.0", LOG_DEBUG, + DLSYM_ARG(Esys_Create), + DLSYM_ARG(Esys_CreatePrimary), + DLSYM_ARG(Esys_Finalize), + DLSYM_ARG(Esys_FlushContext), + DLSYM_ARG(Esys_Free), + DLSYM_ARG(Esys_GetRandom), + DLSYM_ARG(Esys_Initialize), + DLSYM_ARG(Esys_Load), + DLSYM_ARG(Esys_PolicyGetDigest), + DLSYM_ARG(Esys_PolicyPCR), + DLSYM_ARG(Esys_StartAuthSession), + DLSYM_ARG(Esys_Startup), + DLSYM_ARG(Esys_Unseal)); + if (r < 0) + return r; - dl = dlopen("libtss2-esys.so.0", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "TPM2 support is not installed: %s", dlerror()); + r = dlopen_many_sym_or_warn( + &libtss2_rc_dl, "libtss2-rc.so.0", LOG_DEBUG, + DLSYM_ARG(Tss2_RC_Decode)); + if (r < 0) + return r; - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, - DLSYM_ARG(Esys_Create), - DLSYM_ARG(Esys_CreatePrimary), - DLSYM_ARG(Esys_Finalize), - DLSYM_ARG(Esys_FlushContext), - DLSYM_ARG(Esys_Free), - DLSYM_ARG(Esys_GetRandom), - DLSYM_ARG(Esys_Initialize), - DLSYM_ARG(Esys_Load), - DLSYM_ARG(Esys_PolicyGetDigest), - DLSYM_ARG(Esys_PolicyPCR), - DLSYM_ARG(Esys_StartAuthSession), - DLSYM_ARG(Esys_Startup), - DLSYM_ARG(Esys_Unseal), - NULL); - if (r < 0) - return r; - - libtss2_esys_dl = TAKE_PTR(dl); - k++; - } - - if (!libtss2_rc_dl) { - _cleanup_(dlclosep) void *dl = NULL; - - dl = dlopen("libtss2-rc.so.0", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "TPM2 support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, - DLSYM_ARG(Tss2_RC_Decode), - NULL); - if (r < 0) - return r; - - libtss2_rc_dl = TAKE_PTR(dl); - k++; - } - - if (!libtss2_mu_dl) { - _cleanup_(dlclosep) void *dl = NULL; - - dl = dlopen("libtss2-mu.so.0", RTLD_LAZY); - if (!dl) - return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), - "TPM2 support is not installed: %s", dlerror()); - - r = dlsym_many_and_warn( - dl, - LOG_DEBUG, - DLSYM_ARG(Tss2_MU_TPM2B_PRIVATE_Marshal), - DLSYM_ARG(Tss2_MU_TPM2B_PRIVATE_Unmarshal), - DLSYM_ARG(Tss2_MU_TPM2B_PUBLIC_Marshal), - DLSYM_ARG(Tss2_MU_TPM2B_PUBLIC_Unmarshal), - NULL); - if (r < 0) - return r; - - libtss2_mu_dl = TAKE_PTR(dl); - k++; - } - - return k; + return dlopen_many_sym_or_warn( + &libtss2_mu_dl, "libtss2-mu.so.0", LOG_DEBUG, + DLSYM_ARG(Tss2_MU_TPM2B_PRIVATE_Marshal), + DLSYM_ARG(Tss2_MU_TPM2B_PRIVATE_Unmarshal), + DLSYM_ARG(Tss2_MU_TPM2B_PUBLIC_Marshal), + DLSYM_ARG(Tss2_MU_TPM2B_PUBLIC_Unmarshal)); } struct tpm2_context { diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c index 06aede9d3..f934fc157 100644 --- a/src/shared/udev-util.c +++ b/src/shared/udev-util.c @@ -18,6 +18,7 @@ #include "parse-util.h" #include "path-util.h" #include "signal-util.h" +#include "socket-util.h" #include "string-table.h" #include "string-util.h" #include "strxcpyx.h" @@ -436,6 +437,22 @@ size_t udev_replace_whitespace(const char *str, char *to, size_t len) { return j; } +size_t udev_replace_ifname(char *str) { + size_t replaced = 0; + + assert(str); + + /* See ifname_valid_full(). */ + + for (char *p = str; *p != '\0'; p++) + if (!ifname_valid_char(*p)) { + *p = '_'; + replaced++; + } + + return replaced; +} + size_t udev_replace_chars(char *str, const char *allow) { size_t i = 0, replaced = 0; diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h index d1c33b86a..276686da8 100644 --- a/src/shared/udev-util.h +++ b/src/shared/udev-util.h @@ -46,6 +46,7 @@ void log_device_uevent(sd_device *device, const char *str); int udev_rule_parse_value(char *str, char **ret_value, char **ret_endpos); size_t udev_replace_whitespace(const char *str, char *to, size_t len); +size_t udev_replace_ifname(char *str); size_t udev_replace_chars(char *str, const char *allow); int udev_resolve_subsys_kernel(const char *string, char *result, size_t maxsize, bool read_value); diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 4131a26c1..6472d73cf 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1509,7 +1509,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { name = mfree(name); if (name) { - r = specifier_printf(name, NAME_MAX, system_and_tmp_specifier_table, NULL, &resolved_name); + r = specifier_printf(name, NAME_MAX, system_and_tmp_specifier_table, arg_root, NULL, &resolved_name); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, name); @@ -1524,7 +1524,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { id = mfree(id); if (id) { - r = specifier_printf(id, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_id); + r = specifier_printf(id, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_id); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, name); @@ -1535,7 +1535,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { description = mfree(description); if (description) { - r = specifier_printf(description, LONG_LINE_MAX, system_and_tmp_specifier_table, NULL, &resolved_description); + r = specifier_printf(description, LONG_LINE_MAX, system_and_tmp_specifier_table, arg_root, NULL, &resolved_description); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, description); @@ -1551,7 +1551,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { home = mfree(home); if (home) { - r = specifier_printf(home, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_home); + r = specifier_printf(home, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_home); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, home); @@ -1567,7 +1567,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { shell = mfree(shell); if (shell) { - r = specifier_printf(shell, PATH_MAX-1, system_and_tmp_specifier_table, NULL, &resolved_shell); + r = specifier_printf(shell, PATH_MAX-1, system_and_tmp_specifier_table, arg_root, NULL, &resolved_shell); if (r < 0) return log_error_errno(r, "[%s:%u] Failed to replace specifiers in '%s': %m", fname, line, shell); diff --git a/src/test/meson.build b/src/test/meson.build index 29f488f4d..499969780 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -146,6 +146,8 @@ tests += [ [['src/test/test-utf8.c']], + [['src/test/test-blockdev-util.c']], + [['src/test/test-dev-setup.c']], [['src/test/test-capability.c'], @@ -159,6 +161,8 @@ tests += [ [['src/test/test-copy.c']], + [['src/test/test-data-fd-util.c']], + [['src/test/test-static-destruct.c']], [['src/test/test-sigbus.c']], @@ -366,6 +370,8 @@ tests += [ [], [threads]], + [['src/test/test-hash-funcs.c']], + [['src/test/test-bitmap.c']], [['src/test/test-xml.c']], diff --git a/src/test/test-blockdev-util.c b/src/test/test-blockdev-util.c new file mode 100644 index 000000000..ab5169c43 --- /dev/null +++ b/src/test/test-blockdev-util.c @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "blockdev-util.h" +#include "errno-util.h" +#include "tests.h" + +static void test_path_is_encrypted_one(const char *p, int expect) { + int r; + + r = path_is_encrypted(p); + if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r)) /* This might fail, if btrfs is used and we run in a + * container. In that case we cannot resolve the device node paths that + * BTRFS_IOC_DEV_INFO returns, because the device nodes are unlikely to exist in + * the container. But if we can't stat() them we cannot determine the dev_t of + * them, and thus cannot figure out if they are enrypted. Hence let's just ignore + * ENOENT here. Also skip the test if we lack privileges. */ + return; + assert_se(r >= 0); + + log_info("%s encrypted: %s", p, yes_no(r)); + + assert_se(expect < 0 || ((r > 0) == (expect > 0))); +} + +static void test_path_is_encrypted(void) { + int booted = sd_booted(); /* If this is run in build environments such as koji, /dev might be a + * reguar fs. Don't assume too much if not running under systemd. */ + + log_info("/* %s (sd_booted=%d) */", __func__, booted); + + test_path_is_encrypted_one("/home", -1); + test_path_is_encrypted_one("/var", -1); + test_path_is_encrypted_one("/", -1); + test_path_is_encrypted_one("/proc", false); + test_path_is_encrypted_one("/sys", false); + test_path_is_encrypted_one("/dev", booted > 0 ? false : -1); +} + +int main(int argc, char **argv) { + test_setup_logging(LOG_INFO); + + test_path_is_encrypted(); +} diff --git a/src/test/test-condition.c b/src/test/test-condition.c index adba383fd..d1dee22bd 100644 --- a/src/test/test-condition.c +++ b/src/test/test-condition.c @@ -23,6 +23,7 @@ #include "log.h" #include "macro.h" #include "nulstr-util.h" +#include "os-util.h" #include "process-util.h" #include "selinux-util.h" #include "set.h" @@ -890,6 +891,150 @@ static void test_condition_test_environment(void) { test_condition_test_environment_one("EXISTINGENVVAR=", false); } +static void test_condition_test_os_release(void) { + _cleanup_strv_free_ char **os_release_pairs = NULL; + _cleanup_free_ char *version_id = NULL; + const char *key_value_pair; + Condition *condition; + + /* Should not happen, but it's a test so we don't know the environment. */ + if (load_os_release_pairs(NULL, &os_release_pairs) < 0) + return; + if (strv_length(os_release_pairs) < 2) + return; + + condition = condition_new(CONDITION_OS_RELEASE, "_THISHOPEFULLYWONTEXIST=01234 56789", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONG FORMAT", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONG!<>=FORMAT", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONG FORMAT=", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONG =FORMAT", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONG = FORMAT", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRONGFORMAT= ", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "WRO NG=FORMAT", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == -EINVAL); + condition_free(condition); + + condition = condition_new(CONDITION_OS_RELEASE, "", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + /* load_os_release_pairs() removes quotes, we have to add them back, + * otherwise we get a string: "PRETTY_NAME=Debian GNU/Linux 10 (buster)" + * which is wrong, as the value is not quoted anymore. */ + const char *quote = strchr(os_release_pairs[1], ' ') ? "\"" : ""; + key_value_pair = strjoina(os_release_pairs[0], "=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina(os_release_pairs[0], "!=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + /* Some distros (eg: Arch) do not set VERSION_ID */ + if (parse_os_release(NULL, "VERSION_ID", &version_id) <= 0) + return; + + key_value_pair = strjoina("VERSION_ID", "=", version_id); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "!=", version_id); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "<=", version_id); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", ">=", version_id); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "<", version_id, ".1"); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", ">", version_id, ".1"); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "=", version_id, " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "!=", version_id, " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "=", version_id, " ", os_release_pairs[0], "!=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "!=", version_id, " ", os_release_pairs[0], "!=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + key_value_pair = strjoina("VERSION_ID", "<", version_id, ".1", " ", os_release_pairs[0], "=", quote, os_release_pairs[1], quote); + condition = condition_new(CONDITION_OS_RELEASE, key_value_pair, false, false); + assert_se(condition); + assert_se(condition_test(condition, environ)); + condition_free(condition); +} + int main(int argc, char *argv[]) { test_setup_logging(LOG_DEBUG); @@ -912,6 +1057,7 @@ int main(int argc, char *argv[]) { #if defined(__i386__) || defined(__x86_64__) test_condition_test_cpufeature(); #endif + test_condition_test_os_release(); return 0; } diff --git a/src/test/test-data-fd-util.c b/src/test/test-data-fd-util.c new file mode 100644 index 000000000..22a57b515 --- /dev/null +++ b/src/test/test-data-fd-util.c @@ -0,0 +1,154 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include +#include + +#include "data-fd-util.h" +#include "fd-util.h" +#include "memory-util.h" +#include "process-util.h" +#include "tests.h" +#include "random-util.h" + +static void test_acquire_data_fd_one(unsigned flags) { + char wbuffer[196*1024 - 7]; + char rbuffer[sizeof(wbuffer)]; + int fd; + + fd = acquire_data_fd("foo", 3, flags); + assert_se(fd >= 0); + + zero(rbuffer); + assert_se(read(fd, rbuffer, sizeof(rbuffer)) == 3); + assert_se(streq(rbuffer, "foo")); + + fd = safe_close(fd); + + fd = acquire_data_fd("", 0, flags); + assert_se(fd >= 0); + + zero(rbuffer); + assert_se(read(fd, rbuffer, sizeof(rbuffer)) == 0); + assert_se(streq(rbuffer, "")); + + fd = safe_close(fd); + + random_bytes(wbuffer, sizeof(wbuffer)); + + fd = acquire_data_fd(wbuffer, sizeof(wbuffer), flags); + assert_se(fd >= 0); + + zero(rbuffer); + assert_se(read(fd, rbuffer, sizeof(rbuffer)) == sizeof(rbuffer)); + assert_se(memcmp(rbuffer, wbuffer, sizeof(rbuffer)) == 0); + + fd = safe_close(fd); +} + +static void test_acquire_data_fd(void) { + test_acquire_data_fd_one(0); + test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL); + test_acquire_data_fd_one(ACQUIRE_NO_MEMFD); + test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD); + test_acquire_data_fd_one(ACQUIRE_NO_PIPE); + test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_PIPE); + test_acquire_data_fd_one(ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE); + test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE); + test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE|ACQUIRE_NO_TMPFILE); +} + +static void assert_equal_fd(int fd1, int fd2) { + for (;;) { + uint8_t a[4096], b[4096]; + ssize_t x, y; + + x = read(fd1, a, sizeof(a)); + assert_se(x >= 0); + + y = read(fd2, b, sizeof(b)); + assert_se(y >= 0); + + assert_se(x == y); + + if (x == 0) + break; + + assert_se(memcmp(a, b, x) == 0); + } +} + +static void test_copy_data_fd(void) { + _cleanup_close_ int fd1 = -1, fd2 = -1; + _cleanup_(close_pairp) int sfd[2] = { -1, -1 }; + _cleanup_(sigkill_waitp) pid_t pid = -1; + int r; + + fd1 = open("/etc/fstab", O_RDONLY|O_CLOEXEC); + if (fd1 >= 0) { + + fd2 = copy_data_fd(fd1); + assert_se(fd2 >= 0); + + assert_se(lseek(fd1, 0, SEEK_SET) == 0); + assert_equal_fd(fd1, fd2); + } + + fd1 = safe_close(fd1); + fd2 = safe_close(fd2); + + fd1 = acquire_data_fd("hallo", 6, 0); + assert_se(fd1 >= 0); + + fd2 = copy_data_fd(fd1); + assert_se(fd2 >= 0); + + safe_close(fd1); + fd1 = acquire_data_fd("hallo", 6, 0); + assert_se(fd1 >= 0); + + assert_equal_fd(fd1, fd2); + + fd1 = safe_close(fd1); + fd2 = safe_close(fd2); + + assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, sfd) >= 0); + + r = safe_fork("(sd-pipe)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid); + assert_se(r >= 0); + + if (r == 0) { + /* child */ + + sfd[0] = safe_close(sfd[0]); + + for (uint64_t i = 0; i < 1536*1024 / sizeof(uint64_t); i++) + assert_se(write(sfd[1], &i, sizeof(i)) == sizeof(i)); + + sfd[1] = safe_close(sfd[1]); + + _exit(EXIT_SUCCESS); + } + + sfd[1] = safe_close(sfd[1]); + + fd2 = copy_data_fd(sfd[0]); + assert_se(fd2 >= 0); + + uint64_t j; + for (uint64_t i = 0; i < 1536*1024 / sizeof(uint64_t); i++) { + assert_se(read(fd2, &j, sizeof(j)) == sizeof(j)); + assert_se(i == j); + } + + assert_se(read(fd2, &j, sizeof(j)) == 0); +} + +int main(int argc, char *argv[]) { + test_setup_logging(LOG_DEBUG); + + test_acquire_data_fd(); + test_copy_data_fd(); + + return 0; +} diff --git a/src/test/test-extract-word.c b/src/test/test-extract-word.c index 391968463..8cf0b63a4 100644 --- a/src/test/test-extract-word.c +++ b/src/test/test-extract-word.c @@ -442,6 +442,98 @@ static void test_extract_first_word(void) { assert_se(extract_first_word(&p, &t, "=\", ", 0) > 0); assert_se(streq(t, "baldo")); free(t); + + p = original = "mode=\"1777\",size=\"10%\",nr_inodes=\"400\"k,uid=\"496,,107\"520,gi\"\"'d=49610,'\"\"7520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\""; + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "mode=\"1777\"")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "size=\"10%\"")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "nr_inodes=\"400\"k")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "uid=\"496,,107\"520")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "gi\"\"'d=49610,'\"\"7520")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_KEEP_QUOTE) > 0); + assert_se(streq(t, "context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\"")); + free(t); + + p = original = "mode=\"1777\",size=\"10%\",nr_inodes=\"400\"k,uid=\"496,,107\"520,gi\"\"'d=49610,'\"\"7520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\""; + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "mode=1777")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "size=10%")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "nr_inodes=400k")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "uid=496,,107520")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "gid=49610,7520")); + free(t); + assert_se(extract_first_word(&p, &t, ",", EXTRACT_UNQUOTE) > 0); + assert_se(streq(t, "context=system_u:object_r:svirt_sandbox_file_t:s0:c0,c1")); + free(t); + + p = "a:b"; + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS) == 1); + assert_se(streq(t, "a")); + assert_se(streq(p, ":b")); + free(t); + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS) == 1); + assert_se(streq(t, "b")); + free(t); + + p = "a>:b"; + assert_se(extract_first_word(&p, &t, ">:", EXTRACT_RETAIN_SEPARATORS) == 1); + assert_se(streq(t, "a")); + assert_se(streq(p, ">:b")); + free(t); + assert_se(extract_first_word(&p, &t, ">:", EXTRACT_RETAIN_SEPARATORS) == 1); + assert_se(streq(t, "b")); + free(t); + + p = "a>:b"; + assert_se(extract_first_word(&p, &t, ">:", EXTRACT_RETAIN_SEPARATORS|EXTRACT_DONT_COALESCE_SEPARATORS) == 1); + assert_se(streq(t, "a")); + assert_se(streq(p, ">:b")); + free(t); + assert_se(extract_first_word(&p, &t, ">:", EXTRACT_RETAIN_SEPARATORS|EXTRACT_DONT_COALESCE_SEPARATORS) == 1); + assert_se(streq(t, "")); + assert_se(streq(p, ">:b")); + free(t); + + p = "a\\:b"; + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS|EXTRACT_RETAIN_ESCAPE) == 1); + assert_se(streq(t, "a\\")); + assert_se(streq(p, ":b")); + free(t); + + p = "a\\:b"; + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS) == 1); + assert_se(streq(t, "a:b")); + assert_se(!p); + free(t); + + p = "a\\:b"; + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS|EXTRACT_UNESCAPE_SEPARATORS) == 1); + assert_se(streq(t, "a:b")); + assert_se(!p); + free(t); + + p = "a\\:a:b"; + assert_se(extract_first_word(&p, &t, ":", EXTRACT_RETAIN_SEPARATORS|EXTRACT_UNESCAPE_SEPARATORS) == 1); + assert_se(streq(t, "a:a")); + assert_se(streq(p, ":b")); + free(t); } static void test_extract_first_word_and_warn(void) { diff --git a/src/test/test-fd-util.c b/src/test/test-fd-util.c index bece89aef..1cd3bdfbb 100644 --- a/src/test/test-fd-util.c +++ b/src/test/test-fd-util.c @@ -4,6 +4,7 @@ #include #include "alloc-util.h" +#include "data-fd-util.h" #include "fd-util.h" #include "fileio.h" #include "macro.h" @@ -95,54 +96,6 @@ static void test_open_serialization_fd(void) { assert_se(write(fd, "test\n", 5) == 5); } -static void test_acquire_data_fd_one(unsigned flags) { - char wbuffer[196*1024 - 7]; - char rbuffer[sizeof(wbuffer)]; - int fd; - - fd = acquire_data_fd("foo", 3, flags); - assert_se(fd >= 0); - - zero(rbuffer); - assert_se(read(fd, rbuffer, sizeof(rbuffer)) == 3); - assert_se(streq(rbuffer, "foo")); - - fd = safe_close(fd); - - fd = acquire_data_fd("", 0, flags); - assert_se(fd >= 0); - - zero(rbuffer); - assert_se(read(fd, rbuffer, sizeof(rbuffer)) == 0); - assert_se(streq(rbuffer, "")); - - fd = safe_close(fd); - - random_bytes(wbuffer, sizeof(wbuffer)); - - fd = acquire_data_fd(wbuffer, sizeof(wbuffer), flags); - assert_se(fd >= 0); - - zero(rbuffer); - assert_se(read(fd, rbuffer, sizeof(rbuffer)) == sizeof(rbuffer)); - assert_se(memcmp(rbuffer, wbuffer, sizeof(rbuffer)) == 0); - - fd = safe_close(fd); -} - -static void test_acquire_data_fd(void) { - - test_acquire_data_fd_one(0); - test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL); - test_acquire_data_fd_one(ACQUIRE_NO_MEMFD); - test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD); - test_acquire_data_fd_one(ACQUIRE_NO_PIPE); - test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_PIPE); - test_acquire_data_fd_one(ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE); - test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE); - test_acquire_data_fd_one(ACQUIRE_NO_DEV_NULL|ACQUIRE_NO_MEMFD|ACQUIRE_NO_PIPE|ACQUIRE_NO_TMPFILE); -} - static void test_fd_move_above_stdio(void) { int original_stdin, new_fd; @@ -227,93 +180,6 @@ static void test_rearrange_stdio(void) { } } -static void assert_equal_fd(int fd1, int fd2) { - - for (;;) { - uint8_t a[4096], b[4096]; - ssize_t x, y; - - x = read(fd1, a, sizeof(a)); - assert_se(x >= 0); - - y = read(fd2, b, sizeof(b)); - assert_se(y >= 0); - - assert_se(x == y); - - if (x == 0) - break; - - assert_se(memcmp(a, b, x) == 0); - } -} - -static void test_fd_duplicate_data_fd(void) { - _cleanup_close_ int fd1 = -1, fd2 = -1; - _cleanup_(close_pairp) int sfd[2] = { -1, -1 }; - _cleanup_(sigkill_waitp) pid_t pid = -1; - uint64_t i, j; - int r; - - fd1 = open("/etc/fstab", O_RDONLY|O_CLOEXEC); - if (fd1 >= 0) { - - fd2 = fd_duplicate_data_fd(fd1); - assert_se(fd2 >= 0); - - assert_se(lseek(fd1, 0, SEEK_SET) == 0); - assert_equal_fd(fd1, fd2); - } - - fd1 = safe_close(fd1); - fd2 = safe_close(fd2); - - fd1 = acquire_data_fd("hallo", 6, 0); - assert_se(fd1 >= 0); - - fd2 = fd_duplicate_data_fd(fd1); - assert_se(fd2 >= 0); - - safe_close(fd1); - fd1 = acquire_data_fd("hallo", 6, 0); - assert_se(fd1 >= 0); - - assert_equal_fd(fd1, fd2); - - fd1 = safe_close(fd1); - fd2 = safe_close(fd2); - - assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, sfd) >= 0); - - r = safe_fork("(sd-pipe)", FORK_RESET_SIGNALS|FORK_DEATHSIG|FORK_LOG, &pid); - assert_se(r >= 0); - - if (r == 0) { - /* child */ - - sfd[0] = safe_close(sfd[0]); - - for (i = 0; i < 1536*1024 / sizeof(uint64_t); i++) - assert_se(write(sfd[1], &i, sizeof(i)) == sizeof(i)); - - sfd[1] = safe_close(sfd[1]); - - _exit(EXIT_SUCCESS); - } - - sfd[1] = safe_close(sfd[1]); - - fd2 = fd_duplicate_data_fd(sfd[0]); - assert_se(fd2 >= 0); - - for (i = 0; i < 1536*1024 / sizeof(uint64_t); i++) { - assert_se(read(fd2, &j, sizeof(j)) == sizeof(j)); - assert_se(i == j); - } - - assert_se(read(fd2, &j, sizeof(j)) == 0); -} - static void test_read_nr_open(void) { log_info("nr-open: %i", read_nr_open()); } @@ -420,10 +286,8 @@ int main(int argc, char *argv[]) { test_close_nointr(); test_same_fd(); test_open_serialization_fd(); - test_acquire_data_fd(); test_fd_move_above_stdio(); test_rearrange_stdio(); - test_fd_duplicate_data_fd(); test_read_nr_open(); test_close_all_fds(); diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c index a0f91c35d..08bebcf0e 100644 --- a/src/test/test-fs-util.c +++ b/src/test/test-fs-util.c @@ -805,38 +805,6 @@ static void test_chmod_and_chown(void) { assert_se(S_ISLNK(st.st_mode)); } -static void test_path_is_encrypted_one(const char *p, int expect) { - int r; - - r = path_is_encrypted(p); - if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r)) /* This might fail, if btrfs is used and we run in a - * container. In that case we cannot resolve the device node paths that - * BTRFS_IOC_DEV_INFO returns, because the device nodes are unlikely to exist in - * the container. But if we can't stat() them we cannot determine the dev_t of - * them, and thus cannot figure out if they are enrypted. Hence let's just ignore - * ENOENT here. Also skip the test if we lack privileges. */ - return; - assert_se(r >= 0); - - log_info("%s encrypted: %s", p, yes_no(r)); - - assert_se(expect < 0 || ((r > 0) == (expect > 0))); -} - -static void test_path_is_encrypted(void) { - int booted = sd_booted(); /* If this is run in build environments such as koji, /dev might be a - * reguar fs. Don't assume too much if not running under systemd. */ - - log_info("/* %s (sd_booted=%d) */", __func__, booted); - - test_path_is_encrypted_one("/home", -1); - test_path_is_encrypted_one("/var", -1); - test_path_is_encrypted_one("/", -1); - test_path_is_encrypted_one("/proc", false); - test_path_is_encrypted_one("/sys", false); - test_path_is_encrypted_one("/dev", booted > 0 ? false : -1); -} - static void create_binary_file(const char *p, const void *data, size_t l) { _cleanup_close_ int fd = -1; @@ -914,7 +882,6 @@ int main(int argc, char *argv[]) { test_fsync_directory_of_file(); test_rename_noreplace(); test_chmod_and_chown(); - test_path_is_encrypted(); test_conservative_rename(); return 0; diff --git a/src/test/test-hash-funcs.c b/src/test/test-hash-funcs.c new file mode 100644 index 000000000..db68e3a1e --- /dev/null +++ b/src/test/test-hash-funcs.c @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "tests.h" +#include "hash-funcs.h" +#include "set.h" + +static void test_path_hash_set(void) { + /* The goal is to make sure that non-simplified path are hashed as expected, + * and that we don't need to simplify them beforehand. */ + + log_info("/* %s */", __func__); + + /* No freeing of keys, we operate on static strings here… */ + _cleanup_set_free_ Set *set = NULL; + + assert_se(set_isempty(set)); + assert_se(set_ensure_put(&set, &path_hash_ops, "foo") == 1); + assert_se(set_ensure_put(&set, &path_hash_ops, "foo") == 0); + assert_se(set_ensure_put(&set, &path_hash_ops, "bar") == 1); + assert_se(set_ensure_put(&set, &path_hash_ops, "bar") == 0); + assert_se(set_ensure_put(&set, &path_hash_ops, "/foo") == 1); + assert_se(set_ensure_put(&set, &path_hash_ops, "/bar") == 1); + assert_se(set_ensure_put(&set, &path_hash_ops, "/foo/.") == 0); + assert_se(set_ensure_put(&set, &path_hash_ops, "/./bar/./.") == 0); + + assert_se(set_contains(set, "foo")); + assert_se(set_contains(set, "bar")); + assert_se(set_contains(set, "./foo")); + assert_se(set_contains(set, "./foo/.")); + assert_se(set_contains(set, "./bar")); + assert_se(set_contains(set, "./bar/.")); + assert_se(set_contains(set, "/foo")); + assert_se(set_contains(set, "/bar")); + assert_se(set_contains(set, "//./foo")); + assert_se(set_contains(set, "///./foo/.")); + assert_se(set_contains(set, "////./bar")); + assert_se(set_contains(set, "/////./bar/.")); + + assert_se(set_contains(set, "foo/")); + assert_se(set_contains(set, "bar/")); + assert_se(set_contains(set, "./foo/")); + assert_se(set_contains(set, "./foo/./")); + assert_se(set_contains(set, "./bar/")); + assert_se(set_contains(set, "./bar/./")); + assert_se(set_contains(set, "/foo/")); + assert_se(set_contains(set, "/bar/")); + assert_se(set_contains(set, "//./foo/")); + assert_se(set_contains(set, "///./foo/./")); + assert_se(set_contains(set, "////./bar/")); + assert_se(set_contains(set, "/////./bar/./")); + + assert_se(!set_contains(set, "foo.")); + assert_se(!set_contains(set, ".bar")); + assert_se(!set_contains(set, "./foo.")); + assert_se(!set_contains(set, "./.foo/.")); + assert_se(!set_contains(set, "../bar")); + assert_se(!set_contains(set, "./bar/..")); + assert_se(!set_contains(set, "./foo..")); + assert_se(!set_contains(set, "/..bar")); + assert_se(!set_contains(set, "//../foo")); + assert_se(!set_contains(set, "///../foo/.")); + assert_se(!set_contains(set, "////../bar")); + assert_se(!set_contains(set, "/////../bar/.")); + + assert_se(!set_contains(set, "foo./")); + assert_se(!set_contains(set, ".bar/")); + assert_se(!set_contains(set, "./foo./")); + assert_se(!set_contains(set, "./.foo/./")); + assert_se(!set_contains(set, "../bar/")); + assert_se(!set_contains(set, "./bar/../")); + assert_se(!set_contains(set, "./foo../")); + assert_se(!set_contains(set, "/..bar/")); + assert_se(!set_contains(set, "//../foo/")); + assert_se(!set_contains(set, "///../foo/./")); + assert_se(!set_contains(set, "////../bar/")); + assert_se(!set_contains(set, "/////../bar/./")); +} + +int main(int argc, char **argv) { + test_setup_logging(LOG_INFO); + + test_path_hash_set(); +} diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c index 50345b7b1..b41a8abf7 100644 --- a/src/test/test-load-fragment.c +++ b/src/test/test-load-fragment.c @@ -498,8 +498,8 @@ static void test_install_printf(void) { _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *gid = NULL, *group = NULL, *uid = NULL, *user = NULL; - assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); - assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); + assert_se(specifier_machine_id('m', NULL, NULL, NULL, &mid) >= 0 && mid); + assert_se(specifier_boot_id('b', NULL, NULL, NULL, &bid) >= 0 && bid); assert_se(host = gethostname_malloc()); assert_se(group = gid_to_name(getgid())); assert_se(asprintf(&gid, UID_FMT, getgid()) >= 0); @@ -512,7 +512,7 @@ static void test_install_printf(void) { _cleanup_free_ char \ *d1 = strdup(i.name), \ *d2 = strdup(i.path); \ - assert_se(install_name_printf(&src, pattern, &t) >= 0 || !result); \ + assert_se(install_name_printf(&src, pattern, NULL, &t) >= 0 || !result); \ memzero(i.name, strlen(i.name)); \ memzero(i.path, strlen(i.path)); \ assert_se(d1 && d2); \ diff --git a/src/test/test-mount-util.c b/src/test/test-mount-util.c index ab5184121..d3d004071 100644 --- a/src/test/test-mount-util.c +++ b/src/test/test-mount-util.c @@ -7,6 +7,9 @@ #include "capability-util.h" #include "fd-util.h" #include "fileio.h" +#include "fs-util.h" +#include "missing_mount.h" +#include "mkdir.h" #include "mount-util.h" #include "namespace-util.h" #include "path-util.h" @@ -21,6 +24,8 @@ static void test_mount_option_mangle(void) { char *opts = NULL; unsigned long f; + log_info("/* %s */", __func__); + assert_se(mount_option_mangle(NULL, MS_RDONLY|MS_NOSUID, &f, &opts) == 0); assert_se(f == (MS_RDONLY|MS_NOSUID)); assert_se(opts == NULL); @@ -69,6 +74,59 @@ static void test_mount_option_mangle(void) { opts = mfree(opts); assert_se(mount_option_mangle("rw,relatime,fmask=0022,dmask=0022,\"hogehoge", MS_RDONLY, &f, &opts) < 0); + + assert_se(mount_option_mangle("mode=1777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\"", 0, &f, &opts) == 0); + assert_se(f == 0); + assert_se(streq(opts, "mode=1777,size=10%,nr_inodes=400k,uid=496107520,gid=496107520,context=\"system_u:object_r:svirt_sandbox_file_t:s0:c0,c1\"")); + opts = mfree(opts); +} + +static void test_mount_flags_to_string_one(unsigned long flags, const char *expected) { + _cleanup_free_ char *x = NULL; + int r; + + r = mount_flags_to_string(flags, &x); + log_info("flags: %#lX → %d/\"%s\"", flags, r, strnull(x)); + assert_se(r >= 0); + assert_se(streq(x, expected)); +} + +static void test_mount_flags_to_string(void) { + log_info("/* %s */", __func__); + + test_mount_flags_to_string_one(0, "0"); + test_mount_flags_to_string_one(MS_RDONLY, "MS_RDONLY"); + test_mount_flags_to_string_one(MS_NOSUID, "MS_NOSUID"); + test_mount_flags_to_string_one(MS_NODEV, "MS_NODEV"); + test_mount_flags_to_string_one(MS_NOEXEC, "MS_NOEXEC"); + test_mount_flags_to_string_one(MS_SYNCHRONOUS, "MS_SYNCHRONOUS"); + test_mount_flags_to_string_one(MS_REMOUNT, "MS_REMOUNT"); + test_mount_flags_to_string_one(MS_MANDLOCK, "MS_MANDLOCK"); + test_mount_flags_to_string_one(MS_DIRSYNC, "MS_DIRSYNC"); + test_mount_flags_to_string_one(MS_NOSYMFOLLOW, "MS_NOSYMFOLLOW"); + test_mount_flags_to_string_one(MS_NOATIME, "MS_NOATIME"); + test_mount_flags_to_string_one(MS_NODIRATIME, "MS_NODIRATIME"); + test_mount_flags_to_string_one(MS_BIND, "MS_BIND"); + test_mount_flags_to_string_one(MS_MOVE, "MS_MOVE"); + test_mount_flags_to_string_one(MS_REC, "MS_REC"); + test_mount_flags_to_string_one(MS_SILENT, "MS_SILENT"); + test_mount_flags_to_string_one(MS_POSIXACL, "MS_POSIXACL"); + test_mount_flags_to_string_one(MS_UNBINDABLE, "MS_UNBINDABLE"); + test_mount_flags_to_string_one(MS_PRIVATE, "MS_PRIVATE"); + test_mount_flags_to_string_one(MS_SLAVE, "MS_SLAVE"); + test_mount_flags_to_string_one(MS_SHARED, "MS_SHARED"); + test_mount_flags_to_string_one(MS_RELATIME, "MS_RELATIME"); + test_mount_flags_to_string_one(MS_KERNMOUNT, "MS_KERNMOUNT"); + test_mount_flags_to_string_one(MS_I_VERSION, "MS_I_VERSION"); + test_mount_flags_to_string_one(MS_STRICTATIME, "MS_STRICTATIME"); + test_mount_flags_to_string_one(MS_LAZYTIME, "MS_LAZYTIME"); + test_mount_flags_to_string_one(MS_LAZYTIME|MS_STRICTATIME, "MS_STRICTATIME|MS_LAZYTIME"); + test_mount_flags_to_string_one(UINT_MAX, + "MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_SYNCHRONOUS|MS_REMOUNT|" + "MS_MANDLOCK|MS_DIRSYNC|MS_NOSYMFOLLOW|MS_NOATIME|MS_NODIRATIME|" + "MS_BIND|MS_MOVE|MS_REC|MS_SILENT|MS_POSIXACL|MS_UNBINDABLE|" + "MS_PRIVATE|MS_SLAVE|MS_SHARED|MS_RELATIME|MS_KERNMOUNT|" + "MS_I_VERSION|MS_STRICTATIME|MS_LAZYTIME|fc000200"); } static void test_bind_remount_recursive(void) { @@ -76,6 +134,8 @@ static void test_bind_remount_recursive(void) { _cleanup_free_ char *subdir = NULL; const char *p; + log_info("/* %s */", __func__); + if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) { (void) log_tests_skipped("not running privileged"); return; @@ -129,6 +189,8 @@ static void test_bind_remount_recursive(void) { static void test_bind_remount_one(void) { pid_t pid; + log_info("/* %s */", __func__); + if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) { (void) log_tests_skipped("not running privileged"); return; @@ -157,12 +219,60 @@ static void test_bind_remount_one(void) { assert_se(wait_for_terminate_and_check("test-remount-one", pid, WAIT_LOG) == EXIT_SUCCESS); } +static void test_make_mount_point_inode(void) { + _cleanup_(rm_rf_physical_and_freep) char *d = NULL; + const char *src_file, *src_dir, *dst_file, *dst_dir; + struct stat st; + + log_info("/* %s */", __func__); + + assert_se(mkdtemp_malloc(NULL, &d) >= 0); + + src_file = strjoina(d, "/src/file"); + src_dir = strjoina(d, "/src/dir"); + dst_file = strjoina(d, "/dst/file"); + dst_dir = strjoina(d, "/dst/dir"); + + assert_se(mkdir_p(src_dir, 0755) >= 0); + assert_se(mkdir_parents(dst_file, 0755) >= 0); + assert_se(touch(src_file) >= 0); + + assert_se(make_mount_point_inode_from_path(src_file, dst_file, 0755) >= 0); + assert_se(make_mount_point_inode_from_path(src_dir, dst_dir, 0755) >= 0); + + assert_se(stat(dst_dir, &st) == 0); + assert_se(S_ISDIR(st.st_mode)); + assert_se(stat(dst_file, &st) == 0); + assert_se(S_ISREG(st.st_mode)); + assert_se(!(S_IXUSR & st.st_mode)); + assert_se(!(S_IXGRP & st.st_mode)); + assert_se(!(S_IXOTH & st.st_mode)); + + assert_se(unlink(dst_file) == 0); + assert_se(rmdir(dst_dir) == 0); + + assert_se(stat(src_file, &st) == 0); + assert_se(make_mount_point_inode_from_stat(&st, dst_file, 0755) >= 0); + assert_se(stat(src_dir, &st) == 0); + assert_se(make_mount_point_inode_from_stat(&st, dst_dir, 0755) >= 0); + + assert_se(stat(dst_dir, &st) == 0); + assert_se(S_ISDIR(st.st_mode)); + assert_se(stat(dst_file, &st) == 0); + assert_se(S_ISREG(st.st_mode)); + assert_se(!(S_IXUSR & st.st_mode)); + assert_se(!(S_IXGRP & st.st_mode)); + assert_se(!(S_IXOTH & st.st_mode)); +} + int main(int argc, char *argv[]) { test_setup_logging(LOG_DEBUG); test_mount_option_mangle(); + test_mount_flags_to_string(); test_bind_remount_recursive(); test_bind_remount_one(); + test_make_mount_point_inode(); return 0; } diff --git a/src/test/test-mountpoint-util.c b/src/test/test-mountpoint-util.c index 128daa6de..983e1842d 100644 --- a/src/test/test-mountpoint-util.c +++ b/src/test/test-mountpoint-util.c @@ -8,10 +8,8 @@ #include "def.h" #include "fd-util.h" #include "fileio.h" -#include "fs-util.h" #include "hashmap.h" #include "log.h" -#include "mkdir.h" #include "mountpoint-util.h" #include "path-util.h" #include "rm-rf.h" @@ -290,52 +288,6 @@ static void test_fd_is_mount_point(void) { assert_se(IN_SET(fd_is_mount_point(fd, "root/", 0), -ENOENT, 0)); } -static void test_make_mount_point_inode(void) { - _cleanup_(rm_rf_physical_and_freep) char *d = NULL; - const char *src_file, *src_dir, *dst_file, *dst_dir; - struct stat st; - - log_info("/* %s */", __func__); - - assert_se(mkdtemp_malloc(NULL, &d) >= 0); - - src_file = strjoina(d, "/src/file"); - src_dir = strjoina(d, "/src/dir"); - dst_file = strjoina(d, "/dst/file"); - dst_dir = strjoina(d, "/dst/dir"); - - assert_se(mkdir_p(src_dir, 0755) >= 0); - assert_se(mkdir_parents(dst_file, 0755) >= 0); - assert_se(touch(src_file) >= 0); - - assert_se(make_mount_point_inode_from_path(src_file, dst_file, 0755) >= 0); - assert_se(make_mount_point_inode_from_path(src_dir, dst_dir, 0755) >= 0); - - assert_se(stat(dst_dir, &st) == 0); - assert_se(S_ISDIR(st.st_mode)); - assert_se(stat(dst_file, &st) == 0); - assert_se(S_ISREG(st.st_mode)); - assert_se(!(S_IXUSR & st.st_mode)); - assert_se(!(S_IXGRP & st.st_mode)); - assert_se(!(S_IXOTH & st.st_mode)); - - assert_se(unlink(dst_file) == 0); - assert_se(rmdir(dst_dir) == 0); - - assert_se(stat(src_file, &st) == 0); - assert_se(make_mount_point_inode_from_stat(&st, dst_file, 0755) >= 0); - assert_se(stat(src_dir, &st) == 0); - assert_se(make_mount_point_inode_from_stat(&st, dst_dir, 0755) >= 0); - - assert_se(stat(dst_dir, &st) == 0); - assert_se(S_ISDIR(st.st_mode)); - assert_se(stat(dst_file, &st) == 0); - assert_se(S_ISREG(st.st_mode)); - assert_se(!(S_IXUSR & st.st_mode)); - assert_se(!(S_IXGRP & st.st_mode)); - assert_se(!(S_IXOTH & st.st_mode)); -} - int main(int argc, char *argv[]) { test_setup_logging(LOG_DEBUG); @@ -360,7 +312,6 @@ int main(int argc, char *argv[]) { test_mnt_id(); test_path_is_mount_point(); test_fd_is_mount_point(); - test_make_mount_point_inode(); return 0; } diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c index 50aacdb96..4c041cd57 100644 --- a/src/test/test-path-util.c +++ b/src/test/test-path-util.c @@ -126,6 +126,8 @@ static void test_path_compare_one(const char *a, const char *b, int expected) { } static void test_path_compare(void) { + log_info("/* %s */", __func__); + test_path_compare_one("/goo", "/goo", 0); test_path_compare_one("/goo", "/goo", 0); test_path_compare_one("//goo", "/goo", 0); @@ -138,6 +140,12 @@ static void test_path_compare(void) { test_path_compare_one("/x", "x/", 1); test_path_compare_one("x/", "/", -1); test_path_compare_one("/x/./y", "x/y", 1); + test_path_compare_one("/x/./y", "/x/y", 0); + test_path_compare_one("/x/./././y", "/x/y/././.", 0); + test_path_compare_one("./x/./././y", "./x/y/././.", 0); + test_path_compare_one(".", "./.", 0); + test_path_compare_one(".", "././.", 0); + test_path_compare_one("./..", ".", 1); test_path_compare_one("x/.y", "x/y", -1); test_path_compare_one("foo", "/foo", -1); test_path_compare_one("/foo", "/foo/bar", -1); diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c index ca21eadab..576a9a875 100644 --- a/src/test/test-process-util.c +++ b/src/test/test-process-util.c @@ -126,8 +126,6 @@ static void test_get_process_cmdline(void) { FOREACH_DIRENT(de, d, return) { pid_t pid; - dirent_ensure_type(d, de); - if (de->d_type != DT_DIR) continue; diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c index e9d501955..853943a99 100644 --- a/src/test/test-specifier.c +++ b/src/test/test-specifier.c @@ -69,7 +69,7 @@ static void test_specifier_printf(void) { log_info("/* %s */", __func__); - r = specifier_printf("xxx a=%X b=%Y yyy", SIZE_MAX, table, NULL, &w); + r = specifier_printf("xxx a=%X b=%Y yyy", SIZE_MAX, table, NULL, NULL, &w); assert_se(r >= 0); assert_se(w); @@ -77,13 +77,13 @@ static void test_specifier_printf(void) { assert_se(streq(w, "xxx a=AAAA b=BBBB yyy")); free(w); - r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a", SIZE_MAX, table, NULL, &w); + r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a", SIZE_MAX, table, NULL, NULL, &w); assert_se(r >= 0); assert_se(w); puts(w); w = mfree(w); - specifier_printf("os=%o, os-version=%w, build=%B, variant=%W", SIZE_MAX, table, NULL, &w); + specifier_printf("os=%o, os-version=%w, build=%B, variant=%W", SIZE_MAX, table, NULL, NULL, &w); if (w) puts(w); } @@ -97,7 +97,7 @@ static void test_specifiers(void) { xsprintf(spec, "%%%c", s->specifier); - assert_se(specifier_printf(spec, SIZE_MAX, specifier_table, NULL, &resolved) >= 0); + assert_se(specifier_printf(spec, SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0); log_info("%%%c → %s", s->specifier, resolved); } diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c index cc391e81a..a40cc5231 100644 --- a/src/test/test-time-util.c +++ b/src/test/test-time-util.c @@ -360,6 +360,80 @@ static void test_format_timestamp(void) { } } +static void test_format_timestamp_relative(void) { + log_info("/* %s */", __func__); + + char buf[MAX(FORMAT_TIMESTAMP_MAX, FORMAT_TIMESPAN_MAX)]; + usec_t x; + + /* Only testing timestamps in the past so we don't need to add some delta to account for time passing + * by while we are running the tests (unless we're running on potatoes and 24 hours somehow passes + * between our call to now() and format_timestamp_relative's call to now()). */ + + /* Years and months */ + x = now(CLOCK_REALTIME) - (1*USEC_PER_YEAR + 1*USEC_PER_MONTH); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 year 1 month ago")); + + x = now(CLOCK_REALTIME) - (1*USEC_PER_YEAR + 2*USEC_PER_MONTH); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 year 2 months ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_YEAR + 1*USEC_PER_MONTH); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 years 1 month ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_YEAR + 2*USEC_PER_MONTH); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 years 2 months ago")); + + /* Months and days */ + x = now(CLOCK_REALTIME) - (1*USEC_PER_MONTH + 1*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 month 1 day ago")); + + x = now(CLOCK_REALTIME) - (1*USEC_PER_MONTH + 2*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 month 2 days ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_MONTH + 1*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 months 1 day ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_MONTH + 2*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 months 2 days ago")); + + /* Weeks and days */ + x = now(CLOCK_REALTIME) - (1*USEC_PER_WEEK + 1*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 week 1 day ago")); + + x = now(CLOCK_REALTIME) - (1*USEC_PER_WEEK + 2*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "1 week 2 days ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_WEEK + 1*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 weeks 1 day ago")); + + x = now(CLOCK_REALTIME) - (2*USEC_PER_WEEK + 2*USEC_PER_DAY); + assert_se(format_timestamp_relative(buf, sizeof(buf), x)); + log_info("%s", buf); + assert_se(streq(buf, "2 weeks 2 days ago")); +} + static void test_format_timestamp_utc_one(usec_t val, const char *result) { char buf[FORMAT_TIMESTAMP_MAX]; const char *t; @@ -539,6 +613,7 @@ int main(int argc, char *argv[]) { test_usec_sub_signed(); test_usec_sub_unsigned(); test_format_timestamp(); + test_format_timestamp_relative(); test_format_timestamp_utc(); test_deserialize_dual_timestamp(); test_usec_shift_clock(); diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c index d73704322..0077c4c5e 100644 --- a/src/test/test-unit-name.c +++ b/src/test/test-unit-name.c @@ -228,8 +228,8 @@ static int test_unit_printf(void) { log_info("/* %s */", __func__); - assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); - assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); + assert_se(specifier_machine_id('m', NULL, NULL, NULL, &mid) >= 0 && mid); + assert_se(specifier_boot_id('b', NULL, NULL, NULL, &bid) >= 0 && bid); assert_se(host = gethostname_malloc()); assert_se(user = uid_to_name(getuid())); assert_se(group = gid_to_name(getgid())); diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index 8e8be8472..9ffe78479 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -200,8 +200,8 @@ STATIC_DESTRUCTOR_REGISTER(arg_exclude_prefixes, freep); STATIC_DESTRUCTOR_REGISTER(arg_root, freep); STATIC_DESTRUCTOR_REGISTER(arg_image, freep); -static int specifier_machine_id_safe(char specifier, const void *data, const void *userdata, char **ret); -static int specifier_directory(char specifier, const void *data, const void *userdata, char **ret); +static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret); +static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret); static const Specifier specifier_table[] = { { 'a', specifier_architecture, NULL }, @@ -228,21 +228,20 @@ static const Specifier specifier_table[] = { {} }; -static int specifier_machine_id_safe(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret) { int r; - /* If /etc/machine_id is missing or empty (e.g. in a chroot environment) - * return a recognizable error so that the caller can skip the rule - * gracefully. */ + /* If /etc/machine_id is missing or empty (e.g. in a chroot environment) return a recognizable error + * so that the caller can skip the rule gracefully. */ - r = specifier_machine_id(specifier, data, userdata, ret); + r = specifier_machine_id(specifier, data, root, userdata, ret); if (IN_SET(r, -ENOENT, -ENOMEDIUM)) return -ENXIO; return r; } -static int specifier_directory(char specifier, const void *data, const void *userdata, char **ret) { +static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) { struct table_entry { uint64_t type; const char *suffix; @@ -262,8 +261,10 @@ static int specifier_directory(char specifier, const void *data, const void *use [DIRECTORY_LOGS] = { SD_PATH_USER_CONFIGURATION, "log" }, }; - unsigned i; const struct table_entry *paths; + _cleanup_free_ char *p = NULL; + unsigned i; + int r; assert_cc(ELEMENTSOF(paths_system) == ELEMENTSOF(paths_user)); paths = arg_user ? paths_user : paths_system; @@ -271,7 +272,22 @@ static int specifier_directory(char specifier, const void *data, const void *use i = PTR_TO_UINT(data); assert(i < ELEMENTSOF(paths_system)); - return sd_path_lookup(paths[i].type, paths[i].suffix, ret); + r = sd_path_lookup(paths[i].type, paths[i].suffix, &p); + if (r < 0) + return r; + + if (arg_root) { + _cleanup_free_ char *j = NULL; + + j = path_join(arg_root, p); + if (!j) + return -ENOMEM; + + *ret = TAKE_PTR(j); + } else + *ret = TAKE_PTR(p); + + return 0; } static int log_unresolvable_specifier(const char *filename, unsigned line) { @@ -2778,7 +2794,7 @@ static int specifier_expansion_from_arg(Item *i) { if (r < 0) return log_error_errno(r, "Failed to unescape parameter to write: %s", i->argument); - r = specifier_printf(unescaped, PATH_MAX-1, specifier_table, NULL, &resolved); + r = specifier_printf(unescaped, PATH_MAX-1, specifier_table, arg_root, NULL, &resolved); if (r < 0) return r; @@ -2788,7 +2804,7 @@ static int specifier_expansion_from_arg(Item *i) { case SET_XATTR: case RECURSIVE_SET_XATTR: STRV_FOREACH(xattr, i->xattrs) { - r = specifier_printf(*xattr, SIZE_MAX, specifier_table, NULL, &resolved); + r = specifier_printf(*xattr, SIZE_MAX, specifier_table, arg_root, NULL, &resolved); if (r < 0) return r; @@ -3021,7 +3037,7 @@ static int parse_line( i.allow_failure = allow_failure; i.try_replace = try_replace; - r = specifier_printf(path, PATH_MAX-1, specifier_table, NULL, &i.path); + r = specifier_printf(path, PATH_MAX-1, specifier_table, arg_root, NULL, &i.path); if (r == -ENXIO) return log_unresolvable_specifier(fname, line); if (r < 0) { diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c index 41f92b68b..b2d8154d8 100644 --- a/src/udev/scsi_id/scsi_id.c +++ b/src/udev/scsi_id/scsi_id.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -21,6 +20,7 @@ #include "extract-word.h" #include "fd-util.h" #include "fileio.h" +#include "parse-util.h" #include "scsi_id.h" #include "string-util.h" #include "strv.h" @@ -57,38 +57,34 @@ static char model_enc_str[256]; static char revision_str[16]; static char type_str[16]; -static void set_type(const char *from, char *to, size_t len) { - int type_num; - char *eptr; - const char *type = "generic"; +static void set_type(unsigned type_num, char *to, size_t len) { + const char *type; - type_num = strtoul(from, &eptr, 0); - if (eptr != from) { - switch (type_num) { - case 0: - type = "disk"; - break; - case 1: - type = "tape"; - break; - case 4: - type = "optical"; - break; - case 5: - type = "cd"; - break; - case 7: - type = "optical"; - break; - case 0xe: - type = "disk"; - break; - case 0xf: - type = "optical"; - break; - default: - break; - } + switch (type_num) { + case 0: + type = "disk"; + break; + case 1: + type = "tape"; + break; + case 4: + type = "optical"; + break; + case 5: + type = "cd"; + break; + case 7: + type = "optical"; + break; + case 0xe: + type = "disk"; + break; + case 0xf: + type = "optical"; + break; + default: + type = "generic"; + break; } strscpy(to, len, type); } diff --git a/src/udev/scsi_id/scsi_id.h b/src/udev/scsi_id/scsi_id.h index 2fe64f45f..9ab334185 100644 --- a/src/udev/scsi_id/scsi_id.h +++ b/src/udev/scsi_id/scsi_id.h @@ -29,10 +29,10 @@ struct scsi_id_device { char vendor[9]; char model[17]; char revision[5]; - char type[33]; char kernel[64]; char serial[MAX_SERIAL_LEN]; char serial_short[MAX_SERIAL_LEN]; + unsigned type; int use_sg; /* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */ diff --git a/src/udev/scsi_id/scsi_serial.c b/src/udev/scsi_id/scsi_serial.c index 4fe725477..489f5ad16 100644 --- a/src/udev/scsi_id/scsi_serial.c +++ b/src/udev/scsi_id/scsi_serial.c @@ -773,7 +773,7 @@ int scsi_std_inquiry(struct scsi_id_device *dev_scsi, const char *devname) { dev_scsi->model[16] = '\0'; memcpy(dev_scsi->revision, buf + 32, 4); dev_scsi->revision[4] = '\0'; - sprintf(dev_scsi->type,"%x", buf[0] & 0x1f); + dev_scsi->type = buf[0] & 0x1f; out: close(fd); diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index 2331525c8..dda53b6da 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include @@ -83,6 +82,7 @@ static void get_cap_mask(sd_device *pdev, const char* attr, unsigned i; char* word; unsigned long val; + int r; if (sd_device_get_sysattr_value(pdev, attr, &v) < 0) v = ""; @@ -93,16 +93,20 @@ static void get_cap_mask(sd_device *pdev, const char* attr, memzero(bitmask, bitmask_size); i = 0; while ((word = strrchr(text, ' ')) != NULL) { - val = strtoul(word+1, NULL, 16); - if (i < bitmask_size / sizeof(unsigned long)) + r = safe_atolu_full(word+1, 16, &val); + if (r < 0) + log_device_debug_errno(pdev, r, "Ignoring %s block which failed to parse: %m", attr); + else if (i < bitmask_size / sizeof(unsigned long)) bitmask[i] = val; else log_device_debug(pdev, "Ignoring %s block %lX which is larger than maximum size", attr, val); *word = '\0'; ++i; } - val = strtoul (text, NULL, 16); - if (i < bitmask_size / sizeof(unsigned long)) + r = safe_atolu_full(text, 16, &val); + if (r < 0) + log_device_debug_errno(pdev, r, "Ignoring %s block which failed to parse: %m", attr); + else if (i < bitmask_size / sizeof(unsigned long)) bitmask[i] = val; else log_device_debug(pdev, "Ignoring %s block %lX which is larger than maximum size", attr, val); diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c index cd766a8b6..e6beb1906 100644 --- a/src/udev/udev-builtin-keyboard.c +++ b/src/udev/udev-builtin-keyboard.c @@ -60,19 +60,19 @@ static int map_keycode(sd_device *dev, int fd, int scancode, const char *keycode unsigned scan; unsigned key; } map; - char *endptr; const struct key_name *k; unsigned keycode_num; + int r; /* translate identifier to key code */ k = keyboard_lookup_key(keycode, strlen(keycode)); - if (k) { + if (k) keycode_num = k->id; - } else { + else { /* check if it's a numeric code already */ - keycode_num = strtoul(keycode, &endptr, 0); - if (endptr[0] !='\0') - return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Failed to parse key identifier '%s'", keycode); + r = safe_atou(keycode, &keycode_num); + if (r < 0) + return log_device_error_errno(dev, r, "Failed to parse key identifier '%s': %m", keycode); } map.scan = scancode; @@ -170,17 +170,15 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) { if (r < 0) return log_device_error_errno(dev, r, "Failed to get device name: %m"); - FOREACH_DEVICE_PROPERTY(dev, key, value) { - char *endptr; - + FOREACH_DEVICE_PROPERTY(dev, key, value) if (startswith(key, "KEYBOARD_KEY_")) { const char *keycode = value; unsigned scancode; /* KEYBOARD_KEY_= */ - scancode = strtoul(key + 13, &endptr, 16); - if (endptr[0] != '\0') { - log_device_warning(dev, "Failed to parse scan code from \"%s\", ignoring", key); + r = safe_atou_full(key + 13, 16, &scancode); + if (r < 0) { + log_device_warning_errno(dev, r, "Failed to parse scan code from \"%s\", ignoring: %m", key); continue; } @@ -207,9 +205,9 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) { unsigned evcode; /* EVDEV_ABS_=:::: */ - evcode = strtoul(key + 10, &endptr, 16); - if (endptr[0] != '\0') { - log_device_warning(dev, "Failed to parse EV_ABS code from \"%s\", ignoring", key); + r = safe_atou_full(key + 10, 16, &evcode); + if (r < 0) { + log_device_warning_errno(dev, r, "Failed to parse EV_ABS code from \"%s\", ignoring: %m", key); continue; } @@ -238,7 +236,6 @@ static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) { (void) override_abs(dev, fd, evcode, value); } else if (streq(key, "POINTINGSTICK_SENSITIVITY")) (void) set_trackpoint_sensitivity(dev, value); - } /* install list of force-release codes */ if (release_count > 0) diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 33601151a..92917852b 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -199,8 +198,11 @@ static int dev_pci_onboard(sd_device *dev, struct netnames *names) { return -ENOENT; /* kernel provided port index for multiple ports on a single PCI function */ - if (sd_device_get_sysattr_value(dev, "dev_port", &attr) >= 0) - dev_port = strtoul(attr, NULL, 10); + if (sd_device_get_sysattr_value(dev, "dev_port", &attr) >= 0) { + r = safe_atolu_full(attr, 10, &dev_port); + if (r < 0) + log_device_debug_errno(dev, r, "Failed to parse dev_port, ignoring: %m"); + } /* kernel provided front panel port name for multiple port PCI device */ (void) sd_device_get_sysattr_value(dev, "phys_port_name", &port_name); @@ -341,7 +343,9 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) { /* kernel provided port index for multiple ports on a single PCI function */ if (sd_device_get_sysattr_value(dev, "dev_port", &attr) >= 0) { - dev_port = strtoul(attr, NULL, 10); + r = safe_atolu_full(attr, 10, &dev_port); + if (r < 0) + log_device_debug_errno(dev, r, "Failed to parse attribute dev_port, ignoring: %m"); /* With older kernels IP-over-InfiniBand network interfaces sometimes erroneously * provide the port number in the 'dev_id' sysfs attribute instead of 'dev_port', * which thus stays initialized as 0. */ @@ -349,10 +353,15 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) { sd_device_get_sysattr_value(dev, "type", &attr) >= 0) { unsigned long type; - type = strtoul(attr, NULL, 10); - if (type == ARPHRD_INFINIBAND && - sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) - dev_port = strtoul(attr, NULL, 16); + r = safe_atolu_full(attr, 10, &type); + if (r < 0) + log_device_debug_errno(dev, r, "Failed to parse attribute type, ignoring: %m"); + else if (type == ARPHRD_INFINIBAND && + sd_device_get_sysattr_value(dev, "dev_id", &attr) >= 0) { + r = safe_atolu_full(attr, 10, &dev_port); + if (r < 0) + log_device_debug_errno(dev, r, "Failed to parse attribute dev_id, ignoring: %m"); + } } } @@ -765,7 +774,9 @@ static int names_mac(sd_device *dev, struct netnames *names) { if (r < 0) return r; - i = strtoul(s, NULL, 0); + r = safe_atolu_full(s, 10, &i); + if (r < 0) + return r; switch (i) { /* The persistent part of a hardware address of an InfiniBand NIC * is 8 bytes long. We cannot fit this much in an iface name. @@ -780,7 +791,9 @@ static int names_mac(sd_device *dev, struct netnames *names) { r = sd_device_get_sysattr_value(dev, "addr_assign_type", &s); if (r < 0) return r; - i = strtoul(s, NULL, 0); + r = safe_atolu(s, &i); + if (r < 0) + return r; if (i != 0) return 0; @@ -868,7 +881,9 @@ static int builtin_net_id(sd_device *dev, int argc, char *argv[], bool test) { if (r < 0) return r; - i = strtoul(s, NULL, 0); + r = safe_atolu_full(s, 10, &i); + if (r < 0) + return r; switch (i) { case ARPHRD_ETHER: prefix = "en"; diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c index 5e7945081..65c40de4c 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -11,12 +11,12 @@ #include #include #include -#include #include #include "alloc-util.h" #include "dirent-util.h" #include "fd-util.h" +#include "parse-util.h" #include "string-util.h" #include "strv.h" #include "sysexits.h" @@ -66,7 +66,9 @@ static int format_lun_number(sd_device *dev, char **path) { if (!sysnum) return -ENOENT; - lun = strtoul(sysnum, NULL, 10); + r = safe_atolu_full(sysnum, 10, &lun); + if (r < 0) + return r; if (lun < 256) /* address method 0, peripheral device addressing with bus id of zero */ path_prepend(path, "lun-%lu", lun); @@ -344,8 +346,7 @@ static sd_device *handle_scsi_default(sd_device *parent, char **path) { return NULL; FOREACH_DIRENT_ALL(dent, dir, break) { - char *rest; - int i; + unsigned i; if (dent->d_name[0] == '.') continue; @@ -353,15 +354,14 @@ static sd_device *handle_scsi_default(sd_device *parent, char **path) { continue; if (!startswith(dent->d_name, "host")) continue; - i = strtoul(&dent->d_name[4], &rest, 10); - if (rest[0] != '\0') + if (safe_atou_full(&dent->d_name[4], 10, &i) < 0) continue; /* * find the smallest number; the host really needs to export its * own instance number per parent device; relying on the global host * enumeration and plainly rebasing the numbers sounds unreliable */ - if (basenum == -1 || i < basenum) + if (basenum == -1 || (int) i < basenum) basenum = i; } if (basenum == -1) diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c index 7d94c6b0a..bdaecb812 100644 --- a/src/udev/udev-builtin-usb_id.c +++ b/src/udev/udev-builtin-usb_id.c @@ -11,13 +11,13 @@ #include #include #include -#include #include #include "alloc-util.h" #include "device-nodes.h" #include "device-util.h" #include "fd-util.h" +#include "parse-util.h" #include "string-util.h" #include "strxcpyx.h" #include "udev-builtin.h" @@ -75,11 +75,9 @@ static void set_usb_iftype(char *to, int if_class_num, size_t len) { static int set_usb_mass_storage_ifsubtype(char *to, const char *from, size_t len) { int type_num = 0; - char *eptr; const char *type = "generic"; - type_num = strtoul(from, &eptr, 0); - if (eptr != from) { + if (safe_atoi(from, &type_num) >= 0) { switch (type_num) { case 1: /* RBC devices */ type = "rbc"; @@ -105,12 +103,10 @@ static int set_usb_mass_storage_ifsubtype(char *to, const char *from, size_t len } static void set_scsi_type(char *to, const char *from, size_t len) { - int type_num; - char *eptr; + unsigned type_num; const char *type = "generic"; - type_num = strtoul(from, &eptr, 0); - if (eptr != from) { + if (safe_atou(from, &type_num) >= 0) { switch (type_num) { case 0: case 0xe: @@ -246,7 +242,7 @@ static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) { sd_device *dev_interface, *dev_usb; const char *if_class, *if_subclass; - int if_class_num; + unsigned if_class_num; int protocol = 0; size_t l; char *s; @@ -286,7 +282,9 @@ static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) { if (r < 0) return log_device_debug_errno(dev_interface, r, "Failed to get bInterfaceClass attribute: %m"); - if_class_num = strtoul(if_class, NULL, 16); + r = safe_atou_full(if_class, 16, &if_class_num); + if (r < 0) + return log_device_debug_errno(dev_interface, r, "Failed to parse if_class: %m"); if (if_class_num == 8) { /* mass storage */ if (sd_device_get_sysattr_value(dev_interface, "bInterfaceSubClass", &if_subclass) >= 0) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 8a01e2512..b28089be7 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -17,6 +17,7 @@ #include "fd-util.h" #include "fs-util.h" #include "format-util.h" +#include "netif-naming-scheme.h" #include "netlink-util.h" #include "parse-util.h" #include "path-util.h" @@ -848,6 +849,12 @@ static int rename_netif(UdevEvent *event) { if (r < 0) return log_device_error_errno(dev, r, "Failed to get ifindex: %m"); + if (naming_scheme_has(NAMING_REPLACE_STRICTLY) && + !ifname_valid(event->name)) { + log_device_warning(dev, "Invalid network interface name, ignoring: %s", event->name); + return 0; + } + /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */ r = device_add_property(dev, "ID_RENAMING", "1"); if (r < 0) diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index c37c86a54..871318622 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -17,6 +17,7 @@ #include "glob-util.h" #include "list.h" #include "mkdir.h" +#include "netif-naming-scheme.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-util.h" @@ -2023,6 +2024,12 @@ static int udev_rule_apply_token_to_event( l = strpcpyl(&p, l, val, " ", NULL); (void) udev_event_apply_format(event, token->value, p, l, false); + if (event->esc == ESCAPE_REPLACE) { + count = udev_replace_chars(buf, NULL); + if (count > 0) + log_rule_debug(dev, rules, "Replaced %zu slash(es) from result of ENV{%s}%s=\"%s\"", + count, name, token->op == OP_ADD ? "+" : "", token->value); + } r = device_add_property(dev, name, value_new); if (r < 0) @@ -2053,21 +2060,23 @@ static int udev_rule_apply_token_to_event( if (token->op == OP_ASSIGN_FINAL) event->name_final = true; + if (sd_device_get_ifindex(dev, NULL) < 0) { + log_rule_error(dev, rules, + "Only network interface can be renamed, ignoring NAME=\"%s\"; please fix it.", + token->value); + break; + } + (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false); if (IN_SET(event->esc, ESCAPE_UNSET, ESCAPE_REPLACE)) { - count = udev_replace_chars(buf, "/"); + if (naming_scheme_has(NAMING_REPLACE_STRICTLY)) + count = udev_replace_ifname(buf); + else + count = udev_replace_chars(buf, "/"); if (count > 0) log_rule_debug(dev, rules, "Replaced %zu character(s) from result of NAME=\"%s\"", count, token->value); } - if (sd_device_get_devnum(dev, NULL) >= 0 && - (sd_device_get_devname(dev, &val) < 0 || - !streq_ptr(buf, path_startswith(val, "/dev/")))) { - log_rule_error(dev, rules, - "Kernel device nodes cannot be renamed, ignoring NAME=\"%s\"; please fix it.", - token->value); - break; - } r = free_and_strdup_warn(&event->name, buf); if (r < 0) return r; @@ -2096,7 +2105,8 @@ static int udev_rule_apply_token_to_event( else count = 0; if (count > 0) - log_rule_debug(dev, rules, "Replaced %zu character(s) from result of LINK", count); + log_rule_debug(dev, rules, "Replaced %zu character(s) from result of SYMLINK=\"%s\"", + count, token->value); p = skip_leading_chars(buf, NULL); while (!isempty(p)) { diff --git a/sysusers.d/basic.conf.in b/sysusers.d/basic.conf.in index 9da025142..8cc1a7cad 100644 --- a/sysusers.d/basic.conf.in +++ b/sysusers.d/basic.conf.in @@ -12,28 +12,28 @@ u root 0 "Super User" /root u {{NOBODY_USER_NAME}} 65534 "Nobody" - # Administrator group: can *see* more than normal users -g adm - - - +g adm {{ADM_GID }} - - # Administrator group: can *do* more than normal users -g wheel - - - +g wheel {{WHEEL_GID }} - - -# Access to certain kernel and userspace facilities -g kmem - - - -g tty {{TTY_GID}} - - -g utmp - - - +# Access to shared database of users on the system +g utmp {{UTMP_GID }} - - -# Hardware access groups -g audio - - - -g cdrom - - - -g dialout - - - -g disk - - - -g input - - - -g kvm - - - -g lp - - - -g render - - - -g sgx - - - -g tape - - - -g video - - - +# Physical and virtual hardware access groups +g audio {{AUDIO_GID }} - - +g cdrom {{CDROM_GID }} - - +g dialout {{DIALOUT_GID}} - - +g disk {{DISK_GID }} - - +g input {{INPUT_GID }} - - +g kmem {{KMEM_GID }} - - +g kvm {{KVM_GID }} - - +g lp {{LP_GID }} - - +g render {{RENDER_GID }} - - +g sgx {{SGX_GID }} - - +g tape {{TAPE_GID }} - - +g tty {{TTY_GID }} - - +g video {{VIDEO_GID }} - - # Default group for normal users -g users {{USERS_GID}} - - +g users {{USERS_GID }} - - diff --git a/sysusers.d/systemd.conf.in b/sysusers.d/systemd.conf.in index 9905eb596..9941ef8ef 100644 --- a/sysusers.d/systemd.conf.in +++ b/sysusers.d/systemd.conf.in @@ -5,18 +5,18 @@ # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. -g systemd-journal - - +g systemd-journal {{SYSTEMD_JOURNAL_GID}} - {% if ENABLE_NETWORKD %} -u systemd-network - "systemd Network Management" +u systemd-network {{SYSTEMD_NETWORK_UID}} "systemd Network Management" {% endif %} {% if ENABLE_OOMD %} u systemd-oom - "systemd Userspace OOM Killer" {% endif %} {% if ENABLE_RESOLVE %} -u systemd-resolve - "systemd Resolver" +u systemd-resolve {{SYSTEMD_RESOLVE_UID}} "systemd Resolver" {% endif %} {% if ENABLE_TIMESYNCD %} -u systemd-timesync - "systemd Time Synchronization" +u systemd-timesync {{SYSTEMD_TIMESYNC_UID}} "systemd Time Synchronization" {% endif %} {% if ENABLE_COREDUMP %} u systemd-coredump - "systemd Core Dumper" diff --git a/test/TEST-02-UNITTESTS/test.sh b/test/TEST-02-UNITTESTS/test.sh index 906d7cacd..440d7b8b2 100755 --- a/test/TEST-02-UNITTESTS/test.sh +++ b/test/TEST-02-UNITTESTS/test.sh @@ -16,59 +16,11 @@ $KERNEL_APPEND . "${TEST_BASE_DIR:?}/test-functions" check_result_nspawn() { - local workspace="${1:?}" - local ret=1 - - [[ -e "$workspace/testok" ]] && ret=0 - - if [[ -s "$workspace/failed" ]]; then - ret=$((ret + 1)) - echo "=== Failed test log ===" - cat "$workspace/failed" - else - if [[ -s "$workspace/skipped" ]]; then - echo "=== Skipped test log ==" - cat "$workspace/skipped" - fi - if [[ -s "$workspace/testok" ]]; then - echo "=== Passed tests ===" - cat "$workspace/testok" - fi - fi - - save_journal "$workspace/var/log/journal" - _umount_dir "${initdir:?}" - - [[ -n "${TIMED_OUT:=}" ]] && ret=1 - return $ret + check_result_nspawn_unittests "${1}" } check_result_qemu() { - local ret=1 - - mount_initdir - [[ -e "${initdir:?}/testok" ]] && ret=0 - - if [[ -s "$initdir/failed" ]]; then - ret=$((ret + 1)) - echo "=== Failed test log ===" - cat "$initdir/failed" - else - if [[ -s "$initdir/skipped" ]]; then - echo "=== Skipped test log ==" - cat "$initdir/skipped" - fi - if [[ -s "$initdir/testok" ]]; then - echo "=== Passed tests ===" - cat "$initdir/testok" - fi - fi - - save_journal "$initdir/var/log/journal" - _umount_dir "$initdir" - - [[ -n "${TIMED_OUT:=}" ]] && ret=1 - return $ret + check_result_qemu_unittests } do_test "$@" diff --git a/test/TEST-61-UNITTESTS-QEMU/Makefile b/test/TEST-61-UNITTESTS-QEMU/Makefile new file mode 120000 index 000000000..e9f93b110 --- /dev/null +++ b/test/TEST-61-UNITTESTS-QEMU/Makefile @@ -0,0 +1 @@ +../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-61-UNITTESTS-QEMU/deny-list-ubuntu-ci b/test/TEST-61-UNITTESTS-QEMU/deny-list-ubuntu-ci new file mode 100644 index 000000000..e69de29bb diff --git a/test/TEST-61-UNITTESTS-QEMU/test.sh b/test/TEST-61-UNITTESTS-QEMU/test.sh new file mode 100755 index 000000000..0f793bbee --- /dev/null +++ b/test/TEST-61-UNITTESTS-QEMU/test.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -e + +TEST_DESCRIPTION="Run unit tests under qemu" +# this subset of unit tests requires qemu, so they are ran here to avoid slowing down TEST-02 +TEST_NO_NSPAWN=1 + +# embed some newlines in the kernel command line to stress our test suite +KERNEL_APPEND=" + +frobnicate! + +$KERNEL_APPEND +" + +# shellcheck source=test/test-functions +. "${TEST_BASE_DIR:?}/test-functions" + +check_result_nspawn() { + check_result_nspawn_unittests "${1}" +} + +check_result_qemu() { + check_result_qemu_unittests +} + +do_test "$@" diff --git a/test/fuzz/fuzz-unit-file/directives-all.service b/test/fuzz/fuzz-unit-file/directives-all.service index a152bebd7..3039d1c0c 100644 --- a/test/fuzz/fuzz-unit-file/directives-all.service +++ b/test/fuzz/fuzz-unit-file/directives-all.service @@ -21,6 +21,7 @@ AssertHost= AssertKernelCommandLine= AssertKernelVersion= AssertNeedsUpdate= +AssertOSRelease= AssertPathExists= AssertPathExistsGlob= AssertPathIsDirectory= @@ -64,6 +65,7 @@ ConditionHost= ConditionKernelCommandLine= ConditionKernelVersion= ConditionNeedsUpdate= +ConditionOSRelease= ConditionPathExists= ConditionPathExistsGlob= ConditionPathIsDirectory= diff --git a/test/fuzz/fuzz-unit-file/directives.service b/test/fuzz/fuzz-unit-file/directives.service index 1ce6967c6..b5df300a6 100644 --- a/test/fuzz/fuzz-unit-file/directives.service +++ b/test/fuzz/fuzz-unit-file/directives.service @@ -18,6 +18,7 @@ AssertKernelCommandLine= AssertKernelVersion= AssertMemory= AssertNeedsUpdate= +AssertOSRelease= AssertPathExists= AssertPathExistsGlob= AssertPathIsDirectory= @@ -50,6 +51,7 @@ ConditionKernelCommandLine= ConditionKernelVersion= ConditionMemory= ConditionNeedsUpdate= +ConditionOSRelease= ConditionPathExists= ConditionPathExistsGlob= ConditionPathIsDirectory= diff --git a/test/test-functions b/test/test-functions index f9f9d6a9e..3451e16d9 100644 --- a/test/test-functions +++ b/test/test-functions @@ -864,6 +864,7 @@ install_modules() { instmods loop instmods vfat + instmods nls_ascii =nls instmods dummy if [[ "$LOOKS_LIKE_SUSE" ]]; then @@ -1006,11 +1007,13 @@ create_empty_image() { fi local size=500 - if meson configure "${BUILD_DIR:?}" | grep 'static-lib\|standalone-binaries' | awk '{ print $2 }' | grep -q 'true'; then - size=$((size+=200)) - fi - if meson configure "${BUILD_DIR:?}" | grep 'link-.*-shared' | awk '{ print $2 }' | grep -q 'false'; then - size=$((size+=200)) + if [ -z "$NO_BUILD" ]; then + if meson configure "${BUILD_DIR:?}" | grep 'static-lib\|standalone-binaries' | awk '{ print $2 }' | grep -q 'true'; then + size=$((size+=200)) + fi + if meson configure "${BUILD_DIR:?}" | grep 'link-.*-shared' | awk '{ print $2 }' | grep -q 'false'; then + size=$((size+=200)) + fi fi if [[ "$STRIP_BINARIES" = "no" ]]; then size=$((4 * size)) @@ -1226,6 +1229,66 @@ check_result_qemu() { return $ret } +check_result_nspawn_unittests() { + local workspace="${1:?}" + local ret=1 + + [[ -e "$workspace/testok" ]] && ret=0 + + if [[ -s "$workspace/failed" ]]; then + ret=$((ret + 1)) + echo "=== Failed test log ===" + cat "$workspace/failed" + else + if [[ -s "$workspace/skipped" ]]; then + echo "=== Skipped test log ==" + cat "$workspace/skipped" + # We might have only skipped tests - that should not fail the job + ret=0 + fi + if [[ -s "$workspace/testok" ]]; then + echo "=== Passed tests ===" + cat "$workspace/testok" + fi + fi + + save_journal "$workspace/var/log/journal" + _umount_dir "${initdir:?}" + + [[ -n "${TIMED_OUT:=}" ]] && ret=1 + return $ret +} + +check_result_qemu_unittests() { + local ret=1 + + mount_initdir + [[ -e "${initdir:?}/testok" ]] && ret=0 + + if [[ -s "$initdir/failed" ]]; then + ret=$((ret + 1)) + echo "=== Failed test log ===" + cat "$initdir/failed" + else + if [[ -s "$initdir/skipped" ]]; then + echo "=== Skipped test log ==" + cat "$initdir/skipped" + # We might have only skipped tests - that should not fail the job + ret=0 + fi + if [[ -s "$initdir/testok" ]]; then + echo "=== Passed tests ===" + cat "$initdir/testok" + fi + fi + + save_journal "$initdir/var/log/journal" + _umount_dir "$initdir" + + [[ -n "${TIMED_OUT:=}" ]] && ret=1 + return $ret +} + strip_binaries() { dinfo "Strip binaries" if [[ "$STRIP_BINARIES" = "no" ]]; then @@ -2034,7 +2097,7 @@ inst_rule_programs() { local rule="${1:?}" local prog bin - awk 'match($0, /PROGRAM==?"([^ "]+)/, m) { print m[1]; }' "$rule" | while read -r prog; do + sed -rn 's/^.*?PROGRAM==?"([^ "]+).*$/\1/p' "$rule" | while read -r prog; do if [ -x "/lib/udev/$prog" ]; then bin="/lib/udev/$prog" else @@ -2353,13 +2416,6 @@ test_create_image() { ( LOG_LEVEL=5 setup_basic_environment - - # We want to test all services in TEST-01-BASIC, but mask them in - # all other tests - if [[ "$TESTID" != "01" ]]; then - dinfo "Masking supporting services" - mask_supporting_services - fi ) } @@ -2410,6 +2466,13 @@ test_setup() { fi mount_initdir + # We want to test all services in TEST-01-BASIC, but mask them in + # all other tests + if [[ "${TESTID:?}" != "01" ]]; then + dinfo "Masking supporting services" + mask_supporting_services + fi + if [ "$hook_defined" -eq 0 ]; then test_append_files "${initdir:?}" fi diff --git a/test/test-network/conf/25-activation-policy.network.d/bound.conf b/test/test-network/conf/25-activation-policy.network.d/bound.conf new file mode 100644 index 000000000..c6d73f0ae --- /dev/null +++ b/test/test-network/conf/25-activation-policy.network.d/bound.conf @@ -0,0 +1,5 @@ +[Link] +ActivationPolicy=bound + +[Network] +BindCarrier=dummy98 diff --git a/test/test-network/conf/25-activation-policy.network.d/required-no.conf b/test/test-network/conf/25-activation-policy.network.d/required-no.conf new file mode 100644 index 000000000..b97b85a1a --- /dev/null +++ b/test/test-network/conf/25-activation-policy.network.d/required-no.conf @@ -0,0 +1,2 @@ +[Link] +RequiredForOnline=no diff --git a/test/test-network/conf/25-activation-policy.network.d/required-yes.conf b/test/test-network/conf/25-activation-policy.network.d/required-yes.conf new file mode 100644 index 000000000..84e0f055c --- /dev/null +++ b/test/test-network/conf/25-activation-policy.network.d/required-yes.conf @@ -0,0 +1,2 @@ +[Link] +RequiredForOnline=yes diff --git a/test/test-network/conf/routing-policy-rule-test1.network b/test/test-network/conf/routing-policy-rule-test1.network index 3594602cb..2afd3277c 100644 --- a/test/test-network/conf/routing-policy-rule-test1.network +++ b/test/test-network/conf/routing-policy-rule-test1.network @@ -14,6 +14,7 @@ OutgoingInterface=test1 [RoutingPolicyRule] IncomingInterface=test1 +From=::/0 Table=8 Priority=100 Family=ipv6 @@ -23,3 +24,9 @@ IncomingInterface=test1 Table=9 Priority=101 Family=both + +[RoutingPolicyRule] +IncomingInterface=test1 +From=0.0.0.0/8 +Table=10 +Priority=102 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 2f1b11980..4cc0c64f9 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -1793,6 +1793,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): units = [ '11-dummy.netdev', '12-dummy.netdev', + '12-dummy.network', '23-active-slave.network', '24-keep-configuration-static.network', '24-search-domain.network', @@ -1858,7 +1859,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): 'routing-policy-rule-reconfigure2.network', ] - routing_policy_rule_tables = ['7', '8', '9', '1011'] + routing_policy_rule_tables = ['7', '8', '9', '10', '1011'] routes = [['blackhole', '202.54.1.2'], ['unreachable', '202.54.1.3'], ['prohibit', '202.54.1.4']] def setUp(self): @@ -2108,6 +2109,13 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): self.assertRegex(output, 'iif test1') self.assertRegex(output, 'lookup 8') + output = check_output('ip rule list iif test1 priority 102') + print(output) + self.assertRegex(output, '102:') + self.assertRegex(output, 'from 0.0.0.0/8') + self.assertRegex(output, 'iif test1') + self.assertRegex(output, 'lookup 10') + def test_routing_policy_rule_issue_11280(self): copy_unit_to_networkd_unit_path('routing-policy-rule-test1.network', '11-dummy.netdev', 'routing-policy-rule-dummy98.network', '12-dummy.netdev') @@ -2794,6 +2802,50 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): with self.subTest(test=test): self._test_activation_policy(test) + def _test_activation_policy_required_for_online(self, policy, required): + self.setUp() + conffile = '25-activation-policy.network' + units = ['11-dummy.netdev', '12-dummy.netdev', '12-dummy.network', conffile] + if policy: + units += [f'{conffile}.d/{policy}.conf'] + if required: + units += [f'{conffile}.d/required-{required}.conf'] + copy_unit_to_networkd_unit_path(*units, dropins=False) + start_networkd() + + if policy.endswith('down') or policy == 'manual': + self.wait_operstate('test1', 'off', setup_state='configuring') + else: + self.wait_online(['test1']) + + if policy == 'always-down': + # if always-down, required for online is forced to no + expected = False + elif required: + # otherwise if required for online is specified, it should match that + expected = required == 'yes' + elif policy: + # otherwise if only policy specified, required for online defaults to + # true if policy is up, always-up, or bound + expected = policy.endswith('up') or policy == 'bound' + else: + # default is true, if neither are specified + expected = True + + output = check_output(*networkctl_cmd, '-n', '0', 'status', 'test1', env=env) + print(output) + + yesno = 'yes' if expected else 'no' + self.assertRegex(output, f'Required For Online: {yesno}') + + self.tearDown() + + def test_activation_policy_required_for_online(self): + for policy in ['up', 'always-up', 'manual', 'always-down', 'down', 'bound', '']: + for required in ['yes', 'no', '']: + with self.subTest(policy=policy, required=required): + self._test_activation_policy_required_for_online(policy, required) + def test_domain(self): copy_unit_to_networkd_unit_path('12-dummy.netdev', '24-search-domain.network') start_networkd() diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh index da02304a3..b16e8547a 100755 --- a/test/units/testsuite-02.sh +++ b/test/units/testsuite-02.sh @@ -4,7 +4,8 @@ set -o pipefail NPROC=$(nproc) MAX_QUEUE_SIZE=${NPROC:-2} -mapfile -t TEST_LIST < <(find /usr/lib/systemd/tests/ -maxdepth 1 -type f -name "test-*") +TESTS_GLOB=${TESTS_GLOB:-test-*} +mapfile -t TEST_LIST < <(find /usr/lib/systemd/tests/ -maxdepth 1 -type f -name "${TESTS_GLOB}") # reset state rm -fv /failed-tests /skipped-tests /skipped @@ -78,10 +79,12 @@ done # Wait for remaining running tasks for key in "${!running[@]}"; do - wait ${running[$key]} - ec=$? + wait ${running[$key]} && ec=0 || ec=$? report_result "$key" $ec unset running["$key"] done +# Test logs are sometimes lost, as the system shuts down immediately after +journalctl --sync + exit 0 diff --git a/test/units/testsuite-11.sh b/test/units/testsuite-11.sh index 97ab8be75..d05f60987 100755 --- a/test/units/testsuite-11.sh +++ b/test/units/testsuite-11.sh @@ -4,9 +4,10 @@ set -o pipefail systemctl --no-block start fail-on-restart.service active_state=$(systemctl show --value --property ActiveState fail-on-restart.service) -while [[ "$active_state" == "activating" || "$active_state" == "active" ]]; do - sleep 1 +while [[ "$active_state" == "activating" || "$active_state" =~ ^(in)?active$ ]]; do + sleep .5 active_state=$(systemctl show --value --property ActiveState fail-on-restart.service) done systemctl is-failed fail-on-restart.service || exit 1 +[[ "$(systemctl show --value --property NRestarts fail-on-restart.service)" -le 3 ]] || exit 1 touch /testok diff --git a/test/units/testsuite-38.sh b/test/units/testsuite-38.sh index 818f69bc6..e58bae81f 100755 --- a/test/units/testsuite-38.sh +++ b/test/units/testsuite-38.sh @@ -82,11 +82,18 @@ check_freezer_state() { name="${1%.$suffix}" object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}" - state=$(busctl get-property \ - org.freedesktop.systemd1 \ - "${object_path}" \ - org.freedesktop.systemd1.Unit \ - FreezerState | cut -d " " -f2 | tr -d '"') + for _ in {0..10}; do + state=$(busctl get-property \ + org.freedesktop.systemd1 \ + "${object_path}" \ + org.freedesktop.systemd1.Unit \ + FreezerState | cut -d " " -f2 | tr -d '"') + + # Ignore the intermediate freezing & thawing states in case we check + # the unit state too quickly + [[ "$state" =~ ^(freezing|thawing)$ ]] || break + sleep .5 + done [ "$state" = "$2" ] || { echo "error: unexpected freezer state, expected: $2, actual: $state" >&2 diff --git a/test/units/testsuite-61.service b/test/units/testsuite-61.service new file mode 100644 index 000000000..908ff7ef5 --- /dev/null +++ b/test/units/testsuite-61.service @@ -0,0 +1,7 @@ +[Unit] +Description=TEST-61-UNITTESTS-QEMU + +[Service] +ExecStartPre=rm -f /failed /testok +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/units/testsuite-61.sh b/test/units/testsuite-61.sh new file mode 100755 index 000000000..0810de205 --- /dev/null +++ b/test/units/testsuite-61.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -eux +set -o pipefail + +TESTS_GLOB="test-loop-block" +. $(dirname $0)/testsuite-02.sh + +exit 0