From patchwork Mon May 23 12:30:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Dedecker X-Patchwork-Id: 625162 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rCycr0QZFz9sdm for ; Mon, 23 May 2016 22:33:16 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=fqr+qA2d; dkim-atps=neutral Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1b4p1D-00031D-Tv; Mon, 23 May 2016 12:31:35 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1b4p16-0002jL-IO for lede-dev@lists.infradead.org; Mon, 23 May 2016 12:31:30 +0000 Received: by mail-wm0-x243.google.com with SMTP id n129so14569918wmn.1 for ; Mon, 23 May 2016 05:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=/E2U+Nioavb5J0TWRzSknVjgtHiee44/nrLcTkR4XLE=; b=fqr+qA2dFoYCmE4PhGbW5ch6T2a5LEM8ol7WWAAixHDeY2WktzbqMPIeaD8t6L3G8a 0KF91F7ZoKjtSujuStznWsoGEx6A9/cC+x/iMUJB+pXG4O6b1ohjMEh8WXjCCAxuzj+A zfxWVLz1pCs3ISPN1s1wzHU2MzUNy6TAEA5WSAoQNXXL9JaoMWp9FeiWXHzCabxj8Stf KlAI5H7OWQJJhyLWs1cvbruNGLeGFWtPHdfI45q1/hnjb1/pzKtcIAkjgsfAcGJ+yOov 8uLVFmGWyuikoNm4MQt4SF8yWjbFtNjDb7pNhHEMUfPZE09ZaEEw2cW9okD7ChhYGc3v ekgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=/E2U+Nioavb5J0TWRzSknVjgtHiee44/nrLcTkR4XLE=; b=c5hkAYsk854wQPFySLPGp38Vyc3bYGuG6wMZF+nhw6tIX3V+riIDulIgYxZu9q2oos ZAEMoHkEwZPcWX8lRu5K78Mw5JA5ut4zxxN61YyKgP5/uYY3H7vhWAMC2e9w7lCqcwh8 kM6LVLt5+EkWdgXO6smoPE1wAGOHgOcAwQejtGrrwRNwx4XNMnx2jlua474p+E5KH1IU 5m/lpWIQUc+UfX08sigXqzKA533zPljdbyr4sCyrETRl0SCfCa42vBaIfa0VwKE+382G o41W5nod3L+WyxZ1Vth0o/bO1E8VoYi11SqzZ/lXw6ymG+bChnPS3puDuGBehJImTOjD /cZA== X-Gm-Message-State: AOPr4FWpcZmhag5LaM3hYEam9XVXE2uAsdCI+F72NCS+MHWEpXzwifDBUaJfiQaLxjGYVA== X-Received: by 10.28.211.213 with SMTP id k204mr16485813wmg.35.1464006666522; Mon, 23 May 2016 05:31:06 -0700 (PDT) Received: from cplx43.eu.thmulti.com ([141.11.62.7]) by smtp.gmail.com with ESMTPSA id jp2sm35151668wjc.16.2016.05.23.05.31.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 23 May 2016 05:31:05 -0700 (PDT) From: Hans Dedecker To: openwrt-devel@lists.openwrt.org, lede-dev@lists.infradead.org Date: Mon, 23 May 2016 14:30:57 +0200 Message-Id: <1464006657-13480-1-git-send-email-dedeckeh@gmail.com> X-Mailer: git-send-email 1.9.1 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160523_053128_833930_C14CEA36 X-CRM114-Status: GOOD ( 10.21 ) X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [2a00:1450:400c:c09:0:0:0:243 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (dedeckeh[at]gmail.com) -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid Subject: [LEDE-DEV] [PATCH v2] busybox: sysntpd - Support for NTP servers received via DHCP(v6) X-BeenThere: lede-dev@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hans Dedecker , jo@mein.io, nbd@nbd.name MIME-Version: 1.0 Sender: "Lede-dev" Errors-To: lede-dev-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The busybox ntpd utility currently uses ntp servers specified in uci. This patch allows the ntpd utility to use NTP servers received via DHCP(v6) Following uci parameters have been added: use_dhcp : enables NTP server config via DHCP(v6) dhcp_interface : use NTP servers received only on the specified DHCP(v6) interfaces; if empty all interfaces are considered Signed-off-by: Hans Dedecker --- v1 -> v2: Make jsonfilter dependant on BUSYBOX_CONFIG_NTPD Pipe output of network dump into jsonfilter use_dhcp is by default enabled Install fine grained procd interface triggers if dhcp_interface is configured package/utils/busybox/Makefile | 4 +-- package/utils/busybox/files/sysntpd | 57 +++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 24c064c..e5b55e0 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.24.2 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 @@ -17,7 +17,7 @@ PKG_SOURCE_URL:=http://www.busybox.net/downloads \ http://distfiles.gentoo.org/distfiles/ PKG_MD5SUM:=2eaae519cac1143bcf583636a745381f -PKG_BUILD_DEPENDS:=BUSYBOX_USE_LIBRPC:librpc BUSYBOX_CONFIG_PAM:libpam +PKG_BUILD_DEPENDS:=BUSYBOX_USE_LIBRPC:librpc BUSYBOX_CONFIG_PAM:libpam +BUSYBOX_CONFIG_NTPD:jsonfilter PKG_BUILD_PARALLEL:=1 PKG_CHECK_FORMAT_SECURITY:=0 diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd index f73bb83..6d44280 100755 --- a/package/utils/busybox/files/sysntpd +++ b/package/utils/busybox/files/sysntpd @@ -7,13 +7,34 @@ USE_PROCD=1 PROG=/usr/sbin/ntpd HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug +get_dhcp_ntp_servers() { + local interfaces="$1" + local filter="*" + local interface ntpservers ntpserver + + for interface in $interfaces; do + [ "$filter" = "*" ] && filter="@.interface='$interface'" || filter="$filter,@.interface='$interface'" + done + + ntpservers=$(ubus call network.interface dump | jsonfilter -e "@.interface[$filter]['data']['ntpserver']") + + for ntpserver in $ntpservers; do + local duplicate=0 + local entry + for entry in $server; do + [ "$ntpserver" = "$entry" ] && duplicate=1 + done + [ "$duplicate" = 0 ] && server="$server $ntpserver" + done +} + validate_ntp_section() { uci_validate_section system timeserver "${1}" \ - 'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' + 'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0' 'use_dhcp:bool:1' 'dhcp_interface:list(string)' } start_service() { - local server enabled enable_server peer + local server enabled enable_server use_dhcp dhcp_interface peer validate_ntp_section ntp || { echo "validation failed" @@ -22,6 +43,8 @@ start_service() { [ $enabled = 0 ] && return + [ $use_dhcp = 1 ] && get_dhcp_ntp_servers "$dhcp_interface" + [ -z "$server" ] && return procd_open_instance @@ -35,8 +58,32 @@ start_service() { procd_close_instance } -service_triggers() -{ - procd_add_reload_trigger "system" +service_triggers() { + local script name use_dhcp + + script=$(readlink -f "$initscript") + name=$(basename ${script:-$initscript}) + + procd_open_trigger + procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload + + config_load system + config_get use_dhcp ntp use_dhcp 1 + + [ $use_dhcp = 1 ] && { + local dhcp_interface + config_get dhcp_interface ntp dhcp_interface + + if [ -n "$dhcp_interface" ]; then + for n in $dhcp_interface; do + procd_add_interface_trigger "interface.*" $n /etc/init.d/$name reload + done + else + procd_add_raw_trigger "interface.*" 1000 /etc/init.d/$name reload + fi + } + + procd_close_trigger + procd_add_validation validate_ntp_section }