Stumbled on a bug in ddns-scripts where if you select web based ip detection the update variable replacement will fail because of the forward slashes in the ip_url. I also noticed that no url escaping was taking place and that could lead to other undefined or incorrect behavior. This patch adds url escaping to all replacement variables.
Signed-off-by: Eric Warnke <[email protected]> --- .../files/usr/lib/ddns/dynamic_dns_updater.sh | 3 +- net/ddns-scripts/files/usr/lib/ddns/url_escape.sed | 23 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletions(-) create mode 100644 net/ddns-scripts/files/usr/lib/ddns/url_escape.sed diff --git a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh b/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh index 62d4886..8f21a33 100755 --- a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh +++ b/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh @@ -250,7 +250,8 @@ do do replace_name=$(echo "\[$option_var\]" | tr 'a-z' 'A-Z') replace_value=$(eval echo "\$$option_var") - final_url=$(echo $final_url | sed s/"$replace_name"/"$replace_value"/g ) + replace_value=`echo $replace_value | sed -f /usr/lib/ddns/url_escape.sed` + final_url=$(echo $final_url | sed s^"$replace_name"^"$replace_value"^g ) done final_url=$(echo $final_url | sed s/"\[IP\]"/"$current_ip"/g ) diff --git a/net/ddns-scripts/files/usr/lib/ddns/url_escape.sed b/net/ddns-scripts/files/usr/lib/ddns/url_escape.sed new file mode 100644 index 0000000..eb7011b --- /dev/null +++ b/net/ddns-scripts/files/usr/lib/ddns/url_escape.sed @@ -0,0 +1,23 @@ +# sed url escaping +s: :%20:g +s:<:%3C:g +s:>:%3E:g +s:#:%23:g +s:%:%25:g +s:{:%7B:g +s:}:%7D:g +s:|:%7C:g +s:\\:%5C:g +s:\^:%5E:g +s:~:%7E:g +s:\[:%5B:g +s:\]:%5D:g +s:`:%60:g +s:;:%3B:g +s:/:%2F:g +s:?:%3F:g +s^:^%3A^g +s:@:%40:g +s:=:%3D:g +s:&:%26:g +s:\$:%24:g -- 1.5.5.6 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
