all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Christoph Heiss <c.heiss@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v3 08/14] fix #5379: api2: access: set default realm accordingly on individual update
Date: Fri, 16 Aug 2024 13:16:40 +0200	[thread overview]
Message-ID: <20240816111648.483368-9-c.heiss@proxmox.com> (raw)
In-Reply-To: <20240816111648.483368-1-c.heiss@proxmox.com>

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Changes v2 -> v3:
  * removed early return again, which did not work as intended
  * drop unnecessary crate namespace qualification
  * also unset current default realm when creating new realm with
    `default` set

Changes v1 -> v2:
  * documented unset_default_realm()
  * added early return to unset_default_realm()

 pbs-config/src/domains.rs        | 15 +++++++++++++++
 src/api2/config/access/ad.rs     | 11 +++++++++++
 src/api2/config/access/ldap.rs   | 11 +++++++++++
 src/api2/config/access/openid.rs | 11 +++++++++++
 4 files changed, 48 insertions(+)

diff --git a/pbs-config/src/domains.rs b/pbs-config/src/domains.rs
index 32bd967a..d94d54a8 100644
--- a/pbs-config/src/domains.rs
+++ b/pbs-config/src/domains.rs
@@ -61,6 +61,21 @@ pub fn save_config(config: &SectionConfigData) -> Result<(), Error> {
     replace_backup_config(DOMAINS_CFG_FILENAME, raw.as_bytes())
 }
 
+/// Unsets the default login realm for users by deleting the `default` property
+/// from the respective realm.
+///
+/// This only updates the configuration as given in `config`, making it
+/// permanent is left to the caller.
+pub fn unset_default_realm(config: &mut SectionConfigData) -> Result<(), Error> {
+    for (_, data) in &mut config.sections.values_mut() {
+        if let Some(obj) = data.as_object_mut() {
+            obj.remove("default");
+        }
+    }
+
+    Ok(())
+}
+
 /// Check if a realm with the given name exists
 pub fn exists(domains: &SectionConfigData, realm: &str) -> bool {
     realm == "pbs" || realm == "pam" || domains.sections.contains_key(realm)
diff --git a/src/api2/config/access/ad.rs b/src/api2/config/access/ad.rs
index 4106e0f4..2afb16b8 100644
--- a/src/api2/config/access/ad.rs
+++ b/src/api2/config/access/ad.rs
@@ -91,6 +91,10 @@ pub async fn create_ad_realm(
         auth_helpers::store_ldap_bind_password(&config.realm, &password, &domain_config_lock)?;
     }
 
+    if let Some(true) = config.default {
+        domains::unset_default_realm(&mut domains)?;
+    }
+
     domains.set_data(&config.realm, "ad", &config)?;
 
     domains::save_config(&domains)?;
@@ -278,6 +282,13 @@ pub async fn update_ad_realm(
         }
     }
 
+    if let Some(true) = update.default {
+        domains::unset_default_realm(&mut domains)?;
+        config.default = Some(true);
+    } else {
+        config.default = None;
+    }
+
     if let Some(mode) = update.mode {
         config.mode = Some(mode);
     }
diff --git a/src/api2/config/access/ldap.rs b/src/api2/config/access/ldap.rs
index 7dcf7990..6a93ece2 100644
--- a/src/api2/config/access/ldap.rs
+++ b/src/api2/config/access/ldap.rs
@@ -81,6 +81,10 @@ pub fn create_ldap_realm(config: LdapRealmConfig, password: Option<String>) -> R
         auth_helpers::store_ldap_bind_password(&config.realm, &password, &domain_config_lock)?;
     }
 
+    if let Some(true) = config.default {
+        domains::unset_default_realm(&mut domains)?;
+    }
+
     domains.set_data(&config.realm, "ldap", &config)?;
 
     domains::save_config(&domains)?;
@@ -317,6 +321,13 @@ pub fn update_ldap_realm(
         }
     }
 
+    if let Some(true) = update.default {
+        domains::unset_default_realm(&mut domains)?;
+        config.default = Some(true);
+    } else {
+        config.default = None;
+    }
+
     if let Some(mode) = update.mode {
         config.mode = Some(mode);
     }
diff --git a/src/api2/config/access/openid.rs b/src/api2/config/access/openid.rs
index 2fbcd1b1..5b767fcc 100644
--- a/src/api2/config/access/openid.rs
+++ b/src/api2/config/access/openid.rs
@@ -65,6 +65,10 @@ pub fn create_openid_realm(config: OpenIdRealmConfig) -> Result<(), Error> {
         param_bail!("realm", "realm '{}' already exists.", config.realm);
     }
 
+    if let Some(true) = config.default {
+        domains::unset_default_realm(&mut domains)?;
+    }
+
     domains.set_data(&config.realm, "openid", &config)?;
 
     domains::save_config(&domains)?;
@@ -247,6 +251,13 @@ pub fn update_openid_realm(
         }
     }
 
+    if let Some(true) = update.default {
+        domains::unset_default_realm(&mut domains)?;
+        config.default = Some(true);
+    } else {
+        config.default = None;
+    }
+
     if let Some(issuer_url) = update.issuer_url {
         config.issuer_url = issuer_url;
     }
-- 
2.45.2



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel


  parent reply	other threads:[~2024-08-16 11:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-16 11:16 [pbs-devel] [PATCH proxmox-backup/pwt v3 00/14] fix #5379: introduce default auth realm option Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 01/14] window: AuthEditBase: include more information in thrown errors Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 02/14] panel: AuthView: make `useTypeInUrl` property per-realm Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 03/14] window: add panel for editing simple, built-in realms Christoph Heiss
2024-08-16 12:23   ` Gabriel Goller
2024-08-16 12:50     ` Christoph Heiss
2024-08-19 14:18   ` Hannes Laimer
2024-08-22 15:19     ` Christoph Heiss
2024-08-23  6:41       ` Hannes Laimer
2024-08-23 10:23         ` Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 04/14] schema: make PAM realm editable using new AuthSimple panel Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 05/14] fix #5379: panel: AuthView: add column displaying whether the realm is default Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH widget-toolkit v3 06/14] fix #5379: window: AuthEdit{LDAP, OpenId}: add 'Default realm' checkbox Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 07/14] fix #5379: api-types: add `default` field to all realm types Christoph Heiss
2024-08-16 11:16 ` Christoph Heiss [this message]
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 09/14] api-types: introduce proper types for PAM and PBS realms Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 10/14] config: use new dedicated PAM and PBS realm types Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 11/14] api2: access: add update support for built-in PAM realm Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 12/14] api2: access: add update support for built-in PBS realm Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 13/14] www: AccessControl: make `useTypeInUrl` property per-realm Christoph Heiss
2024-08-16 11:16 ` [pbs-devel] [PATCH proxmox-backup v3 14/14] www: utils: make built-in pbs realm editable using new AuthSimplePanel Christoph Heiss
2024-08-19 14:19 ` [pbs-devel] [PATCH proxmox-backup/pwt v3 00/14] fix #5379: introduce default auth realm option Hannes Laimer
2024-08-23 11:45 ` Christoph Heiss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240816111648.483368-9-c.heiss@proxmox.com \
    --to=c.heiss@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal