From 8eb56a88a49755cf8b58b65e9fc53df11043cab1 Mon Sep 17 00:00:00 2001
From: John Crispin <john@openwrt.org>
Date: Thu, 11 Jul 2013 17:00:54 +0000
Subject: [PATCH] procd: add a small script that handles config reloads until
 configd is ready

Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 37248
---
 package/base-files/files/etc/init.d/boot | 4 ++++
 package/base-files/files/etc/rc.common   | 4 ++++
 package/system/procd/Makefile            | 1 +
 package/system/procd/files/procd.sh      | 3 +++
 package/system/procd/files/reload_config | 8 ++++++++
 5 files changed, 20 insertions(+)
 create mode 100644 package/system/procd/files/reload_config

diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
index 078adb8ecc..aad59e25da 100755
--- a/package/base-files/files/etc/init.d/boot
+++ b/package/base-files/files/etc/init.d/boot
@@ -60,6 +60,10 @@ start() {
 	rm -f /tmp/wireless.tmp
 
 	apply_uci_config
+	
+	# temporary hack until configd exists
+	/sbin/reload_config
+	
 	config_load system
 	config_foreach system_config system
 
diff --git a/package/base-files/files/etc/rc.common b/package/base-files/files/etc/rc.common
index aeec90c37c..22111895db 100755
--- a/package/base-files/files/etc/rc.common
+++ b/package/base-files/files/etc/rc.common
@@ -80,6 +80,10 @@ start_service() {
 	return 0
 }
 
+service_triggers() {
+	return 0
+}
+
 stop_service() {
 	return 0
 }
diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile
index 27879e8443..b91af98146 100644
--- a/package/system/procd/Makefile
+++ b/package/system/procd/Makefile
@@ -32,6 +32,7 @@ define Package/procd/install
 	$(INSTALL_DIR) $(1)/sbin $(1)/lib/functions $(1)/etc/init.d
 
 	$(CP) $(PKG_INSTALL_DIR)/usr/sbin/{procd,askfirst,udevtrigger,logread} $(1)/sbin/
+	$(INSTALL_BIN) ./files/reload_config $(1)/sbin/
 	$(INSTALL_BIN) ./files/log.init $(1)/etc/init.d/log
 	$(INSTALL_DATA) ./files/hotplug*.json $(1)/etc/
 	$(INSTALL_DATA) ./files/procd.sh $(1)/lib/functions/
diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
index b706b1e97d..096eb2de32 100644
--- a/package/system/procd/files/procd.sh
+++ b/package/system/procd/files/procd.sh
@@ -67,6 +67,9 @@ _procd_open_service() {
 
 _procd_close_service() {
 	json_close_object
+	_procd_open_trigger
+	service_triggers
+	_procd_close_trigger
 	_procd_ubus_call set
 }
 
diff --git a/package/system/procd/files/reload_config b/package/system/procd/files/reload_config
new file mode 100644
index 0000000000..ef8ab87e0c
--- /dev/null
+++ b/package/system/procd/files/reload_config
@@ -0,0 +1,8 @@
+#!/bin/sh
+MD5FILE=/var/run/config.md5
+[ -f $MD5FILE ] && {
+	for c in `md5sum -c $MD5FILE 2>/dev/null| grep FAILED | cut -d: -f1`; do
+		ubus call service event "{ \"type\": \"config.change\", \"data\": { \"package\": \"$(basename $c)\" }}"
+	done
+}
+md5sum /etc/config/* > $MD5FILE
-- 
2.30.2