[Lldb-commits] [lldb] f5cdfb3 - Detect attach fail in debugserver due to non-interactive

Jason Molenda via lldb-commits lldb-commits at lists.llvm.org
Thu Feb 6 16:16:10 PST 2020


Author: Jason Molenda
Date: 2020-02-06T16:16:01-08:00
New Revision: f5cdfb34cd4b92bc6475f6c61f2996ada3a2ad1f

URL: https://github.com/llvm/llvm-project/commit/f5cdfb34cd4b92bc6475f6c61f2996ada3a2ad1f
DIFF: https://github.com/llvm/llvm-project/commit/f5cdfb34cd4b92bc6475f6c61f2996ada3a2ad1f.diff

LOG: Detect attach fail in debugserver due to non-interactive
debug session.

Added: 
    

Modified: 
    lldb/tools/debugserver/source/RNBRemote.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp
index 1f11b2fe8c23..b2fe8a156fa1 100644
--- a/lldb/tools/debugserver/source/RNBRemote.cpp
+++ b/lldb/tools/debugserver/source/RNBRemote.cpp
@@ -12,6 +12,8 @@
 
 #include "RNBRemote.h"
 
+#include <bsm/audit.h>
+#include <bsm/audit_session.h>
 #include <errno.h>
 #include <libproc.h>
 #include <mach-o/loader.h>
@@ -3723,6 +3725,19 @@ static bool process_is_already_being_debugged (nub_process_t pid) {
     return false;
 }
 
+// Test if this current login session has a connection to the
+// window server (if it does not have that access, it cannot ask
+// for debug permission by popping up a dialog box and attach
+// may fail outright).
+static bool login_session_has_gui_access () {
+  auditinfo_addr_t info;
+  getaudit_addr(&info, sizeof(info));
+  if (info.ai_flags & AU_SESSION_FLAG_HAS_GRAPHIC_ACCESS)
+    return true;
+  else
+    return false;
+}
+
 // Checking for 
 //
 //  {
@@ -4013,12 +4028,23 @@ rnb_err_t RNBRemote::HandlePacket_v(const char *p) {
           return_message += cstring_to_asciihex_string(msg.c_str());
           return SendPacket(return_message.c_str());
         }
-        if (!developer_mode_enabled()) {
-          DNBLogError("Developer mode is not enabled");
+        if (!login_session_has_gui_access() && !developer_mode_enabled()) {
+          DNBLogError("Developer mode is not enabled and this is a "
+                      "non-interactive session");
+          std::string return_message = "E96;";
+          return_message += cstring_to_asciihex_string("developer mode is "
+                                           "not enabled on this machine "
+                                           "and this is a non-interactive "
+                                           "debug session.");
+          return SendPacket(return_message.c_str());
+        }
+        if (!login_session_has_gui_access()) {
+          DNBLogError("This is a non-interactive session");
           std::string return_message = "E96;";
-          return_message += cstring_to_asciihex_string("developer mode is not "
-                                           "enabled on this machine.  "
-                                           "sudo DevToolsSecurity --enable");
+          return_message += cstring_to_asciihex_string("this is a "
+                                           "non-interactive debug session, "
+                                           "cannot get permission to debug "
+                                           "processes.");
           return SendPacket(return_message.c_str());
         }
         if (attach_failed_due_to_sip (pid_attaching_to)) {


        


More information about the lldb-commits mailing list