diff --git a/SOURCES/main/cmdgrp/ban/add b/SOURCES/main/cmdgrp/ban/add index c27421c..f77d652 100644 --- a/SOURCES/main/cmdgrp/ban/add +++ b/SOURCES/main/cmdgrp/ban/add @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () # $*: ban list { include "$LibDir/ban.lib" diff --git a/SOURCES/main/cmdgrp/ban/delete b/SOURCES/main/cmdgrp/ban/delete index fc0f76d..9028dc9 100644 --- a/SOURCES/main/cmdgrp/ban/delete +++ b/SOURCES/main/cmdgrp/ban/delete @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () # $*: ban list { include "$LibDir/ban.lib" diff --git a/SOURCES/main/cmdgrp/ban/list b/SOURCES/main/cmdgrp/ban/list index 3feb6df..f29c6d5 100644 --- a/SOURCES/main/cmdgrp/ban/list +++ b/SOURCES/main/cmdgrp/ban/list @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/ban.lib" diff --git a/SOURCES/main/cmdgrp/ban/sync b/SOURCES/main/cmdgrp/ban/sync index 69b3af9..db214ec 100644 --- a/SOURCES/main/cmdgrp/ban/sync +++ b/SOURCES/main/cmdgrp/ban/sync @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/ban.lib" diff --git a/SOURCES/main/cmdgrp/game/fix-permissions b/SOURCES/main/cmdgrp/game/fix-permissions index 739987a..2443891 100644 --- a/SOURCES/main/cmdgrp/game/fix-permissions +++ b/SOURCES/main/cmdgrp/game/fix-permissions @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/game.lib" diff --git a/SOURCES/main/cmdgrp/game/run b/SOURCES/main/cmdgrp/game/run index 0427413..e6e8ff0 100644 --- a/SOURCES/main/cmdgrp/game/run +++ b/SOURCES/main/cmdgrp/game/run @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/game.lib" diff --git a/SOURCES/main/cmdgrp/game/update b/SOURCES/main/cmdgrp/game/update index 52ffa1c..ad83474 100644 --- a/SOURCES/main/cmdgrp/game/update +++ b/SOURCES/main/cmdgrp/game/update @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/game.lib" diff --git a/SOURCES/main/cmdgrp/game/validate b/SOURCES/main/cmdgrp/game/validate index 06e164f..0c6fbb4 100644 --- a/SOURCES/main/cmdgrp/game/validate +++ b/SOURCES/main/cmdgrp/game/validate @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/game.lib" diff --git a/SOURCES/main/cmdgrp/instance/add b/SOURCES/main/cmdgrp/instance/add index a9f1e33..a36f027 100644 --- a/SOURCES/main/cmdgrp/instance/add +++ b/SOURCES/main/cmdgrp/instance/add @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/chat b/SOURCES/main/cmdgrp/instance/chat index 14b355d..ccab197 100644 --- a/SOURCES/main/cmdgrp/instance/chat +++ b/SOURCES/main/cmdgrp/instance/chat @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/delete b/SOURCES/main/cmdgrp/instance/delete index c11a45c..b1d601d 100644 --- a/SOURCES/main/cmdgrp/instance/delete +++ b/SOURCES/main/cmdgrp/instance/delete @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/disable b/SOURCES/main/cmdgrp/instance/disable index 422457c..6f78b1a 100644 --- a/SOURCES/main/cmdgrp/instance/disable +++ b/SOURCES/main/cmdgrp/instance/disable @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/enable b/SOURCES/main/cmdgrp/instance/enable index 6eca309..5b1af74 100644 --- a/SOURCES/main/cmdgrp/instance/enable +++ b/SOURCES/main/cmdgrp/instance/enable @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/list b/SOURCES/main/cmdgrp/instance/list index 66f09ce..6b92b18 100644 --- a/SOURCES/main/cmdgrp/instance/list +++ b/SOURCES/main/cmdgrp/instance/list @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/restart b/SOURCES/main/cmdgrp/instance/restart index 2411ca4..4b3b3ea 100644 --- a/SOURCES/main/cmdgrp/instance/restart +++ b/SOURCES/main/cmdgrp/instance/restart @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/start b/SOURCES/main/cmdgrp/instance/start index 909dadf..cea9994 100644 --- a/SOURCES/main/cmdgrp/instance/start +++ b/SOURCES/main/cmdgrp/instance/start @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/instance/stop b/SOURCES/main/cmdgrp/instance/stop index 5ae0a35..2daa058 100644 --- a/SOURCES/main/cmdgrp/instance/stop +++ b/SOURCES/main/cmdgrp/instance/stop @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + true +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/instance.lib" diff --git a/SOURCES/main/cmdgrp/maprotate/load b/SOURCES/main/cmdgrp/maprotate/load index 544d37e..797262a 100644 --- a/SOURCES/main/cmdgrp/maprotate/load +++ b/SOURCES/main/cmdgrp/maprotate/load @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () # $*: Instance[s] { include "$LibDir/maprotate.lib" diff --git a/SOURCES/main/cmdgrp/maprotate/save b/SOURCES/main/cmdgrp/maprotate/save index 693314c..4183735 100644 --- a/SOURCES/main/cmdgrp/maprotate/save +++ b/SOURCES/main/cmdgrp/maprotate/save @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () # $*: Instance[s] { include "$LibDir/maprotate.lib" diff --git a/SOURCES/main/cmdgrp/password/admin b/SOURCES/main/cmdgrp/password/admin index 5474d31..4d8abaa 100644 --- a/SOURCES/main/cmdgrp/password/admin +++ b/SOURCES/main/cmdgrp/password/admin @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/password.lib" diff --git a/SOURCES/main/cmdgrp/password/game b/SOURCES/main/cmdgrp/password/game index 109d2e0..01db80a 100644 --- a/SOURCES/main/cmdgrp/password/game +++ b/SOURCES/main/cmdgrp/password/game @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/password.lib" diff --git a/SOURCES/main/cmdgrp/workshop/add b/SOURCES/main/cmdgrp/workshop/add index 06c23f4..97e5f7b 100644 --- a/SOURCES/main/cmdgrp/workshop/add +++ b/SOURCES/main/cmdgrp/workshop/add @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/workshop.lib" diff --git a/SOURCES/main/cmdgrp/workshop/delete b/SOURCES/main/cmdgrp/workshop/delete index de9d364..5e3d6c3 100644 --- a/SOURCES/main/cmdgrp/workshop/delete +++ b/SOURCES/main/cmdgrp/workshop/delete @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/workshop.lib" diff --git a/SOURCES/main/cmdgrp/workshop/list b/SOURCES/main/cmdgrp/workshop/list index dd3181e..7c596de 100644 --- a/SOURCES/main/cmdgrp/workshop/list +++ b/SOURCES/main/cmdgrp/workshop/list @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + false +} + function cmd_main () { include "$LibDir/workshop.lib" diff --git a/SOURCES/main/cmdgrp/workshop/sync b/SOURCES/main/cmdgrp/workshop/sync index 70df8da..d725b67 100644 --- a/SOURCES/main/cmdgrp/workshop/sync +++ b/SOURCES/main/cmdgrp/workshop/sync @@ -34,6 +34,16 @@ function cmd_help () echo "TODO: description" } +function cmd_need_superuser () +{ + false +} + +function cmd_need_steamuser () +{ + true +} + function cmd_main () { include "$LibDir/workshop.lib" diff --git a/SOURCES/main/kf2-srv b/SOURCES/main/kf2-srv index 79eeadf..4890d36 100755 --- a/SOURCES/main/kf2-srv +++ b/SOURCES/main/kf2-srv @@ -37,19 +37,16 @@ function include () # $1: Lib function is_help () # $1: Arg { echo "$1" | grep -Piqo '^(-h|--help|help)$' - return $? } function is_version () # $1: Arg { echo "$1" | grep -Piqo '^(-v|--version|version)$' - return $? } function function_exists () # $1: function name { type "$1" &> /dev/null - return $? } function indent () # $1: Level @@ -63,21 +60,21 @@ function indent () # $1: Level function groups_list () { - find "$GrpDir" \ - -mindepth 1 \ - -maxdepth 1 \ - -type d \ - -printf "%f\n" | \ + find "$GrpDir" \ + -mindepth 1 \ + -maxdepth 1 \ + -type d \ + -printf "%f\n" | \ sort } function commands_list () # $1: Command group { - find "$GrpDir/$1" \ - -mindepth 1 \ - -maxdepth 1 \ - -type f \ - -printf "%f\n" | \ + find "$GrpDir/$1" \ + -mindepth 1 \ + -maxdepth 1 \ + -type f \ + -printf "%f\n" | \ sort } @@ -148,7 +145,13 @@ elif [[ -d "$GroupPathname" ]]; then fi else if function_exists "cmd_main"; then - cmd_main "$@" + if function_exists "cmd_need_superuser" && cmd_need_superuser; then + run_as_root "$ScriptFullname" "$Group" "$Command" "$@" + elif function_exists "cmd_need_steamuser" && cmd_need_steamuser; then + run_as_steamuser "$ScriptFullname" "$Group" "$Command" "$@" + else + cmd_main "$@" + fi else echo "No implementation for the command $Command" fi diff --git a/SOURCES/main/lib/globals.lib b/SOURCES/main/lib/globals.lib index 32b4403..6d6a85d 100644 --- a/SOURCES/main/lib/globals.lib +++ b/SOURCES/main/lib/globals.lib @@ -19,6 +19,30 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +function run_as_steamuser () # $@: command +{ + include /etc/steamcmd/steamcmd.conf + + if [[ "$USER" == "$SteamUser" ]]; then + "$@" + elif [[ -n $(groups "$USER" | grep -Fo 'wheel') ]] || [[ "$EUID" -eq 0 ]]; then + sudo -u "$SteamUser" "$@" + else + echo "You must be a $SteamUser, root or sudo-user to run this command." + fi +} + +function run_as_root () # $@: command +{ + if [[ "$EUID" -eq 0 ]]; then + "$@" + elif [[ -n $(groups "$USER" | grep -Fo 'wheel') ]]; then + sudo "$@" + else + echo "You must be root or sudo-user to run this command." + fi +} + InstallDir=":DEFINE_PREFIX:/games/kf2-srv${KF2POSTFIX}" AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64" diff --git a/TODO b/TODO index 129ef91..678e96a 100644 --- a/TODO +++ b/TODO @@ -1,9 +1,8 @@ - selinux - sudo for steamuser - kick by level -- split the script into separate files - man pages -- english help +- write help pages for each command - check ban EGS players (mb bugs) - ban history - temporary ban