gnucash master: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Tue Jun 9 20:19:50 EDT 2015


Updated	 via  https://github.com/Gnucash/gnucash/commit/9343ebe9 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/240e36f7 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/f1609376 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/073c7a69 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/79139c88 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5a4a8ac5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/f604348d (commit)
	from  https://github.com/Gnucash/gnucash/commit/9914a046 (commit)



commit 9343ebe9e4b92d769847427469ec73711ace6d75
Merge: 9914a04 240e36f
Author: John Ralls <jralls at ceridwen.us>
Date:   Tue Jun 9 14:51:21 2015 -0700

    Merge branch 'maint'


commit 240e36f73b2d0ab48aa97d4b69a7adc879dbcf2c
Author: Mike Evans <mikee at saxicola.co.uk>
Date:   Tue Jun 2 10:33:35 2015 +0100

    Bug 734183 - Set value to zero before calling gnc_exp_parser_parse.

diff --git a/src/plugins/bi_import/dialog-bi-import.c b/src/plugins/bi_import/dialog-bi-import.c
index 3c2a8b0..ec11ace 100644
--- a/src/plugins/bi_import/dialog-bi-import.c
+++ b/src/plugins/bi_import/dialog-bi-import.c
@@ -709,7 +709,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
         gncEntrySetDateEntered (entry, today);
         gncEntrySetDescription (entry, desc);
         gncEntrySetAction (entry, action);
-
+        value = gnc_numeric_zero();
         gnc_exp_parser_parse (quantity, &value, NULL);
         gncEntrySetQuantity (entry, value);
         acc = gnc_account_lookup_for_register (gnc_get_current_root_account (),
@@ -718,6 +718,7 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
         if (g_ascii_strcasecmp (type, "BILL") == 0)
         {
             gncEntrySetBillAccount (entry, acc);
+            value = gnc_numeric_zero();
             gnc_exp_parser_parse (price, &value, NULL);
             gncEntrySetBillPrice (entry, value);
             gncEntrySetBillTaxable (entry, text2bool (taxable));
@@ -730,11 +731,13 @@ gnc_bi_import_create_bis (GtkListStore * store, QofBook * book,
         {
             gncEntrySetNotes (entry, notes);
             gncEntrySetInvAccount (entry, acc);
+            value = gnc_numeric_zero();
             gnc_exp_parser_parse (price, &value, NULL);
             gncEntrySetInvPrice (entry, value);
             gncEntrySetInvTaxable (entry, text2bool (taxable));
             gncEntrySetInvTaxIncluded (entry, text2bool (taxincluded));
             gncEntrySetInvTaxTable (entry, gncTaxTableLookupByName (book, tax_table));
+            value = gnc_numeric_zero();
             gnc_exp_parser_parse (discount, &value, NULL);
             gncEntrySetInvDiscount (entry, value);
             gncEntrySetInvDiscountType (entry, text2disc_type (disc_type));

commit f160937681d0b8daa7a2548d574bb5ba5c63c9c9
Author: Geert Janssens <janssens-geert at telenet.be>
Date:   Sun May 31 10:07:44 2015 +0200

    Bug 746163 - Custom register colors (table rows) not recognized from .gtkrc-2.0.gnucash file
    
    Change the preference label and description to avoid confusion.
    Translators: this patch introduces two updated strings.

diff --git a/src/gnome-utils/gtkbuilder/dialog-preferences.glade b/src/gnome-utils/gtkbuilder/dialog-preferences.glade
index 0cc05ef..5f723d8 100644
--- a/src/gnome-utils/gtkbuilder/dialog-preferences.glade
+++ b/src/gnome-utils/gtkbuilder/dialog-preferences.glade
@@ -2465,13 +2465,13 @@ many months before the current month:</property>
                 </child>
                 <child>
                   <object class="GtkCheckButton" id="pref/general.register/use-theme-colors">
-                    <property name="label" translatable="yes">_Use system theme colors</property>
+                    <property name="label" translatable="yes">Don't _use GnuCash built-in colors</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">False</property>
                     <property name="has_tooltip">True</property>
-                    <property name="tooltip_markup">If checked, the system color theme will be applied to register windows. If clear, the original GnuCash register colors will be used.</property>
-                    <property name="tooltip_text" translatable="yes">If checked, the system color theme will be applied to register windows. If clear, the original GnuCash register colors will be used.</property>
+                    <property name="tooltip_markup">GnuCash uses a yellow/green theme by default for register windows. Check this if you want to use the system color theme instead.</property>
+                    <property name="tooltip_text" translatable="yes">GnuCash uses a yellow/green theme by default for register windows. Check this if you want to use the system color theme instead.</property>
                     <property name="use_underline">True</property>
                     <property name="draw_indicator">True</property>
                   </object>

commit 073c7a69adc8e496e7c04d737c93a417ba7b0905
Author: Joe Hansen <joedalton2 at yahoo.dk>
Date:   Fri May 29 22:46:57 2015 +0200

    Updated Danish translation
    
    Copied from the translation project

diff --git a/po/da.po b/po/da.po
index 4ce4fe0..de997dc 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1,5 +1,5 @@
 # Danish translation of Gnucash.
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Copyright (C) 2015 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gnucash package.
 # Kenneth Christiansen <kenneth at gnome.org>, 2000.
 # Keld Simonsen <keld at dkuug.dk>, 2000-2002.
@@ -19,6 +19,7 @@
 # bill -> regning
 # billing term -> betalingsbetingelse
 # book -> bog (regnskab)
+# business -> forretning (afklar om det skal være virksomhed)
 # Cash Flow -> pengestrømsopgørelse
 # charge -> betaling
 # Chart of Accounts -> kontoplan
@@ -95,7 +96,7 @@ msgstr ""
 "Project-Id-Version: gnucash 2.6.6\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2015-03-30 13:18-0700\n"
-"PO-Revision-Date: 2015-04-03 22:41+0200\n"
+"PO-Revision-Date: 2015-05-02 22:41+0200\n"
 "Last-Translator: Joe Hansen <joedalton2 at yahoo.dk>\n"
 "Language-Team: Danish <dansk at dansk-gruppen.dk>\n"
 "Language: da\n"
@@ -160,11 +161,11 @@ msgstr "Kundenummer"
 
 #: ../src/app-utils/business-prefs.scm:33
 msgid "The format string to use for generating customer numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge til oprettelse af kundenumre. Dette er en formatsstreng i printf-stil."
+msgstr "Formatstreng der anvendes ved oprettelse af kundenumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:34
 msgid "The previous customer number generated. This number will be incremented to generate the next customer number."
-msgstr "Det forrige kundenummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste kundenummer."
+msgstr "Det forrige oprettet kundenummer. Dette nummer vil blive trinvist øget for at oprette det næste kundenummer."
 
 #: ../src/app-utils/business-prefs.scm:35
 msgid "Employee number format"
@@ -176,11 +177,11 @@ msgstr "Medarbejdernummer"
 
 #: ../src/app-utils/business-prefs.scm:37
 msgid "The format string to use for generating employee numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge til oprettelse af medarbejdernummer. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng der anvendes ved oprettelse af medarbejdernumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:38
 msgid "The previous employee number generated. This number will be incremented to generate the next employee number."
-msgstr "Det forrige medarbejdernummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste medarbejdernummer."
+msgstr "Det forrige oprettet medarbejdernummer. Dette nummer vil blive trinvist øget for at oprette det næste medarbejdernummer."
 
 #: ../src/app-utils/business-prefs.scm:39
 msgid "Invoice number format"
@@ -192,11 +193,11 @@ msgstr "Fakturanummer"
 
 #: ../src/app-utils/business-prefs.scm:41
 msgid "The format string to use for generating invoice numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge for oprettelse af fakturanumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng der anvendes ved oprettelse af fakturanumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:42
 msgid "The previous invoice number generated. This number will be incremented to generate the next invoice number."
-msgstr "Det forrige fakturanummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste fakturanummer."
+msgstr "Det forrige oprettet fakturanummer. Dette nummer vil blive trinvist øget for at oprette det næste fakturanummer."
 
 #: ../src/app-utils/business-prefs.scm:43
 msgid "Bill number format"
@@ -208,11 +209,11 @@ msgstr "Regningsnummer"
 
 #: ../src/app-utils/business-prefs.scm:45
 msgid "The format string to use for generating bill numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge for oprettelse af regningsnumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng der anvendes ved oprettelse af regningsnumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:46
 msgid "The previous bill number generated. This number will be incremented to generate the next bill number."
-msgstr "Det forrige regningsnummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste regningsnummer."
+msgstr "Det forrige oprettet regningsnummer. Dette nummer vil blive trinvist øget for at oprette det næste regningsnummer."
 
 #: ../src/app-utils/business-prefs.scm:47
 msgid "Expense voucher number format"
@@ -224,11 +225,11 @@ msgstr "Udgiftsbilagsnummer"
 
 #: ../src/app-utils/business-prefs.scm:49
 msgid "The format string to use for generating expense voucher numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge for at oprette udgiftsbilagsnumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng er anvendes ved oprettelse af udgiftsbilagsnumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:50
 msgid "The previous expense voucher number generated. This number will be incremented to generate the next voucher number."
-msgstr "Det forrige udgiftsbilagsnummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste bilagsnummer."
+msgstr "Det forrige oprettet udgiftsbilagsnummer. Dette nummer vil blive trinvist øget for at oprette det næste bilagsnummer."
 
 #: ../src/app-utils/business-prefs.scm:51
 msgid "Job number format"
@@ -241,11 +242,11 @@ msgstr "Jobnummer"
 
 #: ../src/app-utils/business-prefs.scm:53
 msgid "The format string to use for generating job numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge for oprettelse af jobnumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng der anvendes ved oprettelse af jobnumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:54
 msgid "The previous job number generated. This number will be incremented to generate the next job number."
-msgstr "Det forrige jobnummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste jobnummer."
+msgstr "Det forrige oprettet jobnummer. Dette nummer vil blive trinvist øget for at oprette det næste jobnummer."
 
 #: ../src/app-utils/business-prefs.scm:55
 msgid "Order number format"
@@ -257,11 +258,11 @@ msgstr "Ordrenummer"
 
 #: ../src/app-utils/business-prefs.scm:57
 msgid "The format string to use for generating order numbers. This is a printf-style format string."
-msgstr "Formatstregnen at bruge for at oprette ordrenumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstregn der anvendes ved oprettelse af ordrenumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:58
 msgid "The previous order number generated. This number will be incremented to generate the next order number."
-msgstr "Det forrige ordrenummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste ordrenummer."
+msgstr "Det forrige oprettet ordrenummer. Dette nummer vil blive trinvist øget for at oprette det næste ordrenummer."
 
 #: ../src/app-utils/business-prefs.scm:59
 msgid "Vendor number format"
@@ -273,11 +274,11 @@ msgstr "Leverandørnummer"
 
 #: ../src/app-utils/business-prefs.scm:61
 msgid "The format string to use for generating vendor numbers. This is a printf-style format string."
-msgstr "Formatstrengen at bruge for oprettelse af leverandørnumre. Dette er en formatstreng i printf-stil."
+msgstr "Formatstreng er anvendes ved oprettelse af leverandørnumre. Dette er en formatstreng i printf-stil."
 
 #: ../src/app-utils/business-prefs.scm:62
 msgid "The previous vendor number generated. This number will be incremented to generate the next vendor number."
-msgstr "Det forrige leverandørnummer oprettet. Dette nummer vil blive trinvist øget for at oprette det næste leverandørnummer."
+msgstr "Det forrige oprettet leverandørnummer. Dette nummer vil blive trinvist øget for at oprette det næste leverandørnummer."
 
 #: ../src/app-utils/business-prefs.scm:72
 msgid "The name of your business."
@@ -305,12 +306,12 @@ msgstr "Din forretnings e-postadresse."
 
 #: ../src/app-utils/business-prefs.scm:102
 msgid "The URL address of your website."
-msgstr "URL-adressen på din internetside."
+msgstr "Din internetsides URL-adresse."
 
 # ' forkert på engelsk?
 #: ../src/app-utils/business-prefs.scm:107
 msgid "The ID for your company (eg 'Tax-ID: 00-000000)."
-msgstr "Id'et på dit firma (f.eks. tax-id: 00-000000)."
+msgstr "Dit firmas id (f.eks. tax-id: 00-000000)."
 
 #: ../src/app-utils/business-prefs.scm:112
 msgid "Default Customer TaxTable"
@@ -338,7 +339,7 @@ msgstr "Standarddatoformatet brugt til smarte udskrevne datoer."
 
 #: ../src/app-utils/business-prefs.scm:133
 msgid "Check to have trading accounts used for transactions involving more than one currency or commodity."
-msgstr "Kontroller for at der er anvendt handelskonti for transaktioner, der involverer mere end en valuta eller vare."
+msgstr "Afkryds for at handelskonti bruges til transaktioner, der involverer mere end en valuta eller vare."
 
 #: ../src/app-utils/business-prefs.scm:139
 msgid "Choose the number of days after which transactions will be read-only and cannot be edited anymore. This threshold is marked by a red line in the account register windows. If zero, all transactions can be edited and none are read-only."
@@ -346,7 +347,7 @@ msgstr "Vælg antallet af dage hvorefter transaktioner vil være skrivebeskyttet
 
 #: ../src/app-utils/business-prefs.scm:150
 msgid "Check to have split action field used in registers for 'Num' field in place of transaction number; transaction number shown as 'T-Num' on second line of register. Has corresponding effect on business features, reporting and imports/exports."
-msgstr "Kontroller for at have del handling-feltet brugt i kassekladder for »Num«-feltet i stedet for transaktionsnummeret; transaktionsnummer vises som »T-Num« på den anden linje af kladden. Har tilsvarende effekt på forrentingsfunktioner, rapportering og import/eksport."
+msgstr "Afkryds for at have del handling-feltet brugt i kassekladder for »Num«-feltet i stedet for transaktionsnummeret; transaktionsnummer vises som »T-Num« på den anden linje af kladden. Har tilsvarende effekt på forrentingsfunktioner, rapportering og import/eksport."
 
 #: ../src/app-utils/business-prefs.scm:158
 msgid "Budget to be used when none has been otherwise specified."
@@ -424,15 +425,15 @@ msgstr "Regnskabsperiodens start"
 
 #: ../src/app-utils/date-utilities.scm:877
 msgid "First day of the accounting period, as set in the global preferences."
-msgstr "Første dag for regnskabsperioden, som angivet under globale præferencer."
+msgstr "Første dag i regnskabsperioden, som angivet under globale præferencer."
 
 #: ../src/app-utils/date-utilities.scm:881
 msgid "End of accounting period"
-msgstr "Regnskabsperiodens slutning"
+msgstr "Regnskabsperiodens afslutning"
 
 #: ../src/app-utils/date-utilities.scm:884
 msgid "Last day of the accounting period, as set in the global preferences."
-msgstr "Sidste dag for regnskabsperioden, som angivet under globale præferencer."
+msgstr "Sidste dag i regnskabsperioden, som angivet under globale præferencer."
 
 #: ../src/app-utils/date-utilities.scm:888
 #: ../src/gnome-utils/gnc-period-select.c:71
@@ -472,7 +473,7 @@ msgstr "Sidste dag i forrige måned."
 
 #: ../src/app-utils/date-utilities.scm:916
 msgid "Start of next month"
-msgstr "Start på næste måned"
+msgstr "Begyndelsen af næste måned"
 
 #: ../src/app-utils/date-utilities.scm:919
 msgid "First day of the next month."
@@ -509,7 +510,7 @@ msgstr "Start af forrige kvartal"
 
 #: ../src/app-utils/date-utilities.scm:947
 msgid "First day of the previous quarterly accounting period."
-msgstr "Første dag for den forrige kvartalsmæssige regnskabsperiode."
+msgstr "Første dag i den forrige kvartalsmæssige regnskabsperiode."
 
 #: ../src/app-utils/date-utilities.scm:951
 #: ../src/gnome-utils/gnc-period-select.c:90
@@ -518,15 +519,15 @@ msgstr "Slutningen af forrige kvartal."
 
 #: ../src/app-utils/date-utilities.scm:954
 msgid "Last day of previous quarterly accounting period."
-msgstr "Sidste dag for forrige kvartalsmæssige regnskabsperiode."
+msgstr "Sidste dag i forrige kvartalsmæssige regnskabsperiode."
 
 #: ../src/app-utils/date-utilities.scm:958
 msgid "Start of next quarter"
-msgstr "Starten af næste kvartal"
+msgstr "Begyndelsen af næste kvartal"
 
 #: ../src/app-utils/date-utilities.scm:961
 msgid "First day of the next quarterly accounting period."
-msgstr "Første dag for næste kvartalsmæssige regnskabsperiode."
+msgstr "Første dag i næste kvartalsmæssige regnskabsperiode."
 
 #: ../src/app-utils/date-utilities.scm:965
 msgid "End of next quarter"
@@ -534,7 +535,7 @@ msgstr "Slutningen af næste kvartal"
 
 #: ../src/app-utils/date-utilities.scm:968
 msgid "Last day of next quarterly accounting period."
-msgstr "Sidste dag for næste kvartalsmæssige regnskabsperiode."
+msgstr "Sidste dag i næste kvartalsmæssige regnskabsperiode."
 
 #. CY Strings
 #: ../src/app-utils/date-utilities.scm:972
@@ -2948,7 +2949,7 @@ msgstr "Smart faktura"
 #: ../src/import-export/dialog-import.glade.h:1
 #: ../src/import-export/qif-imp/dialog-account-picker.glade.h:1
 msgid "Preferences"
-msgstr "Indstillinger"
+msgstr "Præferencer"
 
 #: ../src/business/business-gnome/gtkbuilder/business-prefs.glade.h:6
 msgid "<b>Invoices</b>"
@@ -6141,7 +6142,7 @@ msgstr "Gem ændringer til %s?"
 #: ../src/gnome/gnc-plugin-page-register2.c:1617
 #: ../src/gnome/gnc-plugin-page-register.c:1548
 msgid "This register has pending changes to a transaction. Would you like to save the changes to this transaction, discard the transaction, or cancel the operation?"
-msgstr "Denne kassekladde har igangværende ændringer til en transaktion. Vil du gemme ændringerne til denne transaktion, fjerne transaktionen eller afbryde operationen?"
+msgstr "Denne kassekladde har igangværende ændringer til en transaktion. Vil du gemme ændringerne til denne transaktion, fjerne transaktionen eller afbryde handlingen?"
 
 #: ../src/gnome/gnc-plugin-page-register2.c:1620
 #: ../src/gnome/gnc-plugin-page-register.c:1551
@@ -6557,7 +6558,7 @@ msgstr ""
 
 #: ../src/gnome/gschemas/org.gnucash.dialogs.checkprinting.gschema.xml.in.in.h:5
 msgid "Number of checks to print on the first page."
-msgstr "Antallet af check at udskrive på den første side."
+msgstr "Antallet af check der udskrives på den første side."
 
 #: ../src/gnome/gschemas/org.gnucash.dialogs.checkprinting.gschema.xml.in.in.h:6
 msgid "Date format to use"

commit 79139c88691ff0c275c7f478fae145bb3f6ee827
Author: Geert Janssens <janssens-geert at telenet.be>
Date:   Sat May 16 10:44:59 2015 +0200

    Fix hidden panes in lot viewer

diff --git a/src/gnome/gtkbuilder/dialog-lot-viewer.glade b/src/gnome/gtkbuilder/dialog-lot-viewer.glade
index 739391e..bac27a6 100644
--- a/src/gnome/gtkbuilder/dialog-lot-viewer.glade
+++ b/src/gnome/gtkbuilder/dialog-lot-viewer.glade
@@ -172,7 +172,7 @@
               </object>
               <packing>
                 <property name="resize">True</property>
-                <property name="shrink">True</property>
+                <property name="shrink">False</property>
               </packing>
             </child>
             <child>
@@ -340,7 +340,7 @@
               </object>
               <packing>
                 <property name="resize">True</property>
-                <property name="shrink">True</property>
+                <property name="shrink">False</property>
               </packing>
             </child>
           </object>

commit 5a4a8ac5d6e038e8ce87a398e43b43998194e667
Author: Geert Janssens <janssens-geert at telenet.be>
Date:   Fri May 8 21:43:40 2015 +0200

    Bug 746873 - Gnucash asks sql passwords before wallet password
    
    Work around a bug in libsecret. Under certain conditions
    libsecret will silently fail to find a password even though
    it is stored. The workaround uses another interface call
    to force unlocking the secret store which works around the bug.
    This workaround should be removed once a fix for
    https://bugzilla.gnome.org/show_bug.cgi?id=748625
    will be commonly available.

diff --git a/src/gnome-utils/gnc-keyring.c b/src/gnome-utils/gnc-keyring.c
index d6eaa23..5c91e06 100644
--- a/src/gnome-utils/gnc-keyring.c
+++ b/src/gnome-utils/gnc-keyring.c
@@ -180,6 +180,24 @@ gboolean gnc_keyring_get_password ( GtkWidget *parent,
     *password = NULL;
 
 #ifdef HAVE_LIBSECRET
+    /* Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=746873
+     * and by extension for https://bugzilla.gnome.org/show_bug.cgi?id=748625
+     * Store a dummy password and delete it again. This forces libsecret
+     * to open the keychain, where only a call to secret_password_lookup_sync
+     * sometimes fails to do so. More details can be found in the bug reports
+     * referenced above. */
+    secret_password_store_sync (SECRET_SCHEMA_GNUCASH, SECRET_COLLECTION_DEFAULT,
+                                "Dummy password", "dummy", NULL, &error,
+                                "protocol", "gnucash",
+                                "server", "gnucash",
+                                "user", "gnucash",
+                                NULL);
+    secret_password_clear_sync (SECRET_SCHEMA_GNUCASH, NULL, &error,
+                                "protocol", "gnucash",
+                                "server", "gnucash",
+                                "user", "gnucash",
+                                NULL);
+
     /* Note: only use the port attribute if it  was set by the user. */
     if (port == 0)
         libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_GNUCASH, NULL, &error,

commit f604348d9b1bc9bb715157c4f7c621358e6daf54
Author: Geert Janssens <janssens-geert at telenet.be>
Date:   Tue Apr 28 10:38:37 2015 +0200

    Bug 746873 - Gnucash asks sql passwords before wallet password
    
    If libsecret is available use it to search for both
    libsecret based passwords as gnome-keyring based ones.
    This catches the situation where a password was stored
    earlier using gnome-keyring, while the user is now trying
    to retrieve it on a system that only has libsecret available.
    This used to fail because gnucash depended on gnome-keyring
    to be present in that situation.

diff --git a/src/gnome-utils/gnc-keyring.c b/src/gnome-utils/gnc-keyring.c
index 9a1e16f..d6eaa23 100644
--- a/src/gnome-utils/gnc-keyring.c
+++ b/src/gnome-utils/gnc-keyring.c
@@ -28,8 +28,7 @@
 #include "gnc-keyring.h"
 #ifdef HAVE_LIBSECRET
 #include <libsecret/secret.h>
-#endif
-#if HAVE_GNOME_KEYRING
+#elif HAVE_GNOME_KEYRING
 #define GNOME_KEYRING_DEPRECATED
 #define GNOME_KEYRING_DEPRECATED_FOR(x)
 #include <gnome-keyring.h>
@@ -77,13 +76,21 @@ void gnc_keyring_set_password (const gchar *access_method,
 
   label = g_strdup_printf("GnuCash password for %s://%s@%s", access_method, user, server);
 
-  secret_password_store_sync (SECRET_SCHEMA_GNUCASH, SECRET_COLLECTION_DEFAULT,
-                            label, password, NULL, &error,
-                            "protocol", access_method,
-                            "server", server,
-                            "port", port,
-                            "user", user,
-                            NULL);
+  if (port == 0)
+    secret_password_store_sync (SECRET_SCHEMA_GNUCASH, SECRET_COLLECTION_DEFAULT,
+                                label, password, NULL, &error,
+                                "protocol", access_method,
+                                "server", server,
+                                "user", user,
+                                NULL);
+  else
+    secret_password_store_sync (SECRET_SCHEMA_GNUCASH, SECRET_COLLECTION_DEFAULT,
+                                label, password, NULL, &error,
+                                "protocol", access_method,
+                                "server", server,
+                                "port", port,
+                                "user", user,
+                                NULL);
 
   g_free(label);
 
@@ -117,7 +124,7 @@ void gnc_keyring_set_password (const gchar *access_method,
      * distinguish between these two.
      */
     // FIXME I'm not sure this works if a password was already in the keychain
-    //       I may have to do a lookup first and if it exists, run some update
+    //       I may have to do a lookup first and if it exists, run some
     //       update function instead
     status = SecKeychainAddInternetPassword ( NULL, /* keychain */
              strlen(server), server,                /* servername */
@@ -152,11 +159,11 @@ gboolean gnc_keyring_get_password ( GtkWidget *parent,
                                     gchar **password)
 {
     gboolean password_found = FALSE;
+    gchar *db_path, *heading;
 #ifdef HAVE_LIBSECRET
     GError* error = NULL;
     char* libsecret_password;
-#endif
-#if HAVE_GNOME_KEYRING
+#elif HAVE_GNOME_KEYRING
     GnomeKeyringResult  gkr_result;
     GList *found_list = NULL;
     GnomeKeyringNetworkPasswordData *found;
@@ -173,55 +180,101 @@ gboolean gnc_keyring_get_password ( GtkWidget *parent,
     *password = NULL;
 
 #ifdef HAVE_LIBSECRET
+    /* Note: only use the port attribute if it  was set by the user. */
+    if (port == 0)
+        libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_GNUCASH, NULL, &error,
+            "protocol", access_method,
+            "server", server,
+            "user", *user,
+            NULL);
+    else
+        libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_GNUCASH, NULL, &error,
+            "protocol", access_method,
+            "server", server,
+            "port", port,
+            "user", *user,
+            NULL);
+
+    if (libsecret_password != NULL) {
+        *password = g_strdup (libsecret_password);
+        secret_password_free (libsecret_password);
+        return TRUE;
+    }
+
+    /* No password found yet. Perhaps it was written with a port equal to 0.
+     * Gnucash versions prior to 2.6.7 did this unfortunately... */
     libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_GNUCASH, NULL, &error,
         "protocol", access_method,
         "server", server,
-        "port", port,
+        "port", 0,
         "user", *user,
         NULL);
 
-    if (libsecret_password == NULL) {
-        if (error != NULL) {
-            PWARN ("libsecret access failed: %s.", error->message);
-            g_error_free(error);
-        }
-    } else {
-        password_found = TRUE;
+    if (libsecret_password != NULL) {
         *password = g_strdup (libsecret_password);
         secret_password_free (libsecret_password);
+
+        /* Ok, got an password with 0 port.
+           Store a copy in a more recent gnucash style. */
+        gnc_keyring_set_password(access_method, server, port, service, *user, *password);
+        return TRUE;
     }
-#endif /* HAVE_LIBSECRET */
 
-#if HAVE_GNOME_KEYRING
-    if (password_found == FALSE) {
-        gkr_result = gnome_keyring_find_network_password_sync
-                     ( *user, NULL, server, service,
-                       access_method, NULL, port, &found_list );
+    /* No password was found while querying libsecret using the gnucash schema,
+       Look for a password stored via gnome-keyring instead */
+    if (port == 0)
+        libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_COMPAT_NETWORK, NULL, &error,
+            "protocol", access_method,
+            "server", server,
+            "object", service,
+            "user", *user,
+            NULL);
+    else
+        libsecret_password = secret_password_lookup_sync (SECRET_SCHEMA_COMPAT_NETWORK, NULL, &error,
+            "protocol", access_method,
+            "server", server,
+            "port", port,
+            "object", service,
+            "user", *user,
+            NULL);
 
-        if (gkr_result == GNOME_KEYRING_RESULT_OK)
-        {
-            found = (GnomeKeyringNetworkPasswordData *) found_list->data;
-            if (found->password)
-                *password = g_strdup(found->password);
-            password_found = TRUE;
-        }
-        else
-            PWARN ("Gnome-keyring access failed: %s.",
-                   gnome_keyring_result_to_message(gkr_result));
+    if (libsecret_password != NULL) {
+        *password = g_strdup (libsecret_password);
+        secret_password_free (libsecret_password);
 
-        gnome_keyring_network_password_list_free(found_list);
+        /* Ok, got an old gnome-keyring password.
+         * Store a copy of it in a libsecret compatible format. */
+        gnc_keyring_set_password(access_method, server, port, service, *user, *password);
+        return TRUE;
     }
-#endif /* HAVE_GNOME_KEYRING */
 
-#if defined(HAVE_LIBSECRET) && defined(HAVE_GNOME_KEYRING)
-    /* If we were not able to retrieve the password with libsecret and the new
-     * schema and libgnome-keyring was successful to retrieve the password using
-     * the old schema, we immediatly store it in the new schema.
-     */
-    if (libsecret_password == NULL && password_found == TRUE) {
-        gnc_keyring_set_password(access_method, server, port, service, *user, *password);
+    /* Something went wrong while attempting to access libsecret
+     * Log the error message and carry on... */
+    if (error != NULL) {
+        PWARN ("libsecret access failed: %s.", error->message);
+        g_error_free(error);
     }
-#endif /* HAVE_LIBSECRET && HAVE_GNOME_KEYRING */
+
+#elif HAVE_GNOME_KEYRING
+    gkr_result = gnome_keyring_find_network_password_sync
+                    ( *user, NULL, server, service,
+                    access_method, NULL, port, &found_list );
+
+    if (gkr_result == GNOME_KEYRING_RESULT_OK)
+    {
+        found = (GnomeKeyringNetworkPasswordData *) found_list->data;
+        if (found->password)
+            *password = g_strdup(found->password);
+        gnome_keyring_network_password_list_free(found_list);
+        return TRUE;
+    }
+
+    /* Something went wrong while attempting to access libsecret
+     * Log the error message and carry on... */
+    PWARN ("Gnome-keyring access failed: %s.",
+            gnome_keyring_result_to_message(gkr_result));
+    gnome_keyring_network_password_list_free(found_list);
+#endif /* HAVE_LIBSECRET or HAVE_GNOME_KEYRING */
 
 #ifdef HAVE_OSX_KEYCHAIN
     /* mysql and postgres aren't valid protocols on Mac OS X.
@@ -244,8 +297,8 @@ gboolean gnc_keyring_get_password ( GtkWidget *parent,
         if ( status == noErr )
         {
             *password = g_strndup(password_data, password_length);
-            password_found = TRUE;
             SecKeychainItemFreeContent(NULL, password_data);
+            return TRUE;
         }
         else
         {
@@ -258,46 +311,42 @@ gboolean gnc_keyring_get_password ( GtkWidget *parent,
     }
 #endif /* HAVE_OSX_KEYCHAIN */
 
-    if ( !password_found )
+    /* If we got here, either no proper password store is
+        * available on this system, or we couldn't retrieve
+        * a password from it. In both cases, just ask the user
+        * to enter one
+        */
+
+    if ( port == 0 )
+        db_path = g_strdup_printf ( "%s://%s/%s", access_method, server, service );
+    else
+        db_path = g_strdup_printf ( "%s://%s:%d/%s", access_method, server, port, service );
+    heading = g_strdup_printf ( /* Translators: %s is a path to a database or any other url,
+                like mysql://user@server.somewhere/somedb, http://www.somequotes.com/thequotes */
+                    _("Enter a user name and password to connect to: %s"),
+                    db_path );
+
+    password_found = gnc_get_username_password ( parent, heading,
+                        *user, NULL,
+                        user, password );
+    g_free ( db_path );
+    g_free ( heading );
+
+    if ( password_found )
     {
-        /* If we got here, either no proper password store is
-         * available on this system, or we couldn't retrieve
-         * a password from it. In both cases, just ask the user
-         * to enter one
-         */
-        gchar *db_path, *heading;
-
-        if ( port == 0 )
-            db_path = g_strdup_printf ( "%s://%s/%s", access_method, server, service );
-        else
-            db_path = g_strdup_printf ( "%s://%s:%d/%s", access_method, server, port, service );
-        heading = g_strdup_printf ( /* Translators: %s is a path to a database or any other url,
-                 like mysql://user@server.somewhere/somedb, http://www.somequotes.com/thequotes */
-                      _("Enter a user name and password to connect to: %s"),
-                      db_path );
-
-        password_found = gnc_get_username_password ( parent, heading,
-                         *user, NULL,
-                         user, password );
-        g_free ( db_path );
-        g_free ( heading );
-
-        if ( password_found )
-        {
-            /* User entered new user/password information
-             * Let's try to add it to a password store.
-             */
-            gchar *newuser = g_strdup( *user );
-            gchar *newpassword = g_strdup( *password );
-            gnc_keyring_set_password ( access_method,
-                                       server,
-                                       port,
-                                       service,
-                                       newuser,
-                                       newpassword );
-            g_free ( newuser );
-            g_free ( newpassword );
-        }
+        /* User entered new user/password information
+            * Let's try to add it to a password store.
+            */
+        gchar *newuser = g_strdup( *user );
+        gchar *newpassword = g_strdup( *password );
+        gnc_keyring_set_password ( access_method,
+                                    server,
+                                    port,
+                                    service,
+                                    newuser,
+                                    newpassword );
+        g_free ( newuser );
+        g_free ( newpassword );
     }
 
     return password_found;



Summary of changes:
 po/da.po                                           |  69 +++---
 src/gnome-utils/gnc-keyring.c                      | 239 +++++++++++++--------
 .../gtkbuilder/dialog-preferences.glade            |   6 +-
 src/gnome/gtkbuilder/dialog-lot-viewer.glade       |   4 +-
 src/plugins/bi_import/dialog-bi-import.c           |   5 +-
 5 files changed, 197 insertions(+), 126 deletions(-)



More information about the gnucash-changes mailing list