From 385d2cc721fdd08baa3aa4b5ed26f8ee11166978 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Tue, 2 Feb 2016 11:00:47 +0900 Subject: [PATCH 01/16] Remove changelog Change-Id: I6ae5328d54cf3face9a1fd8f2b106d594cb82bf2 Signed-off-by: shingil.kang --- packaging/sdbd.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 1289b9b..31f2e8c 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -103,7 +103,3 @@ fi %endif /usr/share/license/%{name} /usr/bin/profile_command - -%changelog -* Thu Jan 28 2016 - Shingil Kang -- Merged tizen_2.4 -- 2.7.4 From 53cc9a694a6d498f0d19e6c1fee898714233b34b Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Wed, 3 Feb 2016 18:33:17 +0900 Subject: [PATCH 02/16] Fixed build error - add changelog section in RPM spec Change-Id: I4d64beb13c08b0b66dcc428845bea07a347b4fdb Signed-off-by: shingil.kang --- packaging/sdbd.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 31f2e8c..4260794 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -103,3 +103,5 @@ fi %endif /usr/share/license/%{name} /usr/bin/profile_command + +%changelog -- 2.7.4 From 9901497f07281ac5dcc6ea8f3f1d3c333c3996da Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Wed, 3 Feb 2016 19:03:45 +0900 Subject: [PATCH 03/16] Fixed build error - Fixed %changelog not in descending chronological order Change-Id: I8eca239ce776efc7544c334c39a091223774536a Signed-off-by: shingil.kang --- packaging/sdbd.changes | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packaging/sdbd.changes b/packaging/sdbd.changes index 8cba86b..5498907 100644 --- a/packaging/sdbd.changes +++ b/packaging/sdbd.changes @@ -1,16 +1,15 @@ * Thu Feb 20 2014 Yoonki Park - Version up to 3.0.1 -* Thu Oct 31 2013 Junfeng Dong submit/tizen/20131011.084016@81e3d5b -- Fix some runtime issue in 3.0 * Wed Nov 27 2013 Yoonki Park - - changed port redirection to usb0 instead of loopback +- changed port redirection to usb0 instead of loopback +* Thu Oct 31 2013 Junfeng Dong +- Fix some runtime issue in 3.0 * Wed Apr 04 2013 Ho Namkoong - - supports platform gdbserver -* Mon Dec 02 2012 Yoonki Park - - supports cs report service using inotify +- supports platform gdbserver * Mon Dec 02 2012 Yoonki Park - - sdb code dropped from adb (Ice Cream Samdwich 4.1.1) +- sdb code dropped from adb (Ice Cream Samdwich 4.1.1) +- supports cs report service using inotify * Wed Apr 18 2012 Yoonki Park - - set dir permission to 777 +- set dir permission to 777 * Sat Mar 31 2012 Yoonki Park - - let sshd be daemon and create sshd.pid file +- let sshd be daemon and create sshd.pid file -- 2.7.4 From 10673f912bd7fe2da445e8888798714258b57706 Mon Sep 17 00:00:00 2001 From: Taeyoung Kim Date: Wed, 17 Feb 2016 09:45:01 +0900 Subject: [PATCH 04/16] sdbd: remove sys-assert dependency - sys-assert is not used in Tizen 3.0. Thus the dependency is removed. Change-Id: I567be8d352e02dc71570d18fe0e83ad32ece57ba Signed-off-by: Taeyoung Kim --- packaging/sdbd.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 4260794..4294dc8 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -24,7 +24,6 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dbus-glib-1) Requires(post): libprivilege-control -Requires: sys-assert Requires: dbus %description -- 2.7.4 From 5d3f5c15a8650e00f9daa8bb811dcd6b37b6183c Mon Sep 17 00:00:00 2001 From: Kim Gunsoo Date: Wed, 2 Mar 2016 14:03:14 +0900 Subject: [PATCH 05/16] Fixed an incorrect function call for usb function. - Whether usb protocol is supported or not in sdbd, initialize the function pointers for usb. Change-Id: Ic1373bcd0b51e1e8d32eb53015cb23e23ded0132 Signed-off-by: Kim Gunsoo --- src/sdb.c | 54 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index 30d55a4..10198ab 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -72,6 +72,9 @@ int HOST = 0; SdbdCommandlineArgs sdbd_commandline_args; #endif +static int is_support_usbproto(); +static int is_support_sockproto(); + void (*usb_init)() = NULL; void (*usb_cleanup)() = NULL; int (*usb_write)(usb_handle *h, const void *data, int len) = NULL; @@ -917,7 +920,10 @@ static BOOL WINAPI ctrlc_handler(DWORD type) static void sdb_cleanup(void) { clear_sdbd_commandline_args(&sdbd_commandline_args); - usb_cleanup(); + + if (is_support_usbproto()) { + usb_cleanup(); + } // if(required_pid > 0) { // kill(required_pid, SIGKILL); // } @@ -1971,26 +1977,26 @@ int sdb_main(int is_daemon, int server_port) } } - if (is_support_usbproto()) { - /* 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; - } + /* 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; + } + if (is_support_usbproto()) { // listen on USB usb_init(); } @@ -2027,7 +2033,9 @@ int sdb_main(int is_daemon, int server_port) fdevent_loop(); - usb_cleanup(); + if (is_support_usbproto()) { + usb_cleanup(); + } return 0; } @@ -2165,7 +2173,9 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r fprintf(stderr,"sdb server killed by remote request\n"); fflush(stdout); sdb_write(reply_fd, "OKAY", 4); - usb_cleanup(); + if (is_support_usbproto()) { + usb_cleanup(); + } exit(0); } -- 2.7.4 From 8867e00eec23df35ab960f7290a193490c588de3 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Wed, 2 Mar 2016 17:49:28 +0900 Subject: [PATCH 06/16] Fixed segment fault error on arch64 Change-Id: Idbc8006317e121ebd884642a06c3cd03a9811b63 Signed-off-by: shingil.kang --- packaging/sdbd.spec | 2 +- src/services.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 4294dc8..dc6d083 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -2,7 +2,7 @@ Name: sdbd Summary: SDB daemon -Version: 3.0.2 +Version: 3.0.3 Release: 0 License: Apache-2.0 Summary: SDB daemon diff --git a/src/services.c b/src/services.c index e845e4f..f5c62f3 100644 --- a/src/services.c +++ b/src/services.c @@ -529,6 +529,7 @@ static void get_env(char *key, char **env) s = buf; e = buf + (strlen(buf) - 1); + // trim string while(*e == ' ' || *e == '\n' || *e == '\t') { e--; } @@ -538,6 +539,7 @@ static void get_env(char *key, char **env) s++; } + // skip comment or null string if (*s == '#' || *s == '\0') { continue; } @@ -545,7 +547,7 @@ static void get_env(char *key, char **env) *value++ = '\0'; if(!strcmp(buf, key)) { - *env = value; + *env = strdup(value); break; } } @@ -596,8 +598,10 @@ static int create_subproc_thread(const char *name, int lines, int columns) envp[3] = path; free(trim_value); } else { - envp[3] = value; + snprintf(path, sizeof(path), "%s", value); + envp[3] = path; } + free(value); } D("path env:%s,%s,%s,%s\n", envp[0], envp[1], envp[2], envp[3]); -- 2.7.4 From 597a05ca47795b91fae03815e01cf8fb7467ecb9 Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Fri, 4 Mar 2016 17:41:43 +0900 Subject: [PATCH 07/16] Fixed build warning "implicit declaration of function" Change-Id: I15989e44823099736c39f600716e0e559bb45850 Signed-off-by: shingil.kang --- packaging/sdbd.spec | 2 +- packaging/sdbd_device.service | 2 +- src/file_sync_service.c | 3 ++- src/sdb.c | 37 +++++++++++++++--------------- src/sdb.h | 1 + src/services.c | 2 +- src/utils.c | 53 +++++++++++++++++++++++++++++-------------- src/utils.h | 2 +- 8 files changed, 61 insertions(+), 41 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index dc6d083..00d6fd4 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -2,7 +2,7 @@ Name: sdbd Summary: SDB daemon -Version: 3.0.3 +Version: 3.0.4 Release: 0 License: Apache-2.0 Summary: SDB daemon diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 949ca4e..e83b1f7 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -11,4 +11,4 @@ RemainAfterExit=yes ExecStart=/usr/sbin/sdbd [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target diff --git a/src/file_sync_service.c b/src/file_sync_service.c index 2efe0ea..cfe3e7f 100644 --- a/src/file_sync_service.c +++ b/src/file_sync_service.c @@ -35,6 +35,7 @@ #include "file_sync_service.h" #include "sdktools.h" #include "sdbd_plugin.h" +#include "utils.h" #define SYNC_TIMEOUT 15 @@ -65,7 +66,7 @@ void init_sdk_sync_permit_rule_regx(void) { asprintf(&sdk_sync_permit_rule[0].regx, "^((/tmp)|(%s)|(%s))/[a-zA-Z0-9]{10}/data/[a-zA-Z0-9_\\-]{1,50}\\.xml$", APP_INSTALL_PATH_PREFIX1, APP_INSTALL_PATH_PREFIX2); asprintf(&sdk_sync_permit_rule[1].regx, "^((/tmp)|(%s)|(%s))/[a-zA-Z0-9]{10}/data/+(.)*\\.gcda$", APP_INSTALL_PATH_PREFIX1, APP_INSTALL_PATH_PREFIX2); - asprintf(&sdk_sync_permit_rule[2].regx, "da", "^(/tmp/da/)*+[a-zA-Z0-9_\\-\\.]{1,50}\\.png$"); + asprintf(&sdk_sync_permit_rule[2].regx, "^(/tmp/da/)*+[a-zA-Z0-9_\\-\\.]{1,50}\\.png$"); } diff --git a/src/sdb.c b/src/sdb.c index 10198ab..52e520f 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1262,6 +1262,24 @@ static void pwlock_cb(keynode_t *key, void* data) { send_device_status(); } +void register_pwlock_cb() { + int ret = vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, pwlock_cb, NULL); + if(ret != 0) { + D("cannot register vconf callback.\n"); + return; + } + D("registered vconf callback\n"); +} + +void unregister_pwlock_cb() { + int ret = vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, pwlock_cb); + if(ret != 0) { + D("cannot unregister vconf callback.\n"); + return; + } + D("unregistered vconf callback\n"); +} + static void *pwlock_thread(void *x) { GMainLoop *loop; loop = g_main_loop_new(NULL, FALSE); @@ -1272,7 +1290,6 @@ static void *pwlock_thread(void *x) { return 0; } - void create_pwlock_thread() { sdb_thread_t t; if(sdb_thread_create( &t, pwlock_thread, NULL)) { @@ -1282,24 +1299,6 @@ void create_pwlock_thread() { D("created pwlock_thread\n"); } -void register_pwlock_cb() { - int ret = vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, pwlock_cb, NULL); - if(ret != 0) { - D("cannot register vconf callback.\n"); - return; - } - D("registered vconf callback\n"); -} - -void unregister_pwlock_cb() { - int ret = vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, pwlock_cb); - if(ret != 0) { - D("cannot unregister vconf callback.\n"); - return; - } - D("unregistered vconf callback\n"); -} - #include #include #include diff --git a/src/sdb.h b/src/sdb.h index 9cef525..295aa32 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -309,6 +309,7 @@ void init_transport_registration(void); int list_transports(char *buf, size_t bufsize); void update_transports(void); void broadcast_transport(apacket *p); +int get_connected_count(transport_type type); asocket* create_device_tracker(void); diff --git a/src/services.c b/src/services.c index f5c62f3..739e36f 100644 --- a/src/services.c +++ b/src/services.c @@ -39,6 +39,7 @@ #endif #include "strutils.h" +#include "utils.h" #include #include @@ -596,7 +597,6 @@ static int create_subproc_thread(const char *name, int lines, int columns) snprintf(path, sizeof(path), "%s", trim_value); } envp[3] = path; - free(trim_value); } else { snprintf(path, sizeof(path), "%s", value); envp[3] = path; diff --git a/src/utils.c b/src/utils.c index b111a16..ae7d51d 100644 --- a/src/utils.c +++ b/src/utils.c @@ -23,6 +23,7 @@ #include #include #include +#include #define STRING_MAXLEN 1024 char* @@ -112,24 +113,42 @@ buff_add (char* buff, char* buffEnd, const char* format, ... ) return buff; } -char *str_trim(const char* string) -{ - const char* s = string; - const char* e = string + (strlen(string) - 1); - char* ret; - - while(*s == ' ' || *s == '\t') // ltrim - s++; - while(*e == ' ' || *e == '\t') // rtrim - e--; - - ret = strdup(s); - if(ret == NULL) { - return NULL; - } - ret[e - s + 1] = 0; +char *str_trim(char *str) { + size_t len = 0; + char *frontp = str; + char *endp = NULL; - return ret; + if (str == NULL) { + return NULL; + } + if (str[0] == '\0') { + return str; + } + + len = strlen(str); + endp = str + len; + + while (isspace(*frontp)) { + ++frontp; + } + if (endp != frontp) { + while (isspace(*(--endp)) && endp != frontp) { + } + } + + if (str + len - 1 != endp) + *(endp + 1) = '\0'; + else if (frontp != str && endp == frontp) + *str = '\0'; + + endp = str; + if (frontp != str) { + while (*frontp) { + *endp++ = *frontp++; + } + *endp = '\0'; + } + return str; } int spawn(char* program, char** arg_list) diff --git a/src/utils.h b/src/utils.h index 6904377..11a63c8 100644 --- a/src/utils.h +++ b/src/utils.h @@ -66,7 +66,7 @@ char* buff_add (char* buff, char* buffEnd, const char* format, ... ); #define BUFF_DECL(_buff,_cursor,_end,_size) \ char _buff[_size], *_cursor=_buff, *_end = _cursor + (_size) -char *str_trim(const char* string); +char *str_trim(char* string); /* * spawn a process and returns the process id of the new spawned process. -- 2.7.4 From 61de9b7f320a41726123e0916cffb440d7b494ef Mon Sep 17 00:00:00 2001 From: Kim Gunsoo Date: Tue, 8 Mar 2016 17:48:52 +0900 Subject: [PATCH 08/16] Fixed the incorrect version information for profile_command. - Modified to 3.0 from the 4.0. Change-Id: I06cfade7942f8a14fee763adc523afaa9f24c769 Signed-off-by: Kim Gunsoo --- script/profile_command | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/profile_command b/script/profile_command index cdaef64..27efe39 100755 --- a/script/profile_command +++ b/script/profile_command @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="4.0" +VERSION="3.0" KILL=/usr/bin/killall MANAGER=/usr/bin/da_manager FIND=/usr/bin/find -- 2.7.4 From 89e53405f7396e065018326fdc4fb945d70196f6 Mon Sep 17 00:00:00 2001 From: Kim Gunsoo Date: Tue, 8 Mar 2016 18:41:06 +0900 Subject: [PATCH 09/16] MISC: package version up(3.0.5) - Fixed the incorrect version information for profile_command. Change-Id: I8ed08c3e4d63badbe5b314ec85a4272ec3c44e1a Signed-off-by: Kim Gunsoo --- packaging/sdbd.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 00d6fd4..8372f3c 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -2,7 +2,7 @@ Name: sdbd Summary: SDB daemon -Version: 3.0.4 +Version: 3.0.5 Release: 0 License: Apache-2.0 Summary: SDB daemon -- 2.7.4 From 845160f17df2ae504382893ab1374aa5b02968d7 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Wed, 9 Mar 2016 11:02:10 +0900 Subject: [PATCH 10/16] Fixed sources reported by static code analysis tool. Change-Id: I5307232da32f736c3686ea0a080eea18a09db962 Signed-off-by: shingil.kang --- src/file_sync_service.c | 4 ++-- src/properties.c | 13 ++++++++----- src/sdb.c | 6 +++--- src/transport_local.c | 5 +++-- src/usb_funcfs_client.c | 8 ++++---- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/file_sync_service.c b/src/file_sync_service.c index cfe3e7f..61842a7 100644 --- a/src/file_sync_service.c +++ b/src/file_sync_service.c @@ -92,7 +92,7 @@ static void set_syncfile_smack_label(char *src) { rc = smack_getlabel(dirname, &label, SMACK_LABEL_ACCESS); if (rc == 0 && label != NULL) { if (smack_setlabel(src, label, SMACK_LABEL_ACCESS) == -1) { - D("unable to set sync file smack label %s due to %s\n", label, strerror(errno)); + D("unable to set sync file smack label %s due to (errno:%d)\n", label, errno); } /* Todo: The following code is from tizen 2.4 @@ -109,7 +109,7 @@ static void set_syncfile_smack_label(char *src) { free(label_transmuted); } else { if (smack_setlabel(src, SMACK_SYNC_FILE_LABEL, SMACK_LABEL_ACCESS) == -1) { - D("unable to set sync file smack label %s due to %s\n", SMACK_SYNC_FILE_LABEL, strerror(errno)); + D("unable to set sync file smack label %s due to (errno:%d)\n", SMACK_SYNC_FILE_LABEL, errno); } /* Todo: The following code is from tizen 2.4 diff --git a/src/properties.c b/src/properties.c index 42e5785..dc76a69 100644 --- a/src/properties.c +++ b/src/properties.c @@ -60,6 +60,7 @@ static void property_init(void) int i = 0; char buffer[PROPERTY_KEY_MAX+PROPERTY_VALUE_MAX+1]; char *tok = NULL; + char *ptr; fd = unix_open(TIZEN_PROPERTY_FILE, O_RDONLY); if (fd < 0) @@ -67,12 +68,14 @@ static void property_init(void) for(;;) { if(read_line(fd, buffer, PROPERTY_KEY_MAX+PROPERTY_VALUE_MAX+1) < 0) break; - tok = strtok(buffer, PROPERTY_SEPARATOR); + tok = strtok_r(buffer, PROPERTY_SEPARATOR, &ptr); for (i = 0; i < sdbd_config_element_cnt && sdbd_config[i].key ; i++) { if (!strcmp(tok, sdbd_config[i].key)) { - tok = strtok(NULL, PROPERTY_SEPARATOR); - strncpy(sdbd_config[i].value, tok, PROPERTY_VALUE_MAX); - D("property init key=%s, value=%s\n", sdbd_config[i].key, tok); + tok = strtok_r(NULL, PROPERTY_SEPARATOR, &ptr); + if(tok) { + snprintf(sdbd_config[i].value, PROPERTY_VALUE_MAX, "%s", tok); + D("property init key=%s, value=%s\n", sdbd_config[i].key, tok); + } } } @@ -113,7 +116,7 @@ int property_set(const char *key, const char *value) for (i = 0; i < sdbd_config_element_cnt && sdbd_config[i].key; i++) { if (!strcmp(key,sdbd_config[i].key)) { - strncpy(sdbd_config[i].value, value, PROPERTY_VALUE_MAX); + snprintf(sdbd_config[i].value, PROPERTY_VALUE_MAX, "%s", value); D("property set key=%s, value=%s\n", key, value); break; } diff --git a/src/sdb.c b/src/sdb.c index 52e520f..175c3ff 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -1416,10 +1416,10 @@ int set_developer_privileges() { } } // TODO: use pam later - char * env = malloc(strlen("HOME=") + strlen(HOME_DEV_PATH) + 1); + int env_size = strlen("HOME=") + strlen(HOME_DEV_PATH) + 1; + char * env = malloc(env_size); if(env == 0) fatal("failed to allocate for env string"); - strcpy(env, "HOME="); - strcat(env, HOME_DEV_PATH); + snprintf(env, env_size, "HOME=%s", HOME_DEV_PATH); putenv(env); free(env); diff --git a/src/transport_local.c b/src/transport_local.c index 8e8029b..1daa143 100644 --- a/src/transport_local.c +++ b/src/transport_local.c @@ -431,7 +431,8 @@ static const char _ok_resp[] = "ok"; */ static int send_msg_to_host_from_guest(const char *hostname, int host_port, char *request, int protocol) { int sock = -1; - char port[32]; /* string decimal representation for getaddrinfo */ + int PORT_SIZE = 32; + char port[PORT_SIZE]; /* string decimal representation for getaddrinfo */ struct addrinfo hints = {0}; struct addrinfo *addresses, *curr_addr; int getaddr_ret; @@ -455,7 +456,7 @@ static int send_msg_to_host_from_guest(const char *hostname, int host_port, char hints.ai_family = AF_INET; - sprintf(port, "%d", host_port); + snprintf(port, PORT_SIZE, "%d", host_port); getaddr_ret = getaddrinfo(hostname, port, &hints, &addresses); if (getaddr_ret != 0) { diff --git a/src/usb_funcfs_client.c b/src/usb_funcfs_client.c index 0237e5a..ef28284 100644 --- a/src/usb_funcfs_client.c +++ b/src/usb_funcfs_client.c @@ -532,8 +532,8 @@ int ffs_usb_write(usb_handle *h, const void *data, int len) 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)); + D("ERROR: fd = %d, n = %d, errno = %d\n", + h->bulk_in, n, errno); return -1; } D("[ done fd=%d ]\n", h->bulk_in); @@ -555,8 +555,8 @@ int ffs_usb_read(usb_handle *h, void *data, int len) 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)); + D("ERROR: fd = %d, n = %d, errno = %d\n", + h->bulk_out, n, errno); return -1; } D("[ done fd=%d ]\n", h->bulk_out); -- 2.7.4 From b60aa8d7ce56eb3c392b1ae12bc3ce691fa111d4 Mon Sep 17 00:00:00 2001 From: Kim Gunsoo Date: Thu, 10 Mar 2016 20:54:01 +0900 Subject: [PATCH 11/16] Modify the fixed SDK constant(developer). - changed to obtained using the platform API(tizen-platform-config). Change-Id: I0c975660c8fda8868561750d747162487733af62 Signed-off-by: Kim Gunsoo --- src/commandline.c | 2 +- src/file_sync_service.c | 2 +- src/sdb.c | 178 ++++++++++++++++++++++++++++++++++++++++-------- src/sdb.h | 10 ++- src/sdktools.c | 2 +- src/sdktools.h | 2 +- src/services.c | 31 +++++---- 7 files changed, 177 insertions(+), 50 deletions(-) diff --git a/src/commandline.c b/src/commandline.c index 740cd2b..1d88c7a 100644 --- a/src/commandline.c +++ b/src/commandline.c @@ -127,7 +127,7 @@ void help() " sdb status-window - continuously print device status for a specified device\n" // " sdb usb - restarts the sdbd daemon listing on USB\n" // " sdb tcpip - restarts the sdbd daemon listing on TCP\n" - " sdb root - switch to root or developer account mode\n" + " sdb root - switch to root or sdk user account mode\n" " 'on' means to root mode, and vice versa" "\n" ); diff --git a/src/file_sync_service.c b/src/file_sync_service.c index 61842a7..3f49e39 100644 --- a/src/file_sync_service.c +++ b/src/file_sync_service.c @@ -672,7 +672,7 @@ void file_sync_service(int fd, void *cookie) D("sync: '%s' '%s'\n", (char*) &msg.req, name); if (should_drop_privileges() && !verify_sync_rule(name)) { - set_developer_privileges(); + set_sdk_user_privileges(); } switch(msg.req.id) { diff --git a/src/sdb.c b/src/sdb.c index 175c3ff..c29e51f 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -68,6 +69,11 @@ SDB_MUTEX_DEFINE( D_lock ); int HOST = 0; #define HOME_DEV_PATH tzplatform_getenv(TZ_SDK_HOME) #define DEV_NAME tzplatform_getenv(TZ_SDK_USER_NAME) +uid_t g_sdk_user_id = -1; +gid_t g_sdk_group_id = -1; +char* g_sdk_home_dir = NULL; +char* g_sdk_home_dir_env = NULL; + #if !SDB_HOST SdbdCommandlineArgs sdbd_commandline_args; #endif @@ -1391,41 +1397,108 @@ void register_bootdone_cb() { } } -int set_developer_privileges() { - gid_t groups[] = { SID_DEVELOPER, SID_APP_LOGGING, SID_SYS_LOGGING, SID_INPUT }; - if (setgroups(sizeof(groups) / sizeof(groups[0]), groups) != 0) { +static int sdbd_set_groups() { + gid_t *groups = NULL; + int ngroups = 0; + int default_ngroups = 0; + int i, j = 0; + int group_match = 0; + int added_group_cnt = 0; + gid_t default_groups[] = { SID_DEVELOPER, SID_APP_LOGGING, SID_SYS_LOGGING, SID_INPUT }; + + default_ngroups = sizeof(default_groups) / sizeof(default_groups[0]); + + getgrouplist(SDK_USER_NAME, g_sdk_group_id, NULL, &ngroups); + D("group list : ngroups = %d\n", ngroups); + groups = malloc((ngroups + default_ngroups) * sizeof(gid_t)); + if (groups == NULL) { + D("failed to allocate groups(%d)\n", (ngroups + default_ngroups) * sizeof(gid_t)); + return -1; + } + if (getgrouplist(SDK_USER_NAME, g_sdk_group_id, groups, &ngroups) == -1) { + D("failed to getgrouplist(), ngroups = %d\n", ngroups); + free(groups); + return -1; + } + + for (i = 0; i < default_ngroups; i++) { + for (j = 0; j < ngroups; j++) { + if (groups[j] == default_groups[i]) { + group_match = 1; + break; + } + } + if (group_match == 0) { + groups[ngroups + added_group_cnt] = default_groups[i]; + added_group_cnt ++; + } + group_match = 0; + } + + if (setgroups(ngroups+added_group_cnt, groups) != 0) { + D("failed to setgroups().\n"); + free(groups); + return -1; + } + + free(groups); + return 0; +} + +static int sdbd_get_user_pwd(const char* user_name, struct passwd* pwd, char* buf, size_t bufsize) { + struct passwd *result = NULL; + int ret = 0; + + ret = getpwnam_r(user_name, pwd, buf, bufsize, &result); + if (result == NULL) { + if (ret == 0) { + D("Not found passwd : username(%s)\n", user_name); + } else { + errno = ret; + D("failed to getpwuid_r\n"); + } + free(buf); + return -1; + } + + return 0; +} + +int set_sdk_user_privileges() { + if (g_sdk_user_id < 0 || g_sdk_group_id < 0 || + g_sdk_home_dir == NULL || g_sdk_home_dir_env == NULL) { + D("failed to init sdk user information.\n"); + return -1; + } + + if (sdbd_set_groups() < 0) { D("set groups failed (errno: %d)\n", errno); + + // set default group list + gid_t default_groups[] = { SID_DEVELOPER, SID_APP_LOGGING, SID_SYS_LOGGING, SID_INPUT }; + int default_ngroups = sizeof(default_groups) / sizeof(default_groups[0]); + setgroups(default_ngroups, default_groups); } - // then switch user and group to developer - if (setgid(SID_DEVELOPER) != 0) { + if (setgid(g_sdk_group_id) != 0) { D("set group id failed (errno: %d)\n", errno); return -1; } - if (setuid(SID_DEVELOPER) != 0) { + if (setuid(g_sdk_user_id) != 0) { D("set user id failed (errno: %d)\n", errno); return -1; } - if (chdir(HOME_DEV_PATH) < 0) { - D("sdbd: unable to change working directory to %s\n", HOME_DEV_PATH); - } else { - if (chdir("/") < 0) { - D("sdbd: unable to change working directory to /\n"); - } + if (chdir(g_sdk_home_dir) < 0) { + D("unable to change working directory to %s\n", g_sdk_home_dir); + return -1; } - // TODO: use pam later - int env_size = strlen("HOME=") + strlen(HOME_DEV_PATH) + 1; - char * env = malloc(env_size); - if(env == 0) fatal("failed to allocate for env string"); - snprintf(env, env_size, "HOME=%s", HOME_DEV_PATH); - putenv(env); - free(env); - return 1; + // TODO: use pam later + putenv(g_sdk_home_dir_env); + return 0; } -#define ONDEMAND_ROOT_PATH tzplatform_getenv(TZ_SDK_HOME) static void execute_required_process() { char *cmd_args[] = {"/usr/bin/debug_launchpad_preloading_preinitializing_daemon",NULL}; @@ -1647,6 +1720,52 @@ static void load_sdbd_plugin() { D("using sdbd plugin interface.(%s)\n", SDBD_PLUGIN_PATH); } +static int init_sdk_userinfo() { + struct passwd pwd; + char *buf = NULL; + size_t bufsize = 0; + + if (g_sdk_user_id > 0 && g_sdk_group_id > 0 && + g_sdk_home_dir != NULL && g_sdk_home_dir_env != NULL) { + return 0; + } + + bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); + if (bufsize < 0) { + bufsize = (16*1024); + } + buf = malloc(bufsize); + if (buf == NULL) { + D("failed to allocate passwd buf(%d)\n", bufsize); + return -1; + } + + if (sdbd_get_user_pwd(SDK_USER_NAME, &pwd, buf, bufsize) < 0) { + D("get user passwd info.(errno: %d)\n", errno); + free(buf); + return -1; + } + D("username=%s, uid=%d, gid=%d, dir=%s\n", pwd.pw_name, pwd.pw_uid, pwd.pw_gid, pwd.pw_dir); + + g_sdk_user_id = pwd.pw_uid; + g_sdk_group_id = pwd.pw_gid; + g_sdk_home_dir = strdup(pwd.pw_dir); + + free(buf); + + int env_size = strlen("HOME=") + strlen(g_sdk_home_dir) + 1; + g_sdk_home_dir_env = malloc(env_size); + if(g_sdk_home_dir_env == 0) { + D("failed to allocate for home dir env string\n"); + free(g_sdk_home_dir); + g_sdk_home_dir = NULL; + return -1; + } + snprintf(g_sdk_home_dir_env, env_size, "HOME=%s", g_sdk_home_dir); + + return 0; +} + static void init_sdk_requirements() { struct stat st; @@ -1660,14 +1779,15 @@ static void init_sdk_requirements() { putenv("HOME=/root"); } - if (stat(ONDEMAND_ROOT_PATH, &st) == -1) { - return; - } - 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) { - D("failed to change ownership to developer to %s\n", ONDEMAND_ROOT_PATH); + init_sdk_userinfo(); + + if (g_sdk_home_dir != NULL && stat(g_sdk_home_dir, &st) == 0) { + if (st.st_uid != g_sdk_user_id || st.st_gid != g_sdk_group_id) { + char cmd[128]; + snprintf(cmd, sizeof(cmd), "chown %s:%s %s -R", SDK_USER_NAME, SDK_USER_NAME, g_sdk_home_dir); + if (system(cmd) < 0) { + D("failed to change ownership to sdk user to %s\n", g_sdk_home_dir); + } } } diff --git a/src/sdb.h b/src/sdb.h index 295aa32..750e9a6 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -374,7 +374,7 @@ void log_service(int fd, void *cookie); void remount_service(int fd, void *cookie); char * get_log_file_path(const char * log_name); -int rootshell_mode; // 0: developer, 1: root +int rootshell_mode; // 0: sdk user, 1: root int booting_done; // 0: platform booting is in progess 1: platform booting is done // This is the users and groups config for the platform @@ -383,16 +383,20 @@ int booting_done; // 0: platform booting is in progess 1: platform booting is do #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 +#define SDK_USER_NAME tzplatform_getenv(TZ_SDK_USER_NAME) +extern uid_t g_sdk_user_id; +extern gid_t g_sdk_group_id; +extern char* g_sdk_home_dir; +extern char* g_sdk_home_dir_env; #endif int is_pwlocked(void); int should_drop_privileges(void); -int set_developer_privileges(); +int set_sdk_user_privileges(); void set_root_privileges(); int get_emulator_forward_port(void); diff --git a/src/sdktools.c b/src/sdktools.c index 814e066..f24bccc 100644 --- a/src/sdktools.c +++ b/src/sdktools.c @@ -178,7 +178,7 @@ int verify_root_commands(const char *arg1) { } } - D("doing the cmd as a %s\n", ret == 1 ? "root" : "developer"); + D("doing the cmd as a %s\n", ret == 1 ? "root" : SDK_USER_NAME); if (cnt) { free_strings(tokens, cnt); diff --git a/src/sdktools.h b/src/sdktools.h index 59d8d98..50b68de 100644 --- a/src/sdktools.h +++ b/src/sdktools.h @@ -13,7 +13,7 @@ struct sudo_command const char *path; const char *arguments[PERMITTED_ARGUMENT_SIZE]; //const char *regx; - //int permission; /* 0: root, 1: developer, 2: app*/ + //int permission; /* 0: root, 1: sdk user, 2: app*/ }; diff --git a/src/services.c b/src/services.c index 739e36f..78cd4aa 100644 --- a/src/services.c +++ b/src/services.c @@ -186,7 +186,7 @@ void rootshell_service(int fd, void *cookie) if (!strcmp(mode, "on")) { if (getuid() == 0) { if (rootshell_mode == 1) { - //snprintf(buf, sizeof(buf), "Already changed to developer mode\n"); + //snprintf(buf, sizeof(buf), "Already changed to sdk user mode\n"); // do not show message } else { if (is_support_rootonoff()) { @@ -207,14 +207,14 @@ void rootshell_service(int fd, void *cookie) } else if (!strcmp(mode, "off")) { if (rootshell_mode == 1) { rootshell_mode = 0; - snprintf(buf, sizeof(buf), "Switched to 'developer' account mode\n"); + snprintf(buf, sizeof(buf), "Switched to 'sdk user' account mode\n"); writex(fd, buf, strlen(buf)); } } else { snprintf(buf, sizeof(buf), "Unknown command option : %s\n", mode); writex(fd, buf, strlen(buf)); } - D("set rootshell to %s\n", rootshell_mode == 1 ? "root" : "developer"); + D("set rootshell to %s\n", rootshell_mode == 1 ? "root" : SDK_USER_NAME); free(mode); sdb_close(fd); } @@ -459,7 +459,7 @@ static int create_subprocess(const char *cmd, pid_t *pid, const char *argv[], co // do nothing D("sdb: executes root commands!!:%s\n", argv[2]); } else { - set_developer_privileges(); + set_sdk_user_privileges(); } } redirect_and_exec(pts, cmd, argv, envp); @@ -478,7 +478,6 @@ static int create_subprocess(const char *cmd, pid_t *pid, const char *argv[], co #define SHELL_COMMAND "/bin/sh" #define LOGIN_COMMAND "/bin/login" -#define SDK_USER "developer" #define SUPER_USER "root" #define LOGIN_CONFIG "/etc/login.defs" @@ -578,15 +577,19 @@ static int create_subproc_thread(const char *name, int lines, int columns) }; if (should_drop_privileges()) { - envp[2] = "HOME=/home/developer"; - get_env("ENV_PATH", &value); - } else { - get_env("ENV_SUPATH", &value); - if(value == NULL) { - get_env("ENV_ROOTPATH", &value); - } - envp[2] = "HOME=/root"; - } + if (g_sdk_home_dir_env) { + envp[2] = g_sdk_home_dir_env; + } else { + envp[2] = "HOME=/home/owner"; + } + get_env("ENV_PATH", &value); + } else { + get_env("ENV_SUPATH", &value); + if(value == NULL) { + get_env("ENV_ROOTPATH", &value); + } + envp[2] = "HOME=/root"; + } if (value != NULL) { trim_value = str_trim(value); if (trim_value != NULL) { -- 2.7.4 From 9f4dd3a9a340c2d0e7a1b8f0364c7c10fb11d3fb Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Thu, 10 Mar 2016 22:06:52 +0900 Subject: [PATCH 12/16] Removed hard-coded path to support multi-user. Change-Id: I48871f1e2b98511c94e916fc291f94dfe861b9a6 Signed-off-by: shingil.kang --- packaging/sdbd.spec | 8 ++++---- src/file_sync_service.c | 21 ++++++++++----------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 8372f3c..aaba56d 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -2,7 +2,7 @@ Name: sdbd Summary: SDB daemon -Version: 3.0.5 +Version: 3.0.6 Release: 0 License: Apache-2.0 Summary: SDB daemon @@ -72,8 +72,8 @@ ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/sys mkdir -p %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ -mkdir -p %{buildroot}/usr/bin -install -m 755 script/profile_command %{buildroot}/usr/bin/ +mkdir -p %{buildroot}%{TZ_SYS_BIN} +install -m 755 script/profile_command %{buildroot}%{TZ_SYS_BIN}/ %post . %{_sysconfdir}/tizen-platform.conf @@ -101,6 +101,6 @@ fi %{_libdir}/systemd/system/multi-user.target.wants/sdbd.service %endif /usr/share/license/%{name} -/usr/bin/profile_command +%{TZ_SYS_BIN}/profile_command %changelog diff --git a/src/file_sync_service.c b/src/file_sync_service.c index 61842a7..67ba692 100644 --- a/src/file_sync_service.c +++ b/src/file_sync_service.c @@ -40,7 +40,7 @@ #define SYNC_TIMEOUT 15 #define APP_INSTALL_PATH_PREFIX1 tzplatform_getenv(TZ_SYS_RW_APP) -#define APP_INSTALL_PATH_PREFIX2 tzplatform_getenv(TZ_USER_APP) +#define APP_INSTALL_PATH_PREFIX2 tzplatform_mkpath(TZ_SDK_HOME, "apps_rw") struct sync_permit_rule { @@ -50,10 +50,9 @@ struct sync_permit_rule }; struct sync_permit_rule sdk_sync_permit_rule[] = { -// /* 0 */ {"rds", "^((/opt/apps)|(/opt/usr/apps))/[a-zA-Z0-9]{10}/info/\\.sdk_delta\\.info$", 1}, - /* 1 */ {"unitest", "^((/tmp)|(/opt/apps)|(/opt/usr/apps))/[a-zA-Z0-9]{10}/data/[a-zA-Z0-9_\\-]{1,50}\\.xml$", 1}, - /* 2 */ {"codecoverage", "^((/tmp)|(/opt/apps)|(/opt/usr/apps))/[a-zA-Z0-9]{10}/data/+(.)*\\.gcda$", 1}, - /* 3 */ {"da", "^(/tmp/da/)*+[a-zA-Z0-9_\\-\\.]{1,50}\\.png$", 1}, + /* 0 */ {"unitest", "", 1}, + /* 1 */ {"codecoverage", "", 1}, + /* 2 */ {"da", "", 1}, /* end */ {NULL, NULL, 0} }; @@ -67,7 +66,6 @@ void init_sdk_sync_permit_rule_regx(void) asprintf(&sdk_sync_permit_rule[0].regx, "^((/tmp)|(%s)|(%s))/[a-zA-Z0-9]{10}/data/[a-zA-Z0-9_\\-]{1,50}\\.xml$", APP_INSTALL_PATH_PREFIX1, APP_INSTALL_PATH_PREFIX2); asprintf(&sdk_sync_permit_rule[1].regx, "^((/tmp)|(%s)|(%s))/[a-zA-Z0-9]{10}/data/+(.)*\\.gcda$", APP_INSTALL_PATH_PREFIX1, APP_INSTALL_PATH_PREFIX2); asprintf(&sdk_sync_permit_rule[2].regx, "^(/tmp/da/)*+[a-zA-Z0-9_\\-\\.]{1,50}\\.png$"); - } static void set_syncfile_smack_label(char *src) { @@ -295,11 +293,11 @@ static int fail_errno(int s) } // FIXME: should get the following paths with api later but, do it for simple and not having dependency on other packages -#define VAR_ABS_PATH "/opt/var" -#define CMD_MEDIADB_UPDATE "/usr/bin/mediadb-update" -#define MEDIA_CONTENTS_PATH1 "/opt/media" -#define MEDIA_CONTENTS_PATH2 "/opt/usr/media" -#define MEDIA_CONTENTS_PATH3 "/opt/storage/sdcard" +#define VAR_ABS_PATH "/opt/var" +#define CMD_MEDIADB_UPDATE tzplatform_mkpath(TZ_SYS_BIN, "mediadb-update") +#define MEDIA_CONTENTS_PATH1 tzplatform_getenv(TZ_SYS_STORAGE) +#define MEDIA_CONTENTS_PATH2 tzplatform_getenv(TZ_USER_CONTENT) +#define MEDIA_CONTENTS_PATH3 tzplatform_mkpath(TZ_SYS_STORAGE, "sdcard") static void sync_mediadb(char *path) { if (access(CMD_MEDIADB_UPDATE, F_OK) != 0) { @@ -669,6 +667,7 @@ void file_sync_service(int fd, void *cookie) name[namelen] = 0; msg.req.namelen = 0; + D("sync: '%s' '%s'\n", (char*) &msg.req, name); if (should_drop_privileges() && !verify_sync_rule(name)) { -- 2.7.4 From 6296c63f624fc49a467666a2c74f603c35dd8714 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Fri, 11 Mar 2016 16:12:10 +0900 Subject: [PATCH 13/16] Fixed sdk_launch script (merged from tizen_2.4) Change-Id: I7d07e5749d08647c87477748c809d304ed3e9d23 Signed-off-by: shingil.kang --- script/sdk_launch | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/script/sdk_launch b/script/sdk_launch index 941f236..6206e59 100755 --- a/script/sdk_launch +++ b/script/sdk_launch @@ -132,7 +132,7 @@ then if [ "" != "$attach_id" ] #debug attach then - cmd="$COV_TEST_PREFIX ${TZ_SDK_TOOLS}/gdbserver/gdbserver :$port --attach $attach_id" + cmd="/usr/bin/launch_debug $launch_app_arg1 __AUL_SDK__ ATTACH __DLP_ATTACH_ARG__ --attach,:$port,$attach_id" #debug else if [ "" != "$result_mode" ] @@ -141,7 +141,7 @@ then else result_mode="DEBUG" fi - cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode __DLP_DEBUG_ARG__ :$port $launch_app_mode" + cmd="/usr/bin/launch_app $launch_app_arg1 __AUL_SDK__ $result_mode __DLP_DEBUG_ARG__ :$port $launch_app_mode $args" # cmd="$COV_TEST_PREFIX ${TZ_SDK_TOOLS}/gdbserver/gdbserver :$port ${TZ_SYS_RW_APP}/$pkgid/bin/$exe" fi else @@ -149,9 +149,14 @@ else then if [ "" != "$result_mode" ] then - cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode $launch_app_mode" + if [ "$result_mode" = "UNIT_TEST" ] + then + cmd="/usr/bin/launch_app $launch_app_arg1 __AUL_SDK__ $result_mode $launch_app_mode" + else + cmd="/usr/bin/launch_app $launch_app_arg1 __AUL_SDK__ $result_mode $launch_app_mode $args" + fi else - cmd="/usr/bin/launch_app $pkgid.$exe" + cmd="/usr/bin/launch_app $launch_app_arg1" fi else if [ "$mode" = "da" ] @@ -170,7 +175,7 @@ else result_mode="OPROFILE" fi fi - cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode" + cmd="/usr/bin/launch_app $launch_app_arg1 __AUL_SDK__ $result_mode" fi fi -- 2.7.4 From d37f4532dc78177ce37d0cf86e58eec3057d4615 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Thu, 17 Mar 2016 17:11:55 +0900 Subject: [PATCH 14/16] Removed unnecessary codes Change-Id: I797f401fe9597d6f03462e252d508f459e859183 Signed-off-by: shingil.kang --- src/sdb.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index c29e51f..1686af2 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -69,10 +69,11 @@ SDB_MUTEX_DEFINE( D_lock ); int HOST = 0; #define HOME_DEV_PATH tzplatform_getenv(TZ_SDK_HOME) #define DEV_NAME tzplatform_getenv(TZ_SDK_USER_NAME) -uid_t g_sdk_user_id = -1; -gid_t g_sdk_group_id = -1; +uid_t g_sdk_user_id; +gid_t g_sdk_group_id; char* g_sdk_home_dir = NULL; char* g_sdk_home_dir_env = NULL; +int is_init_sdk_userinfo = 0; #if !SDB_HOST SdbdCommandlineArgs sdbd_commandline_args; @@ -1465,8 +1466,7 @@ static int sdbd_get_user_pwd(const char* user_name, struct passwd* pwd, char* bu } int set_sdk_user_privileges() { - if (g_sdk_user_id < 0 || g_sdk_group_id < 0 || - g_sdk_home_dir == NULL || g_sdk_home_dir_env == NULL) { + if (!is_init_sdk_userinfo) { D("failed to init sdk user information.\n"); return -1; } @@ -1723,17 +1723,17 @@ static void load_sdbd_plugin() { static int init_sdk_userinfo() { struct passwd pwd; char *buf = NULL; - size_t bufsize = 0; + long bufsize = 0; - if (g_sdk_user_id > 0 && g_sdk_group_id > 0 && - g_sdk_home_dir != NULL && g_sdk_home_dir_env != NULL) { + if (is_init_sdk_userinfo) { return 0; } bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); - if (bufsize < 0) { + if(bufsize < 0) { bufsize = (16*1024); } + buf = malloc(bufsize); if (buf == NULL) { D("failed to allocate passwd buf(%d)\n", bufsize); @@ -1763,6 +1763,7 @@ static int init_sdk_userinfo() { } snprintf(g_sdk_home_dir_env, env_size, "HOME=%s", g_sdk_home_dir); + is_init_sdk_userinfo = 1; return 0; } -- 2.7.4 From 0b202ec3594d65668ab0d1c5b1f2af87b257eb90 Mon Sep 17 00:00:00 2001 From: "shingil.kang" Date: Wed, 30 Mar 2016 12:39:50 +0900 Subject: [PATCH 15/16] Removed libprivilege-control dependency Change-Id: I6db42995d134e555ef93a024c7e0377e5977520c Signed-off-by: shingil.kang --- packaging/sdbd.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index aaba56d..db9e680 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -23,7 +23,6 @@ BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dbus-glib-1) -Requires(post): libprivilege-control Requires: dbus %description -- 2.7.4 From 467ef95149819b0fe41c766ed165b1f7e6091c99 Mon Sep 17 00:00:00 2001 From: Kim Gunsoo Date: Mon, 4 Apr 2016 14:36:24 +0900 Subject: [PATCH 16/16] Add the sdk_toolpath member to sdbd capability. - The sdk_toolpath member includes a path that tool of the SDK is saved. Change-Id: Ie022bed562ea0485d263593c060041a6f4fcea14 Signed-off-by: Kim Gunsoo --- src/sdb.c | 11 +++++++++-- src/sdb.h | 3 +++ src/services.c | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index 1686af2..0fa0672 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -67,8 +67,6 @@ SDB_MUTEX_DEFINE( D_lock ); #endif int HOST = 0; -#define HOME_DEV_PATH tzplatform_getenv(TZ_SDK_HOME) -#define DEV_NAME tzplatform_getenv(TZ_SDK_USER_NAME) uid_t g_sdk_user_id; gid_t g_sdk_group_id; char* g_sdk_home_dir = NULL; @@ -1933,6 +1931,15 @@ static void init_capabilities(void) { snprintf(g_capabilities.syncwinsz_support, sizeof(g_capabilities.syncwinsz_support), "%s", ENABLED); + // SDK Tool path + if (SDK_TOOL_PATH == NULL) { + D("fail to get SDK tool path.\n"); + snprintf(g_capabilities.sdk_toolpath, sizeof(g_capabilities.sdk_toolpath), + "%s", UNKNOWN); + } else { + snprintf(g_capabilities.sdk_toolpath, sizeof(g_capabilities.sdk_toolpath), + "%s", SDK_TOOL_PATH); + } // Profile name ret = system_info_get_platform_string("http://tizen.org/feature/profile", &value); diff --git a/src/sdb.h b/src/sdb.h index 750e9a6..074d165 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -245,6 +245,7 @@ typedef struct platform_info { #define CPUARCH_X86 "x86" #define CAPBUF_SIZE 4096 #define CAPBUF_ITEMSIZE 32 +#define CAPBUF_L_ITEMSIZE 256 typedef struct platform_capabilities { char secure_protocol[CAPBUF_ITEMSIZE]; // enabled or disabled @@ -260,6 +261,7 @@ typedef struct platform_capabilities char cpu_arch[CAPBUF_ITEMSIZE]; // cpu architecture (ex. x86) char profile_name[CAPBUF_ITEMSIZE]; // profile name (ex. mobile) char vendor_name[CAPBUF_ITEMSIZE]; // vendor name (ex. Tizen) + char sdk_toolpath[CAPBUF_L_ITEMSIZE]; // sdk tool path char platform_version[CAPBUF_ITEMSIZE]; // platform version (ex. 2.3.0) char product_version[CAPBUF_ITEMSIZE]; // product version (ex. 1.0) @@ -388,6 +390,7 @@ int booting_done; // 0: platform booting is in progess 1: platform booting is do #define SID_INPUT 1004 #define SDK_USER_NAME tzplatform_getenv(TZ_SDK_USER_NAME) +#define SDK_TOOL_PATH tzplatform_getenv(TZ_SDK_TOOLS) extern uid_t g_sdk_user_id; extern gid_t g_sdk_group_id; extern char* g_sdk_home_dir; diff --git a/src/services.c b/src/services.c index 78cd4aa..9607462 100644 --- a/src/services.c +++ b/src/services.c @@ -885,6 +885,10 @@ static void get_capability(int fd, void *cookie) { offset += put_key_value_string(cap_buffer, offset, CAPBUF_SIZE, "cpu_arch", g_capabilities.cpu_arch); + // SDK Tool path + offset += put_key_value_string(cap_buffer, offset, CAPBUF_SIZE, + "sdk_toolpath", g_capabilities.sdk_toolpath); + // Profile name offset += put_key_value_string(cap_buffer, offset, CAPBUF_SIZE, "profile_name", g_capabilities.profile_name); -- 2.7.4