From bbab22402a4541a3601940e925ce566731f0a4a9 Mon Sep 17 00:00:00 2001 From: Veeraj Khokale Date: Thu, 23 Mar 2017 12:22:09 +0530 Subject: [PATCH] Proxy samples: Add support for running with security 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 Reviewed-on: https://gerrit.iotivity.org/gerrit/18797 Reviewed-by: Uze Choi Tested-by: jenkins-iotivity --- service/coap-http-proxy/samples/SConscript | 8 ++ .../samples/oic_svr_db_client_devowner.dat | Bin 0 -> 1112 bytes .../samples/oic_svr_db_client_devowner.json | 90 ++++++++++++++ .../coap-http-proxy/samples/oic_svr_db_server.dat | Bin 0 -> 1676 bytes .../coap-http-proxy/samples/oic_svr_db_server.json | 137 +++++++++++++++++++++ service/coap-http-proxy/samples/proxy_client.c | 25 +++- service/coap-http-proxy/samples/proxy_main.c | 17 +++ 7 files changed, 276 insertions(+), 1 deletion(-) create mode 100644 service/coap-http-proxy/samples/oic_svr_db_client_devowner.dat create mode 100644 service/coap-http-proxy/samples/oic_svr_db_client_devowner.json create mode 100644 service/coap-http-proxy/samples/oic_svr_db_server.dat create mode 100644 service/coap-http-proxy/samples/oic_svr_db_server.json diff --git a/service/coap-http-proxy/samples/SConscript b/service/coap-http-proxy/samples/SConscript index ec0a71c..e062d9b 100644 --- a/service/coap-http-proxy/samples/SConscript +++ b/service/coap-http-proxy/samples/SConscript @@ -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 index 0000000000000000000000000000000000000000..184e10f9520c3d3e7ad4e20eb0acd04a3160438f GIT binary patch literal 1112 zcmbtTQBuM%5C!GWYxw01Wz-XR13&T4G`qDaY12tkil1e?h}bVL!703eXOM5qrob@O z4v5V(ubbW1-M2}WoN@VZc2P$Tg|V-|IGXv}#1vtI+!loZb|o|#RcPmVsUg-F#Umy7 z$gPIjR*Cx#%1J<`h$=y*hyp3OM)}wfB2NGck2m4qg6C=z95RDaWayoatbcIxeQtg% zSNgmL`N-*`Klti&K$feuo!)0na@46XMyTwpvk~(~SGxN@s9Cz}h7P>hm7(EgJ8o_) zvqYXyJ9N<4UF`k(60OP%HEq-E^7f_~LxR?{^&Rd3`t0NKor5w9X3kmu1;VI&74ozf zTKB4S5SnywQu0F*fjT$-SQ4137ZITBal>sNNi3`qz^UMPylCkNf9%sq+WbxE-upGU z^9AG28VOBRM}z|U`?t+)<8?EJ1g&Z7i-~EUbL>xYEvC#OFv}J(W?X^Do-7?CckF}h WLZDd*6mx&qdj6x7s`%|5t-k^Lv4=JQ literal 0 HcmV?d00001 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 index 0000000..a5e4772 --- /dev/null +++ b/service/coap-http-proxy/samples/oic_svr_db_client_devowner.json @@ -0,0 +1,90 @@ +{ + "acl": { + "aclist": { + "aces": [ + { + "subjectuuid": "*", + "resources": [ + { + "href": "/oic/res", + "rel": "", + "rt": ["oic.wk.res"], + "if": ["oic.if.ll"] + }, + { + "href": "/oic/d", + "rel": "", + "rt": ["oic.wk.d"], + "if": ["oic.if.baseline", "oic.if.r"] + }, + { + "href": "/oic/p", + "rel": "", + "rt": ["oic.wk.p"], + "if": ["oic.if.baseline", "oic.if.r"] + }, + { + "href": "/oic/sec/acl", + "rel": "", + "rt": ["oic.r.acl"], + "if": ["oic.if.baseline"] + } + ], + "permission": 2 + }, + { + "subjectuuid": "*", + "resources": [ + { + "href": "/oic/sec/doxm", + "rel": "", + "rt": ["oic.r.doxm"], + "if": ["oic.if.baseline"] + }, + { + "href": "/oic/sec/pstat", + "rel": "", + "rt": ["oic.r.pstat"], + "if": ["oic.if.baseline"] + } + ], + "permission": 2 + } + ] + }, + "rowneruuid" : "32323232-3232-3232-3232-323232323232" + }, + "pstat": { + "dos": {"s": 3, "p": false}, + "isop": true, + "deviceuuid": "32323232-3232-3232-3232-323232323232", + "rowneruuid": "32323232-3232-3232-3232-323232323232", + "cm": 0, + "tm": 0, + "om": 4, + "sm": 4 + }, + "doxm": { + "oxms": [0], + "oxmsel": 0, + "sct": 1, + "owned": true, + "deviceuuid": "32323232-3232-3232-3232-323232323232", + "devowneruuid": "32323232-3232-3232-3232-323232323232", + "rowneruuid": "32323232-3232-3232-3232-323232323232" + }, + "cred": { + "creds": [ + { + "credid": 1, + "subjectuuid": "31313131-3131-3131-3131-313131313131", + "credtype": 1, + "privatedata": { + "data": "AAAAAAAAAAAAAAAA", + "encoding": "oic.sec.encoding.raw" + } + } + ], + "rowneruuid": "32323232-3232-3232-3232-323232323232" + } +} 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 index 0000000000000000000000000000000000000000..ad154f7dbfff33e0f4adbd1bb39b4b69cabf4c9c GIT binary patch literal 1676 zcmb_c!BX2W5KVw-Kcg2;nThS#15A$X7jWPJx60D0mLpppNg?5wO#30F>7`%L8(+bn zz!|hM3BkdGhgKTzdL=!*-IZ21lu&uGpRKsl!q}gTP%uA!P0TdSf!gU*FftGtjGAgU z^L@oK4Ll2#prIR0wO!=yKbTDdGzDJ>GzAZ&q#ESc8o)h(;qvThIdhAb>S=LG3`kLe zpLAfogRQo)RadO^yas6K;=>)hcRE1J`P!uSta$~x5XJ~q?zJXjS;tju_GfBdY_g#P zZ?-Yi*m8rdj3pMq6HJE=YP${H>fih@iR(T@)e!5s=fhmoevkoDJLw3?pqYY?FH+zr zM#&hz;VWW2w?n~05=wYJeyTKd$^Q=dN#gquRYTM>$;p2s|B!1nD?wuo__#+dz7fXV z6gY(a?F$C}XwPSVC{yN|n0->+F=147pVFe2TKB2qAT`CoyU5?VKMb$s`RxrVv*>YD zAbZqM+XoDm-RBH01%>WGO9$A_Q->?~uGsuD(_UB)%-vje(f_*w{4vYl9JOHm?YFF3 ziDZbhR~7Upl@^!80wb1OXHZhbMET8PnYu?MSPul6%owgY{oH8WJtji2`KLG<9Yx1U ybQT>)u7zsecure) + { + 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; diff --git a/service/coap-http-proxy/samples/proxy_main.c b/service/coap-http-proxy/samples/proxy_main.c index 3f32f4b..a377196 100644 --- a/service/coap-http-proxy/samples/proxy_main.c +++ b/service/coap-http-proxy/samples/proxy_main.c @@ -24,10 +24,13 @@ #include #endif #include +#include 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) { -- 2.7.4