$ git show --format=fuller --patch-with-stat --summary 754e2a60a0ba4e80cb4c1c589a415ef90f196a38
commit 754e2a60a0ba4e80cb4c1c589a415ef90f196a38
Author: mandian <mandian@users.noreply.github.com>
AuthorDate: Sun Feb 13 17:16:33 2022 +0100
Commit: mandian <mandian@users.noreply.github.com>
CommitDate: Sun Feb 13 17:16:33 2022 +0100
Initial release
---
.abf.yml | 2 +
password-gorilla-1.5.3.7-tclsh_version.patch | 10 ++
...rilla-1.5.3.7-unbundle_tcllib_uuid_module.patch | 160 +++++++++++++++++++++
password-gorilla.spec | 152 ++++++++++++++++++++
4 files changed, 324 insertions(+)
create mode 100644 .abf.yml
create mode 100644 password-gorilla-1.5.3.7-tclsh_version.patch
create mode 100644 password-gorilla-1.5.3.7-unbundle_tcllib_uuid_module.patch
create mode 100644 password-gorilla.spec
diff --git a/.abf.yml b/.abf.yml
new file mode 100644
index 0000000..c3dd6be
--- /dev/null
+++ b/.abf.yml
@@ -0,0 +1,2 @@
+sources:
+ password-gorilla-5d4df52ebcc0bf2d39551bc16552638cf3bbac6f.tar.gz: 442c5488b743eeae3fef55e1e587d973108bc189
diff --git a/password-gorilla-1.5.3.7-tclsh_version.patch b/password-gorilla-1.5.3.7-tclsh_version.patch
new file mode 100644
index 0000000..b2606ec
--- /dev/null
+++ b/password-gorilla-1.5.3.7-tclsh_version.patch
@@ -0,0 +1,10 @@
+--- a/sources/gorilla.tcl
++++ b/sources/gorilla.tcl
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ # the next line restarts using wish \
+-exec tclsh8.5 "$0" ${1+"$@"}
++exec tclsh8.6 "$0" ${1+"$@"}
+
+ #
+ # ----------------------------------------------------------------------
diff --git a/password-gorilla-1.5.3.7-unbundle_tcllib_uuid_module.patch b/password-gorilla-1.5.3.7-unbundle_tcllib_uuid_module.patch
new file mode 100644
index 0000000..f13361b
--- /dev/null
+++ b/password-gorilla-1.5.3.7-unbundle_tcllib_uuid_module.patch
@@ -0,0 +1,160 @@
+--- a/sources/gorilla.tcl
++++ b/sources/gorilla.tcl
+@@ -256,7 +256,7 @@
+ # Initialize the Tcl modules system to look into modules/ directory
+ ::tcl::tm::add [ file join $::gorilla::Dir modules ]
+
+-foreach package {Itcl pwsafe tooltip PWGprogress} {
++foreach package {Itcl pwsafe tooltip PWGprogress sha1} {
+ load-package $package
+ } ; unset package
+
+@@ -264,8 +264,8 @@
+ # If installed, we can use the uuid package (part of Tcllib) to generate
+ # UUIDs for new logins, but we don't depend on it.
+ #
+-
+-catch {package require uuid}
++#
++# catch {package require uuid}
+
+ # Detect whether or not the file containing download sites exists
+ set ::gorilla::hasDownloadsFile [ file exists [ file join $::gorilla::Dir downloads.txt ] ]
+@@ -2364,11 +2364,11 @@
+ set modified 0
+ set now [clock seconds]
+
+- if { [ dbget uuid $rn ] eq "" } {
+- if { ! [ catch { package present uuid } ] } {
+- dbset uuid $rn [uuid::uuid generate]
+- }
+- }
++# if { [ dbget uuid $rn ] eq "" } {
++# if { ! [ catch { package present uuid } ] } {
++# dbset uuid $rn [uuid::uuid generate]
++# }
++# }
+
+ foreach element [ list {*}$varlist notes ] {
+
+@@ -2404,6 +2404,9 @@
+ }
+
+ } ; # end foreach element
++
++ # update UUID to match current user and url field contents
++ dbset uuid $rn [gorilla::uuid [dbget user $rn][dbget url $rn]]
+
+ if { $modified } {
+ dbset last-modified $rn $now
+@@ -3666,11 +3669,15 @@
+ dbset group $newrn $default_group_name
+ }
+
+- if { ( "uuid" ni $columns_present )
+- && ( ! [ catch { package present uuid } ] ) } {
++# if { ( "uuid" ni $columns_present )
++# && ( ! [ catch { package present uuid } ] ) } {
+ # puts "setting a new uuid"
+- dbset uuid $newrn [uuid::uuid generate]
+- }
++# dbset uuid $newrn [uuid::uuid generate]
++# }
++
++ if { ( "uuid" ni $columns_present ) } {
++ dbset uuid $newrn [gorilla::uuid [dbget user $newrn][dbget url $newrn]]
++ }
+
+ if { "title" ni $columns_present } {
+ # puts "setting a default title"
+@@ -8639,6 +8646,90 @@
+
+ } ;# end proc gorilla::versionLookup
+
++# ----------------------------------------------------------------------
++
++# January 31, 2016 - Tcllib 1.17 has changed how it derives UUID
++# values. If it finds the 'nettool' package from Tcllib 1.17 it uses
++# 'nettool' to attempt to obtain machine information, specifically the
++# mac address of one or more network interfaces. However, on my dev
++# system, 'nettool' fails because it assumes that 'ifconfig' is in the
++# search PATH (it is not, /sbin is not in a regular user's PATH on my
++# systems), and even if it can find 'ifconfig' it assumes an output
++# format that my dev system's ifconfig does not produce, so UUID
++# generation fails. When UUID generation fails, addition of new
++# password records also fails. What this means is that relying on the
++# Tcllib UUID package for Gorilla makes for a fragile situation where
++# UUID generation may fail, dependent upon the particular system upon
++# which Gorillia is running. Therefore this change, which is to move
++# UUID generation into Gorilla. As well, Tcllib generated type 1
++# UUID's. This proc below generates type 5 UUID's. Type 5 UUID's have
++# a desirable property for Gorilla, which is stated in this quote from
++# RFC 4122 (for type 3 and type 5 UUID's):
++#
++# o The UUIDs generated at different times from the same name in the
++# same namespace MUST be equal.
++#
++# Therefore, for the 'name' field of these UUID's, Gorilla will use a
++# concatenation of the username and URL fields of a database record to
++# generate the UUID, and for a namespace, it will use a type 4 randomly
++# generated UUID as the namespace. This has the desirable property
++# that two database entries with the same username/URL combination will
++# have the same UUID, even if they are independently inserted into
++# different safes by separately running Gorilla instances. This should
++# allow for an updated PWSafe merge feature to detect movement of
++# entries between groups and replicate the move in a destination safe
++# when a source safe is merged.
++
++proc gorilla::uuid {name} {
++
++ # generate a type 5 (namespaced, sha1) UUID as defined by RFC 4122, using
++ # the parameter 'name' as the RFC name, and a hard coded UUID below as the
++ # RFC namespace
++
++ if {[string length $name]==0} {
++ # an empty input name returns the RFC 4122 Nil UUID
++ return 00000000-0000-0000-0000-000000000000
++ }
++
++ # This hex value below is an arbitrary type 4 (random) UUID generated from
++ # /dev/random as per RFC 4122 and is used as a namespace UUID
++
++ set namespace_uuid [binary format H* 3ed9561831aa550f719d5747869cc84a]
++
++ # this generation step mirrors the C code in RFC 4122 in the
++ # uuid_create_sha1_from_name() function
++
++ set token [::sha1::SHA1Init]
++ ::sha1::SHA1Update $token $namespace_uuid
++ ::sha1::SHA1Update $token $name
++ set hash [::sha1::SHA1Final $token]
++
++ set uuid_fields IuSuSucucua6
++
++ # pull apart the hash output into RFC 4122 fields so we can set the
++ # version and reserved bits as per the RFC - this mirrors the C code from
++ # RFC 4122 in the format_uuid_v3or5() function
++
++ binary scan $hash $uuid_fields \
++ time_low time_mid time_hi_and_version clk_seq_hi_res clk_seq_low node
++
++ # set the appropriate version as reserved bits as per the RFC
++ set time_hi_and_version [expr {($time_hi_and_version & 0x0fff) | (5<<12)}]
++ set clk_seq_hi_res [expr {($clk_seq_hi_res & 0x3f) | 0x80}]
++
++ # put the values back together into a binary representation of the uuid
++ # value
++ set uuid [binary format $uuid_fields \
++ $time_low $time_mid $time_hi_and_version $clk_seq_hi_res $clk_seq_low $node]
++
++ # and convert it to hex for output (f1->f5 ==> field1 -> field5)
++ binary scan $uuid H8H4H4H4H12 f1 f2 f3 f4 f5
++
++ return $f1-$f2-$f3-$f4-$f5
++} ;# end gorilla::uuid
++
++# ----------------------------------------------------------------------
++
+ #
+ # ----------------------------------------------------------------------
+ # Init
diff --git a/password-gorilla.spec b/password-gorilla.spec
new file mode 100644
index 0000000..55c1000
--- /dev/null
+++ b/password-gorilla.spec
@@ -0,0 +1,152 @@
+%define commit 5d4df52ebcc0bf2d39551bc16552638cf3bbac6f
+%define shortcommit %(c=%{commit}; echo ${c:0:7})
+
+%define sname gorilla
+
+# Latest version is quite old so actually pre-release
+# version actually it may be safey
+%define pre_release 1
+
+Summary: A tcl/tk password manager
+Name: password-%{sname}
+Version: 1.5.3.8
+Release: 0
+License: GPLv2+
+Group: File tools
+URL: https://github.com/zdia
+%if %{pre_release}
+Source0: https://github.com/zdia/%{sname}/archive/%{commit}/%{name}-%{commit}.tar.gz
+%else
+Source0: https://github.com/zdia/%{sname}/archive/v%{version}/%{name}-%{version}.tar.gz
+Patch0: %{name}-1.5.3.7-unbundle_tcllib_uuid_module.patch
+%endif
+BuildArch: noarch
+
+BuildRequires: docbook-to-man
+BuildRequires: imagemagick
+BuildRequires: librsvg
+BuildRequires: tk
+
+Requires: tcl
+Requires: tcl-tcllib
+Requires: tcl-tklib
+Requires: tk
+Requires: itcl
+
+%description
+A tcl/tk password manager.
+
+%files
+%{_bindir}/%{name}
+%dir %{_datadir}/%{name}/
+%{_datadir}/%{name}/*
+%{_iconsdir}/hicolor/*/apps/%{name}.png
+#%{_datadir}/pixmaps/%{name}.xpm
+%{_datadir}/applications/openmandriva-%{name}.desktop
+%doc README
+%doc sources/help.txt
+%doc sources/CHANGES.txt
+%doc sources/LICENSE.txt
+
+#---------------------------------------------------------------------------
+
+%prep
+%if %{pre_release}
+%setup -q -n %{sname}-%{commit}
+%else
+%setup -q -n %{sname}-%{version}
+%endif
+%autopatch -p1
+
+# fix version
+%if %{pre_release}
+ sed -i -e "s|{\$Revision: 1.5.3.7 \$}|\{\$Revision: %{version} pre-release \$}|" sources/gorilla.tcl
+%endif
+
+# launcher
+cat > %{name}.sh << EOF
+#!/bin/sh
+
+exec /usr/share/%{name}/%{sname}.tcl $@
+EOF
+
+%build
+# Nothing to build
+
+%install
+# launcher
+install -dm 0755 %{buildroot}%{_bindir}/
+install -pm 0755 %{name}.sh %{buildroot}%{_bindir}/%{name}
+
+# program
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/
+install -pm 0644 sources/*.tcl %{buildroot}%{_datadir}/%{name}/
+chmod 0755 %{buildroot}%{_datadir}/%{name}/%{sname}.tcl
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/modules/
+install -pm 0644 sources/modules/*.tm %{buildroot}%{_datadir}/%{name}/modules/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/blowfish/
+install -pm 0644 sources/blowfish/blowfish.tcl %{buildroot}%{_datadir}/%{name}/blowfish/
+install -pm 0644 sources/blowfish/pkgIndex.tcl %{buildroot}%{_datadir}/%{name}/blowfish/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/twofish/
+install -pm 0644 sources/twofish/twofish.tcl %{buildroot}%{_datadir}/%{name}/twofish/
+install -pm 0644 sources/twofish/pkgIndex.tcl %{buildroot}%{_datadir}/%{name}/twofish/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/pwsafe/
+install -pm 0644 sources/pwsafe/pwsafe*.tcl %{buildroot}%{_datadir}/%{name}/pwsafe/
+install -pm 0644 sources/pwsafe/pkgIndex.tcl %{buildroot}%{_datadir}/%{name}/pwsafe/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/msgs/
+install -pm 0644 sources/msgs/*msg %{buildroot}%{_datadir}/%{name}/msgs/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/msgs/help/
+install -pm 0644 sources/msgs/help/*msg %{buildroot}%{_datadir}/%{name}/msgs/help/
+install -pm 0644 sources/help.txt %{buildroot}%{_datadir}/%{name}/
+
+install -dm 0755 %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/application.gif %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/browse.gif %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/%{sname}-splash.gif %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/group.gif %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/login.gif %{buildroot}%{_datadir}/%{name}/pics/
+install -pm 0644 sources/pics/splash.gif %{buildroot}%{_datadir}/%{name}/pics/
+
+# manpage
+#FIXME: add manpage
+
+# .desktop file
+install -dm 0755 %{buildroot}%{_datadir}/applications/
+cat > %{buildroot}%{_datadir}/applications/openmandriva-%{name}.desktop << EOF
+[Desktop Entry]
+Name=%{name}
+Comment="lightweight password manager"
+Exec=%{name}
+Icon=%{name}
+Terminal=false
+Type=Application
+StartupNotify=false
+Categories=System;
+X-Vendor=OpenMandriva
+EOF
+
+# icons
+# FIXME: imagemagick produces empty images (maybe
+# a bug in inkskape maybe a bug in image)
+# rsvg-convert works properly for png only
+for d in 16 32 48 64 72 128 256
+do
+ install -dm 0755 %{buildroot}%{_iconsdir}/hicolor/${d}x${d}/apps/
+ rsvg-convert -f png -h ${d} -w ${d} sources/pics/vector-logo/%{sname}-logo.svg \
+ -o %{buildroot}%{_iconsdir}/hicolor/${d}x${d}/apps/%{name}.png
+# convert -background none -size "${d}x${d}" sources/pics/vector-logo/%{sname}-logo.svg \
+# %{buildroot}%{_iconsdir}/hicolor/${d}x${d}/apps/%{name}.png
+done
+#install -dm 0755 %{buildroot}%{_datadir}/pixmaps/
+#convert -size 32x32 sources/pics/vector-logo/%{sname}-logo.svg \
+# %{buildroot}%{_datadir}/pixmaps/%{name}.xpm
+
+%check
+# .desktop
+desktop-file-validate %{buildroot}%{_datadir}/applications/openmandriva-%{name}.desktop