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))
|
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}")
|
@router.put("/samba/{name}")
|
||||||
async def update_samba_share(
|
async def update_samba_share(
|
||||||
name: str,
|
name: str,
|
||||||
@@ -116,31 +141,6 @@ async def delete_samba_share(
|
|||||||
raise HTTPException(status_code=500, detail=str(e))
|
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")
|
@router.post("/samba/config/import")
|
||||||
async def import_samba_config(
|
async def import_samba_config(
|
||||||
request: SambaImportRequest,
|
request: SambaImportRequest,
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ class SharesManager:
|
|||||||
try:
|
try:
|
||||||
for key, value in parameters.items():
|
for key, value in parameters.items():
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
['/usr/bin/net', 'conf', 'setparm', 'global', key, value],
|
['/usr/bin/net', 'conf', 'setparm', 'global', key, '--', value],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
timeout=10
|
timeout=10
|
||||||
|
|||||||
Reference in New Issue
Block a user