# # # patch "NEWS" # from [3975902db7de50d784b0661302fd793ed23671dc] # to [b3200fb434e45b2db61c8252e3914e14ee1cb14f] # # patch "cmd_list.cc" # from [678e604c453dea49028df353f5dd9496641ee81b] # to [bc24e16d61787c294b125a19bfc3c9174ac0bef2] # # patch "packet.cc" # from [184a7b3bd2cae1a2773fba3b7d4514334ac51126] # to [a07c385f9b6d3aa4c2c790b00f67fef661c04827] # ============================================================ --- NEWS 3975902db7de50d784b0661302fd793ed23671dc +++ NEWS b3200fb434e45b2db61c8252e3914e14ee1cb14f @@ -16,7 +16,13 @@ - mtn now errors if your chosen private key doesn't match the public key of the same name in your database. + + Bugs fixed + - mtn read successfully reads revision data, and cert packets + + - mtn consistently supports certs with empty values (fixed 'ls certs' and 'read') + Internal - Update Botan to 1.7.2. ============================================================ --- cmd_list.cc 678e604c453dea49028df353f5dd9496641ee81b +++ cmd_list.cc bc24e16d61787c294b125a19bfc3c9174ac0bef2 @@ -132,14 +132,14 @@ CMD(certs, "certs", "", CMD_REF(list), " vector lines; split_into_lines(washed, lines); - I(lines.size() > 0); + std::string value_first_line = lines.size() > 0 ? idx(lines, 0) : ""; cout << string(guess_terminal_width(), '-') << '\n' << (i18n_format(str) % idx(certs, i).key() % stat % idx(certs, i).name() - % idx(lines, 0)); + % value_first_line); for (size_t i = 1; i < lines.size(); ++i) cout << (i18n_format(extra_str) % idx(lines, i)); ============================================================ --- packet.cc 184a7b3bd2cae1a2773fba3b7d4514334ac51126 +++ packet.cc a07c385f9b6d3aa4c2c790b00f67fef661c04827 @@ -126,6 +126,11 @@ feed_packet_consumer && s.find_first_not_of(constants::legal_base64_bytes) == string::npos, F("malformed packet: invalid base64 block")); } + void validate_arg_base64(string const & s) const + { + E(s.find_first_not_of(constants::legal_base64_bytes) == string::npos, + F("malformed packet: invalid base64 block")); + } void validate_key(string const & k) const { E(k.size() > 0 @@ -197,7 +202,7 @@ feed_packet_consumer string name; iss >> name; validate_certname(name); string keyid; iss >> keyid; validate_key(keyid); string val; - read_rest(iss,val); validate_base64(val); + read_rest(iss,val); validate_arg_base64(val); validate_base64(body); // canonicalize the base64 encodings to permit searches cert t = cert(hexenc(certid),