int _media_util_check_ignore_file(const char *path, bool *ignore);
int _media_util_check_ignore_dir(const char *dir_path, bool *ignore);
int _media_content_replace_path_in_condition(const char *condition, char *replace_condition);
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition);
int _media_content_replace_path(const char *path, char *replace_path);
int _media_content_rollback_path(const char *path, char *replace_path);
int _media_util_check_ignore_file(const char *path, bool *ignore);
int _media_util_check_ignore_dir(const char *dir_path, bool *ignore);
int _media_content_replace_path_in_condition(const char *condition, char *replace_condition);
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition);
int _media_content_replace_path(const char *path, char *replace_path);
int _media_content_rollback_path(const char *path, char *replace_path);
if (_filter) {
if (STRING_VALID(_filter->condition)) {
- *condition = strdup(_filter->condition);
+ char new_condition[MAX_QUERY_SIZE] = {0, };
+ memset(new_condition, 0, MAX_QUERY_SIZE);
+ ret = _media_content_rollback_path_in_condition(_filter->condition, new_condition);
+ media_content_retvm_if(!STRING_VALID(new_condition), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
+
+ *condition = strdup(new_condition);
media_content_retvm_if(*condition == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
} else {
*condition = NULL;
return MEDIA_CONTENT_ERROR_NONE;
}
+int _media_content_rollback_path_in_condition(const char *condition, char *replace_condition)
+{
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ char *old_path = NULL;
+
+ ret = storage_get_root_directory(STORAGE_TYPE_INTERNAL, &old_path);
+ if (ret != STORAGE_ERROR_NONE) {
+ media_content_error("storage_get_directory failed");
+ return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+ }
+
+ media_content_sec_debug("Old condition[%s]", condition);
+ if (((strstr(condition, "PATH") != NULL) || (strstr(condition, "path") != NULL)) && (strstr(condition, tzplatform_getenv(TZ_USER_CONTENT)) != NULL)) {
+ char *cond = strdup(condition);
+ char *repl_cond_ptr = replace_condition;
+ char *cond_ptr = cond;
+
+ if (cond_ptr == NULL) {
+ SAFE_FREE(old_path);
+ media_content_error("memory allocation failed");
+ return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+ }
+ while(*cond_ptr != '\0') {
+ if (strlen(cond_ptr) < strlen(tzplatform_getenv(TZ_USER_CONTENT))) {
+ memcpy(repl_cond_ptr, cond_ptr, strlen(cond_ptr));
+ break;
+ }
+ /* replace path only and keep other condition */
+ if (memcmp(cond_ptr, tzplatform_getenv(TZ_USER_CONTENT), strlen(tzplatform_getenv(TZ_USER_CONTENT))) == 0) {
+ memcpy(repl_cond_ptr, old_path, strlen(old_path));
+ cond_ptr += strlen(tzplatform_getenv(TZ_USER_CONTENT));
+ repl_cond_ptr += strlen(old_path);
+ } else {
+ *repl_cond_ptr = *cond_ptr;
+ cond_ptr++;
+ repl_cond_ptr++;
+ }
+ }
+ SAFE_FREE(cond);
+ } else {
+ snprintf(replace_condition, MAX_QUERY_SIZE, "%s", condition);
+ }
+
+ SAFE_FREE(old_path);
+
+ if (!STRING_VALID(replace_condition)) {
+ media_content_error("replace failed");
+ return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+ }
+
+ media_content_sec_debug("repl cond[%s]", replace_condition);
+
+ return MEDIA_CONTENT_ERROR_NONE;
+}
+
int _media_content_replace_path(const char *path, char *replace_path)
{
int ret = MEDIA_CONTENT_ERROR_NONE;