Hello community, here is the log from the commit of package wicked for openSUSE:Factory checked in at 2014-04-17 14:43:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/wicked (Old) and /work/SRC/openSUSE:Factory/.wicked.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wicked" Changes: -------- --- /work/SRC/openSUSE:Factory/wicked/wicked.changes 2014-04-01 11:34:14.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.wicked.new/wicked.changes 2014-04-17 14:43:39.000000000 +0200 @@ -1,0 +2,11 @@ +Mon Apr 14 17:28:11 UTC 2014 - [email protected] + +- version 0.5.19 +- server/nanny: do not fail on missed dbus objects or object + creation errors due to already deleted interfaces in the + kernel while processing the event (bnc#867806,bnc#871388) +- netlink: verify if device still exists on newlink events +- nanny: fixed endless loop on policies without name and user + control default, added device mach with identify capabilities + +------------------------------------------------------------------- Old: ---- wicked-0.5.18.tar.bz2 New: ---- wicked-0.5.19.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ wicked.spec ++++++ --- /var/tmp/diff_new_pack.Eu3RTs/_old 2014-04-17 14:43:39.000000000 +0200 +++ /var/tmp/diff_new_pack.Eu3RTs/_new 2014-04-17 14:43:39.000000000 +0200 @@ -18,7 +18,7 @@ %define release_prefix %{?snapshot:%{snapshot}}%{!?snapshot:0} Name: wicked -Version: 0.5.18 +Version: 0.5.19 Release: %{release_prefix}.0.0 Summary: Network configuration infrastructure License: GPL-2.0 ++++++ wicked-0.5.18.tar.bz2 -> wicked-0.5.19.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/ChangeLog.git new/wicked-0.5.19/ChangeLog.git --- old/wicked-0.5.18/ChangeLog.git 2014-03-28 19:43:42.000000000 +0100 +++ new/wicked-0.5.19/ChangeLog.git 2014-04-14 19:27:29.000000000 +0200 @@ -1,3 +1,78 @@ +commit d9aef8cdd30ae9b0632fca787fef9a954564d4a3 +Author: Marius Tomaschewski <[email protected]> +Date: Mon Apr 14 19:22:39 2014 +0200 + + version 0.5.19 + +commit ecd2a2e6dfb939f45904ce48d3f590a3d60dd619 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 21:49:17 2014 +0200 + + fsm: release device references on free + +commit 0ce76c25d233dcd4227e38e73ba9a915f2bc4e42 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 21:45:33 2014 +0200 + + netlink: verify if device exists on newlink events + +commit 58506b5be46a55a4a32a0afe32b5211256aaee91 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 21:41:10 2014 +0200 + + client: adjusted ifstatus output indenting + +commit 609127c5456b7111b0d534a7d983a81374d82729 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 21:20:02 2014 +0200 + + nanny: do not fail on events for deleted devices + +commit 8b139182a7f83f4d0b4fe1a05735a299c439b825 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 21:09:31 2014 +0200 + + server: do not fail on missed dbus objects + + The events may arrive for non-existing devices when they + get deleted [in the kernel] while we're processing them. + +commit 5dac78d666a7b6849c9bcd480a250849542a464f +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 20:58:09 2014 +0200 + + dbus: do not fail on dbus object creation failures + +commit 87140f2b05b890861c7d57264ef5becbcd32bb55 +Author: Marius Tomaschewski <[email protected]> +Date: Thu Apr 10 20:35:12 2014 +0200 + + fsm: do not fail completely in ni_fsm_refresh_state + +commit c61f3e55284efb95ed2537dff686eab1418e89dd +Author: Marius Tomaschewski <[email protected]> +Date: Wed Apr 9 11:55:25 2014 +0200 + + nanny: do not register device when object disapears + +commit 1b3f254deee181125bd06352f8482ba90462633f +Author: Marius Tomaschewski <[email protected]> +Date: Wed Apr 2 12:00:49 2014 +0200 + + nanny: added initial device name,alias,ifindex match + +commit 75e56c6da0e9759ad05f6f696bafb230387a32d7 +Author: Marius Tomaschewski <[email protected]> +Date: Wed Apr 2 11:53:28 2014 +0200 + + nanny: user control off by default, show it correctly + +commit 743cac740e30caa774065a513cee09a63babc8ea +Author: Marius Tomaschewski <[email protected]> +Date: Wed Apr 2 11:52:04 2014 +0200 + + nanny: fixed endless loop on policies without name + commit 058f194c521e5525e9fb793d264916cc72126811 Author: Marius Tomaschewski <[email protected]> Date: Fri Mar 28 19:41:59 2014 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/VERSION new/wicked-0.5.19/VERSION --- old/wicked-0.5.18/VERSION 2014-03-28 19:42:17.000000000 +0100 +++ new/wicked-0.5.19/VERSION 2014-04-14 19:23:16.000000000 +0200 @@ -1 +1 @@ -0.5.18 +0.5.19 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/client/ifcheck.c new/wicked-0.5.19/client/ifcheck.c --- old/wicked-0.5.18/client/ifcheck.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/client/ifcheck.c 2014-04-14 19:21:31.000000000 +0200 @@ -325,11 +325,17 @@ } if (!ni_fsm_create_client(fsm)) { + /* Severe error we always explicitly return */ + status = NI_WICKED_RC_ERROR; + goto cleanup; + } + + if (!ni_fsm_refresh_state(fsm)) { + /* Severe error we always explicitly return */ status = NI_WICKED_RC_ERROR; goto cleanup; } - ni_fsm_refresh_state(fsm); status = NI_WICKED_ST_OK; if (0 == checks.count) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/client/ifdown.c new/wicked-0.5.19/client/ifdown.c --- old/wicked-0.5.18/client/ifdown.c 2014-02-25 14:03:37.000000000 +0100 +++ new/wicked-0.5.19/client/ifdown.c 2014-04-14 19:21:31.000000000 +0200 @@ -151,11 +151,15 @@ ifmarker.target_range.min = NI_FSM_STATE_NONE; ifmarker.target_range.max = max_state; - if (!ni_fsm_create_client(fsm)) + if (!ni_fsm_create_client(fsm)) { /* Severe error we always explicitly return */ return NI_WICKED_RC_ERROR; + } - ni_fsm_refresh_state(fsm); + if (!ni_fsm_refresh_state(fsm)) { + /* Severe error we always explicitly return */ + return NI_WICKED_RC_ERROR; + } /* Get workers that match given criteria */ nmarked = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/client/ifreload.c new/wicked-0.5.19/client/ifreload.c --- old/wicked-0.5.18/client/ifreload.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/client/ifreload.c 2014-04-14 19:21:31.000000000 +0200 @@ -147,7 +147,11 @@ goto cleanup; } - ni_fsm_refresh_state(fsm); + if (!ni_fsm_refresh_state(fsm)) { + /* Severe error we always explicitly return */ + status = NI_WICKED_RC_ERROR; + goto cleanup; + } if (opt_ifconfig.count == 0) { const ni_string_array_t *sources = ni_config_sources("ifconfig"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/client/ifstatus.c new/wicked-0.5.19/client/ifstatus.c --- old/wicked-0.5.18/client/ifstatus.c 2014-03-28 14:14:45.000000000 +0100 +++ new/wicked-0.5.19/client/ifstatus.c 2014-04-14 19:21:31.000000000 +0200 @@ -215,12 +215,12 @@ va_list ap; if (!ni_string_empty(dev)) { - printf("%-15s", dev); + printf("%-16s", dev); } else { printf("%-6s", ""); } if (!ni_string_empty(tag)) { - printf("%-8s ", tag); + printf("%-9s ", tag); } if (!ni_string_empty(fmt)) { va_start(ap, fmt); @@ -563,14 +563,16 @@ } if (!ni_fsm_create_client(fsm)) { + /* Severe error we always explicitly return */ status = NI_WICKED_ST_ERROR; goto cleanup; } - /* TODO: we connect to wickedd here. currently, it - * may exit(1), that is with NI_WICKED_ST_ERROR... - */ - ni_fsm_refresh_state(fsm); + if (!ni_fsm_refresh_state(fsm)) { + /* Severe error we always explicitly return */ + status = NI_WICKED_ST_ERROR; + goto cleanup; + } if (check_config && opt_ifconfig.count == 0) { const ni_string_array_t *sources = ni_config_sources("ifconfig"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/client/ifup.c new/wicked-0.5.19/client/ifup.c --- old/wicked-0.5.18/client/ifup.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/client/ifup.c 2014-04-14 19:21:31.000000000 +0200 @@ -206,7 +206,11 @@ goto cleanup; } - ni_fsm_refresh_state(fsm); + if (!ni_fsm_refresh_state(fsm)) { + /* Severe error we always explicitly return */ + status = NI_WICKED_RC_ERROR; + goto cleanup; + } if (opt_ifconfig.count == 0) { const ni_string_array_t *sources = ni_config_sources("ifconfig"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/configure new/wicked-0.5.19/configure --- old/wicked-0.5.18/configure 2014-03-28 19:43:07.000000000 +0100 +++ new/wicked-0.5.19/configure 2014-04-14 19:25:13.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for wicked 0.5.18. +# Generated by GNU Autoconf 2.69 for wicked 0.5.19. # # Report bugs to <http://bugs.opensuse.org>. # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='wicked' PACKAGE_TARNAME='wicked' -PACKAGE_VERSION='0.5.18' -PACKAGE_STRING='wicked 0.5.18' +PACKAGE_VERSION='0.5.19' +PACKAGE_STRING='wicked 0.5.19' PACKAGE_BUGREPORT='http://bugs.opensuse.org' PACKAGE_URL='https://github.com/openSUSE/wicked' @@ -1377,7 +1377,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 wicked 0.5.18 to adapt to many kinds of systems. +\`configure' configures wicked 0.5.19 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1447,7 +1447,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of wicked 0.5.18:";; + short | recursive ) echo "Configuration of wicked 0.5.19:";; esac cat <<\_ACEOF @@ -1596,7 +1596,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -wicked configure 0.5.18 +wicked configure 0.5.19 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2195,7 +2195,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by wicked $as_me 0.5.18, which was +It was created by wicked $as_me 0.5.19, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3058,7 +3058,7 @@ # Define the identity of the package. PACKAGE='wicked' - VERSION='0.5.18' + VERSION='0.5.19' cat >>confdefs.h <<_ACEOF @@ -3122,7 +3122,7 @@ # with (CUR-AGE) used in the library soname. # CUR=5 -REV=18 +REV=19 AGE=5 # Calculate package (soname version) suffix for the spec file. @@ -14769,7 +14769,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by wicked $as_me 0.5.18, which was +This file was extended by wicked $as_me 0.5.19, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14836,7 +14836,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -wicked config.status 0.5.18 +wicked config.status 0.5.19 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/configure.ac new/wicked-0.5.19/configure.ac --- old/wicked-0.5.18/configure.ac 2014-03-28 19:42:17.000000000 +0100 +++ new/wicked-0.5.19/configure.ac 2014-04-14 19:23:16.000000000 +0200 @@ -18,7 +18,7 @@ # with (CUR-AGE) used in the library soname. # CUR=5 -REV=18 +REV=19 AGE=5 # Calculate package (soname version) suffix for the spec file. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/include/wicked/fsm.h new/wicked-0.5.19/include/wicked/fsm.h --- old/wicked-0.5.18/include/wicked/fsm.h 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/include/wicked/fsm.h 2014-04-14 19:21:31.000000000 +0200 @@ -251,7 +251,7 @@ extern ni_bool_t ni_fsm_policies_changed_since(const ni_fsm_t *, unsigned int *tstamp); extern ni_dbus_client_t * ni_fsm_create_client(ni_fsm_t *); -extern void ni_fsm_refresh_state(ni_fsm_t *); +extern ni_bool_t ni_fsm_refresh_state(ni_fsm_t *); extern unsigned int ni_fsm_schedule(ni_fsm_t *); extern ni_bool_t ni_fsm_do(ni_fsm_t *fsm, long *timeout_p); extern void ni_fsm_mainloop(ni_fsm_t *); @@ -277,6 +277,9 @@ extern const char * ni_ifworker_state_name(unsigned int state); extern ni_bool_t ni_ifworker_state_from_name(const char *, unsigned int *); extern ni_fsm_require_t * ni_ifworker_reachability_check_new(xml_node_t *); +extern ni_bool_t ni_ifworker_match_netdev_name(const ni_ifworker_t *, const char *); +extern ni_bool_t ni_ifworker_match_netdev_alias(const ni_ifworker_t *, const char *); +extern ni_bool_t ni_ifworker_match_netdev_ifindex(const ni_ifworker_t *, unsigned int); extern ni_bool_t ni_ifworker_match_alias(const ni_ifworker_t *, const char *); extern void ni_ifworker_set_config(ni_ifworker_t *, xml_node_t *, const char *); extern ni_bool_t ni_ifworker_check_config(const ni_ifworker_t *, const xml_node_t *, const char *); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/nanny/device.c new/wicked-0.5.19/nanny/device.c --- old/wicked-0.5.18/nanny/device.c 2014-02-26 20:35:14.000000000 +0100 +++ new/wicked-0.5.19/nanny/device.c 2014-04-14 19:21:31.000000000 +0200 @@ -429,8 +429,6 @@ { ni_managed_device_t *mdev; - ni_assert(w); - for (mdev = mgr->device_list; mdev; mdev = mdev->next) { if (mdev->worker == w) return mdev; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/nanny/main.c new/wicked-0.5.19/nanny/main.c --- old/wicked-0.5.18/nanny/main.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/nanny/main.c 2014-04-14 19:21:31.000000000 +0200 @@ -300,9 +300,10 @@ // A new device was added. Could be a virtual device like // a VLAN or vif, or a hotplug device // Create a worker and a managed_netif for this device. - w = ni_fsm_recv_new_netif_path(mgr->fsm, object_path); - ni_nanny_register_device(mgr, w); - ni_nanny_schedule_recheck(mgr, w); + if ((w = ni_fsm_recv_new_netif_path(mgr->fsm, object_path))) { + ni_nanny_register_device(mgr, w); + ni_nanny_schedule_recheck(mgr, w); + } return; } @@ -311,28 +312,32 @@ signal_name, object_path); return; } - - ni_assert(w->type == NI_IFWORKER_TYPE_NETDEV); - ni_assert(w->device); + if (w->type != NI_IFWORKER_TYPE_NETDEV || w->device == NULL) { + ni_error("%s: received signal \"%s\" from \"%s\" (not a managed network device)", + w->name, signal_name, object_path); + return; + } if (event == NI_EVENT_DEVICE_DELETE) { - ni_debug_nanny("%s: received signal %s from %s", w->name, signal_name, object_path); + ni_debug_nanny("%s: received signal \"%s\" from \"%s\"", + w->name, signal_name, object_path); // delete the worker and the managed netif ni_nanny_unregister_device(mgr, w); return; } if ((mdev = ni_nanny_get_device(mgr, w)) == NULL) { - ni_debug_nanny("%s: received signal %s from %s (not a managed device)", + ni_debug_nanny("%s: received signal \"%s\" from \"%s\" (not a managed device)", w->name, signal_name, object_path); return; } - ni_debug_nanny("%s: received signal %s; state=%s, policy=%s%s", + ni_debug_nanny("%s: received signal %s; state=%s, policy=%s%s%s", w->name, signal_name, ni_managed_state_to_string(mdev->state), mdev->selected_policy? ni_fsm_policy_name(mdev->selected_policy->fsm_policy): "<none>", - mdev->monitor? ", user controlled" : ""); + mdev->allowed? ", user control allowed" : "", + mdev->monitor? ", monitored" : ""); switch (event) { case NI_EVENT_LINK_DOWN: @@ -387,9 +392,10 @@ // We receive a deviceCreate signal when a modem was plugged in if (event == NI_EVENT_DEVICE_CREATE) { - w = ni_fsm_recv_new_modem_path(mgr->fsm, object_path); - ni_nanny_register_device(mgr, w); - ni_nanny_schedule_recheck(mgr, w); + if ((w = ni_fsm_recv_new_modem_path(mgr->fsm, object_path))) { + ni_nanny_register_device(mgr, w); + ni_nanny_schedule_recheck(mgr, w); + } return; } @@ -399,10 +405,13 @@ return; } - ni_debug_nanny("%s: received signal %s from %s", w->name, signal_name, object_path); - ni_assert(w->type == NI_IFWORKER_TYPE_MODEM); - ni_assert(w->modem); + if (w->type != NI_IFWORKER_TYPE_MODEM || w->modem == NULL) { + ni_error("%s: received signal \"%s\" from \"%s\" (not a managed modem device)", + w->name, signal_name, object_path); + return; + } + ni_debug_nanny("%s: received signal %s from %s", w->name, signal_name, object_path); if (event == NI_EVENT_DEVICE_DELETE) { // delete the worker and the managed modem ni_nanny_unregister_device(mgr, w); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/nanny/nanny.c new/wicked-0.5.19/nanny/nanny.c --- old/wicked-0.5.18/nanny/nanny.c 2014-03-18 15:10:50.000000000 +0100 +++ new/wicked-0.5.19/nanny/nanny.c 2014-04-14 19:21:31.000000000 +0200 @@ -324,7 +324,7 @@ break; } - mdev->allowed = TRUE; + mdev->allowed = FALSE; if (match->auto_enable) mdev->monitor = TRUE; } @@ -332,7 +332,7 @@ ni_debug_nanny("new device %s, class %s%s%s", w->name, mdev->object->class->name, mdev->allowed? ", user control allowed" : "", - mdev->monitor? ", auto-enabled" : ""); + mdev->monitor? ", monitored (auto-enabled)" : ""); if (mdev->monitor) ni_nanny_schedule_recheck(mgr, w); @@ -640,7 +640,7 @@ do { snprintf(namebuf, sizeof(namebuf), "policy%u", counter++); - } while (ni_fsm_policy_by_name(mgr->fsm, namebuf) == NULL); + } while (ni_fsm_policy_by_name(mgr->fsm, namebuf) && counter); name = namebuf; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/server/main.c new/wicked-0.5.19/server/main.c --- old/wicked-0.5.18/server/main.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/server/main.c 2014-04-14 19:21:31.000000000 +0200 @@ -347,10 +347,14 @@ /* A new netif was discovered; create a dbus server object * enacpsulating it. */ object = ni_objectmodel_register_netif(dbus_server, dev, NULL); - } else - if (!(object = ni_objectmodel_get_netif_object(dbus_server, dev))) { - ni_error("cannot send %s event for model \"%s\" - no dbus device", - ni_event_type_to_name(event), dev->name); + } else { + object = ni_objectmodel_get_netif_object(dbus_server, dev); + } + if (!object) { + /* usually a "bad event", e.g. when the underlying netdev + * does not exists any more, but events still arrive ... */ + ni_debug_events("cannot handle %s event for model \"%s\" - no dbus object", + ni_event_type_to_name(event), dev->name); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/dbus-object.c new/wicked-0.5.19/src/dbus-object.c --- old/wicked-0.5.18/src/dbus-object.c 2014-02-18 15:27:29.000000000 +0100 +++ new/wicked-0.5.19/src/dbus-object.c 2014-04-14 19:21:31.000000000 +0200 @@ -301,7 +301,7 @@ const ni_dbus_service_t *svc; unsigned int i; - if (object->interfaces == NULL) + if (object == NULL || object->interfaces == NULL) return NULL; for (i = 0; (svc = object->interfaces[i]) != NULL; ++i) { @@ -364,7 +364,7 @@ const ni_dbus_service_t *svc; unsigned int i, found = 0; - if (object->interfaces == NULL || method == NULL) + if (object == NULL || object->interfaces == NULL || method == NULL) return 0; for (i = 0; (svc = object->interfaces[i]) != NULL; ++i) { @@ -383,7 +383,7 @@ const ni_dbus_service_t *svc, *best = NULL; unsigned int i; - if (object->interfaces == NULL) + if (object == NULL || object->interfaces == NULL) return NULL; for (i = 0; (svc = object->interfaces[i]) != NULL; ++i) { @@ -404,7 +404,7 @@ const ni_dbus_service_t *svc; unsigned int i; - if (object->interfaces == NULL) + if (object == NULL || object->interfaces == NULL) return NULL; for (i = 0; (svc = object->interfaces[i]) != NULL; ++i) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/dbus-objects/interface.c new/wicked-0.5.19/src/dbus-objects/interface.c --- old/wicked-0.5.18/src/dbus-objects/interface.c 2014-03-28 14:14:45.000000000 +0100 +++ new/wicked-0.5.19/src/dbus-objects/interface.c 2014-04-14 19:21:31.000000000 +0200 @@ -374,8 +374,10 @@ object = ni_dbus_object_new(class, NULL, ni_netdev_get(dev)); } - if (object == NULL) - ni_fatal("Unable to create dbus object for network interface %s", dev->name); + if (object == NULL) { + ni_error("Unable to create dbus object for network interface %s", dev->name); + return NULL; + } ni_objectmodel_bind_compatible_interfaces(object); return object; @@ -504,8 +506,16 @@ ni_netdev_t * ni_objectmodel_unwrap_netif(const ni_dbus_object_t *object, DBusError *error) { - ni_netdev_t *dev = object->handle; + ni_netdev_t *dev; + + if (!object) { + if (error) + dbus_set_error(error, DBUS_ERROR_FAILED, + "Cannot unwrap network interface from a NULL dbus object"); + return NULL; + } + dev = object->handle; if (ni_dbus_object_isa(object, &ni_objectmodel_netif_class)) return dev; if (error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/dbus-objects/modem.c new/wicked-0.5.19/src/dbus-objects/modem.c --- old/wicked-0.5.18/src/dbus-objects/modem.c 2014-03-28 12:39:58.000000000 +0100 +++ new/wicked-0.5.19/src/dbus-objects/modem.c 2014-04-14 19:21:31.000000000 +0200 @@ -198,8 +198,11 @@ object = ni_dbus_object_new(class, NULL, ni_modem_hold(modem)); } - if (object == NULL) - ni_fatal("Unable to create proxy object for modem %s (%s)", modem->device, modem->real_path); + if (object == NULL) { + ni_error("Unable to create proxy object for modem %s (%s)", + modem->device, modem->real_path); + return NULL; + } ni_objectmodel_bind_compatible_interfaces(object); return object; @@ -262,8 +265,16 @@ ni_modem_t * ni_objectmodel_unwrap_modem(const ni_dbus_object_t *object, DBusError *error) { - ni_modem_t *modem = object->handle; + ni_modem_t *modem; + + if (!object) { + if (error) + dbus_set_error(error, DBUS_ERROR_FAILED, + "Cannot unwrap modem from a NULL dbus object"); + return NULL; + } + modem = object->handle; if (ni_dbus_object_isa(object, &ni_objectmodel_mm_modem_class)) return modem; if (ni_dbus_object_isa(object, &ni_objectmodel_modem_class)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/fsm-policy.c new/wicked-0.5.19/src/fsm-policy.c --- old/wicked-0.5.18/src/fsm-policy.c 2014-03-18 15:10:50.000000000 +0100 +++ new/wicked-0.5.19/src/fsm-policy.c 2014-04-14 19:21:31.000000000 +0200 @@ -1180,37 +1180,71 @@ /* * <device>...</device> + * <device:name>...</device:name> + * <device:alias>...</device:alias> + * <device:ifindex>...</device:ifindex> */ static ni_bool_t -__ni_fsm_policy_match_device_check(const ni_ifcondition_t *cond, ni_ifworker_t *w) +__ni_fsm_policy_match_device_name_check(const ni_ifcondition_t *cond, ni_ifworker_t *w) { - ni_warn("<device> condition not implemented yet"); - return FALSE; + return ni_ifworker_match_netdev_name(w, cond->args.string); } - -static ni_ifcondition_t * -ni_ifcondition_device(xml_node_t *node) +static ni_bool_t +__ni_fsm_policy_match_device_alias_check(const ni_ifcondition_t *cond, ni_ifworker_t *w) { - ni_ifcondition_t *result; + return ni_ifworker_match_netdev_alias(w, cond->args.string); +} +static ni_bool_t +__ni_fsm_policy_match_device_ifindex_check(const ni_ifcondition_t *cond, ni_ifworker_t *w) +{ + unsigned int ifindex; - result = ni_ifcondition_new(__ni_fsm_policy_match_device_check); - result->args.device.node = node; - return result; + if (ni_parse_uint(cond->args.string, &ifindex, 10) < 0 || !ifindex) + return FALSE; + return ni_ifworker_match_netdev_ifindex(w, ifindex); } -/* - * <device-alias>foobidoo</device-alias> - */ -static ni_bool_t -__ni_fsm_policy_match_device_alias_check(const ni_ifcondition_t *cond, ni_ifworker_t *w) +static ni_ifcondition_t * +ni_ifcondition_device_element(xml_node_t *node, const char *name) { - return ni_ifworker_match_alias(w, cond->args.string); + if (ni_string_eq(name, "name")) { + return ni_ifcondition_new_cdata(__ni_fsm_policy_match_device_name_check, node); + } + if (ni_string_eq(name, "alias")) { + return ni_ifcondition_new_cdata(__ni_fsm_policy_match_device_alias_check, node); + } + if (ni_string_eq(name, "ifindex")) { + return ni_ifcondition_new_cdata(__ni_fsm_policy_match_device_ifindex_check, node); + } + ni_error("%s: unknown device condition <%s>", xml_node_location(node), name); + return NULL; } static ni_ifcondition_t * -ni_ifcondition_device_alias(xml_node_t *node) +ni_ifcondition_device(xml_node_t *node) { - return ni_ifcondition_new_cdata(__ni_fsm_policy_match_device_alias_check, node); + ni_ifcondition_t *result = NULL; + + if (!node->children && node->cdata) + return ni_ifcondition_new_cdata(__ni_fsm_policy_match_device_name_check, node); + + for (node = node->children; node; node = node->next) { + ni_ifcondition_t *cond; + + cond = ni_ifcondition_device_element(node, node->name); + if (cond == NULL) { + if (result) + ni_ifcondition_free(result); + return NULL; + } + + if (result == NULL) + result = cond; + else + result = ni_ifcondition_and_terms(result, cond); + } + + return result; } /* @@ -1468,30 +1502,30 @@ return ni_ifcondition_none(node); if (!strcmp(node->name, "type")) return ni_ifcondition_type(node); - if (!strcmp(node->name, "device")) - return ni_ifcondition_device(node); if (!strcmp(node->name, "class")) return ni_ifcondition_class(node); if (!strcmp(node->name, "sharable")) return ni_ifcondition_sharable(node); if (!strcmp(node->name, "link-type")) return ni_ifcondition_linktype(node); - if (!strcmp(node->name, "device-alias")) - return ni_ifcondition_device_alias(node); if (!strcmp(node->name, "control-mode")) return ni_ifcondition_control_mode(node); if (!strcmp(node->name, "boot-stage")) return ni_ifcondition_boot_stage(node); if (!strcmp(node->name, "minimum-device-state")) return ni_ifcondition_min_device_state(node); + if (!strcmp(node->name, "device")) + return ni_ifcondition_device(node); + if (!strncmp(node->name, "device:", sizeof("device:")-1)) + return ni_ifcondition_device_element(node, node->name + sizeof("device:")-1); if (!strcmp(node->name, "modem")) return ni_ifcondition_modem(node); - if (!strncmp(node->name, "modem:", 6)) - return ni_ifcondition_modem_element(node, node->name + 6); + if (!strncmp(node->name, "modem:", sizeof("modem:")-1)) + return ni_ifcondition_modem_element(node, node->name + sizeof("modem:")-1); if (!strcmp(node->name, "wireless")) return ni_ifcondition_wireless(node); - if (!strncmp(node->name, "wireless:", 9)) - return ni_ifcondition_wireless_element(node, node->name + 9); + if (!strncmp(node->name, "wireless:", sizeof("wireless:")-1)) + return ni_ifcondition_wireless_element(node, node->name + sizeof("wireless:")-1); ni_error("%s: unsupported policy conditional <%s>", xml_node_location(node), node->name); return NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/fsm.c new/wicked-0.5.19/src/fsm.c --- old/wicked-0.5.18/src/fsm.c 2014-03-28 14:14:45.000000000 +0100 +++ new/wicked-0.5.19/src/fsm.c 2014-04-14 19:21:31.000000000 +0200 @@ -41,9 +41,9 @@ static int ni_ifworker_bind_device_apis(ni_ifworker_t *, const ni_dbus_service_t *); static void ni_ifworker_control_init(ni_ifworker_control_t *); static void ni_ifworker_control_destroy(ni_ifworker_control_t *); -static void __ni_ifworker_refresh_netdevs(ni_fsm_t *); +static ni_bool_t __ni_ifworker_refresh_netdevs(ni_fsm_t *); #ifdef MODEM -static void __ni_ifworker_refresh_modems(ni_fsm_t *); +static ni_bool_t __ni_ifworker_refresh_modems(ni_fsm_t *); #endif static int ni_fsm_user_prompt_default(const ni_fsm_prompt_t *, xml_node_t *, void *); static void ni_ifworker_refresh_client_info(ni_ifworker_t *, ni_device_clientinfo_t *); @@ -176,6 +176,10 @@ { ni_string_free(&w->name); ni_ifworker_reset(w); + if (w->device) + ni_netdev_put(w->device); + if (w->modem) + ni_modem_release(w->modem); free(w); } @@ -593,6 +597,81 @@ } ni_bool_t +ni_ifworker_match_netdev_name(const ni_ifworker_t *w, const char *ifname) +{ + xml_node_t *node; + + if (!ifname) + return FALSE; + + if (w->device && ni_string_eq(w->device->name, ifname)) + return TRUE; + + if (w->config.node && (node = xml_node_get_child(w->config.node, "name"))) { + const char *namespace = xml_node_get_attr(node, "namespace"); + if (!namespace && ni_string_eq(node->cdata, ifname)) + return TRUE; + } + + return FALSE; +} + +static ni_bool_t +__ni_ifworker_match_netdev_ifindex(unsigned int ifindex, const char *value) +{ + unsigned int index; + + if (ni_parse_uint(value, &index, 10) < 0 || !index) + return FALSE; + return ifindex == index; +} + +ni_bool_t +ni_ifworker_match_netdev_ifindex(const ni_ifworker_t *w, unsigned int ifindex) +{ + xml_node_t *node; + + if (!ifindex) + return FALSE; + + if (w->device && w->device->link.ifindex == ifindex) + return TRUE; + + if (w->config.node && (node = xml_node_get_child(w->config.node, "name"))) { + const char *namespace = xml_node_get_attr(node, "namespace"); + + if (namespace && ni_string_eq(namespace, "ifindex")) + return __ni_ifworker_match_netdev_ifindex(ifindex, node->cdata); + } + return FALSE; +} + +ni_bool_t +ni_ifworker_match_netdev_alias(const ni_ifworker_t *w, const char *ifalias) +{ + xml_node_t *node; + + if (!ifalias) + return FALSE; + + if (w->device && ni_string_eq(w->device->link.alias, ifalias)) + return TRUE; + + if (w->config.node && (node = xml_node_get_child(w->config.node, "alias"))) { + if (ni_string_eq(node->cdata, ifalias)) + return TRUE; + } + if (w->config.node && (node = xml_node_get_child(w->config.node, "name"))) { + const char *namespace = xml_node_get_attr(node, "namespace"); + + if (namespace && ni_string_eq(namespace, "alias")) + return ni_string_eq(node->cdata, ifalias); + } + + return FALSE; +} + +ni_bool_t ni_ifworker_match_alias(const ni_ifworker_t *w, const char *alias) { xml_node_t *node; @@ -603,7 +682,7 @@ if (w->device && ni_string_eq(w->device->link.alias, alias)) return TRUE; - if (w->config.node && (node = xml_node_get_child(w->config.node, "alias")) != NULL) { + if (w->config.node && (node = xml_node_get_child(w->config.node, "alias"))) { if (ni_string_eq(node->cdata, alias)) return TRUE; } @@ -2373,7 +2452,7 @@ } } -void +ni_bool_t ni_fsm_refresh_state(ni_fsm_t *fsm) { ni_ifworker_t *w; @@ -2390,9 +2469,11 @@ w->readonly = fsm->readonly; } - __ni_ifworker_refresh_netdevs(fsm); + if (!__ni_ifworker_refresh_netdevs(fsm)) + return FALSE; #ifdef MODEM - __ni_ifworker_refresh_modems(fsm); + if (!__ni_ifworker_refresh_modems(fsm)) + return FALSE; #endif for (i = 0; i < fsm->workers.count; ++i) { @@ -2416,23 +2497,29 @@ } else if (!w->done) ni_ifworker_update_state(w, NI_FSM_STATE_DEVICE_EXISTS, __NI_FSM_STATE_MAX); } + return TRUE; } -static void +static ni_bool_t __ni_ifworker_refresh_netdevs(ni_fsm_t *fsm) { static ni_dbus_object_t *list_object = NULL; ni_dbus_object_t *object; - if (!list_object && !(list_object = ni_call_get_netif_list_object())) - ni_fatal("unable to get server's interface list"); + if (!list_object && !(list_object = ni_call_get_netif_list_object())) { + ni_error("unable to get server's interface list"); + return FALSE; + } /* Call ObjectManager.GetManagedObjects to get list of objects and their properties */ - if (!ni_dbus_object_refresh_children(list_object)) - ni_fatal("Couldn't refresh list of active network interfaces"); + if (!ni_dbus_object_refresh_children(list_object)) { + ni_error("Couldn't refresh list of active network interfaces"); + return FALSE; + } for (object = list_object->children; object; object = object->next) ni_fsm_recv_new_netif(fsm, object, FALSE); + return TRUE; } ni_ifworker_t * @@ -2493,30 +2580,37 @@ static ni_dbus_object_t *list_object = NULL; ni_dbus_object_t *object; - if (!list_object && !(list_object = ni_call_get_netif_list_object())) - ni_fatal("unable to get server's netdev list"); + if (!list_object && !(list_object = ni_call_get_netif_list_object())) { + ni_error("unable to get server's netdev list"); + return NULL; + } object = ni_dbus_object_create(list_object, path, NULL, NULL); return ni_fsm_recv_new_netif(fsm, object, TRUE); } #ifdef MODEM -static void +static ni_bool_t __ni_ifworker_refresh_modems(ni_fsm_t *fsm) { static ni_dbus_object_t *list_object = NULL; ni_dbus_object_t *object; - if (!list_object && !(list_object = ni_call_get_modem_list_object())) - ni_fatal("unable to get server's modem list"); + if (!list_object && !(list_object = ni_call_get_modem_list_object())) { + ni_error("unable to get server's modem list"); + return FALSE; + } /* Call ObjectManager.GetManagedObjects to get list of objects and their properties */ - if (!ni_dbus_object_refresh_children(list_object)) - ni_fatal("Couldn't refresh list of available modems"); + if (!ni_dbus_object_refresh_children(list_object)) { + ni_error("Couldn't refresh list of available modems"); + return FALSE; + } for (object = list_object->children; object; object = object->next) { ni_fsm_recv_new_modem(fsm, object, FALSE); } + return TRUE; } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/src/ifevent.c new/wicked-0.5.19/src/ifevent.c --- old/wicked-0.5.18/src/ifevent.c 2014-02-25 14:03:37.000000000 +0100 +++ new/wicked-0.5.19/src/ifevent.c 2014-04-14 19:21:31.000000000 +0200 @@ -144,6 +144,13 @@ return rv; } +static inline ni_bool_t +__ni_netdev_still_exists(unsigned int ifindex) +{ + char namebuf[IF_NAMESIZE+1] = {'\0'}; + return if_indextoname(ifindex, namebuf) != NULL; +} + /* * Process NEWLINK event */ @@ -169,6 +176,16 @@ } old = ni_netdev_by_index(nc, ifi->ifi_index); + if (!__ni_netdev_still_exists(ifi->ifi_index)) { + if (old) { + __ni_netdev_event(nc, old, NI_EVENT_DEVICE_DELETE); + ni_netconfig_device_remove(nc, old); + ni_client_state_drop(old->link.ifindex); + return 0; + } + return -1; + } + if (old != NULL) { old_flags = old->link.ifflags; dev = old; @@ -244,6 +261,8 @@ { struct ifinfomsg *ifi; ni_netdev_t *dev; + struct nlattr *nla; + const char *ifname = NULL; if (!(ifi = ni_rtnl_ifinfomsg(h, RTM_DELLINK))) return -1; @@ -253,9 +272,14 @@ return 0; } + if ((nla = nlmsg_find_attr(h, sizeof(*ifi), IFLA_IFNAME)) != NULL) { + ifname = (char *) nla_data(nla); + } + /* Open code interface removal. */ if ((dev = ni_netdev_by_index(nc, ifi->ifi_index)) == NULL) { - ni_error("bad RTM_DELLINK message for unknown interface index %d", ifi->ifi_index); + ni_debug_events("RTM_DELLINK message for unknown interface %s index %d", + ifname, ifi->ifi_index); return -1; } else { dev->link.ifflags = __ni_netdev_translate_ifflags(ifi->ifi_flags); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wicked-0.5.18/wicked.spec new/wicked-0.5.19/wicked.spec --- old/wicked-0.5.18/wicked.spec 2014-03-28 19:43:13.000000000 +0100 +++ new/wicked-0.5.19/wicked.spec 2014-04-14 19:25:19.000000000 +0200 @@ -18,7 +18,7 @@ %define release_prefix %{?snapshot:%{snapshot}}%{!?snapshot:0} Name: wicked -Version: 0.5.18 +Version: 0.5.19 Release: %{release_prefix}.0.0 Summary: Network configuration infrastructure License: GPL-2.0 -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
