Module Name: src Committed By: jmmv Date: Wed Jan 27 11:02:03 UTC 2010
Modified Files: src/distrib/utils/sysinst: defs.h util.c Log Message: Perform in-place replacement of the cypher type instead of renaming the passwd.conf file to passwd.conf.pre-sysinst file and creating a new one from scratch: - This is consistent with all other edits of configuration files performed by sysinst. (E.g. in-place changes of rc.conf.) - This eases the upgrade of the system to a newer set of files because the diffs presented by etcupdate are easier to read. No objections in tech-inst...@. Tested installing NetBSD/amd64. To generate a diff of this commit: cvs rdiff -u -r1.147 -r1.148 src/distrib/utils/sysinst/defs.h cvs rdiff -u -r1.162 -r1.163 src/distrib/utils/sysinst/util.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/utils/sysinst/defs.h diff -u src/distrib/utils/sysinst/defs.h:1.147 src/distrib/utils/sysinst/defs.h:1.148 --- src/distrib/utils/sysinst/defs.h:1.147 Sat Jan 2 21:16:46 2010 +++ src/distrib/utils/sysinst/defs.h Wed Jan 27 11:02:03 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.147 2010/01/02 21:16:46 dsl Exp $ */ +/* $NetBSD: defs.h,v 1.148 2010/01/27 11:02:03 jmmv Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -409,7 +409,7 @@ int get_and_unpack_sets(int, msg, msg, msg); int sanity_check(void); int set_timezone(void); -int set_crypt_type(void); +void set_crypt_type(void); int set_root_password(void); int set_root_shell(void); void scripting_fprintf(FILE *, const char *, ...); Index: src/distrib/utils/sysinst/util.c diff -u src/distrib/utils/sysinst/util.c:1.162 src/distrib/utils/sysinst/util.c:1.163 --- src/distrib/utils/sysinst/util.c:1.162 Sat Jan 2 18:06:57 2010 +++ src/distrib/utils/sysinst/util.c Wed Jan 27 11:02:03 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: util.c,v 1.162 2010/01/02 18:06:57 dsl Exp $ */ +/* $NetBSD: util.c,v 1.163 2010/01/27 11:02:03 jmmv Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -47,6 +47,7 @@ #include <sys/stat.h> #include <sys/statvfs.h> #include <curses.h> +#include <err.h> #include <errno.h> #include <dirent.h> #include <util.h> @@ -250,6 +251,32 @@ free(owd); } +/* + * Performs in-place replacement of a set of patterns in a file that lives + * inside the installed system. The patterns must be separated by a semicolon. + * For example: + * + * replace("/etc/some-file.conf", "s/prop1=NO/prop1=YES/;s/foo/bar/"); + */ +static +void +replace(const char *path, const char *patterns, ...) +{ + char *spatterns; + va_list ap; + + va_start(ap, patterns); + vasprintf(&spatterns, patterns, ap); + va_end(ap); + if (spatterns == NULL) + err(1, "vasprintf(&spatterns, \"%s\", ...)", patterns); + + run_program(RUN_CHROOT, "sed -an -e '%s;H;$!d;g;w %s' %s", spatterns, + path, path); + + free(spatterns); +} + static int floppy_fetch(const char *set_name) { @@ -1152,61 +1179,39 @@ return 1; } -int +static +void +replace_crypt_type(const char *localcipher, const char *ypcipher) +{ + + replace("/etc/passwd.conf", "s/^.*default:.*$/default:/;" + "s/^.*localcipher.*$/\tlocalcipher = %s/;" + "s/^.*ypcipher.*$/\typcipher = %s/", localcipher, ypcipher); +} + +void set_crypt_type(void) { - FILE *pwc; - char *fn; msg_display(MSG_choose_crypt); process_menu(MENU_crypttype, NULL); - fn = strdup(target_expand("/etc/passwd.conf")); - if (fn == NULL) - return -1; switch (yesno) { case 0: break; case 1: /* DES */ - rename(fn, target_expand("/etc/passwd.conf.pre-sysinst")); - pwc = fopen(fn, "w"); - fprintf(pwc, - "default:\n" - " localcipher = old\n" - " ypcipher = old\n"); - fclose(pwc); + replace_crypt_type("old", "old"); break; case 2: /* MD5 */ - rename(fn, target_expand("/etc/passwd.conf.pre-sysinst")); - pwc = fopen(fn, "w"); - fprintf(pwc, - "default:\n" - " localcipher = md5\n" - " ypcipher = md5\n"); - fclose(pwc); + replace_crypt_type("md5", "md5"); break; case 3: /* blowfish 2^7 */ - rename(fn, target_expand("/etc/passwd.conf.pre-sysinst")); - pwc = fopen(fn, "w"); - fprintf(pwc, - "default:\n" - " localcipher = blowfish,7\n" - " ypcipher = blowfish,7\n"); - fclose(pwc); + replace_crypt_type("blowfish,7", "blowfish,7"); break; case 4: /* sha1 */ - rename(fn, target_expand("/etc/passwd.conf.pre-sysinst")); - pwc = fopen(fn, "w"); - fprintf(pwc, - "default:\n" - " localcipher = sha1\n" - " ypcipher = sha1\n"); - fclose(pwc); + replace_crypt_type("sha1", "sha1"); break; } - - free(fn); - return (0); } int @@ -1291,9 +1296,8 @@ void enable_rc_conf(void) { - run_program(RUN_CHROOT, - "sed -an -e 's/^rc_configured=NO/rc_configured=YES/;" - "H;$!d;g;w /etc/rc.conf' /etc/rc.conf"); + + replace("/etc/rc.conf", "s/^rc_configured=NO/rc_configured=YES/"); } int