Encrypting Ed(1)
November 5, 2019
Here’s my program, installed in /usr/local/bin/ed, which comes before /usr/bin/ed in my path:
#! /bin/sh # ed -- add encryption to ed CMD="/usr/bin/ed"; ENCRYPT="F" while [ "$(expr substr $1X 1 1)X" = "-X" ] do case $1 in -x) ENCRYPT="T"; shift;; -p) CMD="$CMD $1 $2"; shift; shift;; *) CMD="$CMD $1"; shift;; esac done if [ "$ENCRYPT" = "F" ] then $CMD "$*" else stty -echo echo -n "Enter password: " read PASS1 echo "" echo -n "Repeat password: " read PASS2 echo "" stty echo if [ "$PASS1" != "$PASS2" -o "X$PASS1" = "X" ] then echo "Password error" >&2; exit 1 fi echo $PASS1 | ccdecrypt -k - $1 $CMD $1 echo $PASS2 | ccencrypt -k - $1 mv $1.cpt $(basename $1 .cpt) fi
I did my own getopts
processing because, well why not? There is a subtle problem here: If ed
properly took an -x
flag, it would be possible to create a new file in the editor. But since there is no way to pass the name of a newly-created file to the encryption wrapper, in my program an encrypted file must already exist before it can be editted; it can’t be created in the editor. Still, it allows me to write an edit script for an encrypted file, which is what I set out to do.
You can see the program at https://ideone.com/Tb9QsN, but there’s no way to run it.
By the way, I still use sh
for shell scripts. Has the rest of the world moved on to bash
?
[…] task is to enhance ed by adding the -x encryption flag. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments […]