解决带等号的密码无法保存的问题

2017.01.03 22:56 Tue| 101 visits 问题&解决方案| Text

问题

极路由上 ShadowsockR 插件长久以来都有一个 BUG ,就是服务器密码中有等号时,保存配置刷新页面后密码无法显示。这个问题存在很久了,但一直懒得改,新的一年就拿它开刀吧!~

分析

经过测试后发现密码已经正确保存到了 uci 中,只是前端显示出了问题。分析后结论为:问题出现在使用 sed 从 uci 提取配置信息的过程中考虑不周到造成的。

错误

测试:

echo "ss-redir.6.ss_password==1=2=3=4" | sed 's/ss-redir\.\(.*\)\.\(.*\)=\(.*\)/ss_redir["\1"]["\2"]="\3";/g'

结果:

ss_redir["6"]["ss_password==1=2=3"]="4";

很明显结果是错误的,正确的结果应该是

ss_redir["6"]["ss_password"]="=1=2=3=4";

修正

修正后:

echo "ss-redir.6.ss_password==1=2=3=4" | sed 's/ss-redir\.\(.*\)\.\(.[^=]*\)=\(.*\)/ss_redir["\1"]["\2"]="\3";/g'

结果:

ss_redir["6"]["ss_password"]="=1=2=3=4";

这可能是一篇对你没什么用的解决方案,只适用于我正在维护的项目。