mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 18:38:10 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			v1.0.3
			...
			v1.0.4-rc4
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | f273ec572e | ||
|   | 5fd49f6b64 | ||
|   | f3fc398eac | ||
|   | 7aea689d9a | 
							
								
								
									
										4
									
								
								feeds/wlan-ap/opensync/files/bin/wlan_ap_factory_reset.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								feeds/wlan-ap/opensync/files/bin/wlan_ap_factory_reset.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | tar czf /sysupgrade.tgz /usr/opensync/certs/ | ||||||
|  | jffs2reset -r -y -k | ||||||
| @@ -1,12 +1,47 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  |  | ||||||
| if [ $# -ne 1 ] ; then | AP_PRIVATE_KEY_FILE="/usr/opensync/certs/client_dec.key" | ||||||
| 	echo "Usage: $0 <redirector address>" >&2 | AP_CERTIFICATE_FILE="/usr/opensync/certs/client.pem" | ||||||
|  | AP_DEVICE_ID_FILE="/usr/opensync/certs/client_deviceid.txt" | ||||||
|  | DIGICERT_API_URI="clientauth.one.digicert.com" | ||||||
|  |  | ||||||
|  | if [ "$1" = "-h" ]; then | ||||||
|  |   echo "Usage: $0 [redirector address]" >&2 | ||||||
|   exit 1 |   exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| redirector_addr=$1 | # Query DigiCert's API if redirector wasn't specified | ||||||
|  | if [ -z "$1" ]; then | ||||||
|  |   if [ ! -f "$AP_DEVICE_ID_FILE" ]; then | ||||||
|  |       echo "Device ID file $AP_DEVICE_ID_FILE does not exist. Make sure to create it or specify the redirector address manually." | ||||||
|  |       exit 1 | ||||||
|  |   fi | ||||||
|  |  | ||||||
|  |   digicert_device_id=`cat ${AP_DEVICE_ID_FILE}` | ||||||
|  |   device_data=`curl -s \ | ||||||
|  |     --retry 5 \ | ||||||
|  |     --show-error \ | ||||||
|  |     --key "${AP_PRIVATE_KEY_FILE}" \ | ||||||
|  |     --cert "${AP_CERTIFICATE_FILE}" \ | ||||||
|  |     "https://${DIGICERT_API_URI}/iot/api/v2/device/${digicert_device_id}"` | ||||||
|  |  | ||||||
|  |   controller_url=`echo ${device_data} | jsonfilter -e '@.fields[@.name="Redirector"].value'` | ||||||
|  |   if [ -z "$controller_url" ]; then | ||||||
|  |     echo "No redirector found for this device" | ||||||
|  |     exit 1 | ||||||
|  |   fi | ||||||
|  |   controller_port=`echo ${controller_url} | cut -s -d ":" -f2)` | ||||||
|  |   if [ -z "$controller_port" ]; then | ||||||
|  |     redirector_addr="ssl:${controller_url}:6643" | ||||||
|  |   else | ||||||
|  |     redirector_addr="ssl:${controller_url}" | ||||||
|  |   fi | ||||||
|  | else | ||||||
|  |   redirector_addr=$1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | echo "${redirector_addr}" > /usr/opensync/certs/redirector.txt | ||||||
| uci set system.tip.redirector="${redirector_addr}" | uci set system.tip.redirector="${redirector_addr}" | ||||||
|  | uci set system.tip.deployed=0 | ||||||
| uci commit system | uci commit system | ||||||
| /etc/init.d/opensync restart | /etc/init.d/opensync restart | ||||||
|   | |||||||
| @@ -37,6 +37,20 @@ start_service() { | |||||||
|     echo "Setting certificates" |     echo "Setting certificates" | ||||||
|     mkdir -p ${CERTS_DEST_PATH} |     mkdir -p ${CERTS_DEST_PATH} | ||||||
|     cp ${CERTS_SRC_PATH}/* ${CERTS_DEST_PATH}/ |     cp ${CERTS_SRC_PATH}/* ${CERTS_DEST_PATH}/ | ||||||
|  |     echo "Checking Redirector" | ||||||
|  |     redirector=$(uci get system.tip.redirector) | ||||||
|  |     if [ -z "$redirector" ]; then | ||||||
|  |         [[ -f /usr/opensync/certs/redirector.txt ]] && redirector=$(cat /usr/opensync/certs/redirector.txt | tr -d '\r\n') | ||||||
|  |         if [ -z "$redirector" ]; then | ||||||
|  |             logger -t opensync "Contacting DigiCert for redirector address" | ||||||
|  |             wlan_ap_redirector.sh | ||||||
|  |         else | ||||||
|  |             logger -t opensync "Restoring redirector ${redirector} after factory reset" | ||||||
|  |             wlan_ap_redirector.sh ${redirector} | ||||||
|  |         fi | ||||||
|  |     fi | ||||||
|  |     [[ -f /usr/opensync/certs/redirector.txt ]] || echo "${redirector}" > /usr/opensync/certs/redirector.txt | ||||||
|  |   | ||||||
|     echo "Starting OpenSync" |     echo "Starting OpenSync" | ||||||
|     procd_set_param command ${PROG} |     procd_set_param command ${PROG} | ||||||
|     procd_close_instance |     procd_close_instance | ||||||
|   | |||||||
| @@ -291,7 +291,7 @@ static void cb_osp_start_factory_reboot(EV_P_ ev_timer *w, int events) | |||||||
| 	if (!strcmp(upg_url, "reboot")) | 	if (!strcmp(upg_url, "reboot")) | ||||||
| 		system("reboot"); | 		system("reboot"); | ||||||
| 	else | 	else | ||||||
| 		system("jffs2reset -y -r"); | 		system("wlan_ap_factory_reset.sh"); | ||||||
|  |  | ||||||
| 	upg_running = false; | 	upg_running = false; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,81 @@ | |||||||
|  | From 1f9978564420818d4ce4bdbb08fce2eca7c13d8e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Rick Sommerville <rick.sommerville@netexperience.com> | ||||||
|  | Date: Sun, 23 May 2021 14:36:03 -0400 | ||||||
|  | Subject: [PATCH] Preserve certificates and redirector over factory-reset | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  package/base-files/files/etc/rc.button/reset  |  2 +- | ||||||
|  |  .../patches/001-jffs2reset-keep-option        | 48 +++++++++++++++++++ | ||||||
|  |  2 files changed, 49 insertions(+), 1 deletion(-) | ||||||
|  |  create mode 100644 package/system/fstools/patches/001-jffs2reset-keep-option | ||||||
|  |  | ||||||
|  | diff --git a/package/base-files/files/etc/rc.button/reset b/package/base-files/files/etc/rc.button/reset | ||||||
|  | index 2403122ad2..56c0548ec9 100755 | ||||||
|  | --- a/package/base-files/files/etc/rc.button/reset | ||||||
|  | +++ b/package/base-files/files/etc/rc.button/reset | ||||||
|  | @@ -23,7 +23,7 @@ released) | ||||||
|  |  	elif [ "$SEEN" -ge 5 -a -n "$OVERLAY" ] | ||||||
|  |  	then | ||||||
|  |  		echo "FACTORY RESET" > /dev/console | ||||||
|  | -		jffs2reset -y && reboot & | ||||||
|  | +		wlan_ap_factory_reset.sh | ||||||
|  |  	fi | ||||||
|  |  ;; | ||||||
|  |  esac | ||||||
|  | diff --git a/package/system/fstools/patches/001-jffs2reset-keep-option b/package/system/fstools/patches/001-jffs2reset-keep-option | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000..50209ea276 | ||||||
|  | --- /dev/null | ||||||
|  | +++ b/package/system/fstools/patches/001-jffs2reset-keep-option | ||||||
|  | @@ -0,0 +1,48 @@ | ||||||
|  | +--- a/jffs2reset.c | ||||||
|  | ++++ b/jffs2reset.c | ||||||
|  | +@@ -40,7 +40,7 @@ ask_user(void) | ||||||
|  | + 	return 0; | ||||||
|  | + } | ||||||
|  | +  | ||||||
|  | +-static int jffs2_reset(struct volume *v, int reset) | ||||||
|  | ++static int jffs2_reset(struct volume *v, int reset, int keep) | ||||||
|  | + { | ||||||
|  | + 	char *mp; | ||||||
|  | +  | ||||||
|  | +@@ -48,7 +48,7 @@ static int jffs2_reset(struct volume *v, | ||||||
|  | + 	if (mp) { | ||||||
|  | + 		ULOG_INFO("%s is mounted as %s, only erasing files\n", v->blk, mp); | ||||||
|  | + 		fs_state_set("/overlay", FS_STATE_PENDING); | ||||||
|  | +-		overlay_delete(mp, false); | ||||||
|  | ++		overlay_delete(mp, keep); | ||||||
|  | + 		mount(mp, "/", NULL, MS_REMOUNT, 0); | ||||||
|  | + 	} else { | ||||||
|  | + 		ULOG_INFO("%s is not mounted\n", v->blk); | ||||||
|  | +@@ -93,8 +93,8 @@ static int jffs2_mark(struct volume *v) | ||||||
|  | + int main(int argc, char **argv) | ||||||
|  | + { | ||||||
|  | + 	struct volume *v; | ||||||
|  | +-	int ch, yes = 0, reset = 0; | ||||||
|  | +-	while ((ch = getopt(argc, argv, "yr")) != -1) { | ||||||
|  | ++	int ch, yes = 0, reset = 0, keep = 0; | ||||||
|  | ++	while ((ch = getopt(argc, argv, "yrk")) != -1) { | ||||||
|  | + 		switch(ch) { | ||||||
|  | + 		case 'y': | ||||||
|  | + 			yes = 1; | ||||||
|  | +@@ -102,6 +102,9 @@ int main(int argc, char **argv) | ||||||
|  | + 		case 'r': | ||||||
|  | + 			reset = 1; | ||||||
|  | + 			break; | ||||||
|  | ++                case 'k': | ||||||
|  | ++                        keep = 1; | ||||||
|  | ++                        break; | ||||||
|  | + 		} | ||||||
|  | +  | ||||||
|  | + 	} | ||||||
|  | +@@ -128,5 +131,5 @@ int main(int argc, char **argv) | ||||||
|  | + 	volume_init(v); | ||||||
|  | + 	if (!strcmp(*argv, "jffs2mark")) | ||||||
|  | + 		return jffs2_mark(v); | ||||||
|  | +-	return jffs2_reset(v, reset); | ||||||
|  | ++	return jffs2_reset(v, reset, keep); | ||||||
|  | + } | ||||||
|  | --  | ||||||
|  | 2.17.1 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user