From 3f44b3cdb311dad970e4b7442c05fde841e7717c Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Fri, 19 Mar 2004 15:48:18 +0000
Subject: [PATCH] Fix bugs introduced through time preventing use of -f option
 in slurmd and slurmctld (specify different configuration file).

---
 src/common/read_config.c        |  3 ++-
 src/common/read_config.h        |  3 ++-
 src/common/slurm_protocol_api.c | 19 ++++++++++++++++---
 src/common/slurm_protocol_api.h |  6 ++++++
 src/slurmctld/controller.c      |  5 +++--
 src/slurmd/slurmd.c             |  1 +
 6 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/common/read_config.c b/src/common/read_config.c
index 2881d4fd7e4..9f3294bda70 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -122,7 +122,8 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr)
 
 /* 
  * init_slurm_conf - initialize or re-initialize the slurm configuration 
- *	values.   
+ *	values to defaults (NULL or NO_VAL). Note that the configuration
+ *	file pathname (slurm_conf) is not changed.    
  * IN/OUT ctl_conf_ptr - pointer to data structure to be initialized
  */
 void
diff --git a/src/common/read_config.h b/src/common/read_config.h
index 102fd1d06fe..65deae016d2 100644
--- a/src/common/read_config.h
+++ b/src/common/read_config.h
@@ -54,7 +54,8 @@
 
 /* 
  * init_slurm_conf - initialize or re-initialize the slurm configuration 
- *	values.   
+ *	values defaults (NULL or NO_VAL). Note that the configuration
+ *	file pathname (slurm_conf) is not changed.    
  * IN/OUT ctl_conf_ptr - pointer to data structure to be initialized
  */
 extern void init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr);
diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c
index 642013e5373..c8cd451315a 100644
--- a/src/common/slurm_protocol_api.c
+++ b/src/common/slurm_protocol_api.c
@@ -98,6 +98,18 @@ slurm_protocol_config_t *slurm_get_api_config()
         return proto_conf;
 }
 
+/* slurm_api_set_conf_file
+ *      set slurm configuration file to a non-default value
+ */
+extern void  slurm_api_set_conf_file(char *pathname)
+{
+        if (pathname == NULL)
+                return;
+        xfree(slurmctld_conf.slurm_conf);
+        slurmctld_conf.slurm_conf = xstrdup(pathname);
+        return;
+}
+
 /* slurm_api_set_default_config
  *        called by the send_controller_msg function to insure that at least 
  *        the compiled in default slurm_protocol_config object is initialized
@@ -110,8 +122,9 @@ int slurm_api_set_default_config()
         static time_t last_config_update = (time_t) 0;
 
         slurm_mutex_lock(&config_lock);
-        if (stat(SLURM_CONFIG_FILE, &config_stat) < 0) {
-                error("Can't stat %s: %m", SLURM_CONFIG_FILE);
+        if ( (slurmctld_conf.slurm_conf) &&
+             (stat(slurmctld_conf.slurm_conf, &config_stat) < 0)) {
+                error("Can't stat %s: %m", slurmctld_conf.slurm_conf);
                 rc = SLURM_ERROR;
                 goto cleanup;
         }
@@ -121,7 +134,7 @@ int slurm_api_set_default_config()
                 goto cleanup;
 
         last_config_update = config_stat.st_mtime;
-        free_slurm_conf(&slurmctld_conf);
+        init_slurm_conf(&slurmctld_conf);
         read_slurm_conf_ctl(&slurmctld_conf);
 
         if ((slurmctld_conf.control_addr == NULL) ||
diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h
index b6d3a14938c..84139c27002 100644
--- a/src/common/slurm_protocol_api.h
+++ b/src/common/slurm_protocol_api.h
@@ -83,6 +83,12 @@ int inline slurm_set_api_config(slurm_protocol_config_t * protocol_conf);
  */
 inline slurm_protocol_config_t *slurm_get_api_config();
 
+/* slurm_api_set_conf_file
+ *      set slurm configuration file to a non-default value
+ * pathname IN - pathname of slurm configuration file to be used
+ */
+extern void slurm_api_set_conf_file(char *pathname);
+
 /* slurm_api_set_default_config
  *	called by the send_controller_msg function to insure that at least 
  *	the compiled in default slurm_protocol_config object is initialized
diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index e512ea6c8eb..fce1f673206 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -145,11 +145,12 @@ int main(int argc, char *argv[])
 	slurmctld_pid = getpid();
 	_parse_commandline(argc, argv, &slurmctld_conf);
 	init_locks();
+	slurm_api_set_conf_file(slurmctld_conf.slurm_conf);
 
 	/* Get SlurmctldPidFile for _kill_old_slurmctld */
 	if ((error_code = read_slurm_conf_ctl (&slurmctld_conf)))
 		fatal("read_slurm_conf_ctl reading %s: %s",
-		      SLURM_CONFIG_FILE, slurm_strerror(error_code));
+		      slurmctld_conf.slurm_conf, slurm_strerror(error_code));
 	update_logging();
 	_kill_old_slurmctld();
 
@@ -230,7 +231,7 @@ int main(int argc, char *argv[])
 			/* Now recover the remaining state information */
 			if ((error_code = read_slurm_conf(recover))) {
 				fatal("read_slurm_conf reading %s: %s",
-					SLURM_CONFIG_FILE,
+					slurmctld_conf.slurm_conf,
 					slurm_strerror(error_code));
 			}
 		} else {
diff --git a/src/slurmd/slurmd.c b/src/slurmd/slurmd.c
index 246bd7206d2..cdf859f7ca6 100644
--- a/src/slurmd/slurmd.c
+++ b/src/slurmd/slurmd.c
@@ -446,6 +446,7 @@ _read_config()
         char *path_pubkey;
 
 	conf->cf.slurm_conf = xstrdup(conf->conffile);
+	slurm_api_set_conf_file(conf->conffile);
 
 	read_slurm_conf_ctl(&conf->cf);
 
-- 
GitLab