summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Huerner <ingo.huerner@xse.de>2015-01-08 13:19:20 +0100
committerIngo Huerner <ingo.huerner@xse.de>2015-01-08 13:19:20 +0100
commite026de7ddd7ef60abb5213f046db20cf7dffcb51 (patch)
treeb3244c3df3b6b901c7b962b0f542228eee86c90b
parent2fc0d0f76225e8c318a5c7e9995ceda8201ec1f7 (diff)
downloadpersistence-client-library-e026de7ddd7ef60abb5213f046db20cf7dffcb51.tar.gz
Removed compiler warnings; added check for shared data if application is allowed to modify
-rw-r--r--include/persistence_client_library_error_def.h2
-rw-r--r--include/persistence_client_library_key.h2
-rw-r--r--src/persistence_client_library.c1
-rw-r--r--src/persistence_client_library_data_organization.h2
-rw-r--r--src/persistence_client_library_dbus_service.c8
-rw-r--r--src/persistence_client_library_file.c6
-rw-r--r--src/persistence_client_library_key.c12
-rw-r--r--src/rbtree.c2
-rw-r--r--test/data/PAS_data.tar.gzbin6949 -> 7018 bytes
-rw-r--r--test/persistence_client_library_dbus_test.c8
-rw-r--r--test/persistence_client_library_test.c53
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<interval)&&(TRUE==dbus_timeout_get_enabled(timeout)))
@@ -517,6 +517,10 @@ int mainLoop(DBusObjectPathVTable vtable, DBusObjectPathVTable vtable2,
DBusConnection* conn = (DBusConnection*)userData;
dbus_error_init(&err);
+#if USE_PASINTERFACE != 1
+ (void)vtable;
+#endif
+
if (dbus_error_is_set(&err))
{
DLT_LOG(gPclDLTContext, DLT_LOG_ERROR, DLT_STRING("mainLoop - Con Err:"), DLT_STRING(err.message) );
diff --git a/src/persistence_client_library_file.c b/src/persistence_client_library_file.c
index a93fa8d..49bb5b3 100644
--- a/src/persistence_client_library_file.c
+++ b/src/persistence_client_library_file.c
@@ -173,6 +173,10 @@ void* pclFileMapData(void* addr, long size, long offset, int fd)
void* ptr = 0;
#if USE_FILECACHE
+ (void)addr;
+ (void)size;
+ (void)offset;
+ (void)fd;
DLT_LOG(gPclDLTContext, DLT_LOG_WARN, DLT_STRING("fileMapData not supported when using file cache"));
#else
//DLT_LOG(gDLTContext, DLT_LOG_INFO, DLT_STRING("pclFileMapData fd: "), DLT_INT(fd));
@@ -409,7 +413,7 @@ int pclFileOpen(unsigned int ldbid, const char* resource_id, unsigned int user_n
//
if(dbContext.configKey.type == PersistenceResourceType_file)
{
- if(user_no == PCL_USER_DEFAULTDATA)
+ if(user_no == (unsigned int)PCL_USER_DEFAULTDATA)
{
handle = pclFileOpenDefaultData(&dbContext, resource_id);
set_file_user_id(handle, PCL_USER_DEFAULTDATA);
diff --git a/src/persistence_client_library_key.c b/src/persistence_client_library_key.c
index 3834a71..2a67839 100644
--- a/src/persistence_client_library_key.c
+++ b/src/persistence_client_library_key.c
@@ -495,9 +495,17 @@ int pclKeyWriteData(unsigned int ldbid, const char* resource_id, unsigned int us
if(dbContext.configKey.permission != PersistencePermission_ReadOnly) // don't write to a read only resource
{
// store data
- if( dbContext.configKey.storage < PersistenceStorage_LastEntry) // check if store policy is valid
+ if(dbContext.configKey.storage < PersistenceStorage_LastEntry) // check if store policy is valid
{
- data_size = persistence_set_data(dbPath, dbKey, resource_id, &dbContext, buffer, buffer_size);
+ if( (dbContext.configKey.storage == PersistenceStorage_shared)
+ && (0 != strncmp(dbContext.configKey.reponsible, gAppId, MaxAppNameLen) ) )
+ {
+ data_size = EPERS_NOT_RESP_APP;
+ }
+ else
+ {
+ data_size = persistence_set_data(dbPath, dbKey, resource_id, &dbContext, buffer, buffer_size);
+ }
}
else
{
diff --git a/src/rbtree.c b/src/rbtree.c
index 7107979..d3496ed 100644
--- a/src/rbtree.c
+++ b/src/rbtree.c
@@ -255,7 +255,7 @@ int jsw_rbinsert ( jsw_rbtree_t *tree, void *data )
}
else {
- jsw_rbnode_t head = {0}; /* False tree root */
+ jsw_rbnode_t head = {0, NULL, {NULL, NULL} }; /* False tree root */
jsw_rbnode_t *g, *t; /* Grandparent & parent */
jsw_rbnode_t *p, *q; /* Iterator & parent */
int dir = 0, last = 0;
diff --git a/test/data/PAS_data.tar.gz b/test/data/PAS_data.tar.gz
index de372b5..46c5eca 100644
--- a/test/data/PAS_data.tar.gz
+++ b/test/data/PAS_data.tar.gz
Binary files differ
diff --git a/test/persistence_client_library_dbus_test.c b/test/persistence_client_library_dbus_test.c
index 2dbd5dc..dae3bc2 100644
--- a/test/persistence_client_library_dbus_test.c
+++ b/test/persistence_client_library_dbus_test.c
@@ -55,18 +55,18 @@ int main(int argc, char *argv[])
printf("pclInitLibrary: %d\n", ret);
printf("Press a key to end application\n");
- ret = pclKeyHandleOpen(0xFF, "posHandle/last_position", 0, 0);
+ ret = pclKeyHandleOpen(PCL_LDBID_LOCAL, "posHandle/last_position", 0, 0);
printf("Register for change notification\n");
ret = pclKeyRegisterNotifyOnChange(0x20, "links/last_link2", 2/*user_no*/, 1/*seat_no*/, &myChangeCallback);
ret = pclKeyRegisterNotifyOnChange(0x20, "links/last_link3", 3/*user_no*/, 2/*seat_no*/, &myChangeCallback);
ret = pclKeyRegisterNotifyOnChange(0x20, "links/last_link4", 4/*user_no*/, 1/*seat_no*/, &myChangeCallback);
- ret = pclKeyRegisterNotifyOnChange(0xFF, "69", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback);
+ ret = pclKeyRegisterNotifyOnChange(PCL_LDBID_LOCAL, "69", 1/*user_no*/, 2/*seat_no*/, &myChangeCallback);
printf("Reg => 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