From 7afdb653fb9c94e41ee6e6c1f5b5da90fc54f53e Mon Sep 17 00:00:00 2001 From: piernov Date: Sat, 3 Sep 2011 17:17:37 +0200 Subject: networkmanager 0.9.0-1 correction port --- networkmanager/.footprint.i686 | 10 +-- networkmanager/.footprint.x86_64 | 10 +-- networkmanager/.md5sum.i686 | 4 + networkmanager/.md5sum.x86_64 | 4 + networkmanager/NuTyX.patch | 132 ++++++++++++++++++++++++++++++ networkmanager/Pkgfile | 54 ++++++++---- networkmanager/discover_mac_address.patch | 72 ++++++++++++++++ networkmanager/network.conf | 5 ++ networkmanager/network.rc | 96 ++++++++++++++++++++++ networkmanager/post-install | 16 ++++ 10 files changed, 379 insertions(+), 24 deletions(-) create mode 100644 networkmanager/NuTyX.patch create mode 100644 networkmanager/discover_mac_address.patch create mode 100644 networkmanager/network.conf create mode 100755 networkmanager/network.rc create mode 100644 networkmanager/post-install diff --git a/networkmanager/.footprint.i686 b/networkmanager/.footprint.i686 index bd14549..13e2a80 100644 --- a/networkmanager/.footprint.i686 +++ b/networkmanager/.footprint.i686 @@ -1,5 +1,7 @@ drwxr-xr-x root/root etc/ drwxr-xr-x root/root etc/NetworkManager/ +-rw-r--r-- root/root etc/NetworkManager/NetworkManager.conf +drwxr-xr-x root/root etc/NetworkManager/VPN/ drwxr-xr-x root/root etc/NetworkManager/dispatcher.d/ drwxr-xr-x root/root etc/NetworkManager/system-connections/ drwxr-xr-x root/root etc/dbus-1/ @@ -8,10 +10,11 @@ drwxr-xr-x root/root etc/dbus-1/system.d/ -rw-r--r-- root/root etc/dbus-1/system.d/nm-avahi-autoipd.conf -rw-r--r-- root/root etc/dbus-1/system.d/nm-dhcp-client.conf -rw-r--r-- root/root etc/dbus-1/system.d/nm-dispatcher.conf --rw-r--r-- root/root etc/dbus-1/system.d/nm-ifcfg-rh.conf drwxr-xr-x root/root etc/rc.d/ drwxr-xr-x root/root etc/rc.d/init.d/ --rwxr-xr-x root/root etc/rc.d/init.d/NetworkManager +-rwxr-xr-- root/root etc/rc.d/init.d/network.nm +drwxr-xr-x root/root etc/sysconfig/ +-rwxr-xr-- root/root etc/sysconfig/network.nm drwxr-xr-x root/root lib/ drwxr-xr-x root/root lib/udev/ drwxr-xr-x root/root lib/udev/rules.d/ @@ -71,9 +74,6 @@ drwxr-xr-x root/root usr/include/libnm-glib/ -rw-r--r-- root/root usr/include/libnm-glib/nm-vpn-plugin.h -rw-r--r-- root/root usr/include/libnm-glib/nm-wimax-nsp.h drwxr-xr-x root/root usr/lib/ -drwxr-xr-x root/root usr/lib/NetworkManager/ --rwxr-xr-x root/root usr/lib/NetworkManager/libnm-settings-plugin-ifcfg-rh.la --rwxr-xr-x root/root usr/lib/NetworkManager/libnm-settings-plugin-ifcfg-rh.so drwxr-xr-x root/root usr/lib/girepository-1.0/ -rw-r--r-- root/root usr/lib/girepository-1.0/NMClient-1.0.typelib -rw-r--r-- root/root usr/lib/girepository-1.0/NetworkManager-1.0.typelib diff --git a/networkmanager/.footprint.x86_64 b/networkmanager/.footprint.x86_64 index bd14549..13e2a80 100644 --- a/networkmanager/.footprint.x86_64 +++ b/networkmanager/.footprint.x86_64 @@ -1,5 +1,7 @@ drwxr-xr-x root/root etc/ drwxr-xr-x root/root etc/NetworkManager/ +-rw-r--r-- root/root etc/NetworkManager/NetworkManager.conf +drwxr-xr-x root/root etc/NetworkManager/VPN/ drwxr-xr-x root/root etc/NetworkManager/dispatcher.d/ drwxr-xr-x root/root etc/NetworkManager/system-connections/ drwxr-xr-x root/root etc/dbus-1/ @@ -8,10 +10,11 @@ drwxr-xr-x root/root etc/dbus-1/system.d/ -rw-r--r-- root/root etc/dbus-1/system.d/nm-avahi-autoipd.conf -rw-r--r-- root/root etc/dbus-1/system.d/nm-dhcp-client.conf -rw-r--r-- root/root etc/dbus-1/system.d/nm-dispatcher.conf --rw-r--r-- root/root etc/dbus-1/system.d/nm-ifcfg-rh.conf drwxr-xr-x root/root etc/rc.d/ drwxr-xr-x root/root etc/rc.d/init.d/ --rwxr-xr-x root/root etc/rc.d/init.d/NetworkManager +-rwxr-xr-- root/root etc/rc.d/init.d/network.nm +drwxr-xr-x root/root etc/sysconfig/ +-rwxr-xr-- root/root etc/sysconfig/network.nm drwxr-xr-x root/root lib/ drwxr-xr-x root/root lib/udev/ drwxr-xr-x root/root lib/udev/rules.d/ @@ -71,9 +74,6 @@ drwxr-xr-x root/root usr/include/libnm-glib/ -rw-r--r-- root/root usr/include/libnm-glib/nm-vpn-plugin.h -rw-r--r-- root/root usr/include/libnm-glib/nm-wimax-nsp.h drwxr-xr-x root/root usr/lib/ -drwxr-xr-x root/root usr/lib/NetworkManager/ --rwxr-xr-x root/root usr/lib/NetworkManager/libnm-settings-plugin-ifcfg-rh.la --rwxr-xr-x root/root usr/lib/NetworkManager/libnm-settings-plugin-ifcfg-rh.so drwxr-xr-x root/root usr/lib/girepository-1.0/ -rw-r--r-- root/root usr/lib/girepository-1.0/NMClient-1.0.typelib -rw-r--r-- root/root usr/lib/girepository-1.0/NetworkManager-1.0.typelib diff --git a/networkmanager/.md5sum.i686 b/networkmanager/.md5sum.i686 index fee0beb..457b13c 100644 --- a/networkmanager/.md5sum.i686 +++ b/networkmanager/.md5sum.i686 @@ -1 +1,5 @@ 658f1faa6dd42a0f9a81bdff43667ab8 NetworkManager-0.9.0.tar.xz +df9adee779186c7c278e77e22ba094ee NuTyX.patch +f7e8e2d095d7bc331c5de91232eb23eb discover_mac_address.patch +3239c07546bcce51e4903edb2dfc31e8 network.conf +b8de5af0abf3b2292f0f9e1aa429fb9f network.rc diff --git a/networkmanager/.md5sum.x86_64 b/networkmanager/.md5sum.x86_64 index fee0beb..457b13c 100644 --- a/networkmanager/.md5sum.x86_64 +++ b/networkmanager/.md5sum.x86_64 @@ -1 +1,5 @@ 658f1faa6dd42a0f9a81bdff43667ab8 NetworkManager-0.9.0.tar.xz +df9adee779186c7c278e77e22ba094ee NuTyX.patch +f7e8e2d095d7bc331c5de91232eb23eb discover_mac_address.patch +3239c07546bcce51e4903edb2dfc31e8 network.conf +b8de5af0abf3b2292f0f9e1aa429fb9f network.rc diff --git a/networkmanager/NuTyX.patch b/networkmanager/NuTyX.patch new file mode 100644 index 0000000..0fc48cf --- /dev/null +++ b/networkmanager/NuTyX.patch @@ -0,0 +1,132 @@ +--- b/config.h.in 2011-05-07 13:34:44.000000000 +1000 ++++ a/config.h.in 2011-05-07 13:34:44.000000000 +1000 +@@ -162,6 +162,9 @@ + /* Define if you have Gentoo */ + #undef TARGET_GENTOO + ++/* Define if you have NuTyX */ ++#undef TARGET_NUTYX ++ + /* Define if you have linexa */ + #undef TARGET_LINEXA + +--- b/configure.ac 2011-05-07 13:34:44.000000000 +1000 ++++ a/configure.ac 2011-05-07 13:34:44.000000000 +1000 +@@ -106,7 +106,7 @@ + dnl + AC_C_BIGENDIAN + +-AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, suse, gentoo, debian, arch, slackware, paldo, mandriva, pardus, linexa or exherbo])) ++AC_ARG_WITH(distro, AS_HELP_STRING([--with-distro=DISTRO], [Specify the Linux distribution to target: One of redhat, suse, gentoo, debian, arch, slackware, paldo, mandriva, pardus, linexa, exherbo or nutyx])) + if test "z$with_distro" = "z"; then + AC_CHECK_FILE(/etc/redhat-release,with_distro="redhat") + AC_CHECK_FILE(/etc/SuSE-release,with_distro="suse") +@@ -120,6 +120,7 @@ + AC_CHECK_FILE(/etc/pardus-release,with_distro="pardus") + AC_CHECK_FILE(/etc/linexa-release,with_distro="linexa") + AC_CHECK_FILE(/etc/exherbo-release,with_distro="exherbo") ++ AC_CHECK_FILE(/etc/nutyx-version,with_distro="nutyx") + if test "z$with_distro" = "z"; then + with_distro=`lsb_release -is` + fi +@@ -131,7 +132,7 @@ + exit 1 + else + case $with_distro in +- redhat|suse|gentoo|debian|slackware|arch|paldo|frugalware|mandriva|pardus|linexa|exherbo) ;; ++ redhat|suse|gentoo|debian|slackware|arch|paldo|frugalware|mandriva|pardus|linexa|exherbo|nutyx) ;; + *) + echo "Your distribution (${with_distro}) is not yet supported! (patches welcome)" + exit 1 +@@ -199,6 +200,11 @@ + AC_DEFINE(TARGET_EXHERBO, 1, [Define if you have Exherbo]) + fi + ++AM_CONDITIONAL(TARGET_NUTYX, test x"$with_distro" = xnutyx) ++if test x"$with_distro" = xnutyx; then ++ AC_DEFINE(TARGET_NUTYX, 1, [Define if you have NuTyX]) ++fi ++ + dnl + dnl Distribution version string + dnl +--- b/src/backends/Makefile.am 2011-05-07 13:34:44.000000000 +1000 ++++ a/src/backends/Makefile.am 2011-05-07 13:34:44.000000000 +1000 +@@ -61,6 +61,10 @@ + libnmbackend_la_SOURCES += NetworkManagerExherbo.c + endif + ++if TARGET_NUTYX ++libnmbackend_la_SOURCES += NetworkManagerNuTyX.c ++endif ++ + libnmbackend_la_LIBADD += \ + $(top_builddir)/src/logging/libnm-logging.la \ + $(LIBNL_LIBS) \ +--- b/src/backends/NetworkManagerNuTyX.c 1970-01-01 10:00:00.000000000 +1000 ++++ a/src/backends/NetworkManagerNuTyX.c 2011-05-07 13:34:44.000000000 +1000 +@@ -0,0 +1,63 @@ ++/* NetworkManager -- Network link manager ++ * ++ * Jürg Billeter ++ * ++ * Adapted for NuTyX by piernov ++ * Heavily based on NetworkManagerRedhat.c by Dan Williams ++ * ++ * 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 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * (C) Copyright 2004 Red Hat, Inc. ++ * (C) Copyright 2006 Jürg Billeter ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++ ++#include "NetworkManagerGeneric.h" ++#include "nm-system.h" ++#include "NetworkManagerUtils.h" ++#include "nm-logging.h" ++ ++/* ++ * nm_system_enable_loopback ++ * ++ * Bring up the loopback interface ++ * ++ */ ++void nm_system_enable_loopback (void) ++{ ++ nm_spawn_process ("/etc/rc.d/init.d/localnet restart"); ++} ++ ++/* ++ * nm_system_update_dns ++ * ++ * Invalidate the nscd host cache, if it exists, since ++ * we changed resolv.conf. ++ * ++ */ ++void nm_system_update_dns (void) ++{ ++ if (g_file_test("/var/run/nscd/nscd.pid", G_FILE_TEST_EXISTS)) ++ nm_log_info (LOGD_DNS, "Clearing nscd hosts cache."); ++ nm_spawn_process ("/usr/sbin/nscd -i hosts"); ++} ++ ++ diff --git a/networkmanager/Pkgfile b/networkmanager/Pkgfile index a6a9b98..1fbbad3 100644 --- a/networkmanager/Pkgfile +++ b/networkmanager/Pkgfile @@ -2,30 +2,56 @@ # URL: http://www.gnome.org/projects/NetworkManager/ # Maintainer: NuTyX core team # Packager: thierryn1 at hispeed dot ch -# Depends on: dbus-glib, iproute2, libnl, nss, polkit, wireless_tools, wpa_supplicant, ppp, iptables, intltool -# Run on: dbus-glib,iproute2,libnl,nss,polkit,wireless_tools,wpa_supplicant,ppp,iptables,intltool +# Depends on: dbus-glib, iproute2, libnl, nss, polkit, wireless_tools, wpa_supplicant, ppp, iptables, intltool, bluez, gobject-introspection +# Run on: dbus-glib,iproute2,libnl,nss,polkit,wireless_tools,wpa_supplicant,ppp,iptables,intltool,bluez name=networkmanager version=0.9.0 release=1 _name=NetworkManager -source=( http://ftp.gnome.org/pub/GNOME/sources/$_name/${version%.*}/$_name-$version.tar.xz ) +source=(http://ftp.gnome.org/pub/GNOME/sources/$_name/${version%.*}/$_name-$version.tar.xz + discover_mac_address.patch + NuTyX.patch + network.rc + network.conf) build() { cd ${_name}-$version + patch -p1 < ../discover_mac_address.patch + patch -p1 < ../NuTyX.patch + aclocal + autoconf + automake ./configure --prefix=/usr \ - --with-distro=redhat \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --with-crypto=nss \ - --with-dhclient=/usr/sbin/dhclient \ - --with-dhcpcd=/sbin/dhcpcd \ - --with-iptables=/usr/sbin/iptables \ - --disable-static \ - --enable-more-warnings=no \ - --disable-wimax + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-system-ca-path=/etc/ssl/certs \ + --with-resolvconf=yes \ + --with-distro=nutyx \ + --with-crypto=nss \ + --with-dhclient=/usr/sbin/dhclient \ + --with-dhcpcd=/sbin/dhcpcd \ + --with-iptables=/usr/sbin/iptables \ + --with-tests=yes \ + --enable-polkit \ + --enable-introspection=yes \ + --disable-wimax make make DESTDIR=$PKG install + + cat > $PKG/etc/NetworkManager/NetworkManager.conf << EOF +[main] +plugins=keyfile +EOF + + # create a VPN directory + install -d $PKG/etc/$_name/VPN + install -m755 test/.libs/nm-online -D $PKG/usr/bin/nm-online + + # create keyfile plugin system-settings directory + install -d $PKG/etc/$_name/system-connections + + install -D -m0754 ../network.rc $PKG/etc/rc.d/init.d/network.nm + install -D -m0754 ../network.conf $PKG/etc/sysconfig/network.nm } - diff --git a/networkmanager/discover_mac_address.patch b/networkmanager/discover_mac_address.patch new file mode 100644 index 0000000..c73921f --- /dev/null +++ b/networkmanager/discover_mac_address.patch @@ -0,0 +1,72 @@ +diff -up NetworkManager-0.8.9997/src/settings/plugins/ifcfg-rh/reader.c.hwaddr NetworkManager-0.8.9997/src/settings/plugins/ifcfg-rh/reader.c +--- NetworkManager-0.8.9997/src/settings/plugins/ifcfg-rh/reader.c.hwaddr 2011-05-27 16:38:29.000000000 +0200 ++++ NetworkManager-0.8.9997/src/settings/plugins/ifcfg-rh/reader.c 2011-07-31 20:40:11.459089519 +0200 +@@ -157,6 +157,46 @@ make_connection_setting (const char *fil + } + + static gboolean ++discover_mac_address(shvarFile *ifcfg, GByteArray **array, GError **error) ++{ ++ int fd, ret; ++ struct ifreq ifr; ++ char *device; ++ ++ device = svGetValue (ifcfg, "DEVICE", FALSE); ++ ++ g_return_val_if_fail (device != NULL, FALSE); ++ g_return_val_if_fail (array != NULL, FALSE); ++ g_return_val_if_fail (*array == NULL, FALSE); ++ g_return_val_if_fail (error != NULL, FALSE); ++ g_return_val_if_fail (*error == NULL, FALSE); ++ ++ fd = socket(AF_INET, SOCK_DGRAM, 0); ++ if (fd < 0) { ++ g_set_error(error, IFCFG_PLUGIN_ERROR, errno, ++ "Unable to discover MAC address: socket error"); ++ g_free (device); ++ return FALSE; ++ } ++ ++ ifr.ifr_addr.sa_family = AF_INET; ++ strncpy(ifr.ifr_name, device, IFNAMSIZ-1); ++ ++ ret = ioctl(fd, SIOCGIFHWADDR, &ifr); ++ g_free (device); ++ if (ret < 0) { ++ g_set_error(error, IFCFG_PLUGIN_ERROR, errno, ++ "Unable to discover MAC address: ioctl error"); ++ return FALSE; ++ } ++ close(fd); ++ ++ *array = g_byte_array_sized_new (ETH_ALEN); ++ g_byte_array_append (*array, (guint8 *) ifr.ifr_hwaddr.sa_data, ETH_ALEN); ++ return TRUE; ++} ++ ++static gboolean + read_mac_address (shvarFile *ifcfg, const char *key, GByteArray **array, GError **error) + { + char *value = NULL; +@@ -2750,6 +2790,10 @@ make_wireless_setting (shvarFile *ifcfg, + s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); + + if (read_mac_address (ifcfg, "HWADDR", &array, error)) { ++ /* if we don't have a HWADDR saved in ifcfg file, try to discover it manually */ ++ if (!array) { ++ discover_mac_address(ifcfg, &array, error); ++ } + if (array) { + g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, array, NULL); + +@@ -3083,6 +3127,10 @@ make_wired_setting (shvarFile *ifcfg, + } + + if (read_mac_address (ifcfg, "HWADDR", &mac, error)) { ++ /* if we don't have a HWADDR saved in ifcfg file, try to discover it manually */ ++ if (!mac) { ++ discover_mac_address(ifcfg, &mac, error); ++ } + if (mac) { + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); + diff --git a/networkmanager/network.conf b/networkmanager/network.conf new file mode 100644 index 0000000..209a975 --- /dev/null +++ b/networkmanager/network.conf @@ -0,0 +1,5 @@ +HOSTNAME='NuTyX' # your host name +MANAGER='networkmanager' # wicd/networkmanager/none +NETWORKWAIT='no' # toggle whether to wait or not +LINKDELAY='15' # time to wait for NetworkManager initialization +NETWORKDELAY='0' # time to wait after NetworkManager initialization diff --git a/networkmanager/network.rc b/networkmanager/network.rc new file mode 100755 index 0000000..c759444 --- /dev/null +++ b/networkmanager/network.rc @@ -0,0 +1,96 @@ +#!/bin/sh +# Begin $rc_base/init.d/network + +# Based on sysklogd script from LFS-3.1 and earlier. +# Rewritten by thierryn1@hispeed.ch +# Adapted for NetworkManager by piernov + +# Source function library. +. /etc/sysconfig/rc +. $rc_functions + +# Source network configuration +. /etc/sysconfig/network + +NM_PIDFILE=/var/run/NetworkManager.pid +WICD_PIDFILE= + +let TIME=30 +case "$1" in + start) + if [ "$MANAGER" == "networkmanager" ] && [ -x /usr/sbin/NetworkManager ]; then + boot_mesg "Setting network parameters... " + sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 + echo_ok + + boot_mesg "Starting NetworkManager daemon..." + loadproc NetworkManager --pid-file $NM_PIDFILE + if [ "${NETWORKWAIT}" == "yes" ]; then + [ -z "${LINKDELAY}" ] && LINKDELAY=10 + boot_mesg "Waiting for network..." + nm-online -q --timeout=$LINKDELAY || nm-online -q -x --timeout=30 + [ "$?" = "0" ] && log_success_msg "Network startup" || log_failure_msg "Network startup" + [ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY} + fi + elif [ "$MANAGER" == "wicd" ] && [ -f /usr/share/wicd/daemon/wicd-daemon.py ]; then + boot_mesg "Starting the wicd Daemon..." + loadproc /usr/share/wicd/daemon/wicd-daemon.py + if grep -v ^# /etc/fstab | grep _netdev > /dev/null; then + while ! grep "nameserver" /etc/resolv.conf ; + do + sleep 1 + echo -n . + let TIME=$TIME-1 + if [ $TIME -lt 1 ]; then + boot_mesg "Time out" + echo_failure + exit 1 + fi + done + boot_mesg "Network successfully configured..." + echo_ok + fi + else + if [ -f /etc/rc.d/init.d/iplink ]; then + /etc/rc.d/init.d/iplink start + fi + fi + ;; + + stop) + if [ "$MANAGER" == "networkmanager" ] && [ -x /usr/sbin/NetworkManager ]; then + boot_mesg "Stopping NetworkManager daemon..." + killproc -p $NM_PIDFILE NetworkManager + elif [ "$MANAGER" == "wicd" ] && [ -f /usr/share/wicd/daemon/wicd-daemon.py ]; then + boot_mesg "Stopping the wicd Daemon..." + loadproc /usr/share/wicd/daemon/wicd-daemon.py --kill + else + if [ -f /etc/rc.d/init.d/iplink ]; then + /etc/rc.d/init.d/iplink stop + fi + fi + ;; + + status) + if [ "$MANAGER" == "networkmanager" ] && [ -x /usr/sbin/NetworkManager ]; then + statusproc -p $NM_PIDFILE NetworkManager + else + if [ "$MANAGER" == "wicd" ] && [ -f /usr/share/wicd/daemon/wicd-daemon.py ]; then + statusproc -p /var/run/wicd/wicd.pid "/usr/bin/python2 /usr/share/wicd/daemon/wicd-daemon.py" + fi + fi + ;; + + restart) + stop + sleep 3 + start + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +# End $rc_base/init.d/network diff --git a/networkmanager/post-install b/networkmanager/post-install new file mode 100644 index 0000000..6085d58 --- /dev/null +++ b/networkmanager/post-install @@ -0,0 +1,16 @@ +#!/bin/sh + +if ! grep NetworkManager /etc/rc.d/init.d/network 2>&1 > /dev/null ; then + mv /etc/rc.d/init.d/network{,.old} + mv /etc/rc.d/init.d/network{.nm,} +else + rm -f /etc/rc.d/init.d/network.nm +fi + +if ! grep MANAGER /etc/sysconfig/network 2>&1 > /dev/null; then + mv /etc/sysconfig/network{,.old} + mv /etc/sysconfig/network{.nm,} + sed "s|HOSTNAME='NuTyX'|HOSTNAME='$HOSTNAME'|" -i /etc/sysconfig/network +else + rm -f /etc/sysconfig/network.nm +fi -- cgit v1.2.3-54-g00ecf