diff --git a/app.py b/app.py index 9cc6d04..84084f7 100644 --- a/app.py +++ b/app.py @@ -142,8 +142,13 @@ def add_smb_share(name, path, valid_users): # ===== NFS ===== +_DISABLED_PREFIX = '## ' # marker MicroNAS uses for disabled exports + + def _parse_exports(): - """Parse /etc/exports preserving blanks, comments, and disabled (commented-out) exports.""" + """Parse /etc/exports. Only lines starting with '## /' are treated as + disabled exports — everything else that starts with '#' is a plain comment + and is left untouched.""" entries = [] try: with open('/etc/exports', 'r') as f: @@ -152,14 +157,14 @@ def _parse_exports(): if not stripped: entries.append({'kind': 'blank', 'raw': raw}) continue + if stripped.startswith(_DISABLED_PREFIX + '/'): + inner = stripped[len(_DISABLED_PREFIX):] + parts = inner.split(None, 1) + entries.append({'kind': 'export', 'enabled': False, + 'path': parts[0], 'rest': parts[1] if len(parts) > 1 else ''}) + continue if stripped.startswith('#'): - inner = stripped[1:].strip() - if inner.startswith('/'): - parts = inner.split(None, 1) - entries.append({'kind': 'export', 'enabled': False, - 'path': parts[0], 'rest': parts[1] if len(parts) > 1 else ''}) - else: - entries.append({'kind': 'comment', 'raw': raw}) + entries.append({'kind': 'comment', 'raw': raw}) continue parts = stripped.split(None, 1) entries.append({'kind': 'export', 'enabled': True, @@ -173,7 +178,7 @@ def _write_exports(entries): with open('/etc/exports', 'w') as f: for e in entries: if e['kind'] == 'export': - prefix = '' if e['enabled'] else '#' + prefix = '' if e['enabled'] else _DISABLED_PREFIX rest = f'\t{e["rest"]}' if e['rest'] else '' f.write(f'{prefix}{e["path"]}{rest}\n') else: