release: bump version to 1.43.2 (development)

This commit is contained in:
Thomas Haller 2023-02-10 09:38:33 +01:00
commit 72c0ae2efa
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
31 changed files with 1246 additions and 883 deletions

View file

@ -53,10 +53,10 @@ variables:
#
# This is done by running `ci-fairy generate-template` and possibly bumping
# ".default_tag".
FEDORA_TAG: '2023-01-18.0-503dba0518ae'
FEDORA_TAG: '2023-01-18.0-82ad875db2dc'
UBUNTU_TAG: '2023-01-18.0-1218be1cbc9d'
DEBIAN_TAG: '2023-01-18.0-1218be1cbc9d'
CENTOS_TAG: '2023-01-18.0-503dba0518ae'
CENTOS_TAG: '2023-01-18.0-82ad875db2dc'
ALPINE_TAG: '2023-01-18.0-14c807942fa4'
FEDORA_EXEC: 'bash .gitlab-ci/fedora-install.sh'

View file

@ -23,19 +23,21 @@ fi
localedef -c -i pl_PL -f UTF-8 pl_PL.UTF-8
locale -a
yum install -y python36-dbus python36-gobject-base
else
if [ $IS_CENTOS_8 = 1 ]; then
# CentOS Linux 8 is now EOF and plain `dnf upgrade` does not work. We need
# to patch the mirror list.
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
fi
elif [ $IS_CENTOS_8 = 1 ]; then
# CentOS Linux 8 is now EOF and plain `dnf upgrade` does not work. We need
# to patch the mirror list.
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install -y 'dnf-command(config-manager)'
dnf config-manager --set-enabled powertools || \
dnf config-manager --set-enabled PowerTools
curl https://copr.fedorainfracloud.org/coprs/nmstate/nm-build-deps/repo/epel-8/nmstate-nm-build-deps-epel-8.repo > /etc/yum.repos.d/nmstate-nm-build-deps-epel-8.repo
else
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install -y 'dnf-command(config-manager)'
curl https://copr.fedorainfracloud.org/coprs/nmstate/nm-build-deps/repo/epel-9/nmstate-nm-build-deps-epel-9.repo > /etc/yum.repos.d/nmstate-nm-build-deps-epel-9.repo
fi
fi

View file

@ -3,7 +3,8 @@ Adrian Freihofer <adrian.freihofer@siemens.com> <adrian.freihofer@gmail.com>
Aleksander Morgado <aleksander@aleksander.es> <aleksander@lanedo.com>
Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
Amitakhya Phukan <aphukan@redhat.com> <aphukan@fedoraproject.org>
Ana Cabral <avelar.analuiza@gmail.com> <avelar.analuiza@gmail.com>
Ana Cabral <acabral@redhat.com> <30404-acabral@users.noreply.gitlab.freedesktop.org>
Ana Cabral <acabral@redhat.com> <avelar.analuiza@gmail.com>
Antony Mee <antony@onlymee.co.uk> <A.J.Mee@ncl.ac.uk>
Antony Mee <antony@onlymee.co.uk> <eemynotna@gmail.com>
Artur Flinta <aflinta@svn.gnome.org> <aflinta@cvs.gnome.org>
@ -19,6 +20,7 @@ Dan Williams <dcbw@redhat.com> <dcbw@redaht.com>
Dan Winship <danw@redhat.com> <danw@gnome.org>
Daniel Nylander <po@danielnylander.se> <Daniel Nylander po@danielnylander.se>
David Zeuthen <davidz@redhat.com> <david@fubar.dk>
Fernando Fernandez Mancera <ffmancera@riseup.net> <ffmancera@riseup.net>
Fran Diéguez <frandieguez@gnome.org>
Fran Diéguez <frandieguez@gnome.org> <fran.dieguez@mabishu.com>
Francisco Javier F. Serrador <serrador@cvs.gnome.org> <serrador@openshine.com>
@ -80,5 +82,6 @@ Tomasz Dominikowski <dominikowski@gmail.com> <tdominikowski@aviary.pl>
William Jon McCann <william.jon.mccann@gmail.com> <mccann@jhu.edu>
Wouter Bolsterlee <wbolster@svn.gnome.org> <uws+gnome@xs4all.nl>
Wouter Bolsterlee <wbolster@svn.gnome.org> <wbolster@gnome.org>
gaoxingwang <gxw94linux@163.com> <gaoxingwang1@huawei.com>
Øivind Hoel <ohoel@cvs.gnome.org>
Žygimantas Beručka <uid0@akl.lt> <zygis@gnome.org>

View file

@ -404,7 +404,7 @@ $ git config --add 'notes.displayref' 'refs/notes/bugs'
For example, set notes with
```
$ git notes --ref refs/notes/bugs add -m "(cherry picked from $COMMIT_SHA)" HEAD
$ git notes --ref refs/notes/bugs add -m "(cherry picked from commit $COMMIT_SHA)" HEAD
```
You should see the notes in git-log output as well.

10
NEWS
View file

@ -1,3 +1,13 @@
=============================================
NetworkManager-1.44
Overview of changes since NetworkManager-1.42
=============================================
This is a snapshot of NetworkManager development. The API is
subject to change and not guaranteed to be compatible with
the later release.
USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE!
=============================================
NetworkManager-1.42
Overview of changes since NetworkManager-1.40

View file

@ -7,8 +7,8 @@ dnl - add corresponding NM_VERSION_x_y_z macros in
dnl "shared/nm-version-macros.h.in"
dnl - update number in meson.build
m4_define([nm_major_version], [1])
m4_define([nm_minor_version], [42])
m4_define([nm_micro_version], [0])
m4_define([nm_minor_version], [43])
m4_define([nm_micro_version], [2])
m4_define([nm_version],
[nm_major_version.nm_minor_version.nm_micro_version])

View file

@ -19,6 +19,7 @@
%global snapshot __SNAPSHOT__
%global git_sha __COMMIT__
%global bcond_default_debug __BCOND_DEFAULT_DEBUG__
%global bcond_default_lto __BCOND_DEFAULT_LTO__
%global bcond_default_test __BCOND_DEFAULT_TEST__
%global obsoletes_device_plugins 1:0.9.9.95-1
@ -69,11 +70,19 @@
%else
%bcond_with test
%endif
%if "%{?bcond_default_lto}" == ""
%if 0%{?fedora} >= 33 || 0%{?rhel} >= 9
%bcond_without lto
%else
%bcond_with lto
%endif
%else
%if %{bcond_default_lto}
%bcond_without lto
%else
%bcond_with lto
%endif
%endif
%bcond_with sanitizer
%if 0%{?fedora}
%bcond_without connectivity_fedora
@ -297,6 +306,10 @@ BuildRequires: python2
BuildRequires: pygobject3-base
BuildRequires: dbus-python
BuildRequires: pexpect
%if 0%{?rhel} >= 7 && %{with meson}
BuildRequires: python36-dbus
BuildRequires: python36-gobject
%endif
%endif
BuildRequires: libselinux-devel
BuildRequires: polkit-devel
@ -680,6 +693,7 @@ Preferably use nmcli instead.
%else
-Ddocs=false \
%endif
-Dqt=false \
%if %{with team}
-Dteamdctl=true \
%else
@ -714,7 +728,8 @@ Preferably use nmcli instead.
-Difcfg_rh=true \
-Difupdown=false \
%if %{with ppp}
-Dpppd_plugin_dir=%{_libdir}/pppd/%{ppp_version} \
-Dpppd_plugin_dir="%{_libdir}/pppd/%{ppp_version}" \
-Dpppd="%{_sbindir}/pppd" \
-Dppp=true \
%endif
%if %{with firewalld_zone}
@ -855,8 +870,9 @@ autoreconf --install --force
--enable-ifcfg-rh=yes \
--enable-ifupdown=no \
%if %{with ppp}
--with-pppd-plugin-dir=%{_libdir}/pppd/%{ppp_version} \
--enable-ppp=yes \
--with-pppd="%{_sbindir}/pppd" \
--with-pppd-plugin-dir="%{_libdir}/pppd/%{ppp_version}" \
%endif
%if %{with firewalld_zone}
--enable-firewalld-zone=yes \

View file

@ -25,6 +25,7 @@
# SIGN_SOURCE=
# DO_RELEASE=
# BCOND_DEFAULT_DEBUG=
# BCOND_DEFAULT_LTO=
# BCOND_DEFAULT_TEST=
die() {
@ -119,6 +120,7 @@ COMMIT_FULL="${COMMIT_FULL:-$(git rev-parse --verify HEAD || die "Error reading
COMMIT="${COMMIT:-$(printf '%s' "$COMMIT_FULL" | sed 's/^\(.\{10\}\).*/\1/' || die "Error reading HEAD revision")}"
BCOND_DEFAULT_DEBUG="${BCOND_DEFAULT_DEBUG:-0}"
BCOND_DEFAULT_TEST="${BCOND_DEFAULT_TEST:-0}"
BCOND_DEFAULT_LTO="${BCOND_DEFAULT_LTO}"
USERNAME="${USERNAME:-"$(git config user.name) <$(git config user.email)>"}"
SPECFILE="$(abs_path "$SPECFILE" "$SCRIPTDIR/NetworkManager.spec")" || die "invalid \$SPECFILE argument"
SOURCE_FROM_GIT="$(coerce_bool "$SOURCE_FROM_GIT" "")"
@ -174,12 +176,14 @@ LOG "SOURCE_README_IFCFG_FILES=$SOURCE_README_IFCFG_FILES"
LOG "BUILDTYPE=$BUILDTYPE"
LOG "NM_RPMBUILD_ARGS=$NM_RPMBUILD_ARGS"
LOG "BCOND_DEFAULT_DEBUG=$BCOND_DEFAULT_DEBUG"
LOG "BCOND_DEFAULT_LTO=$BCOND_DEFAULT_LTO"
LOG "BCOND_DEFAULT_TEST=$BCOND_DEFAULT_TEST"
LOG ""
LOG "UUID=$UUID"
LOG "BASEDIR=$TEMP"
in_set "$BCOND_DEFAULT_DEBUG" 0 1 || die "Invalid value for \$BCOND_DEFAULT_DEBUG: \"$BCOND_DEFAULT_DEBUG\""
in_set "$BCOND_DEFAULT_LTO" '' 0 1 || die "Invalid value for \$BCOND_DEFAULT_LTO: \"$BCOND_DEFAULT_LTO\""
in_set "$BCOND_DEFAULT_TEST" 0 1 || die "Invalid value for \$BCOND_DEFAULT_TEST: \"$BCOND_DEFAULT_TEST\""
ln -snf "$TEMPBASE" ./latest0
@ -209,6 +213,7 @@ sed -e "s/__VERSION__/$VERSION/g" \
-e "s/__SNAPSHOT__/$SNAPSHOT/g" \
-e "s/__SOURCE1__/$(basename "$SOURCE")/g" \
-e "s/__BCOND_DEFAULT_DEBUG__/$BCOND_DEFAULT_DEBUG/g" \
-e "s/__BCOND_DEFAULT_LTO__/${BCOND_DEFAULT_LTO:-"%{nil}"}/g" \
-e "s/__BCOND_DEFAULT_TEST__/$BCOND_DEFAULT_TEST/g" \
"$SPECFILE" |
sed -e "/^__CHANGELOG__$/ \

View file

@ -26,6 +26,7 @@ usage() {
echo " -s|--snapshot TEXT: use TEXT as the snapshot version for the new package (overwrites \$NM_BUILD_SNAPSHOT environment)"
echo " -r|--release: built a release tarball (this option must be alone)"
echo " --default-for-debug \$OPTION: set the default for "debug" option in the generated spec file"
echo " --default-for-lto \$OPTION: set the default for "lto" option in the generated spec file"
echo " --default-for-test \$OPTION: set the default for "test" option in the generated spec file"
}
@ -56,6 +57,7 @@ SOURCE_FROM_GIT=0
SNAPSHOT="$NM_BUILD_SNAPSHOT"
DO_RELEASE=0
unset BCOND_DEFAULT_DEBUG
unset BCOND_DEFAULT_LTO
unset BCOND_DEFAULT_TEST
ADD_WITH_TEST=1
@ -110,6 +112,9 @@ while [[ $# -gt 0 ]]; do
debug)
[[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=1
;;
lto)
[[ -z ${BCOND_DEFAULT_LTO+.} ]] && BCOND_DEFAULT_LTO=1
;;
test)
ADD_WITH_TEST=0
[[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=1
@ -124,6 +129,9 @@ while [[ $# -gt 0 ]]; do
debug)
[[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=0
;;
lto)
[[ -z ${BCOND_DEFAULT_LTO+.} ]] && BCOND_DEFAULT_LTO=0
;;
test)
ADD_WITH_TEST=0
[[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=0
@ -145,6 +153,12 @@ while [[ $# -gt 0 ]]; do
BCOND_DEFAULT_DEBUG="$1"
shift
;;
--default-for-lto)
[[ $# -gt 0 ]] || die "Missing argument to $A"
in_set "$1" "" 0 1 || die "invalid argument $A \"$1\""
BCOND_DEFAULT_LTO="$1"
shift
;;
--default-for-test)
[[ $# -gt 0 ]] || die "Missing argument to $A"
in_set "$1" "" 0 1 || die "invalid argument $A \"$1\""
@ -226,6 +240,7 @@ export NM_RPMBUILD_ARGS="${WITH_LIST[@]}"
export SNAPSHOT
export DO_RELEASE
export BCOND_DEFAULT_DEBUG="$BCOND_DEFAULT_DEBUG"
export BCOND_DEFAULT_LTO="$BCOND_DEFAULT_LTO"
export BCOND_DEFAULT_TEST="$BCOND_DEFAULT_TEST"
"$SCRIPTDIR"/build.sh

View file

@ -55,7 +55,14 @@ echo_color() {
print_usage() {
echo "Usage:"
echo " $BASH_SOURCE [devel|rc1|rc|major|major-post|minor] [--no-test] [--no-find-backports] [--no-cleanup] [--allow-local-branches] [--no-check-gitlab] [--no-check-news]"
echo " $BASH_SOURCE [devel|rc1|rc|major|major-post|minor]"
echo " [--no-test] \\"
echo " [--no-find-backports] \\"
echo " [--no-cleanup] \\"
echo " [--allow-local-branches] \\"
echo " [--no-check-gitlab] \\"
echo " [--no-check-news] \\"
echo " [--no-warn-publish-docs] \\"
}
die_help() {
@ -204,6 +211,7 @@ FIND_BACKPORTS=1
ALLOW_LOCAL_BRANCHES=0
HELP_AND_EXIT=1
CHECK_GITLAB=1
WARN_PUBLISH_DOCS=1
CHECK_NEWS=1
while [ "$#" -ge 1 ]; do
A="$1"
@ -228,6 +236,9 @@ while [ "$#" -ge 1 ]; do
--no-check-gitlab)
CHECK_GITLAB=0
;;
--no-warn-publish-docs)
WARN_PUBLISH_DOCS=0
;;
--no-check-news)
CHECK_NEWS=0
;;
@ -366,6 +377,24 @@ if ! check_news "$RELEASE_MODE" "@{VERSION_ARR[@]}" ; then
echo "WARNING: NEWS file needs update to mention stable release (test skipped with --no-check-news)"
fi
if [ "$RELEASE_MODE" = major -o "$RELEASE_MODE" = minor ]; then
echo
latest=
if [ "$RELEASE_MODE" = major ]; then
echo "Note that after the new major you have to publish the new documentation on"
latest=" -l"
else
echo "Note that after the stable release you maybe should publish the new documentation on"
fi
echo "$(echo_color 36 -n "https://gitlab.freedesktop.org/NetworkManager/networkmanager.pages.freedesktop.org.git") by running"
echo " \`$(echo_color 36 -n "./scripts/import-docs.sh ${VERSION_ARR[0]}.$((${VERSION_ARR[1]} + 1)).0$latest")\`"
echo
if [ $WARN_PUBLISH_DOCS = 1 ]; then
echo "Avoid this prompt via \"--no-warn-publish-docs\""
read -p "Please confirm that you know [ENTER] "
fi
fi
if [ $FIND_BACKPORTS = 1 ]; then
git show "$ORIGIN/main:contrib/scripts/find-backports" > ./.git/nm-find-backports \
&& chmod +x ./.git/nm-find-backports \

View file

@ -398,6 +398,8 @@ pushd "$DIRNAME"
git remote add origin "git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git"
elif [[ "$BUILD_TYPE" == "dracut" ]]; then
git remote add origin "https://github.com/dracutdevs/dracut.git"
elif [[ "$BUILD_TYPE" == "systemd" ]]; then
git remote add origin "https://github.com/systemd/systemd.git"
elif [[ "$BUILD_TYPE" == "vpnc" ]]; then
git_remote_add_github ndpgroup/vpnc
fi
@ -515,6 +517,9 @@ cc304f05edab6c408a0f061eb1a104f9f06b8587 86ef789876b65c61751ce854835b91d4 init
# dracut
00efe708cab023bfe6eaf530d8ac8ea97b440de2 SHA512 (dracut-050.tar.xz) = 9d9a66acfd6b9d2fd50855a59a2393e0602c2ef97119db046f68d6167ea84d1423fa465b8b4d96339febb38d5a96df26dec7862c4b3397c3d726db18d280eee4
# systemd
903dd65b5eb63257393955cb79777beb8c71afc1 SHA512 (systemd-253-rc1.tar.gz) = aaf0a6bf21bbc50a42015c9cb17f69d1aaf6cab6cabfba5140a94212fb864e38d638dace9a70447f62b4d2a817a0d3bd6f4ae8d9b3c2e741cdeb1cb332f70b65
EOF
)"
OLDIFS="$IFS"

View file

@ -0,0 +1,58 @@
#!/bin/bash
# Uses `git cherry-pick -x` to backport a merge commit to an older branch.
#
# Usage:
# First checkout the old-stable branch, that is the target for the backport.
# Then `git-backport-merge MERGE_REF [REFS...]`
# MERGE_REF is the merge commit that should be backported.
# [REFS...] is the commits that should be backported. If omitted,
# it automatically takes the parent commits of the merge commit.
die() {
printf '%s\n' "$*" >&2
exit 1
}
backport_merge() {
test "$#" -gt 0 || die "Requires the commit ref to backport (and optimally select the commits to include)"
local M="${@:$#}"
local h
if test "$#" -eq 1; then
local C=($(git log --reverse "--pretty=%H" "$M"^1.."$M"^2))
else
local C=("${@:1:$#-1}")
fi
local OLD_HEAD="$(git rev-parse HEAD)" || die "failed to get current HEAD"
test -n "$(git status --porcelain --untracked-files=no)" && die "Working directory contains changes. Abort."
local M_ID="$(git rev-parse "$M"^{commit})" || die "\"$M\" is not a valid commit"
trap EXIT 'test -z "$OLD_HEAD" || git reset "$OLD_HEAD" --hard'
for h in "${C[@]}"; do
if ! git cherry-pick --allow-empty -x "$h" ; then
git cherry-pick --abort
die "failed to cherry-pick commit \"$h\" on top of \"$(git rev-parse HEAD)\""
fi
done
local NEW_HEAD="$(git rev-parse HEAD)" || die "failed to get new HEAD"
git reset --hard "$OLD_HEAD" || die "Failed to reset to previous HEAD \"$OLD_HEAD\""
git merge --no-ff --no-edit "$NEW_HEAD" || die "Failed to merge old HEAD \"$OLD_HEAD\" with new \"$NEW_HEAD\""
git commit --amend --allow-empty -C "$M" || die "Failed to amend merge commit \"$(git rev-parse HEAD)\" with commit message from \"$M\""
git rev-parse "$M" | sed 's/.*/(cherry picked from commit \0)/' | GIT_EDITOR='sh -c "cat >> \"$1\""' git commit --allow-empty --amend || \
die "Failed to amend merge commit \"$(git rev-parse HEAD)\" with cherry-picked-from message from \"$M\""
OLD_HEAD=
}
backport_merge "$@"

View file

@ -2,7 +2,10 @@
# environment variables:
# - GIT_REF: the ref that should be build. Can be "main" or a git sha.
# - DEBUG: set to 1 to build "--with debug".
# - DEBUG: set to 1 to build "--with debug". Otherwise the default is a release
# build.
# - LTO: set to 1/0 to build "--with/--without lto", otherwise the default depends
# on the distribution.
# - NM_GIT_BUNDLE: set to a HTTP url where to fetch the nm-git-bundle-*.noarch.rpm
# from. Set to empty to skip it. By default, it fetches the bundle from copr.
@ -14,6 +17,14 @@ else
DEBUG="--without debug"
fi
if [ "$LTO" = 0 ]; then
LTO='--without lto'
elif [ "$LTO" = 1 ]; then
LTO='--with lto'
else
LTO=
fi
if [[ -z "$GIT_REF" ]]; then
echo "\$GIT_REF is not set!"
exit 1
@ -55,11 +66,12 @@ git remote remove nm-git-bundle || true
GIT_SHA="$(git show-ref --verify --hash "$GIT_REF" 2>/dev/null ||
git show-ref --verify --hash "refs/remotes/origin/$GIT_REF" 2>/dev/null ||
git rev-parse --verify "refs/remotes/origin/$GIT_REF" 2>/dev/null ||
git rev-parse --verify "$GIT_REF^{commit}" 2>/dev/null)"
git checkout -b tmp "$GIT_SHA"
./contrib/fedora/rpm/build_clean.sh -g -S -w test $DEBUG -s copr
./contrib/fedora/rpm/build_clean.sh -g -S -w test $DEBUG $LTO -s copr
popd
mv ./NetworkManager/contrib/fedora/rpm/latest/{SOURCES,SPECS}/* .

View file

@ -96,7 +96,8 @@ done
case "$(git config --get-all remote.origin.url)" in
"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git"| \
"git@gitlab.freedesktop.org:NetworkManager/NetworkManager.git")
"git@gitlab.freedesktop.org:NetworkManager/NetworkManager.git"| \
"ssh://git@gitlab.freedesktop.org/NetworkManager/NetworkManager")
;;
*)
die "unexpected git repository. Expected that remote.origin.url is set to \"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git\""
@ -109,6 +110,7 @@ git_config_reset blame.markUnblamableLines true
git_config_add notes.displayref 'refs/notes/bugs'
git_config_add remote.origin.fetch 'refs/notes/bugs:refs/notes/bugs'
git_config_reset remote.origin.pushurl 'git@gitlab.freedesktop.org:NetworkManager/NetworkManager.git'
git_config_add 'alias.backport-merge' '! (git show main:contrib/scripts/git-backport-merge || git show origin/main:contrib/scripts/git-backport-merge) | bash -s -'
if [ "$NO_TEST" != 1 ]; then
printf "Run with \"--no-test\" or see \"-h\"\n" >&2

View file

@ -6,7 +6,7 @@ project(
# - add corresponding NM_VERSION_x_y_z macros in
# "src/libnm-core-public/nm-version-macros.h.in"
# - update number in configure.ac
version: '1.42.0',
version: '1.43.2',
license: 'GPL2+',
default_options: [
'buildtype=debugoptimized',

1667
po/uk.po

File diff suppressed because it is too large Load diff

View file

@ -6811,7 +6811,10 @@ device_link_changed(gpointer user_data)
* sync state transition.
*/
nm_device_queue_recheck_assume(self);
nm_device_set_unmanaged_by_flags_queue(self, NM_UNMANAGED_PLATFORM_INIT, FALSE, reason);
nm_device_set_unmanaged_by_flags_queue(self,
NM_UNMANAGED_PLATFORM_INIT,
NM_UNMAN_FLAG_OP_SET_MANAGED,
reason);
}
_dev_unmanaged_check_external_down(self, FALSE, FALSE);
@ -7867,7 +7870,7 @@ nm_device_master_add_slave(NMDevice *self, NMDevice *slave, gboolean configure)
g_warn_if_fail(!NM_FLAGS_HAS(slave_priv->unmanaged_mask, NM_UNMANAGED_IS_SLAVE));
nm_device_set_unmanaged_by_flags(slave,
NM_UNMANAGED_IS_SLAVE,
FALSE,
NM_UNMAN_FLAG_OP_SET_MANAGED,
NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED);
changed = TRUE;
} else
@ -14691,7 +14694,7 @@ nm_device_set_unmanaged_by_quitting(NMDevice *self)
nm_device_set_unmanaged_by_flags(self,
NM_UNMANAGED_QUITTING,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
need_deactivate ? NM_DEVICE_STATE_REASON_REMOVED
: NM_DEVICE_STATE_REASON_NOW_UNMANAGED);
}

View file

@ -608,9 +608,9 @@ typedef enum {
} NMUnmanagedFlags;
typedef enum {
NM_UNMAN_FLAG_OP_SET_MANAGED = FALSE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED = TRUE,
NM_UNMAN_FLAG_OP_FORGET = 2,
NM_UNMAN_FLAG_OP_SET_MANAGED = 0,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_UNMAN_FLAG_OP_FORGET,
} NMUnmanFlagOp;
const char *nm_unmanaged_flags2str(NMUnmanagedFlags flags, char *buf, gsize len);

View file

@ -10,6 +10,7 @@
#include <arpa/inet.h>
#include <stdlib.h>
#include "libnm-glib-aux/nm-random-utils.h"
#include "libnm-platform/nm-platform-utils.h"
#include "libnm-platform/nm-platform.h"
#include "libnm-platform/nmp-netns.h"
@ -858,7 +859,7 @@ solicit_retransmit_time_jitter(gint32 solicit_retransmit_time_msec)
ten_percent = NM_MAX(1, solicit_retransmit_time_msec / 10);
return solicit_retransmit_time_msec - ten_percent
+ ((gint32) (g_random_int() % (2u * ((guint32) ten_percent))));
+ ((gint32) (nm_random_u32() % (2u * ((guint32) ten_percent))));
}
static gboolean
@ -936,7 +937,7 @@ solicit_timer_start(NMNDisc *ndisc)
* a suitable delay in 2021. Wait only up to 250 msec instead. */
delay_msec =
g_random_int() % ((guint32) (NM_NDISC_RFC4861_MAX_RTR_SOLICITATION_DELAY * 1000 / 4));
nm_random_u32() % ((guint32) (NM_NDISC_RFC4861_MAX_RTR_SOLICITATION_DELAY * 1000 / 4));
_LOGD("solicit: schedule sending first solicitation (of %d) in %.3f seconds",
priv->config.router_solicitations,
@ -974,8 +975,9 @@ announce_router(NMNDisc *ndisc)
/* Schedule next initial announcement retransmit. */
priv->send_ra_id =
g_timeout_add_seconds(g_random_int_range(NM_NDISC_ROUTER_ADVERT_DELAY,
NM_NDISC_ROUTER_ADVERT_INITIAL_INTERVAL),
g_timeout_add_seconds(nm_random_u64_range_full(NM_NDISC_ROUTER_ADVERT_DELAY,
NM_NDISC_ROUTER_ADVERT_INITIAL_INTERVAL,
FALSE),
(GSourceFunc) announce_router,
ndisc);
} else {
@ -1009,10 +1011,9 @@ announce_router_initial(NMNDisc *ndisc)
/* Schedule the initial send rather early. Clamp the delay by minimal
* delay and not the initial advert internal so that we start fast. */
if (G_LIKELY(!priv->send_ra_id)) {
priv->send_ra_id =
g_timeout_add_seconds(g_random_int_range(0, NM_NDISC_ROUTER_ADVERT_DELAY),
(GSourceFunc) announce_router,
ndisc);
priv->send_ra_id = g_timeout_add_seconds(nm_random_u64_range(NM_NDISC_ROUTER_ADVERT_DELAY),
(GSourceFunc) announce_router,
ndisc);
}
}
@ -1028,7 +1029,7 @@ announce_router_solicited(NMNDisc *ndisc)
nm_clear_g_source(&priv->send_ra_id);
if (!priv->send_ra_id) {
priv->send_ra_id = g_timeout_add(g_random_int_range(0, NM_NDISC_ROUTER_ADVERT_DELAY_MS),
priv->send_ra_id = g_timeout_add(nm_random_u64_range(NM_NDISC_ROUTER_ADVERT_DELAY_MS),
(GSourceFunc) announce_router,
ndisc);
}

View file

@ -368,7 +368,7 @@ nm_checkpoint_rollback(NMCheckpoint *self)
_LOGD("rollback: device was not realized, unmanage it");
nm_device_set_unmanaged_by_flags_queue(device,
NM_UNMANAGED_USER_EXPLICIT,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_NOW_UNMANAGED);
goto next_dev;
}
@ -402,7 +402,7 @@ nm_checkpoint_rollback(NMCheckpoint *self)
_LOGD("rollback: explicitly unmanage device");
nm_device_set_unmanaged_by_flags_queue(device,
NM_UNMANAGED_USER_EXPLICIT,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_NOW_UNMANAGED);
}
goto next_dev;

View file

@ -3673,9 +3673,7 @@ _hw_addr_eth_complete(struct ether_addr *addr,
nm_assert((ouis == NULL) ^ (ouis_len != 0));
if (ouis) {
/* g_random_int() is good enough here. It uses a static GRand instance
* that is seeded from /dev/urandom. */
oui = ouis[g_random_int() % ouis_len];
oui = ouis[nm_random_u64_range(ouis_len)];
g_free(ouis);
} else {
if (!nm_utils_hwaddr_aton(current_mac_address, &oui, ETH_ALEN))

View file

@ -1804,7 +1804,7 @@ remove_device(NMManager *self, NMDevice *device, gboolean quitting)
nm_device_sys_iface_state_set(device, NM_DEVICE_SYS_IFACE_STATE_REMOVED);
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_PLATFORM_INIT,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_REMOVED);
}
}
@ -4942,12 +4942,12 @@ unmanaged_to_disconnected(NMDevice *device)
* and force the device to be managed. */
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_PLATFORM_INIT,
FALSE,
NM_UNMAN_FLAG_OP_SET_MANAGED,
NM_DEVICE_STATE_REASON_USER_REQUESTED);
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_USER_EXPLICIT,
FALSE,
NM_UNMAN_FLAG_OP_SET_MANAGED,
NM_DEVICE_STATE_REASON_USER_REQUESTED);
if (!nm_device_get_managed(device, FALSE)) {
@ -6500,7 +6500,7 @@ device_sleep_cb(NMDevice *device, GParamSpec *pspec, NMManager *self)
_LOGD(LOGD_SUSPEND, "sleep: unmanaging device %s", nm_device_get_ip_iface(device));
nm_device_set_unmanaged_by_flags_queue(device,
NM_UNMANAGED_SLEEPING,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_SLEEPING);
break;
case NM_DEVICE_STATE_UNMANAGED:
@ -6562,7 +6562,7 @@ do_sleep_wake(NMManager *self, gboolean sleeping_changed)
} else {
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_SLEEPING,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_SLEEPING);
}
}
@ -6582,7 +6582,7 @@ do_sleep_wake(NMManager *self, gboolean sleeping_changed)
if (device_is_wake_on_lan(priv->platform, device))
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_SLEEPING,
TRUE,
NM_UNMAN_FLAG_OP_SET_UNMANAGED,
NM_DEVICE_STATE_REASON_SLEEPING);
/* Check if the device is unmanaged but the state transition is still pending.
@ -6638,7 +6638,7 @@ do_sleep_wake(NMManager *self, gboolean sleeping_changed)
nm_device_set_unmanaged_by_flags(device,
NM_UNMANAGED_SLEEPING,
FALSE,
NM_UNMAN_FLAG_OP_SET_MANAGED,
NM_DEVICE_STATE_REASON_NOW_MANAGED);
}

View file

@ -4,6 +4,8 @@
#include "nm-libnm-aux.h"
#include "libnm-glib-aux/nm-random-utils.h"
/*****************************************************************************/
NMClient *
@ -101,7 +103,7 @@ nmc_client_new_waitsync(GCancellable *cancellable,
* code no longer uses that, we hardly test those code paths. But they should
* work just the same. Randomly use instead the sync initialization in a debug
* build... */
if ((g_random_int() % 2) == 0) {
if (nm_random_bool()) {
gboolean success;
va_start(ap, first_property_name);

View file

@ -378,7 +378,7 @@ static void name_owner_changed_cb(GDBusConnection *connection,
static void name_owner_get_call(NMClient *self);
static void _set_nm_running(NMClient *self);
static void _set_nm_running(NMClient *self, gboolean queue_notify);
/*****************************************************************************/
@ -2724,6 +2724,7 @@ _obj_handle_dbus_changes(NMClient *self, NMLDBusObject *dbobj)
if (dbobj->dbus_path == _dbus_path_nm) {
nm_assert(!priv->dbobj_nm);
priv->dbobj_nm = dbobj;
_set_nm_running(self, TRUE);
} else if (dbobj->dbus_path == _dbus_path_settings) {
nm_assert(!priv->dbobj_settings);
priv->dbobj_settings = dbobj;
@ -2783,6 +2784,7 @@ _obj_handle_dbus_changes(NMClient *self, NMLDBusObject *dbobj)
if (dbobj->dbus_path == _dbus_path_nm) {
nm_assert(priv->dbobj_nm == dbobj);
priv->dbobj_nm = NULL;
_set_nm_running(self, TRUE);
nml_dbus_property_o_clear_many(priv->nm.property_o,
G_N_ELEMENTS(priv->nm.property_o),
self);
@ -2936,7 +2938,7 @@ _dbus_handle_changes_commit(NMClient *self, gboolean allow_init_start_check_comp
_nm_client_notify_event_emit(self);
_set_nm_running(self);
_set_nm_running(self, FALSE);
if (allow_init_start_check_complete)
_init_start_check_complete(self);
@ -3079,11 +3081,10 @@ _dbus_handle_interface_added(NMClient *self,
const char *object_path,
GVariant *ifaces)
{
gboolean changed = FALSE;
const char *interface_name;
GVariant *changed_properties;
GVariantIter iter_ifaces;
NMLDBusObject *dbobj = NULL;
gboolean changed = FALSE;
const char *interface_name;
GVariant *changed_properties;
GVariantIter iter_ifaces;
nm_assert(g_variant_is_of_type(ifaces, G_VARIANT_TYPE("a{sa{sv}}")));
@ -3097,7 +3098,7 @@ _dbus_handle_interface_added(NMClient *self,
interface_name,
TRUE,
changed_properties,
&dbobj))
NULL))
changed = TRUE;
}
@ -4084,15 +4085,18 @@ nm_client_get_startup(NMClient *client)
}
static void
_set_nm_running(NMClient *self)
_set_nm_running(NMClient *self, gboolean queue_notify)
{
NMClientPrivate *priv = NM_CLIENT_GET_PRIVATE(self);
gboolean nm_running;
nm_running = priv->name_owner && !priv->get_managed_objects_cancellable;
nm_running = priv->dbobj_nm && priv->name_owner && !priv->get_managed_objects_cancellable;
if (priv->nm_running != nm_running) {
priv->nm_running = nm_running;
_notify(self, PROP_NM_RUNNING);
if (queue_notify) {
_nm_client_queue_notify_object(self, self, obj_properties[PROP_NM_RUNNING]);
} else
_notify(self, PROP_NM_RUNNING);
}
}
@ -7172,7 +7176,7 @@ name_owner_changed(NMClient *self, const char *name_owner)
if (changed && priv->name_owner)
_init_fetch_all(self);
_set_nm_running(self);
_set_nm_running(self, FALSE);
if (priv->init_data) {
nm_auto_pop_gmaincontext GMainContext *main_context = NULL;

View file

@ -72,6 +72,7 @@
#define NM_VERSION_1_38 (NM_ENCODE_VERSION(1, 38, 0))
#define NM_VERSION_1_40 (NM_ENCODE_VERSION(1, 40, 0))
#define NM_VERSION_1_42 (NM_ENCODE_VERSION(1, 42, 0))
#define NM_VERSION_1_44 (NM_ENCODE_VERSION(1, 44, 0))
/* For releases, NM_API_VERSION is equal to NM_VERSION.
*

View file

@ -355,6 +355,20 @@
#define NM_AVAILABLE_IN_1_42
#endif
#if NM_VERSION_MIN_REQUIRED >= NM_VERSION_1_44
#define NM_DEPRECATED_IN_1_44 G_DEPRECATED
#define NM_DEPRECATED_IN_1_44_FOR(f) G_DEPRECATED_FOR(f)
#else
#define NM_DEPRECATED_IN_1_44
#define NM_DEPRECATED_IN_1_44_FOR(f)
#endif
#if NM_VERSION_MAX_ALLOWED < NM_VERSION_1_44
#define NM_AVAILABLE_IN_1_44 G_UNAVAILABLE(1, 44)
#else
#define NM_AVAILABLE_IN_1_44
#endif
/*
* Synchronous API for calling D-Bus in libnm is deprecated. See
* https://networkmanager.dev/docs/libnm/latest/usage.html#sync-api

View file

@ -447,3 +447,53 @@ again_getrandom:
return nm_utils_fd_read_loop_exact(fd, p, n, FALSE);
}
guint64
nm_random_u64_range_full(guint64 begin, guint64 end, gboolean crypto_bytes)
{
gboolean bad_crypto_bytes = FALSE;
guint64 remainder;
guint64 maxvalue;
guint64 x;
guint64 m;
/* Returns a random #guint64 equally distributed in the range [@begin..@end-1].
*
* The function always set errno. It either sets it to zero or to EAGAIN
* (if crypto_bytes were requested but not obtained). In any case, the function
* will always return a random number in the requested range (worst case, it's
* not crypto_bytes despite being requested). Check errno if you care. */
if (begin >= end) {
/* systemd's random_u64_range(0) is an alias for random_u64_range((uint64_t)-1).
* Not for us. It's a caller error to request an element from an empty range. */
return nm_assert_unreachable_val(begin);
}
m = end - begin;
if (m == 1) {
x = 0;
goto out;
}
remainder = G_MAXUINT64 % m;
maxvalue = G_MAXUINT64 - remainder;
do
if (crypto_bytes) {
if (nm_random_get_crypto_bytes(&x, sizeof(x)) < 0) {
/* Cannot get good crypto numbers. We will try our best, but fail
* and set errno below. */
crypto_bytes = FALSE;
bad_crypto_bytes = TRUE;
continue;
}
} else
nm_random_get_bytes(&x, sizeof(x));
while (x >= maxvalue);
out:
errno = bad_crypto_bytes ? EAGAIN : 0;
return begin + (x % m);
}

View file

@ -16,4 +16,39 @@ nm_random_get_bytes(void *p, size_t n)
int nm_random_get_crypto_bytes(void *p, size_t n);
static inline guint32
nm_random_u32(void)
{
guint32 v;
nm_random_get_bytes(&v, sizeof(v));
return v;
}
static inline guint64
nm_random_u64(void)
{
guint64 v;
nm_random_get_bytes(&v, sizeof(v));
return v;
}
static inline bool
nm_random_bool(void)
{
guint8 ch;
nm_random_get_bytes(&ch, sizeof(ch));
return ch % 2u;
}
guint64 nm_random_u64_range_full(guint64 begin, guint64 end, gboolean crypto_bytes);
static inline guint64
nm_random_u64_range(guint64 end)
{
return nm_random_u64_range_full(0, end, FALSE);
}
#endif /* __NM_RANDOM_UTILS_H__ */

View file

@ -137,6 +137,55 @@ test_nmhash(void)
/*****************************************************************************/
static void
test_nm_random(void)
{
int i_run;
for (i_run = 0; i_run < 1000; i_run++) {
guint64 begin;
guint64 end;
guint64 m;
guint64 x;
m = nmtst_get_rand_uint64();
m = m >> (nmtst_get_rand_uint32() % 64);
if (m == 0)
continue;
switch (nmtst_get_rand_uint32() % 4) {
case 0:
begin = 0;
break;
case 1:
begin = nmtst_get_rand_uint64() % 1000;
break;
case 2:
begin = ((G_MAXUINT64 - m) - 500) + (nmtst_get_rand_uint64() % 1000);
break;
default:
begin = nmtst_get_rand_uint64() % (G_MAXUINT64 - m);
break;
}
end = (begin + m) - 10 + (nmtst_get_rand_uint64() % 5);
if (begin >= end)
continue;
if (begin == 0 && nmtst_get_rand_bool())
x = nm_random_u64_range(end);
else
x = nm_random_u64_range_full(begin, end, nmtst_get_rand_bool());
g_assert_cmpuint(x, >=, begin);
g_assert_cmpuint(x, <, end);
}
}
/*****************************************************************************/
static const char *
_make_strv_foo(void)
{
@ -2417,6 +2466,7 @@ main(int argc, char **argv)
g_test_add_func("/general/test_inet_utils", test_inet_utils);
g_test_add_func("/general/test_garray", test_garray);
g_test_add_func("/general/test_nm_prioq", test_nm_prioq);
g_test_add_func("/general/test_nm_random", test_nm_random);
return g_test_run();
}

View file

@ -707,6 +707,20 @@ _nm_log_impl(const char *file,
msg = nm_vsprintf_buf_or_alloc(fmt, fmt, msg_stack, &msg_heap, NULL);
/* We always print the level and the timestamp.
*
* Timestamps are very useful for understanding logfiles. While journalctl
* might record the timestamp, it is not present in plain `journalctl` output.
* Users who report a bug would simply send us the `journalctl` output and
* requesting an output with timestamps (even if it's stored somewhere inside
* journald) is not workable.
*
* We print the level, because this too, it's to quickly identify the severity
* of a message.
*
* We also do this for all messages (for all levels), because then the logging
* lines are formatted and aligned in a consistent way, which aids reading the
* logs. */
#define MESSAGE_FMT "%s%-7s [%ld.%04ld] %s"
#define MESSAGE_ARG(prefix, tv, msg) \
prefix, nm_log_level_desc[level].level_str, (tv).tv_sec, ((tv).tv_usec / 100), (msg)

View file

@ -17,6 +17,7 @@
#include <linux/if_ether.h>
#include "libnm-glib-aux/nm-secret-utils.h"
#include "libnm-glib-aux/nm-random-utils.h"
#include "common.h"
#include "connections.h"
#include "libnmc-base/nm-client-utils.h"
@ -4102,10 +4103,11 @@ generate_wpa_key(char *key, size_t len)
/* generate a 8-chars ASCII WPA key */
for (i = 0; i < WPA_PASSKEY_SIZE; i++) {
int c;
c = g_random_int_range(33, 126);
/* too many non alphanumeric characters are hard to remember for humans */
while (!g_ascii_isalnum(c))
c = g_random_int_range(33, 126);
do {
c = nm_random_u64_range_full(33, 126, TRUE);
/* too many non alphanumeric characters are hard to remember for humans */
} while (g_ascii_isalnum(c));
key[i] = (char) c;
}
@ -4124,7 +4126,8 @@ generate_wep_key(char *key, size_t len)
/* generate a 10-digit hex WEP key */
for (i = 0; i < 10; i++) {
int digit;
digit = g_random_int_range(0, 16);
digit = nm_random_u64_range_full(0, 16, TRUE);
key[i] = hexdigits[digit];
}
key[10] = '\0';