From 850fe67785c32c4460cc7d0840ce032190c25747 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Fri, 22 Nov 2002 19:36:40 +0000 Subject: [PATCH] Add basic support for SlurmUser configuration parameter. --- src/api/config_info.c | 3 +++ src/api/free_msg.c | 2 ++ src/api/slurm.h | 2 ++ src/common/read_config.c | 29 +++++++++++++++++++++++++---- src/common/slurm_protocol_pack.c | 5 +++++ src/slurmctld/controller.c | 7 +++++++ 6 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/api/config_info.c b/src/api/config_info.c index 0f795439bb8..2dcf8ccc41e 100644 --- a/src/api/config_info.c +++ b/src/api/config_info.c @@ -76,6 +76,9 @@ void slurm_print_ctl_conf ( FILE* out, slurm_ctl_conf_ptr->prolog); fprintf(out, "ReturnToService = %u\n", slurm_ctl_conf_ptr->ret2service); + fprintf(out, "SlurmUser = %s(%u)\n", + slurm_ctl_conf_ptr->slurm_user_name, + slurm_ctl_conf_ptr->slurm_user_id); fprintf(out, "SlurmctldLogFile = %s\n", slurm_ctl_conf_ptr->slurmctld_logfile); fprintf(out, "SlurmctldTimeout = %u\n", diff --git a/src/api/free_msg.c b/src/api/free_msg.c index 5527c598e92..350fc5f2154 100644 --- a/src/api/free_msg.c +++ b/src/api/free_msg.c @@ -157,6 +157,8 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr) xfree(config_ptr->prioritize); if (config_ptr->prolog) xfree(config_ptr->prolog); + if (config_ptr->slurm_user_name) + xfree(config_ptr->slurm_user_name); if (config_ptr->slurmctld_logfile) xfree(config_ptr->slurmctld_logfile); if (config_ptr->slurmd_logfile) diff --git a/src/api/slurm.h b/src/api/slurm.h index 4f106b92037..cefec3ac696 100644 --- a/src/api/slurm.h +++ b/src/api/slurm.h @@ -343,6 +343,8 @@ typedef struct slurm_ctl_conf { char *prolog; /* pathname of job prolog */ uint16_t ret2service; /* 1 return DOWN node to service at * registration */ + uint16_t slurm_user_id; /* uid of slurm_user_name */ + char *slurm_user_name; /* user that slurmctld runs as */ char *slurmctld_logfile;/* where slurmctld error log gets written */ uint32_t slurmctld_port;/* default communications port to slurmctld */ uint16_t slurmctld_timeout;/* seconds that backup controller waits diff --git a/src/common/read_config.c b/src/common/read_config.c index 8a6b8575375..cc382d1fdce 100644 --- a/src/common/read_config.c +++ b/src/common/read_config.c @@ -32,6 +32,7 @@ #include <ctype.h> #include <errno.h> #include <netdb.h> +#include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -85,6 +86,8 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr) FREE_NULL (ctl_conf_ptr->prolog); ctl_conf_ptr->ret2service = (uint16_t) NO_VAL; FREE_NULL (ctl_conf_ptr->slurmctld_logfile); + ctl_conf_ptr->slurm_user_id = (uint16_t) NO_VAL; + FREE_NULL (ctl_conf_ptr->slurm_user_name); ctl_conf_ptr->slurmctld_port = (uint32_t) NO_VAL; ctl_conf_ptr->slurmctld_timeout = (uint16_t) NO_VAL; FREE_NULL (ctl_conf_ptr->slurmd_logfile); @@ -124,6 +127,7 @@ parse_config_spec (char *in_line, slurm_ctl_conf_t *ctl_conf_ptr) char *control_addr = NULL, *control_machine = NULL, *epilog = NULL; char *prioritize = NULL, *prolog = NULL; char *state_save_location = NULL, *tmp_fs = NULL; + char *slurm_user = NULL; char *slurmctld_logfile = NULL, *slurmctld_port = NULL; char *slurmd_logfile = NULL, *slurmd_port = NULL; char *slurmd_spooldir = NULL, *slurmd_pidfile = NULL; @@ -143,23 +147,24 @@ parse_config_spec (char *in_line, slurm_ctl_conf_t *ctl_conf_ptr) "HashBase=", 'd', &hash_base, "HeartbeatInterval=", 'd', &heartbeat_interval, "InactiveLimit=", 'd', &inactive_limit, + "JobCredentialPrivateKey=", 's', &job_credential_private_key, + "JobCredentialPublicCertificate=", 's', + &job_credential_public_certificate, "KillWait=", 'd', &kill_wait, "Prioritize=", 's', &prioritize, "Prolog=", 's', &prolog, "ReturnToService=", 'd', &ret2service, + "SlurmUser=", 's', &slurm_user, "SlurmctldLogFile=", 's', &slurmctld_logfile, "SlurmctldPort=", 's', &slurmctld_port, "SlurmctldTimeout=", 'd', &slurmctld_timeout, "SlurmdLogFile=", 's', &slurmd_logfile, + "SlurmdPidFile=", 's', &slurmd_pidfile, "SlurmdPort=", 's', &slurmd_port, "SlurmdSpoolDir=", 's', &slurmd_spooldir, - "SlurmdPidFile=", 's', &slurmd_pidfile, "SlurmdTimeout=", 'd', &slurmd_timeout, "StateSaveLocation=", 's', &state_save_location, "TmpFS=", 's', &tmp_fs, - "JobCredentialPrivateKey=", 's', &job_credential_private_key, - "JobCredentialPublicCertificate=", 's', - &job_credential_public_certificate, "END"); if (error_code) @@ -263,6 +268,22 @@ parse_config_spec (char *in_line, slurm_ctl_conf_t *ctl_conf_ptr) ctl_conf_ptr->ret2service = ret2service; } + if ( slurm_user ) { + struct passwd *slurm_passwd; + slurm_passwd = getpwnam(slurm_user); + if (slurm_passwd == NULL) { + error ("Invalid user for SlurmUser %s, ignored", + slurm_user); + } else { + if ( ctl_conf_ptr->slurm_user_name ) { + error (MULTIPLE_VALUE_MSG, "SlurmUser"); + xfree (ctl_conf_ptr->slurm_user_name); + } + ctl_conf_ptr->slurm_user_name = slurm_user; + ctl_conf_ptr->slurm_user_id = slurm_passwd->pw_uid; + } + } + if ( slurmctld_logfile ) { if ( ctl_conf_ptr->slurmctld_logfile ) { error (MULTIPLE_VALUE_MSG, "SlurmctldLogFile"); diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index fd5d2d91413..7754d454290 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -1580,6 +1580,8 @@ static void _pack_slurm_ctl_conf_msg ( packstr (build_ptr->prioritize, buffer); packstr (build_ptr->prolog, buffer); pack16 (build_ptr->ret2service, buffer); + pack16 (build_ptr->slurm_user_id, buffer); + packstr (build_ptr->slurm_user_name, buffer); packstr (build_ptr->slurmctld_logfile, buffer); pack16 (build_ptr->slurmctld_timeout, buffer); packstr (build_ptr->slurmd_logfile, buffer); @@ -1625,6 +1627,9 @@ static int _unpack_slurm_ctl_conf_msg ( safe_unpackstr_xmalloc (&build_ptr->prolog, &uint16_tmp, buffer); safe_unpack16 (&build_ptr->ret2service, buffer); + safe_unpack16 (&build_ptr->slurm_user_id, buffer); + safe_unpackstr_xmalloc (&build_ptr->slurm_user_name, + &uint16_tmp, buffer); safe_unpackstr_xmalloc (&build_ptr->slurmctld_logfile, &uint16_tmp, buffer); safe_unpack16 (&build_ptr->slurmctld_timeout, buffer); diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c index 0bd6debd3da..1d6c17910be 100644 --- a/src/slurmctld/controller.c +++ b/src/slurmctld/controller.c @@ -1980,15 +1980,22 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr) conf_ptr->hash_base = slurmctld_conf.hash_base; conf_ptr->heartbeat_interval = slurmctld_conf.heartbeat_interval; conf_ptr->inactive_limit = slurmctld_conf.inactive_limit; + conf_ptr->job_credential_private_key = + slurmctld_conf.job_credential_private_key; + conf_ptr->job_credential_public_certificate = + slurmctld_conf.job_credential_public_certificate; conf_ptr->kill_wait = slurmctld_conf.kill_wait; conf_ptr->prioritize = slurmctld_conf.prioritize; conf_ptr->prolog = slurmctld_conf.prolog; conf_ptr->ret2service = slurmctld_conf.ret2service; + conf_ptr->slurm_user_id = slurmctld_conf.slurm_user_id; + conf_ptr->slurm_user_name = slurmctld_conf.slurm_user_name; conf_ptr->slurmctld_logfile = slurmctld_conf.slurmctld_logfile; conf_ptr->slurmctld_port = slurmctld_conf.slurmctld_port; conf_ptr->slurmctld_timeout = slurmctld_conf.slurmctld_timeout; conf_ptr->slurmd_logfile = slurmctld_conf.slurmd_logfile; conf_ptr->slurmd_spooldir = slurmctld_conf.slurmd_spooldir; + conf_ptr->slurmd_pidfile = slurmctld_conf.slurmd_pidfile; conf_ptr->slurmd_port = slurmctld_conf.slurmd_port; conf_ptr->slurmd_timeout = slurmctld_conf.slurmd_timeout; conf_ptr->slurm_conf = slurmctld_conf.slurm_conf; -- GitLab