#!/usr/bin/expect -f # This helper expect script removes all uids except one and all unknown # signatures from a key. # (c) Christoph Berg # This program is free software covered by the GNU GPL. # # 030909 cb: initial version for gpgmailsign v0.2 # 031017 cb: modifications for gpgmailsign v0.4 # 031019 cb: minor different exit handling # 2004-07-06 cb: more braindamaged waiting for gpg output # 2004-07-08 cb: fixed silly syntax error (thanks Alexander Wirt) log_file work/purgesigs.log set timeout 8 proc timed_out {} { send_user "Something weird happend, bailing out after timeout\n" exit 2 } set keyring [lrange $argv 0 0] set keyid [lrange $argv 1 1] set uid_nr [lrange $argv 2 2] set uid_count [lrange $argv 3 3] send_user "\n\n### $keyring: purging key $keyid / uid $uid_nr of $uid_count --------------------\n" send_user "gpg --no-default-keyring --keyring $keyring --with-colon --edit-key $keyid" spawn gpg --no-default-keyring --keyring $keyring --with-colon --edit-key $keyid send "\n" expect { timeout timed_out Command } set uid 1 while {$uid <= $uid_count} { if {$uid != $uid_nr} { send_user "Selecting uid $uid for deletion\n" send "uid $uid\n" } set uid [expr $uid+1] expect { Command { send "\n" } timeout timed_out } } # "flush" gpg output sleep 1 send_user "deleting uid...\n" send "deluid\n" expect { "Really remove all selected user IDs" { send "y\n" } "Really remove this user ID" { send "y\n" } "You must select at least one user ID" {} timeout timed_out } send "uid 1\n\n" expect { -re ":1,.*s.*:" {} timeout timed_out } expect { timeout timed_out Command } send "delsig\n" expect { "uid " {} timeout timed_out } while {1} { expect { "Delete this unknown signature" { send "y\n" } "Delete this good signature" { send "n\n" } "Delete this invalid signature" { send "y\n" } "Really delete this self-signature" { send "y\n" } timeout timed_out Command { send_user "Saving key.\n" send "save\n" break } } } send_user "purgesigs.expect: exit.\n" interact