adbd: adb root should terminate adbd only if it's debuggable

adb root command will terminate adbd when closing the socket if current
user id is not root. This works for userdebug build, as adb root causes
re-enumeration.

But for user build, adb root command won't cause re-enumeration, and if
adbd is terminated and restarted, it will be in offline state, thus it
won't send any thing to host.

Change-Id: I81216a3b3da888cd9b236060cf745175f6d93c60
Author: jzhuan5 <jin.can.zhuang@intel.com>
Signed-off-by: Bo Huang <bo.b.huang@intel.com>
This commit is contained in:
jzhuan5 2013-05-24 17:40:15 -04:00 committed by Bo Huang
parent 0607e104c2
commit 1297d22bc9

View file

@ -23,6 +23,10 @@
#include "sysdeps.h"
#if !ADB_HOST
#include <cutils/properties.h>
#endif
#define TRACE_TAG TRACE_SOCKETS
#include "adb.h"
@ -428,6 +432,9 @@ asocket *create_local_service_socket(const char *name)
{
asocket *s;
int fd;
#if !ADB_HOST
char debug[PROPERTY_VALUE_MAX];
#endif
#if !ADB_HOST
if (!strcmp(name,"jdwp")) {
@ -444,7 +451,11 @@ asocket *create_local_service_socket(const char *name)
D("LS(%d): bound to '%s' via %d\n", s->id, name, fd);
#if !ADB_HOST
if ((!strncmp(name, "root:", 5) && getuid() != 0)
if (!strncmp(name, "root:", 5))
property_get("ro.debuggable", debug, "");
if ((!strncmp(name, "root:", 5) && getuid() != 0
&& strcmp(debug, "1") == 0)
|| !strncmp(name, "usb:", 4)
|| !strncmp(name, "tcpip:", 6)) {
D("LS(%d): enabling exit_on_close\n", s->id);