source: remove use of getenv() 01/143401/1
authorJinhyung Jo <jinhyung.jo@samsung.com>
Wed, 9 Aug 2017 14:24:35 +0000 (23:24 +0900)
committerJinhyung Jo <jinhyung.jo@samsung.com>
Wed, 9 Aug 2017 14:24:35 +0000 (23:24 +0900)
Change-Id: I4caf3eb7f788ddd95a83be13a298d1c87c48de10
Signed-off-by: Jinhyung Jo <jinhyung.jo@samsung.com>
packaging/sdbd.service
packaging/sdbd_device.service
packaging/sdbd_device_tv.service
packaging/sdbd_emulator.service
packaging/sdbd_emulator_tv.service
packaging/sdbd_tcp.service
src/sdb.c

index 76a066e..70b5139 100644 (file)
@@ -2,6 +2,8 @@
 Description=sdbd
 
 [Service]
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 Type=forking
 PIDFile=/tmp/.sdbd.pid
 RemainAfterExit=yes
index 779e42e..8fe2e4a 100644 (file)
@@ -8,6 +8,8 @@ User=sdk
 Group=sdk
 Type=forking
 #location of SDBD log file
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 EnvironmentFile=-/run/tizen-system-env
 PIDFile=/tmp/.sdbd.pid
 Restart=on-failure
index 0ea497d..7ca53a3 100644 (file)
@@ -7,6 +7,8 @@ After=tmp.mount
 Type=forking
 #location of SDBD log file
 #Environment=SDBD_LOG_PATH=/tmp
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 EnvironmentFile=-/run/tizen-system-env
 OOMScoreAdjust=-1000
 PIDFile=/tmp/.sdbd.pid
index 74c5d9b..7bf20f5 100644 (file)
@@ -11,6 +11,8 @@ Type=forking
 Environment=DISPLAY=:0
 PIDFile=/tmp/.sdbd.pid
 RemainAfterExit=yes
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 #ExecStartPre=/bin/bash -c "/bin/echo '10.0.2.15/32 system::debugging_network' >> /smack/netlabel"
 SmackProcessLabel=System
 Capabilities=cap_dac_override,cap_setgid,cap_setuid,cap_sys_admin=i
index 3627ded..634974c 100644 (file)
@@ -8,6 +8,8 @@ After=tmp.mount dbus.service
 Type=forking
 #location of SDBD log file
 #Environment=SDBD_LOG_PATH=/tmp
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 Environment=DISPLAY=:0
 PIDFile=/tmp/.sdbd.pid
 RemainAfterExit=yes
index 5269cfe..9995740 100644 (file)
@@ -5,6 +5,8 @@ After=default.target
 [Service]
 Type=forking
 Environment=DISPLAY=:0
+#If necessary, Put Environment variable settings in a file like below
+#ExecStartPre=/bin/bash -c "/bin/echo 'SDB_TRACE=all SDBD_LOG_PATH=/tmp' >> /tmp/.sdbdlog.conf"
 PIDFile=/tmp/.sdbd.pid
 RemainAfterExit=yes
 SmackProcessLabel=System
index 84d3b53..7b81403 100644 (file)
--- a/src/sdb.c
+++ b/src/sdb.c
@@ -68,6 +68,8 @@ SDB_MUTEX_DEFINE(zone_check_lock);
 SDB_MUTEX_DEFINE( D_lock );
 #endif
 
+#define SDB_LOGCONF_PATH "/tmp/.sdbdlog.conf"
+
 int HOST = 0;
 
 // sdk user
@@ -196,6 +198,43 @@ void fatal_errno(const char *fmt, ...)
     exit(-1);
 }
 
+static char* get_sdb_log_conf(const char* key)
+{
+    int fd;
+    char line[256] = {0,};
+    char value[256] = {0,};
+
+    if (access(SDB_LOGCONF_PATH, F_OK)) {
+        return NULL;
+    }
+
+    fd = unix_open(SDB_LOGCONF_PATH, O_RDONLY);
+    if (fd < 0) {
+        D("failed to open '%s' file: %d\n", SDB_LOGCONF_PATH, errno);
+        return NULL;
+    }
+
+    if (read_line(fd, line, sizeof(line)) > 0) {
+        char* start = strstr(line, key);
+        if (start != NULL) {
+            // move one more character to remove '=',
+            // including the length of the key string
+            start = start + strlen(key) + 1;
+            char* end = strstr(start, " ");
+            if (end != NULL) {
+                strncpy(value, start, end - start);
+            } else {
+                strncpy(value, start, sizeof(value));
+            }
+        } else {
+            sdb_close(fd);
+            return NULL;
+        }
+    }
+    sdb_close(fd);
+    return strdup(value);
+}
+
 static int is_enable_sdbd_log()
 {
     return (!strncmp(g_capabilities.log_enable, PLUGIN_RET_ENABLED, strlen(PLUGIN_RET_ENABLED)));
@@ -210,7 +249,8 @@ int   sdb_trace_mask;
  */
 void  sdb_trace_init(void)
 {
-    const char*  p = getenv("SDB_TRACE");
+    char*  ptr = get_sdb_log_conf("SDB_TRACE");
+    const char*  p;
     const char*  q;
 
     static const struct {
@@ -235,11 +275,13 @@ void  sdb_trace_init(void)
         { NULL, 0 }
     };
 
-    if (p == NULL) {
+    if (ptr == NULL) {
         if (is_enable_sdbd_log())
             p = "all";
         else
             return;
+    } else {
+        p = ptr;
     }
 
     /* use a comma/column/semi-colum/space separated list */
@@ -261,6 +303,7 @@ void  sdb_trace_init(void)
                 int  flag = tags[tagn].flag;
                 if (flag == 0) {
                     sdb_trace_mask = ~0;
+                    free(ptr);
                     return;
                 }
                 sdb_trace_mask |= (1 << flag);
@@ -271,6 +314,7 @@ void  sdb_trace_init(void)
         if (*p)
             p++;
     }
+    free(ptr);
 }
 
 /*
@@ -1133,18 +1177,21 @@ void start_device_log(void)
     struct tm now;
     time_t t;
 //    char value[PROPERTY_VALUE_MAX];
-    const char* p_trace = getenv("SDB_TRACE");
-    const char* p_path = getenv("SDBD_LOG_PATH");
+    char* p_trace = get_sdb_log_conf("SDB_TRACE");
+    char* p_path = get_sdb_log_conf("SDBD_LOG_PATH");
     // read the trace mask from persistent property persist.sdb.trace_mask
     // give up if the property is not set or cannot be parsed
 
     if ((p_trace == NULL ) && !is_enable_sdbd_log()) {
         return;
+    } else {
+        free(p_trace);
     }
 
-    if (p_path)
+    if (p_path) {
         snprintf(path_folder, sizeof(path_folder), "%s", p_path);
-    else if (g_capabilities.log_path[0] != '\0')
+        free(p_path);
+    } else if (g_capabilities.log_path[0] != '\0')
         snprintf(path_folder, sizeof(path_folder), "%s", g_capabilities.log_path);
     else
         return;