1*4882a593SmuzhiyunFrom 8d54a6af365571f59ecc4414a46580648b11d095 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Wed, 13 May 2020 11:00:40 +0800
4*4882a593SmuzhiyunSubject: [PATCH 16/20] adbd: Support requiring login for adb shell
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunRun /usr/bin/adbd-auth for "adb shell auth" to login.
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
9*4882a593Smuzhiyun---
10*4882a593Smuzhiyun core/adbd/services.c | 23 +++++++++++++++++++++++
11*4882a593Smuzhiyun 1 file changed, 23 insertions(+)
12*4882a593Smuzhiyun
13*4882a593Smuzhiyundiff --git a/core/adbd/services.c b/core/adbd/services.c
14*4882a593Smuzhiyunindex 03140e7..b4c94cb 100644
15*4882a593Smuzhiyun--- a/core/adbd/services.c
16*4882a593Smuzhiyun+++ b/core/adbd/services.c
17*4882a593Smuzhiyun@@ -408,10 +408,33 @@ static int create_subproc_thread(const char *name)
18*4882a593Smuzhiyun }
19*4882a593Smuzhiyun #endif
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun+void require_auth_service(int fd, void *data)
22*4882a593Smuzhiyun+{
23*4882a593Smuzhiyun+    char buf[100];
24*4882a593Smuzhiyun+
25*4882a593Smuzhiyun+    snprintf(buf, sizeof(buf),
26*4882a593Smuzhiyun+             "login with \"adb shell auth\" to continue.\r\n");
27*4882a593Smuzhiyun+    writex(fd, buf, strlen(buf));
28*4882a593Smuzhiyun+    adb_close(fd);
29*4882a593Smuzhiyun+}
30*4882a593Smuzhiyun+
31*4882a593Smuzhiyun int service_to_fd(const char *name)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun     int ret = -1;
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun+#define ADBD_AUTH "/usr/bin/adbd-auth"
36*4882a593Smuzhiyun+    if (!access(ADBD_AUTH, X_OK)) {
37*4882a593Smuzhiyun+        if(!strcmp(name, "shell:auth")) {
38*4882a593Smuzhiyun+            name = "shell:" ADBD_AUTH;
39*4882a593Smuzhiyun+        } else if(system(ADBD_AUTH " check")) {
40*4882a593Smuzhiyun+            ret = create_service_thread(require_auth_service, NULL);
41*4882a593Smuzhiyun+            if (ret >= 0) {
42*4882a593Smuzhiyun+                close_on_exec(ret);
43*4882a593Smuzhiyun+            }
44*4882a593Smuzhiyun+            return ret;
45*4882a593Smuzhiyun+        }
46*4882a593Smuzhiyun+    }
47*4882a593Smuzhiyun+
48*4882a593Smuzhiyun     if(!strncmp(name, "tcp:", 4)) {
49*4882a593Smuzhiyun         int port = atoi(name + 4);
50*4882a593Smuzhiyun         name = strchr(name + 4, ':');
51*4882a593Smuzhiyun--
52*4882a593Smuzhiyun2.20.1
53*4882a593Smuzhiyun
54