diff options
-rwxr-xr-x | cli/icevault | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/cli/icevault b/cli/icevault index 3c31f1d..5ad8ff2 100755 --- a/cli/icevault +++ b/cli/icevault @@ -47,24 +47,23 @@ my $SOCKET; sub myprintf($@) { my $fh = ref $_[0] eq 'GLOB' ? shift : \*STDOUT; my $format = shift; - chomp $format; $LANGINFO =~ /^utf-?8$/aai ? $format =~ s/C<%s>/\N{U+2018}%s\N{U+2019}/g : $format =~ s/C<%s>/'%s'/g; $format =~ s/I<%s>/%s/g; $format =~ s/B<%s>/%s/g; die "Illegal markup '$1' in message:\n", $format if $format =~ /([A-Z])<%s>/; - printf $fh map {$LOCALE->encode($_)} ($format."\n", @_); + printf $fh map {$LOCALE->encode($_)} ($format, @_); } # error FORMAT, LIST sub error($@) { - myprintf \*STDERR, shift, @_; + myprintf \*STDERR, shift."\n", @_; exit 1; } # warning FORMAT, LIST sub warning($@) { - myprintf \*STDERR, shift, @_; + myprintf \*STDERR, shift."\n", @_; } sub mysystem(@) { @@ -203,7 +202,7 @@ sub connect($) { error "No Firefox profile found under C<%s>", $ffdir unless defined $profile; $sockname = "$$ffdir/$profile/$sockname"; } - myprintf \*STDERR, "Using socket C<%s>", $sockname if $CONFIG{debug}; + myprintf \*STDERR, "Using socket C<%s>\n", $sockname if $CONFIG{debug}; $sockname =~ /\A(\/\p{Print}+)\z/ or error "Insecure C<%s>", $sockname; # untaint $sockname $sockname = $1; @@ -231,7 +230,7 @@ sub connect($) { sub getResponse() { my $buf = $SOCKET->getline; chomp $buf; - myprintf \*STDERR, "S: %s", decode_utf8 $buf if $CONFIG{debug}; + myprintf \*STDERR, "S: %s\n", decode_utf8 $buf if $CONFIG{debug}; my ($code, $msg) = split / /, $buf, 2; # allow $msg to be decoded to a string $msg = JSON->new->utf8->allow_nonref->decode($msg) if defined $msg; @@ -255,7 +254,7 @@ sub getResponse() { # socket, flush the handle, then return the server response. sub sendCommand(@) { my $command = join(' ',@_); - myprintf \*STDERR, "C: %s", Encode::decode_utf8 $command if $CONFIG{debug}; + myprintf \*STDERR, "C: %s\n", Encode::decode_utf8 $command if $CONFIG{debug}; $command .= "\n"; for (my $offset = 0; $offset < length $command;) { $offset += $SOCKET->syswrite($command, length($command) - $offset, $offset); @@ -281,7 +280,7 @@ sub myglob(;$$$) { die "Invalid placeholder %$1" }ge; my $glob = "$store/$template"; - myprintf \*STDERR, "Using glob pattern C<%s>", $glob if $CONFIG{debug}; + myprintf \*STDERR, "Using glob pattern C<%s>\n", $glob if $CONFIG{debug}; return File::Glob::bsd_glob($glob); } @@ -351,7 +350,7 @@ sub complete($;$) { $2 eq 'i' ? quotemeta($1).$pi : die "Invalid placeholder %$1"}ge; my $pattern = qr/\A\Q$store\/\E$template\z/; - myprintf \*STDERR, "Using regexp C<%s>", "$pattern" if $CONFIG{debug}; + myprintf \*STDERR, "Using regexp C<%s>\n", "$pattern" if $CONFIG{debug}; my @matches; foreach my $filename (myglob($gs, $gh, $gi)) { @@ -392,7 +391,7 @@ sub fill($$@) { return if none {defined} @fill; # noop for (my $i = 0; $i <= $#fill; $i++) { - myprintf "Filling field C<%s>, value C<%s>", + myprintf "Filling field C<%s>, value C<%s>\n", $form->{fields}->[$i]->{name}, safeValue($form->{fields}->[$i], $fill[$i]) if defined $fill[$i]; @@ -431,7 +430,7 @@ sub file2Identity($) { $2 eq 'i' ? quotemeta($1).'(?<i>[^\P{Print}\/]+)' : die "Invalid placeholder %$1"}ge; my $pattern = qr/\A\Q$store\/\E$template\z/; - myprintf \*STDERR, "Using regexp C<%s>", "$pattern" if $CONFIG{debug}; + myprintf \*STDERR, "Using regexp C<%s>\n", "$pattern" if $CONFIG{debug}; $filename =~ $pattern or die; return "$+{s}://$+{h}/$+{i}"; } @@ -443,7 +442,7 @@ sub file2Identity($) { open my $NULL, '<', '/dev/null'; sub loadIdentityFile($;$) { my ($filename, $fh) = @_; - myprintf \*STDERR, "Decrypting identity file C<%s>", $filename if $CONFIG{debug}; + myprintf \*STDERR, "Decrypting identity file C<%s>\n", $filename if $CONFIG{debug}; require 'IPC/Open2.pm'; my $pid = IPC::Open2::open2( (defined wantarray ? $fh : ">&".$fh->fileno) @@ -469,7 +468,7 @@ sub loadIdentityFile($;$) { # to gpg(1), and closed afterwards. sub saveIdentityFile($$) { my ($form, $filename) = @_; - myprintf \*STDERR, "Saving identity file C<%s>", $filename if $CONFIG{debug}; + myprintf \*STDERR, "Saving identity file C<%s>\n", $filename if $CONFIG{debug}; require 'File/Copy.pm'; require 'File/Path.pm'; @@ -589,7 +588,7 @@ sub pwgen(@) { (defined $x and $x > 0 and $x < $l) ? $x : $l } @fields); $pwgen =~ s/%d/$l/g; myprintf "Generating $l-char long random value for field".($#fields > 0 ? '(s) ' : ' ') - .join(',', map {'C<%s>'} @fields), + .join(',', map {'C<%s>'} @fields)."\n", map {$_->{name}} @fields; my @pw = `$pwgen`; @@ -611,12 +610,13 @@ sub prompt($;$) { } # Prompt a Yes/No question. -sub promptYN($;$) { +sub promptYN($;$@) { my $prompt = shift; my $default = shift // 0; + my @args = @_; while (1) { - print $LOCALE->encode($prompt), " [", ($default ? 'Y/n' : 'y/N'), "] "; + myprintf "$prompt [".($default ? 'Y/n' : 'y/N')."] ", @args; my $r = <STDIN>; die "\n" unless defined $r; chomp $r; @@ -627,7 +627,7 @@ sub promptYN($;$) { elsif (lc $r eq 'n' or lc $r eq 'no' or ($r eq '' and !$default)) { return 0 } - myprintf \*STDERR, "Answer: C<%s> or C<%s>", 'y', 'n'; + myprintf \*STDERR, "Answer: C<%s> or C<%s>\n", 'y', 'n'; } } @@ -730,7 +730,7 @@ if ($ARGV[0] eq '--help' or $ARGV[0] eq '-?') { my $usage = shift @USAGE; print " or: $NAME $cmd $usage\n"; } - myprintf "Try C<%s> or consult the manpage for more information.", "$NAME COMMAND --help"; + myprintf "Try C<%s> or consult the manpage for more information.\n", "$NAME COMMAND --help"; exit 0; } @@ -753,7 +753,7 @@ sub usage(@) { printf "Consult the manpage for more information.\n"; exit 0; } else { - myprintf "Try C<%s> or consult the manpage for more information.", "$NAME $COMMAND --help"; + myprintf "Try C<%s> or consult the manpage for more information.\n", "$NAME $COMMAND --help"; exit 1; } } @@ -795,7 +795,7 @@ elsif ($COMMAND eq 'insert') { usage() unless $#ARGV < 1; my $uri = &connect($CONFIG{socket}); - myprintf "Importing HTML form from URI C<%s>", $uri; + myprintf "Importing HTML form from URI C<%s>\n", $uri; my @forms = getForms(); my $formIdx = findForm undef, @forms; @@ -829,10 +829,10 @@ elsif ($COMMAND eq 'insert') { # ask for confirmation my $r = prompt 'Identity name?', $id; if ($r !~ /\A[^\P{Print}\/]+\z/) { - myprintf \*STDERR, "Invalid identity: C<%s>", $r; + myprintf \*STDERR, "Invalid identity: C<%s>\n", $r; } elsif (-e identity2File "$uri/$r" and !$CONFIG{force}) { - myprintf \*STDERR, "Identity C<%s> already exists", "$uri/$r"; + myprintf \*STDERR, "Identity C<%s> already exists\n", "$uri/$r"; } else { $id = $r; @@ -892,7 +892,7 @@ elsif ($COMMAND eq 'insert') { sendCommand 'QUIT'; undef @{$form->{fields}}[@dontsave] if @dontsave; # remove the field we don't want to save - myprintf "Saving identity C<%s>", "$uri/$id"; + myprintf "Saving identity C<%s>\n", "$uri/$id"; saveIdentityFile $form, $filename; commit "Add new identity $uri/$id", $filename; } @@ -941,7 +941,7 @@ elsif ($COMMAND eq 'fill') { delete $fields{$pass->{name}}; if ($mypass->{name} ne $pass->{name}) { # use the new name - myprintf "Renaming field C<%s> as C<%s>", + myprintf "Renaming field C<%s> as C<%s>\n", $mypass->{name}, $pass->{name}; $mypass->{name} = $pass->{name}; $changed = 1; @@ -951,7 +951,7 @@ elsif ($COMMAND eq 'fill') { $fill[$passIdx[0]] = $mypass->{value}; } elsif ($mypass->{value} ne $pass->{value}) { # update the password - myprintf "Updating field C<%s> to C<%s> (former value: C<%s>)", + myprintf "Updating field C<%s> to C<%s> (former value: C<%s>)\n", $mypass->{name}, safeValue($pass), safeValue($mypass); $mypass->{value} = $pass->{value}; $changed = 1; @@ -1003,7 +1003,7 @@ elsif ($COMMAND eq 'fill') { } elsif ($myform->{fields}->[$myidx]->{value} ne $form->{fields}->[$idx]->{value}) { # update the known value with that found in the page - myprintf "Updating field C<%s> to C<%s> (former value: C<%s>)", + myprintf "Updating field C<%s> to C<%s> (former value: C<%s>)\n", $myform->{fields}->[$myidx]->{name}, safeValue($form->{fields}->[$idx]), safeValue($myform->{fields}->[$myidx]); @@ -1024,7 +1024,7 @@ elsif ($COMMAND eq 'fill') { @fieldIdx = @fieldIdx[(0 .. $i)] if $i >= 0; next unless @fieldIdx and $i >= 0; myprintf "Adding field C<%s>, value".($#fieldIdx > 0 ? '(s) ' : ' '). - join(',', map {'C<%s>'} @fieldIdx), + join(',', map {'C<%s>'} @fieldIdx)."\n", $name, map {safeValue $form->{fields}->[$_]} @fieldIdx; push @{$myform->{fields}}, @{$form->{fields}}[@fieldIdx]; $changed = 1; @@ -1033,7 +1033,7 @@ elsif ($COMMAND eq 'fill') { my @fieldIdx = grep defined, @{$myfields{$name}}; next unless @fieldIdx; myprintf "Deleting field C<%s>, value".($#fieldIdx > 0 ? '(s) ' : ' '). - join(',', map {'C<%s>'} @fieldIdx), + join(',', map {'C<%s>'} @fieldIdx)."\n", $name, map {safeValue $myform->{fields}->[$_]} @fieldIdx; undef $myform->{fields}->[$_] foreach @fieldIdx; $changed = 1; @@ -1105,7 +1105,7 @@ elsif ($COMMAND eq 'edit') { if ($h eq $h2) { print "No modification made\n"; } elsif (defined $fh2) { - myprintf "Saving user changes for identity C<%s>", $id; + myprintf "Saving user changes for identity C<%s>\n", $id; saveIdentityFile($fh2, $filename); # use the FH we opened before unlinking commit "Save manual (using $EDITOR) changes for $id", $filename; } else { @@ -1154,7 +1154,7 @@ elsif ($COMMAND eq 'git') { unless (-d $CONFIG{store}) { require 'File/Path.pm'; File::Path::make_path($CONFIG{store}); - myprintf "Created directory C<%s>", $CONFIG{store}; + myprintf "Created directory C<%s>\n", $CONFIG{store}; } for (my $i = 0; $i <= $#ARGV; $i++) { @@ -1174,7 +1174,7 @@ elsif ($COMMAND eq 'reencrypt') { foreach my $filename (@matches) { $filename = $LOCALE->decode($filename); my $id = file2Identity($filename); - myprintf "Reencrypting C<%s>", $id; + myprintf "Reencrypting C<%s>\n", $id; $filename =~ /\A(\/\p{Print}+)\z/ or error "Insecure C<%s>", $filename; $filename = $1; # untaint $filename |