aboutsummaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rwxr-xr-xcli/icevault62
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