Skip to content

Commit

Permalink
Merge pull request #271771 from NixOS/backport-271441-to-release-23.11
Browse files Browse the repository at this point in the history
  • Loading branch information
Janik-Haag authored Dec 2, 2023
2 parents 81083a1 + c3811eb commit fb3d047
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 25 deletions.
57 changes: 35 additions & 22 deletions nixos/modules/config/mysql.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ let
cfg = config.users.mysql;
in
{
meta.maintainers = [ maintainers.netali ];

options = {
users.mysql = {
enable = mkEnableOption (lib.mdDoc "Authentication against a MySQL/MariaDB database");
Expand Down Expand Up @@ -358,7 +360,7 @@ in
user = "root";
group = "root";
mode = "0600";
# password will be added from password file in activation script
# password will be added from password file in systemd oneshot
text = ''
users.host=${cfg.host}
users.db_user=${cfg.user}
Expand Down Expand Up @@ -423,34 +425,45 @@ in
mode = "0600";
user = config.services.nscd.user;
group = config.services.nscd.group;
# password will be added from password file in activation script
# password will be added from password file in systemd oneshot
text = ''
username ${cfg.user}
'';
};

# preStart script to append the password from the password file
# to the configuration files. It also fixes the owner of the
# libnss-mysql-root.cfg because it is changed to root after the
# password is appended.
systemd.services.mysql.preStart = ''
if [[ -r ${cfg.passwordFile} ]]; then
org_umask=$(umask)
umask 0077
systemd.services.mysql-auth-pw-init = {
description = "Adds the mysql password to the mysql auth config files";

before = [ "nscd.service" ];
wantedBy = [ "multi-user.target" ];

serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
};

conf_nss="$(mktemp)"
cp /etc/libnss-mysql-root.cfg $conf_nss
printf 'password %s\n' "$(cat ${cfg.passwordFile})" >> $conf_nss
mv -fT "$conf_nss" /etc/libnss-mysql-root.cfg
chown ${config.services.nscd.user}:${config.services.nscd.group} /etc/libnss-mysql-root.cfg
restartTriggers = [
config.environment.etc."security/pam_mysql.conf".source
config.environment.etc."libnss-mysql.cfg".source
config.environment.etc."libnss-mysql-root.cfg".source
];

conf_pam="$(mktemp)"
cp /etc/security/pam_mysql.conf $conf_pam
printf 'users.db_passwd=%s\n' "$(cat ${cfg.passwordFile})" >> $conf_pam
mv -fT "$conf_pam" /etc/security/pam_mysql.conf
script = ''
if [[ -r ${cfg.passwordFile} ]]; then
umask 0077
conf_nss="$(mktemp)"
cp /etc/libnss-mysql-root.cfg $conf_nss
printf 'password %s\n' "$(cat ${cfg.passwordFile})" >> $conf_nss
mv -fT "$conf_nss" /etc/libnss-mysql-root.cfg
chown ${config.services.nscd.user}:${config.services.nscd.group} /etc/libnss-mysql-root.cfg
umask $org_umask
fi
'';
conf_pam="$(mktemp)"
cp /etc/security/pam_mysql.conf $conf_pam
printf 'users.db_passwd=%s\n' "$(cat ${cfg.passwordFile})" >> $conf_pam
mv -fT "$conf_pam" /etc/security/pam_mysql.conf
fi
'';
};
};
}
3 changes: 2 additions & 1 deletion nixos/tests/auth-mysql.nix
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ in
getpwuid = ''
SELECT name, 'x', uid, gid, name, CONCAT('/home/', name), "/run/current-system/sw/bin/bash" \
FROM users \
WHERE id=%1$u \
WHERE uid=%1$u \
LIMIT 1
'';
getspnam = ''
Expand Down Expand Up @@ -140,6 +140,7 @@ in
machine.wait_for_unit("multi-user.target")
machine.wait_for_unit("mysql.service")
machine.wait_until_succeeds("cat /etc/security/pam_mysql.conf | grep users.db_passwd")
machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
with subtest("Local login"):
Expand Down
13 changes: 12 additions & 1 deletion pkgs/os-specific/linux/libnss-mysql/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, which, libmysqlclient }:
{ lib
, nixosTests
, stdenv
, fetchFromGitHub
, autoreconfHook
, which
, libmysqlclient
}:

stdenv.mkDerivation rec {
pname = "libnss-mysql";
Expand All @@ -20,6 +27,10 @@ stdenv.mkDerivation rec {
rm -r $out/etc
'';

passthru.tests = {
inherit (nixosTests) auth-mysql;
};

meta = with lib; {
description = "MySQL module for the Solaris Nameservice Switch (NSS)";
homepage = "https://github.com/saknopper/libnss-mysql";
Expand Down
17 changes: 16 additions & 1 deletion pkgs/os-specific/linux/pam_mysql/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
{ lib, stdenv, fetchFromGitHub, meson, ninja, pam, pkg-config, libmysqlclient, mariadb, libxcrypt }:
{ lib
, nixosTests
, stdenv
, fetchFromGitHub
, meson
, ninja
, pam
, pkg-config
, libmysqlclient
, mariadb
, libxcrypt
}:

stdenv.mkDerivation rec {
pname = "pam_mysql";
Expand All @@ -14,6 +25,10 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ meson pkg-config ninja ];
buildInputs = [ pam libmysqlclient mariadb libxcrypt ];

passthru.tests = {
inherit (nixosTests) auth-mysql;
};

meta = with lib; {
description = "PAM authentication module against a MySQL database";
homepage = "https://github.com/NigelCunningham/pam-MySQL";
Expand Down

0 comments on commit fb3d047

Please sign in to comment.