Fix: Samba config PUT 422 + shadow:format setparm dash escaping
Route /samba/{name} was matching before /samba/config, causing 422 on
PUT /samba/config. Moved static routes before parameterized routes.
Values starting with '-' (shadow: format = -%Y-%m-%d-%H%M) were parsed
as CLI flags by net conf setparm. Added '--' separator to escape them.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+25
-25
@@ -78,6 +78,31 @@ async def create_samba_share(
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/samba/config")
|
||||
async def get_samba_config(current_user: str = Depends(get_current_user)):
|
||||
"""Get Samba global configuration"""
|
||||
try:
|
||||
config = share_manager.get_samba_global_config()
|
||||
return config
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.put("/samba/config")
|
||||
async def set_samba_config(
|
||||
request: SambaConfigRequest,
|
||||
current_user: str = Depends(get_current_user)
|
||||
):
|
||||
"""Update Samba global configuration parameters"""
|
||||
try:
|
||||
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"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.put("/samba/{name}")
|
||||
async def update_samba_share(
|
||||
name: str,
|
||||
@@ -116,31 +141,6 @@ async def delete_samba_share(
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.get("/samba/config")
|
||||
async def get_samba_config(current_user: str = Depends(get_current_user)):
|
||||
"""Get Samba global configuration"""
|
||||
try:
|
||||
config = share_manager.get_samba_global_config()
|
||||
return config
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.put("/samba/config")
|
||||
async def set_samba_config(
|
||||
request: SambaConfigRequest,
|
||||
current_user: str = Depends(get_current_user)
|
||||
):
|
||||
"""Update Samba global configuration parameters"""
|
||||
try:
|
||||
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"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/samba/config/import")
|
||||
async def import_samba_config(
|
||||
request: SambaImportRequest,
|
||||
|
||||
@@ -255,7 +255,7 @@ class SharesManager:
|
||||
try:
|
||||
for key, value in parameters.items():
|
||||
result = subprocess.run(
|
||||
['/usr/bin/net', 'conf', 'setparm', 'global', key, value],
|
||||
['/usr/bin/net', 'conf', 'setparm', 'global', key, '--', value],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10
|
||||
|
||||
Reference in New Issue
Block a user