Add editable Samba global configuration with net conf setparm

Backend:
- Use 'net conf setparm' to update individual parameters
- Accept dictionary of key-value pairs in API

Frontend:
- Add Edit/Cancel/Save buttons to Samba Config tab
- Inline editing of configuration values
- Save changes back to registry

Changes are applied immediately via net conf setparm.

Co-Authored-By: Patrick <patrick@perlbach24.de>
This commit is contained in:
2026-04-22 01:31:14 +02:00
parent dc242d5839
commit 55ae3b79ae
4 changed files with 77 additions and 39 deletions
+3 -3
View File
@@ -38,7 +38,7 @@ class CreateNFSShareRequest(BaseModel):
class SambaConfigRequest(BaseModel):
config: str
parameters: dict[str, str]
class SambaImportRequest(BaseModel):
@@ -108,9 +108,9 @@ async def set_samba_config(
request: SambaConfigRequest,
current_user: str = Depends(get_current_user)
):
"""Update Samba global configuration"""
"""Update Samba global configuration parameters"""
try:
success = share_manager.set_samba_global_config(request.config)
success = share_manager.set_samba_global_config(request.parameters)
if not success:
raise HTTPException(status_code=400, detail="Failed to update Samba configuration")
return {"status": "updated"}
+13 -34
View File
@@ -216,42 +216,21 @@ class SharesManager:
logger.error(f"Error reading Samba registry config: {e}")
return {"parameters": []}
def set_samba_global_config(self, config_text: str) -> bool:
"""Write Samba global configuration section"""
if not SAMBA_CONFIG.exists():
return False
def set_samba_global_config(self, parameters: Dict[str, str]) -> bool:
"""Update Samba global configuration parameters using 'net conf setparm'"""
try:
with open(SAMBA_CONFIG, 'r') as f:
lines = f.readlines()
for key, value in parameters.items():
result = subprocess.run(
['/usr/bin/net', 'conf', 'setparm', 'global', key, value],
capture_output=True,
text=True,
timeout=10
)
if result.returncode != 0:
logger.error(f"Failed to set {key}={value}: {result.stderr}")
return False
# Find global section and shares
output_lines = []
skip_global = False
for i, line in enumerate(lines):
if line.strip().startswith('[global]'):
skip_global = True
output_lines.append('[global]\n')
# Add config lines
for config_line in config_text.split('\n'):
if config_line.strip():
output_lines.append(' ' + config_line + '\n')
output_lines.append('\n')
continue
if skip_global:
if line.strip().startswith('['):
skip_global = False
output_lines.append(line)
continue
output_lines.append(line)
with open(SAMBA_CONFIG, 'w') as f:
f.writelines(output_lines)
subprocess.run(['smbcontrol', 'smbd', 'reload-config'], capture_output=True, timeout=10)
logger.info("Samba global config updated")
logger.info(f"Samba global config updated: {len(parameters)} parameters")
return True
except Exception as e:
logger.error(f"Error writing Samba global config: {e}")