From b9c3ad236752ba417de24911eb66e20e7b60a99d Mon Sep 17 00:00:00 2001 From: Robin Davies Date: Sat, 12 Oct 2024 19:22:51 -0400 Subject: [PATCH] Set pipedal_d shell to /usr/sbin/nologin --- CMakeLists.txt | 4 ++-- README.md | 4 ++-- docs/ChangingTheWebServerPort.md | 2 +- docs/Installing.md | 6 +++--- docs/download.md | 4 ++-- docs/index.md | 4 ++-- react/src/AppThemed.tsx | 2 +- src/CMakeLists.txt | 23 ++++++++++++++------ src/ConfigMain.cpp | 37 ++++++++++++++++++++++++++++++-- src/SetWifiConfig.cpp | 20 ++++++++--------- src/main.cpp | 32 +++++++++++++++++++++++++-- 11 files changed, 105 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94de23a..aa33e24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,10 @@ cmake_minimum_required(VERSION 3.16.0) project(pipedal - VERSION 1.3.56 + VERSION 1.3.57 DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi" HOMEPAGE_URL "https://rerdavies.github.io/pipedal" ) -set (DISPLAY_VERSION "PiPedal v1.3.56-Release") +set (DISPLAY_VERSION "PiPedal v1.3.57-Experimental") set (PACKAGE_ARCHITECTURE "arm64") set (CMAKE_INSTALL_PREFIX "/usr/") diff --git a/README.md b/README.md index 125dc9d..1a21295 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ -Download: v1.3.56 +Download: v1.3.57 Website: [https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal). Documentation: [https://rerdavies.github.io/pipedal/Documentation.html](https://rerdavies.github.io/pipedal/Documentation.html).   -#### NEW version 1.3.56 Release, providing [snapshots](https://rerdavies.github.io/pipedal/Snaphots.html), and a new Performance View. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. +#### NEW version 1.3.57 Release, providing [snapshots](https://rerdavies.github.io/pipedal/Snaphots.html), and a new Performance View. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.   diff --git a/docs/ChangingTheWebServerPort.md b/docs/ChangingTheWebServerPort.md index 36135bb..6b59875 100644 --- a/docs/ChangingTheWebServerPort.md +++ b/docs/ChangingTheWebServerPort.md @@ -10,7 +10,7 @@ You can optionally restrict the addresses on which PiPedal will respond by provi To configure PiPedal to only accept connections on the Wi-Fi host access point: - sudo pipedalconfig --install --port 172.23.0.2:80 + sudo pipedalconfig --install --port 192.168.60.1:80 -------- [<< Command-Line Configuration of PiPedal](CommandLine.md) | [Up](Documentation.md) | [Using LV2 Audio Plugins >>](UsingLv2Plugins.md) \ No newline at end of file diff --git a/docs/Installing.md b/docs/Installing.md index 8d88236..0ac4947 100644 --- a/docs/Installing.md +++ b/docs/Installing.md @@ -13,17 +13,17 @@ page_icon: img/Install4.jpg Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS bookworm (64-bit) v1.3.56](https://github.com/rerdavies/pipedal/releases/download/) +- [Raspberry Pi OS bookworm (64-bit) v1.3.57](https://github.com/rerdavies/pipedal/releases/download/) - [Ubuntu/Raspberry Pi OS bullseyeye (64-bit) v1.2.31](https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb) -Version 1.3.56 has not yet been tested on Ubuntu or Raspberry Pi OS bullseye. On these platforms, we recommend that you use version 1.1.31. +Version 1.3.57 has not yet been tested on Ubuntu or Raspberry Pi OS bullseye. On these platforms, we recommend that you use version 1.1.31. Install the package by running ``` sudo apt update cd ~/Downloads - sudo apt-get install pipedal_1.3.56_arm64.deb + sudo apt-get install pipedal_1.3.57_arm64.deb ``` Adjust accordingly if you have downloaded v1.1.31. diff --git a/docs/download.md b/docs/download.md index 91efbd1..fcc9ca4 100644 --- a/docs/download.md +++ b/docs/download.md @@ -4,7 +4,7 @@ Download the most recent Debian (.deb) package for your platform: -- Raspberry Pi OS Bookworm (64-bit) v1.3.56 +- Raspberry Pi OS Bookworm (64-bit) v1.3.57 Install the package by running @@ -12,7 +12,7 @@ Install the package by running ``` sudo apt update cd ~/Downloads - sudo apt-get install ./pipedal_1.3.56_arm64.deb + sudo apt-get install ./pipedal_1.3.57_arm64.deb ``` Follow the instructions in [_Configuring PiPedal After Installation_](https://rerdavies.github.io/pipedal/Configuring.html) to complete the installation. diff --git a/docs/index.md b/docs/index.md index e849e82..67d6b02 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,7 @@ -v1.3.56 +v1.3.57   @@ -9,7 +9,7 @@ To download PiPedal, click [here](download.md). To view PiPedal documentation, click [here](Documentation.md). -#### NEW version 1.3.56 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. +#### NEW version 1.3.57 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.   diff --git a/react/src/AppThemed.tsx b/react/src/AppThemed.tsx index 3b54b8e..2dd578e 100644 --- a/react/src/AppThemed.tsx +++ b/react/src/AppThemed.tsx @@ -103,7 +103,7 @@ const appStyles = (theme: Theme) => createStyles({ bottom: "0px", opacity: 0.8, background: - isDarkMode() ? "#222" : "#DDD", + isDarkMode() ? "#222" : "#EEE", }, loadingContent: { display: "block", diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9d7f1a1..f6c17cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,6 +5,10 @@ set (CMAKE_INSTALL_PREFIX "/usr/") set (USE_PCH 1) +set (ENABLE_BACKTRACE 1) + +set (USE_SANITIZE true) + set(CXX_STANDARD 20) include(FindPkgConfig) @@ -96,9 +100,6 @@ endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) -set (USE_SANITIZE true) - - if (!ENABLE_VST3) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-psabi -DARCHITECTURE=${CPACK_SYSTEM_NAME}") else() @@ -119,10 +120,17 @@ if (CMAKE_BUILD_TYPE MATCHES Debug) endif() elseif(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) message(STATUS "RelWithgDebInfo build") - #set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "" ) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG" ) else() message(STATUS "Release build") - #set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "" ) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG" ) +endif() + +if (ENABLE_BACKTRACE) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") + if (${DEBIAN_ARCHITECTURE} MATCHES arm64) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funwind-tables") + endif() endif() @@ -292,6 +300,9 @@ add_executable(pipedald ) target_include_directories(pipedald PRIVATE ${PIPEDAL_INCLUDES}) +target_compile_definitions(pipedald PRIVATE "ENABLE_BACKTRACE=${ENABLE_BACKTRACE}") + + target_link_libraries(pipedald PRIVATE PiPedalCommon ${PIPEDAL_LIBS} @@ -627,7 +638,7 @@ add_executable(pipedalconfig ) -target_link_libraries(pipedalconfig PRIVATE PiPedalCommon pthread atomic uuid stdc++fs +target_link_libraries(pipedalconfig PRIVATE PiPedalCommon pthread atomic uuid stdc++fs ) add_executable(pipedal_latency_test diff --git a/src/ConfigMain.cpp b/src/ConfigMain.cpp index 6b5e159..8170388 100644 --- a/src/ConfigMain.cpp +++ b/src/ConfigMain.cpp @@ -44,6 +44,9 @@ #include #include "ofstream_synced.hpp" +#include +#include + #define P2PD_DISABLED #if JACK_HOST @@ -88,6 +91,29 @@ namespace fs = std::filesystem; #define REMOVE_OLD_SERVICE 0 // Grandfathering: whether to remove the old shutdown service (now pipedaladmind) #define OLD_SHUTDOWN_SERVICE "pipedalshutdownd" + + +void changeUserShell(const char* username, const char* newShell) { + struct passwd* pw; + struct passwd p; + char buf[1024]; + + pw = getpwnam(username); + if (pw == nullptr) { + throw std::runtime_error("User not found"); + } + if (strcmp(pw->pw_shell,newShell) == 0) { + return; + } + std::string args = SS("/usr/sbin/usermod -s " << newShell << " " << username); + + if (silentSysExec(args.c_str()) != EXIT_SUCCESS) + { + cout << "Failed to set shell for " << username << endl; + } +} + + fs::path GetServiceFileName(const std::string &serviceName) { return fs::path(SERVICE_PATH) / (serviceName + ".service"); @@ -926,7 +952,7 @@ void Install(const fs::path &programPrefix, const std::string endpointAddress) try { // apply policy changes we dropped into the polkit configuration files (allows pipedal_d to use NetworkManager dbus apis). - silentSysExec(SYSTEMCTL_BIN " restart polkit"); + silentSysExec(SYSTEMCTL_BIN " restart polkit.service"); DeployVarConfig(); @@ -994,7 +1020,7 @@ void Install(const fs::path &programPrefix, const std::string endpointAddress) if (!userExists(SERVICE_ACCOUNT_NAME)) { - if (sysExec(USERADD_BIN " " SERVICE_ACCOUNT_NAME " -g " SERVICE_GROUP_NAME " -m --home /var/pipedal/home -N -r") != EXIT_SUCCESS) + if (sysExec(USERADD_BIN " " SERVICE_ACCOUNT_NAME " -g " SERVICE_GROUP_NAME " -s /usr/sbin/nologin -m --home /var/pipedal/home -N -r") != EXIT_SUCCESS) { // throw std::runtime_error("Failed to create service account."); } @@ -1007,6 +1033,13 @@ void Install(const fs::path &programPrefix, const std::string endpointAddress) // add to netdev group sysExec(USERMOD_BIN " -a -G " NETDEV_GROUP_NAME " " SERVICE_ACCOUNT_NAME); + try { + changeUserShell(SERVICE_ACCOUNT_NAME, "/usr/sbin/nologon"); + } catch (const std::exception&e) + { + cout << "Error: Can't set user shell for pipedal_d. " << e.what() << std::endl; + + } // create and configure /var directory. fs::path varDirectory("/var/pipedal"); diff --git a/src/SetWifiConfig.cpp b/src/SetWifiConfig.cpp index cc866c8..cc5a131 100644 --- a/src/SetWifiConfig.cpp +++ b/src/SetWifiConfig.cpp @@ -544,9 +544,9 @@ p2p configuration: dnsmaqsq.d/30-pipedal-p2p.conf: interface=p2p-wlan0-0 - dhcp-range=p2p-wlan0,173.24.0.3,172.23.0.127,1h + dhcp-range=p2p-wlan0,173.24.0.3,192.168.60.127,1h domain=local - address=/pipedal.local/172.23.0.2 + address=/pipedal.local/192.168.60.2 except-interface=eth0 except-interface=wlan0 @@ -556,8 +556,8 @@ except-interface=lo dhcpcd.conf: ====== interface p2p-wlan0-0 - static ip_address=172.24.0.1/16 - domain_name_servers=172.24.0.1 + static ip_address=192.168.60.1/16 + domain_name_servers=192.168.60.1 Watch resolv.conf to make sure we don't lose DNS servers. ************************************************************************************/ @@ -672,8 +672,8 @@ static void ConfigDhcpcdForP2p() // dhcpcd.conf: // ====== // interface p2p-wlan0-0 - // static ip_address=172.24.0.1/24 - // domain_name_server=172.24.0.1 + // static ip_address=192.168.60.1/24 + // domain_name_server=192.168.60.1 int line = dhcpcd.GetLineThatStartsWith("hostname"); std::string hostNameLine; @@ -691,8 +691,8 @@ static void ConfigDhcpcdForP2p() { line = dhcpcd.GetLineCount(); // interface p2p-wlan0-0 - // static ip_address=172.24.0.1/16 (trying int on .1.) - // domain_name_server=172.24.0.1 + // static ip_address=192.168.60.1/16 (trying int on .1.) + // domain_name_server=192.168.60.1 dhcpcd.InsertLine(line++, "interface p2p-wlan0-0"); dhcpcd.InsertLine(line++, " static ip_address=" P2P_INTERFACE_ADDR); @@ -705,8 +705,8 @@ static void ConfigDhcpcdForP2p() line = dhcpcd.GetLineCount(); } // interface p2p-wlan0-0 - // static ip_address=172.24.0.1/16 (trying int on .1.) - // domain_name_server=172.24.0.1 + // static ip_address=192.168.60.1/16 (trying int on .1.) + // domain_name_server=192.168.60.1 dhcpcd.InsertLine(line++, SS("allowinterfaces p2p-" << GetWifiConfigWlanAddress() << "-*").c_str()); dhcpcd.InsertLine(line++, "static ip_address=" P2P_INTERFACE_ADDR); diff --git a/src/main.cpp b/src/main.cpp index b3b4d63..8af84a4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,7 +27,7 @@ #include "ServiceConfiguration.hpp" #include "AvahiService.hpp" #include "WebServerConfig.hpp" - +#include #include "PiPedalSocket.hpp" #include "PluginHost.hpp" #include @@ -87,11 +87,39 @@ static void AsanCheck() exit(EXIT_FAILURE); } +#if ENABLE_BACKTRACE +void segvHandler(int sig) { + void *array[10]; + + // Get void*'s for all entries on the stack + size_t size; + size = backtrace(array, 10); + + // Print out all the frames to stderr + const char *message = "Error: SEGV signal received.\n"; + write(STDERR_FILENO,message,strlen(message)); + + backtrace_symbols_fd(array+2, size-2, STDERR_FILENO); + _exit(EXIT_FAILURE); +} + + +static void EnableBacktrace() +{ + signal(SIGSEGV, segvHandler); + +} +#endif + int main(int argc, char *argv[]) { #ifndef WIN32 - umask(002); // newly created files in /var/pipedal get 775-ish permissions, which improves debugging/live-service interaction. + umask(002); // newly created files in /var/pipedal get 7cd75-ish permissions, which improves debugging/live-service interaction. +#endif + +#if ENABLE_BACKTRACE + EnableBacktrace(); #endif // Check command line arguments.