static int __sync_process(char *req_key)
{
- int ret =0;
char info_file[PKG_STRING_LEN_MAX] = {'\0', };
int result = 0;
int check_cnt = 0;
- FILE *fp;
- char buffer[PKG_ARGC_MAX] = {'\0', };
snprintf(info_file, PKG_STRING_LEN_MAX, "%s/%s", PKG_TMP_PATH, req_key);
while(1)
DBUS_TYPE_STRING, &args,
DBUS_TYPE_STRING, &cookie,
DBUS_TYPE_INVALID)) {
- r = COMM_RET_ERROR;
+ r = -3;
ERR("dbus_message_append_args fail");
goto ERROR_CLEANUP;
}
- /* Send message */
+ /* Send message , timeout -1 = _DBUS_DEFAULT_TIMEOUT_VALUE (25 * 1000) 25 seconds*/
if (is_block == 1){
if(!dbus_connection_send_with_reply_and_block(cc->conn, msg,
- 10000, NULL)) {
+ -1, NULL)) {
ERR("try send msg to dbus by timeout");
sleep(1);
if(!dbus_connection_send_with_reply_and_block(cc->conn, msg,
- 10000, NULL)) {
- r = COMM_RET_ERROR;
+ -1, NULL)) {
+ r = -4;
ERR("dbus_connection_send_with_reply_and_block fail");
goto ERROR_CLEANUP;
}
}
} else {
if (!dbus_connection_send(cc->conn, msg, NULL)) {
- r = COMM_RET_ERROR;
+ r = -5;
ERR("dbus_connection_send fail");
goto ERROR_CLEANUP;
}
#ifndef NDEBUG
#ifdef USE_DLOG
+#undef LOG_TAG
+#ifndef LOG_TAG
#define LOG_TAG "PKGMGR"
+#endif /* LOG_TAG */
#include <dlog.h>
#define dbg(fmtstr, args...) \
do { SLOGI("[comm]%s:%d:%s(): " \
DBusConnection *conn;
};
-static int __validate_cb(void *data, int ncols, char **coltxt, char **colname);
-
-static int __validate_cb(void *data, int ncols, char **coltxt, char **colname)
-{
- int *p = (int*)data;
- *p = atoi(coltxt[0]);
- _LOGE("exist value is %d\n", *p);
- return 0;
-}
/* API */
API pkgmgr_installer *pkgmgr_installer_new(void)
#include <dlog.h>
-#define _LOGE(fmt, arg...) LOGE(fmt,##arg)
/**
* pkgmgr_installer is an opaque type for an object
#sbs-git:slp/pkgs/s/slp-pkgmgr pkgmgr 0.1.103 29b53909a5d6e8728429f0a188177eac691cb6ce
Name: pkgmgr
Summary: Packager Manager client library package
-Version: 0.2.105
+Version: 0.2.112
Release: 1
Group: System/Libraries
License: Apache License, Version 2.0
Source0: %{name}-%{version}.tar.gz
+Source1: pkgmgr_recovery.service
BuildRequires: cmake
BuildRequires: unzip
BuildRequires: gettext-tools
rm -rf %{buildroot}
%make_install
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/system/pkgmgr_recovery.service
+ln -s ../pkgmgr_recovery.service %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/pkgmgr_recovery.service
%post
/sbin/ldconfig
%posttrans
#init DB
+mkdir -p /usr/share/packages
+mkdir -p /opt/share/packages
+mkdir -p /opt/share/packages/.recovery
+
mkdir -p /usr/share/applications
+mkdir -p /opt/share/applications
mkdir -p /opt/dbspace/
pkg_smack
%exclude %{_libdir}/libpkgmgr_backend_lib_sample.so
%exclude /usr/etc/package-manager/server/queue_status
%attr(0700,root,root) /etc/opt/upgrade/pkgmgr.patch.sh
+%attr(0700,root,root) /usr/etc/package-manager/pkg_recovery.sh
+%{_libdir}/systemd/system/multi-user.target.wants/pkgmgr_recovery.service
+%{_libdir}/systemd/system/pkgmgr_recovery.service
%files client
%manifest pkgmgr-client.manifest
#define LOCALEDIR "/usr/share/locale"
#endif
+#define PACKAGE_RECOVERY_DIR "/opt/share/packages/.recovery"
+
#define DESKTOP_W 720.0
#define NO_MATCHING_FILE 11
backend_mode = backend_mode & ~(1<<position);
}
+static void __set_recovery_mode(char *pkgid, char *pkg_type)
+{
+ char recovery_file[MAX_PKG_NAME_LEN] = { 0, };
+ char buffer[MAX_PKG_NAME_LEN] = { 0 };
+ char *pkgid_tmp = NULL;
+ FILE *rev_file = NULL;
+
+ if (pkgid == NULL) {
+ DBG("pkgid is null\n");
+ return;
+ }
+
+ /*if pkgid has a "/"charactor, that is a path name for installation, then extract pkgid from absolute path*/
+ if (strstr(pkgid, "/")) {
+ pkgid_tmp = strrchr(pkgid, '/') + 1;
+ if (pkgid_tmp == NULL) {
+ DBG("pkgid_tmp[%s] is null\n", pkgid);
+ return;
+ }
+ snprintf(recovery_file, MAX_PKG_NAME_LEN, "%s/%s", PACKAGE_RECOVERY_DIR, pkgid_tmp);
+ } else {
+ snprintf(recovery_file, MAX_PKG_NAME_LEN, "%s/%s", PACKAGE_RECOVERY_DIR, pkgid);
+ }
+
+ rev_file = fopen(recovery_file, "w");
+ if (rev_file== NULL) {
+ DBG("rev_file[%s] is null\n", recovery_file);
+ return;
+ }
+
+ snprintf(buffer, MAX_PKG_NAME_LEN, "pkgid : %s\n", pkgid);
+ fwrite(buffer, sizeof(char), strlen(buffer), rev_file);
+
+ fclose(rev_file);
+}
+
+static void __unset_recovery_mode(char *pkgid, char *pkg_type)
+{
+ int ret = -1;
+ char recovery_file[MAX_PKG_NAME_LEN] = { 0, };
+ char *pkgid_tmp = NULL;
+
+ if (pkgid == NULL) {
+ DBG("pkgid is null\n");
+ return;
+ }
+
+ /*if pkgid has a "/"charactor, that is a path name for installation, then extract pkgid from absolute path*/
+ if (strstr(pkgid, "/")) {
+ pkgid_tmp = strrchr(pkgid, '/') + 1;
+ if (pkgid_tmp == NULL) {
+ DBG("pkgid_tmp[%s] is null\n", pkgid);
+ return;
+ }
+ snprintf(recovery_file, MAX_PKG_NAME_LEN, "%s/%s", PACKAGE_RECOVERY_DIR, pkgid_tmp);
+ } else {
+ snprintf(recovery_file, MAX_PKG_NAME_LEN, "%s/%s", PACKAGE_RECOVERY_DIR, pkgid);
+ }
+
+ ret = remove(recovery_file);
+ if (ret < 0)
+ DBG("remove recovery_file[%s] fail\n", recovery_file);
+}
+
static int __check_privilege_by_cookie(const char *e_cookie, int req_type)
{
guchar *cookie = NULL;
gsize size;
- char *smack_label = NULL;
int ret = PMINFO_R_OK; //temp to success , it should be PMINFO_R_ERROR
if (e_cookie == NULL) {
if (cpid == (ptr + i)->pid) {
__set_backend_free(i);
__set_backend_mode(i);
+ __unset_recovery_mode((ptr + i)->pkgid, (ptr + i)->pkgtype);
break;
}
}
if (cpid == (ptr + i)->pid) {
__set_backend_free(i);
__set_backend_mode(i);
+ __unset_recovery_mode((ptr + i)->pkgid, (ptr + i)->pkgtype);
strncpy(pname, (ptr + i)->pkgid, MAX_PKG_NAME_LEN-1);
strncpy(ptype, (ptr + i)->pkgtype, MAX_PKG_TYPE_LEN-1);
strncpy(args, (ptr + i)->args, MAX_PKG_ARGS_LEN-1);
goto pop;
}
__set_backend_busy((pos + num_of_backends - 1) % num_of_backends);
+ __set_recovery_mode(item->pkgid, item->pkg_type);
switch (item->req_type) {
case COMM_REQ_TO_INSTALLER:
configure_file(org.tizen.pkgmgr-install.xml.in ${CMAKE_BINARY_DIR}/org.tizen.pkgmgr-install.xml @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/org.tizen.pkgmgr-install.xml DESTINATION /usr/share/packages/)
+configure_file(pkg_recovery.sh.in pkg_recovery.sh @ONLY)
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/pkg_recovery.sh DESTINATION /usr/etc/package-manager/)
+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mime.wac.xml DESTINATION /usr/share/mime/packages/)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mime.tpk.xml DESTINATION /usr/share/mime/packages/)
snprintf(journal_file, sizeof(journal_file), "%s%s", db_file, "-journal");
for (i = 0; files[i]; i++) {
- ret = chown(files[i], OWNER_ROOT, GROUP_MENU);
+ ret = chown(files[i], OWNER_ROOT, OWNER_ROOT);
if (ret == -1) {
strerror_r(errno, buf, sizeof(buf));
- _E("FAIL : chown %s %d.%d, because %s", db_file, OWNER_ROOT, GROUP_MENU, buf);
+ _E("FAIL : chown %s %d.%d, because %s", db_file, OWNER_ROOT, OWNER_ROOT, buf);
return -1;
}
pkgmgrinfo_pkginfo_h handle = NULL;
int size = -1;
int get_type = -1;
- char buf[MAX_PKG_BUF_LEN] = {'\0'};
char *pkeyid = NULL;
/*make new pkgmgr_installer handle*/
static int __app_metadata_list_cb(const char *metadata_name, const char *metadata_value, void *user_data);
int app_func(const pkgmgr_appinfo_h handle, void *user_data);
+static void __get_pkgmgrinfo_pkginfo(const pkgmgrinfo_pkginfo_h handle, void *user_data)
+{
+ int ret = -1;
+ char *type = NULL;
+ char *version = NULL;
+ char *author_name = NULL;
+ char *author_email = NULL;
+ char *author_href = NULL;
+ char *root_path = NULL;
+ char *mainappid = NULL;
+ pkgmgr_install_location location = 0;
+ char *icon = NULL;
+ char *label = NULL;
+ char *desc = NULL;
+ bool removable = 0;
+ bool preload = 0;
+ bool readonly = 0;
+ bool update = 0;
+ bool system = 0;
+ int size = -1;
+ int installed_time = -1;
+
+ ret = pkgmgrinfo_pkginfo_get_type(handle, &type);
+ if (ret < 0) {
+ printf("Failed to get pkg type\n");
+ }
+ if (type)
+ printf("Type: %s\n", type);
+
+ ret = pkgmgrinfo_pkginfo_get_version(handle, &version);
+ if (ret < 0) {
+ printf("Failed to get version\n");
+ }
+ if (version)
+ printf("Version: %s\n", version);
+
+ ret = pkgmgrinfo_pkginfo_get_install_location(handle, &location);
+ if (ret < 0) {
+ printf("Failed to get install location\n");
+ }
+ printf("Install Location: %d\n", location);
+
+ ret = pkgmgrinfo_pkginfo_get_package_size(handle, &size);
+ if (ret < 0) {
+ printf("Failed to get package size \n");
+ }
+ printf("Package Size: %d\n", size);
+
+ ret = pkgmgrinfo_pkginfo_get_icon(handle, &icon);
+ if (ret < 0) {
+ printf("Failed to get icon\n");
+ }
+ if (icon)
+ printf("Icon: %s\n", icon);
+
+ ret = pkgmgrinfo_pkginfo_get_label(handle, &label);
+ if (ret < 0) {
+ printf("Failed to get label\n");
+ }
+ if (label)
+ printf("Label: %s\n", label);
+
+ ret = pkgmgrinfo_pkginfo_get_description(handle, &desc);
+ if (ret < 0) {
+ printf("Failed to get description\n");
+ }
+ if (desc)
+ printf("Description: %s\n", desc);
+
+ ret = pkgmgrinfo_pkginfo_get_author_name(handle, &author_name);
+ if (ret < 0) {
+ printf("Failed to get author name\n");
+ }
+ if (author_name)
+ printf("Author Name: %s\n", author_name);
+
+ ret = pkgmgrinfo_pkginfo_get_author_email(handle, &author_email);
+ if (ret < 0) {
+ printf("Failed to get author email\n");
+ }
+ if (author_email)
+ printf("Author Email: %s\n", author_email);
+
+ ret = pkgmgrinfo_pkginfo_get_author_href(handle, &author_href);
+ if (ret < 0) {
+ printf("Failed to get author href\n");
+ }
+ if (author_href)
+ printf("Author Href: %s\n", author_href);
+
+ ret = pkgmgrinfo_pkginfo_get_root_path(handle, &root_path);
+ if (ret < 0) {
+ printf("Failed to get root_path\n");
+ }
+ if (author_href)
+ printf("root_path : %s\n", root_path);
+
+ ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &mainappid);
+ if (ret < 0) {
+ printf("Failed to get mainappid\n");
+ }
+ if (author_href)
+ printf("mainappid : %s\n", mainappid);
+
+ ret = pkgmgrinfo_pkginfo_get_installed_time(handle, &installed_time);
+ if (ret < 0) {
+ printf("Failed to get install time\n");
+ }
+ printf("Install time: %d\n", installed_time);
+
+ ret = pkgmgrinfo_pkginfo_is_removable(handle, &removable);
+ if (ret < 0) {
+ printf("Failed to get removable\n");
+ }
+ else
+ printf("Removable: %d\n", removable);
+
+ ret = pkgmgrinfo_pkginfo_is_preload(handle, &preload);
+ if (ret < 0) {
+ printf("Failed to get preload\n");
+ }
+ else
+ printf("Preload: %d\n", preload);
+
+ ret = pkgmgrinfo_pkginfo_is_readonly(handle, &readonly);
+ if (ret < 0) {
+ printf("Failed to get readonly\n");
+ }
+ else
+ printf("Readonly: %d\n", readonly);
+
+ ret = pkgmgrinfo_pkginfo_is_update(handle, &update);
+ if (ret < 0) {
+ printf("Failed to get update\n");
+ }
+ else
+ printf("update: %d\n", update);
+
+ ret = pkgmgrinfo_pkginfo_is_system(handle, &system);
+ if (ret < 0) {
+ printf("Failed to get system\n");
+ }
+ else
+ printf("system: %d\n", system);
+
+ return 0;
+}
int __get_app_id(const pkgmgrinfo_appinfo_h handle, void *user_data)
{
char *appid = NULL;
int ret = 0;
int choice = -1;
int val = -1;
- int count = 0;
pkgmgrinfo_appinfo_filter_h handle;
ret = pkgmgrinfo_appinfo_filter_create(&handle);
if (ret > 0) {
return -1;
}
}
+
+ return -1;
}
static int __compare_pkg_certinfo_from_db(char *lhs_pkgid, char *rhs_pkgid)
static int __get_pkg_info(char *pkgid)
{
- pkgmgr_pkginfo_h handle;
+ pkgmgrinfo_pkginfo_h handle;
int ret = -1;
- char *type = NULL;
- char *version = NULL;
- char *author_name = NULL;
- char *author_email = NULL;
- char *author_href = NULL;
- pkgmgr_install_location location = 0;
- char *icon = NULL;
- char *label = NULL;
- char *desc = NULL;
- bool removable = 0;
- bool preload = 0;
- bool readonly = 0;
- int size = -1;
- int installed_time = -1;
printf("Get Pkg Info Called [%s]\n", pkgid);
- ret = pkgmgr_pkginfo_get_pkginfo(pkgid, &handle);
+ ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
if (ret < 0) {
printf("Failed to get handle\n");
return -1;
}
- ret = pkgmgr_pkginfo_get_type(handle, &type);
- if (ret < 0) {
- printf("Failed to get pkg type\n");
- }
- if (type)
- printf("Type: %s\n", type);
-
- ret = pkgmgr_pkginfo_get_version(handle, &version);
- if (ret < 0) {
- printf("Failed to get version\n");
- }
- if (version)
- printf("Version: %s\n", version);
-
- ret = pkgmgr_pkginfo_get_install_location(handle, &location);
- if (ret < 0) {
- printf("Failed to get install location\n");
- }
- printf("Install Location: %d\n", location);
-
- ret = pkgmgr_pkginfo_get_package_size(handle, &size);
- if (ret < 0) {
- printf("Failed to get package size \n");
- }
- printf("Package Size: %d\n", size);
-
- ret = pkgmgr_pkginfo_get_icon(handle, &icon);
- if (ret < 0) {
- printf("Failed to get icon\n");
- }
- if (icon)
- printf("Icon: %s\n", icon);
-
- ret = pkgmgr_pkginfo_get_label(handle, &label);
- if (ret < 0) {
- printf("Failed to get label\n");
- }
- if (label)
- printf("Label: %s\n", label);
-
- ret = pkgmgr_pkginfo_get_description(handle, &desc);
- if (ret < 0) {
- printf("Failed to get description\n");
- }
- if (desc)
- printf("Description: %s\n", desc);
-
- ret = pkgmgr_pkginfo_get_author_name(handle, &author_name);
- if (ret < 0) {
- printf("Failed to get author name\n");
- }
- if (author_name)
- printf("Author Name: %s\n", author_name);
-
- ret = pkgmgr_pkginfo_get_author_email(handle, &author_email);
- if (ret < 0) {
- printf("Failed to get author email\n");
- }
- if (author_email)
- printf("Author Email: %s\n", author_email);
-
- ret = pkgmgr_pkginfo_get_author_href(handle, &author_href);
- if (ret < 0) {
- printf("Failed to get author href\n");
- }
- if (author_href)
- printf("Author Href: %s\n", author_href);
-
- ret = pkgmgr_pkginfo_is_removable(handle, &removable);
- if (ret < 0) {
- printf("Failed to get removable\n");
- }
- else
- printf("Removable: %d\n", removable);
-
- ret = pkgmgr_pkginfo_is_preload(handle, &preload);
- if (ret < 0) {
- printf("Failed to get preload\n");
- }
- else
- printf("Preload: %d\n", preload);
+ __get_pkgmgrinfo_pkginfo(handle, NULL);
- ret = pkgmgr_pkginfo_is_readonly(handle, &readonly);
- if (ret < 0) {
- printf("Failed to get readonly\n");
- }
- else
- printf("Readonly: %d\n", readonly);
-
- ret = pkgmgr_pkginfo_get_installed_time(handle, &installed_time);
- if (ret < 0) {
- printf("Failed to get install time\n");
- }
- printf("Install time: %d\n", installed_time);
-
- pkgmgr_pkginfo_destroy_pkginfo(handle);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
return 0;
}
struct dirent entry, *result;
int ret;
char buf[BUFSZE];
+ int total_cnt = 0;
+// int ok_cnt = 0;
// desktop file
dir = opendir(directory);
if (!dir) {
if (strerror_r(errno, buf, sizeof(buf)) == 0)
- _E("Failed to access the [%s] because %s\n", directory, buf);
+ _E("Failed to access the [%s] because %s", directory, buf);
return -1;
}
- _D("Loading manifest files from %s\n", directory);
+ _D("Loading manifest files from %s", directory);
for (ret = readdir_r(dir, &entry, &result);
ret == 0 && result != NULL;
char *manifest;
if (entry.d_name[0] == '.') continue;
+ total_cnt++;
manifest = _manifest_to_package(entry.d_name);
if (!manifest) {
- _E("Failed to convert file to package[%s]\n", entry.d_name);
+ _E("Failed to convert file to xml[%s]", entry.d_name);
continue;
}
snprintf(buf, sizeof(buf), "%s/%s", directory, manifest);
- fprintf(stderr, "pkg_initdb : manifest file %s\n", buf);
-
ret = pkgmgr_parser_check_manifest_validation(buf);
if (ret < 0) {
- _E("check manifest validation failed code[%d] %s\n", ret, buf);
- fprintf(stderr, "check manifest validation failed code[%d] %s\n", ret, buf);
+ _E("manifest validation failed : %s", buf);
free(manifest);
continue;
}
-
/*temporarily fixed due to glib abort */
- // pkgmgr_parser_parse_manifest_for_installation(buf, NULL);
-
char buf2[BUFSZE];
snprintf(buf2, sizeof(buf2), "/usr/bin/pkginfo --imd %s", buf);
system(buf2);
-
+#if 0
+ ret = pkgmgr_parser_parse_manifest_for_installation(buf, NULL);
+ if (ret < 0) {
+ _E("Failed to add a xml[%s]", buf);
+ } else {
+ ok_cnt++;
+ }
+#endif
free(manifest);
}
+// _D("Package-XML process : Success [%d], fail[%d], total[%d] \n", ok_cnt, total_cnt-ok_cnt, total_cnt);
closedir(dir);
return 0;
snprintf(journal_file, sizeof(journal_file), "%s%s", db_file, "-journal");
for (i = 0; files[i]; i++) {
- ret = chown(files[i], OWNER_ROOT, GROUP_MENU);
+ ret = chown(files[i], OWNER_ROOT, OWNER_ROOT);
if (ret == -1) {
strerror_r(errno, buf, sizeof(buf));
- _E("FAIL : chown %s %d.%d, because %s", db_file, OWNER_ROOT, GROUP_MENU, buf);
+ _E("FAIL : chown %s %d.%d, because %s", db_file, OWNER_ROOT, OWNER_ROOT, buf);
return -1;
}
return 0;
}
- ret = initdb_load_directory(OPT_MANIFEST_DIRECTORY);
+ ret = initdb_load_directory(USR_MANIFEST_DIRECTORY);
if (ret == -1) {
- _E("cannot load opt manifest directory.");
+ _E("cannot load usr manifest directory.");
}
- ret = initdb_load_directory(USR_MANIFEST_DIRECTORY);
+ ret = initdb_load_directory(OPT_MANIFEST_DIRECTORY);
if (ret == -1) {
- _E("cannot load usr manifest directory.");
+ _E("cannot load opt manifest directory.");
}
ret = initdb_change_perm(PACKAGE_INFO_DB_FILE);
if (ret == -1) {
_E("cannot chown.");
- return -1;
}
ret = initdb_update_preload_info();
if (ret == -1) {
_E("cannot update preload info.");
- return -1;
}
const char *argv_parser[] = { "/usr/bin/chsmack", "-a", PKG_INFO_DB_LABEL, PKG_PARSER_DB_FILE, NULL };
--- /dev/null
+#!/bin/sh
+#
+
+_pkg_recovery_path="/opt/share/packages/.recovery"
+_pkg_recovery_file="/opt/share/packages/.recovery/*"
+
+FILE_LIST=`ls $_pkg_recovery_path`
+if [ -n "$FILE_LIST" ]; then
+ echo "There are packages to recovery"
+ /usr/bin/wrt-installer -v
+ /usr/bin/osp-installer -v
+
+ echo "delete recovery files"
+ rm $_pkg_recovery_file
+else
+ echo "There is no packages to recovery."
+fi
+
__pkg_smack_change_smack_label(dirpath, "_", 0);/*0 is SMACK_LABEL_ACCESS*/
memset(dirpath, '\0', BUFF_SIZE);
- /*/shared/res dir. setup path */
+ /*/shared/res dir. Dont setup path but change smack access to "_" */
if (flag == 0)
snprintf(dirpath, BUFF_SIZE, "/usr/apps/%s/shared/res", pkgname);
else
snprintf(dirpath, BUFF_SIZE, "/opt/usr/apps/%s/shared/res", pkgname);
if (__is_dir(dirpath))
- __pkg_smack_setup_path(pkgname, dirpath, RPM_PATH_PUBLIC_RO, NULL);
+ __pkg_smack_change_smack_label(dirpath, "_", 0);/*0 is SMACK_LABEL_ACCESS*/
memset(dirpath, '\0', BUFF_SIZE);
/*/shared/data dir. setup path and change group to 'app'*/