Hello community, here is the log from the commit of package wicked for openSUSE:Factory checked in at 2018-10-11 11:44:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/wicked (Old) and /work/SRC/openSUSE:Factory/.wicked.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wicked" Thu Oct 11 11:44:06 2018 rev:71 rq:640060 version:0.6.50 Changes: -------- --- /work/SRC/openSUSE:Factory/wicked/wicked.changes 2018-10-01 09:05:12.599903514 +0200 +++ /work/SRC/openSUSE:Factory/.wicked.new/wicked.changes 2018-10-11 11:44:48.450836009 +0200 @@ -1,0 +2,24 @@ +Fri Oct 5 11:06:49 UTC 2018 - rtorreromarijnis...@suse.com + +- version 0.6.50 +- firewall: do not assign default zone, but pass as is (bsc#1109147) +- nanny: fix memory leaks on fast create-delete calls (bsc#1095818) + + fsm: cleanup worker reset (reinit) vs. free + + fsm: do not process or pass pending workers to nanny + + nanny: catch init failures in device registration + + netdev: allow NULL in get and put functions + + model: fix to call (netif) dbus object destructors + + model: removed server specific call in netif destroy + + fsm: handle NULL in worker get and release calls + + fsm: process device delete event separately + + calls: split get netif service and netif list utils + + xml-schema: fix range constraint values parsing + + xml-schema: remove underscores from ni_xs_type_new + + xml-schema: fix type leak around ni_xs_build_one_type + + fsm: free worker control mode on worker free + + xpath: trace and free complete xpath expression tree + + nanny: fix config leak in ni_nanny_recheck_policy + + dbus: free pending call in ni_dbus_connection_call + + dbus: free dbus_message_iter_get_signature result + +------------------------------------------------------------------- Old: ---- wicked-0.6.49.tar.bz2 New: ---- wicked-0.6.50.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ wicked.spec ++++++ --- /var/tmp/diff_new_pack.Y6lc2d/_old 2018-10-11 11:44:49.058835235 +0200 +++ /var/tmp/diff_new_pack.Y6lc2d/_new 2018-10-11 11:44:49.058835235 +0200 @@ -18,7 +18,7 @@ %define release_prefix %{?snapshot:%{snapshot}}%{!?snapshot:0} Name: wicked -Version: 0.6.49 +Version: 0.6.50 Release: %{release_prefix}.0.0 Summary: Network configuration infrastructure License: GPL-2.0 ++++++ wicked-0.6.49.tar.bz2 -> wicked-0.6.50.tar.bz2 ++++++ ++++ 29473 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/ChangeLog new/wicked-0.6.50/ChangeLog --- old/wicked-0.6.49/ChangeLog 2018-09-21 16:23:58.000000000 +0200 +++ new/wicked-0.6.50/ChangeLog 2018-10-04 14:29:17.000000000 +0200 @@ -1,3 +1,141 @@ +commit e6e00395dfe3c6b789dd8ab22088e76ad9d99f6d +Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com> +Date: Thu Oct 4 13:23:54 2018 +0100 + + version 0.6.50 + +commit c68d69da192cd4530319bb22987fa9626328ba5d +Merge: 9ee99d89 51733759 +Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com> +Date: Thu Oct 4 11:56:36 2018 +0100 + + Merge pull request #775 from mtomaschewski/nanny-leaks + + nanny: fix memory leaks on fast create-delete calls (bsc#1095818) + +commit 51733759211289282cada610f48d883e9c3b5b6c +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:51:37 2018 +0200 + + fsm: cleanup worker reset (reinit) vs. free + +commit 4f62a0874081720f2ccd163da0a9ec622b6bc77d +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:43:55 2018 +0200 + + fsm: do not process or pass pending workers to nanny + +commit 6b082524fa2024c3de8036ac93dfd6d4166ba61b +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:37:14 2018 +0200 + + nanny: catch init failures in device registration + +commit 9ee99d89e9c69725fc3493d7538cfa48364b8a05 +Merge: de7b8525 01bc2939 +Author: Marius Tomaschewski <m...@suse.de> +Date: Wed Oct 3 12:27:25 2018 +0200 + + Merge pull request #774 from rtorrero/firewall-def-zone + + firewall: do not assign default zone, but pass as is (bsc#1109147) + +commit f4bb5e9c6a1d3aa8efe48b01cf5d56cc8b8e66c2 +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:32:53 2018 +0200 + + netdev: allow NULL in get and put functions + +commit e2e9ee01c9a7b131867fab67d9a524db841c8e69 +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:30:07 2018 +0200 + + model: fix to call (netif) dbus object destructors + +commit 2423eb77e4e31c223fd6c99c74419e09890b73a2 +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:26:03 2018 +0200 + + model: removed server specific call in netif destroy + +commit 5284f9444abea52279ad6783de0378c9ef215105 +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:23:07 2018 +0200 + + fsm: handle NULL in worker get and release calls + +commit e4a7c38721cadba1c6875307ba4e607e2b62443a +Author: Marius Tomaschewski <m...@suse.de> +Date: Tue Oct 2 01:20:41 2018 +0200 + + fsm: process device delete event separately + +commit 01bc2939a95d1c10e75a7c82bac666ba5dad54ab +Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com> +Date: Mon Oct 1 13:08:54 2018 +0100 + + firewall: do not assign default zone, but pass as is (bsc#1109147) + +commit 4975c4f49c1eb9d5f75b6bf5f546e95f9c03b897 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 18:27:13 2018 +0200 + + calls: split get netif service and netif list utils + +commit dba165a988be05720a197b2aaf065a5cd2390ec5 +Author: Eclipse Webmaster team <webmas...@eclipse.org> +Date: Wed Sep 26 14:34:51 2018 -0400 + + Fix Typos + +commit 64d62c35c88b205be1f67c23892408670feb28b0 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:46:24 2018 +0200 + + xml-schema: fix range constraint values parsing + +commit 4075e5069c75ae8f27b187808d9737eac1a8f67f +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:42:39 2018 +0200 + + xml-schema: remove underscores from ni_xs_type_new + +commit a62dfe5ead79a941f34aca834d8f2fa2e3faa77e +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:38:58 2018 +0200 + + xml-schema: fix type leak around ni_xs_build_one_type + +commit 8d69167f0e51a9f363226833faa1a1be4d7317f6 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:16:15 2018 +0200 + + fsm: free worker control mode on worker free + +commit b0f3df40890c7a45f0b7248f143c69fa93f3a341 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:14:43 2018 +0200 + + xpath: trace and free complete xpath expression tree + +commit e561f4c8fc0e5df9115dd3eb0bd8f94f4ac31946 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:10:18 2018 +0200 + + nanny: fix config leak in ni_nanny_recheck_policy + +commit 23d248d98078597a3ded18175b2c4c2e74356451 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:09:25 2018 +0200 + + dbus: free pending call in ni_dbus_connection_call + +commit 84a7b68b7a219a5c5a6f719c25dc686de6664e97 +Author: Marius Tomaschewski <m...@suse.de> +Date: Mon Sep 24 14:06:01 2018 +0200 + + dbus: free dbus_message_iter_get_signature result + commit 350a23bfe13fd29e9b2b503e916e7aeade27175d Author: Rubén Torrero Marijnissen <rtorreromarijnis...@suse.com> Date: Fri Sep 21 14:05:09 2018 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/VERSION new/wicked-0.6.50/VERSION --- old/wicked-0.6.49/VERSION 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/VERSION 2018-10-04 14:23:47.000000000 +0200 @@ -1 +1 @@ -0.6.49 +0.6.50 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/compile new/wicked-0.6.50/compile --- old/wicked-0.6.49/compile 1970-01-01 01:00:00.000000000 +0100 +++ new/wicked-0.6.50/compile 2018-10-04 14:28:56.000000000 +0200 @@ -0,0 +1,348 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Written by Tom Tromey <tro...@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-autom...@gnu.org> or send patches to +# <automake-patc...@gnu.org>. + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to <bug-autom...@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/config.h.in new/wicked-0.6.50/config.h.in --- old/wicked-0.6.49/config.h.in 2018-09-21 16:23:50.000000000 +0200 +++ new/wicked-0.6.50/config.h.in 2018-10-04 14:28:55.000000000 +0200 @@ -182,8 +182,7 @@ /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Enable to use rfc4361 DHCPv4 client-id by default */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/extensions/firewall new/wicked-0.6.50/extensions/firewall --- old/wicked-0.6.49/extensions/firewall 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/extensions/firewall 2018-10-04 14:23:19.000000000 +0200 @@ -66,10 +66,7 @@ test "X$WICKED_INTERFACE_NAME" = "X" && return 1 local ZONE=`wicked_config_get_zone "$WICKED_ARGFILE"` - if test "X$ZONE" = "X" ; then - ZONE=`"$firewalld_cmd" --get-default-zone 2>/dev/null` - test "X$ZONE" = "X" && return 1 - fi + "$firewalld_cmd" --zone="$ZONE" --change-interface="$WICKED_INTERFACE_NAME" &>/dev/null } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/include/wicked/fsm.h new/wicked-0.6.50/include/wicked/fsm.h --- old/wicked-0.6.49/include/wicked/fsm.h 2017-07-28 14:41:47.000000000 +0200 +++ new/wicked-0.6.50/include/wicked/fsm.h 2018-10-04 14:23:19.000000000 +0200 @@ -392,15 +392,27 @@ static inline ni_ifworker_t * ni_ifworker_get(ni_ifworker_t *w) { - w->refcount++; + if (w) { + ni_assert(w->refcount); + w->refcount++; + } return w; } -static inline void -ni_ifworker_release(ni_ifworker_t *state) +static inline unsigned int +ni_ifworker_release(ni_ifworker_t *w) { - if (--(state->refcount) == 0) - ni_ifworker_free(state); + if (w) { + ni_assert(w->refcount); + w->refcount--; + + if (w->refcount == 0) { + ni_ifworker_free(w); + } else { + return w->refcount; + } + } + return 0; } static inline ni_bool_t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/include/wicked/netinfo.h new/wicked-0.6.50/include/wicked/netinfo.h --- old/wicked-0.6.49/include/wicked/netinfo.h 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/include/wicked/netinfo.h 2018-10-04 14:23:19.000000000 +0200 @@ -182,7 +182,7 @@ extern ni_netdev_t * ni_netdev_new(const char *name, unsigned int ifindex); extern ni_netdev_t * ni_netdev_get(ni_netdev_t *ifp); -extern int ni_netdev_put(ni_netdev_t *ifp); +extern unsigned int ni_netdev_put(ni_netdev_t *ifp); extern int ni_netdev_update(ni_netdev_t *ifp); extern int ni_netdev_guess_type(ni_netdev_t *ifp); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/man/wicked.8.in new/wicked-0.6.50/man/wicked.8.in --- old/wicked-0.6.49/man/wicked.8.in 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/man/wicked.8.in 2018-10-04 14:23:19.000000000 +0200 @@ -371,12 +371,12 @@ .TP .BI "\-\-quiet " Used to obtain status return codes only. No information is output, -so can be used for scrpiting. +so can be used for scripting. .TP .BI "\-\-brief " Displays device status for specified interfaces. .TP -.BI "\-\-ifconfig " filenam +.BI "\-\-ifconfig " filename Note that this is ifstatus specfic (ie. root only). Used to alter the source of the specified interface configurations. .PP @@ -417,7 +417,7 @@ .TP .BI "\-\-quiet " Used to obtain status return codes only. No information is output, -so can be used for scrpiting. +so can be used for scripting. .TP .BI "\-\-missed " Check if the interface is missed. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/missing new/wicked-0.6.50/missing --- old/wicked-0.6.49/missing 2018-09-21 16:23:51.000000000 +0200 +++ new/wicked-0.6.50/missing 2018-10-04 14:28:56.000000000 +0200 @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2012-06-26.16; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <pin...@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -160,7 +160,7 @@ ;; autom4te*) echo "You might have modified some maintainer files that require" - echo "the 'automa4te' program to be rebuilt." + echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) @@ -207,9 +207,9 @@ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/nanny/interface.c new/wicked-0.6.50/nanny/interface.c --- old/wicked-0.6.49/nanny/interface.c 2015-10-05 19:14:29.000000000 +0200 +++ new/wicked-0.6.50/nanny/interface.c 2018-10-04 14:23:19.000000000 +0200 @@ -108,7 +108,9 @@ if (!(w = ni_managed_device_get_worker(mdev))) return NULL; - dev = ni_ifworker_get_netdev(w); + if (!(dev = ni_ifworker_get_netdev(w))) + return NULL; + snprintf(relative_path, sizeof(relative_path), "Interface/%u", dev->link.ifindex); object = ni_dbus_server_register_object(server, relative_path, &ni_objectmodel_managed_netdev_class, mdev); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/nanny/nanny.c new/wicked-0.6.50/nanny/nanny.c --- old/wicked-0.6.49/nanny/nanny.c 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/nanny/nanny.c 2018-10-04 14:23:19.000000000 +0200 @@ -449,16 +449,19 @@ if (ni_nanny_get_device(mgr, w) != NULL) return; - mdev = ni_managed_device_new(mgr, w->ifindex, &mgr->device_list); + if (!(mdev = ni_managed_device_new(mgr, w->ifindex, &mgr->device_list))) + return; + if (w->type == NI_IFWORKER_TYPE_NETDEV) { - mdev->object = ni_objectmodel_register_managed_netdev(mgr->server, mdev); - dev_class = ni_objectmodel_link_class(w->device->link.type); + if ((mdev->object = ni_objectmodel_register_managed_netdev(mgr->server, mdev))) + dev_class = ni_objectmodel_link_class(w->device->link.type); } else if (w->type == NI_IFWORKER_TYPE_MODEM) { - mdev->object = ni_objectmodel_register_managed_modem(mgr->server, mdev); - dev_class = ni_objectmodel_modem_get_class(w->modem->type); + if ((mdev->object = ni_objectmodel_register_managed_modem(mgr->server, mdev))) + dev_class = ni_objectmodel_modem_get_class(w->modem->type); } - + if (!mdev->object || !dev_class) + return; for (match = mgr->enable; match; match = match->next) { switch (match->type) { @@ -481,7 +484,7 @@ } ni_debug_nanny("new device %s, class %s%s%s", w->name, - mdev->object->class->name, + mdev->object->class ? mdev->object->class->name : NULL, mdev->allowed? ", user control allowed" : "", mdev->monitor? ", monitored (auto-enabled)" : ""); @@ -1064,6 +1067,7 @@ ni_fsm_policy_name(policy), origin); return FALSE; } + xml_node_free(config); } if (w == NULL) { w = ni_fsm_ifworker_by_policy_name(mgr->fsm, NI_IFWORKER_TYPE_NETDEV, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/calls.c new/wicked-0.6.50/src/calls.c --- old/wicked-0.6.49/src/calls.c 2015-10-05 19:14:29.000000000 +0200 +++ new/wicked-0.6.50/src/calls.c 2018-10-04 14:23:19.000000000 +0200 @@ -89,22 +89,38 @@ } /* - * Obtain an object handle for Wicked.Interface + * Obtain a service handle for Wicked.InterfacaList + */ +static const ni_dbus_service_t * +ni_call_get_netif_list_service(void) +{ + static const ni_dbus_service_t *list_service = NULL; + + if (list_service) + return list_service; + + list_service = ni_objectmodel_service_by_name(NI_OBJECTMODEL_NETIFLIST_INTERFACE); + return list_service; +} + +/* + * Obtain an object handle for Wicked.InterfaceList */ ni_dbus_object_t * ni_call_get_netif_list_object(void) { - static const ni_dbus_service_t *netif_list_service; - ni_dbus_object_t *list_object; + static ni_dbus_object_t *list_object = NULL; + const ni_dbus_service_t *list_service; + + if (list_object) + return list_object; - if (netif_list_service == NULL) { - netif_list_service = ni_objectmodel_service_by_name(NI_OBJECTMODEL_NETIFLIST_INTERFACE); - ni_assert(netif_list_service); - } + if (!(list_service = ni_call_get_netif_list_service())) + return NULL; - list_object = __ni_call_get_proxy_object(netif_list_service, "Interface"); + if ((list_object = __ni_call_get_proxy_object(list_service, "Interface"))) + ni_dbus_object_set_default_interface(list_object, list_service->name); - ni_dbus_object_set_default_interface(list_object, netif_list_service->name); return list_object; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/dbus-connection.c new/wicked-0.6.50/src/dbus-connection.c --- old/wicked-0.6.49/src/dbus-connection.c 2017-07-28 14:41:47.000000000 +0200 +++ new/wicked-0.6.50/src/dbus-connection.c 2018-10-04 14:23:19.000000000 +0200 @@ -317,6 +317,10 @@ "unable to send DBus message (errno=%d)", errno); return NULL; } + if (!pending) { + dbus_set_error (error, DBUS_ERROR_DISCONNECTED, "Connection is closed"); + return NULL; + } dbus_pending_call_block(pending); @@ -326,6 +330,7 @@ __ni_dbus_connection_dispatch(connection); reply = dbus_pending_call_steal_reply(pending); + dbus_pending_call_unref (pending); if (reply == NULL) { dbus_set_error(error, DBUS_ERROR_FAILED, "dbus: no reply"); @@ -362,7 +367,11 @@ DBusPendingCall *pending; if (!dbus_connection_send_with_reply(connection->conn, call, &pending, timeout)) { - ni_error("dbus_connection_send_with_reply: %m"); + ni_error("dbus: unable to send async message (errno=%d): %m", errno); + return -NI_ERROR_DBUS_CALL_FAILED; + } + if (!pending) { + ni_error("dbus: connection is closed: %m"); return -NI_ERROR_DBUS_CALL_FAILED; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/dbus-dict.c new/wicked-0.6.50/src/dbus-dict.c --- old/wicked-0.6.49/src/dbus-dict.c 2015-10-05 19:14:29.000000000 +0200 +++ new/wicked-0.6.50/src/dbus-dict.c 2018-10-04 14:23:19.000000000 +0200 @@ -83,7 +83,6 @@ if (!dbus_message_iter_next(&iter_dict_entry)) goto error; - /* ni_debug_dbus("decoding entry %s of type %s", key, dbus_message_iter_get_signature(&iter_dict_entry)); */ if (!ni_dbus_message_iter_get_variant(&iter_dict_entry, &entry->datum)) goto error; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/dbus-message.c new/wicked-0.6.50/src/dbus-message.c --- old/wicked-0.6.49/src/dbus-message.c 2015-10-05 19:14:29.000000000 +0200 +++ new/wicked-0.6.50/src/dbus-message.c 2018-10-04 14:23:19.000000000 +0200 @@ -345,9 +345,13 @@ ni_dbus_message_iter_get_array_array(DBusMessageIter *iter, ni_dbus_variant_t *variant) { dbus_bool_t rv = TRUE; + char *signature; - ni_dbus_array_array_init(variant, - dbus_message_iter_get_signature(iter)); + if (!(signature = dbus_message_iter_get_signature(iter))) + return FALSE; + + ni_dbus_array_array_init(variant, signature); + ni_string_free(&signature); while (rv && dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_ARRAY) { ni_dbus_variant_t *elem; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/dbus-object.c new/wicked-0.6.50/src/dbus-object.c --- old/wicked-0.6.49/src/dbus-object.c 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/src/dbus-object.c 2018-10-04 14:23:19.000000000 +0200 @@ -113,12 +113,15 @@ if (object->client_object) __ni_dbus_client_object_destroy(object); - ni_string_free(&object->name); - ni_string_free(&object->path); - while ((child = object->children) != NULL) __ni_dbus_object_free(child); + if (object->handle && object->class && object->class->destroy) + object->class->destroy(object); + + ni_string_free(&object->name); + ni_string_free(&object->path); + free(object->interfaces); free(object); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/dbus-objects/interface.c new/wicked-0.6.50/src/dbus-objects/interface.c --- old/wicked-0.6.49/src/dbus-objects/interface.c 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/src/dbus-objects/interface.c 2018-10-04 14:23:19.000000000 +0200 @@ -1357,8 +1357,6 @@ return; NI_TRACE_ENTER_ARGS("object=%s, dev=%p", object->path, ifp); - ni_assert(ifp); - ni_client_state_drop(ifp->link.ifindex); ni_netdev_put(ifp); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/fsm.c new/wicked-0.6.50/src/fsm.c --- old/wicked-0.6.49/src/fsm.c 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/src/fsm.c 2018-10-04 14:23:19.000000000 +0200 @@ -239,9 +239,10 @@ worker = __ni_ifworker_new(type, name); ni_ifworker_array_append(array, worker); - worker->refcount--; - - return worker; + if (ni_ifworker_release(worker)) + return worker; + else + return NULL; } ni_ifworker_t * @@ -376,41 +377,57 @@ void ni_ifworker_reset(ni_ifworker_t *w) { - ni_ifworker_cancel_secondary_timeout(w); - ni_ifworker_cancel_timeout(w); - - ni_string_free(&w->object_path); + /* Reset client state config and control */ ni_ifworker_control_init(&w->control); - ni_string_free(&w->config.meta.origin); ni_security_id_destroy(&w->security_id); + ni_client_state_config_reset(&w->config.meta); - /* When detaching children, clear their lowerdev/masterdev ownership info */ + /* Clear lowerdev/masterdev relations */ ni_fsm_clear_hierarchy(w); - w->target_range.min = NI_FSM_STATE_NONE; - w->target_range.max = __NI_FSM_STATE_MAX; - - /* Clear config and stats*/ - ni_client_state_config_init(&w->config.meta); - ni_ifworker_rearm(w); __ni_ifworker_reset_device_api(w); w->readonly = FALSE; w->dead = FALSE; w->pending = FALSE; + + w->target_range.min = NI_FSM_STATE_NONE; + w->target_range.max = __NI_FSM_STATE_MAX; } void ni_ifworker_free(ni_ifworker_t *w) { - ni_ifworker_reset(w); + /* Destroy client state config and control */ + ni_ifworker_control_destroy(&w->control); + ni_security_id_destroy(&w->security_id); + ni_client_state_config_reset(&w->config.meta); + + /* Destroy config and state nodes */ + xml_node_free(w->config.node); + xml_node_free(w->state.node); + + /* Clear lowerdev/masterdev relations */ + ni_fsm_clear_hierarchy(w); + + ni_ifworker_rearm(w); + __ni_ifworker_destroy_fsm(w); + __ni_ifworker_reset_device_api(w); + + w->readonly = FALSE; + w->dead = FALSE; + w->pending = FALSE; + + w->target_range.min = NI_FSM_STATE_NONE; + w->target_range.max = __NI_FSM_STATE_MAX; + + ni_string_free(&w->object_path); if (w->device) ni_netdev_put(w->device); if (w->modem) ni_modem_release(w->modem); - __ni_ifworker_destroy_fsm(w); - xml_node_free(w->state.node); + ni_string_free(&w->name); ni_string_free(&w->old_name); free(w); @@ -786,6 +803,9 @@ void ni_ifworker_array_append(ni_ifworker_array_t *array, ni_ifworker_t *w) { + if (!array || !w) + return; + array->data = realloc(array->data, (array->count + 1) * sizeof(array->data[0])); array->data[array->count++] = ni_ifworker_get(w); } @@ -3939,10 +3959,10 @@ static ni_bool_t __ni_ifworker_refresh_netdevs(ni_fsm_t *fsm) { - static ni_dbus_object_t *list_object = NULL; + ni_dbus_object_t *list_object; ni_dbus_object_t *object; - if (!list_object && !(list_object = ni_call_get_netif_list_object())) { + if (!(list_object = ni_call_get_netif_list_object())) { ni_error("unable to get server's interface list"); return FALSE; } @@ -3965,11 +3985,10 @@ ni_ifworker_t *found = NULL; ni_bool_t renamed = FALSE; + /* note: dev is a not yet referece counted object->handle */ if (dev == NULL || dev->name == NULL || refresh) { - if (!ni_dbus_object_refresh_children(object)) { - ni_error("%s: failed to refresh netdev object", object->path); + if (!ni_dbus_object_refresh_children(object)) return NULL; - } dev = ni_objectmodel_unwrap_netif(object, NULL); } @@ -3994,7 +4013,8 @@ ni_debug_application("received new ready device %s (%s)", dev->name, object->path); found = ni_ifworker_new(&fsm->workers, NI_IFWORKER_TYPE_NETDEV, dev->name); - found->readonly = fsm->readonly; + if (found) + found->readonly = fsm->readonly; } else { renamed = !ni_string_eq(found->name, dev->name); if (renamed) @@ -4004,7 +4024,7 @@ ni_debug_application("received refresh for ready device %s (%s)", dev->name, object->path); } - if (dev->client_state) + if (dev->client_state && found) ni_ifworker_refresh_client_state(found, dev->client_state); } else { /* even we we've created it and know the object-path/ifindex @@ -4016,7 +4036,8 @@ ni_debug_application("received new non-ready device %s (%s)", dev->name, object->path); found = ni_ifworker_new(&fsm->pending, NI_IFWORKER_TYPE_NETDEV, dev->name); - found->readonly = fsm->readonly; + if (found) + found->readonly = fsm->readonly; } else { renamed = !ni_string_eq(found->name, dev->name); if (renamed) @@ -4028,6 +4049,9 @@ } } + if (!found) + return NULL; + if (!found->object_path) ni_string_dup(&found->object_path, object->path); @@ -4119,6 +4143,9 @@ found = ni_ifworker_new(&fsm->workers, NI_IFWORKER_TYPE_MODEM, modem->device); } + if (!found) + return NULL; + if (!found->object_path) ni_string_dup(&found->object_path, object->path); if (!found->modem) @@ -4803,6 +4830,8 @@ static int ni_ifworker_call_device_factory(ni_fsm_t *fsm, ni_ifworker_t *w, ni_fsm_transition_t *action) { + ni_netdev_t *dev; + /* Initially, enable waiting for this action */ w->fsm.wait_for = action; @@ -4853,6 +4882,10 @@ return -1; } + dev = ni_netdev_get(ni_objectmodel_unwrap_netif(w->object, NULL)); + ni_netdev_put(w->device); + w->device = dev; + ni_fsm_schedule_bind_methods(fsm, w); } @@ -5188,6 +5221,8 @@ ni_fsm_events_unblock(fsm); release: ni_ifworker_release(w); + + ni_dbus_objects_garbage_collect(); } if (!made_progress) @@ -5600,14 +5635,55 @@ } static void +ni_fsm_process_device_delete_event(ni_fsm_t *fsm, ni_fsm_event_t *ev, ni_ifworker_t *w) +{ + ni_dbus_object_t *netif_list; + ni_dbus_object_t *object; + + /* device-ready worker exist and is possibly also active */ + if (w) { + ni_ifworker_get(w); + ni_fsm_process_worker_event(fsm, w, ev); + ni_ifworker_release(w); + ni_debug_application("deleted worker device with object path %s", + ev->object_path); + } + + /* we may have a created but not yet ready/pending worker */ + w = ni_ifworker_array_find_by_objectpath(&fsm->pending, ev->object_path); + if (w) { + ni_ifworker_get(w); + ni_ifworker_array_remove(&fsm->pending, w); + ni_ifworker_release(w); + ni_debug_application("deleted pending device worker with object path %s", + ev->object_path); + } + + /* finally, we may also have an netif-list device object */ + if ((netif_list = ni_call_get_netif_list_object())) { + for (object = netif_list->children; object; ) { + if (ni_string_eq(object->path, ev->object_path)) { + ni_dbus_object_free(object); + ni_debug_application("deleted object %s from netif-list", + ev->object_path); + object = NULL; + } else { + object = object->next; + } + } + } +} + +static void ni_fsm_process_event(ni_fsm_t *fsm, ni_fsm_event_t *ev) { - ni_ifworker_t *w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path); + ni_ifworker_t *w; fsm->event_seq += 1; - ni_debug_events("%s: process event signal %s from %s; uuid=<%s>", - w ? w->name : "", + w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path); + + ni_debug_events("process event signal %s from %s; uuid=<%s>", ni_objectmodel_event_to_signal(ev->event_type), ev->object_path, ni_uuid_print(&ev->event_uuid)); @@ -5624,6 +5700,15 @@ * change with uuid followed by the unsolicited event without uuid. */ switch (ev->event_type) { + case NI_EVENT_DEVICE_DELETE: + ni_fsm_process_device_delete_event(fsm, ev, w); + return; + + case NI_EVENT_DEVICE_CREATE: + /* when there is no worker yet with assigned object-path, + * we refresh and allocate a pending worker first. */ + break; + case NI_EVENT_DEVICE_RENAME: w = ni_fsm_process_rename_event(fsm, ev); break; @@ -5659,13 +5744,25 @@ break; } - if (!w && !(w = ni_fsm_recv_new_netif_path(fsm, ev->object_path))) { - ni_error("%s: Cannot find corresponding worker for %s", - __func__, ev->object_path); - return; + if (!w) { + /* fetch netif object properties and assign device to + * the pending fsm worker set or to config/ready worker. + */ + if (!ni_fsm_recv_new_netif_path(fsm, ev->object_path)) { + ni_debug_application("%s: refresh failed, cannot process %s worker %s event", + __func__, ev->object_path, ni_objectmodel_event_to_signal(ev->event_type)); + return; + } + w = ni_fsm_ifworker_by_object_path(fsm, ev->object_path); + if (!w) { + ni_debug_application("%s: No ready fsm worker for %s found to process %s event", + __func__, ev->object_path, ni_objectmodel_event_to_signal(ev->event_type)); + return; + } } ni_ifworker_get(w); + /* process non-pending/ready or factory worker events */ ni_fsm_process_worker_event(fsm, w, ev); ni_ifworker_release(w); } @@ -5782,6 +5879,7 @@ fsm->timeout_count = 0; *timeout_p = ni_timer_next_timeout(); + ni_dbus_objects_garbage_collect(); } while (fsm->timeout_count); return pending_workers; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/netdev.c new/wicked-0.6.50/src/netdev.c --- old/wicked-0.6.49/src/netdev.c 2018-09-21 15:52:42.000000000 +0200 +++ new/wicked-0.6.50/src/netdev.c 2018-10-04 14:23:19.000000000 +0200 @@ -148,25 +148,26 @@ ni_netdev_t * ni_netdev_get(ni_netdev_t *dev) { - if (!dev->users) - return NULL; - dev->users++; + if (dev) { + ni_assert(dev->users); + dev->users++; + } return dev; } -int +unsigned int ni_netdev_put(ni_netdev_t *dev) { - if (!dev->users) { - ni_error("ni_netdev_put: bad mojo"); - return 0; - } - dev->users--; - if (dev->users == 0) { - ni_netdev_free(dev); - return 0; + if (dev) { + ni_assert(dev->users); + dev->users--; + + if (dev->users == 0) + ni_netdev_free(dev); + else + return dev->users; } - return dev->users; + return 0; } ni_bool_t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/xml-schema.c new/wicked-0.6.50/src/xml-schema.c --- old/wicked-0.6.49/src/xml-schema.c 2017-07-28 14:41:47.000000000 +0200 +++ new/wicked-0.6.50/src/xml-schema.c 2018-10-04 14:23:19.000000000 +0200 @@ -54,7 +54,7 @@ * Constructor functions for basic and complex types */ static ni_xs_type_t * -__ni_xs_type_new(unsigned int class) +ni_xs_type_new(unsigned int class) { ni_xs_type_t *type = xcalloc(1, sizeof(*type)); @@ -66,7 +66,7 @@ ni_xs_type_t * ni_xs_scalar_new(const char *basic_name, unsigned int scalar_type) { - ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_SCALAR); + ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_SCALAR); type->u.scalar_info = xcalloc(1, sizeof(ni_xs_scalar_info_t)); type->u.scalar_info->basic_name = basic_name; @@ -77,7 +77,7 @@ ni_xs_type_t * ni_xs_struct_new(ni_xs_name_type_array_t *children) { - ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_STRUCT); + ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_STRUCT); type->u.struct_info = xcalloc(1, sizeof(ni_xs_struct_info_t)); if (children) @@ -88,7 +88,7 @@ ni_xs_type_t * ni_xs_union_new(ni_xs_name_type_array_t *children, const char *discriminant) { - ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_UNION); + ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_UNION); type->u.union_info = xcalloc(1, sizeof(ni_xs_union_info_t)); if (children) @@ -100,7 +100,7 @@ ni_xs_type_t * ni_xs_dict_new(ni_xs_name_type_array_t *children) { - ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_DICT); + ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_DICT); type->u.dict_info = xcalloc(1, sizeof(ni_xs_dict_info_t)); if (children) @@ -111,7 +111,7 @@ ni_xs_type_t * ni_xs_array_new(ni_xs_type_t *elementType, const char *elementName, unsigned long minlen, unsigned long maxlen) { - ni_xs_type_t *type = __ni_xs_type_new(NI_XS_TYPE_ARRAY); + ni_xs_type_t *type = ni_xs_type_new(NI_XS_TYPE_ARRAY); type->u.array_info = xcalloc(1, sizeof(struct ni_xs_array_info)); type->u.array_info->element_type = ni_xs_type_hold(elementType); @@ -360,7 +360,7 @@ } static ni_xs_type_t * -__ni_xs_name_type_array_find(const ni_xs_name_type_array_t *array, const char *name) +ni_xs_name_type_array_find_local(const ni_xs_name_type_array_t *array, const char *name) { ni_xs_name_type_t *def; unsigned int i; @@ -375,7 +375,7 @@ const ni_xs_type_t * ni_xs_name_type_array_find(const ni_xs_name_type_array_t *array, const char *name) { - return __ni_xs_name_type_array_find(array, name); + return ni_xs_name_type_array_find_local(array, name); } /* @@ -449,7 +449,7 @@ ni_xs_type_t * ni_xs_scope_lookup_local(const ni_xs_scope_t *dict, const char *name) { - return __ni_xs_name_type_array_find(&dict->types, name); + return ni_xs_name_type_array_find_local(&dict->types, name); } ni_xs_type_t * @@ -786,7 +786,7 @@ ni_error("%s: cannot parse <return> element", xml_node_location(node)); return -1; } - method->retval = ni_xs_type_hold(type); + method->retval = type; } else if (ni_string_eq(child->name, "description")) { ni_string_dup(&method->description, child->cdata); @@ -1168,7 +1168,6 @@ ni_error("%s: array definition references unknown element type <%s>", __func__, typeAttr); return NULL; } - ni_xs_type_hold(elementType); } else { elementType = ni_xs_build_one_type(node, scope); if (elementType == NULL) @@ -1242,7 +1241,7 @@ } } else if (!strcmp(className, "void")) { - type = __ni_xs_type_new(NI_XS_TYPE_VOID); + type = ni_xs_type_new(NI_XS_TYPE_VOID); } else { ni_error("%s: unknown class=\"%s\"", xml_node_location(node), className); return NULL; @@ -1549,23 +1548,28 @@ ni_xs_build_range_constraint(const xml_node_t *node) { unsigned long min = 0, max = ~0UL; - const char *ep; + const char *attr; - if ((ep = xml_node_get_attr(node, "min")) != NULL) { - min = strtoul(ep, (char **) ep, 0); - if (*ep) { - ni_error("%s: invalid min value for range constraint", xml_node_location(node)); + if ((attr = xml_node_get_attr(node, "min")) != NULL) { + if (ni_parse_ulong(attr, &min, 0)) { + ni_error("%s: invalid min value for range constraint", + xml_node_location(node)); return NULL; } } - if ((ep = xml_node_get_attr(node, "max")) != NULL) { - max = strtoul(ep, (char **) ep, 0); - if (*ep) { - ni_error("%s: invalid max value for range constraint", xml_node_location(node)); + if ((attr = xml_node_get_attr(node, "max")) != NULL) { + if (ni_parse_ulong(attr, &max, 0)) { + ni_error("%s: invalid max value for range constraint", + xml_node_location(node)); return NULL; } } + if (min > max) { + ni_error("%s: invalid range constraint", xml_node_location(node)); + return NULL; + } + return ni_xs_range_new(min, max); } @@ -1802,6 +1806,7 @@ ni_xs_scope_free(localdict); } else { result = ni_xs_scope_lookup(scope, child->name); + ni_xs_type_hold(result); } if (result == NULL) { ni_error("%s: unknown type or class <%s>", xml_node_location(child), child->name); @@ -1814,10 +1819,10 @@ goto error; } - ni_xs_type_hold(result); return result; error: + ni_xs_type_release(result); return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/xml-schema.h new/wicked-0.6.50/src/xml-schema.h --- old/wicked-0.6.49/src/xml-schema.h 2017-07-28 14:41:47.000000000 +0200 +++ new/wicked-0.6.50/src/xml-schema.h 2018-10-04 14:23:19.000000000 +0200 @@ -373,9 +373,11 @@ static inline void ni_xs_type_release(ni_xs_type_t *type) { - ni_assert(type->refcount); - if (--(type->refcount) == 0) - ni_xs_type_free(type); + if (type) { + ni_assert(type->refcount); + if (--(type->refcount) == 0) + ni_xs_type_free(type); + } } static inline ni_xs_scalar_info_t * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/src/xpath.c new/wicked-0.6.50/src/xpath.c --- old/wicked-0.6.49/src/xpath.c 2015-10-05 19:14:29.000000000 +0200 +++ new/wicked-0.6.50/src/xpath.c 2018-10-04 14:23:19.000000000 +0200 @@ -127,7 +127,7 @@ failed: ni_error("unable to parse XPATH expression \"%s\"", orig_expr); if (tree) - xpath_enode_free(tree); + xpath_expression_free(tree); return NULL; } @@ -149,18 +149,24 @@ /* * Free a parsed XPATH expression */ -void -xpath_expression_free(xpath_enode_t *enode) +static inline void +xpath_expr_free(xpath_enode_t *enode, unsigned int depth, const char *info) { if (!enode) return; - if (enode->left) - xpath_enode_free(enode->left); - if (enode->right) - xpath_enode_free(enode->right); + xtrace("xpath_expression_free(%*.s%s %s %s)", depth, " ", info, + enode->ops ? enode->ops->name : NULL, enode->identifier); + xpath_expr_free(enode->left, depth + 2, "left "); + xpath_expr_free(enode->right, depth + 2, "right"); xpath_enode_free(enode); } +void +xpath_expression_free(xpath_enode_t *enode) +{ + xpath_expr_free(enode, 0, "expr "); +} + /* * Convenience function: parse XPATH expression, evaluate it once, * and return the resulting string. @@ -442,7 +448,7 @@ failed: /* ni_error("xpath: syntax error in expression \"%s\" at position %s", expr, pos); */ if (current) - xpath_enode_free(current); + xpath_expression_free(current); return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/wicked-0.6.49/wicked.spec new/wicked-0.6.50/wicked.spec --- old/wicked-0.6.49/wicked.spec 2018-09-21 16:23:57.000000000 +0200 +++ new/wicked-0.6.50/wicked.spec 2018-10-04 14:29:04.000000000 +0200 @@ -18,7 +18,7 @@ %define release_prefix %{?snapshot:%{snapshot}}%{!?snapshot:0} Name: wicked -Version: 0.6.49 +Version: 0.6.50 Release: %{release_prefix}.0.0 Summary: Network configuration infrastructure License: GPL-2.0