Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package iwd for openSUSE:Factory checked in at 2023-09-02 22:07:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iwd (Old) and /work/SRC/openSUSE:Factory/.iwd.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iwd" Sat Sep 2 22:07:51 2023 rev:41 rq:1108572 version:2.8 Changes: -------- --- /work/SRC/openSUSE:Factory/iwd/iwd.changes 2023-07-10 16:39:50.434521358 +0200 +++ /work/SRC/openSUSE:Factory/.iwd.new.1766/iwd.changes 2023-09-02 22:08:41.341484809 +0200 @@ -1,0 +2,6 @@ +Tue Aug 29 12:27:09 UTC 2023 - Luigi Baldoni <aloi...@gmx.com> + +- Update to version 2.8 + * Fix issue with handling OWE AKM in association reply. + +------------------------------------------------------------------- Old: ---- iwd-2.7.tar.sign iwd-2.7.tar.xz New: ---- iwd-2.8.tar.sign iwd-2.8.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iwd.spec ++++++ --- /var/tmp/diff_new_pack.lZA5xT/_old 2023-09-02 22:08:42.493525975 +0200 +++ /var/tmp/diff_new_pack.lZA5xT/_new 2023-09-02 22:08:42.497526118 +0200 @@ -17,7 +17,7 @@ Name: iwd -Version: 2.7 +Version: 2.8 Release: 0 Summary: Wireless daemon for Linux License: LGPL-2.1-or-later @@ -31,7 +31,7 @@ BuildRequires: pkgconfig BuildRequires: systemd-rpm-macros BuildRequires: pkgconfig(dbus-1) -BuildRequires: pkgconfig(ell) >= 0.57 +BuildRequires: pkgconfig(ell) >= 0.58 BuildRequires: pkgconfig(readline) BuildRequires: pkgconfig(systemd) %{?systemd_ordering} ++++++ iwd-2.7.tar.xz -> iwd-2.8.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ChangeLog new/iwd-2.8/ChangeLog --- old/iwd-2.7/ChangeLog 2023-07-05 18:37:56.000000000 +0200 +++ new/iwd-2.8/ChangeLog 2023-08-24 15:01:02.000000000 +0200 @@ -1,3 +1,6 @@ +ver 2.8: + Fix issue with handling OWE AKM in association reply. + ver 2.7: Fix issue with handling FT-8021X and SHA256 PMKID derivation. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/Makefile.am new/iwd-2.8/Makefile.am --- old/iwd-2.7/Makefile.am 2023-06-22 17:17:27.000000000 +0200 +++ new/iwd-2.8/Makefile.am 2023-08-24 15:01:02.000000000 +0200 @@ -63,7 +63,8 @@ ell/dhcp6.h \ ell/acd.h \ ell/cleanup.h \ - ell/netconfig.h + ell/netconfig.h \ + ell/sysctl.h ell_sources = ell/private.h \ ell/missing.h \ @@ -143,7 +144,8 @@ ell/dhcp6-lease.c \ ell/dhcp6-transport.c \ ell/acd.c \ - ell/netconfig.c + ell/netconfig.c \ + ell/sysctl.c ell_shared = ell/useful.h ell/asn1-private.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/Makefile.in new/iwd-2.8/Makefile.in --- old/iwd-2.7/Makefile.in 2023-07-05 18:39:50.000000000 +0200 +++ new/iwd-2.8/Makefile.in 2023-08-24 15:02:53.000000000 +0200 @@ -195,28 +195,28 @@ ell/uuid.h ell/key.h ell/file.h ell/dir.h ell/net.h ell/dhcp.h \ ell/cert.h ell/ecc.h ell/ecdh.h ell/time.h ell/path.h \ ell/icmp6.h ell/dhcp6.h ell/acd.h ell/cleanup.h \ - ell/netconfig.h ell/private.h ell/missing.h ell/util.c \ - ell/test.c ell/strv.c ell/utf8.c ell/queue.c ell/hashmap.c \ - ell/string.c ell/settings.c ell/main-private.h ell/main.c \ - ell/idle.c ell/signal.c ell/timeout.c ell/io.c ell/ringbuf.c \ - ell/log.c ell/checksum.c ell/netlink-private.h ell/netlink.c \ - ell/genl.c ell/rtnl-private.h ell/rtnl.c ell/dbus-private.h \ - ell/dbus.c ell/dbus-message.c ell/dbus-util.c \ - ell/dbus-service.c ell/dbus-client.c ell/dbus-name-cache.c \ - ell/dbus-filter.c ell/gvariant-private.h ell/gvariant-util.c \ - ell/siphash-private.h ell/siphash.c ell/hwdb.c ell/cipher.c \ - ell/random.c ell/uintset.c ell/base64.c ell/asn1-private.h \ - ell/pem.c ell/pem-private.h ell/tls-private.h ell/tls.c \ - ell/tls-record.c ell/tls-suites.c ell/tls-extensions.c \ - ell/uuid.c ell/key.c ell/file.c ell/dir.c ell/net-private.h \ - ell/net.c ell/dhcp-private.h ell/dhcp.c ell/dhcp-transport.c \ - ell/dhcp-lease.c ell/dhcp-util.c ell/dhcp-server.c \ - ell/cert-private.h ell/cert.c ell/cert-crypto.c \ - ell/ecc-external.c ell/ecc-private.h ell/ecc.c ell/ecdh.c \ - ell/time.c ell/time-private.h ell/path.c ell/dhcp6.c \ - ell/dhcp6-private.h ell/icmp6.c ell/icmp6-private.h \ - ell/dhcp6-lease.c ell/dhcp6-transport.c ell/acd.c \ - ell/netconfig.c ell/useful.h + ell/netconfig.h ell/sysctl.h ell/private.h ell/missing.h \ + ell/util.c ell/test.c ell/strv.c ell/utf8.c ell/queue.c \ + ell/hashmap.c ell/string.c ell/settings.c ell/main-private.h \ + ell/main.c ell/idle.c ell/signal.c ell/timeout.c ell/io.c \ + ell/ringbuf.c ell/log.c ell/checksum.c ell/netlink-private.h \ + ell/netlink.c ell/genl.c ell/rtnl-private.h ell/rtnl.c \ + ell/dbus-private.h ell/dbus.c ell/dbus-message.c \ + ell/dbus-util.c ell/dbus-service.c ell/dbus-client.c \ + ell/dbus-name-cache.c ell/dbus-filter.c ell/gvariant-private.h \ + ell/gvariant-util.c ell/siphash-private.h ell/siphash.c \ + ell/hwdb.c ell/cipher.c ell/random.c ell/uintset.c \ + ell/base64.c ell/asn1-private.h ell/pem.c ell/pem-private.h \ + ell/tls-private.h ell/tls.c ell/tls-record.c ell/tls-suites.c \ + ell/tls-extensions.c ell/uuid.c ell/key.c ell/file.c ell/dir.c \ + ell/net-private.h ell/net.c ell/dhcp-private.h ell/dhcp.c \ + ell/dhcp-transport.c ell/dhcp-lease.c ell/dhcp-util.c \ + ell/dhcp-server.c ell/cert-private.h ell/cert.c \ + ell/cert-crypto.c ell/ecc-external.c ell/ecc-private.h \ + ell/ecc.c ell/ecdh.c ell/time.c ell/time-private.h ell/path.c \ + ell/dhcp6.c ell/dhcp6-private.h ell/icmp6.c \ + ell/icmp6-private.h ell/dhcp6-lease.c ell/dhcp6-transport.c \ + ell/acd.c ell/netconfig.c ell/sysctl.c ell/useful.h am__objects_1 = am__dirstamp = $(am__leading_dot)dirstamp @EXTERNAL_ELL_FALSE@am__objects_2 = ell/util.lo ell/test.lo \ @@ -243,7 +243,7 @@ @EXTERNAL_ELL_FALSE@ ell/time.lo ell/path.lo ell/dhcp6.lo \ @EXTERNAL_ELL_FALSE@ ell/icmp6.lo ell/dhcp6-lease.lo \ @EXTERNAL_ELL_FALSE@ ell/dhcp6-transport.lo ell/acd.lo \ -@EXTERNAL_ELL_FALSE@ ell/netconfig.lo +@EXTERNAL_ELL_FALSE@ ell/netconfig.lo ell/sysctl.lo @EXTERNAL_ELL_FALSE@am_ell_libell_internal_la_OBJECTS = \ @EXTERNAL_ELL_FALSE@ $(am__objects_1) $(am__objects_2) \ @EXTERNAL_ELL_FALSE@ $(am__objects_1) @@ -677,50 +677,50 @@ ell/$(DEPDIR)/ringbuf.Plo ell/$(DEPDIR)/rtnl.Plo \ ell/$(DEPDIR)/settings.Plo ell/$(DEPDIR)/signal.Plo \ ell/$(DEPDIR)/siphash.Plo ell/$(DEPDIR)/string.Plo \ - ell/$(DEPDIR)/strv.Plo ell/$(DEPDIR)/test.Plo \ - ell/$(DEPDIR)/time.Plo ell/$(DEPDIR)/timeout.Plo \ - ell/$(DEPDIR)/tls-extensions.Plo ell/$(DEPDIR)/tls-record.Plo \ - ell/$(DEPDIR)/tls-suites.Plo ell/$(DEPDIR)/tls.Plo \ - ell/$(DEPDIR)/uintset.Plo ell/$(DEPDIR)/utf8.Plo \ - ell/$(DEPDIR)/util.Plo ell/$(DEPDIR)/uuid.Plo \ - monitor/$(DEPDIR)/display.Po monitor/$(DEPDIR)/main.Po \ - monitor/$(DEPDIR)/nlmon.Po monitor/$(DEPDIR)/pcap.Po \ - src/$(DEPDIR)/adhoc.Po src/$(DEPDIR)/agent.Po \ - src/$(DEPDIR)/anqp.Po src/$(DEPDIR)/anqputil.Po \ - src/$(DEPDIR)/ap.Po src/$(DEPDIR)/backtrace.Po \ - src/$(DEPDIR)/band.Po src/$(DEPDIR)/blacklist.Po \ - src/$(DEPDIR)/common.Po src/$(DEPDIR)/crypto.Po \ - src/$(DEPDIR)/dbus.Po src/$(DEPDIR)/device.Po \ - src/$(DEPDIR)/diagnostic.Po src/$(DEPDIR)/dpp-util.Po \ - src/$(DEPDIR)/dpp.Po src/$(DEPDIR)/eap-aka.Po \ - src/$(DEPDIR)/eap-gtc.Po src/$(DEPDIR)/eap-md5.Po \ - src/$(DEPDIR)/eap-mschapv2.Po src/$(DEPDIR)/eap-peap.Po \ - src/$(DEPDIR)/eap-pwd.Po src/$(DEPDIR)/eap-sim.Po \ - src/$(DEPDIR)/eap-tls-common.Po src/$(DEPDIR)/eap-tls.Po \ - src/$(DEPDIR)/eap-ttls.Po src/$(DEPDIR)/eap-wsc.Po \ - src/$(DEPDIR)/eap.Po src/$(DEPDIR)/eapol.Po \ - src/$(DEPDIR)/eapolutil.Po src/$(DEPDIR)/erp.Po \ - src/$(DEPDIR)/fils.Po src/$(DEPDIR)/frame-xchg.Po \ - src/$(DEPDIR)/ft.Po src/$(DEPDIR)/handshake.Po \ - src/$(DEPDIR)/hotspot.Po src/$(DEPDIR)/ie.Po \ - src/$(DEPDIR)/ip-pool.Po src/$(DEPDIR)/json.Po \ - src/$(DEPDIR)/knownnetworks.Po src/$(DEPDIR)/main.Po \ - src/$(DEPDIR)/manager.Po src/$(DEPDIR)/module.Po \ - src/$(DEPDIR)/mpdu.Po src/$(DEPDIR)/mschaputil.Po \ - src/$(DEPDIR)/netconfig-commit.Po src/$(DEPDIR)/netconfig.Po \ - src/$(DEPDIR)/netdev.Po src/$(DEPDIR)/network.Po \ - src/$(DEPDIR)/nl80211cmd.Po src/$(DEPDIR)/nl80211util.Po \ - src/$(DEPDIR)/offchannel.Po src/$(DEPDIR)/ofono.Po \ - src/$(DEPDIR)/owe.Po src/$(DEPDIR)/p2p.Po \ - src/$(DEPDIR)/p2putil.Po src/$(DEPDIR)/resolve.Po \ - src/$(DEPDIR)/rfkill.Po src/$(DEPDIR)/rrm.Po \ - src/$(DEPDIR)/sae.Po src/$(DEPDIR)/scan.Po \ - src/$(DEPDIR)/simauth.Po src/$(DEPDIR)/simutil.Po \ - src/$(DEPDIR)/station.Po src/$(DEPDIR)/storage.Po \ - src/$(DEPDIR)/sysfs.Po src/$(DEPDIR)/util.Po \ - src/$(DEPDIR)/watchlist.Po src/$(DEPDIR)/wiphy.Po \ - src/$(DEPDIR)/wsc.Po src/$(DEPDIR)/wscutil.Po \ - tools/$(DEPDIR)/hwsim.Po \ + ell/$(DEPDIR)/strv.Plo ell/$(DEPDIR)/sysctl.Plo \ + ell/$(DEPDIR)/test.Plo ell/$(DEPDIR)/time.Plo \ + ell/$(DEPDIR)/timeout.Plo ell/$(DEPDIR)/tls-extensions.Plo \ + ell/$(DEPDIR)/tls-record.Plo ell/$(DEPDIR)/tls-suites.Plo \ + ell/$(DEPDIR)/tls.Plo ell/$(DEPDIR)/uintset.Plo \ + ell/$(DEPDIR)/utf8.Plo ell/$(DEPDIR)/util.Plo \ + ell/$(DEPDIR)/uuid.Plo monitor/$(DEPDIR)/display.Po \ + monitor/$(DEPDIR)/main.Po monitor/$(DEPDIR)/nlmon.Po \ + monitor/$(DEPDIR)/pcap.Po src/$(DEPDIR)/adhoc.Po \ + src/$(DEPDIR)/agent.Po src/$(DEPDIR)/anqp.Po \ + src/$(DEPDIR)/anqputil.Po src/$(DEPDIR)/ap.Po \ + src/$(DEPDIR)/backtrace.Po src/$(DEPDIR)/band.Po \ + src/$(DEPDIR)/blacklist.Po src/$(DEPDIR)/common.Po \ + src/$(DEPDIR)/crypto.Po src/$(DEPDIR)/dbus.Po \ + src/$(DEPDIR)/device.Po src/$(DEPDIR)/diagnostic.Po \ + src/$(DEPDIR)/dpp-util.Po src/$(DEPDIR)/dpp.Po \ + src/$(DEPDIR)/eap-aka.Po src/$(DEPDIR)/eap-gtc.Po \ + src/$(DEPDIR)/eap-md5.Po src/$(DEPDIR)/eap-mschapv2.Po \ + src/$(DEPDIR)/eap-peap.Po src/$(DEPDIR)/eap-pwd.Po \ + src/$(DEPDIR)/eap-sim.Po src/$(DEPDIR)/eap-tls-common.Po \ + src/$(DEPDIR)/eap-tls.Po src/$(DEPDIR)/eap-ttls.Po \ + src/$(DEPDIR)/eap-wsc.Po src/$(DEPDIR)/eap.Po \ + src/$(DEPDIR)/eapol.Po src/$(DEPDIR)/eapolutil.Po \ + src/$(DEPDIR)/erp.Po src/$(DEPDIR)/fils.Po \ + src/$(DEPDIR)/frame-xchg.Po src/$(DEPDIR)/ft.Po \ + src/$(DEPDIR)/handshake.Po src/$(DEPDIR)/hotspot.Po \ + src/$(DEPDIR)/ie.Po src/$(DEPDIR)/ip-pool.Po \ + src/$(DEPDIR)/json.Po src/$(DEPDIR)/knownnetworks.Po \ + src/$(DEPDIR)/main.Po src/$(DEPDIR)/manager.Po \ + src/$(DEPDIR)/module.Po src/$(DEPDIR)/mpdu.Po \ + src/$(DEPDIR)/mschaputil.Po src/$(DEPDIR)/netconfig-commit.Po \ + src/$(DEPDIR)/netconfig.Po src/$(DEPDIR)/netdev.Po \ + src/$(DEPDIR)/network.Po src/$(DEPDIR)/nl80211cmd.Po \ + src/$(DEPDIR)/nl80211util.Po src/$(DEPDIR)/offchannel.Po \ + src/$(DEPDIR)/ofono.Po src/$(DEPDIR)/owe.Po \ + src/$(DEPDIR)/p2p.Po src/$(DEPDIR)/p2putil.Po \ + src/$(DEPDIR)/resolve.Po src/$(DEPDIR)/rfkill.Po \ + src/$(DEPDIR)/rrm.Po src/$(DEPDIR)/sae.Po \ + src/$(DEPDIR)/scan.Po src/$(DEPDIR)/simauth.Po \ + src/$(DEPDIR)/simutil.Po src/$(DEPDIR)/station.Po \ + src/$(DEPDIR)/storage.Po src/$(DEPDIR)/sysfs.Po \ + src/$(DEPDIR)/util.Po src/$(DEPDIR)/watchlist.Po \ + src/$(DEPDIR)/wiphy.Po src/$(DEPDIR)/wsc.Po \ + src/$(DEPDIR)/wscutil.Po tools/$(DEPDIR)/hwsim.Po \ tools/$(DEPDIR)/iwd-decrypt-profile.Po \ tools/$(DEPDIR)/probe-req.Po unit/$(DEPDIR)/test-arc4.Po \ unit/$(DEPDIR)/test-band.Po unit/$(DEPDIR)/test-client.Po \ @@ -1265,7 +1265,8 @@ @EXTERNAL_ELL_FALSE@ ell/dhcp6.h \ @EXTERNAL_ELL_FALSE@ ell/acd.h \ @EXTERNAL_ELL_FALSE@ ell/cleanup.h \ -@EXTERNAL_ELL_FALSE@ ell/netconfig.h +@EXTERNAL_ELL_FALSE@ ell/netconfig.h \ +@EXTERNAL_ELL_FALSE@ ell/sysctl.h @EXTERNAL_ELL_FALSE@ell_sources = ell/private.h \ @EXTERNAL_ELL_FALSE@ ell/missing.h \ @@ -1345,7 +1346,8 @@ @EXTERNAL_ELL_FALSE@ ell/dhcp6-lease.c \ @EXTERNAL_ELL_FALSE@ ell/dhcp6-transport.c \ @EXTERNAL_ELL_FALSE@ ell/acd.c \ -@EXTERNAL_ELL_FALSE@ ell/netconfig.c +@EXTERNAL_ELL_FALSE@ ell/netconfig.c \ +@EXTERNAL_ELL_FALSE@ ell/sysctl.c @EXTERNAL_ELL_FALSE@ell_shared = ell/useful.h ell/asn1-private.h @EXTERNAL_ELL_FALSE@ell_libell_internal_la_SOURCES = $(ell_headers) $(ell_sources) $(ell_shared) @@ -1947,6 +1949,7 @@ ell/$(DEPDIR)/$(am__dirstamp) ell/acd.lo: ell/$(am__dirstamp) ell/$(DEPDIR)/$(am__dirstamp) ell/netconfig.lo: ell/$(am__dirstamp) ell/$(DEPDIR)/$(am__dirstamp) +ell/sysctl.lo: ell/$(am__dirstamp) ell/$(DEPDIR)/$(am__dirstamp) ell/libell-internal.la: $(ell_libell_internal_la_OBJECTS) $(ell_libell_internal_la_DEPENDENCIES) $(EXTRA_ell_libell_internal_la_DEPENDENCIES) ell/$(am__dirstamp) $(AM_V_CCLD)$(LINK) $(am_ell_libell_internal_la_rpath) $(ell_libell_internal_la_OBJECTS) $(ell_libell_internal_la_LIBADD) $(LIBS) @@ -2404,6 +2407,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/siphash.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/string.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/strv.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/sysctl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/test.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/time.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@ell/$(DEPDIR)/timeout.Plo@am__quote@ # am--include-marker @@ -3520,6 +3524,7 @@ -rm -f ell/$(DEPDIR)/siphash.Plo -rm -f ell/$(DEPDIR)/string.Plo -rm -f ell/$(DEPDIR)/strv.Plo + -rm -f ell/$(DEPDIR)/sysctl.Plo -rm -f ell/$(DEPDIR)/test.Plo -rm -f ell/$(DEPDIR)/time.Plo -rm -f ell/$(DEPDIR)/timeout.Plo @@ -3753,6 +3758,7 @@ -rm -f ell/$(DEPDIR)/siphash.Plo -rm -f ell/$(DEPDIR)/string.Plo -rm -f ell/$(DEPDIR)/strv.Plo + -rm -f ell/$(DEPDIR)/sysctl.Plo -rm -f ell/$(DEPDIR)/test.Plo -rm -f ell/$(DEPDIR)/time.Plo -rm -f ell/$(DEPDIR)/timeout.Plo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/build-aux/ltmain.sh new/iwd-2.8/build-aux/ltmain.sh --- old/iwd-2.7/build-aux/ltmain.sh 2022-11-23 12:34:12.000000000 +0100 +++ new/iwd-2.8/build-aux/ltmain.sh 2023-07-17 17:03:58.000000000 +0200 @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.7 Debian-2.4.7-5" +VERSION="2.4.7 Debian-2.4.7-7" package_revision=2.4.7 @@ -572,27 +572,15 @@ # --------------------- # Append VALUE onto the existing contents of VAR. - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes + if test -z "$_G_HAVE_PLUSEQ_OP" && \ + __PLUSEQ_TEST="a" && \ + __PLUSEQ_TEST+=" b" 2>/dev/null && \ + test "a b" = "$__PLUSEQ_TEST"; then + _G_HAVE_PLUSEQ_OP=yes + fi if test yes = "$_G_HAVE_PLUSEQ_OP" then @@ -2308,7 +2296,7 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.7-5 + version: $progname $scriptversion Debian-2.4.7-7 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/client/iwctl.1 new/iwd-2.8/client/iwctl.1 --- old/iwd-2.7/client/iwctl.1 2023-07-05 18:40:58.000000000 +0200 +++ new/iwd-2.8/client/iwctl.1 2023-08-24 15:04:52.000000000 +0200 @@ -63,12 +63,10 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX $ iwctl [iwd]# help -.ft P -.fi +.EE .UNINDENT .UNINDENT .sp @@ -77,14 +75,12 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [iwd]# device list [iwd]# station DEVICE scan [iwd]# station DEVICE get\-networks [iwd]# station DEVICE connect SSID -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS Command line mode @@ -94,11 +90,9 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX $ iwctl \-\-help -.ft P -.fi +.EE .UNINDENT .UNINDENT .sp @@ -107,14 +101,12 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX $ iwctl device list $ iwctl station DEVICE scan $ iwctl station DEVICE get\-networks $ iwctl \-\-passphrase=PASSPHRASE station DEVICE connect SSID -.ft P -.fi +.EE .UNINDENT .UNINDENT .SH SEE ALSO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/configure new/iwd-2.8/configure --- old/iwd-2.7/configure 2023-07-05 18:39:45.000000000 +0200 +++ new/iwd-2.8/configure 2023-08-24 15:02:48.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for iwd 2.7. +# Generated by GNU Autoconf 2.71 for iwd 2.8. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ # Identity of this package. PACKAGE_NAME='iwd' PACKAGE_TARNAME='iwd' -PACKAGE_VERSION='2.7' -PACKAGE_STRING='iwd 2.7' +PACKAGE_VERSION='2.8' +PACKAGE_STRING='iwd 2.8' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1433,7 +1433,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures iwd 2.7 to adapt to many kinds of systems. +\`configure' configures iwd 2.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1504,7 +1504,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of iwd 2.7:";; + short | recursive ) echo "Configuration of iwd 2.8:";; esac cat <<\_ACEOF @@ -1661,7 +1661,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -iwd configure 2.7 +iwd configure 2.8 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1879,7 +1879,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by iwd $as_me 2.7, which was +It was created by iwd $as_me 2.8, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3154,7 +3154,7 @@ # Define the identity of the package. PACKAGE='iwd' - VERSION='2.7' + VERSION='2.8' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -14236,7 +14236,7 @@ test "${enable_monitor}" != "no" || test "${enable_wired}" = "yes" || test "${enable_hwsim}" = "yes"); then - ell_min_version="0.57" + ell_min_version="0.58" else ell_min_version="0.5" fi @@ -14984,7 +14984,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by iwd $as_me 2.7, which was +This file was extended by iwd $as_me 2.8, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15052,7 +15052,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -iwd config.status 2.7 +iwd config.status 2.8 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/configure.ac new/iwd-2.8/configure.ac --- old/iwd-2.7/configure.ac 2023-07-05 18:37:56.000000000 +0200 +++ new/iwd-2.8/configure.ac 2023-08-24 15:01:02.000000000 +0200 @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([iwd],[2.7]) +AC_INIT([iwd],[2.8]) AC_CONFIG_HEADERS(config.h) AC_CONFIG_AUX_DIR(build-aux) @@ -297,7 +297,7 @@ test "${enable_monitor}" != "no" || test "${enable_wired}" = "yes" || test "${enable_hwsim}" = "yes"); then - ell_min_version="0.57" + ell_min_version="0.58" else ell_min_version="0.5" fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/netconfig.c new/iwd-2.8/ell/netconfig.c --- old/iwd-2.7/ell/netconfig.c 2022-11-18 10:08:38.000000000 +0100 +++ new/iwd-2.8/ell/netconfig.c 2023-08-24 12:39:48.000000000 +0200 @@ -58,6 +58,7 @@ #include "net-private.h" #include "acd.h" #include "timeout.h" +#include "sysctl.h" #include "netconfig.h" struct l_netconfig { @@ -89,8 +90,8 @@ unsigned int ifaddr6_dump_cmd_id; struct l_queue *icmp_route_data; struct l_acd *acd; - unsigned int orig_disable_ipv6; - long orig_optimistic_dad; + uint32_t orig_disable_ipv6; + uint32_t orig_optimistic_dad; uint8_t mac[ETH_ALEN]; struct l_timeout *ra_timeout; bool have_lla; @@ -1325,59 +1326,25 @@ unsigned int value) { char ifname[IF_NAMESIZE]; - _auto_(l_free) char *filename = NULL; - _auto_(close) int fd = -1; - int r; - char valuestr[20]; if (unlikely(!if_indextoname(nc->ifindex, ifname))) return -errno; - filename = l_strdup_printf("/proc/sys/net/ipv6/conf/%s/%s", + return l_sysctl_set_u32(value, "/proc/sys/net/ipv6/conf/%s/%s", ifname, setting); - - fd = L_TFR(open(filename, O_WRONLY)); - if (unlikely(fd < 0)) - return -errno; - - snprintf(valuestr, sizeof(valuestr), "%u", value); - r = L_TFR(write(fd, valuestr, strlen(valuestr))); - return r > 0 ? 0 : -errno; } -static long netconfig_proc_read_ipv6_uint_setting(struct l_netconfig *nc, - const char *setting) +static int netconfig_proc_read_ipv6_uint_setting(struct l_netconfig *nc, + const char *setting, + uint32_t *out_v) { char ifname[IF_NAMESIZE]; - _auto_(l_free) char *filename = NULL; - _auto_(close) int fd = -1; - int r; - char valuestr[20]; - long value; - char *endp; if (unlikely(!if_indextoname(nc->ifindex, ifname))) return -errno; - filename = l_strdup_printf("/proc/sys/net/ipv6/conf/%s/%s", + return l_sysctl_get_u32(out_v, "/proc/sys/net/ipv6/conf/%s/%s", ifname, setting); - - fd = L_TFR(open(filename, O_RDONLY)); - if (unlikely(fd < 0)) - return -errno; - - r = L_TFR(read(fd, valuestr, sizeof(valuestr) - 1)); - if (unlikely(r < 1)) - return r == 0 ? -EINVAL : -errno; - - valuestr[r - 1] = '\0'; - errno = 0; - value = strtoul(valuestr, &endp, 10); - - if (unlikely(errno || !L_IN_SET(*endp, '\n', '\0'))) - return -EINVAL; - - return value; } LIB_EXPORT struct l_netconfig *l_netconfig_new(uint32_t ifindex) @@ -1972,6 +1939,7 @@ static void netconfig_ifaddr_ipv6_dump_done_cb(void *user_data) { struct l_netconfig *nc = user_data; + int r; /* * Handle the case of no link-local address having been found during @@ -1993,14 +1961,18 @@ netconfig_proc_write_ipv6_uint_setting(nc, "addr_gen_mode", 0); /* "enable IPv6 operation" */ - nc->orig_disable_ipv6 = - netconfig_proc_read_ipv6_uint_setting(nc, "disable_ipv6"); + r = netconfig_proc_read_ipv6_uint_setting(nc, "disable_ipv6", + &nc->orig_disable_ipv6); + if (r < 0) /* TODO: Log error? */ + nc->orig_disable_ipv6 = 0; + if (nc->orig_disable_ipv6) netconfig_proc_write_ipv6_uint_setting(nc, "disable_ipv6", 0); } LIB_EXPORT bool l_netconfig_start(struct l_netconfig *netconfig) { + int r; bool optimistic_dad; if (unlikely(!netconfig || netconfig->started)) @@ -2043,12 +2015,13 @@ */ optimistic_dad = netconfig->optimistic_dad_enabled && !netconfig->v6_static_addr; - netconfig->orig_optimistic_dad = - netconfig_proc_read_ipv6_uint_setting(netconfig, - "optimistic_dad"); - if (netconfig->orig_optimistic_dad >= 0 && - !!netconfig->orig_optimistic_dad != optimistic_dad) + r = netconfig_proc_read_ipv6_uint_setting(netconfig, "optimistic_dad", + &netconfig->orig_optimistic_dad); + if (r < 0) /* TODO: Log error? */ + netconfig->orig_optimistic_dad = optimistic_dad; + + if (!r && !!netconfig->orig_optimistic_dad != optimistic_dad) netconfig_proc_write_ipv6_uint_setting(netconfig, "optimistic_dad", optimistic_dad ? 1 : 0); @@ -2198,8 +2171,7 @@ optimistic_dad = netconfig->optimistic_dad_enabled && !netconfig->v6_static_addr; - if (netconfig->orig_optimistic_dad >= 0 && - !!netconfig->orig_optimistic_dad != optimistic_dad) + if (!!netconfig->orig_optimistic_dad != optimistic_dad) netconfig_proc_write_ipv6_uint_setting(netconfig, "optimistic_dad", netconfig->orig_optimistic_dad); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/settings.c new/iwd-2.8/ell/settings.c --- old/iwd-2.7/ell/settings.c 2023-05-24 16:13:48.000000000 +0200 +++ new/iwd-2.8/ell/settings.c 2023-08-24 12:39:48.000000000 +0200 @@ -1123,29 +1123,13 @@ unsigned int *out) { const char *value = l_settings_get_value(settings, group_name, key); - unsigned long int r; - unsigned int t; - char *endp; if (!value) return false; - /* Do not allow '+' or '-' or empty string */ - if (!l_ascii_isdigit(*value)) + if (l_safe_atou32(value, out) < 0) goto error; - errno = 0; - - t = r = strtoul(value, &endp, 0); - if (*endp != '\0') - goto error; - - if (unlikely(errno == ERANGE || r != t)) - goto error; - - if (out) - *out = r; - return true; error: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/sysctl.c new/iwd-2.8/ell/sysctl.c --- old/iwd-2.7/ell/sysctl.c 1970-01-01 01:00:00.000000000 +0100 +++ new/iwd-2.8/ell/sysctl.c 2023-08-24 12:39:48.000000000 +0200 @@ -0,0 +1,112 @@ +/* + * + * Embedded Linux library + * + * Copyright (C) 2022 Intel Corporation. All rights reserved. + * Copyright (C) 2023 Cruise LLC. All rights reserved. + * + * This library 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 library 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 this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#define _GNU_SOURCE +#include <errno.h> +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> + +#include "sysctl.h" +#include "useful.h" +#include "util.h" +#include "private.h" + +static int sysctl_write(const char *file, const void *value, size_t len) +{ + int fd; + ssize_t r; + + fd = L_TFR(open(file, O_WRONLY)); + if (unlikely(fd < 0)) + return -errno; + + r = L_TFR(write(fd, value, len)); + if (r < 0) + r = -errno; + else + r = 0; + + close(fd); + return r; +} + +static int sysctl_read(const char *file, void *dest, size_t len) +{ + int fd; + ssize_t r; + + fd = L_TFR(open(file, O_RDONLY)); + if (unlikely(fd < 0)) + return -errno; + + r = L_TFR(read(fd, dest, len)); + if (unlikely(r < 0)) + r = -errno; + + close(fd); + return r; +} + +LIB_EXPORT int l_sysctl_get_u32(uint32_t *out_v, const char *format, ...) +{ + _auto_(l_free) char *filename = NULL; + va_list ap; + char valuestr[64]; + int r; + + va_start(ap, format); + filename = l_strdup_vprintf(format, ap); + va_end(ap); + + r = sysctl_read(filename, valuestr, sizeof(valuestr) - 1); + if (r < 0) + return r; + + while (r > 0 && L_IN_SET(valuestr[r - 1], '\n', '\r', '\t', ' ')) + r--; + + valuestr[r] = '\0'; + + return l_safe_atou32(valuestr, out_v); +} + +LIB_EXPORT int l_sysctl_set_u32(uint32_t v, const char *format, ...) +{ + _auto_(l_free) char *filename = NULL; + va_list ap; + char valuestr[64]; + size_t len; + + va_start(ap, format); + filename = l_strdup_vprintf(format, ap); + va_end(ap); + + len = snprintf(valuestr, sizeof(valuestr), "%u", v); + + return sysctl_write(filename, valuestr, len); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/sysctl.h new/iwd-2.8/ell/sysctl.h --- old/iwd-2.7/ell/sysctl.h 1970-01-01 01:00:00.000000000 +0100 +++ new/iwd-2.8/ell/sysctl.h 2023-08-24 12:39:48.000000000 +0200 @@ -0,0 +1,39 @@ +/* + * + * Embedded Linux library + * + * Copyright (C) 2022 Intel Corporation. All rights reserved. + * Copyright (C) 2023 Cruise LLC. All rights reserved. + * + * This library 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 library 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 this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdint.h> + +int l_sysctl_get_u32(uint32_t *out_v, const char *format, ...) + __attribute__((format(printf, 2, 3))); +int l_sysctl_set_u32(uint32_t v, const char *format, ...) + __attribute__((format(printf, 2, 3))); + +#ifdef __cplusplus +} +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/util.c new/iwd-2.8/ell/util.c --- old/iwd-2.7/ell/util.c 2023-01-23 19:26:15.000000000 +0100 +++ new/iwd-2.8/ell/util.c 2023-08-24 12:39:48.000000000 +0200 @@ -28,6 +28,8 @@ #include <stdio.h> #include <stdlib.h> #include <limits.h> +#include <stdint.h> +#include <errno.h> #include "utf8.h" #include "util.h" @@ -745,3 +747,83 @@ { return __secure_memeq(field, size, byte) == 0 ? true : false; } + +static int safe_atou(const char *s, int base, unsigned int *out_u) +{ + unsigned long int r; + unsigned int t; + char *endp; + + errno = 0; + + t = r = strtoul(s, &endp, base); + if (unlikely(errno > 0)) + return -errno; + + if (endp == s || *endp != '\0') + return -EINVAL; + + if (unlikely(r != t)) + return -ERANGE; + + if (out_u) + *out_u = t; + + return 0; +} + +LIB_EXPORT int l_safe_atou32(const char *s, uint32_t *out_u) +{ + if (!l_ascii_isdigit(s[0])) + return -EINVAL; + + /* Don't allow leading zeros */ + if (s[0] == '0' && s[1] != '\0') + return -EINVAL; + + return safe_atou(s, 10, out_u); +} + +LIB_EXPORT int l_safe_atox8(const char *s, uint8_t *out_x) +{ + uint32_t x; + int r; + + r = l_safe_atox32(s, &x); + if (r < 0) + return r; + + if (x > UINT8_MAX) + return -ERANGE; + + if (out_x) + *out_x = x; + + return 0; +} + +LIB_EXPORT int l_safe_atox16(const char *s, uint16_t *out_x) +{ + uint32_t x; + int r; + + r = l_safe_atox32(s, &x); + if (r < 0) + return r; + + if (x > UINT16_MAX) + return -ERANGE; + + if (out_x) + *out_x = x; + + return 0; +} + +LIB_EXPORT int l_safe_atox32(const char *s, uint32_t *out_x) +{ + if (!l_ascii_isxdigit(s[0])) + return -EINVAL; + + return safe_atou(s, 16, out_x); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/ell/util.h new/iwd-2.8/ell/util.h --- old/iwd-2.7/ell/util.h 2023-01-23 19:26:15.000000000 +0100 +++ new/iwd-2.8/ell/util.h 2023-08-24 12:39:48.000000000 +0200 @@ -427,6 +427,11 @@ o[i] = r[i] ^ ((l[i] ^ r[i]) & mask); } +int l_safe_atou32(const char *s, uint32_t *out_u); +int l_safe_atox32(const char *s, uint32_t *out_u); +int l_safe_atox16(const char *s, uint16_t *out_u); +int l_safe_atox8(const char *s, uint8_t *out_u); + #ifdef __cplusplus } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/iwd.ap.5 new/iwd-2.8/src/iwd.ap.5 --- old/iwd-2.7/src/iwd.ap.5 2023-07-05 18:40:58.000000000 +0200 +++ new/iwd-2.8/src/iwd.ap.5 2023-08-24 15:04:51.000000000 +0200 @@ -150,14 +150,12 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX # Enable network configuration [IPv4] [other groups follow] -.ft P -.fi +.EE .UNINDENT .UNINDENT .TS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/iwd.config.5 new/iwd-2.8/src/iwd.config.5 --- old/iwd-2.7/src/iwd.config.5 2023-07-05 18:40:56.000000000 +0200 +++ new/iwd-2.8/src/iwd.config.5 2023-08-24 15:04:49.000000000 +0200 @@ -79,19 +79,6 @@ T} _ T{ -APRanges -T} T{ -Values: <IP in prefix notation> -.sp -Sets the range of IP\(aqs used for DHCP server (AP mode). The IP should be -in prefix notation e.g. 192.168.1.0/24. AP\(aqs which are started in a -profile\-less configuration will use this pool of IP\(aqs to set the AP\(aqs -interface address as well as default DHCP server options. Each AP will -get a new subnet from the range and clients will be addressed in that -subnet to avoid IP conflicts if multiple AP\(aqs are started. -T} -_ -T{ UseDefaultInterface T} T{ Values: true, \fBfalse\fP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/iwd.config.rst new/iwd-2.8/src/iwd.config.rst --- old/iwd-2.7/src/iwd.config.rst 2023-06-22 17:17:27.000000000 +0200 +++ new/iwd-2.8/src/iwd.config.rst 2023-08-24 15:01:02.000000000 +0200 @@ -74,16 +74,6 @@ ``[Network]`` settings for additional settings related to network configuration. - * - APRanges - - Values: <IP in prefix notation> - - Sets the range of IP's used for DHCP server (AP mode). The IP should be - in prefix notation e.g. 192.168.1.0/24. AP's which are started in a - profile-less configuration will use this pool of IP's to set the AP's - interface address as well as default DHCP server options. Each AP will - get a new subnet from the range and clients will be addressed in that - subnet to avoid IP conflicts if multiple AP's are started. - * - UseDefaultInterface - Values: true, **false** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/iwd.network.5 new/iwd-2.8/src/iwd.network.5 --- old/iwd-2.7/src/iwd.network.5 2023-07-05 18:40:57.000000000 +0200 +++ new/iwd-2.8/src/iwd.network.5 2023-08-24 15:04:50.000000000 +0200 @@ -608,14 +608,12 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [@pem@my_ca_cert] \-\-\-\-\- BEGIN CERTIFICATE \-\-\-\-\- <PEM data> \-\-\-\-\- END CERTIFICATE \-\-\-\-\- -.ft P -.fi +.EE .UNINDENT .UNINDENT .sp @@ -634,62 +632,53 @@ .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Settings] Hidden=true -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS Pre\-Shared Key (PSK) .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Security] Passphrase=secret123 -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS PWD .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Security] EAP\-Method=PWD EAP\-Identity=u...@domain.com EAP\-Password=secret123 -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS TLS .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Security] EAP\-Method=TLS EAP\-TLS\-ClientCert=/certs/client\-cert.pem EAP\-TLS\-ClientKey=/certs/client\-key.pem EAP\-TLS\-CACert=/certs/ca\-cert.pem EAP\-TLS\-ServerDomainMask=*.domain.com -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS TTLS + PAP .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Security] EAP\-Method=TTLS EAP\-Identity=o...@identity.com @@ -698,16 +687,14 @@ EAP\-TTLS\-Phase2\-Identity=username EAP\-TTLS\-Phase2\-Password=password EAP\-TTLS\-ServerDomainMask=*.domain.com -.ft P -.fi +.EE .UNINDENT .UNINDENT .SS PEAP + MSCHAPv2 .INDENT 0.0 .INDENT 3.5 .sp -.nf -.ft C +.EX [Security] EAP\-Method=PEAP EAP\-Identity=o...@identity.com @@ -716,8 +703,7 @@ EAP\-PEAP\-Phase2\-Identity=username EAP\-PEAP\-Phase2\-Password=password EAP\-PEAP\-ServerDomainMask=*.domain.com -.ft P -.fi +.EE .UNINDENT .UNINDENT .SH SEE ALSO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/netdev.c new/iwd-2.8/src/netdev.c --- old/iwd-2.7/src/netdev.c 2023-06-22 17:17:27.000000000 +0200 +++ new/iwd-2.8/src/netdev.c 2023-08-24 15:01:02.000000000 +0200 @@ -2911,11 +2911,15 @@ } if (netdev->owe_sm) { - if (!owe_dh || !owe_akm_found) { - l_error("OWE DH element/RSN not found"); + if (!owe_dh) { + l_error("OWE DH element not found"); goto deauth; } + if (!owe_akm_found) + l_warn("OWE AKM was not included in the RSNE. " + "This AP is out of spec!"); + if (L_WARN_ON(owe_process_dh_ie(netdev->owe_sm, owe_dh, owe_dh_len) != 0)) goto deauth; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/src/scan.c new/iwd-2.8/src/scan.c --- old/iwd-2.7/src/scan.c 2022-12-18 20:59:36.000000000 +0100 +++ new/iwd-2.8/src/scan.c 2023-08-24 15:01:02.000000000 +0200 @@ -1230,8 +1230,6 @@ { const uint8_t *ptr = data; - l_debug(""); - while (len) { /* * TODO: Store query info for GAS response length verification @@ -1304,8 +1302,6 @@ NULL) < 0) l_warn("Unable to parse BSS Load IE for " MAC, MAC_STR(bss->addr)); - else - l_debug("Load: %u/255", bss->utilization); break; case IE_TYPE_VENDOR_SPECIFIC: @@ -1795,8 +1791,6 @@ uint64_t wdev_id; uint32_t seen_ms_ago = 0; - l_debug("get_scan_callback"); - if (nl80211_parse_attrs(msg, NL80211_ATTR_WDEV, &wdev_id, NL80211_ATTR_UNSPEC) < 0) return; @@ -1875,8 +1869,6 @@ struct scan_results *results = user; struct scan_context *sc = results->sc; - l_debug("get_scan_done"); - sc->get_scan_cmd_id = 0; if (!results->sr || !results->sr->canceled) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iwd-2.7/tools/hwsim.c new/iwd-2.8/tools/hwsim.c --- old/iwd-2.7/tools/hwsim.c 2023-05-24 17:38:48.000000000 +0200 +++ new/iwd-2.8/tools/hwsim.c 2023-08-24 15:01:02.000000000 +0200 @@ -62,6 +62,8 @@ HWSIM_CMD_NEW_RADIO, HWSIM_CMD_DEL_RADIO, HWSIM_CMD_GET_RADIO, + HWSIM_CMD_ADD_MAC_ADDR, + HWSIM_CMD_DEL_MAC_ADDR, __HWSIM_CMD_MAX, }; #define HWSIM_CMD_MAX (__HWSIM_CMD_MAX - 1) @@ -438,6 +440,7 @@ uint8_t addr[ETH_ALEN]; char *name; uint32_t iftype; + int ref; }; static struct l_queue *radio_info; @@ -513,6 +516,14 @@ return rec->id == id; } +static bool interface_info_match_addr(const void *a, const void *b) +{ + const struct interface_info_rec *rec = a; + const uint8_t *addr = b; + + return memcmp(rec->addr, addr, ETH_ALEN) == 0; +} + static const char *radio_get_path(const struct radio_info_rec *rec) { static char path[15]; @@ -1570,7 +1581,9 @@ hwsim_frame_unref(frame); } -static void unicast_handler(struct l_genl_msg *msg, void *user_data) + + +static void hwsim_frame_event(struct l_genl_msg *msg) { struct hwsim_frame *frame; const struct mmpdu_header *mpdu; @@ -1579,9 +1592,6 @@ const void *data; const uint8_t *transmitter = NULL, *freq = NULL, *flags = NULL; - if (l_genl_msg_get_command(msg) != HWSIM_CMD_FRAME) - return; - if (!l_genl_attr_init(&attr, msg)) return; @@ -1681,6 +1691,146 @@ process_frame(frame); } +static bool get_tx_rx_addrs(struct l_genl_msg *msg, const uint8_t **tx_out, + const uint8_t **rx_out) +{ + struct l_genl_attr attr; + uint16_t type, len; + const void *data; + const uint8_t *tx = NULL, *rx = NULL; + + if (!l_genl_attr_init(&attr, msg)) + return false; + + while (l_genl_attr_next(&attr, &type, &len, &data)) { + switch (type) { + case HWSIM_ATTR_ADDR_TRANSMITTER: + if (len != ETH_ALEN) + return false; + + tx = data; + break; + case HWSIM_ATTR_ADDR_RECEIVER: + if (len != ETH_ALEN) + return false; + + rx = data; + break; + default: + break; + } + } + + if (!tx || !rx) + return false; + + *tx_out = tx; + *rx_out = rx; + + return true; +} + +static void hwsim_add_mac_event(struct l_genl_msg *msg) +{ + const uint8_t *tx = NULL, *rx = NULL; + struct radio_info_rec *radio_rec; + struct interface_info_rec *interface_rec; + + if (!get_tx_rx_addrs(msg, &tx, &rx)) + return; + + /* No radio matches the TX address, hwsim must not have created it */ + radio_rec = l_queue_find(radio_info, radio_info_match_addr1, tx); + if (!radio_rec) + return; + + interface_rec = l_queue_find(interface_info, + interface_info_match_addr, rx); + if (interface_rec) { + /* Existing interface, address changes handled via nl80211 */ + if (interface_rec->name) + return; + + /* + * Transient/dummy interface we already know about. This likely + * was created, then a scan changed the address temporarily. + * Reflect this change and increment the ref so the following + * DEL event doesn't destroy it + */ + __atomic_fetch_add(&interface_rec->ref, 1, __ATOMIC_SEQ_CST); + return; + } + + /* + * Create a dummy interface entry for this address that only contains + * the radio and address. This is either a transient entry due to scan + * randomization or an interface created outside this namespace. + */ + interface_rec = l_new(struct interface_info_rec, 1); + interface_rec->radio_rec = radio_rec; + interface_rec->ref = 1; + memcpy(interface_rec->addr, rx, ETH_ALEN); + + l_queue_push_tail(interface_info, interface_rec); +} + +static void hwsim_del_mac_event(struct l_genl_msg *msg) +{ + const uint8_t *tx = NULL, *rx = NULL; + struct radio_info_rec *radio_rec; + struct interface_info_rec *interface_rec; + + if (!get_tx_rx_addrs(msg, &tx, &rx)) + return; + + /* No radio matches the TX address, hwsim must not have created it */ + radio_rec = l_queue_find(radio_info, radio_info_match_addr1, tx); + if (!radio_rec) + return; + + interface_rec = l_queue_find(interface_info, + interface_info_match_addr, rx); + if (!interface_rec) + return; + + /* + * This change is handled via nl80211 so we don't want to touch this + * interface here. + */ + if (interface_rec->name) + return; + + if (__atomic_sub_fetch(&interface_rec->ref, 1, __ATOMIC_SEQ_CST)) + return; + + l_queue_remove(interface_info, interface_rec); + l_free(interface_rec); +} + +static void hwsim_unicast_handler(struct l_genl_msg *msg, void *user_data) +{ + uint8_t cmd; + + if (l_genl_msg_get_error(msg) < 0) + return; + + cmd = l_genl_msg_get_command(msg); + + switch (cmd) { + case HWSIM_CMD_FRAME: + hwsim_frame_event(msg); + break; + case HWSIM_CMD_ADD_MAC_ADDR: + hwsim_add_mac_event(msg); + break; + case HWSIM_CMD_DEL_MAC_ADDR: + hwsim_del_mac_event(msg); + break; + default: + break; + } +} + static void radio_manager_create_callback(struct l_genl_msg *msg, void *user_data) { @@ -2937,8 +3087,9 @@ } if (!l_genl_add_unicast_watch(genl, "MAC80211_HWSIM", - unicast_handler, NULL, NULL)) { - l_error("Failed to set unicast handler"); + hwsim_unicast_handler, + NULL, NULL)) { + l_error("Failed to set hwsim unicast handler"); goto error; }