From b5f71fb3b8b6c18f5bf62dcd6aaf26b6ab9a8e15 Mon Sep 17 00:00:00 2001 From: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Wed, 22 Dec 2021 09:25:05 +0100 Subject: [PATCH] Support for folder filter and nested image files (#551) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Code cleanup, initial support for creating nested file * Check for existing folder * Cleanup * Cleanup * Copy/rename/create * Updated delete operation * Delete empty folders * Code cleanup * Fixed typo * Check image file nesting level * Updated error handling * Fixed warning * Renaming * Error message update * Interface comment updates * Added depth to image info * Fixed scan depth check * Squashed commit of the following: commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Squashed commit of the following: commit 192b14169f7b3f433d23d4306b60ae1aff7e3c96 Author: Uwe Seimet Date: Tue Dec 21 09:19:05 2021 +0100 Meta data update commit b319d726018a8fef01b76c19cd600aa70891568f Author: Uwe Seimet Date: Tue Dec 21 09:02:39 2021 +0100 Squashed commit of the following: commit 0ab4918c5a59f978f48cf26f431ff809e9ddae33 Author: Uwe Seimet Date: Mon Dec 20 16:52:03 2021 +0100 Scan depth determines availability of folder filter commit 16590cc4e4420a348fae610d749082c9d718be0a Author: Uwe Seimet Date: Mon Dec 20 15:47:08 2021 +0100 Updated operation count check commit 82f7c99755f535a7a5c30fe66e377705c5306faa Author: Uwe Seimet Date: Mon Dec 20 15:41:32 2021 +0100 Only restrict shutdown parameters, not everything if not root commit 9bd50d37b11c48b2130e4f6e66d12def88ddc38f Author: Uwe Seimet Date: Mon Dec 20 15:28:08 2021 +0100 Shutdown functionality is only available if started with root permissions commit aa5f3331abf4c178e8ce738c14fd584bd41d1b94 Author: Uwe Seimet Date: Mon Dec 20 10:26:14 2021 +0100 Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit a1f4b28f92bd9f7cdba18c04f61d3721fc7c720f Author: Uwe Seimet Date: Sun Dec 19 21:50:15 2021 +0100 Comment update commit 9cbc06caf5f00ce85e0f7f984c871ed614e2e483 Author: Uwe Seimet Date: Sun Dec 19 21:49:09 2021 +0100 Option update commit c4aa39c2285c5c72e2ea28ad749f5670dd10e89f Author: Uwe Seimet Date: Sun Dec 19 21:46:37 2021 +0100 Merged feature_folder_filter commit ea386fc74cbd64f19a7805d16c19f08f278739f3 Author: Uwe Seimet Date: Sun Dec 19 19:05:07 2021 +0100 Code cleanup commit 17c320113564fa2f0f2f11c1fe2e8b0048be2f48 Author: Uwe Seimet Date: Sun Dec 19 19:03:13 2021 +0100 Removed duplicate code commit 296f816dd3bc632efd11cda4b181362fb89e14e3 Author: Uwe Seimet Date: Sun Dec 19 18:40:49 2021 +0100 Logging update commit 73e0df85576932f2a99df5c8472a6922a6ed9e95 Author: Uwe Seimet Date: Sun Dec 19 17:28:02 2021 +0100 Code cleanup commit 405dbb034cf7775e069e5db9751f007587318558 Author: Uwe Seimet Date: Sun Dec 19 17:13:40 2021 +0100 Removed duplicate cod3 commit c7c168a9420ea43f3b3dd003a5d75a928e8f66c5 Author: Uwe Seimet Date: Sun Dec 19 17:08:02 2021 +0100 Added missing condition commit 6af5394f7879854b12d341c4b6c7ac1b06302494 Author: Uwe Seimet Date: Sun Dec 19 16:16:12 2021 +0100 Updated assertion handling commit 632fe1acd81fa27c096ff6190b5082717e3b3f02 Author: Uwe Seimet Date: Sun Dec 19 14:33:01 2021 +0100 Updated handling of mandatory parameters commit a4e0d506c6a48641b827bc88590d0b416ae2513c Author: Uwe Seimet Date: Sun Dec 19 14:14:09 2021 +0100 Aded operation parameters commit fc783e6a437fb3a4f3f0f60235717c9f7621408d Author: Uwe Seimet Date: Sun Dec 19 12:38:35 2021 +0100 Fixed typo commit cb1b498459b700556700575946264a3a8eabfb96 Author: Uwe Seimet Date: Sun Dec 19 12:37:13 2021 +0100 Interface comment update commit e2d4347ce6daa0a1c3de606aead8cadeb203881a Author: Uwe Seimet Date: Sun Dec 19 12:35:50 2021 +0100 Logging update commit cecb72df3ea9c1b27071d4b62017449709206ec9 Author: Uwe Seimet Date: Sun Dec 19 12:13:44 2021 +0100 Added operation commit bbf153ccd673004e371f5fb1f325ad2f3d95a97d Author: Uwe Seimet Date: Sun Dec 19 12:09:49 2021 +0100 Fixed typo commit 29fa5c2f962c6e775b82940682121c6d41ffb5fc Merge: 28a36fa ec31198 Author: Uwe Seimet Date: Sun Dec 19 12:07:34 2021 +0100 Merge branch 'develop' into feature_meta_data commit 28a36fa308d926fce4885f16a019604060ff1107 Author: Uwe Seimet Date: Sat Dec 18 15:51:02 2021 +0100 Description updates commit 73df9f136ca572ba160918acf85ecf06d0bd7d2c Author: Uwe Seimet Date: Sat Dec 18 14:37:58 2021 +0100 Comment update commit c3ea3c8b372284468c8302b82067454d17cd061c Author: Uwe Seimet Date: Sat Dec 18 14:34:48 2021 +0100 Renaming commit 6a84edd0fbab8253e47c024ae65529c1c5b246ef Author: Uwe Seimet Date: Sat Dec 18 14:22:31 2021 +0100 Comment update commit c0d6e66afe819bbcfeb5c606ba7cbc257b39dfec Author: Uwe Seimet Date: Sat Dec 18 14:20:20 2021 +0100 Code cleanup commit cc81b588eb6bea2014a9abec6d67cdbe849e76e0 Author: Uwe Seimet Date: Sat Dec 18 14:18:31 2021 +0100 Renaming commit c88628e12ad252420f29ebed0541a1c3c4ede231 Author: Uwe Seimet Date: Sat Dec 18 14:17:50 2021 +0100 Sort map by operation name commit b64001e8a4a6941a8f671420e61121f471f90010 Author: Uwe Seimet Date: Sat Dec 18 13:39:44 2021 +0100 Data type update commit 8177cd306222c8674fbcf889be634565bbd2337f Author: Uwe Seimet Date: Sat Dec 18 13:37:23 2021 +0100 Added cast commit b8599ba0886363d91399bba6fa4607fd7b3fd445 Author: Uwe Seimet Date: Sat Dec 18 13:35:40 2021 +0100 Added safeguard against unknown operations commit 6b14ba651135db152fe57c6fe469227f71f00969 Author: Uwe Seimet Date: Sat Dec 18 13:26:21 2021 +0100 Map operations by ordinal commit ee101f2c6b8dbf527f77c8e005f2ded9ebdf4436 Author: Uwe Seimet Date: Sat Dec 18 13:14:31 2021 +0100 Comment update commit 67c958ed371f35870e9acf91bd90446c46783264 Author: Uwe Seimet Date: Sat Dec 18 13:13:06 2021 +0100 Comment update commit d1a9c4074576e75300d990a346abd2357a536138 Author: Uwe Seimet Date: Sat Dec 18 13:04:58 2021 +0100 Default value update commit d9dbbc0bb3347832619c3e600405d4b3cf25d0da Author: Uwe Seimet Date: Sat Dec 18 12:47:36 2021 +0100 Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements commit 5d6862b6b0fcd2f6b59779c7d47fdc99af748a28 Author: Uwe Seimet Date: Fri Dec 17 23:22:27 2021 +0100 Description upddate commit 69263b3e4b8c9443d6593db49b4bbb995d884382 Author: Uwe Seimet Date: Fri Dec 17 23:21:38 2021 +0100 Description update commit 49e14f7078ae419766326758a923bde69af8eb9d Author: Uwe Seimet Date: Fri Dec 17 23:19:08 2021 +0100 Removed redundant message field commit ff468aafa85a25c3f48a8bfdc1eb0a24b3fca63f Author: Uwe Seimet Date: Fri Dec 17 23:09:18 2021 +0100 Added support for default value commit 2da717a0a037653d9b182439271165eb1859ed8d Author: Uwe Seimet Date: Fri Dec 17 22:57:59 2021 +0100 For completeness sake added permitted boolean values commit 5d894d2e4f39b75e1672c430d5421df397d5ed10 Author: Uwe Seimet Date: Fri Dec 17 22:53:07 2021 +0100 Display permitted values commit acc7d3cba5e667f690f76d68e6d8aa373faf1db5 Author: Uwe Seimet Date: Fri Dec 17 20:37:03 2021 +0100 Comment update commit f846242aea70c723241eee7ed99943f54694e1e7 Author: Uwe Seimet Date: Fri Dec 17 20:35:07 2021 +0100 Code cleanup commit 5a9592f102a93bbe0acde908e9f0f7b9bebf1e41 Author: Uwe Seimet Date: Fri Dec 17 20:24:33 2021 +0100 Added convenience method commit 9d258d9979afe452ed58ef58c24b73b4ef2bfb05 Author: Uwe Seimet Date: Fri Dec 17 20:05:53 2021 +0100 Added convenience method commit 6c4103989baee3fcffeeb040b501cc6aae9b4b0d Author: Uwe Seimet Date: Fri Dec 17 19:45:20 2021 +0100 Comment update commit 7d543451f059cd12bed4a8a49bdfd1e8c0a7d706 Author: Uwe Seimet Date: Fri Dec 17 19:27:50 2021 +0100 Description updates commit f4b0e50e663e5736f4ed1ec176dea2b10cf9d006 Author: Uwe Seimet Date: Fri Dec 17 19:23:29 2021 +0100 Comment update commit 35dd3f6282cf3253b04e1eea1d25c5ad65247690 Author: Uwe Seimet Date: Fri Dec 17 19:21:12 2021 +0100 Type update commit 7a94c0e6e0641e1aaa62f892a3f70975165cbca0 Author: Uwe Seimet Date: Fri Dec 17 19:17:05 2021 +0100 Manpage update commit 4179110bac97268860a1b5bed32d18b0b944bda6 Author: Uwe Seimet Date: Fri Dec 17 19:13:42 2021 +0100 rasctl -s returns operation meta data commit eed83bb005b1f03df7f10c451a7cf2d872d42b0a Author: Uwe Seimet Date: Fri Dec 17 19:05:29 2021 +0100 Completed meta data commit 4a7528d9d320bbac4f77d29f293cb99da56561bb Author: Uwe Seimet Date: Fri Dec 17 18:39:18 2021 +0100 Sort operations commit d3af9a142ceb2dcfb3f0dc310925eff3bf62071b Author: Uwe Seimet Date: Fri Dec 17 18:29:22 2021 +0100 Support for localized descriptions commit b4ff4f52ab03683f76b6f23b057063ca67f1b9dd Author: Uwe Seimet Date: Fri Dec 17 17:53:11 2021 +0100 Interface update commit e8d9e97fe5c3e64fab57ccff8cfdb60fe24a849d Author: Uwe Seimet Date: Fri Dec 17 16:59:49 2021 +0100 Comment update commit 22753b15471166a34748113026b1e46b4c3b6888 Author: Uwe Seimet Date: Fri Dec 17 16:57:39 2021 +0100 Added messages commit b3a92924588513787e89908310d450306064e946 Merge: ea3bb83 94786ae Author: Uwe Seimet Date: Tue Dec 21 08:57:56 2021 +0100 Merge branch 'develop' into feature_folder_filter commit ea3bb8363a2a9a734abd2fc330066c52d5638b6d Author: Uwe Seimet Date: Tue Dec 21 08:53:30 2021 +0100 Squashed commit of the following: commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 94786aec54c589c080dcec3b18b388a17de64ae3 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Tue Dec 21 08:43:21 2021 +0100 Added support for operation meta data, code cleanup (#534) * Added messages * Comment update * Interface update * Support for localized descriptions * Sort operations * Completed meta data * rasctl -s returns operation meta data * Manpage update * Type update * Comment update * Description updates * Comment update * Added convenience method * Added convenience method * Code cleanup * Comment update * Display permitted values * For completeness sake added permitted boolean values * Added support for default value * Removed redundant message field * Description update * Description upddate * Squashed commit of the following: commit 8171c6ea27982c736c30c0db69a7fdde07ee10ce Author: Uwe Seimet Date: Sat Dec 18 12:43:14 2021 +0100 The data type is implicit commit fb01dc9d82e8ff7456b05a0cb9d08069adacc64c Author: Uwe Seimet Date: Sat Dec 18 12:37:49 2021 +0100 Renaming commit 057dbf1aca7be3f7e76a5ff89a582a276b6d3089 Author: Uwe Seimet Date: Sat Dec 18 12:29:54 2021 +0100 Comment update commit 5f699aad2f835f72accdb445d1e59f094aeb108f Author: Uwe Seimet Date: Sat Dec 18 12:24:25 2021 +0100 Signature update commit cbcf8b09f9d1ba7b82f816269bcfe91d9f00eb6e Author: Uwe Seimet Date: Sat Dec 18 12:22:45 2021 +0100 Signature update commit a8148ef802ca809e5a305d2caa69856c9033d932 Author: Uwe Seimet Date: Sat Dec 18 12:16:46 2021 +0100 Comment update commit ce685a92d4827e131d80d10ecd56e2b3baf173f8 Author: Uwe Seimet Date: Sat Dec 18 12:15:46 2021 +0100 Use map instead of list commit 454c0438f3589904f5dbe5253963dd200ea416dd Author: Uwe Seimet Date: Sat Dec 18 10:47:36 2021 +0100 Updated size check commit b386dbba4b0262f4f6f02aecb2a1daeffd41f4a2 Author: Uwe Seimet Date: Sat Dec 18 01:23:43 2021 +0100 Initial improvements * Default value update * Comment update * Comment update * Map operations by ordinal * Added safeguard against unknown operations * Added cast * Data type update * Sort map by operation name * Renaming * Code cleanup * Comment update * Renaming * Comment update * Description updates * Fixed typo * Added operation * Logging update * Interface comment update * Fixed typo * Aded operation parameters * Updated handling of mandatory parameters * Updated assertion handling * Added missing condition * Removed duplicate cod3 * Code cleanup * Logging update * Removed duplicate code * Code cleanup * Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup * Shutdown functionality is only available if started with root permissions * Only restrict shutdown parameters, not everything if not root * Updated operation count check commit 693ade296756ee8e480e75663a873e4a35829034 Author: Daniel Markstedt Date: Mon Dec 20 12:04:23 2021 -0800 Bump Macproxy version to 21.12.2 (#550) commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit f59eeb842ef5a71020bd1ae642eb9fe250963ea5 Author: Uwe Seimet Date: Mon Dec 20 10:25:28 2021 +0100 Squashed commit of the following: commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit 670356e0e29b4c03ddb5f02f0621043881766ad6 Author: Uwe Seimet Date: Sun Dec 19 20:26:03 2021 +0100 Code cleanup commit 4fc8f679758aef6d29a73850a7b8d15541b496e6 Author: Uwe Seimet Date: Sun Dec 19 20:21:10 2021 +0100 Manpage update commit 29603a327a8bdbe2241200ccef7df8a36415fcf4 Author: Uwe Seimet Date: Sun Dec 19 19:49:56 2021 +0100 Added optional folder name filter commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Interface update * Squashed commit of the following: commit 6c98228726c26936c81b498d2837c7af7731be3c Author: Uwe Seimet Date: Mon Dec 20 22:45:24 2021 +0100 Fixed scan depth check commit 87e8b3be6a74d873efd982b027049ee0aebe6184 Author: Uwe Seimet Date: Mon Dec 20 20:46:36 2021 +0100 Added depth to image info commit 7c08fa6569e4c91132ff50f02a1c5d79935d78a3 Author: Uwe Seimet Date: Mon Dec 20 20:38:53 2021 +0100 Interface comment updates commit 29d919d30eeb0322ad0178e4a14190089c505062 Author: Uwe Seimet Date: Mon Dec 20 20:06:02 2021 +0100 Error message update commit fe76a1a577929f4f5b0517f859b58a611811b520 Author: Uwe Seimet Date: Mon Dec 20 19:56:36 2021 +0100 Renaming commit 412b53ddf185406cf8ce7b6eab54e2271a110aaf Merge: bf9d906 958fb95 Author: Uwe Seimet Date: Mon Dec 20 19:50:53 2021 +0100 Merge branch 'develop' into feature_file_operations_with_folders commit 958fb95908f2d8cdf13c02d827f2d14f6011170e Author: akuker <34318535+akuker@users.noreply.github.com> Date: Mon Dec 20 12:50:14 2021 -0600 Adjust bus settle delay to match SCSI standard (#544) * Move the GCC v10 compiler flags into makefile instead of easyinstall.sh * #504 - Update the bus settle time to match the SCSI standard Co-authored-by: RaSCSI User commit bf9d90664cfd6c5e85ec16a607dcf1de9067db7e Author: Uwe Seimet Date: Mon Dec 20 19:42:36 2021 +0100 Fixed warning commit 362a90f3dc2960bf9b272073bb1904a8879e4486 Author: Uwe Seimet Date: Mon Dec 20 19:37:32 2021 +0100 Updated error handling commit 66c380bd974fd5ada7b254d702d123ac775e768f Author: Uwe Seimet Date: Mon Dec 20 19:33:01 2021 +0100 Check image file nesting level commit c98a2b906929b6e10cc7a43d038c5a0671e8c6a1 Author: Uwe Seimet Date: Mon Dec 20 19:06:18 2021 +0100 Fixed typo commit a36dabc00216aa22ec2953d17b2293ad0c7bf7fc Author: Uwe Seimet Date: Mon Dec 20 19:03:18 2021 +0100 Code cleanup commit 46fc22f72aabe0e51d2519a540707369eb91d8fc Author: Uwe Seimet Date: Mon Dec 20 18:58:27 2021 +0100 Delete empty folders commit d55bf3e06f7d2ab9f64ffe89d8e383f9b4dcca5e Author: Uwe Seimet Date: Mon Dec 20 18:33:59 2021 +0100 Updated delete operation commit 5afce5f50fd113c3d925f8b81e42247d8bd1b789 Author: Uwe Seimet Date: Mon Dec 20 18:31:55 2021 +0100 Copy/rename/create commit b969d3990a5b21905e21ecb572e3ab1f19f52ccb Author: Uwe Seimet Date: Mon Dec 20 15:21:17 2021 +0100 Cleanup commit 200bc7251f2395842df7c7be9b90f2b44940a9d4 Author: Daniel Markstedt Date: Mon Dec 20 06:20:22 2021 -0800 More helpful error message when IP does not resolve for OLED screen (#541) * More helpful error message * Remove confusing fallback IP * Tweak message commit 6a6efa6bdd9974b4e0bb00b603914f824375a997 Author: Uwe Seimet Date: Mon Dec 20 12:58:29 2021 +0100 Cleanup commit 72ab669158d55f8008f4c80a882356cad42a4c53 Author: Uwe Seimet Date: Mon Dec 20 12:58:03 2021 +0100 Check for existing folder commit 6a9ac4d0dafbc4e385a7553d03e2dce21f88b7ae Author: Uwe Seimet Date: Mon Dec 20 12:52:26 2021 +0100 Code cleanup, initial support for creating nested file commit 4ae273ccbd3e2b9bfda6426a9c1f71844b48b2d9 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:30:22 2021 -0600 Loopback tester pcb (#545) commit 46c5c1966f36841419df7c3337990ac941de3c85 Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 22:29:59 2021 -0600 RaSCSI Zero version 1.0 (#546) commit d09df31d67de3470ef4ed3fc74b40da1b181c0bb Author: Daniel Markstedt Date: Sun Dec 19 20:25:23 2021 -0800 Remove redundant code from OLED script (#547) commit d8828da6909a8b87e54f21aada20758607a2a67a Author: akuker <34318535+akuker@users.noreply.github.com> Date: Sun Dec 19 21:02:50 2021 -0600 Added list of sponsors commit bcd7e8396d945f5a051e01080354d3ac7ba63704 Author: Daniel Markstedt Date: Sun Dec 19 15:51:45 2021 -0800 Second attempt at properly creating the manpage dir (#542) commit c887edfc8c9956aa9dcac3764abe6cef16ffb596 Author: Daniel Markstedt Date: Sun Dec 19 15:50:03 2021 -0800 Remove special elevated privileges for the Web Interface (#536) * Use the pi_shutdown method to restart the rascsi service * Use the pi_shutdown method to restart the rascsi service * Remove modifications to sudoers no longer needed * Introduce sleeps attempting to connect to socket; reduce overall number of retries * Remove systemd helped methods and the functionality that depends on it * Attempts to speed up splash code * Remove unneccessary verbosity * Attempt to optimize service definition commit 801aebfb96e968a3bef1575b0301db4bd7625a35 Author: Daniel Markstedt Date: Sun Dec 19 15:47:22 2021 -0800 More readable message when downloading a file (#531) commit 29cf58288f228fe235b7d6fe2f0dd5852cf9a411 Author: Daniel Markstedt Date: Sun Dec 19 15:47:03 2021 -0800 Add a warning notice when ejecting removable media (#526) commit 7efa89523905a6985bea261f1dcf078ec76faf27 Author: Daniel Markstedt Date: Sun Dec 19 15:46:22 2021 -0800 Unzip zipfiles before storing to iso (#525) * Unzip zipfiles before storing to iso * Add helptext * Skip unzip for MacZip format * Should not be an fstring commit 39bc485671fa5163c6fc87860eed53b2966637ca Author: Daniel Markstedt Date: Sun Dec 19 15:28:22 2021 -0800 Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523) * Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies * Cleanup commit ec31198d83f5ff7400d74d7acf08c832998deb91 Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:54:10 2021 +0100 Optional authentication by access token (#529) * Added authentication by access token * No authentication is required for getting the rascsi version * Added comment * Interface description update * Manpage update * Added error code * Enum value update (backwards compatible) * Error code update * Error code update * Added CHECK_AUTHENTICATION * Comment update * VERSION_INFO also requires authentication * rasctl: Made token an optional parameter for -P * Fixed interface comment commit e32211ef737d1a435ee8ca1d7244b3609202b28f Author: Uwe Seimet <48174652+uweseimet@users.noreply.github.com> Date: Sun Dec 19 11:49:17 2021 +0100 Recursive image file scan and image file filter (#532) * Extracted code * Initial support for (optional) recursive image file listings * Manpage update * Added support for image file filter * Updated filtering * Made image scan depth configurable * Code cleanup * Resolved merged issues * Fixed merge issue * Comment update * Message update * Fixed typo * Logging update * Logging update * Logging update * Fixed merge issue * Set pattern param for SERVER_INFO * Added missing break * Updated error handling * Logging update * Error message update * Removed initial approach for localization in remote interface * Resolve merge conflicts * Made 1 the default scan depth Co-authored-by: Daniel Markstedt --- doc/rascsi.1 | 2 +- doc/rascsi_man_page.txt | 31 +++--- src/raspberrypi/rascsi.cpp | 26 ++--- src/raspberrypi/rascsi_image.cpp | 145 ++++++++++++++++++------- src/raspberrypi/rascsi_image.h | 5 + src/raspberrypi/rascsi_interface.proto | 42 +++---- src/raspberrypi/rascsi_response.cpp | 70 +++++++----- src/raspberrypi/rascsi_response.h | 11 +- src/raspberrypi/rasctl.cpp | 29 ++++- src/raspberrypi/rasctl_commands.cpp | 24 ++-- src/raspberrypi/rasctl_display.cpp | 7 +- src/raspberrypi/scsimon.cpp | 3 +- 12 files changed, 254 insertions(+), 141 deletions(-) diff --git a/doc/rascsi.1 b/doc/rascsi.1 index 5839a32c..cc8a8304 100644 --- a/doc/rascsi.1 +++ b/doc/rascsi.1 @@ -58,7 +58,7 @@ The rascsi log level (trace, debug, info, warn, err, critical, off). The default Enable authentication and read the access token from the specified file. The access token file must be owned by root and must be readable by root only. .TP .BR \-R\fI " " \fISCAN_DEPTH -Scan for image files recursively, up to a depth of SCAN_DEPTH. Be careful when using this option with many sub-folders in the default image folder. +Scan for image files recursively, up to a depth of SCAN_DEPTH. Depth 0 means to ignore any folders within the default image filder. Be careful when using this option with many sub-folders in the default image folder. The default depth is 1. .TP .BR \-h\fI " " \fI Show a help page. diff --git a/doc/rascsi_man_page.txt b/doc/rascsi_man_page.txt index 6198a438..f2acc911 100644 --- a/doc/rascsi_man_page.txt +++ b/doc/rascsi_man_page.txt @@ -73,25 +73,26 @@ OPTIONS -R SCAN_DEPTH Scan for image files recursively, up to a depth of SCAN_DEPTH. - Be careful when using this option with many sub-folders in the - default image folder. + Depth 0 means to ignore any folders within the default image + filder. Be careful when using this option with many sub-folders + in the default image folder. The default depth is 1. -h Show a help page. -n VENDOR:PRODUCT:REVISION - Set the vendor, product and revision for the device, to be re‐ - turned with the INQUIRY data. A complete set of name components + Set the vendor, product and revision for the device, to be re‐ + turned with the INQUIRY data. A complete set of name components must be provided. VENDOR may have up to 8, PRODUCT up to 16, RE‐ - VISION up to 4 characters. Padding with blanks to the maxium - length is automatically applied. Once set the name of a device + VISION up to 4 characters. Padding with blanks to the maxium + length is automatically applied. Once set the name of a device cannot be changed. -p PORT The rascsi server port, default is 6868. -r RESERVED_IDS - Comma-separated list of IDs to reserve. -p TYPE The optional - case-insensitive device type (SAHD, SCHD, SCRM, SCCD, SCMO, + Comma-separated list of IDs to reserve. -p TYPE The optional + case-insensitive device type (SAHD, SCHD, SCRM, SCCD, SCMO, SCBR, SCDP). If no type is specified for devices that support an image file, rascsi tries to derive the type from the file exten‐ sion. @@ -99,17 +100,17 @@ OPTIONS -v Display the rascsi version. -IDn[:u] FILE - n is the SCSI ID number (0-7). u (0-31) is the optional LUN + n is the SCSI ID number (0-7). u (0-31) is the optional LUN (logical unit). The default LUN is 0. - FILE is the name of the image file to use for the SCSI device. - For devices that do not support an image file (SCBR, SCDP) a + FILE is the name of the image file to use for the SCSI device. + For devices that do not support an image file (SCBR, SCDP) a dummy name must be provided. -HDn[:u] FILE - n is the SASI ID number (0-15). The effective SASI ID is calcu‐ - lated as n/2, the effective SASI LUN is calculated is the re‐ - mainder of n/2. Alternatively the n:u syntax can be used, where + n is the SASI ID number (0-15). The effective SASI ID is calcu‐ + lated as n/2, the effective SASI LUN is calculated is the re‐ + mainder of n/2. Alternatively the n:u syntax can be used, where ns is the SASI ID (0-7) and u the LUN (0-1). FILE is the name of the image file to use for the SASI device. @@ -126,7 +127,7 @@ EXAMPLES rascsi -ID0 /path/to/harddrive.hda -ID2 /path/to/cdimage.iso Launch RaSCSI with a removable SCSI drive image as ID 0 and the raw de‐ - vice file /dev/hdb (e.g. a USB stick) and a DaynaPort network adapter + vice file /dev/hdb (e.g. a USB stick) and a DaynaPort network adapter as ID 6: rascsi -ID0 -t scrm /dev/hdb -ID6 -t scdp DUMMY_FILENAME diff --git a/src/raspberrypi/rascsi.cpp b/src/raspberrypi/rascsi.cpp index a0477843..d022da02 100644 --- a/src/raspberrypi/rascsi.cpp +++ b/src/raspberrypi/rascsi.cpp @@ -68,7 +68,6 @@ static void *MonThread(void *param); string current_log_level; // Some versions of spdlog do not support get_log_level() string access_token; set reserved_ids; -int scan_depth = 0; DeviceFactory& device_factory = DeviceFactory::instance(); RascsiImage rascsi_image; RascsiResponse rascsi_response(&device_factory, &rascsi_image); @@ -1244,10 +1243,12 @@ bool ParseArgument(int argc, char* argv[], int& port) continue; case 'R': - if (!GetAsInt(optarg, scan_depth) || scan_depth < 0) { + int depth; + if (!GetAsInt(optarg, depth) || depth < 0) { cerr << "Invalid image file scan depth " << optarg << endl; return false; } + rascsi_image.SetDepth(depth); continue; case 'n': @@ -1430,7 +1431,7 @@ static void *MonThread(void *param) } if (!PbOperation_IsValid(command.operation())) { - LOGTRACE("Received unknown command %d", command.operation()); + LOGERROR("Received unknown command with operation opcode %d", command.operation()); ReturnStatus(fd, false, "Unknown command", UNKNOWN_OPERATION); continue; @@ -1454,12 +1455,7 @@ static void *MonThread(void *param) } case DEFAULT_FOLDER: { - string folder = GetParam(command, "folder"); - if (folder.empty()) { - ReturnStatus(fd, false, "Can't set default image folder: Missing folder name"); - } - - string result = rascsi_image.SetDefaultImageFolder(folder); + string result = rascsi_image.SetDefaultImageFolder(GetParam(command, "folder")); if (!result.empty()) { ReturnStatus(fd, false, result); } @@ -1483,8 +1479,8 @@ static void *MonThread(void *param) case SERVER_INFO: { result.set_allocated_server_info(rascsi_response.GetServerInfo( - result, devices, reserved_ids, current_log_level, GetParam(command, "filename_pattern"), - scan_depth)); + result, devices, reserved_ids, current_log_level, GetParam(command, "folder_pattern"), + GetParam(command, "file_pattern"), rascsi_image.GetDepth())); SerializeMessage(fd, result); break; } @@ -1503,7 +1499,8 @@ static void *MonThread(void *param) case DEFAULT_IMAGE_FILES_INFO: { result.set_allocated_image_files_info(rascsi_response.GetAvailableImages(result, - GetParam(command, "filename_pattern"), scan_depth)); + GetParam(command, "folder_pattern"), GetParam(command, "file_pattern"), + rascsi_image.GetDepth())); SerializeMessage(fd, result); break; } @@ -1541,7 +1538,8 @@ static void *MonThread(void *param) } case OPERATION_INFO: { - result.set_allocated_operation_info(rascsi_response.GetOperationInfo(result)); + result.set_allocated_operation_info(rascsi_response.GetOperationInfo(result, + rascsi_image.GetDepth())); SerializeMessage(fd, result); break; } @@ -1593,7 +1591,7 @@ int main(int argc, char* argv[]) // Get temporary operation info, in order to trigger an assertion on startup if the operation list is incomplete PbResult pb_operation_info_result; - rascsi_response.GetOperationInfo(pb_operation_info_result); + rascsi_response.GetOperationInfo(pb_operation_info_result, 0); int actid; BUS::phase_t phase; diff --git a/src/raspberrypi/rascsi_image.cpp b/src/raspberrypi/rascsi_image.cpp index 95c5edbf..8d235def 100644 --- a/src/raspberrypi/rascsi_image.cpp +++ b/src/raspberrypi/rascsi_image.cpp @@ -44,10 +44,42 @@ RascsiImage::RascsiImage() else { default_image_folder = "/home/pi/images"; } + + depth = 1; +} + +bool RascsiImage::CheckDepth(const string& filename) +{ + return count(filename.begin(), filename.end(), '/') <= depth; +} + +bool RascsiImage::CreateImageFolder(int fd, const string& filename) +{ + size_t filename_start = filename.rfind('/'); + if (filename_start != string::npos) { + string folder = filename.substr(0, filename_start); + + // Checking for existence first prevents an error if the top-level folder is a softlink + struct stat st; + if (stat(folder.c_str(), &st)) { + std::error_code error; + filesystem::create_directories(folder, error); + if (error) { + ReturnStatus(fd, false, "Can't create image folder '" + folder + "': " + strerror(errno)); + return false; + } + } + } + + return true; } string RascsiImage::SetDefaultImageFolder(const string& f) { + if (f.empty()) { + return "Can't set default image folder: Missing folder name"; + } + string folder = f; // If a relative path is specified the path is assumed to be relative to the user's home directory @@ -104,17 +136,19 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command) if (filename.empty()) { return ReturnStatus(fd, false, "Can't create image file: Missing image filename"); } - if (filename.find('/') != string::npos) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Filename must not contain a path"); + + if (!CheckDepth(filename)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str()); } - filename = default_image_folder + "/" + filename; - if (!IsValidDstFilename(filename)) { - return ReturnStatus(fd, false, "Can't create image file: '" + filename + "': File already exists"); + + string full_filename = default_image_folder + "/" + filename; + if (!IsValidDstFilename(full_filename)) { + return ReturnStatus(fd, false, "Can't create image file: '" + full_filename + "': File already exists"); } const string size = GetParam(command, "size"); if (size.empty()) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Missing image size"); + return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Missing image size"); } off_t len; @@ -122,20 +156,19 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command) len = stoull(size); } catch(const invalid_argument& e) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Invalid file size " + size); + return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Invalid file size " + size); } catch(const out_of_range& e) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': Invalid file size " + size); + return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': Invalid file size " + size); } if (len < 512 || (len & 0x1ff)) { ostringstream error; - error << "Invalid image file size " << len; + error << "Invalid image file size " << len << " (not a multiple of 512)"; return ReturnStatus(fd, false, error.str()); } - struct stat st; - if (!stat(filename.c_str(), &st)) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': File already exists"); + if (!CreateImageFolder(fd, full_filename)) { + return false; } string permission = GetParam(command, "read_only"); @@ -143,23 +176,23 @@ bool RascsiImage::CreateImage(int fd, const PbCommand& command) int permissions = !strcasecmp(permission.c_str(), "true") ? S_IRUSR | S_IRGRP | S_IROTH : S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; - int image_fd = open(filename.c_str(), O_CREAT|O_WRONLY, permissions); + int image_fd = open(full_filename.c_str(), O_CREAT|O_WRONLY, permissions); if (image_fd == -1) { - return ReturnStatus(fd, false, "Can't create image file '" + filename + "': " + string(strerror(errno))); + return ReturnStatus(fd, false, "Can't create image file '" + full_filename + "': " + string(strerror(errno))); } - if (fallocate(image_fd, 0, 0, len) == -1) { + if (fallocate(image_fd, 0, 0, len)) { close(image_fd); - unlink(filename.c_str()); + unlink(full_filename.c_str()); - return ReturnStatus(fd, false, "Can't allocate space for image file '" + filename + "': " + string(strerror(errno))); + return ReturnStatus(fd, false, "Can't allocate space for image file '" + full_filename + "': " + string(strerror(errno))); } close(image_fd); ostringstream msg; - msg << "Created " << (permissions & S_IWUSR ? "": "read-only ") << "image file '" << filename + "' with a size of " << len << " bytes"; + msg << "Created " << (permissions & S_IWUSR ? "": "read-only ") << "image file '" << full_filename + "' with a size of " << len << " bytes"; LOGINFO("%s", msg.str().c_str()); return ReturnStatus(fd); @@ -172,31 +205,45 @@ bool RascsiImage::DeleteImage(int fd, const PbCommand& command) return ReturnStatus(fd, false, "Missing image filename"); } - if (!IsValidDstFilename(filename)) { - return ReturnStatus(fd, false, "Can't delete image file '" + filename + "': File already exists"); + if (!CheckDepth(filename)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str()); } - if (filename.find('/') != string::npos) { - return ReturnStatus(fd, false, "The image filename '" + filename + "' must not contain a path"); - } - - filename = default_image_folder + "/" + filename; + string full_filename = default_image_folder + "/" + filename; int id; int unit; Filepath filepath; - filepath.SetPath(filename.c_str()); + filepath.SetPath(full_filename.c_str()); if (FileSupport::GetIdsForReservedFile(filepath, id, unit)) { ostringstream msg; - msg << "Can't delete image file '" << filename << "', it is used by device ID " << id << ", unit " << unit; + msg << "Can't delete image file '" << full_filename << "', it is currently being used by device ID " << id << ", unit " << unit; return ReturnStatus(fd, false, msg.str()); } - if (unlink(filename.c_str())) { - return ReturnStatus(fd, false, "Can't delete image file '" + filename + "': " + string(strerror(errno))); + if (remove(full_filename.c_str())) { + return ReturnStatus(fd, false, "Can't delete image file '" + full_filename + "': " + string(strerror(errno))); } - LOGINFO("Deleted image file '%s'", filename.c_str()); + // Delete empty subfolders + size_t last_slash = filename.rfind('/'); + while (last_slash != string::npos) { + string folder = filename.substr(0, last_slash); + string full_folder = default_image_folder + "/" + folder; + + std::error_code error; + if (!filesystem::is_empty(full_folder, error) || error) { + break; + } + + if (remove(full_folder.c_str())) { + return ReturnStatus(fd, false, "Can't delete empty image folder '" + full_folder + "'"); + } + + last_slash = folder.rfind('/'); + } + + LOGINFO("Deleted image file '%s'", full_filename.c_str()); return ReturnStatus(fd); } @@ -207,9 +254,11 @@ bool RascsiImage::RenameImage(int fd, const PbCommand& command) if (from.empty()) { return ReturnStatus(fd, false, "Can't rename image file: Missing source filename"); } - if (from.find('/') != string::npos) { - return ReturnStatus(fd, false, "The source filename '" + from + "' must not contain a path"); + + if (!CheckDepth(from)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + from + "'").c_str()); } + from = default_image_folder + "/" + from; if (!IsValidSrcFilename(from)) { return ReturnStatus(fd, false, "Can't rename image file: '" + from + "': Invalid name or type"); @@ -219,14 +268,20 @@ bool RascsiImage::RenameImage(int fd, const PbCommand& command) if (to.empty()) { return ReturnStatus(fd, false, "Can't rename image file '" + from + "': Missing destination filename"); } - if (to.find('/') != string::npos) { - return ReturnStatus(fd, false, "The destination filename '" + to + "' must not contain a path"); + + if (!CheckDepth(to)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + to + "'").c_str()); } + to = default_image_folder + "/" + to; if (!IsValidDstFilename(to)) { return ReturnStatus(fd, false, "Can't rename image file '" + from + "' to '" + to + "': File already exists"); } + if (!CreateImageFolder(fd, to)) { + return false; + } + if (rename(from.c_str(), to.c_str())) { return ReturnStatus(fd, false, "Can't rename image file '" + from + "' to '" + to + "': " + string(strerror(errno))); } @@ -242,9 +297,11 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command) if (from.empty()) { return ReturnStatus(fd, false, "Can't copy image file: Missing source filename"); } - if (from.find('/') != string::npos) { - return ReturnStatus(fd, false, "The source filename '" + from + "' must not contain a path"); + + if (!CheckDepth(from)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + from + "'").c_str()); } + from = default_image_folder + "/" + from; if (!IsValidSrcFilename(from)) { return ReturnStatus(fd, false, "Can't copy image file: '" + from + "': Invalid name or type"); @@ -254,9 +311,11 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command) if (to.empty()) { return ReturnStatus(fd, false, "Can't copy image file '" + from + "': Missing destination filename"); } - if (to.find('/') != string::npos) { - return ReturnStatus(fd, false, "The destination filename '" + to + "' must not contain a path"); + + if (!CheckDepth(to)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + to + "'").c_str()); } + to = default_image_folder + "/" + to; if (!IsValidDstFilename(to)) { return ReturnStatus(fd, false, "Can't copy image file '" + from + "' to '" + to + "': File already exists"); @@ -267,6 +326,10 @@ bool RascsiImage::CopyImage(int fd, const PbCommand& command) return ReturnStatus(fd, false, "Can't access source image file '" + from + "': " + string(strerror(errno))); } + if (!CreateImageFolder(fd, to)) { + return false; + } + // Symbolic links need a special handling if ((st.st_mode & S_IFMT) == S_IFLNK) { if (symlink(filesystem::read_symlink(from).c_str(), to.c_str())) { @@ -318,9 +381,11 @@ bool RascsiImage::SetImagePermissions(int fd, const PbCommand& command) if (filename.empty()) { return ReturnStatus(fd, false, "Missing image filename"); } - if (filename.find('/') != string::npos) { - return ReturnStatus(fd, false, "The image filename '" + filename + "' must not contain a path"); + + if (!CheckDepth(filename)) { + return ReturnStatus(fd, false, ("Invalid folder hierarchy depth '" + filename + "'").c_str()); } + filename = default_image_folder + "/" + filename; if (!IsValidSrcFilename(filename)) { return ReturnStatus(fd, false, "Can't modify image file '" + filename + "': Invalid name or type"); diff --git a/src/raspberrypi/rascsi_image.h b/src/raspberrypi/rascsi_image.h index 21b28e2c..debbdd04 100644 --- a/src/raspberrypi/rascsi_image.h +++ b/src/raspberrypi/rascsi_image.h @@ -22,6 +22,10 @@ public: RascsiImage(); ~RascsiImage() {}; + void SetDepth(int depth) { this->depth = depth; } + int GetDepth() { return depth; } + bool CheckDepth(const string&); + bool CreateImageFolder(int, const string&); string GetDefaultImageFolder() const { return default_image_folder; } string SetDefaultImageFolder(const string&); bool IsValidSrcFilename(const string&); @@ -35,4 +39,5 @@ public: private: string default_image_folder; + int depth; }; diff --git a/src/raspberrypi/rascsi_interface.proto b/src/raspberrypi/rascsi_interface.proto index 3ecfd1bb..f2d22d31 100644 --- a/src/raspberrypi/rascsi_interface.proto +++ b/src/raspberrypi/rascsi_interface.proto @@ -35,7 +35,7 @@ enum PbOperation { // Attach devices and return the new device list (PbDevicesInfo) // Parameters (mutually exclusive): - // "file": The filename relative to the default image folder. It must not contain a slash. + // "file": The filename relative to the default image folder // "interfaces": A prioritized comma-separated list of interfaces to create a network bridge for. ATTACH = 1; @@ -54,7 +54,7 @@ enum PbOperation { // Insert medium // Parameters: - // "file": The filename, relative to the default image folder. It must not contain a slash. + // "file": The filename, relative to the default image folder INSERT = 6; // Eject medium @@ -68,7 +68,8 @@ enum PbOperation { // Gets the server information (PbServerInfo). Calling this operation should be avoided because it // may return a lot of data. More specific other operations should be used instead. - // "filename_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned + // "folder_pattern": Optional filter, only folder names containing the case-insensitive pattern are returned + // "file_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned SERVER_INFO = 10; // Get rascsi server version (PbVersionInfo) @@ -83,10 +84,11 @@ enum PbOperation { // Get information on available image files in the default image folder (PbImageFilesInfo) // Parameters: - // "filename_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned + // "folder_pattern": Optional filter, only folder names containing the case-insensitive pattern are returned + // "file_pattern": Optional filter, only filenames containing the case-insensitive pattern are returned DEFAULT_IMAGE_FILES_INFO = 14; - // Get information on an image file (not necessarily in the default image folder) based on an absolute path. + // Get information on an image file (not necessarily in the default image folder). // Parameters: // "file": The filename. Either an absolute path or a path relative to the default image folder. IMAGE_FILE_INFO = 15; @@ -126,39 +128,39 @@ enum PbOperation { // Create an image file. The image file must not yet exist. // Parameters: - // "file": The filename, relative to the default image folder. It must not contain a slash. + // "file": The filename, relative to the default image folder // "size": The file size in bytes, must be a multiple of 512 // "read_only": Optional, "true" (case-insensitive) in order to create a read-only file CREATE_IMAGE = 24; // Delete an image file. // Parameters: - // "file": The filename, relative to the default image folder. It must not contain a slash. + // "file": The filename, relative to the default image folder. DELETE_IMAGE = 25; - // Rename an image file. + // Rename/Move an image file. // Parameters: - // "from": The old filename, relative to the default image folder. It must not contain a slash. - // "to": The new filename, relative to the default image folder. It must not contain a slash. + // "from": The old filename, relative to the default image folder + // "to": The new filename, relative to the default image folder // The new filename must not yet exist. RENAME_IMAGE = 26; // Copy an image file. // Parameters: - // "from": The source filename, relative to the default image folder. It must not contain a slash. - // "to": The destination filename, relative to the default image folder. It must not contain a slash. + // "from": The source filename, relative to the default image folder + // "to": The destination filename, relative to the default image folder // "read_only": Optional, "true" (case-insensitive) in order to create a read-only file // The destination filename must not yet exist. COPY_IMAGE = 27; // Write-protect an image file. // Parameters: - // "file": The filename, relative to the default image folder. It must not contain a slash. + // "file": The filename, relative to the default image folder PROTECT_IMAGE = 28; // Make an image file writable. // Parameters: - // "file": The filename, relative to the default image folder. It must not contain a slash. + // "file": The filename, relative to the default image folder UNPROTECT_IMAGE = 29; // Check whether an authentication token is valid. A client can use this operation in order to @@ -173,9 +175,8 @@ enum PbOperation { // The operation parameter meta data. The parameter data type is provided by the protobuf API. message PbOperationParameter { string name = 1; - // Optional short localized description, key is the lower case locale (e.g. en, de). - // Falling back to "en" is recommended if a description for a particular language is missing. - map description = 2; + // Optional short description + string description = 2; // There is no specific set of permitted values if empty repeated string permitted_values = 3; // Optional default value @@ -188,9 +189,8 @@ message PbOperationParameter { message PbOperationMetaData { // The operation name at the time the server-side protobuf code was generated. string server_side_name = 1; - // Optional short localized description, key is the lower case locale (e.g. en, de). - // Falling back to "en" is recommended if a description for a particular language is missing. - map description = 2; + // Optional short description + string description = 2; repeated PbOperationParameter parameters = 3; } @@ -275,6 +275,8 @@ message PbImageFile { message PbImageFilesInfo { string default_image_folder = 1; repeated PbImageFile image_files = 2; + // The maximum nesting depth, configured with the -R option + int32 depth = 3; } // Log level information diff --git a/src/raspberrypi/rascsi_response.cpp b/src/raspberrypi/rascsi_response.cpp index 8aa86286..8ac41f13 100644 --- a/src/raspberrypi/rascsi_response.cpp +++ b/src/raspberrypi/rascsi_response.cpp @@ -141,39 +141,45 @@ bool RascsiResponse::GetImageFile(PbImageFile *image_file, const string& filenam } void RascsiResponse::GetAvailableImages(PbImageFilesInfo& image_files_info, const string& default_image_folder, - const string& folder, const string& pattern, int scan_depth) { - string pattern_lower = pattern; - transform(pattern_lower.begin(), pattern_lower.end(), pattern_lower.begin(), ::tolower); + const string& folder, const string& folder_pattern, const string& file_pattern, int scan_depth) { + string folder_pattern_lower = folder_pattern; + transform(folder_pattern_lower.begin(), folder_pattern_lower.end(), folder_pattern_lower.begin(), ::tolower); + + string file_pattern_lower = file_pattern; + transform(file_pattern_lower.begin(), file_pattern_lower.end(), file_pattern_lower.begin(), ::tolower); if (scan_depth-- >= 0) { DIR *d = opendir(folder.c_str()); if (d) { struct dirent *dir; while ((dir = readdir(d))) { - string filename = folder + "/" + dir->d_name; - - string name_lower = filename; - if (!pattern.empty()) { - transform(name_lower.begin(), name_lower.end(), name_lower.begin(), ::tolower); - } - bool is_supported_type = dir->d_type == DT_REG || dir->d_type == DT_DIR || dir->d_type == DT_LNK || dir->d_type == DT_BLK; if (is_supported_type && dir->d_name[0] != '.') { + string name_lower = dir->d_name; + if (!file_pattern.empty()) { + transform(name_lower.begin(), name_lower.end(), name_lower.begin(), ::tolower); + } + + string filename = folder + "/" + dir->d_name; + struct stat st; if (dir->d_type == DT_REG && !stat(filename.c_str(), &st)) { if (!st.st_size) { - LOGTRACE("File '%s' in image folder '%s' has a size of 0 bytes", dir->d_name, folder.c_str()); + LOGWARN("File '%s' in image folder '%s' has a size of 0 bytes", dir->d_name, folder.c_str()); continue; } } else if (dir->d_type == DT_LNK && stat(filename.c_str(), &st)) { - LOGTRACE("Symlink '%s' in image folder '%s' is broken", dir->d_name, folder.c_str()); + LOGWARN("Symlink '%s' in image folder '%s' is broken", dir->d_name, folder.c_str()); continue; } else if (dir->d_type == DT_DIR) { - GetAvailableImages(image_files_info, default_image_folder, filename, pattern, scan_depth); + if (folder_pattern_lower.empty() || name_lower.find(folder_pattern_lower) != string::npos) { + GetAvailableImages(image_files_info, default_image_folder, filename, folder_pattern, + file_pattern, scan_depth); + } continue; } - if (pattern.empty() || name_lower.find(pattern_lower) != string::npos) { + if (file_pattern_lower.empty() || name_lower.find(file_pattern_lower) != string::npos) { PbImageFile *image_file = new PbImageFile(); if (GetImageFile(image_file, filename)) { GetImageFile(image_files_info.add_image_files(), filename.substr(default_image_folder.length() + 1)); @@ -188,23 +194,27 @@ void RascsiResponse::GetAvailableImages(PbImageFilesInfo& image_files_info, cons } } -PbImageFilesInfo *RascsiResponse::GetAvailableImages(PbResult& result, const string& pattern, int scan_depth) +PbImageFilesInfo *RascsiResponse::GetAvailableImages(PbResult& result, const string& folder_pattern, + const string& file_pattern, int scan_depth) { PbImageFilesInfo *image_files_info = new PbImageFilesInfo(); string default_image_folder = rascsi_image->GetDefaultImageFolder(); image_files_info->set_default_image_folder(default_image_folder); + image_files_info->set_depth(scan_depth); - GetAvailableImages(*image_files_info, default_image_folder, default_image_folder, pattern, scan_depth); + GetAvailableImages(*image_files_info, default_image_folder, default_image_folder, folder_pattern, + file_pattern, scan_depth); result.set_status(true); return image_files_info; } -void RascsiResponse::GetAvailableImages(PbResult& result, PbServerInfo& server_info, const string& pattern, int scan_depth) +void RascsiResponse::GetAvailableImages(PbResult& result, PbServerInfo& server_info, const string& folder_pattern, + const string& file_pattern, int scan_depth) { - PbImageFilesInfo *image_files_info = GetAvailableImages(result, pattern, scan_depth); + PbImageFilesInfo *image_files_info = GetAvailableImages(result, folder_pattern, file_pattern, scan_depth); image_files_info->set_default_image_folder(rascsi_image->GetDefaultImageFolder()); server_info.set_allocated_image_files_info(image_files_info); @@ -283,19 +293,19 @@ PbDeviceTypesInfo *RascsiResponse::GetDeviceTypesInfo(PbResult& result, const Pb } PbServerInfo *RascsiResponse::GetServerInfo(PbResult& result, const vector& devices, const set& reserved_ids, - const string& current_log_level, const string& filename_pattern, int scan_depth) + const string& current_log_level, const string& folder_pattern, const string& file_pattern, int scan_depth) { PbServerInfo *server_info = new PbServerInfo(); server_info->set_allocated_version_info(GetVersionInfo(result)); server_info->set_allocated_log_level_info(GetLogLevelInfo(result, current_log_level)); GetAllDeviceTypeProperties(*server_info->mutable_device_types_info()); - GetAvailableImages(result, *server_info, filename_pattern, scan_depth); + GetAvailableImages(result, *server_info, folder_pattern, file_pattern, scan_depth); server_info->set_allocated_network_interfaces_info(GetNetworkInterfacesInfo(result)); server_info->set_allocated_mapping_info(GetMappingInfo(result)); GetDevices(*server_info, devices); server_info->set_allocated_reserved_ids_info(GetReservedIds(result, reserved_ids)); - server_info->set_allocated_operation_info(GetOperationInfo(result)); + server_info->set_allocated_operation_info(GetOperationInfo(result, scan_depth)); result.set_status(true); @@ -356,7 +366,7 @@ PbMappingInfo *RascsiResponse::GetMappingInfo(PbResult& result) return mapping_info; } -PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result) +PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result, int depth) { PbOperationInfo *operation_info = new PbOperationInfo(); @@ -391,7 +401,10 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result) CreateOperation(operation_info, meta_data, UNPROTECT, "Unprotect medium, device-specific parameters are required"); meta_data = new PbOperationMetaData(); - AddOperationParameter(meta_data, "filename_pattern", "Pattern for filtering image file names"); + if (depth) { + AddOperationParameter(meta_data, "folder_pattern", "Pattern for filtering image folder names"); + } + AddOperationParameter(meta_data, "file_pattern", "Pattern for filtering image file names"); CreateOperation(operation_info, meta_data, SERVER_INFO, "Get rascsi server information"); meta_data = new PbOperationMetaData(); @@ -404,7 +417,10 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result) CreateOperation(operation_info, meta_data, DEVICE_TYPES_INFO, "Get device properties by device type"); meta_data = new PbOperationMetaData(); - AddOperationParameter(meta_data, "filename_pattern", "Pattern for filtering image file names"); + if (depth) { + AddOperationParameter(meta_data, "folder_pattern", "Pattern for filtering image folder names"); + } + AddOperationParameter(meta_data, "file_pattern", "Pattern for filtering image file names"); CreateOperation(operation_info, meta_data, DEFAULT_IMAGE_FILES_INFO, "Get information on available image files"); meta_data = new PbOperationMetaData(); @@ -463,7 +479,7 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result) CreateOperation(operation_info, meta_data, RENAME_IMAGE, "Rename image file"); meta_data = new PbOperationMetaData(); - AddOperationParameter(meta_data, "from", "Source image file name image file name", "", true); + AddOperationParameter(meta_data, "from", "Source image file name", "", true); AddOperationParameter(meta_data, "to", "Destination image file name", "", true); parameter = AddOperationParameter(meta_data, "read_only", "Read-only flag", "false"); parameter->add_permitted_values("true"); @@ -497,7 +513,7 @@ void RascsiResponse::CreateOperation(PbOperationInfo *operation_info, PbOperatio const PbOperation& operation, const string& description) { meta_data->set_server_side_name(PbOperation_Name(operation)); - (*meta_data->mutable_description())["en"] = description; + meta_data->set_description(description); int ordinal = PbOperation_descriptor()->FindValueByName(PbOperation_Name(operation))->index(); (*operation_info->mutable_operations())[ordinal] = *meta_data; } @@ -507,7 +523,7 @@ PbOperationParameter *RascsiResponse::AddOperationParameter(PbOperationMetaData { PbOperationParameter *parameter = meta_data->add_parameters(); parameter->set_name(name); - (*parameter->mutable_description())["en"] = description; + parameter->set_description(description); parameter->set_default_value(default_value); parameter->set_is_mandatory(is_mandatory); diff --git a/src/raspberrypi/rascsi_response.h b/src/raspberrypi/rascsi_response.h index da607277..460d9925 100644 --- a/src/raspberrypi/rascsi_response.h +++ b/src/raspberrypi/rascsi_response.h @@ -29,17 +29,18 @@ public: ~RascsiResponse() {}; bool GetImageFile(PbImageFile *, const string&); - PbImageFilesInfo *GetAvailableImages(PbResult&, const string&, int); + PbImageFilesInfo *GetAvailableImages(PbResult&, const string&, const string&, int); PbReservedIdsInfo *GetReservedIds(PbResult&, const set&); void GetDevices(PbServerInfo&, const vector&); void GetDevicesInfo(PbResult&, const PbCommand&, const vector&, int); PbDeviceTypesInfo *GetDeviceTypesInfo(PbResult&, const PbCommand&); PbVersionInfo *GetVersionInfo(PbResult&); - PbServerInfo *GetServerInfo(PbResult&, const vector&, const set&, const string&, const string&, int); + PbServerInfo *GetServerInfo(PbResult&, const vector&, const set&, const string&, const string&, + const string&, int); PbNetworkInterfacesInfo *GetNetworkInterfacesInfo(PbResult&); PbMappingInfo *GetMappingInfo(PbResult&); PbLogLevelInfo *GetLogLevelInfo(PbResult&, const string&); - PbOperationInfo *GetOperationInfo(PbResult&); + PbOperationInfo *GetOperationInfo(PbResult&, int); private: @@ -52,8 +53,8 @@ private: void GetDevice(const Device *, PbDevice *); void GetAllDeviceTypeProperties(PbDeviceTypesInfo&); void GetDeviceTypeProperties(PbDeviceTypesInfo&, PbDeviceType); - void GetAvailableImages(PbImageFilesInfo&, const string&, const string&, const string&, int); - void GetAvailableImages(PbResult& result, PbServerInfo&, const string&, int); + void GetAvailableImages(PbImageFilesInfo&, const string&, const string&, const string&, const string&, int); + void GetAvailableImages(PbResult& result, PbServerInfo&, const string&, const string&, int); void CreateOperation(PbOperationInfo *, PbOperationMetaData *, const PbOperation&, const string&); PbOperationParameter *AddOperationParameter(PbOperationMetaData *, const string&, const string&, const string& = "", bool = false); diff --git a/src/raspberrypi/rasctl.cpp b/src/raspberrypi/rasctl.cpp index a04237be..398831ac 100644 --- a/src/raspberrypi/rasctl.cpp +++ b/src/raspberrypi/rasctl.cpp @@ -91,6 +91,23 @@ PbDeviceType ParseType(const char *optarg) } } +void SetPatternParams(PbCommand& command, const string& patterns) +{ + string folder_pattern; + string file_pattern; + size_t separator_pos = patterns.find(COMPONENT_SEPARATOR); + if (separator_pos != string::npos) { + folder_pattern = patterns.substr(0, separator_pos); + file_pattern = patterns.substr(separator_pos + 1); + } + else { + file_pattern = patterns; + } + + AddParam(command, "folder_pattern", folder_pattern); + AddParam(command, "file_pattern", file_pattern); +} + int main(int argc, char* argv[]) { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -139,7 +156,7 @@ int main(int argc, char* argv[]) opterr = 1; int opt; - while ((opt = getopt(argc, argv, "elmosvDINOTVXa:b:c:d:f:h:i:n:p:r:t:u:x:C:E:F:L:R:P::")) != -1) { + while ((opt = getopt(argc, argv, "e::lmos::vDINOTVXa:b:c:d:f:h:i:n:p:r:t:u:x:C:E:F:L:P::R:")) != -1) { switch (opt) { case 'i': { int id; @@ -199,7 +216,10 @@ int main(int argc, char* argv[]) case 'e': command.set_operation(DEFAULT_IMAGE_FILES_INFO); - break; + if (optarg) { + SetPatternParams(command, optarg); + } + break; case 'F': command.set_operation(DEFAULT_FOLDER); @@ -299,7 +319,10 @@ int main(int argc, char* argv[]) case 's': command.set_operation(SERVER_INFO); - break; + if (optarg) { + SetPatternParams(command, optarg); + } + break; case 'v': cout << "rasctl version: " << rascsi_get_version_string() << endl; diff --git a/src/raspberrypi/rasctl_commands.cpp b/src/raspberrypi/rasctl_commands.cpp index 293321e6..a91c1131 100644 --- a/src/raspberrypi/rasctl_commands.cpp +++ b/src/raspberrypi/rasctl_commands.cpp @@ -127,10 +127,10 @@ void RasctlCommands::CommandReserveIds(const string& reserved_ids) void RasctlCommands::CommandCreateImage(const string& image_params) { - size_t separatorPos = image_params.find(COMPONENT_SEPARATOR); - if (separatorPos != string::npos) { - AddParam(command, "file", image_params.substr(0, separatorPos)); - AddParam(command, "size", image_params.substr(separatorPos + 1)); + size_t separator_pos = image_params.find(COMPONENT_SEPARATOR); + if (separator_pos != string::npos) { + AddParam(command, "file", image_params.substr(0, separator_pos)); + AddParam(command, "size", image_params.substr(separator_pos + 1)); } else { cerr << "Error: Invalid file descriptor '" << image_params << "', format is NAME:SIZE" << endl; @@ -151,10 +151,10 @@ void RasctlCommands::CommandDeleteImage(const string& filename) void RasctlCommands::CommandRenameImage(const string& image_params) { - size_t separatorPos = image_params.find(COMPONENT_SEPARATOR); - if (separatorPos != string::npos) { - AddParam(command, "from", image_params.substr(0, separatorPos)); - AddParam(command, "to", image_params.substr(separatorPos + 1)); + size_t separator_pos = image_params.find(COMPONENT_SEPARATOR); + if (separator_pos != string::npos) { + AddParam(command, "from", image_params.substr(0, separator_pos)); + AddParam(command, "to", image_params.substr(separator_pos + 1)); } else { cerr << "Error: Invalid file descriptor '" << image_params << "', format is CURRENT_NAME:NEW_NAME" << endl; @@ -166,10 +166,10 @@ void RasctlCommands::CommandRenameImage(const string& image_params) void RasctlCommands::CommandCopyImage(const string& image_params) { - size_t separatorPos = image_params.find(COMPONENT_SEPARATOR); - if (separatorPos != string::npos) { - AddParam(command, "from", image_params.substr(0, separatorPos)); - AddParam(command, "to", image_params.substr(separatorPos + 1)); + size_t separator_pos = image_params.find(COMPONENT_SEPARATOR); + if (separator_pos != string::npos) { + AddParam(command, "from", image_params.substr(0, separator_pos)); + AddParam(command, "to", image_params.substr(separator_pos + 1)); } else { cerr << "Error: Invalid file descriptor '" << image_params << "', format is CURRENT_NAME:NEW_NAME" << endl; diff --git a/src/raspberrypi/rasctl_display.cpp b/src/raspberrypi/rasctl_display.cpp index cf25e403..f17c0301 100644 --- a/src/raspberrypi/rasctl_display.cpp +++ b/src/raspberrypi/rasctl_display.cpp @@ -230,6 +230,7 @@ void RasctlDisplay::DisplayImageFile(const PbImageFile& image_file_info) void RasctlDisplay::DisplayImageFiles(const PbImageFilesInfo& image_files_info) { cout << "Default image file folder: " << image_files_info.default_image_folder() << endl; + cout << "Supported folder depth: " << image_files_info.depth() << endl; if (image_files_info.image_files().empty()) { cout << " No image files available" << endl; @@ -292,12 +293,12 @@ void RasctlDisplay::DisplayOperationInfo(const PbOperationInfo& operation_info) } } - cout << "Remote operations supported by rascsi and their parameters:" << endl; + cout << "Operations supported by rascsi server and their parameters:" << endl; for (const auto& operation : sorted_operations) { if (!operation.second.server_side_name().empty()) { cout << " " << operation.first; if (!operation.second.description().empty()) { - cout << " (" << operation.second.description().at("en") << ")"; + cout << " (" << operation.second.description() << ")"; } cout << endl; @@ -305,7 +306,7 @@ void RasctlDisplay::DisplayOperationInfo(const PbOperationInfo& operation_info) cout << " " << parameter.name() << ": " << (parameter.is_mandatory() ? "mandatory" : "optional"); if (!parameter.description().empty()) { - cout << " (" << parameter.description().at("en") << ")"; + cout << " (" << parameter.description() << ")"; } cout << endl; diff --git a/src/raspberrypi/scsimon.cpp b/src/raspberrypi/scsimon.cpp index 96c0c496..7c994280 100644 --- a/src/raspberrypi/scsimon.cpp +++ b/src/raspberrypi/scsimon.cpp @@ -337,7 +337,8 @@ int main(int argc, char* argv[]) DWORD prev_sample = 0xFFFFFFFF; DWORD this_sample = 0; struct sched_param schparam; - timeval start_time, stop_time; + timeval start_time; + timeval stop_time; uint64_t loop_count = 0; timeval time_diff; uint64_t elapsed_us;