From 594015adc24b17c60a854d9cf7505b302bdeee7c Mon Sep 17 00:00:00 2001 From: Max Yu Date: Fri, 11 Apr 2014 04:00:21 -0700 Subject: [PATCH 01/16] Revert "Exit if malloc failed" This reverts commit d8c15b2e241ed0462c6ddf58d1651581221b0c60. Change-Id: I5610f6245fa3451e269cfd14aaac5da30f317575 --- src/sdb.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sdb.c b/src/sdb.c index 0ba7d38..2715341 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1120,7 +1120,6 @@ int set_developer_privileges() { } // TODO: use pam later char * env = malloc (strlen("HOME=") + strlen(HOME_DEV_PATH) +1); - if(env == 0) fatal("failed to allocate for env string"); strcpy(env, "HOME="); strcat(env, HOME_DEV_PATH); putenv(env); -- 2.7.4 From 13f859844cd72ea3a895d348b0e5843f13bf7338 Mon Sep 17 00:00:00 2001 From: "Xiaoyang Yu (max)" Date: Sat, 12 Apr 2014 04:01:05 +0800 Subject: [PATCH 02/16] Fix SDBD segfault issue Fix TIVI-3031 SDBD process segment fault Change-Id: Ie65d929b23f78d72dbd48ce958c4c75ec2ef7f87 Signed-off-by: Xiaoyang Yu (max) --- src/sdb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sdb.c b/src/sdb.c index 0ab561a..1018430 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1119,9 +1119,12 @@ int set_developer_privileges() { } } // TODO: use pam later - char * env = "HOME="; + char * env = malloc(strlen("HOME=") + strlen(HOME_DEV_PATH) + 1); + if(env == 0) fatal("failed to allocate for env string"); + strcpy(env, "HOME="); strcat(env, HOME_DEV_PATH); putenv(env); + free(env); return 1; } -- 2.7.4 From c47096763dc498e6381a5edaf1cf255d6ba4fb94 Mon Sep 17 00:00:00 2001 From: "Xiaoyang Yu (max)" Date: Thu, 12 Jun 2014 19:17:33 +0800 Subject: [PATCH 03/16] Change reference to macro 'simulator' to 'emulator' in spec Now Project Configuration in OBS use macro 'emulator' instead of 'simulator', so we need to change reference in spec file accordingly Change-Id: Id25308859aea8713a477a92b5f163eff3dae8304 Signed-off-by: Xiaoyang Yu (max) --- packaging/sdbd.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index a3f00d1..410ebec 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -32,7 +32,7 @@ make %{?jobs:-j%jobs} %make_install mkdir -p %{buildroot}%{_libdir}/systemd/system -%if 0%{?simulator} +%if 0%{?emulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ @@ -52,7 +52,7 @@ install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %{_prefix}/sbin/sdk_launch %attr(0755, root, root) %{_sysconfdir}/init.d/sdbd %{_libdir}/systemd/system/sdbd.service -%if 0%{?simulator} +%if 0%{?emulator} %{_libdir}/systemd/system/emulator.target.wants/sdbd.service %else %{_libdir}/systemd/system/sdbd_tcp.service -- 2.7.4 From 10b8282c3559f5331a1d85ae5b0b9b7f6a2f7faf Mon Sep 17 00:00:00 2001 From: Dongxing Liu Date: Wed, 18 Jun 2014 10:49:43 +0800 Subject: [PATCH 04/16] Change reference to macro 'emulator' to 'with emulator' in spec Now Project Configuration in OBS uses macro 'with emulator', so we need to change reference in spec file accordingly. Change-Id: Icd8622c5cdea7e76784787fa67e57c5cb93095c2 Signed-off-by: Dongxing Liu --- packaging/sdbd.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 410ebec..dc2c194 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,3 +1,5 @@ +%bcond_with emulator + Name: sdbd Summary: SDB daemon Version: 3.0.1 @@ -32,7 +34,7 @@ make %{?jobs:-j%jobs} %make_install mkdir -p %{buildroot}%{_libdir}/systemd/system -%if 0%{?emulator} +%if %{with emulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ @@ -52,7 +54,7 @@ install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %{_prefix}/sbin/sdk_launch %attr(0755, root, root) %{_sysconfdir}/init.d/sdbd %{_libdir}/systemd/system/sdbd.service -%if 0%{?emulator} +%if %{with emulator} %{_libdir}/systemd/system/emulator.target.wants/sdbd.service %else %{_libdir}/systemd/system/sdbd_tcp.service -- 2.7.4 From 84905e75233699b895ed60d00f34e9b13f53a59d Mon Sep 17 00:00:00 2001 From: Alice Liu Date: Wed, 20 Aug 2014 16:27:03 +0800 Subject: [PATCH 05/16] Change sdbd running with User Smack label. According the Smack rules in Tizen 3, sdbd should be running with User Smack label. This will fix the issue that Xwalk cannot access the applicaiton package pushed by SDB. Change-Id: I25624ef73413825d8ffd2c5d36e5aff3385a9f37 Signed-off-by: Alice Liu --- packaging/sdbd_emulator.service | 1 + packaging/sdbd_tcp.service | 1 + 2 files changed, 2 insertions(+) diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service index 3bcbcf1..78b5fc7 100644 --- a/packaging/sdbd_emulator.service +++ b/packaging/sdbd_emulator.service @@ -7,6 +7,7 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes +SmackExecLabel=User ExecStart=/bin/sh -c "/usr/sbin/sdbd `/usr/bin/awk '{match($0, /sdb_port=([0-9]+)/,port_match); match($0, /vm_name=([^, ]*)/,vm_match); print \"--emulator=\" vm_match[1] \":\" port_match[1] \" --connect-to=10.0.2.2:26099\" \" --sensors=10.0.2.2:\"port_match[1]+3 \" --listen-port=\"port_match[1]+1 }' /proc/cmdline`" [Install] diff --git a/packaging/sdbd_tcp.service b/packaging/sdbd_tcp.service index 3818b6d..6872e01 100644 --- a/packaging/sdbd_tcp.service +++ b/packaging/sdbd_tcp.service @@ -7,4 +7,5 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes +SmackExecLabel=User ExecStart=/usr/sbin/sdbd --listen=26101 -- 2.7.4 From 81f001b53ceb1d0e301d807634ab39801a0bc32c Mon Sep 17 00:00:00 2001 From: Mykola Tryshnivskyy Date: Wed, 20 Aug 2014 11:37:02 +0300 Subject: [PATCH 06/16] Fix sdbd error: proc/1011/oom_adj is deprecated, please use /proc/1011/oom_score_adj instead Change-Id: Idb48c5f459ec995d42cc9d291d64473c416c1236 Signed-off-by: Mykola Tryshnivskyy --- src/services.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services.c b/src/services.c index b5d8eab..0113d96 100644 --- a/src/services.c +++ b/src/services.c @@ -412,7 +412,7 @@ static int create_subprocess(const char *cmd, const char *arg0, const char *arg1 // set OOM adjustment to zero { char text[64]; - snprintf(text, sizeof text, "/proc/%d/oom_adj", getpid()); + snprintf(text, sizeof text, "/proc/%d/oom_score_adj", getpid()); int fd = sdb_open(text, O_WRONLY); if (fd >= 0) { sdb_write(fd, "0", 1); -- 2.7.4 From 010012492968df7067f76a777fa7cf26474a2077 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Stelmach?= Date: Thu, 4 Sep 2014 14:27:24 +0200 Subject: [PATCH 07/16] Support both functionfs and sdb gadget MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Automatically detect the kernel interface to use for communication with host. Change-Id: I51834991063d9bbb686598490ddc7a0b607fc282 Signed-off-by: Łukasz Stelmach --- CMakeLists.txt | 8 +-- src/sdb.c | 28 ++++++++++- src/sdb.h | 27 ++++++++++ src/usb_funcfs_client.c | 129 +++++++++++++++++++++++++----------------------- src/usb_linux_client.c | 22 +++++---- 5 files changed, 134 insertions(+), 80 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1928023..681a995 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,16 +42,12 @@ set(sdbd_SRCS src/init.c src/fileutils.c src/commandline_sdbd.c + src/usb_linux_client.c + src/usb_funcfs_client.c ) include_directories(src) -if(USE_FUNCTION_FS) - list(APPEND sdbd_SRCS src/usb_funcfs_client.c) -else() - list(APPEND sdbd_SRCS src/usb_linux_client.c) -endif() - add_executable(sdbd ${sdbd_SRCS}) set_property( diff --git a/src/sdb.c b/src/sdb.c index 1018430..3fbe423 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1,4 +1,5 @@ -/* +/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- + * * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the License); @@ -55,6 +56,13 @@ int HOST = 0; SdbdCommandlineArgs sdbd_commandline_args; #endif +void (*usb_init)() = NULL; +void (*usb_cleanup)() = NULL; +int (*usb_write)(usb_handle *h, const void *data, int len) = NULL; +int (*usb_read)(usb_handle *h, void *data, int len) = NULL; +int (*usb_close)(usb_handle *h) = NULL; +void (*usb_kick)(usb_handle *h) = NULL; + int is_emulator(void) { #if SDB_HOST return 0; @@ -1233,6 +1241,24 @@ int sdb_main(int is_daemon, int server_port) } if (!is_emulator()) { + /* choose the usb gadget backend */ + if (access(USB_NODE_FILE, F_OK) == 0) { + /* legacy kernel-based sdb gadget */ + usb_init = &linux_usb_init; + usb_cleanup = &linux_usb_cleanup; + usb_write = &linux_usb_write; + usb_read = &linux_usb_read; + usb_close = &linux_usb_close; + usb_kick = &linux_usb_kick; + } else { + /* functionfs based gadget */ + usb_init = &ffs_usb_init; + usb_cleanup = &ffs_usb_cleanup; + usb_write = &ffs_usb_write; + usb_read = &ffs_usb_read; + usb_close = &ffs_usb_close; + usb_kick = &ffs_usb_kick; + } // listen on USB usb_init(); } diff --git a/src/sdb.h b/src/sdb.h index ccee503..8f7b5f9 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -462,12 +462,39 @@ int local_connect(int port, const char *device_name); int local_connect_arbitrary_ports(int console_port, int sdb_port, const char *device_name); /* usb host/client interface */ +#if SDB_HOST void usb_init(); void usb_cleanup(); int usb_write(usb_handle *h, const void *data, int len); int usb_read(usb_handle *h, void *data, int len); int usb_close(usb_handle *h); void usb_kick(usb_handle *h); +#else + +extern void (*usb_init)(); +extern void (*usb_cleanup)(); +extern int (*usb_write)(usb_handle *h, const void *data, int len); +extern int (*usb_read)(usb_handle *h, void *data, int len); +extern int (*usb_close)(usb_handle *h); +extern void (*usb_kick)(usb_handle *h); + +/* functionfs backend */ +void ffs_usb_init(); +void ffs_usb_cleanup(); +int ffs_usb_write(usb_handle *h, const void *data, int len); +int ffs_usb_read(usb_handle *h, void *data, int len); +int ffs_usb_close(usb_handle *h); +void ffs_usb_kick(usb_handle *h); + +/* kernel sdb gadget backend */ +void linux_usb_init(); +void linux_usb_cleanup(); +int linux_usb_write(usb_handle *h, const void *data, int len); +int linux_usb_read(usb_handle *h, void *data, int len); +int linux_usb_close(usb_handle *h); +void linux_usb_kick(usb_handle *h); + +#endif /* used for USB device detection */ #if SDB_HOST diff --git a/src/usb_funcfs_client.c b/src/usb_funcfs_client.c index 0a2ff7e..af9fd2b 100644 --- a/src/usb_funcfs_client.c +++ b/src/usb_funcfs_client.c @@ -218,13 +218,6 @@ error: sdb_mutex_unlock(&h->control_lock); } - -void usb_cleanup() -{ - /* nothing to do here */ -} - - static void *usb_open_thread(void *x) { struct usb_handle *usb = (struct usb_handle *)x; @@ -405,29 +398,6 @@ static int bulk_write(int bulkin_fd, const void *buf, size_t length) /* - * Writes data to bulk_in descriptor - * - * In fact, data is forwarded to bulk_write. - * - * @returns 0 on success and -1 on failure (errno is set) - */ -int usb_write(usb_handle *h, const void *data, int len) -{ - int n; - - D("about to write (fd=%d, len=%d)\n", h->bulk_in, len); - n = bulk_write(h->bulk_in, data, len); - if(n != len) { - D("ERROR: fd = %d, n = %d, errno = %d (%s)\n", - h->bulk_in, n, errno, strerror(errno)); - return -1; - } - D("[ done fd=%d ]\n", h->bulk_in); - return 0; -} - - -/* * Reads data from bulkout_fd * * Blocks until length data is read or error occurs. @@ -458,34 +428,10 @@ static int bulk_read(int bulkout_fd, void *buf, size_t length) return count; } - -/* - * Reads data from bulk_out descriptor - * - * In fact, reading task is forwarded to bulk_read. - * - * @returns 0 on success and -1 on failure (errno is set) - */ -int usb_read(usb_handle *h, void *data, int len) -{ - int n; - - D("%d: about to read (fd=%d, len=%d)\n", getpid(), h->bulk_out, len); - n = bulk_read(h->bulk_out, data, len); - if(n != len) { - D("ERROR: fd = %d, n = %d, errno = %d (%s)\n", - h->bulk_out, n, errno, strerror(errno)); - return -1; - } - D("[ done fd=%d ]\n", h->bulk_out); - return 0; -} - - /* * Checks if EP0 exists on filesystem */ -int ep0_exists() +static int ep0_exists() { struct stat statb; return stat(ep0_path, &statb) == 0; @@ -513,9 +459,14 @@ static int autoconfig(struct usb_handle *h) /* + * Public host/client interface + */ + + +/* * Creates and starts USB threads */ -void usb_init() +void ffs_usb_init() { usb_handle *h; sdb_thread_t tid; @@ -550,7 +501,65 @@ void usb_init() } -void usb_kick(usb_handle *h) +void ffs_usb_cleanup() +{ + /* nothing to do here */ +} + + +/* + * Writes data to bulk_in descriptor + * + * In fact, data is forwarded to bulk_write. + * + * @returns 0 on success and -1 on failure (errno is set) + */ +int ffs_usb_write(usb_handle *h, const void *data, int len) +{ + int n; + + D("about to write (fd=%d, len=%d)\n", h->bulk_in, len); + n = bulk_write(h->bulk_in, data, len); + if(n != len) { + D("ERROR: fd = %d, n = %d, errno = %d (%s)\n", + h->bulk_in, n, errno, strerror(errno)); + return -1; + } + D("[ done fd=%d ]\n", h->bulk_in); + return 0; +} + + +/* + * Reads data from bulk_out descriptor + * + * In fact, reading task is forwarded to bulk_read. + * + * @returns 0 on success and -1 on failure (errno is set) + */ +int ffs_usb_read(usb_handle *h, void *data, int len) +{ + int n; + + D("%d: about to read (fd=%d, len=%d)\n", getpid(), h->bulk_out, len); + n = bulk_read(h->bulk_out, data, len); + if(n != len) { + D("ERROR: fd = %d, n = %d, errno = %d (%s)\n", + h->bulk_out, n, errno, strerror(errno)); + return -1; + } + D("[ done fd=%d ]\n", h->bulk_out); + return 0; +} + + +int ffs_usb_close(usb_handle *h) +{ + return 0; +} + + +void ffs_usb_kick(usb_handle *h) { int err; @@ -569,9 +578,3 @@ void usb_kick(usb_handle *h) sdb_cond_signal(&h->kick_notify); sdb_mutex_unlock(&h->kick_lock); } - - -int usb_close(usb_handle *h) -{ - return 0; -} diff --git a/src/usb_linux_client.c b/src/usb_linux_client.c index 96a3f75..fa813fc 100644 --- a/src/usb_linux_client.c +++ b/src/usb_linux_client.c @@ -37,11 +37,6 @@ struct usb_handle sdb_mutex_t lock; }; -void usb_cleanup() -{ - // nothing to do here -} - static void *usb_open_thread(void *x) { struct usb_handle *usb = (struct usb_handle *)x; @@ -82,7 +77,9 @@ static void *usb_open_thread(void *x) return 0; } -int usb_write(usb_handle *h, const void *data, int len) +// Public host/client interface + +int linux_usb_write(usb_handle *h, const void *data, int len) { int n; @@ -97,7 +94,7 @@ int usb_write(usb_handle *h, const void *data, int len) return 0; } -int usb_read(usb_handle *h, void *data, int len) +int linux_usb_read(usb_handle *h, void *data, int len) { int n; @@ -112,7 +109,7 @@ int usb_read(usb_handle *h, void *data, int len) return 0; } -void usb_init() +void linux_usb_init() { usb_handle *h; sdb_thread_t tid; @@ -142,7 +139,7 @@ void usb_init() } } -void usb_kick(usb_handle *h) +void linux_usb_kick(usb_handle *h) { D("usb_kick\n"); sdb_mutex_lock(&h->lock); @@ -154,8 +151,13 @@ void usb_kick(usb_handle *h) sdb_mutex_unlock(&h->lock); } -int usb_close(usb_handle *h) +int linux_usb_close(usb_handle *h) { // nothing to do here return 0; } + +void linux_usb_cleanup() +{ + // nothing to do here +} -- 2.7.4 From 0a8910cefe6547aa9a5a1bedbc2ccf33efe789a6 Mon Sep 17 00:00:00 2001 From: Baptiste DURAND Date: Fri, 26 Sep 2014 11:41:23 +0200 Subject: [PATCH 08/16] Align with Multi user feature, SDB tool should concider develloper as regular user Develloper user should be owned by users group Add Home directory creation Linked with : https://review.tizen.org/gerrit/#/c/28178/ BUG=TC-320 Change-Id: I79fad0baac5c0bd763aa3d4d56a07d3f49be55e0 Signed-off-by: Baptiste DURAND --- packaging/sdbd.spec | 7 +++++++ src/sdb.c | 8 ++++---- src/sdb.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index dc2c194..a2a6732 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -46,6 +46,13 @@ install -m 0644 %SOURCE1004 %{buildroot}%{_libdir}/systemd/system/sdbd_tcp.servi mkdir -p %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ + +%post +mkdir -p /home/developer/.applications +chown -R developer:users /home/developer/ +chsmack -a "User" /home/developer/ +chsmack -a "User" /home/developer/.applications + %files %manifest sdbd.manifest %license LICENSE diff --git a/src/sdb.c b/src/sdb.c index 1018430..20d190a 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1095,13 +1095,13 @@ int should_drop_privileges() { } int set_developer_privileges() { - gid_t groups[] = { SID_DEVELOPER, SID_APP_LOGGING, SID_SYS_LOGGING, SID_INPUT }; + gid_t groups[] = { GID_DEVELOPER, SID_APP_LOGGING, SID_SYS_LOGGING, SID_INPUT }; if (setgroups(sizeof(groups) / sizeof(groups[0]), groups) != 0) { D("set groups failed (errno: %d, %s)\n", errno, strerror(errno)); } // then switch user and group to developer - if (setgid(SID_DEVELOPER) != 0) { + if (setgid(GID_DEVELOPER) != 0) { D("set group id failed (errno: %d, %s)\n", errno, strerror(errno)); return -1; } @@ -1146,7 +1146,7 @@ static void init_sdk_requirements() { if (stat(ONDEMAND_ROOT_PATH, &st) == -1) { return; } - if (st.st_uid != SID_DEVELOPER || st.st_gid != SID_DEVELOPER) { + if (st.st_uid != SID_DEVELOPER || st.st_gid != GID_DEVELOPER) { char cmd[128]; snprintf(cmd, sizeof(cmd), "chown %s:%s %s -R", DEV_NAME, DEV_NAME, ONDEMAND_ROOT_PATH); if (system(cmd) < 0) { @@ -1207,7 +1207,7 @@ int sdb_main(int is_daemon, int server_port) exit(1); } /* then switch user and group to "developer" */ - if (setgid(SID_DEVELOPER) != 0) { + if (setgid(GID_DEVELOPER) != 0) { fprintf(stderr, "set group id failed errno: %d\n", errno); exit(1); } diff --git a/src/sdb.h b/src/sdb.h index ccee503..0341962 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -334,6 +334,7 @@ int rootshell_mode;// 0: developer, 1: root #define SID_TTY 5 /* group for /dev/ptmx */ #define SID_APP tzplatform_getuid(TZ_USER_NAME) /* application */ #define SID_DEVELOPER tzplatform_getuid(TZ_SDK_USER_NAME) /* developer with SDK */ +#define GID_DEVELOPER 100 /* developer will be member of users with SDK */ #define SID_APP_LOGGING 6509 #define SID_SYS_LOGGING 6527 #define SID_INPUT 1004 -- 2.7.4 From 4b4e06a0bd8446cdd0ad7ed23fdaeccc086e2a87 Mon Sep 17 00:00:00 2001 From: Geoffroy Van Cutsem Date: Fri, 14 Nov 2014 15:26:43 +0100 Subject: [PATCH 09/16] Use %{_unitdir} macro to package systemd unit files Bug-Tizen: TC-2069 Change-Id: I24445b2e71d9473f2afcdeb4813e4577060e9795 Signed-off-by: Geoffroy Van Cutsem --- packaging/sdbd.spec | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index a2a6732..70a5f0d 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -33,14 +33,14 @@ make %{?jobs:-j%jobs} %install %make_install -mkdir -p %{buildroot}%{_libdir}/systemd/system +mkdir -p %{buildroot}%{_unitdir} %if %{with emulator} -install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service -mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants -ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ +install -m 0644 %SOURCE1002 %{buildroot}%{_unitdir}/sdbd.service +mkdir -p %{buildroot}/%{_unitdir}/emulator.target.wants +ln -s %{_unitdir}/sdbd.service %{buildroot}/%{_unitdir}/emulator.target.wants/ %else -install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service -install -m 0644 %SOURCE1004 %{buildroot}%{_libdir}/systemd/system/sdbd_tcp.service +install -m 0644 %SOURCE1001 %{buildroot}%{_unitdir}/sdbd.service +install -m 0644 %SOURCE1004 %{buildroot}%{_unitdir}/sdbd_tcp.service %endif mkdir -p %{buildroot}%{_prefix}/sbin @@ -60,11 +60,11 @@ chsmack -a "User" /home/developer/.applications %{_prefix}/sbin/sdbd %{_prefix}/sbin/sdk_launch %attr(0755, root, root) %{_sysconfdir}/init.d/sdbd -%{_libdir}/systemd/system/sdbd.service +%{_unitdir}/sdbd.service %if %{with emulator} -%{_libdir}/systemd/system/emulator.target.wants/sdbd.service +%{_unitdir}/emulator.target.wants/sdbd.service %else -%{_libdir}/systemd/system/sdbd_tcp.service +%{_unitdir}/sdbd_tcp.service %endif %changelog -- 2.7.4 From 2937cff29fff0b56da7b08b7793f2a893130437f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Wed, 18 Feb 2015 16:42:28 +0100 Subject: [PATCH 10/16] Creation of the user account for the SDK MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This replace the previously hackish creation of the user handled by SDB for the SDK. The current implementation creates the user on need at installation time of SDB. If the user still exists, it is not recreated to avoid erasing of previously existing data. The group developer is also created. TODO: check that the group developer is needed. Change-Id: Ie2a1fae481ad7f89f8349aafa1d19f858b8a1313 Signed-off-by: José Bollo --- packaging/sdbd.spec | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 70a5f0d..700451e 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -47,11 +47,16 @@ mkdir -p %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ -%post -mkdir -p /home/developer/.applications -chown -R developer:users /home/developer/ -chsmack -a "User" /home/developer/ -chsmack -a "User" /home/developer/.applications +%post +. %{_sysconfdir}/tizen-platform.conf +if ! getent passwd "${TZ_SDK_USER_NAME}" > /dev/null; then + rm -rf "${TZ_SDK_HOME}" + useradd -u 5100 -s /bin/false -m -d "${TZ_SDK_HOME}" "${TZ_SDK_USER_NAME}" + getent group developer > /dev/null || groupadd -g 5100 developer + for x in app_logging crash developer; do + usermod -a -G app_logging "${TZ_SDK_USER_NAME}" + done +fi %files %manifest sdbd.manifest -- 2.7.4 From 96c289f57c4ee93a1d974da7d095209a903a9b0a Mon Sep 17 00:00:00 2001 From: Stephane Desneux Date: Wed, 25 Feb 2015 09:51:12 +0100 Subject: [PATCH 11/16] packaging: fix invocation of usermod in post-install Change-Id: I6e6716e157356319be8ec40b77701de10eea17d0 Signed-off-by: Stephane Desneux --- packaging/sdbd.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 700451e..f444bc3 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -54,7 +54,7 @@ if ! getent passwd "${TZ_SDK_USER_NAME}" > /dev/null; then useradd -u 5100 -s /bin/false -m -d "${TZ_SDK_HOME}" "${TZ_SDK_USER_NAME}" getent group developer > /dev/null || groupadd -g 5100 developer for x in app_logging crash developer; do - usermod -a -G app_logging "${TZ_SDK_USER_NAME}" + usermod -A app_logging "${TZ_SDK_USER_NAME}" done fi -- 2.7.4 From 362c8137b4f2b0581957f94c36c67a5d69860752 Mon Sep 17 00:00:00 2001 From: Jiyoung Yun Date: Thu, 26 Feb 2015 11:06:19 +0900 Subject: [PATCH 12/16] modify system-info key string Signed-off-by: Jiyoung Yun Change-Id: Ib9f5b04ba67326dc176aaa1183504ee840bd8dc3 --- src/sdb.c | 3 ++- src/services.c | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index 20d190a..5804ab7 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -44,6 +44,7 @@ #endif #include #define PROC_CMDLINE_PATH "/proc/cmdline" +#define SYSTEM_INFO_KEY_MODEL "http://tizen.org/system/model_name" #if SDB_TRACE SDB_MUTEX_DEFINE( D_lock ); #endif @@ -406,7 +407,7 @@ int get_emulator_name(char str[], int str_size) { int get_device_name(char str[], int str_size) { char *value = NULL; - int r = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value); + int r = system_info_get_platform_string(SYSTEM_INFO_KEY_MODEL, &value); if (r != SYSTEM_INFO_ERROR_NONE) { D("fail to get system model:%d\n", errno); return -1; diff --git a/src/services.c b/src/services.c index 0113d96..2b2174e 100644 --- a/src/services.c +++ b/src/services.c @@ -41,6 +41,10 @@ #include "strutils.h" #include #include + +#define SYSTEM_INFO_KEY_MODEL "http://tizen.org/system/model_name" +#define SYSTEM_INFO_KEY_PLATFORM_NAME "http://tizen.org/system/platform.name" + typedef struct stinfo stinfo; struct stinfo { @@ -598,7 +602,7 @@ static void get_platforminfo(int fd, void *cookie) { char *value = NULL; s_strncpy(sysinfo.platform_info_version, INFO_VERSION, strlen(INFO_VERSION)); - int r = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value); + int r = system_info_get_platform_string(SYSTEM_INFO_KEY_MODEL, &value); if (r != SYSTEM_INFO_ERROR_NONE) { s_strncpy(sysinfo.model_name, UNKNOWN, strlen(UNKNOWN)); D("fail to get system model:%d\n", errno); @@ -610,7 +614,7 @@ static void get_platforminfo(int fd, void *cookie) { } } - r = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &value); + r = system_info_get_platform_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &value); if (r != SYSTEM_INFO_ERROR_NONE) { s_strncpy(sysinfo.platform_name, UNKNOWN, strlen(UNKNOWN)); D("fail to get platform name:%d\n", errno); -- 2.7.4 From 343ef137bb4619c48db380e6b55fbd97935f14bf Mon Sep 17 00:00:00 2001 From: Jiyoung Yun Date: Wed, 15 Apr 2015 17:38:09 +0900 Subject: [PATCH 13/16] sdbd: Add tizen environment to sdbd process When systemd launch the sdbd process, it does not have any tizen environment value. The tizen-system-env.service makes the /run/tizen-system-env from /etc/profile.d/. Signed-off-by: Jiyoung Yun Change-Id: I58dd8c37de649f217c1cdfd21afc0d456711db46 --- packaging/sdbd_device.service | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 0b92d85..6465753 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -1,10 +1,11 @@ [Unit] Description=sdbd After=default.target +Requires=tizen-system-env.service [Service] Type=forking -Environment=DISPLAY=:0 +EnvironmentFile=-/run/tizen-system-env PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes ExecStart=/usr/sbin/sdbd -- 2.7.4 From 3c06e23fee2bc706ea1237a1b908b191ba22e551 Mon Sep 17 00:00:00 2001 From: Maciej Wereski Date: Fri, 24 Apr 2015 15:07:03 +0200 Subject: [PATCH 14/16] Change SmackExecLabel to SmackProcessLabel Since systemd v219 Tizen-specific SmackExecLabel option was dropped in favour of SmackProcessLabel option from upstream. Change-Id: I36946fc5d57d55efe23691cac67f82aa800cd2e2 Signed-off-by: Maciej Wereski --- packaging/sdbd_emulator.service | 2 +- packaging/sdbd_tcp.service | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service index 78b5fc7..579381a 100644 --- a/packaging/sdbd_emulator.service +++ b/packaging/sdbd_emulator.service @@ -7,7 +7,7 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes -SmackExecLabel=User +SmackProcessLabel=User ExecStart=/bin/sh -c "/usr/sbin/sdbd `/usr/bin/awk '{match($0, /sdb_port=([0-9]+)/,port_match); match($0, /vm_name=([^, ]*)/,vm_match); print \"--emulator=\" vm_match[1] \":\" port_match[1] \" --connect-to=10.0.2.2:26099\" \" --sensors=10.0.2.2:\"port_match[1]+3 \" --listen-port=\"port_match[1]+1 }' /proc/cmdline`" [Install] diff --git a/packaging/sdbd_tcp.service b/packaging/sdbd_tcp.service index 6872e01..15b4c8a 100644 --- a/packaging/sdbd_tcp.service +++ b/packaging/sdbd_tcp.service @@ -7,5 +7,5 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes -SmackExecLabel=User +SmackProcessLabel=User ExecStart=/usr/sbin/sdbd --listen=26101 -- 2.7.4 From 4ee7ad9f62429457f74a9f8ab36445c7548de8de Mon Sep 17 00:00:00 2001 From: Taeyoung Kim Date: Fri, 26 Jun 2015 16:30:56 +0900 Subject: [PATCH 15/16] service: remove dependency with default target - Default target has dependency with graphical target. - If a service file whose type is oneshot in basic or multi-user target is blocked by any reason, launching sdbd is also blocked. Thus developers cannot develop their modules or apps. - Now, the dependency is removed and thus sdb can be enabled without any dependencies Change-Id: I550b481c63c65e099c3a78ffe3034f550fcb6db9 Signed-off-by: Taeyoung Kim --- packaging/sdbd_device.service | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 6465753..48f0e6d 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -1,6 +1,5 @@ [Unit] Description=sdbd -After=default.target Requires=tizen-system-env.service [Service] -- 2.7.4 From d1cabf6caa363b444ec052862740619ae375ad36 Mon Sep 17 00:00:00 2001 From: taeyoung Date: Fri, 30 Oct 2015 17:57:28 +0900 Subject: [PATCH 16/16] sdb: do not init usb protocol is the profile is TV - In the TV target, there is no usb connection for sdb. Thus usb protocol init operation should be removed Change-Id: I4d2d6cd631d39468ab283eb47d8502ad04f7aa45 Signed-off-by: taeyoung --- packaging/sdbd_tcp.service | 2 +- src/sdb.c | 94 ++++++++++++++++++++++++++++++++-------------- src/sdb.h | 9 +++++ src/usb_funcfs_client.c | 2 +- 4 files changed, 77 insertions(+), 30 deletions(-) diff --git a/packaging/sdbd_tcp.service b/packaging/sdbd_tcp.service index 15b4c8a..4ded27c 100644 --- a/packaging/sdbd_tcp.service +++ b/packaging/sdbd_tcp.service @@ -8,4 +8,4 @@ Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes SmackProcessLabel=User -ExecStart=/usr/sbin/sdbd --listen=26101 +ExecStart=/usr/sbin/sdbd --listen-port=26101 diff --git a/src/sdb.c b/src/sdb.c index 44a2144..8b9f7cc 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1166,9 +1166,44 @@ static void init_sdk_requirements() { } #endif /* !SDB_HOST */ +static void get_plugin_capability(void) +{ + int len; + char *usb_state; + char *sock_state; + + if (is_emulator()) + usb_state = SDBD_CAP_RET_DISABLED; + else + usb_state = SDBD_CAP_RET_ENABLED; + + sock_state = SDBD_CAP_RET_ENABLED; + + len = sizeof(g_capabilities.usbproto_support); + snprintf(g_capabilities.usbproto_support, len, + "%s", usb_state); + + len = sizeof(g_capabilities.sockproto_support); + snprintf(g_capabilities.sockproto_support, len, + "%s", sock_state); +} + +static int is_support_usbproto() +{ + return (!strncmp(g_capabilities.usbproto_support, + SDBD_CAP_RET_ENABLED, strlen(SDBD_CAP_RET_ENABLED))); +} + +static int is_support_sockproto() +{ + return (!strncmp(g_capabilities.sockproto_support, + SDBD_CAP_RET_ENABLED, strlen(SDBD_CAP_RET_ENABLED))); +} + int sdb_main(int is_daemon, int server_port) { #if !SDB_HOST + get_plugin_capability(); init_drop_privileges(); init_sdk_requirements(); umask(000); @@ -1241,34 +1276,37 @@ int sdb_main(int is_daemon, int server_port) } } - if (!is_emulator()) { - /* choose the usb gadget backend */ - if (access(USB_NODE_FILE, F_OK) == 0) { - /* legacy kernel-based sdb gadget */ - usb_init = &linux_usb_init; - usb_cleanup = &linux_usb_cleanup; - usb_write = &linux_usb_write; - usb_read = &linux_usb_read; - usb_close = &linux_usb_close; - usb_kick = &linux_usb_kick; - } else { - /* functionfs based gadget */ - usb_init = &ffs_usb_init; - usb_cleanup = &ffs_usb_cleanup; - usb_write = &ffs_usb_write; - usb_read = &ffs_usb_read; - usb_close = &ffs_usb_close; - usb_kick = &ffs_usb_kick; - } - // listen on USB - usb_init(); - } - - /* by default don't listen on local transport but - * listen if suitable command line argument has been provided */ - if (sdbd_commandline_args.sdbd_port >= 0) { - local_init(sdbd_commandline_args.sdbd_port); - } + if (is_support_usbproto()) { + if (!is_emulator()) { + /* choose the usb gadget backend */ + if (access(USB_NODE_FILE, F_OK) == 0) { + /* legacy kernel-based sdb gadget */ + usb_init = &linux_usb_init; + usb_cleanup = &linux_usb_cleanup; + usb_write = &linux_usb_write; + usb_read = &linux_usb_read; + usb_close = &linux_usb_close; + usb_kick = &linux_usb_kick; + } else { + /* functionfs based gadget */ + usb_init = &ffs_usb_init; + usb_cleanup = &ffs_usb_cleanup; + usb_write = &ffs_usb_write; + usb_read = &ffs_usb_read; + usb_close = &ffs_usb_close; + usb_kick = &ffs_usb_kick; + } + // listen on USB + usb_init(); + } + } + + if (is_support_sockproto()) { + /* by default don't listen on local transport but + * listen if suitable command line argument has been provided */ + if (sdbd_commandline_args.sdbd_port >= 0) + local_init(sdbd_commandline_args.sdbd_port); + } #if 0 /* tizen specific */ D("sdb_main(): pre init_jdwp()\n"); diff --git a/src/sdb.h b/src/sdb.h index 923fdec..da25ab1 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -228,6 +228,15 @@ struct alistener adisconnect disconnect; }; +#define SDBD_CAP_RET_ENABLED "enabled" +#define SDBD_CAP_RET_DISABLED "disabled" +#define CAPBUF_ITEMSIZE 32 +typedef struct platform_capabilities +{ + char usbproto_support[CAPBUF_ITEMSIZE]; // enabled or disabled + char sockproto_support[CAPBUF_ITEMSIZE]; // enabled or disabled +} pcap; +pcap g_capabilities; void print_packet(const char *label, apacket *p); diff --git a/src/usb_funcfs_client.c b/src/usb_funcfs_client.c index af9fd2b..dd2abf6 100644 --- a/src/usb_funcfs_client.c +++ b/src/usb_funcfs_client.c @@ -475,7 +475,7 @@ void ffs_usb_init() h = calloc(1, sizeof(usb_handle)); if (autoconfig(h) < 0) { - fatal_errno("[ can't recognize usb FunctionFS bulk device ]\n"); + perror("[ can't recognize usb FunctionFS bulk device ]\n"); free(h); return; } -- 2.7.4