From e026de7ddd7ef60abb5213f046db20cf7dffcb51 Mon Sep 17 00:00:00 2001 From: Ingo Huerner Date: Thu, 8 Jan 2015 13:19:20 +0100 Subject: Removed compiler warnings; added check for shared data if application is allowed to modify --- include/persistence_client_library_error_def.h | 2 + include/persistence_client_library_key.h | 2 +- src/persistence_client_library.c | 1 + src/persistence_client_library_data_organization.h | 2 +- src/persistence_client_library_dbus_service.c | 8 +++- src/persistence_client_library_file.c | 6 ++- src/persistence_client_library_key.c | 12 ++++- src/rbtree.c | 2 +- test/data/PAS_data.tar.gz | Bin 6949 -> 7018 bytes test/persistence_client_library_dbus_test.c | 8 ++-- test/persistence_client_library_test.c | 53 +++++++++++++++++++-- 11 files changed, 81 insertions(+), 15 deletions(-) diff --git a/include/persistence_client_library_error_def.h b/include/persistence_client_library_error_def.h index 7677e51..7a9d80d 100644 --- a/include/persistence_client_library_error_def.h +++ b/include/persistence_client_library_error_def.h @@ -119,6 +119,8 @@ extern "C" { #define EPERS_SHUTDOWN_NO_PERMIT (-42) /// not a trusted application,no access to persistence data #define EPERS_SHUTDOWN_NO_TRUSTED (-43) +/// not the responsible application to modify shared data +#define EPERS_NOT_RESP_APP (-44) /// requested handle is not valid. \since PCL v7.0.3 #define EPERS_INVALID_HANDLE (-1000) diff --git a/include/persistence_client_library_key.h b/include/persistence_client_library_key.h index e0a8889..338e3e9 100644 --- a/include/persistence_client_library_key.h +++ b/include/persistence_client_library_key.h @@ -298,7 +298,7 @@ int pclKeyUnRegisterNotifyOnChange( unsigned int ldbid, const char * resource_ * @return positive value (0 or greater): the bytes written; * On error a negative value will be returned with the following error codes: * ::EPERS_LOCKFS ::EPERS_BADPOL ::EPERS_BUFLIMIT ::EPERS_DB_VALUE_SIZE ::EPERS_DB_KEY_SIZE - * ::EPERS_NOTIFY_SIG ::EPERS_RESOURCE_READ_ONLY + * ::EPERS_NOTIFY_SIG ::EPERS_RESOURCE_READ_ONLY ::EPERS_NOT_RESP_APP */ int pclKeyWriteData(unsigned int ldbid, const char* resource_id, unsigned int user_no, unsigned int seat_no, unsigned char* buffer, int buffer_size); diff --git a/src/persistence_client_library.c b/src/persistence_client_library.c index f0f02fb..174c081 100644 --- a/src/persistence_client_library.c +++ b/src/persistence_client_library.c @@ -64,6 +64,7 @@ static int gAppCheckFlag = -1; int customAsyncInitClbk(int errcode) { + (void)errcode; printf("Dummy async init Callback\n"); return 1; diff --git a/src/persistence_client_library_data_organization.h b/src/persistence_client_library_data_organization.h index df61287..85c0d4d 100644 --- a/src/persistence_client_library_data_organization.h +++ b/src/persistence_client_library_data_organization.h @@ -47,7 +47,7 @@ typedef struct _PersistenceDbContext_s /// lofical database id unsigned int ldbid; /// user number - unsigned int user_no; + int user_no; /// seat number unsigned int seat_no; } PersistenceDbContext_s; diff --git a/src/persistence_client_library_dbus_service.c b/src/persistence_client_library_dbus_service.c index 4b487f3..d87e606 100644 --- a/src/persistence_client_library_dbus_service.c +++ b/src/persistence_client_library_dbus_service.c @@ -352,7 +352,7 @@ static dbus_bool_t addWatch(DBusWatch *watch, void *data) dbus_bool_t result = FALSE; (void)data; - if (ARRAY_SIZE(gPollInfo.fds)>gPollInfo.nfds) + if (ARRAY_SIZE(gPollInfo.fds) > (unsigned int)(gPollInfo.nfds)) { int flags = dbus_watch_get_flags(watch); @@ -418,7 +418,7 @@ static dbus_bool_t addTimeout(DBusTimeout *timeout, void *data) (void)data; dbus_bool_t ret = FALSE; - if (ARRAY_SIZE(gPollInfo.fds)>gPollInfo.nfds) + if(ARRAY_SIZE(gPollInfo.fds) > (unsigned int)(gPollInfo.nfds)) { const int interval = dbus_timeout_get_interval(timeout); if ((0 69: %d\n", ret); - ret = pclKeyRegisterNotifyOnChange(0xFF, "70", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback); + ret = pclKeyRegisterNotifyOnChange(PCL_LDBID_LOCAL, "70", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback); printf("Reg => 70: %d\n", ret); - ret = pclKeyRegisterNotifyOnChange(0xFF, "key_70", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback); + ret = pclKeyRegisterNotifyOnChange(PCL_LDBID_LOCAL, "key_70", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback); printf("Reg => key_70: %d\n", ret); diff --git a/test/persistence_client_library_test.c b/test/persistence_client_library_test.c index e5e3b99..db3a1e8 100644 --- a/test/persistence_client_library_test.c +++ b/test/persistence_client_library_test.c @@ -210,7 +210,7 @@ START_TEST (test_GetDataHandle) locTime = localtime(&t); - snprintf(sysTimeBuffer, 128, "TimeAndData: \"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon, (locTime->tm_year+1900), + snprintf(sysTimeBuffer, 128, "TimeAndData: \"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon+1, (locTime->tm_year+1900), locTime->tm_hour, locTime->tm_min, locTime->tm_sec); @@ -336,7 +336,7 @@ START_TEST(test_SetData) locTime = localtime(&t); // write data - snprintf(sysTimeBuffer, 128, "\"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon, (locTime->tm_year+1900), + snprintf(sysTimeBuffer, 128, "\"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon+1, (locTime->tm_year+1900), locTime->tm_hour, locTime->tm_min, locTime->tm_sec); /** @@ -454,7 +454,7 @@ START_TEST(test_SetDataNoPRCT) locTime = localtime(&t); - snprintf(sysTimeBuffer, 128, "TimeAndData: \"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon, (locTime->tm_year+1900), + snprintf(sysTimeBuffer, 128, "TimeAndData: \"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon+1, (locTime->tm_year+1900), locTime->tm_hour, locTime->tm_min, locTime->tm_sec); /** @@ -1585,6 +1585,47 @@ START_TEST(test_DbusInterface) END_TEST +START_TEST(test_SharedAccess) +{ + int ret = 0; + unsigned int shutdownReg = PCL_SHUTDOWN_TYPE_FAST | PCL_SHUTDOWN_TYPE_NORMAL; + unsigned char buffer[256] = {0}; + char sysTimeBuffer[256]; + struct tm *locTime; + time_t t = time(0); + + locTime = localtime(&t); + + // write data + snprintf(sysTimeBuffer, 128, "\"%s %d.%d.%d - %d:%.2d:%.2d Uhr\"", dayOfWeek[locTime->tm_wday], locTime->tm_mday, locTime->tm_mon+1, (locTime->tm_year+1900), + locTime->tm_hour, locTime->tm_min, locTime->tm_sec); + + (void)pclInitLibrary(gTheAppId, shutdownReg); // use the app id, the resource is registered for + + ret = pclKeyWriteData(PCL_LDBID_PUBLIC, "aSharedResource", 1, 1, (unsigned char*)sysTimeBuffer, strlen(sysTimeBuffer)); + fail_unless(ret == (int)strlen(sysTimeBuffer), "Failed to write shared data "); + + ret = pclKeyReadData(PCL_LDBID_PUBLIC, "aSharedResource", 1, 1, buffer, 256); + fail_unless(ret == (int)strlen(sysTimeBuffer), "Failed to read shared data "); + + pclDeinitLibrary(); + + // ---------------------------------------------- + + (void)pclInitLibrary("node-health-monitor", shutdownReg); // now use a different app id, which is not able to write this resource + + ret = pclKeyWriteData(PCL_LDBID_PUBLIC, "aSharedResource", 1, 1, (unsigned char*)"This is a test Buffer", strlen("This is a test Buffer")); + fail_unless(ret == EPERS_NOT_RESP_APP, "Able to write shared data, but should not!!"); + + ret = pclKeyReadData(PCL_LDBID_PUBLIC, "aSharedResource", 1, 1, buffer, 256); + fail_unless(ret == (int)strlen(sysTimeBuffer), "Failed to read shared data "); + fail_unless(strncmp((char*)buffer, sysTimeBuffer, strlen((char*)sysTimeBuffer)) == 0, "Buffer not correctly read"); + + pclDeinitLibrary(); +} +END_TEST + + static Suite * persistencyClientLib_suite() { const char* testSuiteName = "Persistency_client_library"; @@ -1689,6 +1730,9 @@ static Suite * persistencyClientLib_suite() TCase * tc_VerifyROnly = tcase_create("VerifyROnly"); tcase_add_test(tc_VerifyROnly, test_VerifyROnly); + TCase * tc_SharedAccess = tcase_create("SharedAccess"); + tcase_add_test(tc_SharedAccess, test_SharedAccess); + tcase_set_timeout(tc_SharedAccess, 2); suite_add_tcase(s, tc_persSetData); @@ -1753,6 +1797,9 @@ static Suite * persistencyClientLib_suite() suite_add_tcase(s, tc_DataFileConfDefault); tcase_add_checked_fixture(tc_DataFileConfDefault, data_setup, data_teardown); + + suite_add_tcase(s, tc_SharedAccess); + #if USE_APPCHECK suite_add_tcase(s, tc_ValidApplication); #endif -- cgit v1.2.1