From e2f45c7cacb94c4f7ee510b4c96d286536d8a813 Mon Sep 17 00:00:00 2001 From: Cuan Date: Mon, 10 Jan 2022 22:23:21 -0500 Subject: [PATCH] Prevent /dev/shm files being generated before a keyboard interrupt --- bin/sshyp | 91 ++++++++++++++++++++++----------------- share/doc/sshyp/changelog | 7 +-- 2 files changed, 56 insertions(+), 42 deletions(-) diff --git a/bin/sshyp b/bin/sshyp index dded091..fef5cc1 100755 --- a/bin/sshyp +++ b/bin/sshyp @@ -206,19 +206,21 @@ def sync(): # calls sshync to sync changes to the user's server def add_entry(): # adds a new entry + _shm_folder, _shm_entry = None, None # sets base-line values to avoid errors _entry_name = str(input('\nName of entry: ')) if _entry_name.startswith('/'): _entry_name = _entry_name.replace('/', '', 1) - _shm_folder, _shm_entry = shm_gen() if argument == 'add note' or argument == 'add -n': + _shm_folder, _shm_entry = shm_gen() system(f"nano /dev/shm/{_shm_folder}/{_shm_entry}-n") _notes = open(f"/dev/shm/{_shm_folder}/{_shm_entry}-n", 'r').read() open(f"/dev/shm/{_shm_folder}/{_shm_entry}", 'w').writelines('\n\n\n\n' + _notes + '\n\n') - if argument == 'add password' or argument == 'add -p': + elif argument == 'add password' or argument == 'add -p': _username = str(input('Username: ')) _password = str(input('Password: ')) _url = str(input('URL: ')) _add_note = input('Add a note to this entry? (y/N) ') + _shm_folder, _shm_entry = shm_gen() if _add_note.lower() == 'y': system(f"nano /dev/shm/{_shm_folder}/{_shm_entry}-n") _notes = open(f"/dev/shm/{_shm_folder}/{_shm_entry}-n", 'r').read() @@ -252,52 +254,51 @@ def rename(): # renames an entry or folder TODO delete original from server to def edit(): # edits the contents of an entry + _shm_folder, _shm_entry = None, None # sets base-line values to avoid errors print() system(f"cd {directory}; ls -1 *") # TODO replace with new list - try: - _entry_name = str(input('\nWhat file would you like to edit? ')) - if _entry_name.startswith('/'): - _entry_name = _entry_name.replace('/', '', 1) - except KeyboardInterrupt: - _entry_name = None - print('\n') + _entry_name = str(input('\nWhat file would you like to edit? ')) + if not Path(f"{directory}{_entry_name}.gpg").is_file(): + print("\nYou are trying to edit a file that does not exist!\n") s_exit() - _shm_folder, _shm_entry = shm_gen() - try: + if _entry_name.startswith('/'): + _entry_name = _entry_name.replace('/', '', 1) + if argument == 'edit username' or argument == 'edit -u': + _detail = str(input('New Username: ')) + _shm_folder, _shm_entry = shm_gen() system(f"gpg -d --output /dev/shm/{_shm_folder}/{_shm_entry} '{directory}{_entry_name}.gpg'") - if not Path(f"/dev/shm/{_shm_folder}/{_shm_entry}").is_file(): - rmtree(f"/dev/shm/{_shm_folder}") - print("\nYou are trying to edit a file that does not exist!\n") - s_exit() - if argument == 'edit username' or argument == 'edit -u': - _detail = str(input('New Username: ')) - replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 0, _detail + '\n') - if argument == 'edit password' or argument == 'edit -p': - _detail = str(input('New Password: ')) - replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 1, _detail + '\n') - if argument == 'edit url' or argument == 'edit -l': - _detail = str(input('New URL: ')) - replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 2, _detail + '\n') - if argument == 'edit note' or argument == 'edit -n': - edit_note(_shm_folder, _shm_entry) - remove(f"{directory}{_entry_name}.gpg") - encrypt(_shm_folder, _shm_entry, _entry_name) - system(f"gpg -d '{directory}{_entry_name}.gpg'") - except KeyboardInterrupt: - rmtree(f"/dev/shm/{_shm_folder}") - print('\n') - s_exit() + replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 0, _detail + '\n') + elif argument == 'edit password' or argument == 'edit -p': + _detail = str(input('New Password: ')) + _shm_folder, _shm_entry = shm_gen() + system(f"gpg -d --output /dev/shm/{_shm_folder}/{_shm_entry} '{directory}{_entry_name}.gpg'") + replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 1, _detail + '\n') + elif argument == 'edit url' or argument == 'edit -l': + _detail = str(input('New URL: ')) + _shm_folder, _shm_entry = shm_gen() + system(f"gpg -d --output /dev/shm/{_shm_folder}/{_shm_entry} '{directory}{_entry_name}.gpg'") + replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 2, _detail + '\n') + elif argument == 'edit note' or argument == 'edit -n': + _shm_folder, _shm_entry = shm_gen() + system(f"gpg -d --output /dev/shm/{_shm_folder}/{_shm_entry} '{directory}{_entry_name}.gpg'") + edit_note(_shm_folder, _shm_entry) + remove(f"{directory}{_entry_name}.gpg") + encrypt(_shm_folder, _shm_entry, _entry_name) + system(f"gpg -d '{directory}{_entry_name}.gpg'") def gen(): # generates a password for a new or an existing entry _username, _url, _notes = None, None, None # sets base-line values to avoid errors - _shm_folder, _shm_entry = shm_gen() if argument == 'gen update' or argument == 'gen -u': print() system(f"cd {directory}; ls -1 *") # TODO replace with new list _entry_name = str(input('\nName of service: ')) if _entry_name.startswith('/'): _entry_name = _entry_name.replace('/', '', 1) + if argument == 'gen update' or argument == 'gen -u': + if not Path(f"{directory}{_entry_name}.gpg").is_file(): + print("\nYou are trying to edit a file that does not exist!\n") + s_exit() if argument != 'gen update' and argument != 'gen -u': _username = str(input('Username: ')) _pass_length = int(input('How many characters should be in the password? ')) @@ -310,13 +311,13 @@ def gen(): # generates a password for a new or an existing entry if argument != 'gen update' and argument != 'gen -u': _url = str(input('URL: ')) _notes = str(input('Additional notes: ')) # TODO update w/new notes system - if argument != 'gen update' and argument != 'gen -u': + _shm_folder, _shm_entry = shm_gen() open(f"/dev/shm/{_shm_folder}/{_shm_entry}", 'w').writelines(_username + '\n' + _pass_gen + '\n' + _url + '\n\n' + _notes + '\n\n') - if argument != 'gen update' and argument != 'gen -u': encrypt(_shm_folder, _shm_entry, _entry_name) system(f"gpg -d '{directory}{_entry_name}.gpg'") else: + _shm_folder, _shm_entry = shm_gen() system(f"gpg -d --output /dev/shm/{_shm_folder}/{_shm_entry} '{directory}{_entry_name}.gpg'") replace_line(f"/dev/shm/{_shm_folder}/{_shm_entry}", 1, _pass_gen + '\n') remove(f"{directory}{_entry_name}.gpg") @@ -441,17 +442,29 @@ elif argument == 'edit rename' or argument == 'edit relocate' or argument == 'ed s_exit() elif argument == 'edit username' or argument == 'edit -u' or argument == 'edit password' or argument == 'edit -p' or \ argument == 'edit url' or argument == 'edit -l' or argument == 'edit note' or argument == 'edit -n': - edit() # KeyboardInterrupt exception in function for temporary file deletion + try: + edit() + except KeyboardInterrupt: + print('\n') + s_exit() elif argument == 'gen' or argument == 'gen update' or argument == 'gen -u': try: - gen() + try: + gen() + except FileNotFoundError: + print('\nThe file does not exist!\n') + s_exit() except KeyboardInterrupt: print('\n') s_exit() elif argument == 'copy username' or argument == 'copy -u' or argument == 'copy password' or argument == 'copy -p' or \ argument == 'copy url' or argument == 'copy -l' or argument == 'copy note' or argument == 'copy -n': try: - copy_data() + try: + copy_data() + except FileNotFoundError: + print('\nThe file does not exist!\n') + s_exit() except KeyboardInterrupt: print('\n') s_exit() diff --git a/share/doc/sshyp/changelog b/share/doc/sshyp/changelog index 941dc60..198b9b2 100644 --- a/share/doc/sshyp/changelog +++ b/share/doc/sshyp/changelog @@ -2,18 +2,19 @@ sshyp 2022.01.10.fr2.3 The Lighter Update - Patch 3 -This release is a hotfix for 2021.12.01.fr2.2. +This release is a hotfix for 2021.12.01.fr2.2. It features critical security fixes and quality-of-life improvements. New features: + - a man page has been added Changes: ** the gen command in sshyp has been updated to use the newer notetaking system - printing functions in sshyp have been combined into one function (arguments determine section to print) -** file not found exceptions have been re-implemented +- file not found exceptions have been re-implemented ** when syncing, a check is made to see if any folders are not on all devices - if the check comes back true, it is corrected -- folders generated in /dev/shm are once again properly deleted with keyboard interrupts +- folders in /dev/shm are no longer created before input from the user - .lower() is now used to remove casing when checking inputs - fixed syncing of files (specifically downloading) with special characters, such as '(' - fixed program still continuing after trying to edit an entry that doesn't exist