From 98befc7667a987f85b6e457fc30560a4e572a370 Mon Sep 17 00:00:00 2001 From: liberodark Date: Mon, 22 Jun 2026 10:44:48 +0200 Subject: [PATCH 1/2] powerdns-admin: fix reset password --- ...-overwriting-password-with-empty-val.patch | 30 +++++++++++++++++++ pkgs/by-name/po/powerdns-admin/package.nix | 1 + 2 files changed, 31 insertions(+) create mode 100644 pkgs/by-name/po/powerdns-admin/0008-Fix-profile-save-overwriting-password-with-empty-val.patch diff --git a/pkgs/by-name/po/powerdns-admin/0008-Fix-profile-save-overwriting-password-with-empty-val.patch b/pkgs/by-name/po/powerdns-admin/0008-Fix-profile-save-overwriting-password-with-empty-val.patch new file mode 100644 index 000000000000..22479605cd90 --- /dev/null +++ b/pkgs/by-name/po/powerdns-admin/0008-Fix-profile-save-overwriting-password-with-empty-val.patch @@ -0,0 +1,30 @@ +diff --git a/powerdnsadmin/models/user.py b/powerdnsadmin/models/user.py +index 42f894f..f9d845e 100644 +--- a/powerdnsadmin/models/user.py ++++ b/powerdnsadmin/models/user.py +@@ -435,7 +435,7 @@ class User(db.Model): + name='Administrator').first().id + + if hasattr(self, "plain_text_password"): +- if self.plain_text_password != None: ++ if self.plain_text_password: + self.password = self.get_hashed_password( + self.plain_text_password) + else: +@@ -476,7 +476,7 @@ class User(db.Model): + + # store new password hash (only if changed) + if hasattr(self, "plain_text_password"): +- if self.plain_text_password != None: ++ if self.plain_text_password: + user.password = self.get_hashed_password( + self.plain_text_password).decode("utf-8") + +@@ -495,7 +495,7 @@ class User(db.Model): + user.lastname = self.lastname if self.lastname else user.lastname + + if hasattr(self, "plain_text_password"): +- if self.plain_text_password != None: ++ if self.plain_text_password: + user.password = self.get_hashed_password( + self.plain_text_password).decode("utf-8") diff --git a/pkgs/by-name/po/powerdns-admin/package.nix b/pkgs/by-name/po/powerdns-admin/package.nix index ad085252faba..8fed4e899f41 100644 --- a/pkgs/by-name/po/powerdns-admin/package.nix +++ b/pkgs/by-name/po/powerdns-admin/package.nix @@ -133,6 +133,7 @@ stdenv.mkDerivation { ./0004-Fix-flask-session-and-powerdns-admin-compatibility.patch ./0005-Fix-app-context-and-register-modules.patch ./0006-Fix-regex.patch + ./0008-Fix-profile-save-overwriting-password-with-empty-val.patch ]; postPatch = '' From 0ec599d5f10a41bae9757961c51253cea121a4dd Mon Sep 17 00:00:00 2001 From: liberodark Date: Mon, 29 Jun 2026 10:42:49 +0200 Subject: [PATCH 2/2] powerdns-admin: fix oidc auth --- .../po/powerdns-admin/0007-Fix-oidc.patch | 48 +++++++++++++++++++ pkgs/by-name/po/powerdns-admin/package.nix | 1 + 2 files changed, 49 insertions(+) create mode 100644 pkgs/by-name/po/powerdns-admin/0007-Fix-oidc.patch diff --git a/pkgs/by-name/po/powerdns-admin/0007-Fix-oidc.patch b/pkgs/by-name/po/powerdns-admin/0007-Fix-oidc.patch new file mode 100644 index 000000000000..39623650cd9d --- /dev/null +++ b/pkgs/by-name/po/powerdns-admin/0007-Fix-oidc.patch @@ -0,0 +1,48 @@ +diff --git a/powerdnsadmin/routes/index.py b/powerdnsadmin/routes/index.py +index 23d88bb..edfab3f 100644 +--- a/powerdnsadmin/routes/index.py ++++ b/powerdnsadmin/routes/index.py +@@ -392,11 +392,38 @@ def login(): + return authenticate_user(user, 'Azure OAuth') + + if 'oidc_token' in session: +- user_data = json.loads(oidc.get('userinfo').text) +- oidc_username = user_data[Setting().get('oidc_oauth_username')] +- oidc_first_name = user_data[Setting().get('oidc_oauth_firstname')] +- oidc_last_name = user_data[Setting().get('oidc_oauth_last_name')] +- oidc_email = user_data[Setting().get('oidc_oauth_email')] ++ try: ++ oidc_metadata = oidc.load_server_metadata() ++ except Exception as e: ++ current_app.logger.warning( ++ 'OIDC: unable to load server metadata ({}); ' ++ 'falling back to relative userinfo endpoint'.format(e)) ++ oidc_metadata = {} ++ ++ userinfo_endpoint = oidc_metadata.get('userinfo_endpoint') ++ try: ++ if userinfo_endpoint: ++ userinfo_resp = oidc.get(userinfo_endpoint, timeout=15) ++ else: ++ userinfo_resp = oidc.get('userinfo', timeout=15) ++ userinfo_resp.raise_for_status() ++ user_data = userinfo_resp.json() ++ except Exception as e: ++ current_app.logger.error('OIDC: failed to fetch userinfo: {}'.format(e)) ++ session.pop('oidc_token', None) ++ return redirect(url_for('index.login')) ++ ++ oidc_username = user_data.get(Setting().get('oidc_oauth_username')) ++ oidc_first_name = user_data.get(Setting().get('oidc_oauth_firstname'), '') ++ oidc_last_name = user_data.get(Setting().get('oidc_oauth_last_name'), '') ++ oidc_email = user_data.get(Setting().get('oidc_oauth_email'), '') ++ ++ if not oidc_username: ++ current_app.logger.error( ++ 'OIDC: username claim "{}" not present in userinfo'.format( ++ Setting().get('oidc_oauth_username'))) ++ session.pop('oidc_token', None) ++ return redirect(url_for('index.login')) + + user = User.query.filter_by(username=oidc_username).first() + if not user: diff --git a/pkgs/by-name/po/powerdns-admin/package.nix b/pkgs/by-name/po/powerdns-admin/package.nix index 8fed4e899f41..424fc71278cd 100644 --- a/pkgs/by-name/po/powerdns-admin/package.nix +++ b/pkgs/by-name/po/powerdns-admin/package.nix @@ -133,6 +133,7 @@ stdenv.mkDerivation { ./0004-Fix-flask-session-and-powerdns-admin-compatibility.patch ./0005-Fix-app-context-and-register-modules.patch ./0006-Fix-regex.patch + ./0007-Fix-oidc.patch ./0008-Fix-profile-save-overwriting-password-with-empty-val.patch ];