From 5b2549fea1f91093d6f78436ae8565b978c69473 Mon Sep 17 00:00:00 2001 From: gkc Date: Tue, 30 Jan 2024 12:58:31 +0000 Subject: [PATCH 1/4] fix: remove assumption in install.sh that the current user is a sudoer fix: fix buggy code I added to install_single_binary to (1) remove $binary.old if it exists (2) rename current $binary to $binary.old --- .../dart/sshnoports/bundles/shell/install.sh | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/dart/sshnoports/bundles/shell/install.sh b/packages/dart/sshnoports/bundles/shell/install.sh index a3a03b9fe..39372f134 100755 --- a/packages/dart/sshnoports/bundles/shell/install.sh +++ b/packages/dart/sshnoports/bundles/shell/install.sh @@ -5,6 +5,7 @@ is_root() { [ "$(id -u)" -eq 0 ] } +user_home=$HOME define_env() { script_dir="$(dirname -- "$( readlink -f -- "$0"; )")" bin_dir="/usr/local/bin" @@ -13,11 +14,12 @@ define_env() { user="$SUDO_USER" if [ -z "$user" ]; then user="root" + else # we are sudo-ing + user_home=$(sudo -u "$user" sh -c 'echo $HOME') fi else user="$USER" fi - user_home=$(sudo -u "$user" sh -c 'echo $HOME') user_bin_dir="$user_home/.local/bin" user_sshnpd_dir="$user_home/.sshnpd" user_log_dir="$user_sshnpd_dir/logs" @@ -93,9 +95,21 @@ install_single_binary() { mkdir -p "$dest" if test -f "$dest/$1"; then if test -f "$dest/$1.old"; then - rm -f "$dest/$1.old" || echo "Failed to remove $dest/$1.old - aborting" && exit 1 + if rm -f "$dest/$1.old" + then + echo "=> Removed $dest/$1.old" + else + echo "Failed to remove $dest/$1.old - aborting" + exit 1 + fi + fi + if mv "$dest/$1" "$dest/$1.old" + then + echo "=> Renamed existing binary $dest/$1 to $dest/$1.old" + else + echo "Failed to rename $dest/$1 to $dest/$1.old - aborting" + exit 1 fi - mv "$dest/$1" "$dest/$1.old" || echo "Failed to rename $dest/$1 to $dest/$1.old - aborting" && exit 1 fi cp -f "$script_dir/$1" "$dest/$1" @@ -103,7 +117,7 @@ install_single_binary() { if is_root & ! [ -f "$user_bin_dir/$1" ] ; then mkdir -p "$user_bin_dir" ln -sf "$dest/$1" "$user_bin_dir/$1" - echo "=> Linked $user_bin_dir/$1 to $dest" + echo "=> Linked $user_bin_dir/$1 to $dest/$1" fi } From 01511324f7288a04679be0b3d7426ba69cdd43ab Mon Sep 17 00:00:00 2001 From: gkc Date: Tue, 30 Jan 2024 13:13:25 +0000 Subject: [PATCH 2/4] docs: make comment more readable --- packages/dart/sshnoports/bundles/shell/install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/dart/sshnoports/bundles/shell/install.sh b/packages/dart/sshnoports/bundles/shell/install.sh index 39372f134..84a335dc1 100755 --- a/packages/dart/sshnoports/bundles/shell/install.sh +++ b/packages/dart/sshnoports/bundles/shell/install.sh @@ -14,7 +14,9 @@ define_env() { user="$SUDO_USER" if [ -z "$user" ]; then user="root" - else # we are sudo-ing + else + # we are root, but via sudo + # so get home directory of SUDO_USER user_home=$(sudo -u "$user" sh -c 'echo $HOME') fi else From a3ca1129c6cbc4d497593c84040404e409b1522e Mon Sep 17 00:00:00 2001 From: gkc Date: Tue, 30 Jan 2024 13:32:29 +0000 Subject: [PATCH 3/4] chore(style): ran dart format --- .../lib/src/common/at_ssh_key_util/local_ssh_key_util.dart | 4 ++-- .../test/sshnp/util/sshnpd_channel/sshnpd_channel_test.dart | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/dart/noports_core/lib/src/common/at_ssh_key_util/local_ssh_key_util.dart b/packages/dart/noports_core/lib/src/common/at_ssh_key_util/local_ssh_key_util.dart index 24bfd8928..fccaeb73b 100644 --- a/packages/dart/noports_core/lib/src/common/at_ssh_key_util/local_ssh_key_util.dart +++ b/packages/dart/noports_core/lib/src/common/at_ssh_key_util/local_ssh_key_util.dart @@ -57,8 +57,8 @@ class LocalSshKeyUtil implements AtSshKeyUtil { ]).catchError((e) => throw e); await Future.wait([ - files[0].writeAsString(keyPair.privateKeyContents), - files[1].writeAsString(keyPair.publicKeyContents), + files[0].writeAsString(keyPair.privateKeyContents), + files[1].writeAsString(keyPair.publicKeyContents), ]).catchError((e) => throw e); if (!Platform.isWindows) { diff --git a/packages/dart/noports_core/test/sshnp/util/sshnpd_channel/sshnpd_channel_test.dart b/packages/dart/noports_core/test/sshnp/util/sshnpd_channel/sshnpd_channel_test.dart index e205ea1a9..81ee9d891 100644 --- a/packages/dart/noports_core/test/sshnp/util/sshnpd_channel/sshnpd_channel_test.dart +++ b/packages/dart/noports_core/test/sshnp/util/sshnpd_channel/sshnpd_channel_test.dart @@ -312,8 +312,7 @@ void main() { when( () => mockAtClient.get( any( - that: predicate( - (AtKey key) => key.key.startsWith('username.')), + that: predicate((AtKey key) => key.key.startsWith('username.')), ), ), ).thenAnswer((i) async => AtValue()..value = 'mySharedUsername'); From b69fa4221e86e69c2baac7db3ccea5dc30237d68 Mon Sep 17 00:00:00 2001 From: gkc Date: Tue, 30 Jan 2024 13:33:39 +0000 Subject: [PATCH 4/4] fix: srv_impl.dart: throw an SshnpError rather than an Exception if the srv binary can't be found --- packages/dart/noports_core/lib/src/srv/srv_impl.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dart/noports_core/lib/src/srv/srv_impl.dart b/packages/dart/noports_core/lib/src/srv/srv_impl.dart index a2ba11d93..0f9d799c6 100644 --- a/packages/dart/noports_core/lib/src/srv/srv_impl.dart +++ b/packages/dart/noports_core/lib/src/srv/srv_impl.dart @@ -9,6 +9,7 @@ import 'package:cryptography/dart.dart'; import 'package:dartssh2/dartssh2.dart'; import 'package:meta/meta.dart'; import 'package:noports_core/srv.dart'; +import 'package:noports_core/sshnp.dart'; import 'package:socket_connector/socket_connector.dart'; @visibleForTesting @@ -62,7 +63,7 @@ class SrvImplExec implements Srv { String? command = await Srv.getLocalBinaryPath(); String postfix = Platform.isWindows ? '.exe' : ''; if (command == null) { - throw Exception( + throw SshnpError( 'Unable to locate srv$postfix binary.\n' 'N.B. sshnp is expected to be compiled and run from source, not via the dart command.', );