commit 2eeaec2f9153fa25efcd2a52e6b189103ff9e4d4 Author: MSVSphere Packaging Team Date: Fri Oct 25 19:18:52 2024 +0300 import seahorse-43.0-9.el10 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..50b72cb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/seahorse-43.0.tar.xz diff --git a/.seahorse.metadata b/.seahorse.metadata new file mode 100644 index 0000000..e12797a --- /dev/null +++ b/.seahorse.metadata @@ -0,0 +1 @@ +9c7f63cdf07275c8f7d45ad1904e06e8fa002c0b SOURCES/seahorse-43.0.tar.xz diff --git a/SOURCES/212.patch b/SOURCES/212.patch new file mode 100644 index 0000000..0289bcd --- /dev/null +++ b/SOURCES/212.patch @@ -0,0 +1,25 @@ +From 9260c74779be3d7a378db0671af862ffa3573d42 Mon Sep 17 00:00:00 2001 +From: Xi Ruoyao +Date: Wed, 21 Dec 2022 20:58:26 +0800 +Subject: [PATCH] Allow building with GnuPG-2.4.x + +--- + meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index e29b5322..23d0b54f 100644 +--- a/meson.build ++++ b/meson.build +@@ -26,7 +26,7 @@ endif + # Dependencies + min_glib_version = '2.66' + min_gcr_version = '3.38' +-accepted_gpg_versions = [ '2.2.0', '2.3.0' ] ++accepted_gpg_versions = [ '2.2.0', '2.3.0', '2.4.0' ] + gpg_check_version = find_program('build-aux' / 'gpg_check_version.py') + + glib_deps = [ +-- +GitLab + diff --git a/SOURCES/218.patch b/SOURCES/218.patch new file mode 100644 index 0000000..e759d1b --- /dev/null +++ b/SOURCES/218.patch @@ -0,0 +1,515 @@ +From 87a5e5312beac6cbe3b39f72cf0f120f1ed00473 Mon Sep 17 00:00:00 2001 +From: Niels De Graef +Date: Sat, 21 Oct 2023 15:43:04 +0200 +Subject: [PATCH] ssh: Refactor SSH key parsing + +Fix several issues in the SSH Key parsing code, and directly use a +`GInputStream` we can (asynchronously) read from. Take the opportunity +also to add some unit tests that we can run to make sure we're not +regressing on anything. +--- + ssh/key-data.vala | 59 +++++----- + ssh/key.vala | 58 +++++----- + ssh/meson.build | 20 ++++ + ssh/source.vala | 9 +- + ssh/test-key-parse.vala | 231 ++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 316 insertions(+), 61 deletions(-) + create mode 100644 ssh/test-key-parse.vala + +diff --git a/ssh/key-data.vala b/ssh/key-data.vala +index 1fdb1e6a8..8843bff84 100644 +--- a/ssh/key-data.vala ++++ b/ssh/key-data.vala +@@ -101,12 +101,12 @@ public class Seahorse.Ssh.KeyData : GLib.Object { + return result; + } + +- internal static string parse_key_blob (uchar[] bytes) throws GLib.Error { ++ internal static string parse_key_blob(uchar[] bytes) throws GLib.Error { + string digest = Checksum.compute_for_data(ChecksumType.MD5, bytes); + if (digest == null) + throw new Error.GENERAL("Can't calculate fingerprint from key."); + +- StringBuilder fingerprint = new StringBuilder.sized((digest.length * 3) / 2); ++ var fingerprint = new StringBuilder.sized((digest.length * 3) / 2); + for (size_t i = 0; i < digest.length; i += 2) { + if (i > 0) + fingerprint.append_c(':'); +@@ -147,7 +147,7 @@ public class Seahorse.Ssh.KeyData : GLib.Object { + string contents; + FileUtils.get_contents(filename, out contents); + +- StringBuilder results = new StringBuilder(); ++ var results = new StringBuilder(); + + // Load each line + bool first = true; +@@ -204,54 +204,65 @@ public class Seahorse.Ssh.SecData : GLib.Object { + * + * @param data The data that contains a private key. + */ +- public static SecData parse_data(StringBuilder data) throws GLib.Error { +- SecData secdata = new SecData(); ++ public static SecData parse_data(DataInputStream data, string initial_line) throws GLib.Error { ++ var secdata = new SecData(); + + // Get the comment +- if (data.str.has_prefix(SSH_KEY_SECRET_SIG)) { +- string comment = data.str.split("\n", 2)[0]; +- secdata.comment = comment.substring(SSH_KEY_SECRET_SIG.length).strip(); ++ if (initial_line.has_prefix(SSH_KEY_SECRET_SIG)) { ++ secdata.comment = initial_line.substring(SSH_KEY_SECRET_SIG.length).strip(); + } + + // First get our raw data (if there is none, don't bother) +- string rawdata = parse_lines_block(data, SSH_PRIVATE_BEGIN, SSH_PRIVATE_END); ++ string rawdata = parse_lines_block(data, initial_line, SSH_PRIVATE_BEGIN, SSH_PRIVATE_END); + if (rawdata == null || rawdata == "") + throw new Error.GENERAL("Private key contains no data."); + + secdata.rawdata = rawdata; + +- // Guess at the algorithm type +- secdata.algo = Algorithm.guess_from_string(rawdata); ++ // Guess the algorithm type by searching the base64 decoded data. (we ++ // should properly exclude the start/end line, but it shouldn't harm ++ // too much though afaik). Note that it's definitely not ideal though; ++ // but the openssh format isn't exactly obvious ++ var decoded = Base64.decode(rawdata.offset(initial_line.length)); ++ for (uint i = 0; i < decoded.length - 3; i++) { ++ unowned var str = ((string) decoded).offset(i); ++ var algo = Algorithm.from_string(str); ++ if (algo != Algorithm.UNKNOWN) { ++ secdata.algo = algo; ++ break; ++ } ++ } + + return secdata; + } + +- /** +- * Takes everything between the start and end pattern and returns it. +- * NOTE: The string (if found will) be removed from the argument. +- */ +- private static string parse_lines_block(StringBuilder data, string start, string end) { +- StringBuilder result = new StringBuilder(); ++ /** Reads all lines from start until the end pattern and returns it */ ++ private static string parse_lines_block(DataInputStream data, ++ string initial_line, ++ string start, string end) ++ throws GLib.Error { ++ var result = new StringBuilder(); ++ ++ string? line = initial_line; + + bool start_found = false; +- string[] lines = data.str.split("\n"); +- foreach (string line in lines) { ++ do { + // Look for the beginning + if (!start_found) { + if (start in line) { +- result.append_printf("%s\n", line); +- result.erase(0, line.length + 1); ++ result.append(line); ++ result.append_c('\n'); + start_found = true; + continue; + } + } else { + // Look for the end +- result.append_printf("%s\n", line); +- result.erase(0, line.length + 1); ++ result.append(line); ++ result.append_c('\n'); + if (end in line) + break; + } +- } ++ } while ((line = data.read_line_utf8()) != null); + + return result.str; + } +diff --git a/ssh/key.vala b/ssh/key.vala +index e2ebc30b3..453f8dd2c 100644 +--- a/ssh/key.vala ++++ b/ssh/key.vala +@@ -223,24 +223,36 @@ public class Seahorse.Ssh.Key : Seahorse.Object, Seahorse.Exportable, Seahorse.D + } + + /** +- * Parses a string into public/private keys. ++ * Parses an input stream into public/private keys. + * +- * @param data The string that needs to be parsed. ++ * @param input The input stream that needs to be parsed. + * @param cancellable Can be used to cancel the parsing. + */ +- public static async KeyParseResult parse(string data, +- Cancellable? cancellable = null) throws GLib.Error { +- return_if_fail (data != null || data != ""); +- ++ public static async KeyParseResult parse(GLib.InputStream input, ++ Cancellable? cancellable = null) ++ throws GLib.Error { + var pubkeys = new GenericArray(); + var seckeys = new GenericArray(); + +- StringBuilder toParse = new StringBuilder(data.chug()); +- while (toParse.str.length > 0) { ++ // Fetch the data into a string ++ var data = new DataInputStream(input); ++ ++ while (true) { ++ // Read the next line, and remove leading whitespace ++ var raw_line = yield data.read_line_utf8_async(Priority.DEFAULT, cancellable, null); ++ if (raw_line == null) ++ break; ++ ++ string line = raw_line.chug(); ++ ++ // Ignore comments and empty lines (not a parse error, but no data) ++ if (line == "" || line.has_prefix("#")) ++ continue; ++ + // First of all, check for a private key, as it can span several lines +- if (SecData.contains_private_key(toParse.str)) { ++ if (SecData.contains_private_key(line)) { + try { +- var secdata = SecData.parse_data(toParse); ++ var secdata = SecData.parse_data(data, line); + seckeys.add(secdata); + continue; + } catch (GLib.Error e) { +@@ -248,24 +260,9 @@ public class Seahorse.Ssh.Key : Seahorse.Object, Seahorse.Exportable, Seahorse.D + } + } + +- // We're sure we'll have at least 1 element +- string[] lines = toParse.str.split("\n", 2); +- string line = lines[0]; +- toParse.erase(0, line.length); +- if (lines.length == 2) // There was a \n, so don't forget to erase it as well +- toParse.erase(0, 1); +- +- // Comments and empty lines, not a parse error, but no data +- if (line.strip() == "" || line.has_prefix("#")) +- continue; +- + // See if we have a public key +- try { +- KeyData keydata = KeyData.parse_line(line); +- pubkeys.add(keydata); +- } catch (GLib.Error e) { +- warning(e.message); +- } ++ var keydata = KeyData.parse_line(line); ++ pubkeys.add(keydata); + } + + var result = KeyParseResult(); +@@ -282,9 +279,8 @@ public class Seahorse.Ssh.Key : Seahorse.Object, Seahorse.Exportable, Seahorse.D + */ + public static async KeyParseResult parse_file(string filename, + Cancellable? cancellable = null) throws GLib.Error { +- string contents; +- FileUtils.get_contents(filename, out contents); +- +- return yield parse(contents, cancellable); ++ var file = GLib.File.new_for_path(filename); ++ var file_stream = yield file.read_async(); ++ return yield parse(file_stream, cancellable); + } + } +diff --git a/ssh/meson.build b/ssh/meson.build +index 15418772e..c2c81a6a9 100644 +--- a/ssh/meson.build ++++ b/ssh/meson.build +@@ -58,3 +58,23 @@ ssh_askpass = executable('ssh-askpass', + install: true, + install_dir: libexecbindir, + ) ++ ++# Tests ++ssh_test_names = [ ++ 'key-parse', ++] ++ ++foreach _test : ssh_test_names ++ test_bin = executable(_test, ++ files('test-@0@.vala'.format(_test)), ++ dependencies: [ ++ ssh_dep, ++ ssh_dependencies, ++ ], ++ include_directories: include_directories('..'), ++ ) ++ ++ test(_test, test_bin, ++ suite: 'ssh', ++ ) ++endforeach +diff --git a/ssh/source.vala b/ssh/source.vala +index c4646c9fb..43b4a1ab0 100644 +--- a/ssh/source.vala ++++ b/ssh/source.vala +@@ -333,15 +333,12 @@ public class Seahorse.Ssh.Source : GLib.Object, Gcr.Collection, Seahorse.Place { + /** + * Parse an inputstream into a list of keys and import those keys. + */ +- public async List? import_async(InputStream input, Gtk.Window transient_for, ++ public async List? import_async(InputStream input, ++ Gtk.Window? transient_for, + Cancellable? cancellable = null) throws GLib.Error { +- uint8[] buffer = new uint8[4096]; +- size_t bytes_read; +- input.read_all(buffer, out bytes_read, cancellable); ++ var result = yield Key.parse(input, cancellable); + + string fullpath = other_keys_path(); +- +- var result = yield Key.parse((string) buffer, cancellable); + foreach (unowned var keydata in result.public_keys) { + yield import_public_async(keydata, fullpath, cancellable); + } +diff --git a/ssh/test-key-parse.vala b/ssh/test-key-parse.vala +new file mode 100644 +index 000000000..ef9404790 +--- /dev/null ++++ b/ssh/test-key-parse.vala +@@ -0,0 +1,231 @@ ++/* ++ * Seahorse ++ * ++ * Copyright (C) 2023 Niels De Graef ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ * See the GNU General Public License for more details. ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, see ++ * . ++ */ ++ ++void main(string[] args) { ++ Test.init(ref args); ++ ++ Test.add_func("/ssh/key-parse/pubkey-simple", test_key_parse_pubkey_simple); ++ Test.add_func("/ssh/key-parse/pubkey-bad-algo", test_key_parse_pubkey_bad_algo); ++ Test.add_func("/ssh/key-parse/pubkey-multple", test_key_parse_pubkey_multiple); ++ ++ Test.add_func("/ssh/key-parse/private-key-simple", test_key_parse_private_key_simple); ++ Test.add_func("/ssh/key-parse/private-key-pw-protected", test_key_parse_private_key_pw_protected); ++ ++ Test.run(); ++} ++ ++const string PUBKEY_SIMPLE = """ ++ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCi9ZNp78OzcMpR9QeSKKCybNxTR+ailXs3cwizr1R9Dlx/EobQBXOwE2Ed5PqSU5HEgtYRoKqlTxMogMXMX508dedC0ADTzM09B3OBqpZ7YnMuyLbtk1MNP8xcvVmHwwfw3Y79xxZZeqjUTI7cSE6jcNyz/k/Dl+6RYI552ab80b1kgDDwOyUL75hFllEZ9vHCcAOtk7y5LyeUpnRu5WJq0YBPVQljeYs23ZiTSo5NkJd7pvV9hs68ZAYqm1POXwCcAKOj4HXW3AL83AD49g8MJOAelCMaJpUkOgn4n4QTtqLEC108sqZgwWiadbN/ZHt3Idbn3AIxMMhD/wdkSwkfm9tAohMrqYpSiG31xyifH61mcoBMSxRMQhUscCGV3kLo6P/dZtxRbu4r74r/Ae2Jg4pzYrVFVzfObXdlTjtxJmR8UvnZg60OE0RwYMs1LJTE6xakcAg22O9i3bau00MoIIYEPgiFFP5t0Tw3D06BcEzr/2wEzlvbxy0qzDTr40U= testsimple ++"""; ++ ++private void test_key_parse_pubkey_simple() { ++ var input = new MemoryInputStream.from_data(PUBKEY_SIMPLE.data); ++ ++ var mainloop = new GLib.MainLoop(); ++ Seahorse.Ssh.Key.parse.begin(input, null, (obj, res) => { ++ try { ++ var parse_result = Seahorse.Ssh.Key.parse.end(res); ++ ++ assert_true(parse_result.public_keys.length == 1); ++ unowned var keydata = parse_result.public_keys[0]; ++ assert_true(keydata.comment == "testsimple"); ++ assert_true(keydata.algo == Seahorse.Ssh.Algorithm.RSA); ++ ++ assert_true(parse_result.secret_keys.length == 0); ++ } catch (Error err) { ++ error("Couldn't parse public key: %s", err.message); ++ } finally { ++ mainloop.quit(); ++ } ++ }); ++ mainloop.run(); ++} ++ ++// Basically the same as PUBKEY_SIMPLE, but a bogus algorithm ++const string PUBKEY_BAD_ALGO = """ ++ssh-blabla AAAAB3NzaC1yc2EAAAADAQABAAABgQCi9ZNp78OzcMpR9QeSKKCybNxTR+ailXs3cwizr1R9Dlx/EobQBXOwE2Ed5PqSU5HEgtYRoKqlTxMogMXMX508dedC0ADTzM09B3OBqpZ7YnMuyLbtk1MNP8xcvVmHwwfw3Y79xxZZeqjUTI7cSE6jcNyz/k/Dl+6RYI552ab80b1kgDDwOyUL75hFllEZ9vHCcAOtk7y5LyeUpnRu5WJq0YBPVQljeYs23ZiTSo5NkJd7pvV9hs68ZAYqm1POXwCcAKOj4HXW3AL83AD49g8MJOAelCMaJpUkOgn4n4QTtqLEC108sqZgwWiadbN/ZHt3Idbn3AIxMMhD/wdkSwkfm9tAohMrqYpSiG31xyifH61mcoBMSxRMQhUscCGV3kLo6P/dZtxRbu4r74r/Ae2Jg4pzYrVFVzfObXdlTjtxJmR8UvnZg60OE0RwYMs1LJTE6xakcAg22O9i3bau00MoIIYEPgiFFP5t0Tw3D06BcEzr/2wEzlvbxy0qzDTr40U= testbad ++"""; ++ ++private void test_key_parse_pubkey_bad_algo() { ++ var input = new MemoryInputStream.from_data(PUBKEY_BAD_ALGO.data); ++ ++ var mainloop = new GLib.MainLoop(); ++ Seahorse.Ssh.Key.parse.begin(input, null, (obj, res) => { ++ try { ++ Seahorse.Ssh.Key.parse.end(res); ++ assert_not_reached(); ++ } catch (Error err) { ++ // Expected ++ } finally { ++ mainloop.quit(); ++ } ++ }); ++ mainloop.run(); ++} ++ ++const string PUBKEY_MULTIPLE = """ ++ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCi9ZNp78OzcMpR9QeSKKCybNxTR+ailXs3cwizr1R9Dlx/EobQBXOwE2Ed5PqSU5HEgtYRoKqlTxMogMXMX508dedC0ADTzM09B3OBqpZ7YnMuyLbtk1MNP8xcvVmHwwfw3Y79xxZZeqjUTI7cSE6jcNyz/k/Dl+6RYI552ab80b1kgDDwOyUL75hFllEZ9vHCcAOtk7y5LyeUpnRu5WJq0YBPVQljeYs23ZiTSo5NkJd7pvV9hs68ZAYqm1POXwCcAKOj4HXW3AL83AD49g8MJOAelCMaJpUkOgn4n4QTtqLEC108sqZgwWiadbN/ZHt3Idbn3AIxMMhD/wdkSwkfm9tAohMrqYpSiG31xyifH61mcoBMSxRMQhUscCGV3kLo6P/dZtxRbu4r74r/Ae2Jg4pzYrVFVzfObXdlTjtxJmR8UvnZg60OE0RwYMs1LJTE6xakcAg22O9i3bau00MoIIYEPgiFFP5t0Tw3D06BcEzr/2wEzlvbxy0qzDTr40U= test1 ++ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDADxtTchMRaGP2YCG5Iiu/sCkdKYkogkZ9NrawGutvwcoQL4D3oIC+r+ka3YzenICz0Rpu4ZIyGzn5s7VISzjcGK99a8/UoXsSyTUy37ihbpAbkYju+avtJZyCMOrRyrXp0W8gSKnUuxDJJNlG5+Jhjdh35rGo7ENSDIGRBXx0uLmKvxbPGSQoULbUzxJRVes6HW7cr44RXG4GL5uekS5hSHN/wJuc/OBqT2ETn+Ivn8cj2fooR6Y7Ei6uFNwbNebYgzDzNOTfaGssCXoEqWL9dJA8FAXA9u4BQskIaUm9SiQblzKGZSKtoPPFh7Sp7Ii1k2TAG0g9VW8gYqUZgLZY4OKjARR+SkdyzlnJKOD1QuSIrnyDNOgl7SBwtujT6gg+9bcQzSPVRWuPldYj2qYEZiR7LPood7AvzDL2tZwb8r60O5KDip+66inj5BxmPO6Vmeo84DLXdZNhEnoCfaL5J9qArhTvxYPjU8RiuBoy6nqN00IWeT2e3RZTPjpq1wc= test2 ++"""; ++ ++private void test_key_parse_pubkey_multiple() { ++ var input = new MemoryInputStream.from_data(PUBKEY_MULTIPLE.data); ++ ++ var mainloop = new GLib.MainLoop(); ++ Seahorse.Ssh.Key.parse.begin(input, null, (obj, res) => { ++ try { ++ var parse_result = Seahorse.Ssh.Key.parse.end(res); ++ assert_true(parse_result.public_keys.length == 2); ++ assert_true(parse_result.secret_keys.length == 0); ++ } catch (Error err) { ++ error("Couldn't parse public key: %s", err.message); ++ } finally { ++ mainloop.quit(); ++ } ++ }); ++ mainloop.run(); ++} ++ ++const string PRIVATE_KEY_SIMPLE = """ ++-----BEGIN OPENSSH PRIVATE KEY----- ++b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn ++NhAAAAAwEAAQAAAYEAvR0sY6LuyQBk0eWtHlblilTu5ywOxIPtX5Xz1DQ/nTs3+EiuUjpX ++7wpBd0X8KLVwF8XqrgsS/cZGKKwwTTIthifiOkIin2M1c5zqjq5mYXLd8OVy7FPGz3kRcY ++bqcZ5IhH6rrccLKgqz8F8YDZ1PP/zViRV6pjL4M9V+vM50JNbc09o199rOhrIfzWpbmbsU ++L98ADNFdyAexJAo46I5KF4ABp43y8fxKVkOQmouN92ao5s4tktkU2RDieAQEGS5tCcuabM ++vyq+nsZ3SxhAAM+k1A98F4sDaPBLMvQrGTRfIhbtPEqJsffzmoNiLsuFooCB8bbrpb5gp0 ++pvoQCDomWPR618KJSt6c2JCpxd0v64N+xaGjeuKnH+nGeQ2I8KjGz49bpTsNU/XHSAJHS8 ++72GiVZ1sVeEGxU2nR58Faixg6quEQr/SjjFCLTjV1v9zXmYLGUC2WoYrvh8Xv1/5u11WG9 ++jxbZrwNeHR5b0mL4espyAaxhyP093cRj0am3HX03AAAFiLLBfcCywX3AAAAAB3NzaC1yc2 ++EAAAGBAL0dLGOi7skAZNHlrR5W5YpU7ucsDsSD7V+V89Q0P507N/hIrlI6V+8KQXdF/Ci1 ++cBfF6q4LEv3GRiisME0yLYYn4jpCIp9jNXOc6o6uZmFy3fDlcuxTxs95EXGG6nGeSIR+q6 ++3HCyoKs/BfGA2dTz/81YkVeqYy+DPVfrzOdCTW3NPaNffazoayH81qW5m7FC/fAAzRXcgH ++sSQKOOiOSheAAaeN8vH8SlZDkJqLjfdmqObOLZLZFNkQ4ngEBBkubQnLmmzL8qvp7Gd0sY ++QADPpNQPfBeLA2jwSzL0Kxk0XyIW7TxKibH385qDYi7LhaKAgfG266W+YKdKb6EAg6Jlj0 ++etfCiUrenNiQqcXdL+uDfsWho3ripx/pxnkNiPCoxs+PW6U7DVP1x0gCR0vO9holWdbFXh ++BsVNp0efBWosYOqrhEK/0o4xQi041db/c15mCxlAtlqGK74fF79f+btdVhvY8W2a8DXh0e ++W9Ji+HrKcgGsYcj9Pd3EY9Gptx19NwAAAAMBAAEAAAGAEepQGLZIObl0U6AW+N9RinvGUB ++cP5RT8aUg625kBh8Mi57326apGR0po7kQugarCjjX9J/S7nVfpsJOzVbTRtDpWB5/ZSNEs ++sKGmZNLntwabOOV7sCC1nlUBTohx8EaG5ypa2DEZgSeXaUeQ70U+SzkH/58Nye3dLofkpD ++1Iqm7CZ71tzGeplgAM3DhdqiAbZveQuSYiZL85zEi9oGZOZZCGV5mucLcuUaK/8awTzGKo ++0Iiqr5UqEPA1DBqRStNnbfu265Zc/VacI0Z+00dMiO7VQ1lB5TnO9MkuEU3Kd59sHKvuX0 ++Hw5V2BqvJVqdqF5j6yxAExD7J8JNybcpE+LXzgysTBAEg2QPQa4GzWERytWSddVU+LTrEu ++BOb8o2bMV4eHbo7Y06ziq+MJQIDWJr7qNMbDtaV5UCNWcIlYaKX9X8si0qFBzHPRTx53aV ++beb4C5G8Ce4HU4Q3eEC0idCSpALEZEb8NIqxHigWuQKlqAhju31IIFjPoJ8uvs/49VAAAA ++wD2DtKmKzpZrguKjUrMTtCyh8cRxvvACe5ij6oPlhnJJ3Hlyb5QkH/FMqudJhkOaZrLjz0 ++JFLXQ4SUoUxdnolBb5B6wNfL66CXCurwR8MzHxHZyNL2+EB/jHhgF5Oh631LShe9GHJ+nE ++umN9zzDmW4pfWIoUZbzaNi2IQS4Qv+pJWk/uQFzqnS39HQkdgNh8s3sPJQUvykgbD24vNu ++qzML23S3NxsJfxJzsl8HL7LTaf08toSXeNqif4iPxuy0F9nAAAAMEA+MjSgU7GxqAjgE+7 ++zTKbEAw2WZhSWk+sHDSzTpt7T6JhTbsD0I+ZXqb3lcrKTnxjGP8bj4zWeH/mtpVCRDb/xE ++cOjku/aszvCBHKcD9naE+U/pOqwWR60jPb65+2hvBxqCFKb+2FVeM7E7BYL4kSQ/FV3svu ++rCQ0+liFnD4VxDbvNHDXz2h9RlqYTjZ90/d5I4oibuHPvcy3jMri99qBuvPj/8BhfPBmKw ++o+VZpJbWHEfuDZx1Rr3vRx3VtmfLLFAAAAwQDCmU8SYZ/GYR/EQU3MfIK/3wVKiasBh3a/ ++gIgD1+wnobau0MHd8vvGdehLPNVHKQ0/QkOsIdQl1XEKXFaNNGo8ZMHsawacdRze7ulfpe ++LSYdlqKqu73m2wy8LsY+IGSZGRkjCK1LNJevU8ec0nHSUGIn49VK+jPPjyNGHZw5yIL8QE ++nmvLcmgqiGQHjsArmk4NAdA5LGJSF3EfSKDx1Rs1CKCn/3+tpIbTpVZl6r1IDpuLPOvtYO ++f5GQO1BGgcf8sAAAAQbmRlZ3JhZWZAdG9vbGJveAECAw== ++-----END OPENSSH PRIVATE KEY----- ++"""; ++ ++private void test_key_parse_private_key_simple() { ++ var input = new MemoryInputStream.from_data(PRIVATE_KEY_SIMPLE.data); ++ ++ var mainloop = new GLib.MainLoop(); ++ Seahorse.Ssh.Key.parse.begin(input, null, (obj, res) => { ++ try { ++ var parse_result = Seahorse.Ssh.Key.parse.end(res); ++ assert_true(parse_result.public_keys.length == 0); ++ ++ assert_true(parse_result.secret_keys.length == 1); ++ unowned var secdata = parse_result.secret_keys[0]; ++ assert_null(secdata.comment); ++ assert_true(secdata.algo == Seahorse.Ssh.Algorithm.RSA); ++ } catch (Error err) { ++ error("Couldn't parse private key: %s", err.message); ++ } finally { ++ mainloop.quit(); ++ } ++ }); ++ mainloop.run(); ++} ++ ++// Key with "test" password ++const string PRIVATE_KEY_PW_PROTECTED = """ ++-----BEGIN OPENSSH PRIVATE KEY----- ++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 ++Znmynq4dXIf58Nj4+TpgQkxQwxM= ++-----END OPENSSH PRIVATE KEY----- ++"""; ++ ++private void test_key_parse_private_key_pw_protected() { ++ var input = new MemoryInputStream.from_data(PRIVATE_KEY_PW_PROTECTED.data); ++ ++ var mainloop = new GLib.MainLoop(); ++ Seahorse.Ssh.Key.parse.begin(input, null, (obj, res) => { ++ try { ++ var parse_result = Seahorse.Ssh.Key.parse.end(res); ++ assert_true(parse_result.public_keys.length == 0); ++ ++ assert_true(parse_result.secret_keys.length == 1); ++ unowned var secdata = parse_result.secret_keys[0]; ++ assert_null(secdata.comment); ++ assert_true(secdata.algo == Seahorse.Ssh.Algorithm.RSA); ++ } catch (Error err) { ++ error("Couldn't parse private key: %s", err.message); ++ } finally { ++ mainloop.quit(); ++ } ++ }); ++ mainloop.run(); ++} +-- +GitLab + diff --git a/SOURCES/220.patch b/SOURCES/220.patch new file mode 100644 index 0000000..44b2495 --- /dev/null +++ b/SOURCES/220.patch @@ -0,0 +1,25 @@ +From 698fcc8107fa987475c6592208ec77a7dc002735 Mon Sep 17 00:00:00 2001 +From: ppw 0 +Date: Wed, 6 Dec 2023 12:16:45 +0000 +Subject: [PATCH] Update file operation.vala + +--- + ssh/operation.vala | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ssh/operation.vala b/ssh/operation.vala +index 4743d0a5..48a525c3 100644 +--- a/ssh/operation.vala ++++ b/ssh/operation.vala +@@ -49,7 +49,7 @@ public abstract class Operation : GLib.Object { + protected async string? operation_async(string command, + string? input, + Cancellable? cancellable) throws GLib.Error { +- return_val_if_fail (command != null && command != "", null); ++ return_val_if_fail (command != null && command != "", false); + + // Strip the command name for logging purposes + string[] args; +-- +GitLab + diff --git a/SOURCES/seahorse-c99.patch b/SOURCES/seahorse-c99.patch new file mode 100644 index 0000000..a88c59f --- /dev/null +++ b/SOURCES/seahorse-c99.patch @@ -0,0 +1,33 @@ +Move the prototype for seahorse_pkcs11_backend_initialize into the +header file, so C code generated from Vala sources will use it. +This avoids an implicit function declaration and build failures +with future compilers. + +Submitted upstream: + + + +diff --git a/pkcs11/seahorse-pkcs11-backend.c b/pkcs11/seahorse-pkcs11-backend.c +index b7ea21e1fdb1df7c..31d7cb81510a003b 100644 +--- a/pkcs11/seahorse-pkcs11-backend.c ++++ b/pkcs11/seahorse-pkcs11-backend.c +@@ -43,8 +43,6 @@ enum { + PROP_LOADED, + }; + +-void seahorse_pkcs11_backend_initialize (void); +- + static SeahorsePkcs11Backend *pkcs11_backend = NULL; + + struct _SeahorsePkcs11Backend { +diff --git a/pkcs11/seahorse-pkcs11-backend.h b/pkcs11/seahorse-pkcs11-backend.h +index ddcfd2fcc54c43e9..65efbd0a04ba9700 100644 +--- a/pkcs11/seahorse-pkcs11-backend.h ++++ b/pkcs11/seahorse-pkcs11-backend.h +@@ -43,4 +43,6 @@ SeahorsePkcs11Backend * seahorse_pkcs11_backend_get (void); + GcrCollection * seahorse_pkcs11_backend_get_writable_tokens (SeahorsePkcs11Backend *self, + gulong with_mechanism); + ++void seahorse_pkcs11_backend_initialize (void); ++ + #endif /* SEAHORSE_PKCS11_BACKEND_H_ */ diff --git a/SPECS/seahorse.spec b/SPECS/seahorse.spec new file mode 100644 index 0000000..33b8497 --- /dev/null +++ b/SPECS/seahorse.spec @@ -0,0 +1,760 @@ +%global tarball_version %%(echo %{version} | tr '~' '.') + +Name: seahorse +Version: 43.0 +Release: 9%{?dist} +Summary: A GNOME application for managing encryption keys + +# seahorse is GPLv2+ +# libcryptui is LGPLv2+ +License: GPL-2.0-or-later AND LGPL-2.0-or-later AND CC-BY-SA-3.0 +URL: https://wiki.gnome.org/Apps/Seahorse +Source: https://download.gnome.org/sources/%{name}/42/%{name}-%{tarball_version}.tar.xz +# PR#212: Allow building with GnuPG-2.4.x +Patch0: https://gitlab.gnome.org/GNOME/seahorse/-/merge_requests/212.patch +Patch1: seahorse-c99.patch +# PR#218: Refactor SSH key parsing +Patch2: https://gitlab.gnome.org/GNOME/seahorse/-/merge_requests/218.patch +# PR#222: Fix build with GCC 14 +Patch3: https://gitlab.gnome.org/GNOME/seahorse/-/merge_requests/220.patch + +BuildRequires: pkgconfig(avahi-client) +BuildRequires: pkgconfig(avahi-glib) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(gck-1) +BuildRequires: pkgconfig(gcr-3) +BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(libhandy-1) +BuildRequires: pkgconfig(libsecret-unstable) +BuildRequires: pkgconfig(libsoup-3.0) +BuildRequires: pkgconfig(pwquality) +BuildRequires: desktop-file-utils +BuildRequires: docbook-style-xsl +BuildRequires: gettext +BuildRequires: gpgme-devel >= 1.0 +BuildRequires: gnupg2 +BuildRequires: itstool +BuildRequires: libSM-devel +BuildRequires: meson +BuildRequires: openldap-devel +BuildRequires: openssh-clients +BuildRequires: vala +BuildRequires: /usr/bin/appstream-util +BuildRequires: /usr/bin/xsltproc + +# https://bugzilla.redhat.com/show_bug.cgi?id=474419 +# https://bugzilla.redhat.com/show_bug.cgi?id=587328 +Requires: pinentry-gui + +%description +Seahorse is a graphical interface for managing and using encryption keys. +It also integrates with nautilus, gedit and other places for encryption +operations. It is a keyring manager. + + +%prep +%autosetup -p1 -n %{name}-%{tarball_version} + +%build +%meson -Dmanpage=true +%meson_build + +%install +%meson_install + +%find_lang seahorse --with-gnome --all-name + +%check +appstream-util validate-relax --nonet $RPM_BUILD_ROOT/%{_metainfodir}/org.gnome.seahorse.Application.appdata.xml +desktop-file-validate ${RPM_BUILD_ROOT}%{_datadir}/applications/org.gnome.seahorse.Application.desktop + +%files -f %{name}.lang +%license COPYING* +%doc NEWS README.md +%{_bindir}/seahorse +%{_libexecdir}/seahorse/ +%{_datadir}/applications/org.gnome.seahorse.Application.desktop +%{_datadir}/icons/hicolor/scalable/apps/org.gnome.seahorse.Application.svg +%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.seahorse.Application-symbolic.svg +%{_datadir}/dbus-1/services/org.gnome.seahorse.Application.service +%{_datadir}/glib-2.0/schemas/org.gnome.seahorse*.gschema.xml +%dir %{_datadir}/gnome-shell/ +%dir %{_datadir}/gnome-shell/search-providers/ +%{_datadir}/gnome-shell/search-providers/seahorse-search-provider.ini +%{_datadir}/seahorse/ +%{_mandir}/man1/seahorse.1* +%{_metainfodir}/org.gnome.seahorse.Application.appdata.xml + +%changelog +* Fri Oct 25 2024 MSVSphere Packaging Team - 43.0-9 +- Rebuilt for MSVSphere 10 + +* Mon Aug 19 2024 Tomas Popela - 43.0-9 +- Fix the license which was validated by license-validate, but not by rpminspect + +* Mon Aug 19 2024 Tomas Popela - 43.0-8 +- Move to SPDX license format + +* Wed Jul 31 2024 David King - 43.0-7 +- Add GCC 14 patches from upstream (RHEL-45224) + +* Mon Jun 24 2024 Troy Dawson - 43.0-6 +- Bump release for June 2024 mass rebuild + +* Sat Jan 27 2024 Fedora Release Engineering - 43.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jul 22 2023 Fedora Release Engineering - 43.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Apr 14 2023 Florian Weimer - 43.0-3 +- Port to C99 + +* Sat Jan 21 2023 Fedora Release Engineering - 43.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Oct 27 2022 David King - 43.0-1 +- Update to 43.0 + +* Sat Jul 23 2022 Fedora Release Engineering - 42.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon May 23 2022 David King - 42.0-1 +- Update to 42.0 + +* Sat Jan 22 2022 Fedora Release Engineering - 41.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Sep 29 2021 Kalev Lember - 41.0-1 +- Update to 41.0 + +* Wed Sep 08 2021 Kalev Lember - 41~beta-1 +- Update to 41.beta + +* Fri Jul 23 2021 Fedora Release Engineering - 40.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Apr 13 2021 Kalev Lember - 40.0-1 +- Update to 40.0 + +* Fri Feb 19 2021 Kalev Lember - 40~alpha-1 +- Update to 40.alpha + +* Tue Feb 16 2021 Kalev Lember - 3.38.1-1 +- Update to 3.38.1 + +* Wed Jan 27 2021 Fedora Release Engineering - 3.38.0.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Nov 9 2020 Kalev Lember - 3.38.0.1-1 +- Update to 3.38.0.1 +- Switch to libhandy1 + +* Mon Aug 24 2020 Kalev Lember - 3.37.2-1 +- Update to 3.37.2 + +* Wed Jul 29 2020 Fedora Release Engineering - 3.37.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jun 23 2020 Kalev Lember - 3.37.1-1 +- Update to 3.37.1 + +* Mon Jun 22 2020 Kalev Lember - 3.36.2-1 +- Update to 3.36.2 + +* Wed Mar 11 2020 Kalev Lember - 3.36-1 +- Update to 3.36 + +* Tue Feb 18 2020 Kalev Lember - 3.35.91-1 +- Update to 3.35.91 + +* Mon Feb 03 2020 Kalev Lember - 3.35.90-1 +- Update to 3.35.90 + +* Thu Jan 30 2020 Fedora Release Engineering - 3.35.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jan 10 2020 Kalev Lember - 3.35.1-1 +- Update to 3.35.1 + +* Tue Jan 07 2020 Kalev Lember - 3.34.1-1 +- Update to 3.34.1 + +* Tue Oct 01 2019 Kalev Lember - 3.34-1 +- Update to 3.34 + +* Fri Jul 26 2019 Fedora Release Engineering - 3.32.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri May 17 2019 Kalev Lember - 3.32.2-1 +- Update to 3.32.2 + +* Mon May 06 2019 Kalev Lember - 3.32.1-1 +- Update to 3.32.1 + +* Tue Mar 12 2019 Kalev Lember - 3.32-1 +- Update to 3.32 + +* Tue Feb 19 2019 Kalev Lember - 3.31.91-2 +- Rebuilt against fixed atk (#1626575) + +* Tue Feb 19 2019 Kalev Lember - 3.31.91-1 +- Update to 3.31.91 + +* Sat Feb 02 2019 Fedora Release Engineering - 3.31.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Jan 09 2019 Kalev Lember - 3.31.1-1 +- Update to 3.31.1 + +* Tue Dec 18 2018 Kalev Lember - 3.30.1.1-1 +- Update to 3.30.1.1 + +* Fri Sep 07 2018 Kalev Lember - 3.30-1 +- Update to 3.30 +- Switch to the meson build system + +* Sat Jul 14 2018 Fedora Release Engineering - 3.20.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri Feb 09 2018 Fedora Release Engineering - 3.20.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 3.20.0-8 +- Remove unneeded ldconfig + +* Fri Jan 05 2018 Igor Gnatenko - 3.20.0-7 +- Remove obsolete scriptlets + +* Thu Aug 03 2017 Fedora Release Engineering - 3.20.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.20.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 3.20.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Sat Dec 10 2016 Igor Gnatenko - 3.20.0-3 +- Rebuild for gpgme 1.18 + +* Fri Sep 02 2016 Kalev Lember - 3.20.0-2 +- Drop old gnome-keyring-manager obsoletes +- Don't set group tags + +* Fri Mar 25 2016 Kalev Lember - 3.20.0-1 +- Update to 3.20.0 + +* Thu Feb 04 2016 Fedora Release Engineering - 3.19.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jan 20 2016 Kalev Lember - 3.19.4-1 +- Update to 3.19.4 + +* Mon Sep 28 2015 Kalev Lember - 3.18.0-2 +- Build with gnupg2 support + +* Mon Sep 28 2015 Kalev Lember - 3.18.0-1 +- Update to 3.18.0 + +* Tue Sep 15 2015 Richard Hughes - 3.17.4-1 +- Update to 3.17.4 + +* Fri Jun 19 2015 Fedora Release Engineering - 3.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue May 12 2015 Kalev Lember - 3.16.0-1 +- Update to 3.16.0 + +* Tue Mar 17 2015 Kalev Lember - 3.15.92-1 +- Update to 3.15.92 + +* Thu Feb 26 2015 David King - 3.15.90-1 +- Update to 3.15.90 +- Update URL +- Use license macro for COPYING and COPYING.LIB +- Use pkgconfig for BuildRequires +- Update man page glob in files section +- Validate AppData in check + +* Sat Feb 21 2015 Till Maas - 3.14.0-4 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Thu Nov 20 2014 Kalev Lember - 3.14.0-3 +- Fix SSH key generation (#1163660) + +* Sat Oct 25 2014 Stef Walter - 3.14.0-2 +- Seahorse is not compatible with gnupg2 for now due to incompatible + upstream changes. + +* Tue Sep 23 2014 Kalev Lember - 3.14.0-1 +- Update to 3.14.0 +- Drop last remnants of GConf schema handling + +* Sat Sep 20 2014 Kalev Lember - 3.12.2-7 +- Update mime scriptlets + +* Wed Aug 27 2014 Kalev Lember - 3.12.2-6 +- Backport a fix for a search provider crash + +* Mon Aug 18 2014 Fedora Release Engineering - 3.12.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jun 27 2014 Rex Dieter 3.12.2-4 +- drop needless scriptlet deps, %%postun: update-mime-database only on removal + +* Fri Jun 27 2014 Bastien Nocera 3.12.2-3 +- Don't run update-mime-database in post, we don't ship mime XML + files anymore. + +* Sun Jun 08 2014 Fedora Release Engineering - 3.12.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 15 2014 Kalev Lember - 3.12.2-1 +- Update to 3.12.2 + +* Sun Mar 23 2014 Kalev Lember - 3.12.0-1 +- Update to 3.12.0 + +* Mon Mar 17 2014 Richard Hughes - 3.11.92-1 +- Update to 3.11.92 + +* Sat Mar 08 2014 Richard Hughes - 3.11.91-1 +- Update to 3.11.91 + +* Mon Jan 13 2014 Richard Hughes - 3.10.2-1 +- Update to 3.10.2 + +* Tue Oct 29 2013 Richard Hughes - 3.10.1-1 +- Update to 3.10.1 + +* Wed Sep 25 2013 Kalev Lember - 3.10.0-1 +- Update to 3.10.0 + +* Tue Sep 03 2013 Kalev Lember - 3.9.91-1 +- Update to 3.9.91 + +* Fri Aug 30 2013 Kalev Lember - 3.9.90-2 +- Obsolete retired seahorse-plugins + +* Wed Aug 28 2013 Kalev Lember - 3.9.90-1 +- Update to 3.9.90 + +* Sun Aug 04 2013 Fedora Release Engineering - 3.9.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Sat May 04 2013 Kalev Lember - 3.9.1-1 +- Update to 3.9.1 + +* Tue Apr 16 2013 Richard Hughes - 3.8.1-1 +- Update to 3.8.1 + +* Tue Mar 26 2013 Kalev Lember - 3.8.0-1 +- Update to 3.8.0 + +* Fri Mar 8 2013 Matthias Clasen 0- 3.7.91-1 +- Update to 3.7.91 + +* Wed Feb 06 2013 Kalev Lember - 3.7.5-1 +- Update to 3.7.5 + +* Thu Jan 03 2013 Debarshi Ray - 3.7.2-1 +- Update to 3.7.2 + +* Fri Nov 09 2012 Kalev Lember - 3.7.1-1 +- Update to 3.7.1 + +* Tue Oct 16 2012 Kalev Lember - 3.6.1-1 +- Update to 3.6.1 + +* Wed Sep 26 2012 Matthias Clasen - 3.6.0-1 +- Update to 3.6.0 + +* Wed Sep 19 2012 Richard Hughes - 3.5.92-1 +- Update to 3.5.92 + +* Tue Sep 04 2012 Richard Hughes - 3.5.91-1 +- Update to 3.5.91 + +* Tue Aug 21 2012 Richard Hughes - 3.5.90-1 +- Update to 3.5.90 + +* Fri Jul 27 2012 Fedora Release Engineering - 3.5.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 17 2012 Richard Hughes - 3.5.4-1 +- Update to 3.5.4 + +* Mon Apr 16 2012 Richard Hughes - 3.4.1-1 +- Update to 3.4.1 + +* Thu Apr 12 2012 Kalev Lember - 3.4.0-2 +- Added self-obsoletes to assist with seahorse-sharing package split + +* Mon Mar 26 2012 Debarshi Ray - 3.4.0-1 +- Update to 3.4.0 + +* Wed Mar 21 2012 Kalev Lember - 3.3.92-1 +- Update to 3.3.92 + +* Thu Mar 15 2012 Matthias Clasen - 3.3.91-1 +- Update to 3.3.91 + +* Tue Feb 28 2012 Ray Strode 3.3.5-2 +- Drop fedora- vendor prefix + +* Tue Feb 7 2012 Matthias Clasen - 3.3.5-1 +- Update to 3.3.5 + +* Tue Jan 17 2012 Matthias Clasen - 3.3.4-1 +- Update to 3.3.4 + +* Sat Jan 14 2012 Fedora Release Engineering - 3.3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Dec 21 2011 Matthias Clasen - 3.3.3-1 +- Update to 3.3.3 + +* Wed Nov 2 2011 Matthias Clasen - 3.3.1-1 +- Update to 3.3.1 + +* Wed Oct 26 2011 Fedora Release Engineering - 3.2.1-2 +- Rebuilt for glibc bug#747377 + +* Wed Oct 19 2011 Matthias Clasen - 3.2.1-1 +- Update to 3.2.1 + +* Tue Sep 27 2011 Ray - 3.2.0-1 +- Update to 3.2.0 + +* Tue Sep 20 2011 Kalev Lember 3.1.92-1 +- Update to 3.1.92 + +* Wed Sep 07 2011 Kalev Lember 3.1.91-1 +- Update to 3.1.91 + +* Wed Aug 31 2011 Kalev Lember 3.1.90-1 +- Update to 3.1.90 +- Remove and obsolete seahorse-devel +- Switch to gsettings and obsolete the gconf schema + +* Mon Jul 25 2011 Matthew Barnes 3.1.4-1 +- Update to 3.1.4 + +* Mon May 9 2011 Tomas Bzatek 3.1.1-1 +- Update to 3.1.1 + +* Mon Apr 25 2011 Matthias Clasen 3.0.1-1 +- Update to 3.0.1 + +* Thu Apr 7 2011 Christopher Aillon 3.0.0-1 +- Update to 3.0.0 + +* Fri Mar 25 2011 Matthias Clasen 2.91.93-1 +- Update to 2.91.93 + +* Mon Mar 21 2011 Matthias Clasen 2.91.92-1 +- Update to 2.91.92 + +* Tue Mar 8 2011 Matthias Clasen 2.91.91-1 +- Update to 2.91.91 + +* Fri Feb 11 2011 Matthias Clasen 2.91.4-5 +- Rebuild against newer gtk + +* Wed Feb 09 2011 Fedora Release Engineering - 2.91.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Feb 2 2011 Matthias Clasen 2.91.4-3 +- Rebuild against newer gtk + +* Sun Jan 9 2011 Matthias Clasen 2.91.4-2 +- Rebuild against newer gtk3 + +* Mon Jan 3 2011 Tomas Bzatek 2.91.4-1 +- Update to 2.91.4 + +* Fri Dec 3 2010 Matthias Clasen 2.91.2-2 +- Rebuild against new gtk + +* Tue Nov 9 2010 Tomas Bzatek 2.91.2-1 +- Update to 2.91.2 + +* Wed Nov 3 2010 Matthias Clasen 2.91.2-0.1.gitc548f3b +- git snapshot +- build against libnotify 0.7.0 + +* Tue Nov 2 2010 Matthias Clasen 2.91.1.1-1 +- Update to 2.91.1.1 + +* Mon Oct 18 2010 Tomas Bzatek 2.91.1-1 +- Update to 2.91.1 + +* Wed Sep 29 2010 Tomas Bzatek 2.32.0-1 +- Update to 2.32.0 + +* Tue Sep 21 2010 Matthias Clasen - 2.31.91-2 +- Rebuild against newer gobject-introspection + +* Tue Aug 31 2010 Matthias Clasen - 2.31.91-1 +- Update to 2.31.91 + +* Thu Jul 15 2010 Colin Walters - 2.30.1-3 +- Rebuild with new gobject-introspection + +* Tue May 04 2010 Rex Dieter 2.30.1-2 +- Requires: pinentry-gui (#587328) + +* Tue Apr 27 2010 Tomas Bzatek 2.30.1-1 +- Update to 2.30.1 + +* Mon Apr 19 2010 Rahul Sundaram 2.30.0-2 +- Fix description to mention keyring manager +- Resolves rhbz#536945 + +* Tue Mar 30 2010 Matthias Clasen 2.30.0-1 +- Update to 2.30.0 + +* Mon Feb 22 2010 Tomas Bzatek 2.29.91-1 +- Update to 2.29.91 + +* Tue Feb 9 2010 Tomas Bzatek 2.29.90-1 +- Update to 2.29.90 +- Removed daemon autostart file (upstream) + +* Fri Jan 8 2010 Tomas Bzatek 2.29.4-2 +- Fix bad usage of g_strconcat: missing NULL (#553647) + +* Thu Jan 7 2010 Tomas Bzatek 2.29.4-1 +- Update to 2.29.4 + +* Mon Dec 14 2009 Matthias Clasen 2.29.3-2 +- Fix a wrong use of gdk_property_get that can lead to crashes + +* Mon Nov 30 2009 Tomas Bzatek 2.29.3-1 +- Update to 2.29.3 + +* Mon Nov 2 2009 Tomas Bzatek 2.29.1-1 +- Update to 2.29.1 + +* Tue Sep 22 2009 Tomas Bzatek 2.28.0-1 +- Update to 2.28.0 + +* Mon Sep 14 2009 Matthias Clasen - 2.27.92-1 +- Update to 2.27.92 + +* Wed Aug 26 2009 Matthias Clasen - 2.27.90-2 +- Make seahorse respect the button-images setting + +* Tue Aug 11 2009 Matthias Clasen - 2.27.90-1 +- Update to 2.27.90 + +* Thu Aug 6 2009 Matthias Clasen - 2.27.5-2 +- Bring the password tab back + +* Tue Jul 28 2009 Matthias Clasen - 2.27.5-1 +- Update to 2.27.5 + +* Mon Jul 27 2009 Matthias Clasen - 2.27.1-4 +- Drop unneeded direct deps + +* Sun Jul 26 2009 Fedora Release Engineering - 2.27.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jun 1 2009 Tomas Bzatek 2.27.1-2 +- Require pinentry-gtk (#474419) + +* Mon May 4 2009 Tomas Bzatek 2.27.1-1 +- Update to 2.27.1 + +* Sun Apr 12 2009 Matthias Clasen 2.26.1-1 +- Update to 2.26.1 +- See http://download.gnome.org/sources/seahorse/2.26/seahorse-2.26.1.news + +* Fri Apr 10 2009 Matthias Clasen 2.26.0-2 +- Fix directory ownership + +* Mon Mar 16 2009 Tomas Bzatek 2.26.0-1 +- Update to 2.26.0 + +* Mon Mar 2 2009 Tomas Bzatek 2.25.92-1 +- Update to 2.25.92 + +* Wed Feb 25 2009 Fedora Release Engineering - 2.25.91-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sat Feb 14 2009 Matthias Clasen 2.25.91-1 +- Update to 2.25.91 + +* Tue Feb 3 2009 Matthias Clasen 2.25.90-1 +- Update to 2.25.90 + +* Wed Jan 7 2009 Matthias Clasen 2.25.4-1 +- Update to 2.25.4 + +* Mon Dec 22 2008 Tomas Bzatek 2.25.3-1 +- Update to 2.25.3 + +* Tue Dec 2 2008 Matthias Clasen 2.25.1-3 +- Rebuild for pkg-config provides + +* Mon Dec 1 2008 Tomas Bzatek 2.25.1-2 +- Mark Seahorse as an official replacement for gnome-keyring-manager + +* Thu Nov 13 2008 Matthias Clasen 2.25.1-1 +- Update to 2.25.1 + +* Sun Oct 19 2008 Matthias Clasen 2.24.1-1 +- Update to 2.24.1 + +* Thu Oct 9 2008 Matthias Clasen 2.24.0-3 +- Save some space + +* Sun Sep 21 2008 Matthias Clasen 2.24.0-2 +- Update to 2.24.0 + +* Sun Sep 7 2008 Matthias Clasen 2.23.92-1 +- Update to 2.23.92 + +* Thu Sep 4 2008 Matthias Clasen 2.23.91-1 +- Update to 2.23.91 + +* Sat Aug 30 2008 Michel Salim 2.23.90-2 +- Patch configure to detect gpg2 binary + +* Sat Aug 23 2008 Matthias Clasen 2.23.90-1 +- Update to 2.23.90 + +* Tue Aug 5 2008 Matthias Clasen 2.23.6-1 +- Update to 2.23.6 +- Split off a -devel package + +* Tue Jul 22 2008 Matthias Clasen 2.23.5-1 +- Update to 2.23.5 + +* Mon Apr 7 2008 Matthias Clasen 2.22.1-1 +- Update to 2.22.1 + +* Mon Mar 10 2008 Matthias Clasen 2.22.0-1 +- Update to 2.22.0 + +* Tue Feb 26 2008 Matthias Clasen 2.21.92-1 +- Update to 2.21.92 + +* Fri Feb 15 2008 Matthias Clasen 2.21.90-2 +- Rebuild + +* Tue Jan 29 2008 Seth Vidal 2.21.90-1 +- 2.21.90 +- rebuild for new libsoup + + +* Mon Jan 7 2008 Seth Vidal 2.21.4-2 +- drop in seahorse-agent.sh to xinit - closes bug 427466 but will mean + that seahorse agent will start if it is installed - even on kde or xfce + desktops :( + +* Thu Jan 3 2008 Seth Vidal 2.21.4-1 +- upgrade to 2.21.4 + + +* Sat Dec 1 2007 Matt Domsch 2.21.3-1 +- upgrade to 2.21.3 +- enable avahi integration +- rpmlint cleanups: remove rpath, unneeded .so, tag config files + +* Wed Aug 22 2007 Seth Vidal +- fix license tag +- rebuild for fun! + +* Fri Jul 20 2007 Seth Vidal +- disable gedit plugin in rawhide, for now :( + +* Tue Jun 26 2007 Seth Vidal +- update to 1.0.1 + +* Sun Aug 13 2006 Seth Vidal +- re-enable gedit +- update to 0.8.1 + +* Tue Mar 7 2006 Seth Vidal +- added openldap-devel buildreq to hopefully close bug # 184124 + +* Thu Feb 23 2006 Seth Vidal +- Patch from John Thacker for rh bug #182694 + + +* Mon Jan 16 2006 Seth Vidal - 0.8-2 +- added configure patch for it to build +- disable gedit plugins until seahorse gets fixed to work with gedit 2.13+ + +* Wed Oct 26 2005 Seth Vidal - 0.8-1 +- 0.8 + +* Thu Jul 28 2005 Seth Vidal - 0.7.9-1 +- 0.7.9 + +* Wed May 25 2005 Jeremy Katz - 0.7.7-3 +- make sure all files are included +- BR nautilus-devel + +* Sun May 22 2005 Jeremy Katz - 0.7.7-2 +- rebuild on all arches + +* Thu May 5 2005 Seth Vidal 0.7.7-1 +- 0.7.7 + +* Tue Apr 19 2005 Seth Vidal 0.7.6-4 +- something innocuous to test on + +* Wed Apr 6 2005 Michael Schwendt +- rebuilt + +* Fri Feb 25 2005 Phillip Compton 0.7.6-2 +- desktop entry fixes. + +* Fri Feb 25 2005 Phillip Compton 0.7.6-1 +- 0.7.6. + +* Sun Nov 09 2003 Phillip Compton 0:0.7.3-0.fdr.5 +- BuildReq scrollkeeper. + +* Wed Oct 22 2003 Phillip Compton 0:0.7.3-0.fdr.4 +- Uncommented .la removal. + +* Sun Sep 21 2003 Phillip Compton 0:0.7.3-0.fdr.3 +- Grabbed new copy os source from upstream. +- Fixed path on Source0, to allow direct download. +- BuildReq desktop-file-utils. + +* Sun Sep 21 2003 Phillip Compton 0:0.7.3-0.fdr.2 +- Fixed file permission on source tarball. +- Fixed Group. +- Removed aesthetic comments. +- Brought more in line with current spec template. + +* Sun Aug 17 2003 Phillip Compton 0:0.7.3-0.fdr.1 +- Fedorification. +- Added path to Source0. +- Added URL. +- buildroot -> RPM_BUILD_ROOT. +- BuildReq libgnomeui-devel, eel2-devel, gpgme03-devel. +- BuildReq gettext. +- post Req GConf2. +- post/postun Req scrollkeeper. +- .la/.a removal. +- cosmetic changes. + +* Fri May 02 2003 Matthew Hall 0.7.3-1 +- 0.7.3 Release + +* Wed Apr 23 2003 Matthew Hall 0.7.1-3 +- Rebuilt against gpgme 0.3.15 + +* Sat Apr 12 2003 Matthew Hall 0.7.1-2 +- RedHat 9 Rebuild + +* Sun Jan 26 2003 Matthew Hall +- New Spec File +