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