diff --git a/payload/user/remote_access/pager-webui/mk8_profiles.py b/payload/user/remote_access/pager-webui/mk8_profiles.py index b360f70..5e11ba0 100644 --- a/payload/user/remote_access/pager-webui/mk8_profiles.py +++ b/payload/user/remote_access/pager-webui/mk8_profiles.py @@ -16,7 +16,7 @@ def _path(name): """Resolve a profile name to its directory. HTTP-supplied names are never trusted: reject anything but [A-Za-z0-9._-]{1,64} and explicitly refuse '.'/'..' so traversal can never escape PROFILES_DIR.""" - if not isinstance(name, str) or not NAME_RE.match(name) \ + if not isinstance(name, str) or not NAME_RE.fullmatch(name) \ or name in ('.', '..'): raise ValueError('invalid profile name') return os.path.join(PROFILES_DIR, name) diff --git a/payload/user/remote_access/pager-webui/server.py b/payload/user/remote_access/pager-webui/server.py index a0d80e3..5de49ac 100644 --- a/payload/user/remote_access/pager-webui/server.py +++ b/payload/user/remote_access/pager-webui/server.py @@ -4899,13 +4899,15 @@ def h_profile_restore(ctx): name = (body.get('name') or '').strip() if not name: return 400, {'error': 'profile name is required'} - mk8_gate.enter('restore_profile') try: - result = mk8_profiles.restore(name) + mk8_profiles._path(name) except ValueError as exc: return 400, {'error': str(exc)} - device_run(['wifi', 'reload'], timeout=45) + mk8_gate.enter('restore_profile') + result = mk8_profiles.restore(name) ok = bool(result.get('ok')) + if ok: + device_run(['wifi', 'reload'], timeout=45) try: mk8_events.log_event('profile_restore', sev='info' if ok else 'warn', diff --git a/scripts/deploy.sh b/scripts/deploy.sh index e90da96..2df9dd1 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -247,7 +247,7 @@ chmod 755 /etc/init.d/mk8-guard i=0 HEALTH_OK='' while [ \$i -lt 60 ]; do - if curl -fsS -m 3 http://127.0.0.1:8080/api/api_ping >/dev/null 2>&1; then + if curl -fsS -m 3 http://127.0.0.1:8080/ >/dev/null 2>&1; then HEALTH_OK=1 break fi