darwin.sh (1832B)
1 # Copyright (C) 2012 - 2014 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 2 # This file is licensed under the GPLv2+. Please see COPYING for more information. 3 4 clip() { 5 local sleep_argv0="password store sleep for user $(id -u)" 6 pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5 7 local before="$(pbpaste | $BASE64)" 8 echo -n "$1" | pbcopy 9 ( 10 ( exec -a "$sleep_argv0" sleep "$CLIP_TIME" ) 11 local now="$(pbpaste | $BASE64)" 12 [[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now" 13 echo "$before" | $BASE64 -d | pbcopy 14 ) >/dev/null 2>&1 & disown 15 echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds." 16 } 17 18 tmpdir() { 19 [[ -n $SECURE_TMPDIR ]] && return 20 unmount_tmpdir() { 21 [[ -n $SECURE_TMPDIR && -d $SECURE_TMPDIR && -n $DARWIN_RAMDISK_DEV ]] || return 22 umount "$SECURE_TMPDIR" 23 diskutil quiet eject "$DARWIN_RAMDISK_DEV" 24 rm -rf "$SECURE_TMPDIR" 25 } 26 trap unmount_tmpdir INT TERM EXIT 27 SECURE_TMPDIR="$(mktemp -d "${TMPDIR:-/tmp}/$PROGRAM.XXXXXXXXXXXXX")" 28 DARWIN_RAMDISK_DEV="$(hdid -drivekey system-image=yes -nomount 'ram://32768' | cut -d ' ' -f 1)" # 32768 sectors = 16 mb 29 [[ -z $DARWIN_RAMDISK_DEV ]] && die "Error: could not create ramdisk." 30 newfs_hfs -M 700 "$DARWIN_RAMDISK_DEV" &>/dev/null || die "Error: could not create filesystem on ramdisk." 31 mount -t hfs -o noatime -o nobrowse "$DARWIN_RAMDISK_DEV" "$SECURE_TMPDIR" || die "Error: could not mount filesystem on ramdisk." 32 } 33 34 qrcode() { 35 if type imgcat >/dev/null 2>&1; then 36 echo -n "$1" | qrencode --size 10 -o - | imgcat 37 else 38 echo -n "$1" | qrencode -t utf8 39 fi 40 } 41 42 GETOPT="$({ test -x /usr/local/opt/gnu-getopt/bin/getopt && echo /usr/local/opt/gnu-getopt; } || brew --prefix gnu-getopt 2>/dev/null || { command -v port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt" 43 SHRED="srm -f -z" 44 BASE64="openssl base64"