From patchwork Thu May 19 16:57:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Dedecker X-Patchwork-Id: 624160 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 3r9ck95Gtbz9ryQ for ; Fri, 20 May 2016 02:59:45 +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=vCP4Ch4d; 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 1b3RHD-0002Vh-1b; Thu, 19 May 2016 16:58:23 +0000 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1b3RHA-0002JA-LY for lede-dev@lists.infradead.org; Thu, 19 May 2016 16:58:21 +0000 Received: by mail-wm0-x242.google.com with SMTP id w143so22511986wmw.3 for ; Thu, 19 May 2016 09:57:59 -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=ejY9RoAJ72ooh41X7VFvadcFtXfJCp0LVGPbPT9APBQ=; b=vCP4Ch4dn/zadAq0obtdvoGQo9d4B8tyvhNcDAOj96wsl0B/SRHZPXVBnZtQe+EQDX Eg13tOawJmhi45p5Cy3OUEQXMOIjbsyz0cbLzLOheprpPkU7UGRbZBGhAOi0rsa1JPyZ hzBLoChAaLeJ9yQ4ZiXzFj24lOXd4GXEJFg4c8ar3kaeWmEDDSneMD9t4wp2xfUb+5g/ 0o3rhbYIsWOLQbFK8d1Ompm0AAAQYMSkhTY7gXKaRvB2w8RWLQPWZlcUGfOmvmIJKxd4 4J+P8CjZqwJ/EFtytamHnxn0joSumrqLBC3OH4iJrePKvVBjR4MGCg3oHbRVcpcQ0lJq 5FIQ== 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=ejY9RoAJ72ooh41X7VFvadcFtXfJCp0LVGPbPT9APBQ=; b=GyV7Ei6AsyDR2plwwY9GMRWM2LkphqJ1byP3i/lu/4XoZa+SN2SSdrSGzEzxf617NE 7JTO3C38iai/6E4t8McHzkI6ZX5/cWr/6pEdUTk82NLZpUXr9CU5HMlsq2YLuZ6pIUvL hvjuFUTOHiLZIKt2fynOPSEd6OES76a/88I/EfnG4rAuA0xYugEV2O2S+80SfG7xwjig Sd/NmR0k2DECL9nly9ei7l9uYNi+W43pJiNZg3rFoaMsTLichW5lPn53By9t2aqW73cN tXTBrF9N+COU6l4FibLgsSsr2cPQCV4j9iWyM6Ci5ggjUB9MiY0fSMnBd5m/L0OzzJo4 gtZQ== X-Gm-Message-State: AOPr4FVosTc5FuPHMxBvUpGMtf+7w6OBg3/pQQ4iPLWO9ZOsylCC2VEVGsdGENnoZFJacw== X-Received: by 10.194.85.132 with SMTP id h4mr14511403wjz.50.1463677078475; Thu, 19 May 2016 09:57:58 -0700 (PDT) Received: from cplx43.eu.thmulti.com ([141.11.62.7]) by smtp.gmail.com with ESMTPSA id ib1sm15307126wjb.48.2016.05.19.09.57.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 19 May 2016 09:57:57 -0700 (PDT) From: Hans Dedecker To: lede-dev@lists.infradead.org, openwrt-devel@lists.openwrt.org Date: Thu, 19 May 2016 18:57:51 +0200 Message-Id: <1463677071-17121-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-20160519_095820_855027_C839D0FE X-CRM114-Status: GOOD ( 12.20 ) 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:242 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] 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 , steven@midlink.org, 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 --- The patch is based on a previous discussion held on the OpenWRT-devel mailing list (https://lists.openwrt.org/pipermail/openwrt-devel/2016-January/039081.html) as per Felix's comments this solution is based on procd interface service triggers package/utils/busybox/Makefile | 2 +- package/utils/busybox/files/sysntpd | 43 ++++++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 24c064c..24e0e11 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -42,7 +42,7 @@ define Package/busybox MAINTAINER:=Felix Fietkau TITLE:=Core utilities for embedded Linux URL:=http://busybox.net/ - DEPENDS:=+BUSYBOX_USE_LIBRPC:librpc +BUSYBOX_CONFIG_PAM:libpam + DEPENDS:=+BUSYBOX_USE_LIBRPC:librpc +BUSYBOX_CONFIG_PAM:libpam +jsonfilter MENU:=1 endef diff --git a/package/utils/busybox/files/sysntpd b/package/utils/busybox/files/sysntpd index f73bb83..5c663d7 100755 --- a/package/utils/busybox/files/sysntpd +++ b/package/utils/busybox/files/sysntpd @@ -7,13 +7,35 @@ USE_PROCD=1 PROG=/usr/sbin/ntpd HOTPLUG_SCRIPT=/usr/sbin/ntpd-hotplug +get_dhcp_ntp_servers() { + local interfaces="$1" + local filter="*" + local network_dump interface ntpservers ntpserver + + network_dump=$(ubus call network.interface dump) + for interface in $interfaces; do + [ "$filter" = "*" ] && filter="@.interface='$interface'" || filter="$filter,@.interface='$interface'" + done + + ntpservers=$(jsonfilter -s "$network_dump" -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:0' '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 +44,8 @@ start_service() { [ $enabled = 0 ] && return + [ $use_dhcp = 1 ] && get_dhcp_ntp_servers "$dhcp_interface" + [ -z "$server" ] && return procd_open_instance @@ -35,8 +59,17 @@ start_service() { procd_close_instance } -service_triggers() -{ - procd_add_reload_trigger "system" +service_triggers() { + local script name + + script=$(readlink -f "$initscript") + name=$(basename ${script:-$initscript}) + + procd_open_trigger + procd_add_config_trigger "config.change" "system" /etc/init.d/$name reload + + procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload + procd_close_trigger + procd_add_validation validate_ntp_section }