diff --git a/NEWS b/NEWS
index 56883e45f79b9b4959b323392c0d665e15845a95..eaafb996fbbef45ed0e214bc9245d852bf955781 100644
--- a/NEWS
+++ b/NEWS
@@ -141,6 +141,8 @@ documents those changes that are of interest to users and admins.
     daemon. Patch by Don Albert, Bull.
  -- Fix bug in srun --multi-prog configuration file to avoid printing duplicate
     record error when "*" is used at the end of the file for the task ID.
+ -- Let operators see reservation data even if "PrivateData=reservations" flag
+    is set in slurm.conf. Patch from Don Albert, Bull.
 
 * Changes in SLURM 2.3.2
 ========================
diff --git a/src/common/read_config.c b/src/common/read_config.c
index 49e1ae791d1fe47b4992a664a7c23efc285b3bd2..4c06c329f69f627e7923927ed25d5a49a0f58ae6 100644
--- a/src/common/read_config.c
+++ b/src/common/read_config.c
@@ -2889,6 +2889,7 @@ _validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl)
 	    && (!strcmp(conf->proctrack_type,"proctrack/linuxproc")))
 		fatal("proctrack/linuxproc is incompatible with switch/elan");
 
+	conf->private_data = 0; /* Set to default before parsing PrivateData */
 	if (s_p_get_string(&temp_str, "PrivateData", hashtbl)) {
 		if (strstr(temp_str, "account"))
 			conf->private_data |= PRIVATE_DATA_ACCOUNTS;
diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c
index 763bfbb9a0835294cea2798124da47ead3179e6b..62d0249bada2c0c991e7d6d6efab928fc2ca112a 100644
--- a/src/common/slurm_protocol_defs.c
+++ b/src/common/slurm_protocol_defs.c
@@ -1611,7 +1611,7 @@ extern void private_data_string(uint16_t private_data, char *str, int str_len)
 {
 	if (str_len > 0)
 		str[0] = '\0';
-	if (str_len < 42) {
+	if (str_len < 55) {
 		error("private_data_string: output buffer too small");
 		return;
 	}
@@ -1643,7 +1643,12 @@ extern void private_data_string(uint16_t private_data, char *str, int str_len)
 			strcat(str, ",");
 		strcat(str, "accounts"); //9 len
 	}
-	// total len 42
+	if (private_data & PRIVATE_DATA_RESERVATIONS) {
+		if (str[0])
+			strcat(str, ",");
+		strcat(str, "reservations"); //13 len
+	}
+	// total len 55
 
 	if (str[0] == '\0')
 		strcat(str, "none");
diff --git a/src/slurmctld/reservation.c b/src/slurmctld/reservation.c
index 5f68c5f490d046429fe88ceb0c2800ca7e0cfd48..1b12c77b6bc3b92d3268ea0c37965bd67907fb19 100644
--- a/src/slurmctld/reservation.c
+++ b/src/slurmctld/reservation.c
@@ -1878,7 +1878,7 @@ extern void show_resv(char **buffer_ptr, int *buffer_size, uid_t uid)
 		fatal("malloc: list_iterator_create");
 	while ((resv_ptr = (slurmctld_resv_t *) list_next(iter))) {
 		if ((slurmctld_conf.private_data & PRIVATE_DATA_RESERVATIONS)
-		    && !validate_slurm_user(uid)) {
+		    && !validate_operator(uid)) {
 			int i = 0;
 			for (i=0; i<resv_ptr->user_cnt; i++) {
 				if (resv_ptr->user_list[i] == uid)
diff --git a/src/slurmdbd/read_config.c b/src/slurmdbd/read_config.c
index 260505ab6d252622d0346cdc8186beae9c87806f..df3f73b364e4e251e0d3eea987b2a90c6f46f6d2 100644
--- a/src/slurmdbd/read_config.c
+++ b/src/slurmdbd/read_config.c
@@ -240,6 +240,8 @@ extern int read_slurmdbd_conf(void)
 		}
 		s_p_get_string(&slurmdbd_conf->pid_file, "PidFile", tbl);
 		s_p_get_string(&slurmdbd_conf->plugindir, "PluginDir", tbl);
+
+		slurmdbd_conf->private_data = 0; /* default visible to all */
 		if (s_p_get_string(&temp_str, "PrivateData", tbl)) {
 			if (strstr(temp_str, "account"))
 				slurmdbd_conf->private_data