From 1bdabb9e9fe8ac2c02640645a2ec42c496c5cb94 Mon Sep 17 00:00:00 2001 From: Guinevere Larsen Date: Fri, 11 Aug 2023 11:58:11 +0200 Subject: [PATCH] gdb/testsuite: XFAIL some gdb.base/fileio.exp Some gdb.base/fileio.exp tests expect the inferior to not have write access to some files. If the test is being run as root, this is never possible. This commit adds a way to identify if the user is root and xfails the tests that expect no write access. Approved-By: Tom de Vries --- gdb/testsuite/gdb.base/fileio.exp | 9 ++++++++- gdb/testsuite/lib/gdb.exp | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/gdb.base/fileio.exp b/gdb/testsuite/gdb.base/fileio.exp index 33c88d064c4..6a708ed00ed 100644 --- a/gdb/testsuite/gdb.base/fileio.exp +++ b/gdb/testsuite/gdb.base/fileio.exp @@ -17,7 +17,6 @@ require {!target_info exists gdb,nofileio} - standard_testfile if {[is_remote host]} { @@ -75,6 +74,10 @@ gdb_test "continue" ".*" "" catch "system \"chmod -f -w [standard_output_file nowrt.fileio.test]\"" +# If the user is root, we will always have write permission. +if { [root_user] } { + setup_xfail *-*-* +} gdb_test continue \ "Continuing\\..*open 5:.*EACCES$stop_msg" \ "Open for write but no write permission returns EACCES" @@ -240,6 +243,10 @@ gdb_test continue \ if [ishost *cygwin*] { setup_xfail "*-*-*" } +# If the user is root, we will always have write permission. +if { [root_user] } { + setup_xfail *-*-* +} gdb_test continue \ "Continuing\\..*unlink 2:.*EACCES$stop_msg" \ "Unlinking a file in a directory w/o write access returns EACCES" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index c9f1f666eb8..3cad4f7cb4b 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -10230,5 +10230,25 @@ gdb_caching_proc have_system_header { file } { return [gdb_can_simple_compile have_system_header_$name $src object] } +# Return 1 if the test is being run as root, 0 otherwise. + +gdb_caching_proc root_user {} { + # ID outputs to stdout, we have to use exec to capture it here. + set res [remote_exec target id] + set ret_val [lindex $res 0] + set output [lindex $res 1] + + # If ret_val is not 0, we couldn't run `id` on the target for some + # reason. Return that we are not root, so problems are easier to + # spot. + if { $ret_val != 0 } { + return 0 + } + + regexp -all ".*uid=(\[0-9\]+).*" $output dummy uid + + return [expr $uid == 0] +} + # Always load compatibility stuff. load_lib future.exp -- 2.30.2