From a44e9fd81963935ceb8fe7fde20c0da0c7c37de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Sat, 18 Jul 2026 13:59:15 -0300 Subject: [PATCH] refactor(kea): centralize service account lookup --- perl-xCAT/xCAT/DHCP/Backend/Kea.pm | 31 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/perl-xCAT/xCAT/DHCP/Backend/Kea.pm b/perl-xCAT/xCAT/DHCP/Backend/Kea.pm index ec8ea26e6..2525ae7d3 100644 --- a/perl-xCAT/xCAT/DHCP/Backend/Kea.pm +++ b/perl-xCAT/xCAT/DHCP/Backend/Kea.pm @@ -17,6 +17,7 @@ my %KEA_SERVICE_CANDIDATES = ( 'kea-dhcp-ddns' => [ 'kea-dhcp-ddns', 'kea-dhcp-ddns-server' ], 'kea-ctrl-agent' => [ 'kea-ctrl-agent' ], ); +my @KEA_ACCOUNT_CANDIDATES = ( 'kea', '_kea' ); sub new { my ( $class, %args ) = @_; @@ -57,6 +58,19 @@ sub control_socket_path { return $self->_kea_socket_dir() . "/$socket_name"; } +sub service_account { + foreach my $user (@KEA_ACCOUNT_CANDIDATES) { + my @entry = getpwnam($user); + return { + name => $entry[0], + uid => $entry[2], + gid => $entry[3], + } if @entry; + } + + return; +} + sub render_dhcp4_config { my ( $self, $intent ) = @_; @@ -485,12 +499,12 @@ sub _validate_config_with { my $prefix = ''; if ( $> == 0 ) { - my $kea_user = _kea_user(); + my $service_account = $self->service_account(); my $runuser = _command_path('runuser'); # Validate as the daemon user when possible so root does not hide # packaged Kea runtime-directory or config-readability failures. - $prefix = _shell_quote($runuser) . ' -u ' . _shell_quote($kea_user) . ' -- ' - if $kea_user && $runuser; + $prefix = _shell_quote($runuser) . ' -u ' . _shell_quote( $service_account->{name} ) . ' -- ' + if $service_account && $runuser; } my $cmd = $prefix . _shell_quote($kea) . " -t " . _shell_quote($path) . " 2>&1"; @@ -998,7 +1012,7 @@ sub _set_config_permissions { } sub _kea_group { - foreach my $group ( 'kea', '_kea' ) { + foreach my $group (@KEA_ACCOUNT_CANDIDATES) { my @entry = getgrnam($group); return ( $entry[0], $entry[2] ) if @entry; } @@ -1006,15 +1020,6 @@ sub _kea_group { return; } -sub _kea_user { - foreach my $user ( 'kea', '_kea' ) { - my @entry = getpwnam($user); - return $entry[0] if @entry; - } - - return; -} - sub _kea_service { my ( $self, $service ) = @_;