Revert "[Feature][T8TSK-250][ADBD]add adb debug patch"
This reverts commit 0300fcc023c83b5b569b0c0799aff58cfd65dd39.
Reason for revert: <INSERT REASONING HERE>
Change-Id: I82e92daf5003f885c4732744291c57425ef27642
diff --git a/src/devtools/adb/adb.c b/src/devtools/adb/adb.c
index 2eb667a..82efb12 100644
--- a/src/devtools/adb/adb.c
+++ b/src/devtools/adb/adb.c
@@ -59,8 +59,6 @@
static const char *root_seclabel = NULL;
#endif
-int adb_service_enable = 1;
-
void fatal(const char *fmt, ...)
{
va_list ap;
@@ -120,7 +118,7 @@
/* use a comma/column/semi-colum/space separated list */
while (*p) {
- unsigned int len, tagn;
+ int len, tagn;
q = strpbrk(p, " ,:;");
if (q == NULL) {
@@ -238,8 +236,6 @@
char *tag;
char *x;
unsigned count;
- char data[DUMPMAX+4];
- int i = 0;
switch(p->msg.command){
case A_SYNC: tag = "SYNC"; break;
@@ -252,26 +248,25 @@
default: tag = "????"; break;
}
+ fprintf(stderr, "%s: %s %08x %08x %04x \"",
+ label, tag, p->msg.arg0, p->msg.arg1, p->msg.data_length);
count = p->msg.data_length;
x = (char*) p->data;
if(count > DUMPMAX) {
count = DUMPMAX;
+ tag = "\n";
+ } else {
+ tag = "\"\n";
}
- while(i < count){
+ while(count-- > 0){
if((*x >= ' ') && (*x < 127)) {
- data[i] = *x;
+ fputc(*x, stderr);
} else {
- data[i] = '.';
+ fputc('.', stderr);
}
x++;
- i++;
}
- data[i++] = '\"';
- data[i++] = '\n';
- data[i] = '\0';
-
- D("%s: %s %08x %08x %04x %s\"",
- label, tag, p->msg.arg0, p->msg.arg1, p->msg.data_length, data);
+ fputs(tag, stderr);
}
#endif
@@ -395,6 +390,69 @@
send_packet(cp, t);
}
+void send_auth_request(atransport *t)
+{
+ D("Calling send_auth_request\n");
+ apacket *p;
+ int ret;
+
+ ret = adb_auth_generate_token(t->token, sizeof(t->token));
+ if (ret != sizeof(t->token)) {
+ D("Error generating token ret=%d\n", ret);
+ return;
+ }
+
+ p = get_apacket();
+ memcpy(p->data, t->token, ret);
+ p->msg.command = A_AUTH;
+ p->msg.arg0 = ADB_AUTH_TOKEN;
+ p->msg.data_length = ret;
+ send_packet(p, t);
+}
+
+static void send_auth_response(uint8_t *token, size_t token_size, atransport *t)
+{
+ D("Calling send_auth_response\n");
+ apacket *p = get_apacket();
+ int ret;
+
+ ret = adb_auth_sign(t->key, token, token_size, p->data);
+ if (!ret) {
+ D("Error signing the token\n");
+ put_apacket(p);
+ return;
+ }
+
+ p->msg.command = A_AUTH;
+ p->msg.arg0 = ADB_AUTH_SIGNATURE;
+ p->msg.data_length = ret;
+ send_packet(p, t);
+}
+
+static void send_auth_publickey(atransport *t)
+{
+ D("Calling send_auth_publickey\n");
+ apacket *p = get_apacket();
+ int ret;
+
+ ret = adb_auth_get_userkey(p->data, sizeof(p->data));
+ if (!ret) {
+ D("Failed to get user public key\n");
+ put_apacket(p);
+ return;
+ }
+
+ p->msg.command = A_AUTH;
+ p->msg.arg0 = ADB_AUTH_RSAPUBLICKEY;
+ p->msg.data_length = ret;
+ send_packet(p, t);
+}
+
+void adb_auth_verified(atransport *t)
+{
+ handle_online(t);
+ send_connect(t);
+}
#if ADB_HOST
static char *connection_state_name(atransport *t)
@@ -562,11 +620,35 @@
parse_banner((char*) p->data, t);
- if (!adb_service_enable) {
- D("Ignore ADB client CNXN request, ADB keeps disabled");
- } else if (HOST || !auth_enabled) {
+ if (HOST || !auth_enabled) {
handle_online(t);
if(!HOST) send_connect(t);
+ } else {
+ send_auth_request(t);
+ }
+ break;
+
+ case A_AUTH:
+ if (p->msg.arg0 == ADB_AUTH_TOKEN) {
+ t->connection_state = CS_UNAUTHORIZED;
+ t->key = adb_auth_nextkey(t->key);
+ if (t->key) {
+ send_auth_response(p->data, p->msg.data_length, t);
+ } else {
+ /* No more private keys to try, send the public key */
+ send_auth_publickey(t);
+ }
+ } else if (p->msg.arg0 == ADB_AUTH_SIGNATURE) {
+ if (adb_auth_verify(t->token, p->data, p->msg.data_length)) {
+ adb_auth_verified(t);
+ t->failed_auth_attempts = 0;
+ } else {
+ if (t->failed_auth_attempts++ > 10)
+ adb_sleep_ms(1000);
+ send_auth_request(t);
+ }
+ } else if (p->msg.arg0 == ADB_AUTH_RSAPUBLICKEY) {
+ adb_auth_confirm_key(p->data, p->msg.data_length, t);
}
break;
@@ -944,6 +1026,48 @@
#endif
}
+void start_logging(void)
+{
+#if defined(_WIN32)
+ char temp[ MAX_PATH ];
+ FILE* fnul;
+ FILE* flog;
+
+ GetTempPath( sizeof(temp) - 8, temp );
+ strcat( temp, "adb.log" );
+
+ /* Win32 specific redirections */
+ fnul = fopen( "NUL", "rt" );
+ if (fnul != NULL)
+ stdin[0] = fnul[0];
+
+ flog = fopen( temp, "at" );
+ if (flog == NULL)
+ flog = fnul;
+
+ setvbuf( flog, NULL, _IONBF, 0 );
+
+ stdout[0] = flog[0];
+ stderr[0] = flog[0];
+ fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+#else
+ int fd;
+
+ fd = unix_open("/dev/null", O_RDONLY);
+ dup2(fd, 0);
+ adb_close(fd);
+
+ fd = unix_open("/tmp/adb.log", O_WRONLY | O_CREAT | O_APPEND, 0640);
+ if(fd < 0) {
+ fd = unix_open("/dev/null", O_WRONLY);
+ }
+ dup2(fd, 1);
+ dup2(fd, 2);
+ adb_close(fd);
+ fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+#endif
+}
+
#if !ADB_HOST
void start_device_log(void)
{
@@ -951,19 +1075,34 @@
char path[PATH_MAX];
struct tm now;
time_t t;
- char value[PROPERTY_VALUE_MAX] = "";
+ char value[PROPERTY_VALUE_MAX];
// read the trace mask from persistent property persist.adb.trace_mask
// give up if the property is not set or cannot be parsed
property_get("persist.adb.trace_mask", value, "");
- if (sscanf(value, "%x", &adb_trace_mask) != 1 || adb_trace_mask == 0)
- {
- DD("ADB daemon log DISABLED, adb_trace_mask=0x%x\n", adb_trace_mask);
+ if (sscanf(value, "%x", &adb_trace_mask) != 1)
return;
- } else {
- adb_trace_mask %= (1 <<TRACE_LAST);
- DD("ADB daemon log to AP log file ENABLED, adb_trace_mask=0x%x\n", adb_trace_mask);
- }
+
+ adb_mkdir("/tmp/adb", 0775);
+ tzset();
+ time(&t);
+ localtime_r(&t, &now);
+ strftime(path, sizeof(path),
+ "/tmp/adb/adb-%Y-%m-%d-%H-%M-%S.txt",
+ &now);
+ fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0640);
+ if (fd < 0)
+ return;
+
+ // redirect stdout and stderr to the log file
+ dup2(fd, 1);
+ dup2(fd, 2);
+ fprintf(stderr,"--- adb starting (pid %d) ---\n", getpid());
+ adb_close(fd);
+
+ fd = unix_open("/dev/null", O_RDONLY);
+ dup2(fd, 0);
+ adb_close(fd);
}
#endif
@@ -1194,9 +1333,6 @@
return 1;
#else /* ALLOW_ADBD_ROOT */
#ifdef ADB_NON_ANDROID
- if (!adb_service_enable) {
- return 1;
- }
return 0;
#endif /* ADB_NON_ANDROID */
int secure = 0;
@@ -1261,6 +1397,7 @@
usb_init();
#endif
local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
+ adb_auth_init();
char local_name[30];
build_local_name(local_name, sizeof(local_name), server_port);
@@ -1268,6 +1405,10 @@
exit(1);
}
#else
+ property_get("ro.adb.secure", value, "0");
+ auth_enabled = !strcmp(value, "1");
+ if (auth_enabled)
+ adb_auth_init();
// Our external storage path may be different than apps, since
// we aren't able to bind mount after dropping root.
@@ -1357,6 +1498,9 @@
local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
}
+ D("adb_main(): pre init_jdwp()\n");
+ init_jdwp();
+ D("adb_main(): post init_jdwp()\n");
#endif
if (is_daemon)
@@ -1368,6 +1512,7 @@
#else
fprintf(stderr, "OK\n");
#endif
+ start_logging();
}
D("Event loop starting\n");
@@ -1628,24 +1773,6 @@
return -1;
}
-void update_enabled_flag() {
-#ifndef ADB_OVER_PCIE
-#ifdef ADB_SERVICE_ENABLE
- adb_service_enable = 1;
-#else
- char value[PROPERTY_VALUE_MAX] = "";
-
- property_get("service.adb.enable", value, "");
- if (sscanf(value, "%x", &adb_service_enable) != 1) {
- adb_service_enable = 0;
- } else if (adb_service_enable != 0) {
- adb_service_enable = 1;
- }
-#endif
-#endif
- printf("ADB service enabled status=%d\n", adb_service_enable);
-}
-
int main(int argc, char **argv)
{
#if ADB_HOST
@@ -1657,7 +1784,7 @@
/* If adbd runs inside the emulator this will enable adb tracing via
* adb-debug qemud service in the emulator. */
//adb_qemu_trace_init();
- DD("adb main()\n");
+ D("main()\n");
while(1) {
int c;
int option_index = 0;
@@ -1681,8 +1808,7 @@
}
start_device_log();
- update_enabled_flag();
- DD("Handling main()\n");
+ D("Handling main()\n");
return adb_main(0, DEFAULT_ADB_PORT);
#endif
}