/* * Encryption utilites * Bradley Williams * {allegra,ihnp4,uiucdcs,ctvax}!convex!williams * $Revision: 1.1.1.1 $ */ #ifndef lint static char Sccsid[] = "%W% %G%"; #endif #if !defined(VMS) && !defined(MSDOS) && defined(CRYPT_PATH) #include #include "curses_stuff.h" #if defined(BSD42) || defined(BSD43) #include #include #else #include #endif #include "ss.h" char *getpass(); #ifdef SYSV3 void exit(); #endif int Crypt = 0; #define MAXKEYWORDSIZE 30 char KeyWord[MAXKEYWORDSIZE] = {""}; void creadfile (save, eraseflg) char *save; int eraseflg; { register FILE *f; int pipefd[2]; int fildes; int pid; if (eraseflg && strcmp(save, curfile) && modcheck(" first")) return; if ((fildes = open(findhome(save), O_RDONLY, 0)) < 0) { error ("Can't read file \"%s\"", save); return; } if (eraseflg) erasedb (); if (pipe(pipefd) < 0) { error("Can't make pipe to child"); return; } deraw(); (void) strcpy(KeyWord, getpass("Enter key:")); goraw(); if ((pid=fork()) == 0) /* if child */ { (void) close (0); /* close stdin */ (void) close (1); /* close stdout */ (void) close (pipefd[0]); /* close pipe input */ (void) dup (fildes); /* standard in from file */ (void) dup (pipefd[1]); /* connect to pipe */ (void) fprintf (stderr, " "); #ifdef BDES (void) execl (CRYPT_PATH, "bdes", "-d", "-k", KeyWord, 0); (void) fprintf (stderr, "execl(%s, \"bdes\", \"-dk\", %s, 0) in creadfile() failed", CRYPT_PATH, KeyWord); #else (void) execl (CRYPT_PATH, "crypt", KeyWord, 0); (void) fprintf (stderr, "execl(%s, \"crypt\", %s, 0) in creadfile() failed", CRYPT_PATH, KeyWord); #endif exit (-127); } else /* else parent */ { (void) close (fildes); (void) close (pipefd[1]); /* close pipe output */ if ((f = fdopen (pipefd[0], "r")) == (FILE *)0) { (void) kill (pid, -9); error ("Can't fdopen file \"%s\"", save); (void) close (pipefd[0]); return; } } loading++; while (fgets(line,sizeof line,f)) { linelim = 0; if (line[0] != '#') (void) yyparse (); } --loading; (void) fclose (f); (void) close (pipefd[0]); while (pid != wait(&fildes)) /**/; linelim = -1; modflg++; if (eraseflg) { (void) strcpy (curfile, save); modflg = 0; } EvalAll(); } int cwritefile (fname, r0, c0, rn, cn) char *fname; int r0, c0, rn, cn; { register FILE *f; int pipefd[2]; int fildes; int pid; char save[PATHLEN]; char *fn; char *busave; if (*fname == '\0') fname = &curfile[0]; fn = fname; while (*fn && (*fn == ' ')) /* Skip leading blanks */ fn++; if ( *fn == '|' ) { error ("Can't have encrypted pipe"); return(-1); } (void) strcpy(save,fname); busave = findhome(save); #ifdef DOBACKUPS if (!backup_file(busave) && (yn_ask("Could not create backup copy, Save anyhow?: (y,n)") != 1)) return(0); #endif if ((fildes = open (busave, O_TRUNC|O_WRONLY|O_CREAT, 0600)) < 0) { error ("Can't create file \"%s\"", save); return(-1); } if (pipe (pipefd) < 0) { error ("Can't make pipe to child\n"); return(-1); } if (KeyWord[0] == '\0') { deraw(); (void) strcpy(KeyWord, getpass("Enter key:")); goraw(); } if ((pid=fork()) == 0) /* if child */ { (void) close (0); /* close stdin */ (void) close (1); /* close stdout */ (void) close (pipefd[1]); /* close pipe output */ (void) dup (pipefd[0]); /* connect to pipe input */ (void) dup (fildes); /* standard out to file */ (void) fprintf (stderr, " "); #ifdef BDES (void) execl (CRYPT_PATH, "bdes", "-k", KeyWord, 0); (void) fprintf (stderr, "execl(%s, \"bdes\", \"-k\", %s, 0) in cwritefile() failed", CRYPT_PATH, KeyWord); #else (void) execl (CRYPT_PATH, "crypt", KeyWord, 0); (void) fprintf (stderr, "execl(%s, \"crypt\", %s, 0) in cwritefile() failed", CRYPT_PATH, KeyWord); #endif exit (-127); } else /* else parent */ { (void) close (fildes); (void) close (pipefd[0]); /* close pipe input */ f = fdopen (pipefd[1], "w"); if (f == 0) { (void) kill (pid, -9); error ("Can't fdopen file \"%s\"", save); (void) close (pipefd[1]); return(-1); } } write_fd(f, r0, c0, rn, cn); (void) fclose (f); (void) close (pipefd[1]); while (pid != wait(&fildes)) /**/; (void) strcpy(curfile,save); modflg = 0; error ("File \"%s\" written (encrypted).", curfile); return(0); } #endif /* CRYPT_PATH */