diff --git a/.gitignore b/.gitignore index 10622d4df..9ff6da28d 100644 --- a/.gitignore +++ b/.gitignore @@ -73,7 +73,6 @@ /systemd-debug-generator /systemd-delta /systemd-detect-virt -/systemd-efi-boot-generator /systemd-escape /systemd-export /systemd-firstboot diff --git a/Makefile-man.am b/Makefile-man.am index 218a299e9..c0cebaab6 100644 --- a/Makefile-man.am +++ b/Makefile-man.am @@ -91,7 +91,6 @@ MANPAGES += \ man/systemd-debug-generator.8 \ man/systemd-delta.1 \ man/systemd-detect-virt.1 \ - man/systemd-efi-boot-generator.8 \ man/systemd-escape.1 \ man/systemd-fsck@.service.8 \ man/systemd-fstab-generator.8 \ @@ -2304,7 +2303,6 @@ EXTRA_DIST += \ man/systemd-debug-generator.xml \ man/systemd-delta.xml \ man/systemd-detect-virt.xml \ - man/systemd-efi-boot-generator.xml \ man/systemd-escape.xml \ man/systemd-firstboot.xml \ man/systemd-fsck@.service.xml \ diff --git a/Makefile.am b/Makefile.am index ce2e19b3f..ef8cc4a91 100644 --- a/Makefile.am +++ b/Makefile.am @@ -43,7 +43,7 @@ LIBUDEV_REVISION=4 LIBUDEV_AGE=6 LIBSYSTEMD_CURRENT=10 -LIBSYSTEMD_REVISION=0 +LIBSYSTEMD_REVISION=1 LIBSYSTEMD_AGE=10 # The following four libraries only exist for compatibility reasons, @@ -2426,16 +2426,6 @@ EXTRA_DIST += \ # ------------------------------------------------------------------------------ if ENABLE_EFI -systemgenerator_PROGRAMS += \ - systemd-efi-boot-generator - -systemd_efi_boot_generator_SOURCES = \ - src/efi-boot-generator/efi-boot-generator.c - -systemd_efi_boot_generator_LDADD = \ - libshared.la - -# ------------------------------------------------------------------------------ if HAVE_BLKID bootctl_SOURCES = \ src/boot/bootctl.c @@ -2529,13 +2519,15 @@ systemd_boot_headers = \ src/boot/efi/util.h \ src/boot/efi/console.h \ src/boot/efi/graphics.h \ - src/boot/efi/pefile.h + src/boot/efi/pefile.h \ + src/boot/efi/disk.h systemd_boot_sources = \ src/boot/efi/util.c \ src/boot/efi/console.c \ src/boot/efi/graphics.c \ src/boot/efi/pefile.c \ + src/boot/efi/disk.c \ src/boot/efi/boot.c EXTRA_DIST += $(systemd_boot_sources) $(systemd_boot_headers) @@ -2568,6 +2560,7 @@ endif stub_headers = \ src/boot/efi/util.h \ src/boot/efi/pefile.h \ + src/boot/efi/disk.h \ src/boot/efi/graphics.h \ src/boot/efi/splash.h \ src/boot/efi/linux.h @@ -2575,6 +2568,7 @@ stub_headers = \ stub_sources = \ src/boot/efi/util.c \ src/boot/efi/pefile.c \ + src/boot/efi/disk.c \ src/boot/efi/graphics.c \ src/boot/efi/splash.c \ src/boot/efi/linux.c \ @@ -6024,12 +6018,12 @@ git-tag: .PHONY: git-tar git-tar: - git archive --format=tar --prefix=systemd-$(VERSION)/ HEAD | xz > systemd-$(VERSION).tar.xz + git archive --format=tar --prefix=systemd-$(VERSION)/ HEAD | gzip > systemd-$(VERSION).tar.gz www_target = www.freedesktop.org:/srv/www.freedesktop.org/www/software/systemd .PHONY: doc-sync -doc-sync: all destdir-sphinx +doc-sync: all rsync -rlv --delete-excluded --include="*.html" --exclude="*" --omit-dir-times man/ $(www_target)/man/ .PHONY: gardel diff --git a/NEWS b/NEWS index 9fc6cc6e0..97dd000d4 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,20 @@ systemd System and Service Manager +CHANGES WITH 224: + + * The systemd-efi-boot-generator functionality was merged into + systemd-gpt-auto-generator. + + * systemd-networkd now supports Group Policy for vxlan devices. It can + be enabled via the new boolean configuration option called + 'GroupPolicyExtension='. + + Contributions from: Andreas Kempf, Christian Hesse, Daniel Mack, David + Herrmann, Herman Fries, Johannes Nixdorf, Kay Sievers, Lennart + Poettering, Peter Hutterer, Susant Sahani, Tom Gundersen + + -- Berlin, 2015-07-31 + CHANGES WITH 223: * The python-systemd code has been removed from the systemd repository. @@ -53,16 +68,17 @@ CHANGES WITH 223: mapped as 'vg-foo-TGID'. Contributions from: Beniamino Galvani, cee1, Christian Hesse, Daniel - Buch, Daniel Mack, daurnimator, David Herrmann, Dimitri John Ledkov, Jan - Alexander Steffens (heftig), Johan Ouwerkerk, Jose Carlos Venegas Munoz, - Kay Sievers, Lennart Poettering, Lidong Zhong, Martin Pitt, Michael - Biebl, Michael Olbrich, Michal Schmidt, Mike Gilbert, Namhyung Kim, Nick - Owens, Peter Hutterer, Richard Maw, Steven Allen, Sungbae Yoo, Susant - Sahani, Thomas Blume, Thomas Hindoe Paaboel Andersen, Tom Gundersen, - Umut Tezduyar Lindskog, Vito Caputo, Vivenzio Pagliari, Zbigniew - Jędrzejewski-Szmek + Buch, Daniel Mack, daurnimator, David Herrmann, Dimitri John Ledkov, + HATAYAMA Daisuke, Ivan Shapovalov, Jan Alexander Steffens (heftig), + Johan Ouwerkerk, Jose Carlos Venegas Munoz, Karel Zak, Kay Sievers, + Lennart Poettering, Lidong Zhong, Martin Pitt, Michael Biebl, Michael + Olbrich, Michal Schmidt, Michal Sekletar, Mike Gilbert, Namhyung Kim, + Nick Owens, Peter Hutterer, Richard Maw, Steven Allen, Sungbae Yoo, + Susant Sahani, Thomas Blume, Thomas Hindoe Paaboel Andersen, Tom + Gundersen, Torstein Husebø, Umut Tezduyar Lindskog, Vito Caputo, + Vivenzio Pagliari, Zbigniew Jędrzejewski-Szmek - -- Berlin, 2015-XX-XX + -- Berlin, 2015-07-29 CHANGES WITH 222: diff --git a/configure.ac b/configure.ac index a16ca6396..f1ce9ff30 100644 --- a/configure.ac +++ b/configure.ac @@ -20,7 +20,7 @@ AC_PREREQ([2.64]) AC_INIT([systemd], - [223], + [224], [http://github.com/systemd/systemd/issues], [systemd], [http://www.freedesktop.org/wiki/Software/systemd]) @@ -1151,10 +1151,10 @@ AS_IF([test "x$enable_gnuefi" != "xno"], [ have_efi_lds=no AC_ARG_WITH(efi-ldsdir, AS_HELP_STRING([--with-efi-ldsdir=PATH], [Path to EFI lds directory]), - [EFI_LDS_DIR="$withval" && AC_CHECK_FILE([${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds], + [EFI_LDS_DIR="$withval" && AS_IF([test -f "${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds"], [have_efi_lds=yes])], [AS_FOR([DIR], [EFI_LDS_DIR], ["${EFI_LIB_DIR}/gnuefi" "${EFI_LIB_DIR}"], - [AC_CHECK_FILE([${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds], + [AS_IF([test -f "${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds"], [have_efi_lds=yes && break])])]) AS_IF([test "x$have_efi_lds" = xyes], [AC_SUBST([EFI_LDS_DIR])], diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb index cbf70da88..eb34e3efc 100644 --- a/hwdb/20-OUI.hwdb +++ b/hwdb/20-OUI.hwdb @@ -23990,7 +23990,7 @@ OUI:000D96* ID_OUI_FROM_DATABASE=Vtera Technology Inc. OUI:000D97* - ID_OUI_FROM_DATABASE=Tropos Networks, Inc. + ID_OUI_FROM_DATABASE=ABB Inc./Tropos OUI:000D98* ID_OUI_FROM_DATABASE=S.W.A.C. Schmitt-Walter Automation Consult GmbH @@ -38138,7 +38138,7 @@ OUI:00200E* ID_OUI_FROM_DATABASE=SATELLITE TECHNOLOGY MGMT, INC OUI:00200F* - ID_OUI_FROM_DATABASE=TANBAC CO., LTD. + ID_OUI_FROM_DATABASE=EBRAINS Inc OUI:002010* ID_OUI_FROM_DATABASE=JEOL SYSTEM TECHNOLOGY CO. LTD @@ -40385,7 +40385,7 @@ OUI:0022FE* ID_OUI_FROM_DATABASE=Advanced Illumination OUI:0022FF* - ID_OUI_FROM_DATABASE=iWDL Technologies + ID_OUI_FROM_DATABASE=NIVIS LLC OUI:002300* ID_OUI_FROM_DATABASE=Cayee Computer Ltd. @@ -45856,6 +45856,9 @@ OUI:005218* OUI:0054AF* ID_OUI_FROM_DATABASE=Continental Automotive Systems Inc. +OUI:0055DA* + ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. + OUI:005907* ID_OUI_FROM_DATABASE=LenovoEMC Products USA, LLC @@ -46657,6 +46660,9 @@ OUI:006B9E* OUI:006BA0* ID_OUI_FROM_DATABASE=SHENZHEN UNIVERSAL INTELLISYS PTE LTD +OUI:006D52* + ID_OUI_FROM_DATABASE=Apple + OUI:006DFB* ID_OUI_FROM_DATABASE=Vutrix (UK) Ltd @@ -51862,6 +51868,9 @@ OUI:045FA7* OUI:046169* ID_OUI_FROM_DATABASE=MEDIA GLOBAL LINKS CO., LTD. +OUI:046273* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:0462D7* ID_OUI_FROM_DATABASE=ALSTOM HYDRO FRANCE @@ -51874,6 +51883,9 @@ OUI:046785* OUI:0469F8* ID_OUI_FROM_DATABASE=Apple +OUI:046C9D* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:046D42* ID_OUI_FROM_DATABASE=Bryston Ltd. @@ -52534,6 +52546,9 @@ OUI:0808EA* OUI:0809B6* ID_OUI_FROM_DATABASE=Masimo Corp +OUI:080A4E* + ID_OUI_FROM_DATABASE=Planet Bingo® — 3rd Rock Gaming® + OUI:080C0B* ID_OUI_FROM_DATABASE=SysMik GmbH Dresden @@ -52640,7 +52655,7 @@ OUI:084027* ID_OUI_FROM_DATABASE=Gridstore Inc. OUI:084656* - ID_OUI_FROM_DATABASE=VODALYS Ingénierie + ID_OUI_FROM_DATABASE=VEO-LABS OUI:08482C* ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD. @@ -52735,6 +52750,9 @@ OUI:0881F4* OUI:08863B* ID_OUI_FROM_DATABASE=Belkin International, Inc. +OUI:088C2C* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:088DC8* ID_OUI_FROM_DATABASE=Ryowa Electronics Co.,Ltd @@ -52927,6 +52945,9 @@ OUI:0C17F1* OUI:0C191F* ID_OUI_FROM_DATABASE=Inform Electronik +OUI:0C1A10* + ID_OUI_FROM_DATABASE=Acoustic Stream + OUI:0C1DAF* ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd @@ -52996,6 +53017,9 @@ OUI:0C51F7* OUI:0C54A5* ID_OUI_FROM_DATABASE=PEGATRON CORPORATION +OUI:0C54B9* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + OUI:0C5521* ID_OUI_FROM_DATABASE=Axiros GmbH @@ -53065,6 +53089,9 @@ OUI:0C84DC* OUI:0C8525* ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. +OUI:0C8610* + ID_OUI_FROM_DATABASE=Juniper networks + OUI:0C8910* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD @@ -54556,6 +54583,9 @@ OUI:1C5C60* OUI:1C5FFF* ID_OUI_FROM_DATABASE=Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch +OUI:1C60DE* + ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. + OUI:1C62B8* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -55222,6 +55252,9 @@ OUI:242642* OUI:242FFA* ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions +OUI:243184* + ID_OUI_FROM_DATABASE=SHARP Corporation + OUI:24374C* ID_OUI_FROM_DATABASE=Cisco SPVTG @@ -55426,6 +55459,9 @@ OUI:24D2CC* OUI:24D921* ID_OUI_FROM_DATABASE=Avaya, Inc +OUI:24DA9B* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + OUI:24DAB6* ID_OUI_FROM_DATABASE=Sistemas de Gestión Energética S.A. de C.V @@ -55501,6 +55537,9 @@ OUI:280CB8* OUI:280DFC* ID_OUI_FROM_DATABASE=Sony Computer Entertainment Inc. +OUI:280E8B* + ID_OUI_FROM_DATABASE=Beijing Spirit Technology Development Co., Ltd. + OUI:28107B* ID_OUI_FROM_DATABASE=D-Link International @@ -55906,6 +55945,9 @@ OUI:2C1984* OUI:2C1A31* ID_OUI_FROM_DATABASE=Electronics Company Limited +OUI:2C1BC8* + ID_OUI_FROM_DATABASE=Hunan Topview Network System CO.,LTD + OUI:2C1EEA* ID_OUI_FROM_DATABASE=AERODEV @@ -56020,6 +56062,9 @@ OUI:2C5A05* OUI:2C5AA3* ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD +OUI:2C5BB8* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD. + OUI:2C5BE1* ID_OUI_FROM_DATABASE=Centripetal Networks, Inc @@ -56134,6 +56179,9 @@ OUI:2CABA4* OUI:2CAD13* ID_OUI_FROM_DATABASE=SHENZHEN ZHILU TECHNOLOGY CO.,LTD +OUI:2CAE2B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:2CB05D* ID_OUI_FROM_DATABASE=NETGEAR @@ -56368,6 +56416,9 @@ OUI:30595B* OUI:3059B7* ID_OUI_FROM_DATABASE=Microsoft +OUI:305A3A* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + OUI:305D38* ID_OUI_FROM_DATABASE=Beissbarth @@ -56657,7 +56708,7 @@ OUI:3438AF* ID_OUI_FROM_DATABASE=Inlab Software GmbH OUI:343D98* - ID_OUI_FROM_DATABASE=Fujian JinQianMao Electronic Technology Co.,Ltd. + ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd. OUI:3440B5* ID_OUI_FROM_DATABASE=IBM @@ -57052,6 +57103,12 @@ OUI:381C23* OUI:381C4A* ID_OUI_FROM_DATABASE=SIMCom Wireless Solutions Co.,Ltd. +OUI:382056* + ID_OUI_FROM_DATABASE=Cisco Systems + +OUI:382187* + ID_OUI_FROM_DATABASE=Midea Group Co., Ltd. + OUI:38229D* ID_OUI_FROM_DATABASE=Pirelli Tyre S.p.A. @@ -57178,6 +57235,9 @@ OUI:388AB7* OUI:388EE7* ID_OUI_FROM_DATABASE=Fanhattan LLC +OUI:3891D5* + ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited + OUI:3891FB* ID_OUI_FROM_DATABASE=Xenox Holding BV @@ -57310,6 +57370,9 @@ OUI:38F098* OUI:38F33F* ID_OUI_FROM_DATABASE=TATSUNO CORPORATION +OUI:38F557* + ID_OUI_FROM_DATABASE=JOLATA, INC. + OUI:38F597* ID_OUI_FROM_DATABASE=home2net GmbH @@ -57328,6 +57391,9 @@ OUI:38FACA* OUI:38FEC5* ID_OUI_FROM_DATABASE=Ellips B.V. +OUI:38FF36* + ID_OUI_FROM_DATABASE=Ruckus Wireless + OUI:3C02B1* ID_OUI_FROM_DATABASE=Creation Technologies LP @@ -57565,6 +57631,9 @@ OUI:3C8BFE* OUI:3C8C40* ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited +OUI:3C8CF8* + ID_OUI_FROM_DATABASE=TRENDnet, Inc. + OUI:3C912B* ID_OUI_FROM_DATABASE=Vexata Inc @@ -57628,12 +57697,18 @@ OUI:3CB15B* OUI:3CB17F* ID_OUI_FROM_DATABASE=Wattwatchers Pty Ld +OUI:3CB72B* + ID_OUI_FROM_DATABASE=PLUMgrid Inc + OUI:3CB792* ID_OUI_FROM_DATABASE=Hitachi Maxell, Ltd., Optronics Division OUI:3CB9A6* ID_OUI_FROM_DATABASE=Belden Deutschland GmbH +OUI:3CBBFD* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:3CBDD8* ID_OUI_FROM_DATABASE=LG ELECTRONICS INC @@ -57865,6 +57940,9 @@ OUI:40516C* OUI:40520D* ID_OUI_FROM_DATABASE=Pico Technology +OUI:4054E4* + ID_OUI_FROM_DATABASE=Wearsafe Labs Inc + OUI:405539* ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. @@ -57946,6 +58024,9 @@ OUI:4083DE* OUI:408493* ID_OUI_FROM_DATABASE=Clavister AB +OUI:40862E* + ID_OUI_FROM_DATABASE=JDM MOBILE INTERNET SOLUTION CO., LTD. + OUI:4088E0* ID_OUI_FROM_DATABASE=Beijing Ereneben Information Technology Limited Shenzhen Branch @@ -58663,6 +58744,9 @@ OUI:489153* OUI:4891F6* ID_OUI_FROM_DATABASE=Shenzhen Reach software technology CO.,LTD +OUI:489A42* + ID_OUI_FROM_DATABASE=Technomate Ltd + OUI:489BE2* ID_OUI_FROM_DATABASE=SCI Innovations Ltd @@ -58708,6 +58792,9 @@ OUI:48B9C2* OUI:48BE2D* ID_OUI_FROM_DATABASE=Symanitron +OUI:48BF74* + ID_OUI_FROM_DATABASE=Baicells Technologies Co.,LTD + OUI:48C093* ID_OUI_FROM_DATABASE=Xirrus, Inc. @@ -58970,7 +59057,7 @@ OUI:4C73A5* ID_OUI_FROM_DATABASE=KOVE OUI:4C7403* - ID_OUI_FROM_DATABASE=Mundo Reader (bq) + ID_OUI_FROM_DATABASE=BQ OUI:4C7625* ID_OUI_FROM_DATABASE=Dell Inc. @@ -59452,6 +59539,9 @@ OUI:50C58D* OUI:50C7BF* ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. +OUI:50C8E5* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:50C971* ID_OUI_FROM_DATABASE=GN Netcom A/S @@ -59461,6 +59551,9 @@ OUI:50C9A0* OUI:50CCF8* ID_OUI_FROM_DATABASE=Samsung Electro Mechanics +OUI:50CD22* + ID_OUI_FROM_DATABASE=Avaya, Inc + OUI:50CD32* ID_OUI_FROM_DATABASE=NanJing Chaoran Science & Technology Co.,Ltd. @@ -59632,6 +59725,9 @@ OUI:544A05* OUI:544A16* ID_OUI_FROM_DATABASE=Texas Instruments +OUI:544B8C* + ID_OUI_FROM_DATABASE=juniper networks + OUI:544E90* ID_OUI_FROM_DATABASE=Apple @@ -59764,6 +59860,9 @@ OUI:54A619* OUI:54A9D4* ID_OUI_FROM_DATABASE=Minibar Systems +OUI:54AB3A* + ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC. + OUI:54AE27* ID_OUI_FROM_DATABASE=Apple @@ -59932,6 +60031,9 @@ OUI:58238C* OUI:582AF7* ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd +OUI:582BDB* + ID_OUI_FROM_DATABASE=Pax AB + OUI:582EFE* ID_OUI_FROM_DATABASE=Lighting Science Group @@ -59953,6 +60055,9 @@ OUI:583F54* OUI:5842E4* ID_OUI_FROM_DATABASE=Sigma International General Medical Apparatus, LLC. +OUI:584498* + ID_OUI_FROM_DATABASE=XIAOMI INC + OUI:58468F* ID_OUI_FROM_DATABASE=Koncar Electronics and Informatics @@ -60022,6 +60127,9 @@ OUI:58671A* OUI:58677F* ID_OUI_FROM_DATABASE=Clare Controls Inc. +OUI:58685D* + ID_OUI_FROM_DATABASE=Tempo Australia Pty Ltd + OUI:58696C* ID_OUI_FROM_DATABASE=Fujian Ruijie Networks co, ltd @@ -60055,6 +60163,9 @@ OUI:587BE9* OUI:587E61* ID_OUI_FROM_DATABASE=Hisense Electric Co., Ltd +OUI:587F57* + ID_OUI_FROM_DATABASE=Apple + OUI:587F66* ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd @@ -60208,6 +60319,9 @@ OUI:58F387* OUI:58F39C* ID_OUI_FROM_DATABASE=Cisco +OUI:58F496* + ID_OUI_FROM_DATABASE=Source Chain + OUI:58F67B* ID_OUI_FROM_DATABASE=Xia Men UnionCore Technology LTD. @@ -60217,6 +60331,9 @@ OUI:58F6BF* OUI:58F98E* ID_OUI_FROM_DATABASE=SECUDOS GmbH +OUI:58FC73* + ID_OUI_FROM_DATABASE=Arria Live Media, Inc. + OUI:58FCDB* ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. @@ -60331,6 +60448,9 @@ OUI:5C43D2* OUI:5C4527* ID_OUI_FROM_DATABASE=Juniper Networks +OUI:5C4979* + ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH + OUI:5C4A26* ID_OUI_FROM_DATABASE=Enguity Technology Corp @@ -60454,6 +60574,9 @@ OUI:5CAAFD* OUI:5CAC4C* ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. +OUI:5CADCF* + ID_OUI_FROM_DATABASE=Apple + OUI:5CB395* ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD @@ -61049,7 +61172,7 @@ OUI:6416F0* ID_OUI_FROM_DATABASE=Shehzhen Huawei Communication Technologies Co., Ltd. OUI:641A22* - ID_OUI_FROM_DATABASE=Heliospectra/Woodhill Investments + ID_OUI_FROM_DATABASE=Heliospectra AB OUI:641C67* ID_OUI_FROM_DATABASE=DIGIBRAS INDUSTRIA DO BRASILS/A @@ -61684,6 +61807,9 @@ OUI:68A3C4* OUI:68A40E* ID_OUI_FROM_DATABASE=BSH Bosch and Siemens Home Appliances GmbH +OUI:68A828* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:68A86D* ID_OUI_FROM_DATABASE=Apple @@ -62008,6 +62134,9 @@ OUI:6C90B1* OUI:6C92BF* ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd. +OUI:6C9354* + ID_OUI_FROM_DATABASE=Yaojin Technology (Shenzhen) Co., LTD. + OUI:6C94F8* ID_OUI_FROM_DATABASE=Apple @@ -62290,6 +62419,9 @@ OUI:7041B7* OUI:704642* ID_OUI_FROM_DATABASE=CHYNG HONG ELECTRONIC CO., LTD. +OUI:70480F* + ID_OUI_FROM_DATABASE=Apple + OUI:704AAE* ID_OUI_FROM_DATABASE=Xstream Flow (Pty) Ltd @@ -62614,6 +62746,9 @@ OUI:741489* OUI:7415E2* ID_OUI_FROM_DATABASE=Tri-Sen Systems Corporation +OUI:741865* + ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd + OUI:7419F8* ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. @@ -62719,6 +62854,9 @@ OUI:7465D1* OUI:746630* ID_OUI_FROM_DATABASE=T:mi Ytti +OUI:7467F7* + ID_OUI_FROM_DATABASE=Zebra Technologoes + OUI:746A3A* ID_OUI_FROM_DATABASE=Aperi Corporation @@ -62731,6 +62869,9 @@ OUI:746A8F* OUI:746B82* ID_OUI_FROM_DATABASE=MOVEK +OUI:746F19* + ID_OUI_FROM_DATABASE=ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD. + OUI:746F3D* ID_OUI_FROM_DATABASE=Contec GmbH @@ -62846,7 +62987,7 @@ OUI:74B00C* ID_OUI_FROM_DATABASE=Network Video Technologies, Inc OUI:74B9EB* - ID_OUI_FROM_DATABASE=Fujian JinQianMao Electronic Technology Co.,Ltd + ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd. OUI:74BADB* ID_OUI_FROM_DATABASE=Longconn Electornics(shenzhen)Co.,Ltd @@ -63343,6 +63484,9 @@ OUI:78D5B5* OUI:78D66F* ID_OUI_FROM_DATABASE=Aristocrat Technologies Australia Pty. Ltd. +OUI:78D6B2* + ID_OUI_FROM_DATABASE=Toshiba + OUI:78D6F0* ID_OUI_FROM_DATABASE=Samsung Electro Mechanics @@ -63433,6 +63577,9 @@ OUI:78FF57* OUI:7C0187* ID_OUI_FROM_DATABASE=Curtis Instruments, Inc. +OUI:7C0191* + ID_OUI_FROM_DATABASE=Apple + OUI:7C02BC* ID_OUI_FROM_DATABASE=Hansung Electronics Co. LTD @@ -63616,6 +63763,9 @@ OUI:7C6FF8* OUI:7C70BC* ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. +OUI:7C7176* + ID_OUI_FROM_DATABASE=Wuxi iData Technology Company Ltd. + OUI:7C72E4* ID_OUI_FROM_DATABASE=Unikey Technologies @@ -64138,6 +64288,9 @@ OUI:80B32A* OUI:80B686* ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd +OUI:80B709* + ID_OUI_FROM_DATABASE=Viptela, Inc + OUI:80B95C* ID_OUI_FROM_DATABASE=ELFTECH Co., Ltd. @@ -64192,6 +64345,9 @@ OUI:80D21D* OUI:80D433* ID_OUI_FROM_DATABASE=LzLabs GmbH +OUI:80D605* + ID_OUI_FROM_DATABASE=Apple + OUI:80D733* ID_OUI_FROM_DATABASE=QSR Automations, Inc. @@ -64261,6 +64417,9 @@ OUI:840B2D* OUI:840F45* ID_OUI_FROM_DATABASE=Shanghai GMT Digital Technologies Co., Ltd +OUI:84100D* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + OUI:84119E* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -64559,7 +64718,7 @@ OUI:84C7A9* ID_OUI_FROM_DATABASE=C3PO S.A. OUI:84C8B1* - ID_OUI_FROM_DATABASE=Incognito Software Inc. + ID_OUI_FROM_DATABASE=Incognito Software Systems Inc. OUI:84C9B2* ID_OUI_FROM_DATABASE=D-Link International @@ -64573,6 +64732,9 @@ OUI:84D32A* OUI:84D4C8* ID_OUI_FROM_DATABASE=Widex A/S +OUI:84D6D0* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + OUI:84D9C8* ID_OUI_FROM_DATABASE=Unipattern Co., @@ -64642,6 +64804,9 @@ OUI:880355* OUI:880905* ID_OUI_FROM_DATABASE=MTMCommunications +OUI:8809AF* + ID_OUI_FROM_DATABASE=Masimo Corp. + OUI:880F10* ID_OUI_FROM_DATABASE=Huami Information Technology Co.,Ltd. @@ -65197,6 +65362,9 @@ OUI:8C9236* OUI:8C94CF* ID_OUI_FROM_DATABASE=Encell Technology, Inc. +OUI:8C99E6* + ID_OUI_FROM_DATABASE=TCT Mobile Limited + OUI:8CA048* ID_OUI_FROM_DATABASE=Beijing NeTopChip Technology Co.,LTD @@ -65287,6 +65455,9 @@ OUI:8CDF9D* OUI:8CE081* ID_OUI_FROM_DATABASE=zte corporation +OUI:8CE2DA* + ID_OUI_FROM_DATABASE=Circle Media Inc + OUI:8CE78C* ID_OUI_FROM_DATABASE=DK Networks @@ -65575,6 +65746,9 @@ OUI:908D1D* OUI:908D6C* ID_OUI_FROM_DATABASE=Apple +OUI:908D78* + ID_OUI_FROM_DATABASE=D-Link International + OUI:908FCF* ID_OUI_FROM_DATABASE=UNO System Co., Ltd @@ -65659,6 +65833,9 @@ OUI:90C682* OUI:90C792* ID_OUI_FROM_DATABASE=ARRIS Group, Inc. +OUI:90C99B* + ID_OUI_FROM_DATABASE=Recore Systems + OUI:90CC24* ID_OUI_FROM_DATABASE=Synaptics, Inc @@ -65965,6 +66142,9 @@ OUI:94AE61* OUI:94AEE3* ID_OUI_FROM_DATABASE=Belden Hirschmann Industries (Suzhou) Ltd. +OUI:94B10A* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:94B40F* ID_OUI_FROM_DATABASE=Aruba Networks @@ -66298,6 +66478,9 @@ OUI:988389* OUI:9886B1* ID_OUI_FROM_DATABASE=Flyaudio corporation (China) +OUI:988744* + ID_OUI_FROM_DATABASE=Wuxi Hongda Science and Technology Co.,LTD + OUI:9889ED* ID_OUI_FROM_DATABASE=Anadem Information Inc. @@ -66391,6 +66574,9 @@ OUI:98E165* OUI:98E79A* ID_OUI_FROM_DATABASE=Foxconn(NanJing) Communication Co.,Ltd. +OUI:98E848* + ID_OUI_FROM_DATABASE=Axiim + OUI:98EC65* ID_OUI_FROM_DATABASE=Cosesy ApS @@ -66901,6 +67087,9 @@ OUI:A03A75* OUI:A03B1B* ID_OUI_FROM_DATABASE=Inspire Tech +OUI:A03E6B* + ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. + OUI:A04025* ID_OUI_FROM_DATABASE=Actioncable, Inc. @@ -67219,6 +67408,9 @@ OUI:A0F849* OUI:A0F895* ID_OUI_FROM_DATABASE=Tinno Mobile Technology Corp +OUI:A0F9E0* + ID_OUI_FROM_DATABASE=VIVATEL COMPANY LIMITED + OUI:A0FC6E* ID_OUI_FROM_DATABASE=Telegrafia a.s. @@ -67420,6 +67612,9 @@ OUI:A47E39* OUI:A481EE* ID_OUI_FROM_DATABASE=Nokia Corporation +OUI:A48431* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:A4856B* ID_OUI_FROM_DATABASE=Q Electronics Ltd @@ -67507,6 +67702,9 @@ OUI:A4B2A7* OUI:A4B36A* ID_OUI_FROM_DATABASE=JSC SDO Chromatec +OUI:A4B805* + ID_OUI_FROM_DATABASE=Apple + OUI:A4B818* ID_OUI_FROM_DATABASE=PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH @@ -67543,6 +67741,9 @@ OUI:A4C494* OUI:A4C7DE* ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd. +OUI:A4CC32* + ID_OUI_FROM_DATABASE=Inficomm Co., Ltd + OUI:A4D094* ID_OUI_FROM_DATABASE=Erwin Peters Systemtechnik GmbH @@ -68479,6 +68680,9 @@ OUI:B05706* OUI:B058C4* ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc +OUI:B05ADA* + ID_OUI_FROM_DATABASE=Hewlett Packard + OUI:B05B1F* ID_OUI_FROM_DATABASE=THERMO FISHER SCIENTIFIC S.P.A. @@ -68941,6 +69145,9 @@ OUI:B4994C* OUI:B499BA* ID_OUI_FROM_DATABASE=Hewlett-Packard Company +OUI:B49D0B* + ID_OUI_FROM_DATABASE=BQ + OUI:B49DB4* ID_OUI_FROM_DATABASE=Axion Technologies Inc. @@ -69094,6 +69301,9 @@ OUI:B8098A* OUI:B80B9D* ID_OUI_FROM_DATABASE=ROPEX Industrie-Elektronik GmbH +OUI:B813E9* + ID_OUI_FROM_DATABASE=Trace Live Network + OUI:B81413* ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd. @@ -69586,6 +69796,9 @@ OUI:BC305B* OUI:BC307D* ID_OUI_FROM_DATABASE=Wistron Neweb Corp. +OUI:BC307E* + ID_OUI_FROM_DATABASE=Wistron Neweb Corp + OUI:BC3400* ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. @@ -69685,6 +69898,9 @@ OUI:BC6A2F* OUI:BC6B4D* ID_OUI_FROM_DATABASE=Alcatel-Lucent +OUI:BC6C21* + ID_OUI_FROM_DATABASE=Apple + OUI:BC6E64* ID_OUI_FROM_DATABASE=Sony Mobile Communications AB @@ -69757,6 +69973,9 @@ OUI:BC9889* OUI:BC99BC* ID_OUI_FROM_DATABASE=FonSee Technology Inc. +OUI:BC9C31* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:BC9CC5* ID_OUI_FROM_DATABASE=Beijing Huafei Technology Co., Ltd. @@ -69826,6 +70045,9 @@ OUI:BCCD45* OUI:BCCFCC* ID_OUI_FROM_DATABASE=HTC Corporation +OUI:BCD11F* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:BCD165* ID_OUI_FROM_DATABASE=Cisco SPVTG @@ -70528,6 +70750,9 @@ OUI:C49805* OUI:C49A02* ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communicaitons) +OUI:C49E41* + ID_OUI_FROM_DATABASE=G24 Power Limited + OUI:C49FF3* ID_OUI_FROM_DATABASE=Mciao Technologies, Inc. @@ -70540,6 +70765,9 @@ OUI:C4AAA1* OUI:C4AD21* ID_OUI_FROM_DATABASE=MEDIAEDGE Corporation +OUI:C4ADF1* + ID_OUI_FROM_DATABASE=GOPEACE Inc. + OUI:C4B512* ID_OUI_FROM_DATABASE=General Electric Digital Energy @@ -70549,6 +70777,9 @@ OUI:C4BA99* OUI:C4BAA3* ID_OUI_FROM_DATABASE=Beijing Winicssec Technologies Co., Ltd. +OUI:C4BBEA* + ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc + OUI:C4BD6A* ID_OUI_FROM_DATABASE=SKF GmbH @@ -70618,6 +70849,9 @@ OUI:C4EEAE* OUI:C4EEF5* ID_OUI_FROM_DATABASE=Oclaro, Inc. +OUI:C4EF70* + ID_OUI_FROM_DATABASE=Home Skinovations + OUI:C4F464* ID_OUI_FROM_DATABASE=Spica international @@ -70759,6 +70993,9 @@ OUI:C86000* OUI:C864C7* ID_OUI_FROM_DATABASE=zte corporation +OUI:C869CD* + ID_OUI_FROM_DATABASE=Apple + OUI:C86C1E* ID_OUI_FROM_DATABASE=Display Systems Ltd @@ -70804,6 +71041,9 @@ OUI:C88A83* OUI:C88B47* ID_OUI_FROM_DATABASE=Nolangroup S.P.A con Socio Unico +OUI:C88ED1* + ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. + OUI:C8903E* ID_OUI_FROM_DATABASE=Pakton Technologies @@ -71062,6 +71302,9 @@ OUI:CC1AFA* OUI:CC1EFF* ID_OUI_FROM_DATABASE=Metrological Group BV +OUI:CC20E8* + ID_OUI_FROM_DATABASE=Apple + OUI:CC2218* ID_OUI_FROM_DATABASE=InnoDigital Co., Ltd. @@ -71419,6 +71662,9 @@ OUI:D00EA4* OUI:D00ED9* ID_OUI_FROM_DATABASE=TAICANG T AND W ELECTRONICS CO LTD +OUI:D00F6D* + ID_OUI_FROM_DATABASE=T&W Electronics Company + OUI:D01242* ID_OUI_FROM_DATABASE=BIOS Corporation @@ -71482,6 +71728,9 @@ OUI:D03972* OUI:D039B3* ID_OUI_FROM_DATABASE=ARRIS Group, Inc. +OUI:D03E5C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:D0431E* ID_OUI_FROM_DATABASE=Dell Inc. @@ -71599,6 +71848,9 @@ OUI:D07650* OUI:D07AB5* ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd +OUI:D07C2D* + ID_OUI_FROM_DATABASE=Leie IOT technology Co., Ltd + OUI:D07DE5* ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc. @@ -72004,6 +72256,9 @@ OUI:D46E5C* OUI:D46F42* ID_OUI_FROM_DATABASE=WAXESS USA Inc +OUI:D47208* + ID_OUI_FROM_DATABASE=Bragi GmbH + OUI:D479C3* ID_OUI_FROM_DATABASE=Cameronet GmbH & Co. KG @@ -72427,6 +72682,9 @@ OUI:D888CE* OUI:D88A3B* ID_OUI_FROM_DATABASE=UNIT-EM +OUI:D88B4C* + ID_OUI_FROM_DATABASE=KingTing Tech. + OUI:D88D5C* ID_OUI_FROM_DATABASE=Elentec @@ -72529,6 +72787,9 @@ OUI:D8C068* OUI:D8C3FB* ID_OUI_FROM_DATABASE=DETRACOM +OUI:D8C4E9* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:D8C691* ID_OUI_FROM_DATABASE=Hichan Technology Corp. @@ -72787,12 +73048,18 @@ OUI:DC7FA4* OUI:DC825B* ID_OUI_FROM_DATABASE=JANUS, spol. s r.o. +OUI:DC82F6* + ID_OUI_FROM_DATABASE=iPort + OUI:DC85DE* ID_OUI_FROM_DATABASE=Azurewave Technologies., inc. OUI:DC86D8* ID_OUI_FROM_DATABASE=Apple, Inc +OUI:DC9A8E* + ID_OUI_FROM_DATABASE=Nanjing Cocomm electronics co., LTD + OUI:DC9B1E* ID_OUI_FROM_DATABASE=Intercom, Inc. @@ -72868,6 +73135,9 @@ OUI:DCCE41* OUI:DCCEBC* ID_OUI_FROM_DATABASE=Shenzhen JSR Technology Co.,Ltd. +OUI:DCCEC1* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:DCCF94* ID_OUI_FROM_DATABASE=Beijing Rongcheng Hutong Technology Co., Ltd. @@ -72892,6 +73162,9 @@ OUI:DCDA4F* OUI:DCDB70* ID_OUI_FROM_DATABASE=Tonfunk Systementwicklung und Service GmbH +OUI:DCDC07* + ID_OUI_FROM_DATABASE=TRP Systems BV + OUI:DCDECA* ID_OUI_FROM_DATABASE=Akyllor @@ -72916,6 +73189,9 @@ OUI:DCEB94* OUI:DCEC06* ID_OUI_FROM_DATABASE=Heimi Network Technology Co., Ltd. +OUI:DCEF09* + ID_OUI_FROM_DATABASE=Netgear + OUI:DCF05D* ID_OUI_FROM_DATABASE=Letta Teknoloji @@ -73018,6 +73294,9 @@ OUI:E031D0* OUI:E03560* ID_OUI_FROM_DATABASE=Challenger Supply Holdings, LLC +OUI:E03676* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:E036E3* ID_OUI_FROM_DATABASE=Stage One International Co., Ltd. @@ -73396,6 +73675,9 @@ OUI:E432CB* OUI:E43593* ID_OUI_FROM_DATABASE=Hangzhou GoTo technology Co.Ltd +OUI:E435C8* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:E435FB* ID_OUI_FROM_DATABASE=Sabre Technology (Hull) Ltd @@ -73441,6 +73723,9 @@ OUI:E45614* OUI:E457A8* ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc. +OUI:E458B8* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:E458E7* ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd @@ -73543,12 +73828,18 @@ OUI:E498D6* OUI:E4A32F* ID_OUI_FROM_DATABASE=Shanghai Artimen Technology Co., Ltd. +OUI:E4A387* + ID_OUI_FROM_DATABASE=Control Solutions LLC + OUI:E4A5EF* ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD. OUI:E4A7FD* ID_OUI_FROM_DATABASE=Cellco Partnership +OUI:E4AA5D* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:E4AB46* ID_OUI_FROM_DATABASE=UAB Selteka @@ -73696,6 +73987,9 @@ OUI:E81132* OUI:E81324* ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD +OUI:E81363* + ID_OUI_FROM_DATABASE=Comstock RD, Inc. + OUI:E8150E* ID_OUI_FROM_DATABASE=Nokia Corporation @@ -73981,6 +74275,9 @@ OUI:E8DAAA* OUI:E8DE27* ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. +OUI:E8DED6* + ID_OUI_FROM_DATABASE=Intrising Networks, Inc. + OUI:E8DFF2* ID_OUI_FROM_DATABASE=PRF Co., Ltd. @@ -74119,6 +74416,9 @@ OUI:EC3091* OUI:EC3586* ID_OUI_FROM_DATABASE=Apple +OUI:EC388F* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + OUI:EC3BF0* ID_OUI_FROM_DATABASE=NovelSat @@ -74188,6 +74488,9 @@ OUI:EC6264* OUI:EC63E5* ID_OUI_FROM_DATABASE=ePBoard Design LLC +OUI:EC64E7* + ID_OUI_FROM_DATABASE=MOCACARE Corporation + OUI:EC66D1* ID_OUI_FROM_DATABASE=B&W Group LTD @@ -74287,6 +74590,9 @@ OUI:ECBBAE* OUI:ECBD09* ID_OUI_FROM_DATABASE=FUSION Electronics Ltd +OUI:ECBD1D* + ID_OUI_FROM_DATABASE=Cisco Systems + OUI:ECC38A* ID_OUI_FROM_DATABASE=Accuenergy (CANADA) Inc @@ -74875,6 +75181,9 @@ OUI:F43E9D* OUI:F44227* ID_OUI_FROM_DATABASE=S & S Research Inc. +OUI:F4428F* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + OUI:F44450* ID_OUI_FROM_DATABASE=BND Co., Ltd. @@ -74890,6 +75199,9 @@ OUI:F4472A* OUI:F44848* ID_OUI_FROM_DATABASE=Amscreen Group Ltd +OUI:F44D30* + ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co.,Ltd. + OUI:F44E05* ID_OUI_FROM_DATABASE=Cisco @@ -75454,6 +75766,9 @@ OUI:F8C091* OUI:F8C288* ID_OUI_FROM_DATABASE=Cisco +OUI:F8C372* + ID_OUI_FROM_DATABASE=TSUZUKI DENKI + OUI:F8C397* ID_OUI_FROM_DATABASE=NZXT Corp. Ltd. diff --git a/hwdb/20-pci-classes.hwdb b/hwdb/20-pci-classes.hwdb index 5702c4011..3c0c465e5 100644 --- a/hwdb/20-pci-classes.hwdb +++ b/hwdb/20-pci-classes.hwdb @@ -95,6 +95,9 @@ pci:v*d*sv*sd*bc02sc06* pci:v*d*sv*sd*bc02sc07* ID_PCI_SUBCLASS_FROM_DATABASE=Infiniband controller +pci:v*d*sv*sd*bc02sc08* + ID_PCI_SUBCLASS_FROM_DATABASE=Fabric controller + pci:v*d*sv*sd*bc02sc80* ID_PCI_SUBCLASS_FROM_DATABASE=Network controller @@ -554,5 +557,8 @@ pci:v*d*sv*sd*bc12sc00* pci:v*d*sv*sd*bc13* ID_PCI_CLASS_FROM_DATABASE=Non-Essential Instrumentation +pci:v*d*sv*sd*bc40* + ID_PCI_CLASS_FROM_DATABASE=Coprocessor + pci:v*d*sv*sd*bcFF* ID_PCI_CLASS_FROM_DATABASE=Unassigned class diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb index 8316bc979..61164acfe 100644 --- a/hwdb/20-pci-vendor-model.hwdb +++ b/hwdb/20-pci-vendor-model.hwdb @@ -1847,6 +1847,9 @@ pci:v00001002d00004151* pci:v00001002d00004151sv00001043sd0000C004* ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600 Series] (A9600SE) +pci:v00001002d00004151sv0000174Bsd00007C37* + ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600 Series] (Radeon 9600 SE) + pci:v00001002d00004152* ID_MODEL_FROM_DATABASE=RV360 [Radeon 9600/X1050 Series] @@ -1934,6 +1937,9 @@ pci:v00001002d00004171* pci:v00001002d00004171sv00001043sd0000C005* ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600] (Secondary) (A9600SE (Secondary)) +pci:v00001002d00004171sv0000174Bsd00007C36* + ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600] (Secondary) (Radeon 9600 SE (secondary)) + pci:v00001002d00004172* ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600/X1050 Series] (Secondary) @@ -3422,6 +3428,9 @@ pci:v00001002d00005159sv0000148Csd00002003* pci:v00001002d00005159sv0000148Csd00002023* ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (RV100 QY [Radeon 7000 Evil Master Multi-Display]) +pci:v00001002d00005159sv0000148Csd00002081* + ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (RV6DE) + pci:v00001002d00005159sv0000174Bsd00000280* ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (Radeon RV100 QY [Radeon 7000/VE]) @@ -17060,6 +17069,9 @@ pci:v00001077d00002020* pci:v00001077d00002031* ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter +pci:v00001077d00002031sv0000103Csd00008002* + ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (3830C 16G Fibre Channel Host Bus Adapter) + pci:v00001077d00002100* ID_MODEL_FROM_DATABASE=QLA2100 64-bit Fibre Channel Adapter @@ -21335,6 +21347,12 @@ pci:v000010B5d00009656sv00001885sd00000700* pci:v000010B5d00009656sv00001885sd00000701* ID_MODEL_FROM_DATABASE=PCI9656 PCI <-> IOBus Bridge (Tsunami FPGA PMC with Altera Stratix S30) +pci:v000010B5d00009733* + ID_MODEL_FROM_DATABASE=PEX 9733 33-lane, 9-port PCI Express Gen 3 (8.0 GT/s) Switch + +pci:v000010B5d00009749* + ID_MODEL_FROM_DATABASE=PEX 9749 49-lane, 13-port PCI Express Gen 3 (8.0 GT/s) Switch + pci:v000010B5d0000A100* ID_MODEL_FROM_DATABASE=Blackmagic Design DeckLink @@ -22497,13 +22515,13 @@ pci:v000010CDd00001200* ID_MODEL_FROM_DATABASE=ASC1200 [(abp940) Fast SCSI-II] pci:v000010CDd00001300* - ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U + ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] pci:v000010CDd00001300sv000010CDsd00001310* - ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U (ASC1300 SCSI Adapter) + ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] (ASC1300/3030 SCSI adapter) pci:v000010CDd00001300sv00001195sd00001320* - ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U (Ultra-SCSI CardBus PC Card REX CB31) + ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] (Ultra-SCSI CardBus PC Card REX CB31) pci:v000010CDd00002300* ID_MODEL_FROM_DATABASE=ABP940-UW @@ -26223,7 +26241,7 @@ pci:v000010DEd0000056Dsv00001019sd0000297A* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) pci:v000010DEd0000056Dsv000010DEsd0000CB73* - ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port) + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCI Bridge) pci:v000010DEd0000056E* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge @@ -26240,6 +26258,9 @@ pci:v000010DEd0000056F* pci:v000010DEd0000056Fsv00001019sd0000297A* ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) +pci:v000010DEd0000056Fsv000010DEsd00000000* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port) + pci:v000010DEd000005B1* ID_MODEL_FROM_DATABASE=NF200 PCIe 2.0 switch @@ -26531,6 +26552,9 @@ pci:v000010DEd00000643* pci:v000010DEd00000644* ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS] +pci:v000010DEd00000644sv0000174Bsd00009600* + ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS] (Geforce 9500GS 512M DDR2 V/D/HDMI) + pci:v000010DEd00000645* ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS] @@ -26708,6 +26732,9 @@ pci:v000010DEd000006DFsv000010DEsd0000087F* pci:v000010DEd000006E0* ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GE] +pci:v000010DEd000006E0sv0000107Dsd00005A96* + ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GE] (Geforce 9300GE) + pci:v000010DEd000006E1* ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GS] @@ -30404,6 +30431,15 @@ pci:v000010DEd000013F2* pci:v000010DEd00001401* ID_MODEL_FROM_DATABASE=GM206 [GeForce GTX 960] +pci:v000010DEd00001617* + ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 980M] + +pci:v000010DEd00001618* + ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 970M] + +pci:v000010DEd00001619* + ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M] + pci:v000010DEd000017C2* ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX TITAN X] @@ -34367,6 +34403,12 @@ pci:v0000111Dd00008088sv00001093sd00007602* pci:v0000111Dd0000808F* ID_MODEL_FROM_DATABASE=PES32NT8AG2 +pci:v0000111Dd000080CF* + ID_MODEL_FROM_DATABASE=F32P08xG3 [PCIe boot mode] + +pci:v0000111Dd000080D2* + ID_MODEL_FROM_DATABASE=F32P08xG3 NVMe controller + pci:v0000111E* ID_VENDOR_FROM_DATABASE=Eldec @@ -40107,7 +40149,13 @@ pci:v00001244d00000A00sv00001244sd00000A00* ID_MODEL_FROM_DATABASE=A1 ISDN [Fritz] (FRITZ!Card ISDN Controller) pci:v00001244d00000E00* - ID_MODEL_FROM_DATABASE=Fritz!PCI v2.0 ISDN + ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.0 ISDN + +pci:v00001244d00000E80* + ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.1 ISDN + +pci:v00001244d00000E80sv00001244sd00000E00* + ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.1 ISDN (PSB 3100F (AVM KAFKA) [Fritz!Card PCI v2.1]) pci:v00001244d00001100* ID_MODEL_FROM_DATABASE=C2 ISDN @@ -44895,7 +44943,7 @@ pci:v00001409d00007168sv00001409sd00004027* ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4027A (1x RS232 port)) pci:v00001409d00007168sv00001409sd00004037* - ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4037A (2x RS232 port)) + ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4037A(L) [SUNIX SUN1889] (2x RS232 port)) pci:v00001409d00007168sv00001409sd00004056* ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4056A (4x RS232)) @@ -48146,6 +48194,12 @@ pci:v000014E4d000016A2sv0000103Csd00001916* pci:v000014E4d000016A2sv0000103Csd00001917* ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (HP FlexFabric 20Gb 2-port 630M Adapter) +pci:v000014E4d000016A2sv0000103Csd00002231* + ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (3820C 10/20Gb Converged Network Adapter) + +pci:v000014E4d000016A2sv0000103Csd000022FA* + ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (FlexFabric 10Gb 2-port 536FLB Adapter) + pci:v000014E4d000016A3* ID_MODEL_FROM_DATABASE=NetXtreme BCM57786 Gigabit Ethernet PCIe @@ -48158,6 +48212,12 @@ pci:v000014E4d000016A4sv0000103Csd00001916* pci:v000014E4d000016A4sv0000103Csd00001917* ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (HP NPAR 20Gb 2-port 630M Adapter) +pci:v000014E4d000016A4sv0000103Csd00002231* + ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (3820C 10/20Gb Converged Network Adapter (NPAR 1.5)) + +pci:v000014E4d000016A4sv0000103Csd000022FA* + ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (FlexFabric 10Gb 2-port 536FLB Adapter (NPAR 1.5)) + pci:v000014E4d000016A5* ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet Multi Function @@ -48287,6 +48347,12 @@ pci:v000014E4d000016ADsv0000103Csd00001916* pci:v000014E4d000016ADsv0000103Csd00001917* ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (HP FlexFabric 20Gb 2-port 630M Adapter) +pci:v000014E4d000016ADsv0000103Csd00002231* + ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (3820C 10/20Gb Converged Network Adapter (SR-IOV VF)) + +pci:v000014E4d000016ADsv0000103Csd000022FA* + ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (FlexFabric 10Gb 2-port 536FLB Adapter (SR-IOV VF)) + pci:v000014E4d000016AE* ID_MODEL_FROM_DATABASE=NetXtreme II BCM57810 10 Gigabit Ethernet Multi Function @@ -49052,6 +49118,9 @@ pci:v000014E4d000043D9* pci:v000014E4d000043DF* ID_MODEL_FROM_DATABASE=BCM4354 802.11ac Wireless LAN SoC +pci:v000014E4d000043E9* + ID_MODEL_FROM_DATABASE=BCM4358 802.11ac Wireless LAN SoC + pci:v000014E4d000043EC* ID_MODEL_FROM_DATABASE=BCM4356 802.11ac Wireless Network Adapter @@ -49232,6 +49301,9 @@ pci:v000014E4d00008602* pci:v000014E4d0000A8D8* ID_MODEL_FROM_DATABASE=BCM43224/5 Wireless Network Adapter +pci:v000014E4d0000AA52* + ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC + pci:v000014E4d0000B302* ID_MODEL_FROM_DATABASE=BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller @@ -52266,199 +52338,199 @@ pci:v0000168Cd00000012sv00001B47sd0000AA00* ID_MODEL_FROM_DATABASE=AR5211 Wireless Network Adapter [AR5001X 802.11ab] (8460 802.11ab Wireless CardBus Adapter) pci:v0000168Cd00000013* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter pci:v0000168Cd00000013sv00000308sd00003402* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AG-100 802.11ag Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AG-100 802.11ag Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00000308sd00003405* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (G-102 v2 802.11g Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (G-102 v2 802.11g Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00000308sd00003408* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (G-170S 802.11g Wireless CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (G-170S 802.11g Wireless CardBus Adapter) pci:v0000168Cd00000013sv00000E11sd000000E5* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (NC6000/NC8000 laptop) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (NC6000/NC8000 laptop) pci:v0000168Cd00000013sv000010B7sd00006002* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (3CRWE154A72 802.11abg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (3CRWE154A72 802.11abg Cardbus Adapter) pci:v0000168Cd00000013sv00001113sd0000D301* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Philips CPWNA100 Wireless CardBus adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Philips CPWNA100 Wireless CardBus adapter) pci:v0000168Cd00000013sv00001113sd0000EE23* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (SMCWPCIT-G 108Mbps Wireless PCI adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (SMCWPCIT-G 108Mbps Wireless PCI adapter) pci:v0000168Cd00000013sv00001154sd0000033B* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Buffalo WLI-CB-AMG54) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Buffalo WLI-CB-AMG54) pci:v0000168Cd00000013sv00001154sd0000034E* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Buffalo WLI-CB-AG108HP 802.11abg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Buffalo WLI-CB-AG108HP 802.11abg Cardbus Adapter) pci:v0000168Cd00000013sv00001186sd00003202* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (DWL-G650 (Rev B3,B5) Wireless cardbus adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (DWL-G650 (Rev B3,B5) Wireless cardbus adapter) pci:v0000168Cd00000013sv00001186sd00003203* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. A)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. A)) pci:v0000168Cd00000013sv00001186sd00003A07* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirXpert DWL-AG650 Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirXpert DWL-AG650 Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00001186sd00003A08* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirXpert DWL-AG520 Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirXpert DWL-AG520 Wireless PCI Adapter) pci:v0000168Cd00000013sv00001186sd00003A12* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)) pci:v0000168Cd00000013sv00001186sd00003A13* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. B)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. B)) pci:v0000168Cd00000013sv00001186sd00003A14* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.A)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.A)) pci:v0000168Cd00000013sv00001186sd00003A17* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-G680 Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-G680 Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00001186sd00003A18* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-G550 Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-G550 Wireless PCI Adapter) pci:v0000168Cd00000013sv00001186sd00003A1A* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WNA-2330 802.11bg Wireless CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WNA-2330 802.11bg Wireless CardBus Adapter) pci:v0000168Cd00000013sv00001186sd00003A63* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00001186sd00003A93* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Conceptronic C54I Wireless 801.11g PCI card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Conceptronic C54I Wireless 801.11g PCI card) pci:v0000168Cd00000013sv00001186sd00003A94* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Conceptronic C54C 802.11g Wireless Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Conceptronic C54C 802.11g Wireless Cardbus Adapter) pci:v0000168Cd00000013sv00001186sd00003AB0* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Allnet ALL0281 Wireless PCI Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Allnet ALL0281 Wireless PCI Card) pci:v0000168Cd00000013sv00001385sd00004600* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card) pci:v0000168Cd00000013sv00001385sd00004610* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card) pci:v0000168Cd00000013sv00001385sd00004900* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311v1 802.11g Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311v1 802.11g Wireless PCI Adapter) pci:v0000168Cd00000013sv00001385sd00004A00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG311 802.11a/g Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG311 802.11a/g Wireless PCI Adapter) pci:v0000168Cd00000013sv00001385sd00004B00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.A/B)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.A/B)) pci:v0000168Cd00000013sv00001385sd00004D00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A2)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A2)) pci:v0000168Cd00000013sv00001385sd00004F00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511U Double 108 Mbps Wireless PC Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511U Double 108 Mbps Wireless PC Card) pci:v0000168Cd00000013sv00001385sd00005A00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A3)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311T (rev.A3 v1h3/v1h4) 108 Mbps Wireless PCI Adapter [AR2412]) pci:v0000168Cd00000013sv00001385sd00005B00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.C)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.C)) pci:v0000168Cd00000013sv00001385sd00005D00* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPN511 RangeMax Wireless PC Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPN511 RangeMax Wireless PC Card) pci:v0000168Cd00000013sv00001458sd0000E911* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (GN-WIAG02) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (GN-WIAG02) pci:v0000168Cd00000013sv00001468sd00000403* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (U10H014 802.11g Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (U10H014 802.11g Cardbus Adapter) pci:v0000168Cd00000013sv00001468sd00000408* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (ThinkPad 11b/g Wireless LAN Mini PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (ThinkPad 11b/g Wireless LAN Mini PCI Adapter) pci:v0000168Cd00000013sv000014B7sd00000A10* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8480-WD 802.11abg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8480-WD 802.11abg Cardbus Adapter) pci:v0000168Cd00000013sv000014B7sd00000A60* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter) pci:v0000168Cd00000013sv000014B7sd0000AA30* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8800-FC 802.11bg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8800-FC 802.11bg Cardbus Adapter) pci:v0000168Cd00000013sv000014B7sd0000AA40* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8470-WD 802.11bg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8470-WD 802.11bg Cardbus Adapter) pci:v0000168Cd00000013sv000014B9sd0000CB21* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (CB21 802.11a/b/g Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (CB21 802.11a/b/g Cardbus Adapter) pci:v0000168Cd00000013sv00001668sd00001026* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (IBM HighRate 11 a/b/g Wireless CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (IBM HighRate 11 a/b/g Wireless CardBus Adapter) pci:v0000168Cd00000013sv0000168Csd00000013* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter) pci:v0000168Cd00000013sv0000168Csd00001025* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (DWL-G650B2 Wireless CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (DWL-G650B2 Wireless CardBus Adapter) pci:v0000168Cd00000013sv0000168Csd00001027* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius NL-3054CB ARIES b/g CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius NL-3054CB ARIES b/g CardBus Adapter) pci:v0000168Cd00000013sv0000168Csd00001042* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Ubiquiti Networks SuperRange a/b/g Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Ubiquiti Networks SuperRange a/b/g Cardbus Adapter) pci:v0000168Cd00000013sv0000168Csd00001051* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (EZ Connect g 802.11g 108Mbps Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (EZ Connect g 802.11g 108Mbps Wireless PCI Adapter) pci:v0000168Cd00000013sv0000168Csd00002026* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter) pci:v0000168Cd00000013sv0000168Csd00002027* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPlus DWL-G520 Wireless PCI Adapter (rev. A)) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPlus DWL-G520 Wireless PCI Adapter (rev. A)) pci:v0000168Cd00000013sv0000168Csd00002041* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter) pci:v0000168Cd00000013sv0000168Csd00002042* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter) pci:v0000168Cd00000013sv0000168Csd00002051* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (TRENDnet TEW-443PI Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (TRENDnet TEW-443PI Wireless PCI Adapter) pci:v0000168Cd00000013sv000016A5sd0000160A* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (BWP712 802.11bg Wireless CardBus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (BWP712 802.11bg Wireless CardBus Adapter) pci:v0000168Cd00000013sv000016ABsd00007302* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Trust Speedshare Turbo Pro Wireless PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Trust Speedshare Turbo Pro Wireless PCI Adapter) pci:v0000168Cd00000013sv00001737sd00000017* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPC55AG) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPC55AG) pci:v0000168Cd00000013sv00001737sd00000026* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WMP55AG v1.1) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WMP55AG v1.1) pci:v0000168Cd00000013sv00001737sd00000035* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPC55AG v1.2 802.11abg Cardbus Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPC55AG v1.2 802.11abg Cardbus Adapter) pci:v0000168Cd00000013sv00001737sd00000036* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WMP55AG v1.2 802.11abg PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WMP55AG v1.2 802.11abg PCI Adapter) pci:v0000168Cd00000013sv00001799sd00003000* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (F6D3000 Dual-Band Wireless A+G Desktop Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (F6D3000 Dual-Band Wireless A+G Desktop Card) pci:v0000168Cd00000013sv00001799sd00003010* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (F6D3010 Dual-Band Wireless A+G Notebook Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (F6D3010 Dual-Band Wireless A+G Notebook Card) pci:v0000168Cd00000013sv000017CFsd00000042* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter) pci:v0000168Cd00000013sv0000185Fsd00001012* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (CM9 Wireless a/b/g MiniPCI Adapter) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (CM9 Wireless a/b/g MiniPCI Adapter) pci:v0000168Cd00000013sv0000185Fsd00002012* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Wistron NeWeb WLAN a+b+g model CB9) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Wistron NeWeb WLAN a+b+g model CB9) pci:v0000168Cd00000013sv0000A727sd00006801* - ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (3CRXJK10075 OfficeConnect Wireless 108Mbps 11g XJACK PC Card) + ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (3CRXJK10075 OfficeConnect Wireless 108Mbps 11g XJACK PC Card) pci:v0000168Cd0000001A* ID_MODEL_FROM_DATABASE=AR2413/AR2414 Wireless Network Adapter [AR5005G(S) 802.11bg] @@ -52733,6 +52805,9 @@ pci:v0000168Cd0000002Asv00000777sd00004F05* pci:v0000168Cd0000002Asv0000103Csd00003041* ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (AR5BHB92-H 802.11abgn Wireless Half-size Mini PCIe Card [AR9280]) +pci:v0000168Cd0000002Asv0000103Csd00003042* + ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (AzureWave AW-NE773 802.11abgn Wireless Half-size Mini PCIe Card [AR9280]) + pci:v0000168Cd0000002Asv0000105Bsd0000E006* ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (T77H053.00 802.11bgn Wireless Mini PCIe Card [AR9281]) @@ -53204,6 +53279,12 @@ pci:v000016D5d00007004* pci:v000016D5d00007005* ID_MODEL_FROM_DATABASE=XMC-7K410CC: User-Configurable Kintex-7 FPGA, 410k logic cells, conduction-cooled +pci:v000016D5d00007006* + ID_MODEL_FROM_DATABASE=XMC-7A200: User-Configurable Artix-7 FPGA, 200k logic cells with Plug-In I/O + +pci:v000016D5d00007007* + ID_MODEL_FROM_DATABASE=XMC-7A200CC: User-Configurable Conduction-Cooled Artix-7 FPGA, with 200k logic cells + pci:v000016DA* ID_VENDOR_FROM_DATABASE=Advantech Co., Ltd. @@ -53471,6 +53552,12 @@ pci:v0000177Dd00000095* pci:v0000177Dd00000096* ID_MODEL_FROM_DATABASE=Octeon III CN70XX Network Processor +pci:v0000177Dd00009700* + ID_MODEL_FROM_DATABASE=Octeon III CN73XX Network Processor + +pci:v0000177Dd00009800* + ID_MODEL_FROM_DATABASE=Octeon Fusion CNF75XX Processor + pci:v0000177Dd0000A001* ID_MODEL_FROM_DATABASE=THUNDERX MRML Bridge @@ -55295,6 +55382,9 @@ pci:v00001924d00000923sv00001924sd0000800B* pci:v00001924d00000923sv00001924sd0000800E* ID_MODEL_FROM_DATABASE=SFC9140 (SFN7x42Q-R2 Flareon Ultra 7000 Series 10/40G Adapter) +pci:v00001924d00000923sv00001924sd0000800F* + ID_MODEL_FROM_DATABASE=SFC9140 (SFN7xx4F-R1 Flareon Ultra 7000 Series 10G Adapter) + pci:v00001924d00001803* ID_MODEL_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm] @@ -56819,6 +56909,9 @@ pci:v00001B4Bd00009120* pci:v00001B4Bd00009123* ID_MODEL_FROM_DATABASE=88SE9123 PCIe SATA 6.0 Gb/s controller +pci:v00001B4Bd00009123sv0000DC93sd0000600E* + ID_MODEL_FROM_DATABASE=88SE9123 PCIe SATA 6.0 Gb/s controller (DC-6xxe series SATA 6G controller) + pci:v00001B4Bd00009125* ID_MODEL_FROM_DATABASE=88SE9125 PCIe SATA 6.0 Gb/s controller @@ -56915,6 +57008,9 @@ pci:v00001B73d00001000sv00001D5Csd00001000* pci:v00001B73d00001009* ID_MODEL_FROM_DATABASE=FL1009 USB 3.0 Host Controller +pci:v00001B73d00001100* + ID_MODEL_FROM_DATABASE=FL1100 USB 3.0 Host Controller + pci:v00001B74* ID_VENDOR_FROM_DATABASE=OpenVox Communication Co. Ltd. @@ -57191,6 +57287,9 @@ pci:v00001CE4d00000002* pci:v00001CF7* ID_VENDOR_FROM_DATABASE=Subspace Dynamics +pci:v00001D00* + ID_VENDOR_FROM_DATABASE=Pure Storage + pci:v00001D21* ID_VENDOR_FROM_DATABASE=Allo @@ -57356,6 +57455,36 @@ pci:v00001FC9d00003314sv00000000sd00003012* pci:v00001FC9d00003314sv00000000sd00003014* ID_MODEL_FROM_DATABASE=10-Giga TOE Dual Port Low Profile SmartNIC (10-Giga TOE Dual Port CX4 Low Profile SmartNIC) +pci:v00001FC9d00004010* + ID_MODEL_FROM_DATABASE=TN4010 Clean SROM + +pci:v00001FC9d00004020* + ID_MODEL_FROM_DATABASE=TN9030 10GbE CX4 Ethernet Adapter + +pci:v00001FC9d00004022* + ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter + +pci:v00001FC9d00004022sv00001186sd00004D00* + ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter (DXE-810S 10GbE SFP+ Ethernet Adapter) + +pci:v00001FC9d00004022sv00001FC9sd00003015* + ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter (Ethernet Adapter) + +pci:v00001FC9d00004024* + ID_MODEL_FROM_DATABASE=TN9210 10GBase-T Ethernet Adapter + +pci:v00001FC9d00004025* + ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter + +pci:v00001FC9d00004025sv00001186sd00002900* + ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter (DXE-810T 10GBase-T Ethernet Adapter) + +pci:v00001FC9d00004025sv00001FC9sd00003015* + ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter (Ethernet Adapter) + +pci:v00001FC9d00004026* + ID_MODEL_FROM_DATABASE=TN9610 10GbE SFP+ Ethernet Adapter + pci:v00001FCC* ID_VENDOR_FROM_DATABASE=StreamLabs @@ -63962,6 +64091,12 @@ pci:v00008086d000015A2* pci:v00008086d000015A3* ID_MODEL_FROM_DATABASE=Ethernet Connection (3) I218-V +pci:v00008086d000015A4* + ID_MODEL_FROM_DATABASE=Ethernet Switch FM10000 Host Interface + +pci:v00008086d000015A5* + ID_MODEL_FROM_DATABASE=Ethernet Switch FM10000 Host Virtual Interface + pci:v00008086d000015A8* ID_MODEL_FROM_DATABASE=Ethernet Connection X552 Virtual Function diff --git a/hwdb/60-evdev.hwdb b/hwdb/60-evdev.hwdb index 815ac2451..ca82f8a51 100644 --- a/hwdb/60-evdev.hwdb +++ b/hwdb/60-evdev.hwdb @@ -43,6 +43,11 @@ # Apple ######################################### +# Macbook2,1 (late 2006), single-button touchpad +evdev:input:b0003v05ACp021B* + EVDEV_ABS_00=256:1471:12 + EVDEV_ABS_01=256:831:12 + # Macbook5,1 (unibody), aka wellspring3 evdev:input:b0003v05ACp0236* evdev:input:b0003v05ACp0237* @@ -83,6 +88,16 @@ evdev:input:b0003v05ACp025b* EVDEV_ABS_35=::94 EVDEV_ABS_36=::92 +######################################### +# ASUS +######################################### +# Asus K52JT +evdev:name:ETPS/2 Elantech Touchpad:dmi:bvn*:bvr*:bd*:svnASUSTeKComputerInc.:pnK52JT:* + EVDEV_ABS_00=::18 + EVDEV_ABS_01=::16 + EVDEV_ABS_35=::18 + EVDEV_ABS_36=::16 + ######################################### # Google ######################################### diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb index 76dcfd1b8..e2855095c 100644 --- a/hwdb/70-mouse.hwdb +++ b/hwdb/70-mouse.hwdb @@ -36,10 +36,11 @@ # where /dev/input/eventXX is the mouse in question. If in # doubt, simply use /dev/input/event* to reload all input rules. # -# If your changes are generally applicable, open a bug report on -# http://bugs.freedesktop.org/enter_bug.cgi?product=systemd -# and include your new rules, a description of the device, and the -# output of +# If your changes are generally applicable, preferably send them as a pull +# request to +# https://github.com/systemd/ +# or create a bug report on the issue tracker located there and include your +# new rules, a description of the device, and the output of # udevadm info /dev/input/eventXX # (or /dev/input/event*). # @@ -238,6 +239,10 @@ mouse:usb:v046dpc245:name:Logitech Gaming Mouse G400: mouse:usb:v046dpc24c:name:Logitech G400s Optical Gaming Mouse: MOUSE_DPI=400@1000 *800@1000 2000@1000 4000@1000 +# Logitech G402 Hyperion Fury +mouse:usb:v046dpc07e:name:Logitech Gaming Mouse G402: + MOUSE_DPI=400@1000 *800@1000 1600@1000 3200@1000 + # Logitech B605 Wireless Mouse (also M505) mouse:usb:v046dp101d:name:Logitech B605: mouse:usb:v046dp101d:name:Logitech M505: diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml index 3a5627d19..058998b51 100644 --- a/man/file-hierarchy.xml +++ b/man/file-hierarchy.xml @@ -86,7 +86,7 @@ The boot partition used for bringing up the system. On EFI systems this is possibly the EFI System Partition, also see - systemd-efi-boot-generator8. + systemd-gpt-auto-generator8. This directory is usually strictly local to the host, and should be considered read-only, except when a new kernel or boot loader is installed. This directory only exists on @@ -804,7 +804,7 @@ systemd1, hier7, systemd-path1, - systemd-efi-boot-generator8, + systemd-gpt-auto-generator8, sysctl.d5, tmpfiles.d5, pkg-config1, diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml deleted file mode 100644 index 23464bcf1..000000000 --- a/man/systemd-efi-boot-generator.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - systemd-efi-boot-generator - systemd - - - - Developer - Lennart - Poettering - lennart@poettering.net - - - - - - systemd-efi-boot-generator - 8 - - - - systemd-efi-boot-generator - Generator for automatically mounting the - EFI System Partition used by the current boot to - /boot - - - - /usr/lib/systemd/system-generators/systemd-efi-boot-generator - - - - Description - - systemd-efi-boot-generator is a - generator that automatically creates mount and automount units for - the EFI System Partition (ESP), mounting it to - /boot. Note that this generator will execute - no operation on non-EFI systems, on systems where the boot loader - does not communicate the used ESP to the OS, on systems where - /boot is an explicitly configured mount (for - example, listed in - fstab5) - or where the /boot mount point is non-empty. - Since this generator creates an automount unit, the mount will - only be activated on-demand, when accessed. - - systemd-efi-boot-generator implements - systemd.generator7. - - - - See Also - - systemd1, - systemd.mount5, - systemd.automount5, - systemd-gpt-auto-generator8, - fstab5 - - - - diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml index 710c2e065..27ec72c98 100644 --- a/man/systemd-gpt-auto-generator.xml +++ b/man/systemd-gpt-auto-generator.xml @@ -150,10 +150,16 @@ /etc/crypttab with a different device mapper device name. - Also note that - systemd-efi-boot-generator8 - will mount the EFI System Partition (ESP) to - /boot if not otherwise mounted. + Mount and automount units for the EFI System Partition (ESP), + mounting it to /boot are generated on EFI + systems, where the boot loader communicates the used ESP to the operating + system. Since this generator creates an automount unit, the mount will + only be activated on-demand, when accessed. On systems where + /boot is an explicitly configured mount + (for example, listed in + fstab5) + or where the /boot mount point is non-empty, no + mount units are generated. When using this generator in conjunction with btrfs file systems, make sure to set the correct default subvolumes on them, @@ -170,7 +176,6 @@ systemd.mount5, systemd.swap5, systemd-fstab-generator8, - systemd-efi-boot-generator8, systemd-cryptsetup@.service8, cryptsetup8, fstab5, diff --git a/man/systemd-machine-id-commit.xml b/man/systemd-machine-id-commit.xml index cfb172206..d216aa074 100644 --- a/man/systemd-machine-id-commit.xml +++ b/man/systemd-machine-id-commit.xml @@ -66,7 +66,7 @@ This tool will execute no operation if /etc/machine-id doesn't contain any valid machine ID, isn't mounted as an independent temporary file system, - of /etc is read-only. If those conditions are + or /etc is read-only. If those conditions are met, it will then write current machine ID to disk and unmount the transient /etc/machine-id file in a race-free manner to ensure that this file is always valid for other diff --git a/man/systemd-networkd-wait-online.service.xml b/man/systemd-networkd-wait-online.service.xml index f53b337da..bcc5776a8 100644 --- a/man/systemd-networkd-wait-online.service.xml +++ b/man/systemd-networkd-wait-online.service.xml @@ -80,7 +80,8 @@ several interfaces which will be configured, but a particular one is necessary to access some network resources. This option may be used more than once to wait for multiple network - interfaces. + interfaces. When used, all other interfaces are ignored. + diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml index 2285e9181..4514c1afd 100644 --- a/man/systemd.generator.xml +++ b/man/systemd.generator.xml @@ -331,7 +331,6 @@ find $dir systemd1, systemd-cryptsetup-generator8, systemd-debug-generator8, - systemd-efi-boot-generator8, systemd-fstab-generator8, fstab5, systemd-getty-generator8, diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index 92e20bd53..a78ceb125 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -441,6 +441,15 @@ A boolean. When true receiving zero checksums in VXLAN/IPv6 is turned on. + + GroupPolicyExtension= + + A boolean. When true it enables Group Policy VXLAN extension security label mechanism + across network peers based on VXLAN. For details about the Group Policy VXLAN see the + + VXLAN Group Policy document. Defaults to false. + + diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 0aa1eeac7..407f6d32e 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -737,7 +737,7 @@ to 0 (job timeouts disabled), except for device units. NB: this timeout is independent from any unit-specific timeout (for example, the timeout set with - StartTimeoutSec= in service units) as the + TimeoutStartSec= in service units) as the job timeout has no effect on the unit itself, only on the job that might be pending for it. Or in other words: unit-specific timeouts are useful to abort unit state changes, and revert diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c index 2fde3e107..2dcc9c557 100644 --- a/src/basic/calendarspec.c +++ b/src/basic/calendarspec.c @@ -253,6 +253,7 @@ int calendar_spec_to_string(const CalendarSpec *c, char **p) { char *buf = NULL; size_t sz = 0; FILE *f; + int r; assert(c); assert(p); @@ -278,12 +279,11 @@ int calendar_spec_to_string(const CalendarSpec *c, char **p) { fputc(':', f); format_chain(f, 2, c->second); - fflush(f); - - if (ferror(f)) { + r = fflush_and_check(f); + if (r < 0) { free(buf); fclose(f); - return -ENOMEM; + return r; } fclose(f); diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 221685377..4a9105f42 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -28,21 +28,15 @@ #include "fileio.h" int write_string_stream(FILE *f, const char *line, bool enforce_newline) { + assert(f); assert(line); - errno = 0; - fputs(line, f); if (enforce_newline && !endswith(line, "\n")) fputc('\n', f); - fflush(f); - - if (ferror(f)) - return errno ? -errno : -EIO; - - return 0; + return fflush_and_check(f); } static int write_string_file_atomic(const char *fn, const char *line, bool enforce_newline) { diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index e8bb10dc9..8fd314927 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -583,7 +583,7 @@ int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_ } else { p = strndup(sa->un.sun_path, sizeof(sa->un.sun_path)); - if (!ret) + if (!p) return -ENOMEM; } @@ -662,13 +662,13 @@ int socknameinfo_pretty(union sockaddr_union *sa, socklen_t salen, char **_ret) r = sockaddr_pretty(&sa->sa, salen, true, true, &ret); if (r < 0) - return log_error_errno(r, "sockadd_pretty() failed: %m"); + return r; log_debug_errno(saved_errno, "getnameinfo(%s) failed: %m", ret); } else { ret = strdup(host); if (!ret) - return log_oom(); + return -ENOMEM; } *_ret = ret; @@ -683,7 +683,7 @@ int getnameinfo_pretty(int fd, char **ret) { assert(ret); if (getsockname(fd, &sa.sa, &salen) < 0) - return log_error_errno(errno, "getsockname(%d) failed: %m", fd); + return -errno; return socknameinfo_pretty(&sa, salen, ret); } diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c index bf52463d8..fa530da45 100644 --- a/src/basic/unit-name.c +++ b/src/basic/unit-name.c @@ -673,6 +673,7 @@ int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, c int slice_build_parent_slice(const char *slice, char **ret) { char *s, *dash; + int r; assert(slice); assert(ret); @@ -693,11 +694,11 @@ int slice_build_parent_slice(const char *slice, char **ret) { if (dash) strcpy(dash, ".slice"); else { - free(s); - - s = strdup("-.slice"); - if (!s) - return -ENOMEM; + r = free_and_strdup(&s, "-.slice"); + if (r < 0) { + free(s); + return r; + } } *ret = s; diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 091ea375d..359fde999 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -489,9 +489,9 @@ static int copy_file(const char *from, const char *to, bool force) { } } while (!feof(f)); - fflush(g); - if (ferror(g)) { - r = log_error_errno(EIO, "Failed to write \"%s\": %m", to); + r = fflush_and_check(g); + if (r < 0) { + log_error_errno(r, "Failed to write \"%s\": %m", to); goto error; } @@ -519,7 +519,7 @@ static int copy_file(const char *from, const char *to, bool force) { return 0; error: - unlink(p); + (void) unlink(p); return r; } diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index e8cd8abd2..4ac193e22 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -22,6 +22,7 @@ #include "console.h" #include "graphics.h" #include "pefile.h" +#include "disk.h" #include "linux.h" #ifndef EFI_OS_INDICATIONS_BOOT_TO_FW_UI @@ -1139,13 +1140,11 @@ static VOID config_entry_add_from_file(Config *config, EFI_HANDLE *device, CHAR1 config_add_entry(config, entry); } -static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, CHAR16 *loaded_image_path) { - EFI_FILE_HANDLE entries_dir; - EFI_STATUS err; +static VOID config_load_defaults(Config *config, EFI_FILE *root_dir) { CHAR8 *content = NULL; UINTN sec; UINTN len; - UINTN i; + EFI_STATUS err; len = file_read(root_dir, L"\\loader\\loader.conf", 0, 0, &content); if (len > 0) @@ -1158,6 +1157,11 @@ static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, config->timeout_sec = sec; } else config->timeout_sec_efivar = -1; +} + +static VOID config_load_entries(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, CHAR16 *loaded_image_path) { + EFI_FILE_HANDLE entries_dir; + EFI_STATUS err; err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &entries_dir, L"\\loader\\entries", EFI_FILE_MODE_READ, 0ULL); if (!EFI_ERROR(err)) { @@ -1194,8 +1198,11 @@ static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, } uefi_call_wrapper(entries_dir->Close, 1, entries_dir); } +} + +static VOID config_sort_entries(Config *config) { + UINTN i; - /* sort entries after version number */ for (i = 1; i < config->entry_count; i++) { BOOLEAN more; UINTN k; @@ -1696,11 +1703,11 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) { EFI_LOADED_IMAGE *loaded_image; EFI_FILE *root_dir; CHAR16 *loaded_image_path; - EFI_DEVICE_PATH *device_path; EFI_STATUS err; Config config; UINT64 init_usec; BOOLEAN menu = FALSE; + CHAR16 uuid[37]; InitializeLib(image, sys_table); init_usec = time_usec(); @@ -1722,29 +1729,8 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) { } /* export the device path this image is started from */ - device_path = DevicePathFromHandle(loaded_image->DeviceHandle); - if (device_path) { - EFI_DEVICE_PATH *path, *paths; - - paths = UnpackDevicePath(device_path); - for (path = paths; !IsDevicePathEnd(path); path = NextDevicePathNode(path)) { - HARDDRIVE_DEVICE_PATH *drive; - CHAR16 uuid[37]; - - if (DevicePathType(path) != MEDIA_DEVICE_PATH) - continue; - if (DevicePathSubType(path) != MEDIA_HARDDRIVE_DP) - continue; - drive = (HARDDRIVE_DEVICE_PATH *)path; - if (drive->SignatureType != SIGNATURE_TYPE_GUID) - continue; - - GuidToString(uuid, (EFI_GUID *)&drive->Signature); - efivar_set(L"LoaderDevicePartUUID", uuid, FALSE); - break; - } - FreePool(paths); - } + if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS) + efivar_set(L"LoaderDevicePartUUID", uuid, FALSE); root_dir = LibOpenRoot(loaded_image->DeviceHandle); if (!root_dir) { @@ -1758,12 +1744,19 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) { loaded_image_path = DevicePathToStr(loaded_image->FilePath); efivar_set(L"LoaderImageIdentifier", loaded_image_path, FALSE); - /* scan "\loader\entries\*.conf" files */ ZeroMem(&config, sizeof(Config)); - config_load(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path); + config_load_defaults(&config, root_dir); + + /* scan /EFI/Linux/ directory */ + config_entry_add_linux(&config, loaded_image, root_dir); + + /* scan /loader/entries/\*.conf files */ + config_load_entries(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path); + + /* sort entries after version number */ + config_sort_entries(&config); /* if we find some well-known loaders, add them to the end of the list */ - config_entry_add_linux(&config, loaded_image, root_dir); config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path, L"auto-windows", 'w', L"Windows Boot Manager", L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi"); config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path, diff --git a/src/boot/efi/disk.c b/src/boot/efi/disk.c new file mode 100644 index 000000000..96063fbc2 --- /dev/null +++ b/src/boot/efi/disk.c @@ -0,0 +1,51 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * Copyright (C) 2015 Kay Sievers + */ + +#include +#include + +#include "util.h" + +EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]) { + EFI_DEVICE_PATH *device_path; + EFI_STATUS r = EFI_NOT_FOUND; + + /* export the device path this image is started from */ + device_path = DevicePathFromHandle(handle); + if (device_path) { + EFI_DEVICE_PATH *path, *paths; + + paths = UnpackDevicePath(device_path); + for (path = paths; !IsDevicePathEnd(path); path = NextDevicePathNode(path)) { + HARDDRIVE_DEVICE_PATH *drive; + + if (DevicePathType(path) != MEDIA_DEVICE_PATH) + continue; + if (DevicePathSubType(path) != MEDIA_HARDDRIVE_DP) + continue; + drive = (HARDDRIVE_DEVICE_PATH *)path; + if (drive->SignatureType != SIGNATURE_TYPE_GUID) + continue; + + GuidToString(uuid, (EFI_GUID *)&drive->Signature); + r = EFI_SUCCESS; + break; + } + FreePool(paths); + } + + return r; +} diff --git a/src/boot/efi/disk.h b/src/boot/efi/disk.h new file mode 100644 index 000000000..1b25343a0 --- /dev/null +++ b/src/boot/efi/disk.h @@ -0,0 +1,21 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * Copyright (C) 2015 Kay Sievers + */ + +#ifndef __SDBOOT_DISK_H +#define __SDBOOT_DISK_H + +EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]); +#endif diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c index 0b1bc491e..0c5ee4e9f 100644 --- a/src/boot/efi/stub.c +++ b/src/boot/efi/stub.c @@ -18,6 +18,7 @@ #include "util.h" #include "pefile.h" +#include "disk.h" #include "graphics.h" #include "splash.h" #include "linux.h" @@ -46,6 +47,7 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) { UINTN szs[ELEMENTSOF(sections)-1] = {}; CHAR8 *cmdline = NULL; UINTN cmdline_len; + CHAR16 uuid[37]; EFI_STATUS err; InitializeLib(image, sys_table); @@ -99,6 +101,10 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) { cmdline = line; } + /* export the device path this image is started from */ + if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS) + efivar_set(L"LoaderDevicePartUUID", uuid, FALSE); + if (szs[3] > 0) graphics_splash((UINT8 *)((UINTN)loaded_image->ImageBase + addrs[3]), szs[3], NULL); diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c index 1cb5ea500..951f51580 100644 --- a/src/bus-proxyd/driver.c +++ b/src/bus-proxyd/driver.c @@ -71,6 +71,27 @@ static int get_creds_by_message(sd_bus *bus, sd_bus_message *m, uint64_t mask, s return get_creds_by_name(bus, name, mask, _creds, error); } +static int driver_activation(sd_bus_message *reply, void *userdata, sd_bus_error *error) { + _cleanup_bus_message_unref_ sd_bus_message *m = NULL; + ProxyActivation *activation = userdata; + + /* + * The org.freedesktop.DBus.Peer.Ping() call returned. We don't care + * whether this succeeded, failed, was not implemented or timed out. We + * cannot assume that the target reacts to this properly. Hence, just + * send the reply to the activation request and be done. + */ + + m = activation->request; /* claim reference */ + + --activation->proxy->n_activations; + LIST_REMOVE(activations_by_proxy, activation->proxy->activations, activation); + sd_bus_slot_unref(activation->slot); + free(activation); + + return synthetic_reply_method_return(m, "u", BUS_START_REPLY_SUCCESS); +} + int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPolicy *sp, const struct ucred *ucred, Set *owned_names) { int r; @@ -441,27 +462,29 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, name_list = (struct kdbus_info *) ((uint8_t *) a->kdbus_buffer + cmd.offset); KDBUS_FOREACH(name, name_list, cmd.list_size) { - const char *entry_name = NULL; struct kdbus_item *item; char *n; - KDBUS_ITEM_FOREACH(item, name, items) - if (item->type == KDBUS_ITEM_OWNED_NAME) - entry_name = item->name.name; + KDBUS_ITEM_FOREACH(item, name, items) { + if (item->type == KDBUS_ITEM_OWNED_NAME) { + if (!streq_ptr(item->name.name, arg0)) + continue; - if (!streq_ptr(entry_name, arg0)) - continue; + if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { + err = -ENOMEM; + break; + } - if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { - err = -ENOMEM; - break; + r = strv_consume(&owners, n); + if (r < 0) { + err = r; + break; + } + } } - r = strv_consume(&owners, n); - if (r < 0) { - err = r; + if (err < 0) break; - } } r = bus_kernel_cmd_free(a, cmd.offset); @@ -585,7 +608,9 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "StartServiceByName")) { _cleanup_bus_message_unref_ sd_bus_message *msg = NULL; + ProxyActivation *activation; const char *name; + uint64_t cookie; uint32_t flags; if (!sd_bus_message_has_signature(m, "su")) @@ -604,21 +629,46 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, if (r != -ESRCH) return synthetic_reply_method_errno(m, r, NULL); - r = sd_bus_message_new_method_call( - a, - &msg, - name, - "/", - "org.freedesktop.DBus.Peer", - "Ping"); + if (p->n_activations >= PROXY_ACTIVATIONS_MAX) + return synthetic_reply_method_errno(m, -EMFILE, NULL); + + r = sd_bus_message_get_cookie(m, &cookie); if (r < 0) return synthetic_reply_method_errno(m, r, NULL); - r = sd_bus_send(a, msg, NULL); + r = sd_bus_message_new_method_call(a, + &msg, + name, + "/", + "org.freedesktop.DBus.Peer", + "Ping"); if (r < 0) return synthetic_reply_method_errno(m, r, NULL); - return synthetic_reply_method_return(m, "u", BUS_START_REPLY_SUCCESS); + r = bus_message_seal(msg, cookie, BUS_DEFAULT_TIMEOUT); + if (r < 0) + return synthetic_reply_method_errno(m, r, NULL); + + activation = new0(ProxyActivation, 1); + if (!activation) + return synthetic_reply_method_errno(m, -ENOMEM, NULL); + + r = sd_bus_call_async(a, + &activation->slot, + msg, + driver_activation, + activation, + 0); + if (r < 0) { + free(activation); + return synthetic_reply_method_errno(m, r, NULL); + } + + activation->proxy = p; + activation->request = sd_bus_message_ref(m); + LIST_PREPEND(activations_by_proxy, p->activations, activation); + ++p->n_activations; + return 1; } else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "UpdateActivationEnvironment")) { _cleanup_bus_message_unref_ sd_bus_message *msg = NULL; @@ -657,8 +707,8 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, if (r < 0) return synthetic_reply_method_errno(m, r, NULL); - if (!args) - return synthetic_reply_method_errno(m, -EINVAL, NULL); + if (strv_isempty(args)) /* nothing to do? */ + return synthetic_reply_method_return(m, NULL); r = sd_bus_message_new_method_call( a, diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c index c37b09b9c..df361ac40 100644 --- a/src/bus-proxyd/proxy.c +++ b/src/bus-proxyd/proxy.c @@ -261,9 +261,18 @@ int proxy_new(Proxy **out, int in_fd, int out_fd, const char *destination) { } Proxy *proxy_free(Proxy *p) { + ProxyActivation *activation; + if (!p) return NULL; + while ((activation = p->activations)) { + LIST_REMOVE(activations_by_proxy, p->activations, activation); + sd_bus_message_unref(activation->request); + sd_bus_slot_unref(activation->slot); + free(activation); + } + sd_bus_flush_close_unref(p->local_bus); sd_bus_flush_close_unref(p->destination_bus); set_free_free(p->owned_names); @@ -644,6 +653,10 @@ static int process_hello(Proxy *p, sd_bus_message *m) { if (r < 0) return log_error_errno(r, "Failed to append sender to NameAcquired message: %m"); + r = sd_bus_message_set_destination(n, p->destination_bus->unique_name); + if (r < 0) + return log_error_errno(r, "Failed to set destination for NameAcquired message: %m"); + r = bus_seal_synthetic_message(p->local_bus, n); if (r < 0) return log_error_errno(r, "Failed to seal NameAcquired message: %m"); diff --git a/src/bus-proxyd/proxy.h b/src/bus-proxyd/proxy.h index ccb951c10..6aac650ac 100644 --- a/src/bus-proxyd/proxy.h +++ b/src/bus-proxyd/proxy.h @@ -25,6 +25,9 @@ #include "bus-xml-policy.h" typedef struct Proxy Proxy; +typedef struct ProxyActivation ProxyActivation; + +#define PROXY_ACTIVATIONS_MAX (16) /* max parallel activation requests */ struct Proxy { sd_bus *local_bus; @@ -37,12 +40,22 @@ struct Proxy { Set *owned_names; SharedPolicy *policy; + LIST_HEAD(ProxyActivation, activations); + size_t n_activations; + bool got_hello : 1; bool queue_overflow : 1; bool message_matched : 1; bool synthetic_matched : 1; }; +struct ProxyActivation { + LIST_FIELDS(ProxyActivation, activations_by_proxy); + Proxy *proxy; + sd_bus_message *request; + sd_bus_slot *slot; +}; + int proxy_new(Proxy **out, int in_fd, int out_fd, const char *dest); Proxy *proxy_free(Proxy *p); diff --git a/src/bus-proxyd/synthesize.c b/src/bus-proxyd/synthesize.c index 3ecedfd57..15d99103f 100644 --- a/src/bus-proxyd/synthesize.c +++ b/src/bus-proxyd/synthesize.c @@ -214,22 +214,13 @@ int synthesize_name_acquired(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m) if (r < 0) return r; + r = sd_bus_message_set_destination(n, a->unique_name); + if (r < 0) + return r; + r = bus_seal_synthetic_message(b, n); if (r < 0) return r; - /* - * Make sure to only forward NameLost/NameAcquired messages if they - * match an installed MATCH rule of the local client. We really must - * not send messages the client doesn't expect. - */ - - r = bus_match_run(b, &b->match_callbacks, n); - if (r >= 0 && p->message_matched) - r = sd_bus_send(b, n, NULL); - - p->message_matched = false; - p->synthetic_matched = false; - - return r; + return sd_bus_send(b, n, NULL); } diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index d8b39bdf5..5722e3c2b 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -1069,10 +1069,9 @@ static int method_dump(sd_bus_message *message, void *userdata, sd_bus_error *er manager_dump_units(m, f, NULL); manager_dump_jobs(m, f, NULL); - fflush(f); - - if (ferror(f)) - return -ENOMEM; + r = fflush_and_check(f); + if (r < 0) + return r; return sd_bus_reply_method_return(message, "s", dump); } diff --git a/src/core/manager.c b/src/core/manager.c index a1f37bbbb..ba107d461 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -1701,6 +1701,7 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t ssize_t n; struct signalfd_siginfo sfsi; bool sigchld = false; + int r; assert(m); assert(m->signal_fd == fd); @@ -1809,20 +1810,16 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t f = open_memstream(&dump, &size); if (!f) { - log_warning("Failed to allocate memory stream."); + log_warning_errno(errno, "Failed to allocate memory stream: %m"); break; } manager_dump_units(m, f, "\t"); manager_dump_jobs(m, f, "\t"); - if (ferror(f)) { - log_warning("Failed to write status stream"); - break; - } - - if (fflush(f)) { - log_warning("Failed to flush status stream"); + r = fflush_and_check(f); + if (r < 0) { + log_warning_errno(r, "Failed to write status stream: %m"); break; } diff --git a/src/efi-boot-generator/Makefile b/src/efi-boot-generator/Makefile deleted file mode 120000 index d0b0e8e00..000000000 --- a/src/efi-boot-generator/Makefile +++ /dev/null @@ -1 +0,0 @@ -../Makefile \ No newline at end of file diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c deleted file mode 100644 index e6b15c9bb..000000000 --- a/src/efi-boot-generator/efi-boot-generator.c +++ /dev/null @@ -1,162 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** - This file is part of systemd. - - Copyright 2013 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see . -***/ - -#include -#include - -#include "efivars.h" -#include "path-util.h" -#include "util.h" -#include "mkdir.h" -#include "virt.h" -#include "generator.h" -#include "special.h" - -static const char *arg_dest = "/tmp"; - -int main(int argc, char *argv[]) { - _cleanup_free_ char *what = NULL; - _cleanup_fclose_ FILE *f = NULL; - int r = EXIT_SUCCESS; - sd_id128_t id; - char *name; - - if (argc > 1 && argc != 4) { - log_error("This program takes three or no arguments."); - return EXIT_FAILURE; - } - - if (argc > 1) - arg_dest = argv[3]; - - log_set_target(LOG_TARGET_SAFE); - log_parse_environment(); - log_open(); - - umask(0022); - - if (in_initrd()) { - log_debug("In initrd, exiting."); - return EXIT_SUCCESS; - } - - if (detect_container(NULL) > 0) { - log_debug("In a container, exiting."); - return EXIT_SUCCESS; - } - - if (!is_efi_boot()) { - log_debug("Not an EFI boot, exiting."); - return EXIT_SUCCESS; - } - - r = path_is_mount_point("/boot", AT_SYMLINK_FOLLOW); - if (r > 0) { - log_debug("/boot is already a mount point, exiting."); - return EXIT_SUCCESS; - } - if (r == -ENOENT) - log_debug("/boot does not exist, continuing."); - else if (dir_is_empty("/boot") <= 0) { - log_debug("/boot already populated, exiting."); - return EXIT_SUCCESS; - } - - r = efi_loader_get_device_part_uuid(&id); - if (r == -ENOENT) { - log_debug("EFI loader partition unknown, exiting."); - return EXIT_SUCCESS; - } else if (r < 0) { - log_error_errno(r, "Failed to read ESP partition UUID: %m"); - return EXIT_FAILURE; - } - - name = strjoina(arg_dest, "/boot.mount"); - f = fopen(name, "wxe"); - if (!f) { - log_error_errno(errno, "Failed to create mount unit file %s: %m", name); - return EXIT_FAILURE; - } - - r = asprintf(&what, - "/dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", - SD_ID128_FORMAT_VAL(id)); - if (r < 0) { - log_oom(); - return EXIT_FAILURE; - } - - fprintf(f, - "# Automatially generated by systemd-efi-boot-generator\n\n" - "[Unit]\n" - "Description=EFI System Partition\n" - "Documentation=man:systemd-efi-boot-generator(8)\n"); - - r = generator_write_fsck_deps(f, arg_dest, what, "/boot", "vfat"); - if (r < 0) - return EXIT_FAILURE; - - fprintf(f, - "\n" - "[Mount]\n" - "What=%s\n" - "Where=/boot\n" - "Type=vfat\n" - "Options=umask=0077,noauto\n", - what); - - r = fflush_and_check(f); - if (r < 0) { - log_error_errno(r, "Failed to write mount unit file: %m"); - return EXIT_FAILURE; - } - - name = strjoina(arg_dest, "/boot.automount"); - fclose(f); - f = fopen(name, "wxe"); - if (!f) { - log_error_errno(errno, "Failed to create automount unit file %s: %m", name); - return EXIT_FAILURE; - } - - fputs("# Automatially generated by systemd-efi-boot-generator\n\n" - "[Unit]\n" - "Description=EFI System Partition Automount\n\n" - "[Automount]\n" - "Where=/boot\n" - "TimeoutIdleSec=120\n", f); - - r = fflush_and_check(f); - if (r < 0) { - log_error_errno(r, "Failed to write automount unit file: %m"); - return EXIT_FAILURE; - } - - name = strjoina(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/boot.automount"); - mkdir_parents(name, 0755); - - if (symlink("../boot.automount", name) < 0) { - log_error_errno(errno, "Failed to create symlink %s: %m", name); - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 3805b2943..f06ab3da2 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -728,9 +728,8 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; } - free(arg_locale); - arg_locale = strdup(optarg); - if (!arg_locale) + r = free_and_strdup(&arg_locale, optarg); + if (r < 0) return log_oom(); break; @@ -741,9 +740,8 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; } - free(arg_locale_messages); - arg_locale_messages = strdup(optarg); - if (!arg_locale_messages) + r = free_and_strdup(&arg_locale_messages, optarg); + if (r < 0) return log_oom(); break; @@ -754,19 +752,16 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; } - free(arg_timezone); - arg_timezone = strdup(optarg); - if (!arg_timezone) + r = free_and_strdup(&arg_timezone, optarg); + if (r < 0) return log_oom(); break; case ARG_ROOT_PASSWORD: - free(arg_root_password); - arg_root_password = strdup(optarg); - if (!arg_root_password) + r = free_and_strdup(&arg_root_password, optarg); + if (r < 0) return log_oom(); - break; case ARG_ROOT_PASSWORD_FILE: @@ -785,9 +780,8 @@ static int parse_argv(int argc, char *argv[]) { return -EINVAL; } - free(arg_hostname); - arg_hostname = strdup(optarg); - if (!arg_hostname) + r = free_and_strdup(&arg_hostname, optarg); + if (r < 0) return log_oom(); break; diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c index da5f3b647..50acb7595 100644 --- a/src/gpt-auto-generator/gpt-auto-generator.c +++ b/src/gpt-auto-generator/gpt-auto-generator.c @@ -46,51 +46,6 @@ static bool arg_enabled = true; static bool arg_root_enabled = true; static bool arg_root_rw = false; -static int add_swap(const char *path) { - _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL; - _cleanup_fclose_ FILE *f = NULL; - int r; - - assert(path); - - log_debug("Adding swap: %s", path); - - r = unit_name_from_path(path, ".swap", &name); - if (r < 0) - return log_error_errno(r, "Failed to generate unit name: %m"); - - unit = strjoin(arg_dest, "/", name, NULL); - if (!unit) - return log_oom(); - - f = fopen(unit, "wxe"); - if (!f) - return log_error_errno(errno, "Failed to create unit file %s: %m", unit); - - fprintf(f, - "# Automatically generated by systemd-gpt-auto-generator\n\n" - "[Unit]\n" - "Description=Swap Partition\n" - "Documentation=man:systemd-gpt-auto-generator(8)\n\n" - "[Swap]\n" - "What=%s\n", - path); - - fflush(f); - if (ferror(f)) - return log_error_errno(errno, "Failed to write unit file %s: %m", unit); - - lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL); - if (!lnk) - return log_oom(); - - mkdir_parents_label(lnk, 0755); - if (symlink(unit, lnk) < 0) - return log_error_errno(errno, "Failed to create symlink %s: %m", lnk); - - return 0; -} - static int add_cryptsetup(const char *id, const char *what, bool rw, char **device) { _cleanup_free_ char *e = NULL, *n = NULL, *p = NULL, *d = NULL, *to = NULL; _cleanup_fclose_ FILE *f = NULL; @@ -142,9 +97,9 @@ static int add_cryptsetup(const char *id, const char *what, bool rw, char **devi id, what, rw ? "" : "read-only", id); - fflush(f); - if (ferror(f)) - return log_error_errno(errno, "Failed to write file %s: %m", p); + r = fflush_and_check(f); + if (r < 0) + return log_error_errno(r, "Failed to write file %s: %m", p); from = strjoina("../", n); @@ -202,6 +157,7 @@ static int add_mount( const char *where, const char *fstype, bool rw, + const char *options, const char *description, const char *post) { @@ -262,11 +218,14 @@ static int add_mount( if (fstype) fprintf(f, "Type=%s\n", fstype); - fprintf(f, "Options=%s\n", rw ? "rw" : "ro"); + if (options) + fprintf(f, "Options=%s,%s\n", options, rw ? "rw" : "ro"); + else + fprintf(f, "Options=%s\n", rw ? "rw" : "ro"); - fflush(f); - if (ferror(f)) - return log_error_errno(errno, "Failed to write unit file %s: %m", p); + r = fflush_and_check(f); + if (r < 0) + return log_error_errno(r, "Failed to write unit file %s: %m", p); if (post) { lnk = strjoin(arg_dest, "/", post, ".requires/", unit, NULL); @@ -281,6 +240,104 @@ static int add_mount( return 0; } +static int add_automount( + const char *id, + const char *what, + const char *where, + const char *fstype, + bool rw, + const char *options, + const char *description, + usec_t timeout) { + + _cleanup_free_ char *unit = NULL, *lnk = NULL, *crypto_what = NULL; + _cleanup_free_ char *opt, *p = NULL; + _cleanup_fclose_ FILE *f = NULL; + int r; + + assert(id); + assert(where); + assert(description); + + if (options) + opt = strjoin(options, ",noauto", NULL); + else + opt = strdup("noauto"); + if (!opt) + return log_oom(); + + r = add_mount(id, + what, + where, + fstype, + rw, + opt, + description, + NULL); + if (r < 0) + return r; + + r = unit_name_from_path(where, ".automount", &unit); + if (r < 0) + return log_error_errno(r, "Failed to generate unit name: %m"); + + p = strjoin(arg_dest, "/", unit, NULL); + if (!p) + return log_oom(); + + f = fopen(p, "wxe"); + if (!f) + return log_error_errno(errno, "Failed to create unit file %s: %m", unit); + + fprintf(f, + "# Automatically generated by systemd-gpt-auto-generator\n\n" + "[Unit]\n" + "Description=%s\n" + "Documentation=man:systemd-gpt-auto-generator(8)\n" + "[Automount]\n" + "Where=%s\n" + "TimeoutIdleSec=%lld\n", + description, + where, + (unsigned long long)timeout / USEC_PER_SEC); + + r = fflush_and_check(f); + if (r < 0) + return log_error_errno(r, "Failed to write unit file %s: %m", p); + + lnk = strjoin(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/", unit, NULL); + if (!lnk) + return log_oom(); + mkdir_parents_label(lnk, 0755); + + if (symlink(p, lnk) < 0) + return log_error_errno(errno, "Failed to create symlink %s: %m", lnk); + + return 0; +} + +static bool path_is_busy(const char *where) { + int r; + + /* already a mountpoint; generators run during reload */ + r = path_is_mount_point(where, AT_SYMLINK_FOLLOW); + if (r > 0) + return false; + + /* the directory might not exist on a stateless system */ + if (r == -ENOENT) + return false; + + if (r < 0) + return true; + + /* not a mountpoint but it contains files */ + if (dir_is_empty(where) <= 0) + return true; + + return false; +} + static int probe_and_add_mount( const char *id, const char *what, @@ -298,8 +355,7 @@ static int probe_and_add_mount( assert(where); assert(description); - if (path_is_mount_point(where, AT_SYMLINK_FOLLOW) <= 0 && - dir_is_empty(where) <= 0) { + if (path_is_busy(where)) { log_debug("%s already populated, ignoring.", where); return 0; } @@ -335,21 +391,163 @@ static int probe_and_add_mount( where, fstype, rw, + NULL, description, post); } +static int add_swap(const char *path) { + _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL; + _cleanup_fclose_ FILE *f = NULL; + int r; + + assert(path); + + log_debug("Adding swap: %s", path); + + r = unit_name_from_path(path, ".swap", &name); + if (r < 0) + return log_error_errno(r, "Failed to generate unit name: %m"); + + unit = strjoin(arg_dest, "/", name, NULL); + if (!unit) + return log_oom(); + + f = fopen(unit, "wxe"); + if (!f) + return log_error_errno(errno, "Failed to create unit file %s: %m", unit); + + fprintf(f, + "# Automatically generated by systemd-gpt-auto-generator\n\n" + "[Unit]\n" + "Description=Swap Partition\n" + "Documentation=man:systemd-gpt-auto-generator(8)\n\n" + "[Swap]\n" + "What=%s\n", + path); + + r = fflush_and_check(f); + if (r < 0) + return log_error_errno(r, "Failed to write unit file %s: %m", unit); + + lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL); + if (!lnk) + return log_oom(); + + mkdir_parents_label(lnk, 0755); + if (symlink(unit, lnk) < 0) + return log_error_errno(errno, "Failed to create symlink %s: %m", lnk); + + return 0; +} + +static int add_boot(const char *what) { +#ifdef ENABLE_EFI + _cleanup_blkid_free_probe_ blkid_probe b = NULL; + const char *fstype = NULL, *uuid = NULL; + sd_id128_t id, type_id; + int r; + + assert(what); + + if (!is_efi_boot()) { + log_debug("Not an EFI boot, ignoring /boot."); + return 0; + } + + if (in_initrd()) { + log_debug("In initrd, ignoring /boot."); + return 0; + } + + if (detect_container(NULL) > 0) { + log_debug("In a container, ignoring /boot."); + return 0; + } + + if (path_is_busy("/boot")) { + log_debug("/boot already populated, ignoring."); + return 0; + } + + r = efi_loader_get_device_part_uuid(&id); + if (r == -ENOENT) { + log_debug("EFI loader partition unknown."); + return 0; + } + + if (r < 0) { + log_error_errno(r, "Failed to read ESP partition UUID: %m"); + return r; + } + + errno = 0; + b = blkid_new_probe_from_filename(what); + if (!b) { + if (errno == 0) + return log_oom(); + log_error_errno(errno, "Failed to allocate prober: %m"); + return -errno; + } + + blkid_probe_enable_partitions(b, 1); + blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS); + + errno = 0; + r = blkid_do_safeprobe(b); + if (r == -2 || r == 1) /* no result or uncertain */ + return 0; + else if (r != 0) + return log_error_errno(errno ?: EIO, "Failed to probe %s: %m", what); + + (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); + if (!streq(fstype, "vfat")) { + log_debug("Partition for /boot is not a FAT filesystem, ignoring."); + return 0; + } + + r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &uuid, NULL); + if (r != 0) { + log_debug_errno(r, "Partition for /boot does not have a UUID, ignoring. %m"); + return 0; + } + + if (sd_id128_from_string(uuid, &type_id) < 0) { + log_debug("Partition for /boot does not have a valid UUID, ignoring."); + return 0; + } + + if (!sd_id128_equal(type_id, id)) { + log_debug("Partition for /boot does not appear to be the partition we are booted from."); + return 0; + } + + r = add_automount("boot", + what, + "/boot", + "vfat", + "EFI System Partition Automount", + false, + "umask=0077", + 120 * USEC_PER_SEC); + + return r; +#else + return 0; +#endif +} + static int enumerate_partitions(dev_t devnum) { _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL; _cleanup_udev_device_unref_ struct udev_device *d = NULL; _cleanup_blkid_free_probe_ blkid_probe b = NULL; _cleanup_udev_unref_ struct udev *udev = NULL; - _cleanup_free_ char *home = NULL, *srv = NULL; + _cleanup_free_ char *boot = NULL, *home = NULL, *srv = NULL; struct udev_list_entry *first, *item; struct udev_device *parent = NULL; const char *name, *node, *pttype, *devtype; - int home_nr = -1, srv_nr = -1; + int boot_nr = -1, home_nr = -1, srv_nr = -1; bool home_rw = true, srv_rw = true; blkid_partlist pl; int r, k; @@ -521,6 +719,18 @@ static int enumerate_partitions(dev_t devnum) { if (k < 0) r = k; + } else if (sd_id128_equal(type_id, GPT_ESP)) { + + /* We only care for the first /boot partition */ + if (boot && nr >= boot_nr) + continue; + + boot_nr = nr; + + r = free_and_strdup(&boot, subnode); + if (r < 0) + return log_oom(); + } else if (sd_id128_equal(type_id, GPT_HOME)) { /* We only care for the first /home partition */ @@ -530,9 +740,8 @@ static int enumerate_partitions(dev_t devnum) { home_nr = nr; home_rw = !(flags & GPT_FLAG_READ_ONLY), - free(home); - home = strdup(subnode); - if (!home) + r = free_and_strdup(&home, subnode); + if (r < 0) return log_oom(); } else if (sd_id128_equal(type_id, GPT_SRV)) { @@ -544,13 +753,18 @@ static int enumerate_partitions(dev_t devnum) { srv_nr = nr; srv_rw = !(flags & GPT_FLAG_READ_ONLY), - free(srv); - srv = strdup(subnode); - if (!srv) + r = free_and_strdup(&srv, subnode); + if (r < 0) return log_oom(); } } + if (boot) { + k = add_boot(boot); + if (k < 0) + r = k; + } + if (home) { k = probe_and_add_mount("home", home, "/home", home_rw, "Home Partition", SPECIAL_LOCAL_FS_TARGET); if (k < 0) @@ -645,6 +859,7 @@ static int add_root_mount(void) { in_initrd() ? "/sysroot" : "/", NULL, arg_root_rw, + NULL, "Root Partition", in_initrd() ? SPECIAL_INITRD_ROOT_FS_TARGET : SPECIAL_LOCAL_FS_TARGET); #else diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c index 1baedf636..e3bd76051 100644 --- a/src/journal-remote/journal-remote.c +++ b/src/journal-remote/journal-remote.c @@ -1114,6 +1114,7 @@ static int accept_connection(const char* type, int fd, r = socknameinfo_pretty(&addr->sockaddr, addr->size, &b); if (r < 0) { + log_error_errno(r, "Resolving hostname failed: %m"); close(fd2); return r; } diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 5d23639ee..172fd80a1 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -126,26 +126,31 @@ static int update_cursor_state(Uploader *u) { r = fopen_temporary(u->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fprintf(f, "# This is private data. Do not parse.\n" "LAST_CURSOR=%s\n", u->last_cursor); - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, u->state_file) < 0) { + if (rename(temp_path, u->state_file) < 0) { r = -errno; - unlink(u->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save state %s: %m", u->state_file); + return 0; - return r; +fail: + if (temp_path) + (void) unlink(temp_path); + + (void) unlink(u->state_file); + + return log_error_errno(r, "Failed to save state %s: %m", u->state_file); } static int load_cursor_state(Uploader *u) { diff --git a/src/journal/catalog.c b/src/journal/catalog.c index 0801e1359..33b053931 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -371,25 +371,23 @@ static long write_catalog(const char *database, Hashmap *h, struct strbuf *sb, goto error; } - fflush(w); - - if (ferror(w)) { - log_error("%s: failed to write database.", p); + r = fflush_and_check(w); + if (r < 0) { + log_error_errno(r, "%s: failed to write database: %m", p); goto error; } fchmod(fileno(w), 0644); if (rename(p, database) < 0) { - log_error_errno(errno, "rename (%s -> %s) failed: %m", p, database); - r = -errno; + r = log_error_errno(errno, "rename (%s -> %s) failed: %m", p, database); goto error; } return ftell(w); error: - unlink(p); + (void) unlink(p); return r; } diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c index db2f58197..69e2d4186 100644 --- a/src/journal/journald-stream.c +++ b/src/journal/journald-stream.c @@ -142,7 +142,7 @@ static int stdout_stream_save(StdoutStream *s) { r = fopen_temporary(s->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fprintf(f, "# This is private data. Do not parse\n" @@ -163,7 +163,7 @@ static int stdout_stream_save(StdoutStream *s) { escaped = cescape(s->identifier); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "IDENTIFIER=%s\n", escaped); @@ -175,7 +175,7 @@ static int stdout_stream_save(StdoutStream *s) { escaped = cescape(s->unit_id); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "UNIT=%s\n", escaped); @@ -183,16 +183,13 @@ static int stdout_stream_save(StdoutStream *s) { r = fflush_and_check(f); if (r < 0) - goto finish; + goto fail; if (rename(temp_path, s->state_file) < 0) { r = -errno; - goto finish; + goto fail; } - free(temp_path); - temp_path = NULL; - /* Store the connection fd in PID 1, so that we get it passed * in again on next start */ if (!s->fdstore) { @@ -200,14 +197,15 @@ static int stdout_stream_save(StdoutStream *s) { s->fdstore = true; } -finish: + return 0; + +fail: + (void) unlink(s->state_file); + if (temp_path) - unlink(temp_path); + (void) unlink(temp_path); - if (r < 0) - log_error_errno(r, "Failed to save stream data %s: %m", s->state_file); - - return r; + return log_error_errno(r, "Failed to save stream data %s: %m", s->state_file); } static int stdout_stream_log(StdoutStream *s, const char *p) { diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 54417b3af..febf9f87f 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -643,13 +643,13 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { r = fopen_temporary(lease_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); r = sd_dhcp_lease_get_address(lease, &address); if (r < 0) - goto finish; + goto fail; fprintf(f, "# This is private data. Do not parse.\n" @@ -657,7 +657,7 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { r = sd_dhcp_lease_get_netmask(lease, &address); if (r < 0) - goto finish; + goto fail; fprintf(f, "NETMASK=%s\n", inet_ntoa(address)); @@ -713,7 +713,7 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { client_id_hex = hexmem(client_id, client_id_len); if (!client_id_hex) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "CLIENTID=%s\n", client_id_hex); } @@ -725,26 +725,27 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { option_hex = hexmem(data, data_len); if (!option_hex) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "VENDOR_SPECIFIC=%s\n", option_hex); } - r = 0; + r = fflush_and_check(f); + if (r < 0) + goto fail; - fflush(f); - - if (ferror(f) || rename(temp_path, lease_file) < 0) { + if (rename(temp_path, lease_file) < 0) { r = -errno; - unlink(lease_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save lease data %s: %m", lease_file); + return 0; - return r; +fail: + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save lease data %s: %m", lease_file); } int sd_dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) { diff --git a/src/libsystemd-network/sd-lldp.c b/src/libsystemd-network/sd-lldp.c index 6a2c05185..034163eb9 100644 --- a/src/libsystemd-network/sd-lldp.c +++ b/src/libsystemd-network/sd-lldp.c @@ -440,7 +440,7 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { r = fopen_temporary(lldp_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); @@ -457,8 +457,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], type); s = strdup(buf); - if (!s) - return -ENOMEM; + if (!s) { + r = -ENOMEM; + goto fail; + } r = lldp_read_port_id(p->packet, &type, &length, &port_id); if (r < 0) @@ -466,8 +468,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { if (type != LLDP_PORT_SUBTYPE_MAC_ADDRESS) { k = strndup((char *) port_id, length -1); - if (!k) - return -ENOMEM; + if (!k) { + r = -ENOMEM; + goto fail; + } sprintf(buf, "'_Port=%s' '_PType=%d' ", k , type); free(k); @@ -478,8 +482,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { } k = strappend(s, buf); - if (!k) - return -ENOMEM; + if (!k) { + r = -ENOMEM; + goto fail; + } free(s); s = k; @@ -493,8 +499,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { sprintf(buf, "'_TTL="USEC_FMT"' ", p->until); k = strappend(s, buf); - if (!k) - return -ENOMEM; + if (!k) { + r = -ENOMEM; + goto fail; + } free(s); s = k; @@ -504,15 +512,19 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { k = strappend(s, "'_NAME=N/A' "); else { t = strndup(k, length); - if (!t) - return -ENOMEM; + if (!t) { + r = -ENOMEM; + goto fail; + } k = strjoin(s, "'_NAME=", t, "' ", NULL); free(t); } - if (!k) - return -ENOMEM; + if (!k) { + r = -ENOMEM; + goto fail; + } free(s); s = k; @@ -522,8 +534,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { sprintf(buf, "'_CAP=%x'", data); k = strappend(s, buf); - if (!k) - return -ENOMEM; + if (!k) { + r = -ENOMEM; + goto fail; + } free(s); s = k; @@ -531,21 +545,23 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) { fprintf(f, "%s\n", s); } } - r = 0; - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, lldp_file) < 0) { + if (rename(temp_path, lldp_file) < 0) { r = -errno; - unlink(lldp_file); - unlink(temp_path); + goto fail; } - finish: - if (r < 0) - log_error("Failed to save lldp data %s: %s", lldp_file, strerror(-r)); + return 0; - return r; + fail: + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save lldp data %s: %m", lldp_file); } int sd_lldp_start(sd_lldp *lldp) { diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index c53666ddd..773c264cf 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -256,9 +256,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { name_list = (struct kdbus_info *) ((uint8_t *) bus->kdbus_buffer + cmd.offset); KDBUS_FOREACH(name, name_list, cmd.list_size) { - struct kdbus_item *item; - const char *entry_name = NULL; if ((flags & KDBUS_LIST_UNIQUE) && name->id != previous_id) { char *n; @@ -275,15 +273,15 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { previous_id = name->id; } - KDBUS_ITEM_FOREACH(item, name, items) - if (item->type == KDBUS_ITEM_OWNED_NAME) - entry_name = item->name.name; - - if (entry_name && service_name_is_valid(entry_name)) { - r = strv_extend(x, entry_name); - if (r < 0) { - r = -ENOMEM; - goto fail; + KDBUS_ITEM_FOREACH(item, name, items) { + if (item->type == KDBUS_ITEM_OWNED_NAME) { + if (service_name_is_valid(item->name.name)) { + r = strv_extend(x, item->name.name); + if (r < 0) { + r = -ENOMEM; + goto fail; + } + } } } } diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c index 9db86adb7..a6b05eb88 100644 --- a/src/libsystemd/sd-bus/bus-dump.c +++ b/src/libsystemd/sd-bus/bus-dump.c @@ -551,9 +551,8 @@ int bus_pcap_header(size_t snaplen, FILE *f) { hdr.snaplen = (uint32_t) snaplen; fwrite(&hdr, 1, sizeof(hdr), f); - fflush(f); - return 0; + return fflush_and_check(f); } int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f) { @@ -598,7 +597,5 @@ int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f) { snaplen -= w; } - fflush(f); - - return 0; + return fflush_and_check(f); } diff --git a/src/libsystemd/sd-bus/bus-gvariant.c b/src/libsystemd/sd-bus/bus-gvariant.c index 2d18a4e6c..402d43d66 100644 --- a/src/libsystemd/sd-bus/bus-gvariant.c +++ b/src/libsystemd/sd-bus/bus-gvariant.c @@ -75,14 +75,19 @@ int bus_gvariant_get_size(const char *signature) { case SD_BUS_TYPE_STRUCT_BEGIN: case SD_BUS_TYPE_DICT_ENTRY_BEGIN: { - char t[n-1]; + if (n == 2) { + /* unary type () has fixed size of 1 */ + r = 1; + } else { + char t[n-1]; - memcpy(t, p + 1, n - 2); - t[n - 2] = 0; + memcpy(t, p + 1, n - 2); + t[n - 2] = 0; - r = bus_gvariant_get_size(t); - if (r < 0) - return r; + r = bus_gvariant_get_size(t); + if (r < 0) + return r; + } sum += r; break; diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c index e2f4550c7..c2233d0cf 100644 --- a/src/libsystemd/sd-bus/bus-introspect.c +++ b/src/libsystemd/sd-bus/bus-introspect.c @@ -179,10 +179,10 @@ int introspect_finish(struct introspect *i, sd_bus *bus, sd_bus_message *m, sd_b assert(reply); fputs("\n", i->f); - fflush(i->f); - if (ferror(i->f)) - return -ENOMEM; + r = fflush_and_check(i->f); + if (r < 0) + return r; r = sd_bus_message_new_method_return(m, &q); if (r < 0) @@ -204,8 +204,6 @@ void introspect_free(struct introspect *i) { if (i->f) fclose(i->f); - if (i->introspection) - free(i->introspection); - + free(i->introspection); zero(*i); } diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c index 132b37526..e4cbd793e 100644 --- a/src/libsystemd/sd-bus/bus-match.c +++ b/src/libsystemd/sd-bus/bus-match.c @@ -914,6 +914,7 @@ char *bus_match_to_string(struct bus_match_component *components, unsigned n_com char *buffer = NULL; size_t size = 0; unsigned i; + int r; if (n_components <= 0) return strdup(""); @@ -942,8 +943,8 @@ char *bus_match_to_string(struct bus_match_component *components, unsigned n_com fputc('\'', f); } - fflush(f); - if (ferror(f)) + r = fflush_and_check(f); + if (r < 0) return NULL; return buffer; diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index 18685be8f..006e4a2b5 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -2209,7 +2209,14 @@ static int bus_message_close_struct(sd_bus_message *m, struct bus_container *c, assert(!c->need_offsets || i == c->n_offsets); assert(c->need_offsets || n_variable == 0); - if (n_variable <= 0) { + if (isempty(c->signature)) { + /* The unary type is encoded as fixed 1 byte padding */ + a = message_extend_body(m, 1, 1, add_offset, false); + if (!a) + return -ENOMEM; + + *a = 0; + } else if (n_variable <= 0) { int alignment = 1; /* Structures with fixed-size members only have to be @@ -2899,18 +2906,20 @@ static int bus_message_close_header(sd_bus_message *m) { signature = strempty(m->root_container.signature); l = strlen(signature); - sz = bus_gvariant_determine_word_size(sizeof(struct bus_header) + ALIGN8(m->fields_size) + m->body_size + 1 + l, 1); - d = message_extend_body(m, 1, 1 + l + sz, false, true); + sz = bus_gvariant_determine_word_size(sizeof(struct bus_header) + ALIGN8(m->fields_size) + m->body_size + 1 + l + 2, 1); + d = message_extend_body(m, 1, 1 + l + 2 + sz, false, true); if (!d) return -ENOMEM; *(uint8_t*) d = 0; - memcpy((uint8_t*) d + 1, signature, l); + *((uint8_t*) d + 1) = SD_BUS_TYPE_STRUCT_BEGIN; + memcpy((uint8_t*) d + 2, signature, l); + *((uint8_t*) d + 1 + l + 1) = SD_BUS_TYPE_STRUCT_END; - bus_gvariant_write_word_le((uint8_t*) d + 1 + l, sz, sizeof(struct bus_header) + m->fields_size); + bus_gvariant_write_word_le((uint8_t*) d + 1 + l + 2, sz, sizeof(struct bus_header) + m->fields_size); m->footer = d; - m->footer_accessible = 1 + l + sz; + m->footer_accessible = 1 + l + 2 + sz; } else { m->header->dbus1.fields_size = m->fields_size; m->header->dbus1.body_size = m->body_size; @@ -3814,6 +3823,14 @@ static int build_struct_offsets( assert(n_offsets); if (isempty(signature)) { + /* Unary type is encoded as *fixed* 1 byte padding */ + r = message_peek_body(m, &m->rindex, 1, 1, &q); + if (r < 0) + return r; + + if (*(uint8_t *) q != 0) + return -EBADMSG; + *item_size = 0; *offsets = NULL; *n_offsets = 0; @@ -3954,12 +3971,6 @@ static int enter_struct_or_dict_entry( if (r < 0) return r; - } else if (c->item_size <= 0) { - - /* gvariant empty struct */ - *item_size = 0; - *offsets = NULL; - *n_offsets = 0; } else /* gvariant with contents */ return build_struct_offsets(m, contents, c->item_size, item_size, offsets, n_offsets); @@ -4146,7 +4157,14 @@ _public_ int sd_bus_message_enter_container(sd_bus_message *m, w->before = before; w->begin = m->rindex; - w->end = m->rindex + c->item_size; + + /* Unary type has fixed size of 1, but virtual size of 0 */ + if (BUS_MESSAGE_IS_GVARIANT(m) && + type == SD_BUS_TYPE_STRUCT && + isempty(signature)) + w->end = m->rindex + 0; + else + w->end = m->rindex + c->item_size; w->array_size = array_size; w->item_size = item_size; @@ -4756,7 +4774,6 @@ _public_ int sd_bus_message_skip(sd_bus_message *m, const char *types) { r = sd_bus_message_skip(m, s); if (r < 0) return r; - assert(r != 0); r = sd_bus_message_exit_container(m); if (r < 0) @@ -5164,11 +5181,21 @@ int bus_message_parse_fields(sd_bus_message *m) { return -EBADMSG; if (*p == 0) { + size_t l; char *c; - /* We found the beginning of the signature string, yay! */ + /* We found the beginning of the signature + * string, yay! We require the body to be a + * structure, so verify it and then strip the + * opening/closing brackets. */ - c = strndup(p + 1, ((char*) m->footer + m->footer_accessible) - p - (1 + sz)); + l = ((char*) m->footer + m->footer_accessible) - p - (1 + sz); + if (l < 2 || + p[1] != SD_BUS_TYPE_STRUCT_BEGIN || + p[1 + l - 1] != SD_BUS_TYPE_STRUCT_END) + return -EBADMSG; + + c = strndup(p + 1 + 1, l - 2); if (!c) return -ENOMEM; diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index 0ca225c61..767df40e8 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -896,10 +896,9 @@ static int parse_container_kernel_address(sd_bus *b, const char **p, char **guid } else b->nspid = 0; - free(b->kernel); - b->kernel = strdup("/sys/fs/kdbus/0-system/bus"); - if (!b->kernel) - return -ENOMEM; + r = free_and_strdup(&b->kernel, "/sys/fs/kdbus/0-system/bus"); + if (r < 0) + return r; return 0; } diff --git a/src/libsystemd/sd-bus/test-bus-gvariant.c b/src/libsystemd/sd-bus/test-bus-gvariant.c index 9b7dd2e49..b078bdc5f 100644 --- a/src/libsystemd/sd-bus/test-bus-gvariant.c +++ b/src/libsystemd/sd-bus/test-bus-gvariant.c @@ -59,7 +59,7 @@ static void test_bus_gvariant_is_fixed_size(void) { static void test_bus_gvariant_get_size(void) { assert_se(bus_gvariant_get_size("") == 0); - assert_se(bus_gvariant_get_size("()") == 0); + assert_se(bus_gvariant_get_size("()") == 1); assert_se(bus_gvariant_get_size("y") == 1); assert_se(bus_gvariant_get_size("u") == 4); assert_se(bus_gvariant_get_size("b") == 1); diff --git a/src/libsystemd/sd-bus/test-bus-marshal.c b/src/libsystemd/sd-bus/test-bus-marshal.c index 59deaea89..b203707f2 100644 --- a/src/libsystemd/sd-bus/test-bus-marshal.c +++ b/src/libsystemd/sd-bus/test-bus-marshal.c @@ -134,6 +134,9 @@ int main(int argc, char *argv[]) { r = sd_bus_message_append(m, "y(ty)y(yt)y", 8, 777ULL, 7, 9, 77, 7777ULL, 10); assert_se(r >= 0); + r = sd_bus_message_append(m, "()"); + assert_se(r >= 0); + r = sd_bus_message_append(m, "ba(ss)", 255, 3, "aaa", "1", "bbb", "2", "ccc", "3"); assert_se(r >= 0); @@ -271,6 +274,9 @@ int main(int argc, char *argv[]) { assert_se(r > 0); assert_se(v == 10); + r = sd_bus_message_read(m, "()"); + assert_se(r > 0); + r = sd_bus_message_read(m, "ba(ss)", &boolean, 3, &x, &y, &a, &b, &c, &d); assert_se(r > 0); assert_se(boolean); @@ -350,7 +356,7 @@ int main(int argc, char *argv[]) { assert_se(sd_bus_message_verify_type(m, 'a', "{yv}") > 0); - r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y"); + r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y()"); assert_se(r >= 0); assert_se(sd_bus_message_verify_type(m, 'b', NULL) > 0); diff --git a/src/libsystemd/sd-bus/test-bus-proxy.c b/src/libsystemd/sd-bus/test-bus-proxy.c index 369c2f331..aef768dc1 100644 --- a/src/libsystemd/sd-bus/test-bus-proxy.c +++ b/src/libsystemd/sd-bus/test-bus-proxy.c @@ -53,7 +53,9 @@ static int test_proxy_acquired(sd_bus_message *m, void *userdata, sd_bus_error * static void test_proxy_matched(void) { _cleanup_bus_flush_close_unref_ sd_bus *a = NULL; + _cleanup_free_ char *matchstr = NULL; TestProxyMatch match = {}; + const char *me; int r; /* open bus 'a' */ @@ -70,10 +72,17 @@ static void test_proxy_matched(void) { r = sd_bus_start(a); assert_se(r >= 0); - r = sd_bus_add_match(a, NULL, - "type='signal'," - "member='NameAcquired'", - test_proxy_acquired, &match); + r = sd_bus_get_unique_name(a, &me); + assert_se(r >= 0); + + matchstr = strjoin("type='signal'," + "member='NameAcquired'," + "destination='", + me, + "'", + NULL); + assert_se(matchstr); + r = sd_bus_add_match(a, NULL, matchstr, test_proxy_acquired, &match); assert_se(r >= 0); r = sd_bus_get_unique_name(a, &match.sender); diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 2e6043324..0ec966774 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -1082,12 +1082,10 @@ int device_update_db(sd_device *device) { return 0; fail: - log_error_errno(r, "failed to create %s file '%s' for '%s'", has_info ? "db" : "empty", - path, device->devpath); - unlink(path); - unlink(path_tmp); + (void) unlink(path); + (void) unlink(path_tmp); - return r; + return log_error_errno(r, "failed to create %s file '%s' for '%s'", has_info ? "db" : "empty", path, device->devpath); } int device_delete_db(sd_device *device) { diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index b0ed2f288..3ba62a6be 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -262,6 +262,24 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, return 0; } +int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) { + size_t size; + int r; + + assert_return(m, -EINVAL); + assert_return(!m->sealed, -EPERM); + + r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_FLAG); + if (r < 0) + return r; + + r = add_rtattr(m, type, NULL, 0); + if (r < 0) + return r; + + return 0; +} + int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data) { int r; diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c index 1e747abb2..212832919 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -117,20 +117,30 @@ static const NLType rtnl_link_info_data_vlan_types[IFLA_VLAN_MAX + 1] = { }; static const NLType rtnl_link_info_data_vxlan_types[IFLA_VXLAN_MAX+1] = { - [IFLA_VXLAN_ID] = { .type = NETLINK_TYPE_U32 }, - [IFLA_VXLAN_GROUP] = { .type = NETLINK_TYPE_IN_ADDR }, - [IFLA_VXLAN_LINK] = { .type = NETLINK_TYPE_U32 }, - [IFLA_VXLAN_LOCAL] = { .type = NETLINK_TYPE_U32}, - [IFLA_VXLAN_TTL] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_TOS] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_LEARNING] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_AGEING] = { .type = NETLINK_TYPE_U32 }, - [IFLA_VXLAN_LIMIT] = { .type = NETLINK_TYPE_U32 }, - [IFLA_VXLAN_PORT_RANGE] = { .type = NETLINK_TYPE_U32}, - [IFLA_VXLAN_PROXY] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_RSC] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_L2MISS] = { .type = NETLINK_TYPE_U8 }, - [IFLA_VXLAN_L3MISS] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_ID] = { .type = NETLINK_TYPE_U32 }, + [IFLA_VXLAN_GROUP] = { .type = NETLINK_TYPE_IN_ADDR }, + [IFLA_VXLAN_LINK] = { .type = NETLINK_TYPE_U32 }, + [IFLA_VXLAN_LOCAL] = { .type = NETLINK_TYPE_U32}, + [IFLA_VXLAN_TTL] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_TOS] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_LEARNING] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_AGEING] = { .type = NETLINK_TYPE_U32 }, + [IFLA_VXLAN_LIMIT] = { .type = NETLINK_TYPE_U32 }, + [IFLA_VXLAN_PORT_RANGE] = { .type = NETLINK_TYPE_U32}, + [IFLA_VXLAN_PROXY] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_RSC] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_L2MISS] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_L3MISS] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_PORT] = { .type = NETLINK_TYPE_U16 }, + [IFLA_VXLAN_GROUP6] = { .type = NETLINK_TYPE_IN_ADDR }, + [IFLA_VXLAN_LOCAL6] = { .type = NETLINK_TYPE_IN_ADDR }, + [IFLA_VXLAN_UDP_CSUM] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_REMCSUM_TX] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_REMCSUM_RX] = { .type = NETLINK_TYPE_U8 }, + [IFLA_VXLAN_GBP] = { .type = NETLINK_TYPE_FLAG }, + [IFLA_VXLAN_REMCSUM_NOPARTIAL] = { .type = NETLINK_TYPE_FLAG }, }; static const NLType rtnl_bond_arp_target_types[BOND_ARP_TARGETS_MAX + 1] = { diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h index 758ffad1b..bf7c64154 100644 --- a/src/libsystemd/sd-netlink/netlink-types.h +++ b/src/libsystemd/sd-netlink/netlink-types.h @@ -28,6 +28,7 @@ enum { NETLINK_TYPE_U32, /* NLA_U32 */ NETLINK_TYPE_U64, /* NLA_U64 */ NETLINK_TYPE_STRING, /* NLA_STRING */ + NETLINK_TYPE_FLAG, /* NLA_FLAG */ NETLINK_TYPE_IN_ADDR, NETLINK_TYPE_ETHER_ADDR, NETLINK_TYPE_CACHE_INFO, diff --git a/src/locale/localed.c b/src/locale/localed.c index 88756542f..e8a8f17d8 100644 --- a/src/locale/localed.c +++ b/src/locale/localed.c @@ -476,15 +476,25 @@ static int x11_write_data(Context *c) { fprintf(f, " Option \"XkbOptions\" \"%s\"\n", c->x11_options); fputs("EndSection\n", f); - fflush(f); - if (ferror(f) || rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) { + r = fflush_and_check(f); + if (r < 0) + goto fail; + + if (rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) { r = -errno; - unlink("/etc/X11/xorg.conf.d/00-keyboard.conf"); - unlink(temp_path); - return r; - } else - return 0; + goto fail; + } + + return 0; + +fail: + (void) unlink("/etc/X11/xorg.conf.d/00-keyboard.conf"); + + if (temp_path) + (void) unlink(temp_path); + + return r; } static int vconsole_reload(sd_bus *bus) { diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 9709eca9b..5fa98e069 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -372,11 +372,9 @@ static int prop_map_first_of_struct(sd_bus *bus, const char *member, sd_bus_mess if (r < 0) return r; - free(*p); - *p = strdup(s); - - if (!*p) - return -ENOMEM; + r = free_and_strdup(p, s); + if (r < 0) + return r; } else { r = sd_bus_message_read_basic(m, contents[0], userdata); if (r < 0) diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index e6371ff04..397952e7e 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1816,17 +1816,22 @@ static int update_schedule_file(Manager *m) { if (!isempty(m->wall_message)) fprintf(f, "WALL_MESSAGE=%s\n", t); - (void) fflush_and_check(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) { - log_error_errno(errno, "Failed to write information about scheduled shutdowns: %m"); + if (rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) { r = -errno; - - (void) unlink(temp_path); - (void) unlink("/run/systemd/shutdown/scheduled"); + goto fail; } - return r; + return 0; + +fail: + (void) unlink(temp_path); + (void) unlink("/run/systemd/shutdown/scheduled"); + + return log_error_errno(r, "Failed to write information about scheduled shutdowns: %m"); } static int manager_scheduled_shutdown_handler( diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c index 855c85402..a261e6a71 100644 --- a/src/login/logind-inhibit.c +++ b/src/login/logind-inhibit.c @@ -86,11 +86,11 @@ int inhibitor_save(Inhibitor *i) { r = mkdir_safe_label("/run/systemd/inhibit", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(i->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); @@ -128,19 +128,24 @@ int inhibitor_save(Inhibitor *i) { if (i->fifo_path) fprintf(f, "FIFO=%s\n", i->fifo_path); - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, i->state_file) < 0) { + if (rename(temp_path, i->state_file) < 0) { r = -errno; - unlink(i->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save inhibit data %s: %m", i->state_file); + return 0; - return r; +fail: + (void) unlink(i->state_file); + + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save inhibit data %s: %m", i->state_file); } int inhibitor_start(Inhibitor *i) { diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 495ec50be..8d13a6368 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -93,11 +93,11 @@ int seat_save(Seat *s) { r = mkdir_safe_label("/run/systemd/seats", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(s->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); @@ -141,19 +141,24 @@ int seat_save(Seat *s) { i->sessions_by_seat_next ? ' ' : '\n'); } - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, s->state_file) < 0) { + if (rename(temp_path, s->state_file) < 0) { r = -errno; - unlink(s->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save seat data %s: %m", s->state_file); + return 0; - return r; +fail: + (void) unlink(s->state_file); + + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save seat data %s: %m", s->state_file); } int seat_load(Seat *s) { diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 45f4c09d3..9a2da7906 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -165,11 +165,11 @@ int session_save(Session *s) { r = mkdir_safe_label("/run/systemd/sessions", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(s->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; assert(s->user); @@ -217,7 +217,7 @@ int session_save(Session *s) { escaped = cescape(s->remote_host); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "REMOTE_HOST=%s\n", escaped); @@ -229,7 +229,7 @@ int session_save(Session *s) { escaped = cescape(s->remote_user); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "REMOTE_USER=%s\n", escaped); @@ -241,7 +241,7 @@ int session_save(Session *s) { escaped = cescape(s->service); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "SERVICE=%s\n", escaped); @@ -254,7 +254,7 @@ int session_save(Session *s) { escaped = cescape(s->desktop); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "DESKTOP=%s\n", escaped); @@ -282,21 +282,27 @@ int session_save(Session *s) { if (s->controller) fprintf(f, "CONTROLLER=%s\n", s->controller); - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, s->state_file) < 0) { + if (rename(temp_path, s->state_file) < 0) { r = -errno; - unlink(s->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save session data %s: %m", s->state_file); + return 0; - return r; +fail: + (void) unlink(s->state_file); + + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save session data %s: %m", s->state_file); } + int session_load(Session *s) { _cleanup_free_ char *remote = NULL, *seat = NULL, @@ -630,6 +636,9 @@ int session_stop(Session *s, bool force) { s->timer_event_source = sd_event_source_unref(s->timer_event_source); + if (s->seat) + seat_evict_position(s->seat, s); + /* We are going down, don't care about FIFOs anymore */ session_remove_fifo(s); @@ -666,6 +675,9 @@ int session_finalize(Session *s) { s->timer_event_source = sd_event_source_unref(s->timer_event_source); + if (s->seat) + seat_evict_position(s->seat, s); + /* Kill session devices */ while ((sd = hashmap_first(s->devices))) session_device_free(sd); diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 21d726812..5d8a7571c 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -116,11 +116,11 @@ static int user_save_internal(User *u) { r = mkdir_safe_label("/run/systemd/users", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(u->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; fchmod(fileno(f), 0644); @@ -241,19 +241,24 @@ static int user_save_internal(User *u) { fputc('\n', f); } - fflush(f); + r = fflush_and_check(f); + if (r < 0) + goto fail; - if (ferror(f) || rename(temp_path, u->state_file) < 0) { + if (rename(temp_path, u->state_file) < 0) { r = -errno; - unlink(u->state_file); - unlink(temp_path); + goto fail; } -finish: - if (r < 0) - log_error_errno(r, "Failed to save user data %s: %m", u->state_file); + return 0; - return r; +fail: + (void) unlink(u->state_file); + + if (temp_path) + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save user data %s: %m", u->state_file); } int user_save(User *u) { diff --git a/src/machine/machine.c b/src/machine/machine.c index 05fc4f849..ab2680368 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -112,13 +112,13 @@ int machine_save(Machine *m) { r = mkdir_safe_label("/run/systemd/machines", 0755, 0, 0); if (r < 0) - goto finish; + goto fail; r = fopen_temporary(m->state_file, &f, &temp_path); if (r < 0) - goto finish; + goto fail; - fchmod(fileno(f), 0644); + (void) fchmod(fileno(f), 0644); fprintf(f, "# This is private data. Do not parse.\n" @@ -131,7 +131,7 @@ int machine_save(Machine *m) { escaped = cescape(m->unit); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "SCOPE=%s\n", escaped); /* We continue to call this "SCOPE=" because it is internal only, and we want to stay compatible with old files */ @@ -146,7 +146,7 @@ int machine_save(Machine *m) { escaped = cescape(m->service); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "SERVICE=%s\n", escaped); } @@ -157,7 +157,7 @@ int machine_save(Machine *m) { escaped = cescape(m->root_directory); if (!escaped) { r = -ENOMEM; - goto finish; + goto fail; } fprintf(f, "ROOT=%s\n", escaped); } @@ -195,16 +195,13 @@ int machine_save(Machine *m) { r = fflush_and_check(f); if (r < 0) - goto finish; + goto fail; if (rename(temp_path, m->state_file) < 0) { r = -errno; - goto finish; + goto fail; } - free(temp_path); - temp_path = NULL; - if (m->unit) { char *sl; @@ -215,14 +212,15 @@ int machine_save(Machine *m) { (void) symlink(m->name, sl); } -finish: + return 0; + +fail: + (void) unlink(m->state_file); + if (temp_path) - unlink(temp_path); + (void) unlink(temp_path); - if (r < 0) - log_error_errno(r, "Failed to save machine data %s: %m", m->state_file); - - return r; + return log_error_errno(r, "Failed to save machine data %s: %m", m->state_file); } static void machine_unlink(Machine *m) { diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index f20f68b48..78e96c4e5 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2059,10 +2059,9 @@ int link_update(Link *link, sd_netlink_message *m) { link_free_carrier_maps(link); - free(link->ifname); - link->ifname = strdup(ifname); - if (!link->ifname) - return -ENOMEM; + r = free_and_strdup(&link->ifname, ifname); + if (r < 0) + return r; r = link_new_carrier_maps(link); if (r < 0) @@ -2388,14 +2387,13 @@ int link_save(Link *link) { } return 0; -fail: - log_link_error_errno(link, r, "Failed to save link data to %s: %m", link->state_file); - (void) unlink(link->state_file); +fail: + (void) unlink(link->state_file); if (temp_path) (void) unlink(temp_path); - return r; + return log_link_error_errno(link, r, "Failed to save link data to %s: %m", link->state_file); } static const char* const link_state_table[_LINK_STATE_MAX] = { diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index a5c2351cf..e718c4840 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -818,10 +818,10 @@ int manager_save(Manager *m) { return 0; fail: - log_error_errno(r, "Failed to save network state to %s: %m", m->state_file); - unlink(m->state_file); - unlink(temp_path); - return r; + (void) unlink(m->state_file); + (void) unlink(temp_path); + + return log_error_errno(r, "Failed to save network state to %s: %m", m->state_file); } int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found) { diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf index 7e46293a0..9469160eb 100644 --- a/src/network/networkd-netdev-gperf.gperf +++ b/src/network/networkd-netdev-gperf.gperf @@ -54,6 +54,7 @@ VXLAN.UDPCheckSum, config_parse_bool, 0, VXLAN.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx) VXLAN.UDP6ZeroCheckSumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx) VXLAN.FDBAgeingSec, config_parse_sec, 0, offsetof(VxLan, fdb_ageing) +VXLAN.GroupPolicyExtension, config_parse_bool, 0, offsetof(VxLan, group_policy) Tun.OneQueue, config_parse_bool, 0, offsetof(TunTap, one_queue) Tun.MultiQueue, config_parse_bool, 0, offsetof(TunTap, multi_queue) Tun.PacketInfo, config_parse_bool, 0, offsetof(TunTap, packet_info) diff --git a/src/network/networkd-netdev-tunnel.c b/src/network/networkd-netdev-tunnel.c index 7fd9ef584..265e67b7e 100644 --- a/src/network/networkd-netdev-tunnel.c +++ b/src/network/networkd-netdev-tunnel.c @@ -404,12 +404,6 @@ int config_parse_tunnel_address(const char *unit, return 0; } -static const char* const ipv6_flowlabel_table[_NETDEV_IPV6_FLOWLABEL_MAX] = { - [NETDEV_IPV6_FLOWLABEL_INHERIT] = "inherit", -}; - -DEFINE_STRING_TABLE_LOOKUP(ipv6_flowlabel, IPv6FlowLabel); - int config_parse_ipv6_flowlabel(const char* unit, const char *filename, unsigned line, @@ -422,7 +416,6 @@ int config_parse_ipv6_flowlabel(const char* unit, void *userdata) { IPv6FlowLabel *ipv6_flowlabel = data; Tunnel *t = userdata; - IPv6FlowLabel s; int k = 0; int r; @@ -431,12 +424,11 @@ int config_parse_ipv6_flowlabel(const char* unit, assert(rvalue); assert(ipv6_flowlabel); - s = ipv6_flowlabel_from_string(rvalue); - if (s != _NETDEV_IPV6_FLOWLABEL_INVALID) { + if (streq(rvalue, "inherit")) { *ipv6_flowlabel = IP6_FLOWINFO_FLOWLABEL; t->flags |= IP6_TNL_F_USE_ORIG_FLOWLABEL; } else { - r = config_parse_unsigned(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata); + r = config_parse_int(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata); if (r >= 0) { if (k > 0xFFFFF) log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue); diff --git a/src/network/networkd-netdev-tunnel.h b/src/network/networkd-netdev-tunnel.h index 1fd2b94ae..e4fa74aef 100644 --- a/src/network/networkd-netdev-tunnel.h +++ b/src/network/networkd-netdev-tunnel.h @@ -45,6 +45,7 @@ struct Tunnel { uint8_t encap_limit; int family; + int ipv6_flowlabel; unsigned ttl; unsigned tos; @@ -54,7 +55,6 @@ struct Tunnel { union in_addr_union remote; Ip6TnlMode ip6tnl_mode; - IPv6FlowLabel ipv6_flowlabel; bool pmtudisc; bool copy_dscp; @@ -90,9 +90,6 @@ int config_parse_tunnel_address(const char *unit, void *data, void *userdata); -const char *ipv6_flowlabel_to_string(IPv6FlowLabel d) _const_; -IPv6FlowLabel ipv6_flowlabel_from_string(const char *d) _pure_; - int config_parse_ipv6_flowlabel(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, diff --git a/src/network/networkd-netdev-vxlan.c b/src/network/networkd-netdev-vxlan.c index 2a5c5f0ba..2518e2732 100644 --- a/src/network/networkd-netdev-vxlan.c +++ b/src/network/networkd-netdev-vxlan.c @@ -3,7 +3,7 @@ /*** This file is part of systemd. - Copyright 2014 Susant Sahani + Copyright 2014 Susant Sahani systemd is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -101,6 +101,12 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli if (r < 0) return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_UDP_ZERO_CSUM6_RX attribute: %m"); + if (v->group_policy) { + r = sd_netlink_message_append_flag(m, IFLA_VXLAN_GBP); + if (r < 0) + return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GBP attribute: %m"); + } + return r; } diff --git a/src/network/networkd-netdev-vxlan.h b/src/network/networkd-netdev-vxlan.h index e7d1306f1..4ec33946c 100644 --- a/src/network/networkd-netdev-vxlan.h +++ b/src/network/networkd-netdev-vxlan.h @@ -50,6 +50,7 @@ struct VxLan { bool udpcsum; bool udp6zerocsumtx; bool udp6zerocsumrx; + bool group_policy; }; extern const NetDevVTable vxlan_vtable; diff --git a/src/network/networkd-wait-online-manager.c b/src/network/networkd-wait-online-manager.c index 1fc724f5a..112d92a56 100644 --- a/src/network/networkd-wait-online-manager.c +++ b/src/network/networkd-wait-online-manager.c @@ -38,9 +38,15 @@ bool manager_ignore_link(Manager *m, Link *link) { assert(m); assert(link); + /* always ignore the loopback interface */ if (link->flags & IFF_LOOPBACK) return true; + /* if interfaces are given on the command line, ignore all others */ + if (m->interfaces && !strv_contains(m->interfaces, link->ifname)) + return true; + + /* ignore interfaces we explicitly are asked to ignore */ STRV_FOREACH(ignore, m->ignore) if (fnmatch(*ignore, link->ifname, 0) == 0) return true; @@ -77,7 +83,7 @@ bool manager_all_configured(Manager *m) { return false; } - if (streq(l->state, "configuring")) { + if (STR_IN_SET(l->state, "configuring", "pending")) { log_debug("link %s is being processed by networkd", l->ifname); return false; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 65b9a5071..d46f768cf 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -503,9 +503,8 @@ static int parse_argv(int argc, char *argv[]) { break; case 'u': - free(arg_user); - arg_user = strdup(optarg); - if (!arg_user) + r = free_and_strdup(&arg_user, optarg); + if (r < 0) return log_oom(); break; diff --git a/src/run/run.c b/src/run/run.c index 148854a9b..3dd97022d 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -1129,13 +1129,9 @@ int main(int argc, char* argv[]) { } if (arg_unit && isempty(description)) { - free(description); - description = strdup(arg_unit); - - if (!description) { - r = log_oom(); + r = free_and_strdup(&description, arg_unit); + if (r < 0) goto finish; - } } arg_description = description; diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 3941605ce..ca4c24ebd 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -382,11 +382,9 @@ int ask_password_agent( if (id) fprintf(f, "Id=%s\n", id); - fflush(f); - - if (ferror(f)) { - log_error_errno(errno, "Failed to write query file: %m"); - r = -errno; + r = fflush_and_check(f); + if (r < 0) { + log_error_errno(r, "Failed to write query file: %m"); goto finish; } diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 24a9ed8e7..cb462bf48 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -69,6 +69,7 @@ int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int priority); int sd_netlink_detach_event(sd_netlink *nl); int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data); +int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type); int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data); int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data); int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data); diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index d7ba48283..b3fa29b84 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -891,8 +891,10 @@ static int add_user(Item *i) { i->uid = p->pw_uid; i->uid_set = true; - free(i->description); - i->description = strdup(p->pw_gecos); + r = free_and_strdup(&i->description, p->pw_gecos); + if (r < 0) + return log_oom(); + return 0; } if (!IN_SET(errno, 0, ENOENT)) @@ -1149,9 +1151,8 @@ static int process_item(Item *i) { } if (i->gid_path) { - free(j->gid_path); - j->gid_path = strdup(i->gid_path); - if (!j->gid_path) + r = free_and_strdup(&j->gid_path, i->gid_path); + if (r < 0) return log_oom(); } diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index b03020694..7b4178c99 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -113,10 +113,6 @@ int main(int argc, char *argv[]) { if (r < 0) goto finish; - /* We need one process for ourselves, plus one thread for the asynchronous resolver */ - if (setrlimit(RLIMIT_NPROC, &RLIMIT_MAKE_CONST(2)) < 0) - log_warning_errno(errno, "Failed to lower RLIMIT_NPROC to 2: %m"); - assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0); r = manager_new(&m); diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index d00f90afa..bbb9f9722 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -2429,8 +2429,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, rules_str(rules, rule->rule.filename_off), rule->rule.filename_line); break; } - free(event->name); - event->name = strdup(name_str); + free_and_strdup(&event->name, name_str); log_debug("NAME '%s' %s:%u", event->name, rules_str(rules, rule->rule.filename_off),