Skip to content

create_folder() fails with error 3300 on DSM 7.3.2 #359

@johntrandall

Description

@johntrandall

Environment

Component Version
DSM 7.3.2-86009 Update 3
synology-api 0.8.2 (PyPI latest)
Python 3.14
NAS Model DS1821+

Description

Share.create_folder() returns error 3300 when called against DSM 7.3.2-86009 Update 3. All read operations (list_folders, get) work correctly — only create is affected.

Steps to Reproduce

from synology_api.core_share import Share

share = Share(
    ip_address="mynas.local",
    port="5001",
    username="myadmin",
    password="mypassword",
    secure=True,
    cert_verify=False,
    dsm_version=7
)

# Works fine:
result = share.list_folders()  # success

# Fails with error 3300:
result = share.create_folder(name="TestShare", vol_path="/volume1")
# CoreError: Error 3300 - <Undefined.SYNO.Core.Share.Error>

Error Output

Both HTTPS (plaintext params) and HTTP (Noise protocol encryption) return error 3300:

Transport Encryption User Error
HTTPS Plaintext (skips encryption) admin 3300
HTTP Noise protocol encrypted admin 3300
HTTPS Plaintext non-admin 3300

Both admin and non-admin users in the administrators group fail identically.

Root Cause Analysis

DSM 7.3.2 changed SYNO.Core.Share.create to require a different encryption/parameter format. Capturing the DSM web UI's XHR request reveals:

  1. The shareinfo parameter must be encrypted inside __cIpHeRtExT using RSA+AES hybrid encryption — the Noise protocol encryption from encrypt_params() is rejected
  2. The name parameter must be JSON-quoted (API info returns requestFormat: "JSON")
  3. A new X-SYNO-HASH header is present in web UI requests (not generated by synology-api)

The web UI request succeeds — the share is created and verifiable via SYNO.Core.Share.get. The library's encrypt_params() produces __cIpHeRtExT output, but DSM 7.3.2 rejects it — possibly due to the missing X-SYNO-HASH integrity header or an encryption scheme change.

Each variable was tested in isolation (auth session type, SynoToken, user privilege, HTTP vs HTTPS). The parameter encryption format is the sole differentiator.

Related Issues

Workaround

SSH: sudo synoshare --add "ShareName" "" "/volume1/ShareName" "" "" "" 1 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions