* Copyright (c) 1990 The Regents of the University of California.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)pw_copy.c 5.3 (Berkeley) %G%";
* This module is used to copy the master password file, replacing a single
* record, by chpass(1) and passwd(1).
extern char *progname
, *tempname
;
register FILE *from
, *to
;
if (!(from
= fdopen(ffd
, "r")))
pw_error(_PATH_MASTERPASSWD
, 1, 1);
if (!(to
= fdopen(tfd
, "w")))
pw_error(tempname
, 1, 1);
for (done
= 0; fgets(buf
, sizeof(buf
), from
);) {
(void)fprintf(stderr
, "%s: %s: line too long\n",
progname
, _PATH_MASTERPASSWD
);
(void)fprintf(to
, "%s", buf
);
if (!(p
= index(buf
, ':'))) {
(void)fprintf(stderr
, "%s: %s: corrupted entry\n",
progname
, _PATH_MASTERPASSWD
);
if (strcmp(buf
, pw
->pw_name
)) {
(void)fprintf(to
, "%s", buf
);
(void)fprintf(to
, "%s:%s:%d:%d:%s:%ld:%ld:%s:%s:%s\n",
pw
->pw_name
, pw
->pw_passwd
, pw
->pw_uid
, pw
->pw_gid
,
pw
->pw_class
, pw
->pw_change
, pw
->pw_expire
, pw
->pw_gecos
,
pw
->pw_dir
, pw
->pw_shell
);
(void)fprintf(to
, "%s:%s:%d:%d:%s:%ld:%ld:%s:%s:%s\n",
pw
->pw_name
, pw
->pw_passwd
, pw
->pw_uid
, pw
->pw_gid
,
pw
->pw_class
, pw
->pw_change
, pw
->pw_expire
, pw
->pw_gecos
,
pw
->pw_dir
, pw
->pw_shell
);
err
: pw_error(NULL
, 1, 1);