Add warning comments for functions running as SUID/SGID
Some checks failed
Build / check (push) Failing after 5m22s
Build / build (push) Successful in 14m47s
Build / docs (push) Successful in 15m41s

This commit is contained in:
2025-11-10 12:11:24 +09:00
parent d932b57aaa
commit c6d3bbca6f
4 changed files with 12 additions and 3 deletions

View File

@@ -143,6 +143,7 @@ pub struct EditPermArgs {
pub database: MySQLDatabase, pub database: MySQLDatabase,
} }
/// **WARNING:** This function may be run with elevated privileges.
pub fn main() -> anyhow::Result<()> { pub fn main() -> anyhow::Result<()> {
let args: Args = Args::parse(); let args: Args = Args::parse();

View File

@@ -108,6 +108,7 @@ pub struct ShowArgs {
name: Vec<MySQLUser>, name: Vec<MySQLUser>,
} }
/// **WARNING:** This function may be run with elevated privileges.
pub fn main() -> anyhow::Result<()> { pub fn main() -> anyhow::Result<()> {
let args: Args = Args::parse(); let args: Args = Args::parse();

View File

@@ -59,6 +59,8 @@ fn will_connect_to_external_server(
/// Note that this function is also responsible for setting up logging, /// Note that this function is also responsible for setting up logging,
/// because in the case of an internal server, we need to drop privileges /// because in the case of an internal server, we need to drop privileges
/// before we can initialize logging. /// before we can initialize logging.
///
/// **WARNING:** This function may be run with elevated privileges.
pub fn bootstrap_server_connection_and_drop_privileges( pub fn bootstrap_server_connection_and_drop_privileges(
server_socket_path: Option<PathBuf>, server_socket_path: Option<PathBuf>,
config: Option<PathBuf>, config: Option<PathBuf>,

View File

@@ -106,9 +106,7 @@ enum ToplevelCommands {
MysqlUseradm, MysqlUseradm,
} }
// TODO: tag all functions that are run with elevated privileges with /// **WARNING:** This function may be run with elevated privileges.
// comments emphasizing the need for caution.
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
#[cfg(feature = "mysql-admutils-compatibility")] #[cfg(feature = "mysql-admutils-compatibility")]
if handle_mysql_admutils_command()?.is_some() { if handle_mysql_admutils_command()?.is_some() {
@@ -136,6 +134,7 @@ fn main() -> anyhow::Result<()> {
Ok(()) Ok(())
} }
/// **WARNING:** This function may be run with elevated privileges.
fn handle_mysql_admutils_command() -> anyhow::Result<Option<()>> { fn handle_mysql_admutils_command() -> anyhow::Result<Option<()>> {
let argv0 = std::env::args().next().and_then(|s| { let argv0 = std::env::args().next().and_then(|s| {
PathBuf::from(s) PathBuf::from(s)
@@ -150,6 +149,7 @@ fn handle_mysql_admutils_command() -> anyhow::Result<Option<()>> {
} }
} }
/// **WARNING:** This function may be run with elevated privileges.
fn handle_server_command(args: &Args) -> anyhow::Result<Option<()>> { fn handle_server_command(args: &Args) -> anyhow::Result<Option<()>> {
match args.command { match args.command {
Command::Server(ref command) => { Command::Server(ref command) => {
@@ -169,6 +169,7 @@ fn handle_server_command(args: &Args) -> anyhow::Result<Option<()>> {
} }
} }
/// **WARNING:** This function may be run with elevated privileges.
fn handle_generate_completions_command(args: &Args) -> anyhow::Result<Option<()>> { fn handle_generate_completions_command(args: &Args) -> anyhow::Result<Option<()>> {
match args.command { match args.command {
Command::GenerateCompletions(ref completion_args) => { Command::GenerateCompletions(ref completion_args) => {
@@ -199,6 +200,7 @@ fn handle_generate_completions_command(args: &Args) -> anyhow::Result<Option<()>
} }
} }
/// Start a long-lived server using Tokio.
fn tokio_start_server( fn tokio_start_server(
server_socket_path: Option<PathBuf>, server_socket_path: Option<PathBuf>,
config_path: Option<PathBuf>, config_path: Option<PathBuf>,
@@ -214,6 +216,9 @@ fn tokio_start_server(
}) })
} }
/// Run the given commmand (from the client side) using Tokio.
///
/// **WARNING:** This function may be run with elevated privileges.
fn tokio_run_command(command: Command, server_connection: StdUnixStream) -> anyhow::Result<()> { fn tokio_run_command(command: Command, server_connection: StdUnixStream) -> anyhow::Result<()> {
tokio::runtime::Builder::new_current_thread() tokio::runtime::Builder::new_current_thread()
.enable_all() .enable_all()