rustdesk/rustdesk · error

Changing permanent password is disabled

Error message

Changing permanent password is disabled

What it means

set_permanent_password first checks Config::is_disable_change_permanent_password(). When the deployment has disabled changing the permanent password (an admin/policy option), the call bails immediately with 'Changing permanent password is disabled' before any IPC to the daemon happens. This is a deliberate policy gate, not a transient failure.

Source

Thrown at src/ipc.rs:1700

}

pub fn is_permanent_password_preset() -> bool {
    if let Ok(Some(v)) = get_config("permanent-password-is-preset") {
        let v = v.trim();
        return v == "Y";
    }
    false
}

pub fn get_fingerprint() -> String {
    get_config("fingerprint")
        .unwrap_or_default()
        .unwrap_or_default()
}

pub fn set_permanent_password(v: String) -> ResultType<()> {
    if Config::is_disable_change_permanent_password() {
        bail!("Changing permanent password is disabled");
    }
    if set_permanent_password_with_ack(v)? {
        Ok(())
    } else {
        bail!("Changing permanent password was rejected by daemon");
    }
}

#[tokio::main(flavor = "current_thread")]
pub async fn set_permanent_password_with_ack(v: String) -> ResultType<bool> {
    set_permanent_password_with_ack_async(v).await
}

async fn set_permanent_password_with_ack_async(v: String) -> ResultType<bool> {
    // The daemon ACK/NACK is expected quickly since it applies the config in-process.
    let ms_timeout = 1_000;
    let mut c = connect(ms_timeout, "").await?;
    c.send_config("permanent-password", v).await?;

View on GitHub (pinned to 91c9fccbb0)

Solutions

  1. Ask the administrator to disable the 'disable changing permanent password' policy if the change is legitimate.
  2. Verify the setting with the security/options configuration and clear it locally if you control the machine.
  3. Use an alternative credential mechanism not blocked by the policy (e.g. unlock PIN) where allowed.
  4. If you build custom clients, enable the password-change option in the build configuration.
Defensive patterns

Strategy: try-catch

Try / catch

match set_permanent_password(pwd) {
    Err(e) if e.to_string().contains("disabled") => {
        eprintln!("password change is locked by policy; contact your admin");
    }
    other => other?,
}

Prevention

When it happens

Trigger: Calling set_permanent_password (CLI --password or IPC) on an installation where the 'disable changing permanent password' security option / managed policy is enabled.

Common situations: Managed/corporate RustDesk deployments where admins lock the password policy; a local config option flipped by a previous run or custom client build; kiosk setups where credentials are fixed centrally.

Related errors


AI-assisted analysis of rustdesk/rustdesk@91c9fccbb0 (2026-09-10). Data as JSON: /api/errors/e4a5546a8f1ac77b. Report an issue: GitHub.