guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/05: gnu: python-trezor-agent: Fix key generation with trezor-gpg init


From: guix-commits
Subject: 01/05: gnu: python-trezor-agent: Fix key generation with trezor-gpg init
Date: Sun, 28 Nov 2021 15:31:59 -0500 (EST)

ngz pushed a commit to branch master
in repository guix.

commit 25cb5bad5e2475a49e20a2da888652e0bd322530
Author: Attila Lendvai <attila@lendvai.name>
AuthorDate: Fri Sep 24 13:05:05 2021 +0200

    gnu: python-trezor-agent: Fix key generation with trezor-gpg init
    
    * gnu/packages/finance.scm (trezor-agent): Add comment on why the
    undoing of the wrapping is done, and also delete the irrelevant sideffect of
    the now undone wrapping.
    (python-trezor-agent): Add a patch that changes the python code to handle 
the
    argv[0] changed by the wrapping.
    * gnu/packages/patches/trezor-agent-fix-argv0.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Reference patch.
    
    Signed-off-by: Nicolas Goaziou <mail@nicolasgoaziou.fr>
---
 gnu/local.mk                                       |  1 +
 gnu/packages/finance.scm                           | 13 +++++++++--
 .../patches/python-trezor-agent-fix-argv0.patch    | 27 ++++++++++++++++++++++
 3 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index efe153f..b1eb41d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1680,6 +1680,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/python-pytorch-system-libraries.patch   \
   %D%/packages/patches/python-robotframework-source-date-epoch.patch \
   %D%/packages/patches/python-seaborn-kde-test.patch           \
+  %D%/packages/patches/python-trezor-agent-fix-argv0.patch     \
   %D%/packages/patches/python2-subprocess32-disable-input-test.patch   \
   %D%/packages/patches/python-unittest2-python3-compat.patch   \
   %D%/packages/patches/python-unittest2-remove-argparse.patch  \
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 00e3b7a..f4978a4 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -844,7 +844,8 @@ the Monero GUI client.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0q99vbfd3h85s8rnjipnmldixabqmmlk5w9karv6f0rhyi54f4zv"))))
+        (base32 "0q99vbfd3h85s8rnjipnmldixabqmmlk5w9karv6f0rhyi54f4zv"))
+       (patches (search-patches "python-trezor-agent-fix-argv0.patch"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1091,7 +1092,15 @@ the KeepKey Hardware Wallet.")
          (add-after 'wrap 'fixup-agent-py
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
-               ;; overwrite the wrapper with the real thing.
+               ;; The wrap phase also wraps trezor_agent.py (besides the
+               ;; public facing executable called trezor-agent). We need to
+               ;; undo that wrapping. The reason this is needed is that the
+               ;; python easy install generates a toplevel script (?) that
+               ;; messes with argv[0] and then re-opens the python
+               ;; module. This fails when the wrapped file is actually a shell
+               ;; script, not a python file.
+               (delete-file (string-append out "/bin/.trezor_agent.py-real"))
+               ;; Overwrite the wrapped one with the real thing.
                (install-file "./trezor_agent.py"
                              (string-append out "/bin"))
              #t))))))
diff --git a/gnu/packages/patches/python-trezor-agent-fix-argv0.patch 
b/gnu/packages/patches/python-trezor-agent-fix-argv0.patch
new file mode 100644
index 0000000..9462067
--- /dev/null
+++ b/gnu/packages/patches/python-trezor-agent-fix-argv0.patch
@@ -0,0 +1,27 @@
+diff --git a/libagent/gpg/__init__.py b/libagent/gpg/__init__.py
+index 3711bc8..67085de 100644
+--- a/libagent/gpg/__init__.py
++++ b/libagent/gpg/__init__.py
+@@ -122,15 +122,19 @@ def run_init(device_type, args):
+     verify_gpg_version()
+ 
+     # Prepare new GPG home directory for hardware-based identity
+-    device_name = os.path.basename(sys.argv[0]).rsplit('-', 1)[0]
+-    log.info('device name: %s', device_name)
++    exe_name = os.path.basename(sys.argv[0])
++    # drop the Guix wrapper's dot prefix from the name
++    if exe_name[0] == '.' and exe_name.endswith('-real'):
++        exe_name = exe_name[1:-5:]
++    device_name = exe_name.rsplit('-', 1)[0]
++    log.info('exe name: %s, device name: %s', exe_name, device_name)
+     homedir = args.homedir
+     if not homedir:
+         homedir = os.path.expanduser('~/.gnupg/{}'.format(device_name))
+ 
+     log.info('GPG home directory: %s', homedir)
+ 
+-    if os.path.exists(homedir):
++    if os.path.exists(homedir) and not args.subkey:
+         log.error('GPG home directory %s exists, '
+                   'remove it manually if required', homedir)
+         sys.exit(1)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]