From 3f0bfdec09de6d23bf899e94f00febf96ac4c7e2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 21 Sep 2026 23:46:31 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=90=20Sync=202026-09-21=2023:46:31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- my-default-settings/Makefile | 2 +- my-default-settings/files/sbin/mywifi | 100 +++++++++++++------------- 2 files changed, 50 insertions(+), 52 deletions(-) diff --git a/my-default-settings/Makefile b/my-default-settings/Makefile index ef98f4976..951a32bc7 100644 --- a/my-default-settings/Makefile +++ b/my-default-settings/Makefile @@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=my-default-settings PKG_VERSION:=2 -PKG_RELEASE:=19 +PKG_RELEASE:=20 include $(INCLUDE_DIR)/package.mk diff --git a/my-default-settings/files/sbin/mywifi b/my-default-settings/files/sbin/mywifi index 55aa57086..d6e9b9073 100644 --- a/my-default-settings/files/sbin/mywifi +++ b/my-default-settings/files/sbin/mywifi @@ -7,49 +7,35 @@ show_help() { cat << 'EOF_HELP' 用法: - mywifi [选项] [WiFi名称] [WiFi密码] - -参数: - WiFi名称 基础SSID名称(缺省时自动使用系统 hostname) - WiFi密码 无线密码(缺省或未指定时默认无密码,指定时需 8-63 位) + mywifi [选项] 选项: - -s, --ssid <名称> 指定基础WiFi名称 - -p, --password <密码> 指定WiFi密码 - -f, --force 强制重新执行(忽略 wifi=1 已配置检查) + -s, --ssid <名称> 指定基础WiFi名称(未指定时默认使用系统 hostname) + -p, --password <密码> 指定WiFi密码(未指定时默认无密码/开放网络,需 8-63 位) + -f, --force 强制重新执行配置(忽略 wifi=1 已配置检查) -h, --help 查看帮助信息 -并发与等待机制: - - 无参/热插拔调用时:若已有 mywifi 在执行,直接终止退出; - - 带 -f 或用户传参调用时:若已有 mywifi 在执行,自动排队等待其执行完成后再继续执行。 - -WiFi命名规范: - 2.4 GHz -> _2.4G - 5 GHz -> _5G - 6 GHz -> _6G +说明: + - 必须通过 -s 和 -p 传递 WiFi 名称与密码,不接收位置参数。 + - 命名规范: _2.4G / _5G / _6G 使用示例: - mywifi # 默认执行(使用 hostname,若已配置或正在执行则自动终止) + mywifi # 默认执行(使用 hostname,无密码) mywifi -f # 强制重新按 hostname 恢复默认配置 - mywifi "HomeWiFi" "12345678" # 设置指定 WiFi 名及密码 - mywifi -f "HomeWiFi" "12345678" # 强制覆盖设置 + mywifi -s "HomeWiFi" # 仅指定 WiFi 名称,默认无密码 + mywifi -s "HomeWiFi" -p "12345678" # 指定 WiFi 名称和密码 + mywifi -f -s "HomeWiFi" -p "12345678" # 强制覆盖配置 EOF_HELP } # ------------------------------------------------------------- -# 1. 命令行参数解析(过滤 OpenWrt Hotplug 热插拔系统事件传参) +# 1. 严格参数解析(仅允许 -s, -p, -f, -h,彻底忽略所有裸位置参数) # ------------------------------------------------------------- CUSTOM_SSID="" CUSTOM_PASSWD="" HAS_PASSWD=0 FORCE=0 -# 判断是否是由系统 Hotplug 热插拔机制触发调用 -is_hotplug=0 -if [ -n "$HOTPLUG_TYPE" ] || [ -n "$ACTION" ] || [ -n "$DEVICENAME" ]; then - is_hotplug=1 -fi - while [ $# -gt 0 ]; do case "$1" in -h|--help) @@ -60,41 +46,41 @@ while [ $# -gt 0 ]; do FORCE=1 ;; -s|--ssid) - shift - CUSTOM_SSID="$1" + # 仅当后一个参数存在且不是以 '-' 开头的其他选项时,才提取为 SSID + if [ $# -ge 2 ] && [ "${2#-}" = "$2" ]; then + shift + CUSTOM_SSID="$1" + else + CUSTOM_SSID="" + fi ;; -p|--password) - shift - CUSTOM_PASSWD="$1" - HAS_PASSWD=1 - ;; - ieee80211|net|button|platform|usb|add|remove|bind|unbind) - # 过滤热插拔事件传参,避免将热插拔子系统名称(如 ieee80211)误当作 WiFi SSID - is_hotplug=1 + # 仅当后一个参数存在且不是以 '-' 开头的其他选项时,才提取为密码 + if [ $# -ge 2 ] && [ "${2#-}" = "$2" ]; then + shift + CUSTOM_PASSWD="$1" + HAS_PASSWD=1 + else + # 若 -p 后面未跟密码值,安全处理为“无密码开放网络” + CUSTOM_PASSWD="" + HAS_PASSWD=0 + fi ;; *) - # 仅在非系统热插拔事件传参时才接收位置参数 - if [ $is_hotplug -eq 0 ]; then - if [ -z "$CUSTOM_SSID" ]; then - CUSTOM_SSID="$1" - elif [ $HAS_PASSWD -eq 0 ]; then - CUSTOM_PASSWD="$1" - HAS_PASSWD=1 - fi - fi + # 忽略所有非选项参数 ;; esac shift done -# 判断是否需要等待锁(带 -f 或传了有效自定义参数时排队等待,无参/热插拔直接退出) +# 判断是否需要等待锁(带 -f 或传了 -s / -p 则排队等待,无参直接退出) WAIT_LOCK=0 if [ $FORCE -eq 1 ] || [ -n "$CUSTOM_SSID" ] || [ $HAS_PASSWD -eq 1 ]; then WAIT_LOCK=1 fi # ------------------------------------------------------------- -# 2. 检查 base_config 状态标记(无参且已配置过 wifi=1 时,直接终止) +# 2. 检查 base_config 状态标记(无参且已配置过 wifi=1 时直接退出) # ------------------------------------------------------------- if [ $FORCE -eq 0 ]; then if [ "$(uci -q get base_config.@status[0].wifi 2>/dev/null)" = "1" ]; then @@ -172,7 +158,7 @@ acquire_lock() { acquire_lock # ------------------------------------------------------------- -# 4. 密码长度合法性校验(若指定了密码) +# 4. 密码长度合法性校验(若通过 -p 指定了密码) # ------------------------------------------------------------- if [ $HAS_PASSWD -eq 1 ] && [ -n "$CUSTOM_PASSWD" ]; then pwd_len=${#CUSTOM_PASSWD} @@ -281,16 +267,28 @@ detect_band() { } # ------------------------------------------------------------- -# 7. 配置 SSID 与各频段接口 +# 7. 严格解析真实 Hostname 并确定基础 SSID # ------------------------------------------------------------- [ -f /etc/openwrt_release ] && . /etc/openwrt_release +get_real_hostname() { + local h="" + + # 1. 优先从 UCI system 配置中提取 + h="$(uci -q get system.@system[0].hostname 2>/dev/null)" + + # 2. 回退:固件默认名称 (Kwrt) + if [ -z "$h" ] || [ "$h" = "ieee80211" ] || [ "$h" = "(none)" ] || [ "$h" = "OpenWrt" ]; then + h="Kwrt" + fi + + echo "$h" +} + if [ -n "$CUSTOM_SSID" ]; then SSID="$CUSTOM_SSID" else - SSID="$(uci -q get system.@system[0].hostname 2>/dev/null)" - [ -z "$SSID" ] && [ -r /proc/sys/kernel/hostname ] && SSID="$(cat /proc/sys/kernel/hostname)" - [ -z "$SSID" ] && SSID="Kwrt" + SSID="$(get_real_hostname)" fi sed -i '/option disabled/d' /etc/config/wireless 2>/dev/null