Compare commits

...
5 Commits
Author SHA1 Message Date
RandyTheSilly 5cd50c7ad2 Backport /lib/sshyp fix
Former-commit-id: 21f1705abc3581a6317cd4a390324a97de9ba1b9
Former-commit-id: 56ccd20bef6587cc3b185c6260b4328001eb541c
2023-06-08 19:44:22 -04:00
RandyTheSilly c48722f04f Update documentation for release v1.4.3
Former-commit-id: 7805e0878e776dfc321bba12ed8ecf26f94d594c
Former-commit-id: f3a9f1ea37a35c5d6607d3f3bc33e7da9799ffe4
2023-06-08 19:12:56 +00:00
RandyTheSilly d32bd72d68 Backport multi-version Powershell fix
Former-commit-id: 7e82515f1146e2551eb887cf2513fa7e7f6fc082
Former-commit-id: 827531aca1be7bfe18cfb194e5ce9fcb124099b8
2023-06-08 15:48:43 -04:00
RandyTheSilly 59d0844d77 Backport IPv6 sync fix
Former-commit-id: 231005bca34d7fd8984749f2bbaadd5ea375bd63
Former-commit-id: d7021e0135afd97802a421726e79ef45fbf970ac
2023-06-08 15:39:16 -04:00
RandyTheSilly 0eb283892f Disabled folder renaming to prevent data loss bug - real fix in v1.5.0
Former-commit-id: 3577551b710064fc3aa079f598394f0456b2c622
Former-commit-id: 0c0be57ae8a4549848b67c7b244cdc35e35a1c58
2023-06-08 15:30:34 -04:00
5 changed files with 29 additions and 50 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
.TH sshyp 1 "30 April 2023" "v1.4.2" "sshyp man page"
.TH sshyp 1 "08 June 2023" "v1.4.3" "sshyp man page"
.SH NAME
\fBsshyp\fR - Simple, self-hosted, synchronized password management for UNIX(-like) systems. Alternative to (and compatible with) pass/password-store.
.SH SYNOPSIS
+5 -5
View File
@@ -68,7 +68,7 @@ def get_local_data(_directory, _device):
def remote_list_fetch(_user_data):
try:
_remote_data = run(['ssh', '-i', _user_data[5], '-p', _user_data[2], f"{_user_data[0]}@{_user_data[1]}",
f'cd /lib/sshyp; python3 -c \'from sshync import remote_list_gen; remote_list_gen'
f'cd /usr/lib/sshyp; python3 -c \'from sshync import remote_list_gen; remote_list_gen'
f'("{_user_data[6]}", "{_user_data[4]}")\''], stdout=PIPE, text=True, check=True
).stdout.split('\x1d')
except CalledProcessError:
@@ -162,19 +162,19 @@ def run_profile(_profile_dir, _silent):
if int(_index_local[1][_i]) > int(_index_remote[1][_i]):
print(f"\u001b[38;5;4m{_title[:-4]}\u001b[0m is newer locally, uploading...")
run(['scp', '-pqs', '-P', _user_data[2], '-i', _user_data[5], _user_data[3] + _title,
f"{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
f"{_user_data[0]}@[{_user_data[1]}]:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
elif int(_index_local[1][_i]) < int(_index_remote[1][_i]):
print(f"\u001b[38;5;2m{_title[:-4]}\u001b[0m is newer remotely, downloading...")
run(['scp', '-pqs', '-P', _user_data[2], '-i', _user_data[5],
f"{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{_title}",
f"{_user_data[0]}@[{_user_data[1]}]:{_user_data[4]}{_title}",
f"{_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
else:
print(f"\u001b[38;5;4m{_title[:-4]}\u001b[0m is not on remote server, uploading...")
run(['scp', '-pqs', '-P', _user_data[2], '-i', _user_data[5], _user_data[3] + _title,
f"{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
f"{_user_data[0]}@[{_user_data[1]}]:{_user_data[4]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
for _title in _index_remote[0]:
if _title not in _index_local[0]:
print(f"\u001b[38;5;2m{_title[:-4]}\u001b[0m is not in local directory, downloading...")
run(['scp', '-pqs', '-P', _user_data[2], '-i', _user_data[5],
f"{_user_data[0]}@{_user_data[1]}:{_user_data[4]}{_title}",
f"{_user_data[0]}@[{_user_data[1]}]:{_user_data[4]}{_title}",
f"{_user_data[3]}{'/'.join(_title.split('/')[:-1]) + '/'}"])
+9 -16
View File
@@ -345,7 +345,7 @@ def print_info():
print(f"{_border}{_blank}\n\u001b[38;5;7;48;5;8m/\u001b[38;5;15;48;5;15m{3*' '}\u001b[38;5;15;48;5;8m"
f"sshyp ", f"copyright (c) 2021-2023 ", f"randall winkhart\u001b[38;5;15;48;5;15m{3*' '}"
f"\u001b[38;5;7;48;5;8m/\u001b[0m\n{_blank}")
print(f"\u001b[38;5;7;48;5;8m/\u001b[38;5;15;48;5;15m{20*' '}\u001b[38;5;15;48;5;8mversion 1.4.2"
print(f"\u001b[38;5;7;48;5;8m/\u001b[38;5;15;48;5;15m{20*' '}\u001b[38;5;15;48;5;8mversion 1.4.3"
f"\u001b[38;5;15;48;5;15m{21*' '}\u001b[38;5;7;48;5;8m/\u001b[0m")
print(f"\u001b[38;5;7;48;5;8m/\u001b[38;5;15;48;5;15m{9*' '}\u001b[38;5;15;48;5;8mthe argumentative "
f"agronomist update\u001b[38;5;15;48;5;15m{10*' '}\u001b[38;5;7;48;5;8m/\u001b[0m")
@@ -627,7 +627,7 @@ def add_folder():
# renames an entry or folder
def rename():
from shutil import copy
_file = True
_file, _folder_disabler = True, False
if not exists(f"{directory}{entry_name}.gpg") and not exists(f"{directory}{entry_name}"):
print(f"\n\u001b[38;5;9merror: (/{entry_name}) does not exist\u001b[0m\n")
s_exit(2)
@@ -648,19 +648,12 @@ def rename():
else:
# if renaming a folder
if isdir(f"{directory}{_new_name}"):
print(f"\n\u001b[38;5;9merror: (/{_new_name}/) already exists\u001b[0m\n")
s_exit(3)
if not ssh_error:
Path(f"{directory}{_new_name}").mkdir(mode=0o700, parents=True, exist_ok=True)
run(['ssh', '-i', f"{home}/.ssh/sshyp", '-p', port, f"{username_ssh}@{ip}",
f'python3 -c \'from pathlib import Path; Path("{directory_ssh}{_new_name}")'
f'.mkdir(mode=0o700, parents=True, exist_ok=True)\''])
else:
move(f"{directory}{entry_name}", f"{directory}{_new_name}")
if not ssh_error:
print('\n\u001b[38;5;9merror: folder renaming disabled due to a bug causing severe data loss'
'- fixed in future release v1.5.0\u001b[0m\n')
_folder_disabler = True
if not ssh_error and not _folder_disabler:
run(['ssh', '-i', f"{home}/.ssh/sshyp", '-p', port, f"{username_ssh}@{ip}",
f'cd /lib/sshyp; python3 -c \'from sshync import delete; delete("{entry_name}", "remotely")\''])
f'cd /usr/lib/sshyp; python3 -c \'from sshync import delete; delete("{entry_name}", "remotely")\''])
# edits the contents of an entry
@@ -747,7 +740,7 @@ def copy_data():
# WSL clipboard detection
if 'WSL_DISTRO_NAME' in environ:
run(['powershell.exe', '-c', "Set-Clipboard '" + _copy_line[_index].rstrip().replace("'", "''") + "'"])
Popen("sleep 30; pwsh.exe -c 'echo \"\" | Set-Clipboard'", shell=True)
Popen("sleep 30; powershell.exe -c Set-Clipboard ''", shell=True, stdout=DEVNULL, stderr=DEVNULL))
# Wayland clipboard detection
elif 'WAYLAND_DISPLAY' in environ:
run(['wl-copy', _copy_line[_index].rstrip()])
@@ -779,7 +772,7 @@ def remove_data():
determine_decrypt(f"{home}/.config/sshyp/lock.gpg", None, None)
if not ssh_error:
run(['ssh', '-i', f"{home}/.ssh/sshyp", '-p', port, f"{username_ssh}@{ip}",
f'cd /lib/sshyp; python3 -c \'from sshync import delete; delete("{entry_name}", "remotely")\''])
f'cd /usr/lib/sshyp; python3 -c \'from sshync import delete; delete("{entry_name}", "remotely")\''])
else:
offline_delete(entry_name, 'locally')
+1 -1
View File
@@ -9,7 +9,7 @@ arguments = argv[1:]
if len(arguments) > 0:
if arguments[0] == 'WSL':
replacement = """run(['powershell.exe', '-c', "Set-Clipboard '" + _copy_line[_index].rstrip().replace("'", "''") + "'"])
Popen("sleep 30; pwsh.exe -c 'echo \\"\\" | Set-Clipboard'", shell=True)"""
Popen("sleep 30; powershell.exe -c Set-Clipboard ''", shell=True, stdout=DEVNULL, stderr=DENVULL)"""
elif arguments[0] == 'MAC':
replacement = """run(['pbcopy'], stdin=Popen(['printf', _copy_line[_index].rstrip().replace('\\\\\\', '\\\\\\\\\\\\\\').replace('%', '%%')],
stdout=PIPE).stdout)
+13 -27
View File
@@ -1,39 +1,25 @@
sshyp v1.4.2
04/30/2023
sshyp v1.4.3
06/08/2023
the argumentative agronomist update - patch two
the argumentative agronomist update - patch three
IMPORTANT: the next major release of sshyp, v1.5.0, will make breaking changes that will require
running through 'sshyp tweak' again - also starting with v1.5.0, a copy of the changelog will no
longer be packaged with sshyp (it will still be available on GitHub) and clipboard tools
(x-clip and wl-clipboard) will be set to optional dependencies ('sshyp tweak' will warn of this)
this release makes use of a new ports framework to make sshyp even smaller and faster than before
this is a highly unconventional release featuring backports to fix critical bugs found during the
development of the upcoming v1.5.0
user-facing features:
fixes:
- full WSL (Windows Subsystem for Linux) support
- partial MacOS support
^ fully functional; packaging support has not yet been added
- dedicated help screen for 'gen'
^ this was previously not included due to 'sshyp gen' being a valid command prior to v1.4.0
- removed interactive input for whitelist management
^ this is to be consistent with the removal of interactive input on clients in v1.4.0
fixes/optimizations:
- leading and following spaces are no longer stripped when printing entry contents
- properly display an error when trying to remove a device from the whitelist that is not whitelisted
- ports framework to remove unneeded code for each platform
^ BLANKS.py removes all blank lines
^ CLIPBOARD.py removes non-platform-critical clipboard code
^ COMMENTS.py removes all comments
^ RMSERVER.py removes server-only code for creating client-only packages
^ the Haiku package, which was already unsupported as a server, now only includes client code
^ SHEBANG.sh sets the shebang to what is required by the platform
^ TABS.sh converts all groups of spaces to tabs for space efficiency
^ UNAME.py removes all instances of platform detection and leaves only the platform-required code
^ THESE SCRIPTS ARE ONLY USED FOR PACKAGING AND DO NOT AFFECT THE SOURCE FILES IN THE GIT REPO
- folder renaming has been disabled to prevent a severe data loss bug from occuring
^ this has been properly fixed for v1.5.0, but the fix requires all clients and servers
to be updated - to avoid breaking compatibility with 1.4.X, folder renaming was simply disabled
for the time being
- backported fix for syncing over IPv6
- backported fix for multiple versions of Powershell being called under WSL
- backported fix for checking /lib/sshyp instead of /usr/lib/sshyp
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>