- int fd;
- FILE *ft, *fp;
- char *editor;
-
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- setbuf(stderr, NULL);
- umask(0);
- fd = open(temp, O_WRONLY|O_CREAT|O_EXCL, 0644);
- if (fd < 0) {
- if (errno == EEXIST) {
- fprintf(stderr, "vipw: password file busy\n");
- exit(1);
- }
- fprintf(stderr, "vipw: "); perror(temp);
- exit(1);
- }
- ft = fdopen(fd, "w");
- if (ft == NULL) {
- fprintf(stderr, "vipw: "); perror(temp);
- goto bad;
- }
- fp = fopen(passwd, "r");
- if (fp == NULL) {
- fprintf(stderr, "vipw: "); perror(passwd);
- goto bad;
- }
- while (fgets(buf, sizeof (buf) - 1, fp) != NULL)
- fputs(buf, ft);
- fclose(ft); fclose(fp);
- editor = getenv("EDITOR");
- if (editor == 0)
- editor = "vi";
- sprintf(buf, "%s %s", editor, temp);
- if (system(buf) == 0) {
- struct stat sbuf;
- int ok;