Proxy samples: Add support for running with security
authorVeeraj Khokale <veeraj.sk@samsung.com>
Thu, 23 Mar 2017 06:52:09 +0000 (12:22 +0530)
committerUze Choi <uzchoi@samsung.com>
Thu, 13 Apr 2017 10:44:41 +0000 (10:44 +0000)
1. Add Persistent Storage Handlers in proxy_main.c
   and proxy_client.c.
2. Add svr db files in coap proxy samples directory and
   use them in proxy_client and proxy_main for security
   credentials and ACLs.
3. Include OC_SECURE flag while initiating proxy request
   from client.

Change-Id: Iec7ea2f3a30c2777b86064e3726db25587176c21
Signed-off-by: Veeraj Khokale <veeraj.sk@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/18129
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/coap-http-proxy/samples/SConscript
service/coap-http-proxy/samples/oic_svr_db_client_devowner.dat [new file with mode: 0644]
service/coap-http-proxy/samples/oic_svr_db_client_devowner.json [new file with mode: 0644]
service/coap-http-proxy/samples/oic_svr_db_server.dat [new file with mode: 0644]
service/coap-http-proxy/samples/oic_svr_db_server.json [new file with mode: 0644]
service/coap-http-proxy/samples/proxy_client.c
service/coap-http-proxy/samples/proxy_main.c

index ec0a71c..e062d9b 100644 (file)
@@ -56,3 +56,11 @@ proxy_client = proxy_sample_app_env.Program('proxy_client', 'proxy_client.c')
 Alias("coap_http_proxy", [proxy_server])
 
 env.AppendTarget('coap_http_proxy')
+
+if env.get('SECURED') == '1':
+    proxy_sample_src_dir = proxy_sample_app_env.get('SRC_DIR') + '/service/coap-http-proxy/samples/'
+    proxy_sample_build_dir = proxy_sample_app_env.get('BUILD_DIR') +'/service/coap-http-proxy/samples'
+    proxy_sample_app_env.Alias("install", proxy_sample_app_env.Install( proxy_sample_build_dir,
+        proxy_sample_src_dir + 'oic_svr_db_server.dat'))
+    proxy_sample_app_env.Alias("install", proxy_sample_app_env.Install( proxy_sample_build_dir,
+        proxy_sample_src_dir + 'oic_svr_db_client_devowner.dat'))
\ No newline at end of file
diff --git a/service/coap-http-proxy/samples/oic_svr_db_client_devowner.dat b/service/coap-http-proxy/samples/oic_svr_db_client_devowner.dat
new file mode 100644 (file)
index 0000000..184e10f
Binary files /dev/null and b/service/coap-http-proxy/samples/oic_svr_db_client_devowner.dat differ
diff --git a/service/coap-http-proxy/samples/oic_svr_db_client_devowner.json b/service/coap-http-proxy/samples/oic_svr_db_client_devowner.json
new file mode 100644 (file)
index 0000000..a5e4772
--- /dev/null
@@ -0,0 +1,90 @@
+{\r
+    "acl": {\r
+        "aclist": {\r
+            "aces": [\r
+                {\r
+                    "subjectuuid": "*",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/oic/res",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.res"],\r
+                            "if": ["oic.if.ll"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/d",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.d"],\r
+                            "if": ["oic.if.baseline", "oic.if.r"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/p",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.p"],\r
+                            "if": ["oic.if.baseline", "oic.if.r"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/sec/acl",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.acl"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 2\r
+                },\r
+                {\r
+                    "subjectuuid": "*",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/oic/sec/doxm",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.doxm"],\r
+                            "if": ["oic.if.baseline"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/sec/pstat",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.pstat"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 2\r
+                }\r
+            ]\r
+        },\r
+        "rowneruuid" : "32323232-3232-3232-3232-323232323232"\r
+    },\r
+    "pstat": {\r
+        "dos": {"s": 3, "p": false},\r
+        "isop": true,\r
+        "deviceuuid": "32323232-3232-3232-3232-323232323232",\r
+        "rowneruuid": "32323232-3232-3232-3232-323232323232",\r
+        "cm": 0,\r
+        "tm": 0,\r
+        "om": 4,\r
+        "sm": 4\r
+        },\r
+    "doxm": {\r
+        "oxms": [0],\r
+        "oxmsel": 0,\r
+        "sct": 1,\r
+        "owned": true,\r
+        "deviceuuid": "32323232-3232-3232-3232-323232323232",\r
+        "devowneruuid": "32323232-3232-3232-3232-323232323232",\r
+        "rowneruuid": "32323232-3232-3232-3232-323232323232"\r
+    },\r
+    "cred": {\r
+        "creds": [\r
+            {\r
+                "credid": 1,\r
+                "subjectuuid": "31313131-3131-3131-3131-313131313131",\r
+                "credtype": 1,\r
+                "privatedata": {\r
+                    "data": "AAAAAAAAAAAAAAAA",\r
+                    "encoding": "oic.sec.encoding.raw"\r
+                }\r
+            }\r
+        ],\r
+        "rowneruuid": "32323232-3232-3232-3232-323232323232"\r
+    }\r
+}\r
diff --git a/service/coap-http-proxy/samples/oic_svr_db_server.dat b/service/coap-http-proxy/samples/oic_svr_db_server.dat
new file mode 100644 (file)
index 0000000..ad154f7
Binary files /dev/null and b/service/coap-http-proxy/samples/oic_svr_db_server.dat differ
diff --git a/service/coap-http-proxy/samples/oic_svr_db_server.json b/service/coap-http-proxy/samples/oic_svr_db_server.json
new file mode 100644 (file)
index 0000000..c985873
--- /dev/null
@@ -0,0 +1,137 @@
+{\r
+    "acl": {\r
+        "aclist": {\r
+            "aces": [\r
+                {\r
+                    "subjectuuid": "*",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/oic/res",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.res"],\r
+                            "if": ["oic.if.ll"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/d",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.d"],\r
+                            "if": ["oic.if.baseline", "oic.if.r"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/p",\r
+                            "rel": "",\r
+                            "rt": ["oic.wk.p"],\r
+                            "if": ["oic.if.baseline", "oic.if.r"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/sec/acl",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.acl"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 2\r
+                },\r
+                {\r
+                    "subjectuuid": "*",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/oic/sec/doxm",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.doxm"],\r
+                            "if": ["oic.if.baseline"]\r
+                        },\r
+                        {\r
+                            "href": "/oic/sec/pstat",\r
+                            "rel": "",\r
+                            "rt": ["oic.r.pstat"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 2\r
+                },\r
+                {\r
+                    "subjectuuid": "32323232-3232-3232-3232-323232323232",\r
+                    "resources": [\r
+                        {\r
+                            "href": "*",\r
+                            "rel": "",\r
+                            "rt": ["*"],\r
+                            "if": ["*"]\r
+                        }\r
+                    ],\r
+                    "permission": 7\r
+                },\r
+                {\r
+                    "subjectuuid": "31393139-3139-3139-3139-313931393139",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/a/led",\r
+                            "rel": "",\r
+                            "rt": ["oic.core"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 7\r
+                },\r
+                {\r
+                    "subjectuuid": "37373737-3737-3737-3737-373737373737",\r
+                    "resources": [\r
+                        {\r
+                            "href": "/a/led",\r
+                            "rel": "",\r
+                            "rt": ["oic.core"],\r
+                            "if": ["oic.if.baseline"]\r
+                        }\r
+                    ],\r
+                    "permission": 6\r
+                }\r
+            ]\r
+        },\r
+        "rowneruuid" : "31313131-3131-3131-3131-313131313131"\r
+    },\r
+    "pstat": {\r
+        "dos": {"s": 3, "p": false},\r
+        "isop": true,\r
+        "deviceuuid": "31313131-3131-3131-3131-313131313131",\r
+        "rowneruuid": "31313131-3131-3131-3131-313131313131",\r
+        "cm": 0,\r
+        "tm": 0,\r
+        "om": 4,\r
+        "sm": 4\r
+        },\r
+    "doxm": {\r
+        "oxms": [0],\r
+        "oxmsel": 0,\r
+        "sct": 1,\r
+        "owned": true,\r
+        "deviceuuid": "31313131-3131-3131-3131-313131313131",\r
+        "devowneruuid": "32323232-3232-3232-3232-323232323232",\r
+        "rowneruuid": "31313131-3131-3131-3131-313131313131"\r
+    },\r
+    "cred": {\r
+        "creds": [\r
+            {\r
+                "credid": 1,\r
+                "subjectuuid": "32323232-3232-3232-3232-323232323232",\r
+                "credtype": 1,\r
+                "period": "20150630T060000/20990920T220000",\r
+                "privatedata": {\r
+                    "data": "AAAAAAAAAAAAAAAA",\r
+                    "encoding": "oic.sec.encoding.raw"\r
+                }\r
+            },\r
+            {\r
+                "credid": 2,\r
+                "subjectuuid": "31393139-3139-3139-3139-313931393139",\r
+                "credtype": 1,\r
+                "period": "20150630T060000/20990920T220000",\r
+                "privatedata": {\r
+                    "data": "BBBBBBBBBBBBBBBB",\r
+                    "encoding": "oic.sec.encoding.raw"\r
+                }\r
+            }\r
+        ],\r
+        "rowneruuid": "32323232-3232-3232-3232-323232323232"\r
+    }\r
+}\r
index 520d092..e876ced 100644 (file)
@@ -57,6 +57,8 @@ OCConnectivityType connType;
 // Will be taken as user input
 static char httpResource[MAX_HTTP_URI_LENGTH];
 
+static char CRED_FILE_DEVOWNER[] = "oic_svr_db_client_devowner.dat";
+
 int gQuitFlag = 0;
 /* SIGINT handler: set gQuitFlag to 1 for graceful termination */
 void handleSigInt(int signum)
@@ -282,6 +284,12 @@ OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle handle,
             return OC_STACK_KEEP_TRANSACTION;
         }
 
+        if (resource->secure)
+        {
+            serverAddr.flags |= OC_SECURE;
+            serverAddr.port = resource->port;
+        }
+
         switch (testCase)
         {
             case TEST_DISCOVER_REQ:
@@ -321,8 +329,23 @@ int InitDiscovery()
     return ret;
 }
 
+FILE *client_fopen_devowner(const char *path, const char *mode)
+{
+    if (0 == strcmp(path, OC_SECURITY_DB_DAT_FILE_NAME))
+    {
+        return fopen(CRED_FILE_DEVOWNER, mode);
+    }
+    else
+    {
+        return fopen(path, mode);
+    }
+}
+
 int main(int argc, char* argv[])
 {
+    OCPersistentStorage ps = { client_fopen_devowner, fread, fwrite, fclose, unlink };
+    OCRegisterPersistentStorageHandler(&ps);
+
     int opt;
     while ((opt = getopt(argc, argv, "t:p:")) != -1)
     {
@@ -352,7 +375,7 @@ int main(int argc, char* argv[])
         return -1;
     }
 
-    if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)
+    if (OCInit1(OC_CLIENT_SERVER, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)
     {
         OIC_LOG(ERROR, TAG, "OCStack initialization error");
         return -1;
index 3f32f4b..a377196 100644 (file)
 #include <unistd.h>
 #endif
 #include <stdlib.h>
+#include <string.h>
 
 static int g_quitFlag = 0;
 static int g_secureFlag = 0;
 
+static char CRED_FILE[] = "oic_svr_db_server.dat";
+
 void handleSigInt(int signum);
 
 static void PrintUsage()
@@ -37,11 +40,25 @@ static void PrintUsage()
     printf("-s 1 : Launch proxy in secure mode.\n");
 }
 
+FILE* server_fopen(const char *path, const char *mode)
+{
+    if (0 == strcmp(path, OC_SECURITY_DB_DAT_FILE_NAME))
+    {
+        return fopen(CRED_FILE, mode);
+    }
+
+    return fopen(path, mode);
+}
+
 /*
 * This method is an entry point of CoAP-HTTP Proxy.
 */
 int main(int argc, char* argv[])
 {
+    // Initialize Persistent Storage for SVR database
+    OCPersistentStorage ps = { server_fopen, fread, fwrite, fclose, unlink };
+    OCRegisterPersistentStorageHandler(&ps);
+
     int opt = 0;
     while ((opt = getopt(argc, argv, "s:")) != -1)
     {