// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/public/browser/android/devtools_auth.h"

#include <unistd.h>
#include <sys/types.h>

#include "base/logging.h"

namespace content {

bool CanUserConnectToDevTools(uid_t uid, gid_t gid) {
  struct passwd* creds = getpwuid(uid);
  if (!creds || !creds->pw_name) {
    LOG(WARNING) << "DevTools: can't obtain creds for uid " << uid;
    return false;
  }
  if (gid == uid &&
      (strcmp("root", creds->pw_name) == 0 ||   // For rooted devices
       strcmp("shell", creds->pw_name) == 0 ||  // For non-rooted devices
       uid == getuid())) {  // From processes signed with the same key
    return true;
  }
  LOG(WARNING) << "DevTools: connection attempt from " << creds->pw_name;
  return false;
}

}  // namespace content

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/public/browser/android/devtools_auth.h"

#include "base/logging.h"

namespace content {

bool CanUserConnectToDevTools(uid_t uid, gid_t gid) {
  struct passwd* creds = getpwuid(uid);
  if (!creds || !creds->pw_name) {
    LOG(WARNING) << "DevTools: can't obtain creds for uid " << uid;
    return false;
  }
  if (gid == uid &&
      (strcmp("root", creds->pw_name) == 0 ||  // For rooted devices
       strcmp("shell", creds->pw_name) == 0)) {  // For non-rooted devices
    return true;
  }
  LOG(WARNING) << "DevTools: connection attempt from " << creds->pw_name;
  return false;
}

}  // namespace content

--- 
+++ 
@@ -3,6 +3,9 @@
 // found in the LICENSE file.
 
 #include "content/public/browser/android/devtools_auth.h"
+
+#include <unistd.h>
+#include <sys/types.h>
 
 #include "base/logging.h"
 
@@ -15,8 +18,9 @@
     return false;
   }
   if (gid == uid &&
-      (strcmp("root", creds->pw_name) == 0 ||  // For rooted devices
-       strcmp("shell", creds->pw_name) == 0)) {  // For non-rooted devices
+      (strcmp("root", creds->pw_name) == 0 ||   // For rooted devices
+       strcmp("shell", creds->pw_name) == 0 ||  // For non-rooted devices
+       uid == getuid())) {  // From processes signed with the same key
     return true;
   }
   LOG(WARNING) << "DevTools: connection attempt from " << creds->pw_name;
[Android] Allow connections from the same user to DevTools server socket

Allow connections to DevTools web debugging socket from the apps that run under
the same UID than the browser app process itself. This requires signing the
corresponding APK with the same keys than the browser app.

BUG=398357

Review URL: https://codereview.chromium.org/425013002

git-svn-id: de016e52bd170d2d4f2344f9bf92d50478b649e0@286179 0039d316-1c4b-4281-b951-d872f2087c98
