Merge pull request #3764 from lucab/lucab/to-upstream/pull-3
Use gpgv for signature verification in cargo
This commit is contained in:
commit
5cf0c658f3
@ -1162,20 +1162,20 @@ fn sync_one_file(c: &Cargo, dir: &Path, src: @Source) -> bool {
|
||||
}
|
||||
match (src.key, src.keyfp) {
|
||||
(Some(_), Some(f)) => {
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile, f);
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile);
|
||||
|
||||
if !r {
|
||||
error(fmt!("signature verification failed for source %s",
|
||||
name));
|
||||
error(fmt!("signature verification failed for source %s with key %s",
|
||||
name, f));
|
||||
return false;
|
||||
}
|
||||
|
||||
if has_src_file {
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile, f);
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile);
|
||||
|
||||
if !e {
|
||||
error(fmt!("signature verification failed for source %s",
|
||||
name));
|
||||
error(fmt!("signature verification failed for source %s with key %s",
|
||||
name, f));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1273,21 +1273,21 @@ fn sync_one_git(c: &Cargo, dir: &Path, src: @Source) -> bool {
|
||||
}
|
||||
match (src.key, src.keyfp) {
|
||||
(Some(_), Some(f)) => {
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile, f);
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile);
|
||||
|
||||
if !r {
|
||||
error(fmt!("signature verification failed for source %s",
|
||||
name));
|
||||
error(fmt!("signature verification failed for source %s with key %s",
|
||||
name, f));
|
||||
rollback(name, dir, false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if has_src_file {
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile, f);
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile);
|
||||
|
||||
if !e {
|
||||
error(fmt!("signature verification failed for source %s",
|
||||
name));
|
||||
error(fmt!("signature verification failed for source %s with key %s",
|
||||
name, f));
|
||||
rollback(name, dir, false);
|
||||
return false;
|
||||
}
|
||||
@ -1370,11 +1370,11 @@ fn sync_one_curl(c: &Cargo, dir: &Path, src: @Source) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile, f);
|
||||
let r = pgp::verify(&c.root, &pkgfile, &sigfile);
|
||||
|
||||
if !r {
|
||||
error(fmt!("signature verification failed for source %s",
|
||||
name));
|
||||
error(fmt!("signature verification failed for source %s with key %s",
|
||||
name, f));
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1390,11 +1390,11 @@ fn sync_one_curl(c: &Cargo, dir: &Path, src: @Source) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile, f);
|
||||
let e = pgp::verify(&c.root, &srcfile, &srcsigfile);
|
||||
|
||||
if !e {
|
||||
error(~"signature verification failed for " +
|
||||
~"source " + name);
|
||||
~"source " + name + ~" with key " + f);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1463,8 +1463,7 @@ fn cmd_init(c: &Cargo) {
|
||||
return;
|
||||
}
|
||||
|
||||
let r = pgp::verify(&c.root, &srcfile, &sigfile,
|
||||
pgp::signing_key_fp());
|
||||
let r = pgp::verify(&c.root, &srcfile, &sigfile);
|
||||
if !r {
|
||||
error(fmt!("signature verification failed for '%s'",
|
||||
srcfile.to_str()));
|
||||
|
@ -1,5 +1,5 @@
|
||||
fn gpg(args: ~[~str]) -> { status: int, out: ~str, err: ~str } {
|
||||
return run::program_output(~"gpg", args);
|
||||
fn gpgv(args: ~[~str]) -> { status: int, out: ~str, err: ~str } {
|
||||
return run::program_output(~"gpgv", args);
|
||||
}
|
||||
|
||||
fn signing_key() -> ~str {
|
||||
@ -59,7 +59,7 @@ fn signing_key_fp() -> ~str {
|
||||
}
|
||||
|
||||
fn supported() -> bool {
|
||||
let r = gpg(~[~"--version"]);
|
||||
let r = gpgv(~[~"--version"]);
|
||||
r.status == 0
|
||||
}
|
||||
|
||||
@ -88,15 +88,14 @@ fn add(root: &Path, key: &Path) {
|
||||
}
|
||||
}
|
||||
|
||||
fn verify(root: &Path, data: &Path, sig: &Path, keyfp: ~str) -> bool {
|
||||
fn verify(root: &Path, data: &Path, sig: &Path) -> bool {
|
||||
let path = root.push("gpg");
|
||||
let p = gpg(~[~"--homedir", path.to_str(),
|
||||
~"--with-fingerprint",
|
||||
~"--verify", sig.to_str(),
|
||||
data.to_str()]);
|
||||
let res = ~"Primary key fingerprint: " + keyfp;
|
||||
for str::split_char_each(p.err, '\n') |line| {
|
||||
if line == res { return true; }
|
||||
let res = gpgv(~[~"--homedir", path.to_str(),
|
||||
~"--keyring", ~"pubring.gpg",
|
||||
~"--verbose",
|
||||
sig.to_str(), data.to_str()]);
|
||||
if res.status != 0 {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user