Merge branch 'ob/gpg-interface-cleanup'
strbuf_split*() to split a string into multiple strbufs is often a wrong API to use. A few uses of it have been removed by simplifying the code. * ob/gpg-interface-cleanup: gpg-interface: do not use misdesigned strbuf_split*() gpg-interface: do not use misdesigned strbuf_split*()main
commit
c43d4cf762
|
|
@ -821,8 +821,7 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
|
||||||
struct child_process ssh_keygen = CHILD_PROCESS_INIT;
|
struct child_process ssh_keygen = CHILD_PROCESS_INIT;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
struct strbuf fingerprint_stdout = STRBUF_INIT;
|
struct strbuf fingerprint_stdout = STRBUF_INIT;
|
||||||
struct strbuf **fingerprint;
|
char *fingerprint_ret, *begin, *delim;
|
||||||
char *fingerprint_ret;
|
|
||||||
const char *literal_key = NULL;
|
const char *literal_key = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -845,13 +844,17 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
|
||||||
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
|
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
|
||||||
signing_key);
|
signing_key);
|
||||||
|
|
||||||
fingerprint = strbuf_split_max(&fingerprint_stdout, ' ', 3);
|
begin = fingerprint_stdout.buf;
|
||||||
if (!fingerprint[1])
|
delim = strchr(begin, ' ');
|
||||||
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
|
if (!delim)
|
||||||
|
die(_("failed to get the ssh fingerprint for key %s"),
|
||||||
signing_key);
|
signing_key);
|
||||||
|
begin = delim + 1;
|
||||||
fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
|
delim = strchr(begin, ' ');
|
||||||
strbuf_list_free(fingerprint);
|
if (!delim)
|
||||||
|
die(_("failed to get the ssh fingerprint for key %s"),
|
||||||
|
signing_key);
|
||||||
|
fingerprint_ret = xmemdupz(begin, delim - begin);
|
||||||
strbuf_release(&fingerprint_stdout);
|
strbuf_release(&fingerprint_stdout);
|
||||||
return fingerprint_ret;
|
return fingerprint_ret;
|
||||||
}
|
}
|
||||||
|
|
@ -862,12 +865,12 @@ static char *get_default_ssh_signing_key(void)
|
||||||
struct child_process ssh_default_key = CHILD_PROCESS_INIT;
|
struct child_process ssh_default_key = CHILD_PROCESS_INIT;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
|
struct strbuf key_stdout = STRBUF_INIT, key_stderr = STRBUF_INIT;
|
||||||
struct strbuf **keys;
|
|
||||||
char *key_command = NULL;
|
char *key_command = NULL;
|
||||||
const char **argv;
|
const char **argv;
|
||||||
int n;
|
int n;
|
||||||
char *default_key = NULL;
|
char *default_key = NULL;
|
||||||
const char *literal_key = NULL;
|
const char *literal_key = NULL;
|
||||||
|
char *begin, *new_line, *first_line;
|
||||||
|
|
||||||
if (!ssh_default_key_command)
|
if (!ssh_default_key_command)
|
||||||
die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
|
die(_("either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"));
|
||||||
|
|
@ -884,19 +887,24 @@ static char *get_default_ssh_signing_key(void)
|
||||||
&key_stderr, 0);
|
&key_stderr, 0);
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
keys = strbuf_split_max(&key_stdout, '\n', 2);
|
begin = key_stdout.buf;
|
||||||
if (keys[0] && is_literal_ssh_key(keys[0]->buf, &literal_key)) {
|
new_line = strchr(begin, '\n');
|
||||||
|
if (new_line)
|
||||||
|
first_line = xmemdupz(begin, new_line - begin);
|
||||||
|
else
|
||||||
|
first_line = xstrdup(begin);
|
||||||
|
if (is_literal_ssh_key(first_line, &literal_key)) {
|
||||||
/*
|
/*
|
||||||
* We only use `is_literal_ssh_key` here to check validity
|
* We only use `is_literal_ssh_key` here to check validity
|
||||||
* The prefix will be stripped when the key is used.
|
* The prefix will be stripped when the key is used.
|
||||||
*/
|
*/
|
||||||
default_key = strbuf_detach(keys[0], NULL);
|
default_key = first_line;
|
||||||
} else {
|
} else {
|
||||||
|
free(first_line);
|
||||||
warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
|
warning(_("gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"),
|
||||||
key_stderr.buf, key_stdout.buf);
|
key_stderr.buf, key_stdout.buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_list_free(keys);
|
|
||||||
} else {
|
} else {
|
||||||
warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
|
warning(_("gpg.ssh.defaultKeyCommand failed: %s %s"),
|
||||||
key_stderr.buf, key_stdout.buf);
|
key_stderr.buf, key_stdout.buf);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue