From eb33f7f73f5a9995d6c1a3eb23f0aaa2de310a2c Mon Sep 17 00:00:00 2001 From: Yuri Pankov Date: Mon, 15 Oct 2018 20:11:53 +0000 Subject: pw: respect path specified using -V when writing pw.conf, and -C is not explicitly specified. -V path is already used to determine which file to read default values from, so it's only logical to write them to the same file. PR: 231653 Reviewed by: eugen, bapt Approved by: re (gjb), kib (mentor) Differential Revision: https://reviews.freebsd.org/D17566 --- pw/pw.h | 1 + pw/pw_conf.c | 8 ++++++-- pw/pw_utils.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pw/pw.h b/pw/pw.h index fde3ce3..d5e2c60 100644 --- a/pw/pw.h +++ b/pw/pw.h @@ -64,6 +64,7 @@ enum _which }; #define _DEF_DIRMODE (S_IRWXU | S_IRWXG | S_IRWXO) +#define _PW_CONF "pw.conf" #define _PATH_PW_CONF "/etc/pw.conf" #define _UC_MAXLINE 1024 #define _UC_MAXSHELLS 32 diff --git a/pw/pw_conf.c b/pw/pw_conf.c index 36bb8b6..f7b98f1 100644 --- a/pw/pw_conf.c +++ b/pw/pw_conf.c @@ -417,9 +417,13 @@ write_userconfig(struct userconf *cnf, const char *file) int i, j; struct sbuf *buf; FILE *fp; + char cfgfile[MAXPATHLEN]; - if (file == NULL) - file = _PATH_PW_CONF; + if (file == NULL) { + snprintf(cfgfile, sizeof(cfgfile), "%s/" _PW_CONF, + conf.etcpath); + file = cfgfile; + } if ((fd = open(file, O_CREAT|O_RDWR|O_TRUNC|O_EXLOCK, 0644)) == -1) return (0); diff --git a/pw/pw_utils.c b/pw/pw_utils.c index e483977..fbf4a3f 100644 --- a/pw/pw_utils.c +++ b/pw/pw_utils.c @@ -71,7 +71,7 @@ get_userconfig(const char *config) if (config != NULL) return (read_userconfig(config)); - snprintf(defaultcfg, sizeof(defaultcfg), "%s/pw.conf", conf.etcpath); + snprintf(defaultcfg, sizeof(defaultcfg), "%s/" _PW_CONF, conf.etcpath); return (read_userconfig(defaultcfg)); } -- cgit v1.2.3-56-ge451