X-Git-Url: https://git.cameronkatri.com/pw-darwin.git/blobdiff_plain/0c9f365da25caa3b04bcfe82b70ee49aab96e619..6a151c16645f90b21f171a44661b109f06e9097e:/pw/pw_conf.c?ds=sidebyside diff --git a/pw/pw_conf.c b/pw/pw_conf.c index 8a0e644..9377239 100644 --- a/pw/pw_conf.c +++ b/pw/pw_conf.c @@ -22,16 +22,18 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $Id: pw_conf.c,v 1.1.1.2 1996/12/10 23:59:00 joerg Exp $ */ +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ + #include #include #include #include "pw.h" -#include "pwupd.h" #define debugging 0 @@ -40,6 +42,7 @@ enum { _UC_DEFAULTPWD, _UC_REUSEUID, _UC_REUSEGID, + _UC_NISPASSWD, _UC_DOTDIR, _UC_NEWMAIL, _UC_LOGFILE, @@ -64,7 +67,8 @@ static char bourne_shell[] = "sh"; static char *system_shells[_UC_MAXSHELLS] = { bourne_shell, - "csh" + "csh", + "tcsh" }; static char const *booltrue[] = @@ -81,6 +85,7 @@ static struct userconf config = 0, /* Default password for new users? (nologin) */ 0, /* Reuse uids? */ 0, /* Reuse gids? */ + NULL, /* NIS version of the passwd file */ "/usr/share/skel", /* Where to obtain skeleton files */ NULL, /* Mail to send to new accounts */ "/var/log/userlog", /* Where to log changes */ @@ -94,7 +99,8 @@ static struct userconf config = 1000, 32000, /* Allowed range of uids */ 1000, 32000, /* Allowed range of gids */ 0, /* Days until account expires */ - 0 /* Days until password expires */ + 0, /* Days until password expires */ + 0 /* size of default_group array */ }; static char const *comments[_UC_FIELDS] = @@ -103,12 +109,13 @@ static char const *comments[_UC_FIELDS] = "\n# Password for new users? no=nologin yes=loginid none=blank random=random\n", "\n# Reuse gaps in uid sequence? (yes or no)\n", "\n# Reuse gaps in gid sequence? (yes or no)\n", + "\n# Path to the NIS passwd file (blank or 'no' for none)\n", "\n# Obtain default dotfiles from this directory\n", "\n# Mail this file to new user (/etc/newuser.msg or no)\n", "\n# Log add/change/remove information in this file\n", "\n# Root directory in which $HOME directory is created\n", "\n# Colon separated list of directories containing valid shells\n", - "\n# Space separated list of available shells (without paths)\n", + "\n# Comma separated list of available shells (without paths)\n", "\n# Default shell (without path)\n", "\n# Default group (leave blank for new group per user)\n", "\n# Extra groups for new users\n", @@ -127,6 +134,7 @@ static char const *kwds[] = "defaultpasswd", "reuseuids", "reusegids", + "nispasswd", "skeleton", "newmail", "logfile", @@ -266,6 +274,10 @@ read_userconfig(char const * file) case _UC_REUSEGID: config.reuse_gids = boolean_val(q, 0); break; + case _UC_NISPASSWD: + config.nispasswd = (q == NULL || !boolean_val(q, 1)) + ? NULL : newstr(q); + break; case _UC_DOTDIR: config.dotdir = (q == NULL || !boolean_val(q, 1)) ? NULL : newstr(q); @@ -298,7 +310,8 @@ read_userconfig(char const * file) ? (char *) bourne_shell : newstr(q); break; case _UC_DEFAULTGROUP: - config.default_group = (q == NULL || !boolean_val(q, 1) || getgrnam(q) == NULL) + q = unquote(q); + config.default_group = (q == NULL || !boolean_val(q, 1) || GETGRNAM(q) == NULL) ? NULL : newstr(q); break; case _UC_EXTRAGROUPS: @@ -384,6 +397,10 @@ write_userconfig(char const * file) case _UC_REUSEGID: val = boolean_str(config.reuse_gids); break; + case _UC_NISPASSWD: + val = config.nispasswd ? config.nispasswd : ""; + quote = 0; + break; case _UC_DOTDIR: val = config.dotdir ? config.dotdir : boolean_str(0); break; @@ -403,6 +420,8 @@ write_userconfig(char const * file) for (j = k = 0; j < _UC_MAXSHELLS && system_shells[j] != NULL; j++) { char lbuf[64]; int l = snprintf(lbuf, sizeof lbuf, "%s\"%s\"", k ? "," : "", system_shells[j]); + if (l < 0) + l = 0; if (l + k + 1 < len || extendline(&buf, &len, len + LNBUFSZ) != -1) { strcpy(buf + k, lbuf); k += l; @@ -421,6 +440,8 @@ write_userconfig(char const * file) for (j = k = 0; j < config.numgroups && config.groups[j] != NULL; j++) { char lbuf[64]; int l = snprintf(lbuf, sizeof lbuf, "%s\"%s\"", k ? "," : "", config.groups[j]); + if (l < 0) + l = 0; if (l + k + 1 < len || extendline(&buf, &len, len + 1024) != -1) { strcpy(buf + k, lbuf); k += l;