SET(TARGET_LOADER "security-manager-rules-loader")
SET(TARGET_TEST_LOADER "security-manager-test-rules-loader")
SET(TARGET_NSS "security-manager-nss")
+SET(TARGET_SQLITE_EXT "sqlite3-sha1-ext")
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(pc)
BEGIN EXCLUSIVE TRANSACTION;
-PRAGMA user_version = 13;
+PRAGMA user_version = 14;
CREATE TABLE IF NOT EXISTS pkg (
pkg_id INTEGER PRIMARY KEY,
CREATE TABLE IF NOT EXISTS author (
author_id INTEGER PRIMARY KEY,
name VARCHAR NOT NULL,
- UNIQUE (name)
+ hash VARCHAR NOT NULL,
+ UNIQUE (hash)
);
CREATE TABLE IF NOT EXISTS app_defined_privilege (
pkg.author_id,
pkg.name as pkg_name,
author.name as author_name,
+ author.hash as author_hash,
pkg.is_hybrid
FROM user_app
LEFT JOIN app USING (app_id)
AND NEW.author_name IS NOT NULL
AND author_name!=NEW.author_name);
- INSERT OR IGNORE INTO author(name) VALUES (NEW.author_name);
+ INSERT OR IGNORE INTO author(name, hash) VALUES (NEW.author_name, NEW.author_hash);
INSERT OR IGNORE INTO pkg(name, author_id, is_hybrid) VALUES (
NEW.pkg_name,
--- /dev/null
+PRAGMA foreign_keys=OFF;
+
+BEGIN EXCLUSIVE TRANSACTION;
+
+PRAGMA user_version = 14;
+
+CREATE TABLE author_new (
+ author_id INTEGER PRIMARY KEY,
+ name VARCHAR NOT NULL,
+ hash VARCHAR NOT NULL,
+ UNIQUE (hash)
+);
+
+SELECT load_extension('libsqlite3-sha1-ext.so');
+INSERT INTO author_new
+SELECT author_id, name, substr(sha1(name), 1, 16)
+FROM author;
+
+DROP TABLE author;
+ALTER TABLE author_new RENAME TO author;
+
+PRAGMA foreign_key_check;
+
+COMMIT TRANSACTION;
+
+PRAGMA foreign_keys=ON;
%dir %attr(711,root,root) %{TZ_SYS_VAR}/%{name}/
%{_libdir}/libsecurity-manager-commons.so.*
+%{_libdir}/libsqlite3-sha1-ext.so
%attr(-,root,root) %{_unitdir}/security-manager.*
%attr(-,root,root) %{_unitdir}/security-manager-cleanup.*
%attr(-,root,root) %{_unitdir}/security-manager-rules-loader.service
--- /dev/null
+#!/bin/sh -e
+
+#
+# Copyright (c) 2020 Samsung Electronics Co., Ltd. All rights reserved.
+#
+# This file is licensed under the terms of MIT License or the Apache License
+# Version 2.0 of your choice. See the LICENSE.MIT file for MIT license details.
+# See the LICENSE file or the notice below for Apache License Version 2.0
+# details.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+export PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+. /etc/tizen-platform.conf
+
+systemctl stop security-manager.service security-manager.socket
+
+trusted_dirs=`find "$TZ_SYS_OPT" -name trusted | grep apps_rw`
+
+echo "$trusted_dirs" | while read dir
+do
+ pkg=`echo "$dir" | rev | cut -d '/' -f 3 | rev`
+ hash=`sqlite3 "$TZ_SYS_DB"/.security-manager.db "SELECT DISTINCT author_hash FROM user_app_pkg_view WHERE pkg_name='$pkg'"`
+ if [ -n "$hash" ]
+ then
+ chsmack -a "User::Author::$hash" "$dir"
+ fi
+done
+
+systemctl start security-manager-rules-loader.service
+systemctl start security-manager.service security-manager.socket
libtzplatform-config
security-privilege-manager
mount
+ openssl1.1
)
IF(DPL_WITH_DLOG)
LINK_DIRECTORIES(${COMMON_DEP_LIBRARY_DIRS} ${DLOG_DEP_LIBRARY_DIRS})
ADD_LIBRARY(${TARGET_COMMON} SHARED ${COMMON_SOURCES})
+ADD_LIBRARY(${TARGET_SQLITE_EXT} SHARED sha1.c)
SET_SOURCE_FILES_PROPERTIES(${GEN_PATH}/db.h PROPERTIES GENERATED 1)
ADD_DEPENDENCIES(${TARGET_COMMON} generate)
)
INSTALL(TARGETS ${TARGET_COMMON} DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(TARGETS ${TARGET_SQLITE_EXT} DESTINATION ${LIB_INSTALL_DIR})
INSTALL(DIRECTORY DESTINATION ${DATA_INSTALL_DIR}/dummy)
EGetAllPackages,
EGetAppsInPkg,
EGetGroupsRelatedPrivileges,
- EGetPkgAuthorId,
- EAuthorIdExists,
+ EGetPkgAuthor,
+ EAuthorExists,
ESetPackageSharedRO,
EIsPackageHybrid,
EAddAppDefinedPrivilege,
bool PkgNameExists(const std::string &pkgName);
/**
- * Check if authorId is already registered in database
+ * Check if author is already registered in database
*
- * @param authorId numerical author identifier
+ * @param authorHash author identifier, sha1(author_name)
* @exception PrivilegeDb::Exception::InternalError on internal error
* @exception PrivilegeDb::Exception::ConstraintError on constraint violation
- * @return true if authorId exists in the database
+ * @return true if author exists in the database
*
*/
- bool AuthorIdExists(int authorId);
+ bool AuthorExists(const std::string &authorHash);
/**
* Return package id associated with a given application id
* @param pkgName - package identifier
* @param uid - user identifier for whom application is going to be installed
* @param targetTizenVer - target tizen version for application
- * @param author - author identifier
+ * @param authorName - author identifier
* @param isHybrid - hybrid flag setting
* @exception PrivilegeDb::Exception::InternalError on internal error
* @exception PrivilegeDb::Exception::ConstraintError on constraint violation
const std::string &pkgName,
uid_t uid,
const std::string &targetTizenVer,
- const std::string &authorId,
+ const std::string &authorName,
bool isHybrid);
/**
*/
void GetAllPackages(std::vector<std::string> &packages);
- /* Retrive an id of an author from database
+ /* Retrive hash of author_name from database
*
* @param pkgName[in] package identifier
- * @param authorId[out] author id associated with the package, or -1 if no
+ * @param authorHash[out] hash of author_name associated with the package, or empty string if no
* author was assigned during installation
* @exception PrivilegeDb::Exception::InternalError on internal error
* @exception PrivilegeDb::Exception::ConstraintError on constraint violation
*/
- void GetPkgAuthorId(const std::string &pkgName, int &authorId);
+ void GetPkgAuthor(const std::string &pkgName, std::string &authorHash);
/**
* Retrieve vector of pairs with group_name (1st value) and privilege_name (2nd value)
bool isPkgHybrid;
bool removePkg;
bool removeAuthor;
- int authorId;
+ std::string authorHash;
Smack::Labels pkgLabels;
std::vector<bool> removeApps;
AppDefinedPrivilegesVector oldAppDefinedPrivileges;
* @param path[in] path to a file or directory to setup
* @param pathType[in] type of path to setup. See description of
* app_install_path_type in security-manager.h for details
+ * @param authorHash[in] hash of author_name of given application
+ * (if not applicable, set to empty string)
*/
void setupPath(
const std::string &pkgName,
const std::string &path,
app_install_path_type pathType,
- const int authorId = -1);
+ const std::string &authorHash = std::string());
/**
* Sets Smack labels on a <ROOT_APP>/<pkg_id> non-recursively
* Generates label for trusted paths. Trusted paths are paths where all application
* of the same author have rw rights.
*
- * @param[in] authorId
+ * @param[in] authorHash
* @return resulting Smack label
*/
-Smack::Label generatePathTrustedLabel(const int authorId);
+Smack::Label generatePathTrustedLabel(const std::string &authorHash);
/**
* Returns smack label for given socket
*
* @param[in] appProcessLabel - process label of the application
* @param[in] pkgName - package identifier
- * @param[in] authorId - author id of application
+ * @param[in] authorHash - hash of author_name
* @param[in] pkgLabels - a list of process labels of all applications inside this package
*/
void installApplicationRules(
const std::string &appProcessLabel,
const std::string &pkgName,
- const int authorId,
+ const std::string &authorHash,
const Smack::Labels &pkgLabels);
/**
*
* @param[in] appProcessLabel - process label of the application
* @param[in] pkgName - package id of given application
- * @param[in] authorId - author id of given application (if not applicable, set to -1)
+ * @param[in] authorHash - hash of author_name of given application (if not applicable, set to empty string)
* @param[in] privileges - a list of privileges allowed for given application
*/
void enablePrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges);
/**
*
* @param[in] appProcessLabel - process label of the application
* @param[in] pkgName - package id of given application
- * @param[in] authorId - author id of given application (if not applicable, set to -1)
+ * @param[in] authorHash - hash of author_name of given application (if not applicable, set to empty string)
*/
void disableAllPrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId);
+ const std::string &authorHash);
/**
* Disable privilege-specific smack rules for given application
*
* @param[in] appProcessLabel - process label of the application
* @param[in] pkgName - package id of given application
- * @param[in] authorId - author id of given application (if not applicable, set to -1)
+ * @param[in] authorHash - hash of author_name of given application (if not applicable, set to empty string)
* @param[in] privileges - a list of privileges to be disabled for given application
*/
void disablePrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges);
/**
*
* @param[in] appProcessLabel - application process label
* @param[in] pkgName - package identifier that the application is in
- * @param[in] authorId - identification (datbase key) of the author
+ * @param[in] authorHash - identification of the author
*/
void uninstallApplicationRules(const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId);
+ const std::string &authorHash);
/**
* Update package specific rules
/**
* Uninstall author-specific smack rules.
*
- * param[in] authorId - identification (datbase key) of the author
+ * param[in] authorHash - identification of the author
*/
- void uninstallAuthorRules(const int authorId);
+ void uninstallAuthorRules(const std::string &authorHash);
/**
* Add rules related to private path sharing rules
TemplateManager::Type type,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId);
+ const std::string &authorHash);
void addFromPrivTemplate(
SmackAccesses &rules,
const Smack::Label &appProcessLabel,
const Smack::Label &privilegeLable,
const std::string &pkgName,
- const int authorId);
+ const std::string &authorHash);
void useTemplate(
TemplateManager::Type type,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId = -1);
+ const std::string &authorHash = std::string());
private:
/**
SmackAccesses &rules,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges);
TemplateManager m_templateMgr;
#include <utility>
#include <string>
#include <iostream>
+#include <iomanip>
#include <sys/stat.h>
+#include <openssl/sha.h>
+
#include <dpl/log/log.h>
#include "../gen/db.h"
#include "privilege_db.h"
namespace {
constexpr const char *g_queries[StmtTypeCount] = {
- [underlying(StmtType::EAddApplication)] = "INSERT INTO user_app_pkg_view (app_name, pkg_name, uid, version, author_name, is_hybrid)"
- " VALUES (?, ?, ?, ?, ?, ?)",
+ [underlying(StmtType::EAddApplication)] = "INSERT INTO user_app_pkg_view (app_name, pkg_name, uid, version, author_name, author_hash, is_hybrid)"
+ " VALUES (?, ?, ?, ?, ?, ?, ?)",
[underlying(StmtType::ERemoveApplication)] = "DELETE FROM user_app_pkg_view WHERE app_name=? AND uid=?",
[underlying(StmtType::EPkgNameExists)] = "SELECT count(*) FROM pkg WHERE name=?",
[underlying(StmtType::EAppNameExists)] = "SELECT count(*) FROM app WHERE name=?",
[underlying(StmtType::EGetAllPackages)] = "SELECT DISTINCT pkg_name FROM user_app_pkg_view",
[underlying(StmtType::EGetAppsInPkg)] = " SELECT DISTINCT app_name FROM user_app_pkg_view WHERE pkg_name = ?",
[underlying(StmtType::EGetGroupsRelatedPrivileges)] = "SELECT DISTINCT group_name, privilege_name FROM privilege_group",
- [underlying(StmtType::EGetPkgAuthorId)] = "SELECT author_id FROM pkg WHERE name = ? AND author_id IS NOT NULL",
- [underlying(StmtType::EAuthorIdExists)] = "SELECT count(*) FROM author where author_id=?",
+ [underlying(StmtType::EGetPkgAuthor)] = "SELECT DISTINCT author_hash FROM user_app_pkg_view WHERE pkg_name = ?",
+ [underlying(StmtType::EAuthorExists)] = "SELECT count(*) FROM author WHERE hash=?",
[underlying(StmtType::ESetPackageSharedRO)] = "UPDATE pkg SET shared_ro=? WHERE name=?",
[underlying(StmtType::EIsPackageHybrid)] = "SELECT is_hybrid FROM pkg WHERE name=?",
[underlying(StmtType::EAddAppDefinedPrivilege)] = "INSERT INTO app_defined_privilege_view (app_name, uid, privilege, type, license) VALUES (?, ?, ?, ?, ?)",
});
}
+std::string getAuthorHash(const std::string &author)
+{
+ if (author.empty())
+ return std::string();
+
+ // SHA1 produce 160 bits hash
+ unsigned char hash[20];
+ SHA1((const unsigned char*)author.data(), author.size(), hash);
+
+ std::stringstream ss;
+ ss << std::hex;
+
+ // get 64 bits only in hex format (16 characters)
+ for (int i = 0; i < 8; ++i)
+ ss << std::setw(2) << std::setfill('0') << (int)hash[i];
+
+ return ss.str();
+}
+
void PrivilegeDb::AddApplication(
const std::string &appName,
const std::string &pkgName,
command->BindInteger(3, static_cast<unsigned int>(uid));
command->BindString(4, targetTizenVer);
authorName.empty() ? command->BindNull(5) : command->BindString(5, authorName);
- command->BindInteger(6, isHybrid ? 1 : 0);
+ authorName.empty() ? command->BindNull(6) : command->BindString(6, getAuthorHash(authorName));
+ command->BindInteger(7, isHybrid ? 1 : 0);
if (command->Step()) {
LogDebug("Unexpected SQLITE_ROW answer to query: " <<
std::string pkgName;
GetAppPkgName(appName, pkgName);
- int authorId;
- GetPkgAuthorId(pkgName, authorId);
+ std::string authorHash;
+ GetPkgAuthor(pkgName, authorHash);
auto command = getStatement(StmtType::ERemoveApplication);
command->BindString(1, appName);
appNameIsNoMore = !(AppNameExists(appName));
pkgNameIsNoMore = !(PkgNameExists(pkgName));
- authorNameIsNoMore = !(AuthorIdExists(authorId));
+ authorNameIsNoMore = !(AuthorExists(authorHash));
});
}
});
}
-void PrivilegeDb::GetPkgAuthorId(const std::string &pkgName, int &authorId)
+void PrivilegeDb::GetPkgAuthor(const std::string &pkgName, std::string &authorHash)
{
try_catch<void>([&] {
- auto command = getStatement(StmtType::EGetPkgAuthorId);
+ auto command = getStatement(StmtType::EGetPkgAuthor);
command->BindString(1, pkgName);
if (command->Step()) {
- authorId = command->GetColumnInteger(0);
- LogDebug("Got authorid: " << authorId << " for pkgName " << pkgName);
+ authorHash = command->GetColumnString(0);
+ LogDebug("Got author: " << authorHash << " for pkgName " << pkgName);
} else {
- authorId = -1;
- LogDebug("No authorid found for pkgName " << pkgName);
+ authorHash = std::string();
+ LogDebug("No author found for pkgName " << pkgName);
}
});
}
-bool PrivilegeDb::AuthorIdExists(int authorId)
+bool PrivilegeDb::AuthorExists(const std::string &authorHash)
{
return try_catch<bool>([&]() -> bool {
- auto command = getStatement(StmtType::EAuthorIdExists);
+ auto command = getStatement(StmtType::EAuthorExists);
int cnt = 0;
- command->BindInteger(1, authorId);
+ command->BindString(1, authorHash);
if (command->Step())
cnt = command->GetColumnInteger(0);
- LogDebug("AuthorId " << authorId << " found in " << cnt << " entries in db");
+ LogDebug("Author " << authorHash << " found in " << cnt << " entries in db");
return (cnt > 0);
});
isPkgHybrid = false;
removePkg = false;
removeAuthor = false;
- authorId = 0;
+ authorHash = std::string();
}
namespace {
return SECURITY_MANAGER_ERROR_INPUT_PARAM;
}
- int authorId;
- m_privilegeDb.GetPkgAuthorId(pkgName, authorId);
+ std::string authorHash;
+ m_privilegeDb.GetPkgAuthor(pkgName, authorHash);
std::string homePath;
std::vector<std::string> pkgLegalBaseDirs;
for (const auto &pkgPath : paths) {
const std::string &path = pkgPath.first;
app_install_path_type pathType = static_cast<app_install_path_type>(pkgPath.second);
- SmackLabels::setupPath(pkgName, path, pathType, authorId);
+ SmackLabels::setupPath(pkgName, path, pathType, authorHash);
}
for (const auto &basePath : pkgLegalBaseDirs) {
int ServiceImpl::appInstallSmackRules(app_inst_req &req, InstallHelper &ih)
{
- int authorId = -1;
+ std::string authorHash = std::string();
Smack::Labels pkgLabels;
try {
- m_privilegeDb.GetPkgAuthorId(req.pkgName, authorId);
+ m_privilegeDb.GetPkgAuthor(req.pkgName, authorHash);
// Check if hybridity is changed if the package is installed
if (ih.isUserPkgInstalled && ih.isOldPkgHybrid != req.isHybrid) {
for (auto &app : req.apps) {
Smack::Label oldAppLabel = SmackLabels::generateProcessLabel(
app.appName, req.pkgName, ih.isOldPkgHybrid);
- m_smackRules.uninstallApplicationRules(oldAppLabel, req.pkgName, authorId);
+ m_smackRules.uninstallApplicationRules(oldAppLabel, req.pkgName, authorHash);
if (req.isHybrid) // was not hybrid - all labels were the same
break;
}
Smack::Label appLabel = SmackLabels::generateProcessLabel(
app.appName, req.pkgName, req.isHybrid);
- m_smackRules.installApplicationRules(appLabel, req.pkgName, authorId, pkgLabels);
+ m_smackRules.installApplicationRules(appLabel, req.pkgName, authorHash, pkgLabels);
if (!req.isHybrid) // is not hybrid - all labels are the same
break;
}
* Nonhybrid apps have the same label, so revoking it is unnecessary
* unless whole package is being removed.
*/
- m_smackRules.uninstallApplicationRules(processLabel, req.pkgName, uh.authorId);
+ m_smackRules.uninstallApplicationRules(processLabel, req.pkgName, uh.authorHash);
}
if (!uh.removePkg) {
uh.pkgLabels.erase(std::remove(uh.pkgLabels.begin(), uh.pkgLabels.end(), processLabel),
m_smackRules.updatePackageRules(req.pkgName, uh.pkgLabels);
}
- if (uh.authorId != -1 && uh.removeAuthor) {
- LogDebug("Removing Smack rules for authorId " << uh.authorId);
- m_smackRules.uninstallAuthorRules(uh.authorId);
+ if (!uh.authorHash.empty() && uh.removeAuthor) {
+ LogDebug("Removing Smack rules for author " << uh.authorHash);
+ m_smackRules.uninstallAuthorRules(uh.authorHash);
}
} catch (const SmackException::Base &e) {
LogError("Error while removing Smack rules for application: " << e.DumpToString());
// that this app belongs to, this will allow us to remove all rules within the
// package that the app appears in
UninstallHelper uh;
- m_privilegeDb.GetPkgAuthorId(req.pkgName, uh.authorId);
+ m_privilegeDb.GetPkgAuthor(req.pkgName, uh.authorHash);
getPkgLabels(req.pkgName, uh.pkgLabels);
uh.isPkgHybrid = m_privilegeDb.IsPackageHybrid(req.pkgName);
std::string appName, pkgName;
SmackLabels::generateAppPkgNameFromLabel(appContext.appProcessLabel, appName, pkgName);
- int authorId;
- m_privilegeDb.GetPkgAuthorId(pkgName, authorId);
+ std::string authorHash;
+ m_privilegeDb.GetPkgAuthor(pkgName, authorHash);
- m_smackRules.disablePrivilegeRules(appContext.appProcessLabel, pkgName, authorId, denied);
- m_smackRules.enablePrivilegeRules(appContext.appProcessLabel, pkgName, authorId, allowed);
+ m_smackRules.disablePrivilegeRules(appContext.appProcessLabel, pkgName, authorHash, denied);
+ m_smackRules.enablePrivilegeRules(appContext.appProcessLabel, pkgName, authorHash, allowed);
}
bool isMultiUser(const MountNS::AppContext &app, const std::vector<MountNS::AppContext> &runningApps)
return ret;
}
- int authorId;
- m_privilegeDb.GetPkgAuthorId(pkgName, authorId);
+ std::string authorHash;
+ m_privilegeDb.GetPkgAuthor(pkgName, authorHash);
std::vector<std::string> pkgLabels;
getPkgLabels(pkgName, pkgLabels);
// We have to remove all possible privilege related Smack rules, because application
// policy might have changed from last prepareApp
// (e.g. application new version was installed)
- m_smackRules.disableAllPrivilegeRules(label, pkgName, authorId);
+ m_smackRules.disableAllPrivilegeRules(label, pkgName, authorHash);
// TODO: Optimization is welcomed here
auto runningApps = MountNS::getMountNSApps();
LogWarning("Detected multiuser instance of " << appName
<< ". Privilege related Smack rules are cleared and won't be reapplied.");
} else {
- m_smackRules.enablePrivilegeRules(label, pkgName, authorId, allowedPrivileges);
+ m_smackRules.enablePrivilegeRules(label, pkgName, authorHash, allowedPrivileges);
}
}
--- /dev/null
+/*
+** 2017-01-27
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+******************************************************************************
+**
+** This SQLite extension implements functions that compute SHA1 hashes.
+** Two SQL functions are implemented:
+**
+** sha1(X)
+** sha1_query(Y)
+**
+** The sha1(X) function computes the SHA1 hash of the input X, or NULL if
+** X is NULL.
+**
+** The sha1_query(Y) function evalutes all queries in the SQL statements of Y
+** and returns a hash of their results.
+*/
+#include "sqlite3ext.h"
+SQLITE_EXTENSION_INIT1
+#include <assert.h>
+#include <string.h>
+#include <stdarg.h>
+
+/******************************************************************************
+** The Hash Engine
+*/
+/* Context for the SHA1 hash */
+typedef struct SHA1Context SHA1Context;
+struct SHA1Context {
+ unsigned int state[5];
+ unsigned int count[2];
+ unsigned char buffer[64];
+};
+
+#define SHA_ROT(x,l,r) ((x) << (l) | (x) >> (r))
+#define rol(x,k) SHA_ROT(x,k,32-(k))
+#define ror(x,k) SHA_ROT(x,32-(k),k)
+
+#define blk0le(i) (block[i] = (ror(block[i],8)&0xFF00FF00) \
+ |(rol(block[i],8)&0x00FF00FF))
+#define blk0be(i) block[i]
+#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \
+ ^block[(i+2)&15]^block[i&15],1))
+
+/*
+ * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1
+ *
+ * Rl0() for little-endian and Rb0() for big-endian. Endianness is
+ * determined at run-time.
+ */
+#define Rl0(v,w,x,y,z,i) \
+ z+=((w&(x^y))^y)+blk0le(i)+0x5A827999+rol(v,5);w=ror(w,2);
+#define Rb0(v,w,x,y,z,i) \
+ z+=((w&(x^y))^y)+blk0be(i)+0x5A827999+rol(v,5);w=ror(w,2);
+#define R1(v,w,x,y,z,i) \
+ z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=ror(w,2);
+#define R2(v,w,x,y,z,i) \
+ z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=ror(w,2);
+#define R3(v,w,x,y,z,i) \
+ z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=ror(w,2);
+#define R4(v,w,x,y,z,i) \
+ z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=ror(w,2);
+
+/*
+ * Hash a single 512-bit block. This is the core of the algorithm.
+ */
+void SHA1Transform(unsigned int state[5], const unsigned char buffer[64]){
+ unsigned int qq[5]; /* a, b, c, d, e; */
+ static int one = 1;
+ unsigned int block[16];
+ memcpy(block, buffer, 64);
+ memcpy(qq,state,5*sizeof(unsigned int));
+
+#define a qq[0]
+#define b qq[1]
+#define c qq[2]
+#define d qq[3]
+#define e qq[4]
+
+ /* Copy p->state[] to working vars */
+ /*
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+ */
+
+ /* 4 rounds of 20 operations each. Loop unrolled. */
+ if( 1 == *(unsigned char*)&one ){
+ Rl0(a,b,c,d,e, 0); Rl0(e,a,b,c,d, 1); Rl0(d,e,a,b,c, 2); Rl0(c,d,e,a,b, 3);
+ Rl0(b,c,d,e,a, 4); Rl0(a,b,c,d,e, 5); Rl0(e,a,b,c,d, 6); Rl0(d,e,a,b,c, 7);
+ Rl0(c,d,e,a,b, 8); Rl0(b,c,d,e,a, 9); Rl0(a,b,c,d,e,10); Rl0(e,a,b,c,d,11);
+ Rl0(d,e,a,b,c,12); Rl0(c,d,e,a,b,13); Rl0(b,c,d,e,a,14); Rl0(a,b,c,d,e,15);
+ }else{
+ Rb0(a,b,c,d,e, 0); Rb0(e,a,b,c,d, 1); Rb0(d,e,a,b,c, 2); Rb0(c,d,e,a,b, 3);
+ Rb0(b,c,d,e,a, 4); Rb0(a,b,c,d,e, 5); Rb0(e,a,b,c,d, 6); Rb0(d,e,a,b,c, 7);
+ Rb0(c,d,e,a,b, 8); Rb0(b,c,d,e,a, 9); Rb0(a,b,c,d,e,10); Rb0(e,a,b,c,d,11);
+ Rb0(d,e,a,b,c,12); Rb0(c,d,e,a,b,13); Rb0(b,c,d,e,a,14); Rb0(a,b,c,d,e,15);
+ }
+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+
+ /* Add the working vars back into context.state[] */
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
+
+#undef a
+#undef b
+#undef c
+#undef d
+#undef e
+}
+
+
+/* Initialize a SHA1 context */
+static void hash_init(SHA1Context *p){
+ /* SHA1 initialization constants */
+ p->state[0] = 0x67452301;
+ p->state[1] = 0xEFCDAB89;
+ p->state[2] = 0x98BADCFE;
+ p->state[3] = 0x10325476;
+ p->state[4] = 0xC3D2E1F0;
+ p->count[0] = p->count[1] = 0;
+}
+
+/* Add new content to the SHA1 hash */
+static void hash_step(
+ SHA1Context *p, /* Add content to this context */
+ const unsigned char *data, /* Data to be added */
+ unsigned int len /* Number of bytes in data */
+){
+ unsigned int i, j;
+
+ j = p->count[0];
+ if( (p->count[0] += len << 3) < j ){
+ p->count[1] += (len>>29)+1;
+ }
+ j = (j >> 3) & 63;
+ if( (j + len) > 63 ){
+ (void)memcpy(&p->buffer[j], data, (i = 64-j));
+ SHA1Transform(p->state, p->buffer);
+ for(; i + 63 < len; i += 64){
+ SHA1Transform(p->state, &data[i]);
+ }
+ j = 0;
+ }else{
+ i = 0;
+ }
+ (void)memcpy(&p->buffer[j], &data[i], len - i);
+}
+
+/* Compute a string using sqlite3_vsnprintf() and hash it */
+static void hash_step_vformat(
+ SHA1Context *p, /* Add content to this context */
+ const char *zFormat,
+ ...
+){
+ va_list ap;
+ int n;
+ char zBuf[50];
+ va_start(ap, zFormat);
+ sqlite3_vsnprintf(sizeof(zBuf),zBuf,zFormat,ap);
+ va_end(ap);
+ n = (int)strlen(zBuf);
+ hash_step(p, (unsigned char*)zBuf, n);
+}
+
+
+/* Add padding and compute the message digest. Render the
+** message digest as lower-case hexadecimal and put it into
+** zOut[]. zOut[] must be at least 41 bytes long. */
+static void hash_finish(
+ SHA1Context *p, /* The SHA1 context to finish and render */
+ char *zOut /* Store hexadecimal hash here */
+){
+ unsigned int i;
+ unsigned char finalcount[8];
+ unsigned char digest[20];
+ static const char zEncode[] = "0123456789abcdef";
+
+ for (i = 0; i < 8; i++){
+ finalcount[i] = (unsigned char)((p->count[(i >= 4 ? 0 : 1)]
+ >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
+ }
+ hash_step(p, (const unsigned char *)"\200", 1);
+ while ((p->count[0] & 504) != 448){
+ hash_step(p, (const unsigned char *)"\0", 1);
+ }
+ hash_step(p, finalcount, 8); /* Should cause a SHA1Transform() */
+ for (i = 0; i < 20; i++){
+ digest[i] = (unsigned char)((p->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
+ }
+ for(i=0; i<20; i++){
+ zOut[i*2] = zEncode[(digest[i]>>4)&0xf];
+ zOut[i*2+1] = zEncode[digest[i] & 0xf];
+ }
+ zOut[i*2]= 0;
+}
+/* End of the hashing logic
+*****************************************************************************/
+
+/*
+** Implementation of the sha1(X) function.
+**
+** Return a lower-case hexadecimal rendering of the SHA1 hash of the
+** argument X. If X is a BLOB, it is hashed as is. For all other
+** types of input, X is converted into a UTF-8 string and the string
+** is hash without the trailing 0x00 terminator. The hash of a NULL
+** value is NULL.
+*/
+static void sha1Func(
+ sqlite3_context *context,
+ __attribute__((unused)) int argc,
+ sqlite3_value **argv
+){
+ SHA1Context cx;
+ int eType = sqlite3_value_type(argv[0]);
+ int nByte = sqlite3_value_bytes(argv[0]);
+ char zOut[44];
+
+ assert( argc==1 );
+ if( eType==SQLITE_NULL ) return;
+ hash_init(&cx);
+ if( eType==SQLITE_BLOB ){
+ hash_step(&cx, sqlite3_value_blob(argv[0]), nByte);
+ }else{
+ hash_step(&cx, sqlite3_value_text(argv[0]), nByte);
+ }
+ hash_finish(&cx, zOut);
+ sqlite3_result_text(context, zOut, 40, SQLITE_TRANSIENT);
+}
+
+/*
+** Implementation of the sha1_query(SQL) function.
+**
+** This function compiles and runs the SQL statement(s) given in the
+** argument. The results are hashed using SHA1 and that hash is returned.
+**
+** The original SQL text is included as part of the hash.
+**
+** The hash is not just a concatenation of the outputs. Each query
+** is delimited and each row and value within the query is delimited,
+** with all values being marked with their datatypes.
+*/
+static void sha1QueryFunc(
+ sqlite3_context *context,
+ __attribute__((unused)) int argc,
+ sqlite3_value **argv
+){
+ sqlite3 *db = sqlite3_context_db_handle(context);
+ const char *zSql = (const char*)sqlite3_value_text(argv[0]);
+ sqlite3_stmt *pStmt = 0;
+ int nCol; /* Number of columns in the result set */
+ int i; /* Loop counter */
+ int rc;
+ int n;
+ const char *z;
+ SHA1Context cx;
+ char zOut[44];
+
+ assert( argc==1 );
+ if( zSql==0 ) return;
+ hash_init(&cx);
+ while( zSql[0] ){
+ rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zSql);
+ if( rc ){
+ char *zMsg = sqlite3_mprintf("error SQL statement [%s]: %s",
+ zSql, sqlite3_errmsg(db));
+ sqlite3_finalize(pStmt);
+ sqlite3_result_error(context, zMsg, -1);
+ sqlite3_free(zMsg);
+ return;
+ }
+ if( !sqlite3_stmt_readonly(pStmt) ){
+ char *zMsg = sqlite3_mprintf("non-query: [%s]", sqlite3_sql(pStmt));
+ sqlite3_finalize(pStmt);
+ sqlite3_result_error(context, zMsg, -1);
+ sqlite3_free(zMsg);
+ return;
+ }
+ nCol = sqlite3_column_count(pStmt);
+ z = sqlite3_sql(pStmt);
+ n = (int)strlen(z);
+ hash_step_vformat(&cx,"S%d:",n);
+ hash_step(&cx,(unsigned char*)z,n);
+
+ /* Compute a hash over the result of the query */
+ while( SQLITE_ROW==sqlite3_step(pStmt) ){
+ hash_step(&cx,(const unsigned char*)"R",1);
+ for(i=0; i<nCol; i++){
+ switch( sqlite3_column_type(pStmt,i) ){
+ case SQLITE_NULL: {
+ hash_step(&cx, (const unsigned char*)"N",1);
+ break;
+ }
+ case SQLITE_INTEGER: {
+ sqlite3_uint64 u;
+ int j;
+ unsigned char x[9];
+ sqlite3_int64 v = sqlite3_column_int64(pStmt,i);
+ memcpy(&u, &v, 8);
+ for(j=8; j>=1; j--){
+ x[j] = u & 0xff;
+ u >>= 8;
+ }
+ x[0] = 'I';
+ hash_step(&cx, x, 9);
+ break;
+ }
+ case SQLITE_FLOAT: {
+ sqlite3_uint64 u;
+ int j;
+ unsigned char x[9];
+ double r = sqlite3_column_double(pStmt,i);
+ memcpy(&u, &r, 8);
+ for(j=8; j>=1; j--){
+ x[j] = u & 0xff;
+ u >>= 8;
+ }
+ x[0] = 'F';
+ hash_step(&cx,x,9);
+ break;
+ }
+ case SQLITE_TEXT: {
+ int n2 = sqlite3_column_bytes(pStmt, i);
+ const unsigned char *z2 = sqlite3_column_text(pStmt, i);
+ hash_step_vformat(&cx,"T%d:",n2);
+ hash_step(&cx, z2, n2);
+ break;
+ }
+ case SQLITE_BLOB: {
+ int n2 = sqlite3_column_bytes(pStmt, i);
+ const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
+ hash_step_vformat(&cx,"B%d:",n2);
+ hash_step(&cx, z2, n2);
+ break;
+ }
+ }
+ }
+ }
+ sqlite3_finalize(pStmt);
+ }
+ hash_finish(&cx, zOut);
+ sqlite3_result_text(context, zOut, 40, SQLITE_TRANSIENT);
+}
+
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int sqlite3_sha_init(
+ sqlite3 *db,
+ char **pzErrMsg,
+ const sqlite3_api_routines *pApi
+){
+ int rc = SQLITE_OK;
+ SQLITE_EXTENSION_INIT2(pApi);
+ (void)pzErrMsg; /* Unused parameter */
+ rc = sqlite3_create_function(db, "sha1", 1,
+ SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
+ 0, sha1Func, 0, 0);
+ if( rc==SQLITE_OK ){
+ rc = sqlite3_create_function(db, "sha1_query", 1,
+ SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
+ sha1QueryFunc, 0, 0);
+ }
+ return rc;
+}
+
+int sqlite3_extension_init(sqlite3 *db, char **err, const sqlite3_api_routines *api)
+{
+ return sqlite3_sha_init(db, err, api);
+}
const std::string &pkgName,
const std::string &path,
app_install_path_type pathType,
- const int authorId)
+ const std::string &authorHash)
{
std::string label;
bool label_executables, label_transmute, follow_symlink = false;
follow_symlink = true;
break;
case SECURITY_MANAGER_PATH_TRUSTED_RW:
- if (authorId < 0)
+ if (authorHash.empty())
ThrowMsg(SmackException::InvalidParam, "You must define author to use PATH_TRUSED_RW");
- label = generatePathTrustedLabel(authorId);
+ label = generatePathTrustedLabel(authorHash);
label_executables = false;
label_transmute = true;
break;
return getSmackLabel(&smack_new_label_from_process, pid);
}
-Smack::Label generatePathTrustedLabel(const int authorId)
+Smack::Label generatePathTrustedLabel(const std::string &authorHash)
{
- if (authorId < 0) {
+ if (authorHash.empty()) {
LogError("Author was not set. It's not possible to generate label for unknown author.");
- ThrowMsg(SmackException::InvalidLabel, "Could not generate valid label without authorId");
+ ThrowMsg(SmackException::InvalidLabel, "Could not generate valid label without author");
}
- return "User::Author::" + std::to_string(authorId);
+ return "User::Author::" + authorHash;
}
void setSmackLabelForFd(int fd, const Smack::Label &label)
TemplateManager::Type type,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId)
+ const std::string &authorHash)
{
Smack::Label pathRWLabel, pathROLabel;
Smack::Label pathTrustedLabel;
pathROLabel = SmackLabels::generatePathROLabel(pkgName);
}
- if (authorId >= 0)
- pathTrustedLabel = SmackLabels::generatePathTrustedLabel(authorId);
+ if (!authorHash.empty())
+ pathTrustedLabel = SmackLabels::generatePathTrustedLabel(authorHash);
Smack::TemplateRules templateRules = m_templateMgr.getRules(type);
const Smack::Label &appProcessLabel,
const Smack::Label &privilegeLabel,
const std::string &pkgName,
- int authorId)
+ const std::string &authorHash)
{
std::string pathRWLabel, pathROLabel;
std::string pathTrustedLabel;
pathROLabel = SmackLabels::generatePathROLabel(pkgName);
}
- if (authorId >= 0)
- pathTrustedLabel = SmackLabels::generatePathTrustedLabel(authorId);
+ if (!authorHash.empty())
+ pathTrustedLabel = SmackLabels::generatePathTrustedLabel(authorHash);
Smack::TemplateRules templateRules = m_templateMgr.getRules(type, privilege);
for (auto rule : templateRules) {
TemplateManager::Type type,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId)
+ const std::string &authorHash)
{
SmackAccesses smackRules;
- addFromTemplate(smackRules, type, appProcessLabel, pkgName, authorId);
+ addFromTemplate(smackRules, type, appProcessLabel, pkgName, authorHash);
if (smack_check())
smackRules.apply();
void SmackRules::installApplicationRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- const int authorId,
+ const std::string &authorHash,
const Smack::Labels &pkgLabels)
{
- useTemplate(TemplateManager::Type::APP_RULES_TEMPLATE, appProcessLabel, pkgName, authorId);
+ useTemplate(TemplateManager::Type::APP_RULES_TEMPLATE, appProcessLabel, pkgName, authorHash);
- if (authorId >= 0)
- useTemplate(TemplateManager::Type::AUTHOR_RULES_TEMPLATE, appProcessLabel, pkgName, authorId);
+ if (!authorHash.empty())
+ useTemplate(TemplateManager::Type::AUTHOR_RULES_TEMPLATE, appProcessLabel, pkgName, authorHash);
updatePackageRules(pkgName, pkgLabels);
}
SmackAccesses &rules,
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges)
{
for (auto &privilege : privileges) {
if (privLabel.empty())
continue;
addFromPrivTemplate(rules, TemplateManager::Type::PRIV_RULES_TEMPLATE, privilege,
- appProcessLabel, privLabel, pkgName, authorId);
+ appProcessLabel, privLabel, pkgName, authorHash);
}
}
void SmackRules::enablePrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges)
{
if (privileges.empty()) {
LogDebug("Enabling privilege rules for " << appProcessLabel);
SmackAccesses smackRules;
- addPrivilegesRules(smackRules, appProcessLabel, pkgName, authorId, privileges);
+ addPrivilegesRules(smackRules, appProcessLabel, pkgName, authorHash, privileges);
if (smack_check())
smackRules.apply();
void SmackRules::disableAllPrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId)
+ const std::string &authorHash)
{
LogDebug("Disabling all privilege rules for " << appProcessLabel);
- disablePrivilegeRules(appProcessLabel, pkgName, authorId, m_templateMgr.getAllMappedPrivs());
+ disablePrivilegeRules(appProcessLabel, pkgName, authorHash, m_templateMgr.getAllMappedPrivs());
}
void SmackRules::disablePrivilegeRules(
const Smack::Label &appProcessLabel,
const std::string &pkgName,
- int authorId,
+ const std::string &authorHash,
const std::vector<std::string> &privileges)
{
if (privileges.empty()) {
LogDebug("Disabling privilege rules for " << appProcessLabel);
SmackAccesses smackRules;
- addPrivilegesRules(smackRules, appProcessLabel, pkgName, authorId, privileges);
+ addPrivilegesRules(smackRules, appProcessLabel, pkgName, authorHash, privileges);
if (smack_check())
smackRules.clear();
TemplateManager::Type::PKG_RULES_TEMPLATE,
std::string(),
pkgName,
- -1);
+ std::string());
generatePackageCrossDeps(smackRules, pkgLabels);
{
SmackAccesses smackRules;
addFromTemplate(smackRules, TemplateManager::Type::PKG_RULES_TEMPLATE,
- std::string(), pkgName, -1);
+ std::string(), pkgName, std::string());
generatePackageCrossDeps(smackRules, pkgLabels);
smackRules.clear();
}
void SmackRules::uninstallApplicationRules(
const Smack::Label &appLabel,
const std::string &pkgName,
- const int authorId)
+ const std::string &authorHash)
{
SmackAccesses smackRules;
addFromTemplate(smackRules, TemplateManager::Type::APP_RULES_TEMPLATE,
- appLabel, pkgName, authorId);
+ appLabel, pkgName, authorHash);
if (isPrivilegeMappingEnabled())
- addPrivilegesRules(smackRules, appLabel, pkgName, authorId, m_templateMgr.getAllMappedPrivs());
+ addPrivilegesRules(smackRules, appLabel, pkgName, authorHash, m_templateMgr.getAllMappedPrivs());
smackRules.clear();
SmackLabels::revokeSubject(appLabel);
}
-void SmackRules::uninstallAuthorRules(const int authorId)
+void SmackRules::uninstallAuthorRules(const std::string &authorHash)
{
SmackAccesses smackRules;
addFromTemplate(smackRules, TemplateManager::Type::AUTHOR_RULES_TEMPLATE,
- std::string(), std::string(), authorId);
+ std::string(), std::string(), authorHash);
smackRules.clear();
}
constexpr int MAX_PKG_NAME_LEN = SMACK_LABEL_LEN - (sizeof "User::Pkg::" - 1);
+constexpr int AUTHOR_HASH_LEN = 16;
+
// string view (O(1) memory pointer to a string with no trailing \0)
//
// Views are used to avoid data copying and foster memory locality.
PageTape pkgsInfo{3};
-// package information is retrieved via "SELECT name, is_hybrid, author_id, pkg_id FROM pkg ORDER BY pkg_id"
+// package information is retrieved via "SELECT pkg.name, pkg.is_hybrid, author.hash, pkg.pkg_id FROM pkg LEFT JOIN author ON pkg.author_id = author.author_id ORDER by pkg.pkg_id"
// the result is scanned row by row and serialize into the pkgsInfo tape as follows:
-// uint8_t flags = PkgFlag::hybrid * bool(is_hybrid) + PkgFlag::selected * bool(selected) + PkgFlag::authorLen * strlen(to_string(author_id))
-// if author_id not null
-// char[strlen(to_string(author_id))] to_string(author_id) // no length (stored already in flags) nor trailing \0
+// uint8_t flags = PkgFlag::hybrid * bool(is_hybrid) + PkgFlag::selected * bool(selected) + PkgFlag::haveAuthor * bool(author.hash)
+// if author.hash not null
+// char[AUTHOR_HASH_LEN] author_hash // no length nor trailing \0
// uint8_t strlen(name)
// char[strlen(name)] name // no trailing \0
// if is_hybrid
enum PkgFlag : uint8_t {
hybrid = 1,
selected = 2,
- authorLen = 4,
+ haveAuthor = 4,
};
// when gathering package information: author identifier dictionary; each entry stored as:
-// sqlite3_int64 author_id
-// uint8_t strlen(to_string(author_id))
-// char[strlen(to_string(author_id))] to_string(author_id) // no trailing \0
-// // align up to alignof(sqlite3_int64) for the next entry
+// char[AUTHOR_HASH_LEN] author_hash // no trailing \0
//
// when writing package rules: process label suffixes for the current package
// non-hybrid:
// length changes depending on the context
StrView pl{pkgL.str, 0};
-// stringification of author_id
// ("User::Author::" + pathTrusted) corresponds to the ~PATH_TRUSTED~ rule template variable
StrView pathTrusted;
// used when writing app-to-app rules within the same package
StrView pkgLApp{pkgL.str, 0};
-// temporary buffer for decimal author_id stringification (not \0-terminated)
-char authorBuf[std::numeric_limits<sqlite3_int64>::digits10 + 1];
-static_assert(sizeof authorBuf <= 256 / PkgFlag::authorLen, "author string length does not fit in package flag byte");
-
// fallback database path if not null
char const *cachedFallbackPath;
char const *getFallbackPath() {
return false;
}
+ if (unlikely(SQLITE_OK != sqlite3_enable_load_extension(db, 1))) {
+ toStderr("not authorized to load extension");
+ return false;
+ }
+
// good for robustness in the face of unlikely poweroffs, must be turned on per connection
if (unlikely(!dbExec("PRAGMA synchronous=EXTRA"))) {
toStderr("pragma synchronous failed");
// results of both queries can then be processed in sorted order to achieve a linear complexity join
// package metadata query sorted by pkg_id
- if (unlikely(!(pkgq = prep("SELECT name, is_hybrid, author_id, pkg_id FROM pkg ORDER BY pkg_id")))) {
+ if (unlikely(!(pkgq = prep("SELECT pkg.name, pkg.is_hybrid, author.hash, pkg.pkg_id FROM pkg LEFT JOIN author ON pkg.author_id = author.author_id ORDER by pkg.pkg_id")))) {
toStderr("package metadata query preparation failed");
return false;
}
// start constructing pkgFlags
const bool hybrid = sqlite3_column_int(pkgq, 1);
- const bool haveAuthor = SQLITE_INTEGER == sqlite3_column_type(pkgq, 2);
size_t pkgFlags = hybrid * PkgFlag::hybrid;
- // the package has an author - retrieve its stringification and emit author-only rules
+ // make pathTrusted point to the author_hash
+ pathTrusted.str = colStr(pkgq, 2);
+ pathTrusted.size = AUTHOR_HASH_LEN;
+ const bool haveAuthor = pathTrusted.str;
+
+ // the package has an author, emit author-only rules
//
- // author_id stringification is expensive, particularly because author_id is an sqlite_int64 even on 32-bit platforms
- // author-only rules should also be emitted just once for a particular author_id to avoid duplication and its runtime impact
+ // author-only rules should be emitted just once for a particular author to avoid duplication and its runtime impact
//
// since the expected number of authors is small (say < 200 or so) and typically extremely small (< 50),
- // pkgLabels is used as a linear dictionary holding (authorId, to_string(authorId)) tuples
- // every distinct authorId is stringified exactly once
+ // pkgLabels is used as a linear dictionary holding author_hash'es
if (haveAuthor) {
- const auto authorId = sqlite3_column_int64(pkgq, 2);
-
- // search for authorId in the linear dictionary
+ // search for author in the linear dictionary
bool found = false;
auto auit = pkgLabels.start();
while (auit) {
- const auto id = auit.get<decltype(authorId)>();
- // string view into a stringification already in the tape
- pathTrusted = auit(auit());
- if (authorId == id) {
+ char* hash = reinterpret_cast<char*>(auit.ptr);
+ auit += AUTHOR_HASH_LEN;
+ if (memcmp(pathTrusted.str, hash, AUTHOR_HASH_LEN) == 0) {
found = true;
break;
}
- auit.align(alignof(decltype(authorId)));
}
// not found - add to dictionary
if (unlikely(!found)) {
- // stringify into authorBuf right-to-left
- size_t len = 0;
- typename std::make_unsigned<std::decay<decltype(authorId)>::type>::type n = authorId;
- do {
- authorBuf[sizeof authorBuf - 1 - len++] = '0' + n % 10U;
- } while (n /= 10U);
-
- // make pathTrusted point to the stringification
- pathTrusted.str = authorBuf + (sizeof authorBuf - len);
- pathTrusted.size = len;
-
// emit author rules now that pathTrusted denotes a newly discovered author
// rules contain author as the sole variable, ex. "User ~PATH_TRUSTED~ rwxat"
//
if (likely(systemRules))
rulesAuthor();
- // append the (authorId,pathTrusted) tuple to the linear dictionary
- pkgLabels.reserve(2 * sizeof authorId + sizeof authorBuf);
- pkgLabels += authorId;
- pkgLabels += uint8_t(len);
+ // append pathTrusted to the linear dictionary
+ pkgLabels.reserve(AUTHOR_HASH_LEN);
pkgLabels += pathTrusted;
- pkgLabels.align(alignof(decltype(authorId)));
}
- // add authorId stringification length to pkgFlags
- pkgFlags += pathTrusted.size * PkgFlag::authorLen;
+ // add haveAuthor flag to pkgFlags
+ pkgFlags += haveAuthor * PkgFlag::haveAuthor;
}
// select all packages if allRules flag is enabled
// add selected flag to pkgFlags
pkgFlags += selected * PkgFlag::selected;
- // more precise calculations would be wasteful because padding and author len
- pkgsInfo.reserve(1 + sizeof authorBuf + 1 + SMACK_LABEL_LEN + alignof(sqlite3_int64) - 1 + sizeof(sqlite3_int64));
+ // more precise calculations would be wasteful because padding
+ pkgsInfo.reserve(1 + AUTHOR_HASH_LEN + 1 + SMACK_LABEL_LEN + alignof(sqlite3_int64) - 1 + sizeof(sqlite3_int64));
// add package info to the pkgsInfo tape
pkgsInfo += uint8_t(pkgFlags);
const size_t pkgFlags = pkit();
const bool hybrid = pkgFlags & PkgFlag::hybrid;
const bool selected = pkgFlags & PkgFlag::selected;
- const auto authorLen = pkgFlags / PkgFlag::authorLen;
- if (authorLen) {
+ const bool haveAuthor = pkgFlags & PkgFlag::haveAuthor;
+ if (haveAuthor) {
pathTrusted.str = reinterpret_cast<char*>(pkit.ptr);
- pathTrusted.size = authorLen;
- pkit += authorLen;
+ pathTrusted.size = AUTHOR_HASH_LEN;
+ pkit += AUTHOR_HASH_LEN;
}
// put pkg.name right after "User::Pkg::" in pkgL so that pkgL = "User::Pkg::" + pkg.name
//
// "~PROCESS~ " == pl
// ~PATH_TRUSTED~ == "User::Author::" + pathTrusted
- if (likely(authorLen)) rulesPkgLabelAuthor();
+ if (likely(haveAuthor)) rulesPkgLabelAuthor();
// application-to-different-application rules within the package
size_t obj = 0;
security-privilege-manager
mount
libcap
+ openssl1.1
)
FIND_PACKAGE(Threads REQUIRED)
-System User::Author::1 rwxat
+System User::Author::0fdfb83545aabc1f rwxat
+System User::Author::42a5f0d50138e7f3 rwxat
+System User::Author::b1c7dc06f99e70d0 rwxat
System User::Pkg::attach-panel-camera rwxat
System User::Pkg::attach-panel-camera::RO rwxat
System User::Pkg::attach-panel-document rwxat
System User::Pkg::pkg100::App::add100 rwxat
System User::Pkg::pkg100::App::app100 rwxat
System User::Pkg::pkg100::RO rwxat
+System User::Pkg::pkg101 rwxat
+System User::Pkg::pkg101::RO rwxat
+System User::Pkg::pkg102 rwxat
+System User::Pkg::pkg102::RO rwxat
System User::Pkg::pkg10::App::abb10 rwxat
System User::Pkg::pkg10::App::acc10 rwxat
System User::Pkg::pkg10::App::add10 rwxat
System User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System User::Pkg::wifi-efl-ug rwxat
System User::Pkg::wifi-efl-ug::RO rwxat
-System::Privileged User::Author::1 rwxat
+System::Privileged User::Author::0fdfb83545aabc1f rwxat
+System::Privileged User::Author::42a5f0d50138e7f3 rwxat
+System::Privileged User::Author::b1c7dc06f99e70d0 rwxat
System::Privileged User::Pkg::attach-panel-camera rwxat
System::Privileged User::Pkg::attach-panel-camera::RO rwxat
System::Privileged User::Pkg::attach-panel-document rwxat
System::Privileged User::Pkg::pkg100::App::add100 rwxat
System::Privileged User::Pkg::pkg100::App::app100 rwxat
System::Privileged User::Pkg::pkg100::RO rwxat
+System::Privileged User::Pkg::pkg101 rwxat
+System::Privileged User::Pkg::pkg101::RO rwxat
+System::Privileged User::Pkg::pkg102 rwxat
+System::Privileged User::Pkg::pkg102::RO rwxat
System::Privileged User::Pkg::pkg10::App::abb10 rwxat
System::Privileged User::Pkg::pkg10::App::acc10 rwxat
System::Privileged User::Pkg::pkg10::App::add10 rwxat
System::Privileged User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System::Privileged User::Pkg::wifi-efl-ug rwxat
System::Privileged User::Pkg::wifi-efl-ug::RO rwxat
-User User::Author::1 rwxat
+User User::Author::0fdfb83545aabc1f rwxat
+User User::Author::42a5f0d50138e7f3 rwxat
+User User::Author::b1c7dc06f99e70d0 rwxat
User User::Pkg::attach-panel-camera rwxat
User User::Pkg::attach-panel-camera::RO rwxat
User User::Pkg::attach-panel-document rwxat
User User::Pkg::pkg100::App::add100 rwxat
User User::Pkg::pkg100::App::app100 rwxat
User User::Pkg::pkg100::RO rwxat
+User User::Pkg::pkg101 rwxat
+User User::Pkg::pkg101::RO rwxat
+User User::Pkg::pkg102 rwxat
+User User::Pkg::pkg102::RO rwxat
User User::Pkg::pkg10::App::abb10 rwxat
User User::Pkg::pkg10::App::acc10 rwxat
User User::Pkg::pkg10::App::add10 rwxat
User::Pkg::org.tizen.app-selector System::Shared rxl
User::Pkg::org.tizen.app-selector User wx
User::Pkg::org.tizen.app-selector User::App::Shared rwxat
-User::Pkg::org.tizen.app-selector User::Author::1 rwxat
+User::Pkg::org.tizen.app-selector User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.app-selector User::Home rxl
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector rwxat
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector::RO rxl
User::Pkg::org.tizen.bluetooth-share-ui System::Shared rxl
User::Pkg::org.tizen.bluetooth-share-ui User wx
User::Pkg::org.tizen.bluetooth-share-ui User::App::Shared rwxat
-User::Pkg::org.tizen.bluetooth-share-ui User::Author::1 rwxat
+User::Pkg::org.tizen.bluetooth-share-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Home rxl
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui::RO rxl
User::Pkg::org.tizen.calendar System::Shared rxl
User::Pkg::org.tizen.calendar User wx
User::Pkg::org.tizen.calendar User::App::Shared rwxat
-User::Pkg::org.tizen.calendar User::Author::1 rwxat
+User::Pkg::org.tizen.calendar User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.calendar User::Home rxl
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar rwxat
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar::RO rxl
User::Pkg::org.tizen.call-setting System::Shared rxl
User::Pkg::org.tizen.call-setting User wx
User::Pkg::org.tizen.call-setting User::App::Shared rwxat
-User::Pkg::org.tizen.call-setting User::Author::1 rwxat
+User::Pkg::org.tizen.call-setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-setting User::Home rxl
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting rwxat
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting::RO rxl
User::Pkg::org.tizen.call-ui System::Shared rxl
User::Pkg::org.tizen.call-ui User wx
User::Pkg::org.tizen.call-ui User::App::Shared rwxat
-User::Pkg::org.tizen.call-ui User::Author::1 rwxat
+User::Pkg::org.tizen.call-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-ui User::Home rxl
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui rwxat
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui::RO rxl
User::Pkg::org.tizen.camera-app System::Shared rxl
User::Pkg::org.tizen.camera-app User wx
User::Pkg::org.tizen.camera-app User::App::Shared rwxat
-User::Pkg::org.tizen.camera-app User::Author::1 rwxat
+User::Pkg::org.tizen.camera-app User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.camera-app User::Home rxl
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app rwxat
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app::RO rxl
User::Pkg::org.tizen.clock System::Shared rxl
User::Pkg::org.tizen.clock User wx
User::Pkg::org.tizen.clock User::App::Shared rwxat
-User::Pkg::org.tizen.clock User::Author::1 rwxat
+User::Pkg::org.tizen.clock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.clock User::Home rxl
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock rwxat
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock::RO rxl
User::Pkg::org.tizen.contacts System::Shared rxl
User::Pkg::org.tizen.contacts User wx
User::Pkg::org.tizen.contacts User::App::Shared rwxat
-User::Pkg::org.tizen.contacts User::Author::1 rwxat
+User::Pkg::org.tizen.contacts User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.contacts User::Home rxl
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts rwxat
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts::RO rxl
User::Pkg::org.tizen.download-manager System::Shared rxl
User::Pkg::org.tizen.download-manager User wx
User::Pkg::org.tizen.download-manager User::App::Shared rwxat
-User::Pkg::org.tizen.download-manager User::Author::1 rwxat
+User::Pkg::org.tizen.download-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.download-manager User::Home rxl
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager rwxat
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager::RO rxl
User::Pkg::org.tizen.email System::Shared rxl
User::Pkg::org.tizen.email User wx
User::Pkg::org.tizen.email User::App::Shared rwxat
-User::Pkg::org.tizen.email User::Author::1 rwxat
+User::Pkg::org.tizen.email User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.email User::Home rxl
User::Pkg::org.tizen.email User::Pkg::org.tizen.email rwxat
User::Pkg::org.tizen.email User::Pkg::org.tizen.email::RO rxl
User::Pkg::org.tizen.homescreen-efl System::Shared rxl
User::Pkg::org.tizen.homescreen-efl User wx
User::Pkg::org.tizen.homescreen-efl User::App::Shared rwxat
-User::Pkg::org.tizen.homescreen-efl User::Author::1 rwxat
+User::Pkg::org.tizen.homescreen-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.homescreen-efl User::Home rxl
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl rwxat
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl::RO rxl
User::Pkg::org.tizen.image-viewer System::Shared rxl
User::Pkg::org.tizen.image-viewer User wx
User::Pkg::org.tizen.image-viewer User::App::Shared rwxat
-User::Pkg::org.tizen.image-viewer User::Author::1 rwxat
+User::Pkg::org.tizen.image-viewer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.image-viewer User::Home rxl
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer rwxat
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer::RO rxl
User::Pkg::org.tizen.indicator System::Shared rxl
User::Pkg::org.tizen.indicator User wx
User::Pkg::org.tizen.indicator User::App::Shared rwxat
-User::Pkg::org.tizen.indicator User::Author::1 rwxat
+User::Pkg::org.tizen.indicator User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.indicator User::Home rxl
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator rwxat
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator::RO rxl
User::Pkg::org.tizen.installer System::Shared rxl
User::Pkg::org.tizen.installer User wx
User::Pkg::org.tizen.installer User::App::Shared rwxat
-User::Pkg::org.tizen.installer User::Author::1 rwxat
+User::Pkg::org.tizen.installer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.installer User::Home rxl
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer rwxat
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer::RO rxl
User::Pkg::org.tizen.lockscreen System::Shared rxl
User::Pkg::org.tizen.lockscreen User wx
User::Pkg::org.tizen.lockscreen User::App::Shared rwxat
-User::Pkg::org.tizen.lockscreen User::Author::1 rwxat
+User::Pkg::org.tizen.lockscreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.lockscreen User::Home rxl
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen rwxat
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen::RO rxl
User::Pkg::org.tizen.memo System::Shared rxl
User::Pkg::org.tizen.memo User wx
User::Pkg::org.tizen.memo User::App::Shared rwxat
-User::Pkg::org.tizen.memo User::Author::1 rwxat
+User::Pkg::org.tizen.memo User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.memo User::Home rxl
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo rwxat
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo::RO rxl
User::Pkg::org.tizen.message System::Shared rxl
User::Pkg::org.tizen.message User wx
User::Pkg::org.tizen.message User::App::Shared rwxat
-User::Pkg::org.tizen.message User::Author::1 rwxat
+User::Pkg::org.tizen.message User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.message User::Home rxl
User::Pkg::org.tizen.message User::Pkg::org.tizen.message rwxat
User::Pkg::org.tizen.message User::Pkg::org.tizen.message::RO rxl
User::Pkg::org.tizen.msg-manager System::Shared rxl
User::Pkg::org.tizen.msg-manager User wx
User::Pkg::org.tizen.msg-manager User::App::Shared rwxat
-User::Pkg::org.tizen.msg-manager User::Author::1 rwxat
+User::Pkg::org.tizen.msg-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.msg-manager User::Home rxl
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager rwxat
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager::RO rxl
User::Pkg::org.tizen.music-player System::Shared rxl
User::Pkg::org.tizen.music-player User wx
User::Pkg::org.tizen.music-player User::App::Shared rwxat
-User::Pkg::org.tizen.music-player User::Author::1 rwxat
+User::Pkg::org.tizen.music-player User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.music-player User::Home rxl
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player rwxat
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player::RO rxl
User::Pkg::org.tizen.myfile System::Shared rxl
User::Pkg::org.tizen.myfile User wx
User::Pkg::org.tizen.myfile User::App::Shared rwxat
-User::Pkg::org.tizen.myfile User::Author::1 rwxat
+User::Pkg::org.tizen.myfile User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.myfile User::Home rxl
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile rwxat
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile::RO rxl
User::Pkg::org.tizen.quickpanel System::Shared rxl
User::Pkg::org.tizen.quickpanel User wx
User::Pkg::org.tizen.quickpanel User::App::Shared rwxat
-User::Pkg::org.tizen.quickpanel User::Author::1 rwxat
+User::Pkg::org.tizen.quickpanel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.quickpanel User::Home rxl
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel rwxat
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel::RO rxl
User::Pkg::org.tizen.setting System::Shared rxl
User::Pkg::org.tizen.setting User wx
User::Pkg::org.tizen.setting User::App::Shared rwxat
-User::Pkg::org.tizen.setting User::Author::1 rwxat
+User::Pkg::org.tizen.setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting User::Home rxl
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting rwxat
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting::RO rxl
User::Pkg::org.tizen.setting-homescreen System::Shared rxl
User::Pkg::org.tizen.setting-homescreen User wx
User::Pkg::org.tizen.setting-homescreen User::App::Shared rwxat
-User::Pkg::org.tizen.setting-homescreen User::Author::1 rwxat
+User::Pkg::org.tizen.setting-homescreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-homescreen User::Home rxl
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen rwxat
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen::RO rxl
User::Pkg::org.tizen.setting-notification System::Shared rxl
User::Pkg::org.tizen.setting-notification User wx
User::Pkg::org.tizen.setting-notification User::App::Shared rwxat
-User::Pkg::org.tizen.setting-notification User::Author::1 rwxat
+User::Pkg::org.tizen.setting-notification User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-notification User::Home rxl
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification rwxat
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification::RO rxl
User::Pkg::org.tizen.share-panel System::Shared rxl
User::Pkg::org.tizen.share-panel User wx
User::Pkg::org.tizen.share-panel User::App::Shared rwxat
-User::Pkg::org.tizen.share-panel User::Author::1 rwxat
+User::Pkg::org.tizen.share-panel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.share-panel User::Home rxl
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel rwxat
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel::RO rxl
User::Pkg::org.tizen.sys-lock System::Shared rxl
User::Pkg::org.tizen.sys-lock User wx
User::Pkg::org.tizen.sys-lock User::App::Shared rwxat
-User::Pkg::org.tizen.sys-lock User::Author::1 rwxat
+User::Pkg::org.tizen.sys-lock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.sys-lock User::Home rxl
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock rwxat
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock::RO rxl
User::Pkg::org.tizen.task-mgr System::Shared rxl
User::Pkg::org.tizen.task-mgr User wx
User::Pkg::org.tizen.task-mgr User::App::Shared rwxat
-User::Pkg::org.tizen.task-mgr User::Author::1 rwxat
+User::Pkg::org.tizen.task-mgr User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.task-mgr User::Home rxl
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr rwxat
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr::RO rxl
User::Pkg::org.tizen.ug-gallery-efl System::Shared rxl
User::Pkg::org.tizen.ug-gallery-efl User wx
User::Pkg::org.tizen.ug-gallery-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-gallery-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-gallery-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Home rxl
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl::RO rxl
User::Pkg::org.tizen.ug-lockscreen-options System::Shared rxl
User::Pkg::org.tizen.ug-lockscreen-options User wx
User::Pkg::org.tizen.ug-lockscreen-options User::App::Shared rwxat
-User::Pkg::org.tizen.ug-lockscreen-options User::Author::1 rwxat
+User::Pkg::org.tizen.ug-lockscreen-options User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Home rxl
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options::RO rxl
User::Pkg::org.tizen.ug-myfile-efl System::Shared rxl
User::Pkg::org.tizen.ug-myfile-efl User wx
User::Pkg::org.tizen.ug-myfile-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-myfile-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-myfile-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Home rxl
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl::RO rxl
User::Pkg::org.tizen.videos System::Shared rxl
User::Pkg::org.tizen.videos User wx
User::Pkg::org.tizen.videos User::App::Shared rwxat
-User::Pkg::org.tizen.videos User::Author::1 rwxat
+User::Pkg::org.tizen.videos User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.videos User::Home rxl
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos rwxat
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos::RO rxl
User::Pkg::org.tizen.volume System::Shared rxl
User::Pkg::org.tizen.volume User wx
User::Pkg::org.tizen.volume User::App::Shared rwxat
-User::Pkg::org.tizen.volume User::Author::1 rwxat
+User::Pkg::org.tizen.volume User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.volume User::Home rxl
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume rwxat
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume::RO rxl
User::Pkg::org.tizen.wallpaper-ui-service System::Shared rxl
User::Pkg::org.tizen.wallpaper-ui-service User wx
User::Pkg::org.tizen.wallpaper-ui-service User::App::Shared rwxat
-User::Pkg::org.tizen.wallpaper-ui-service User::Author::1 rwxat
+User::Pkg::org.tizen.wallpaper-ui-service User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Home rxl
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service::RO rxl
User::Pkg::org.tizen.wifi-direct-popup System::Shared rxl
User::Pkg::org.tizen.wifi-direct-popup User wx
User::Pkg::org.tizen.wifi-direct-popup User::App::Shared rwxat
-User::Pkg::org.tizen.wifi-direct-popup User::Author::1 rwxat
+User::Pkg::org.tizen.wifi-direct-popup User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Home rxl
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup::RO rxl
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::App::add100 rwxat
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::RO rxl
User::Pkg::pkg100::App::app100 _ l
+User::Pkg::pkg101 System wx
+User::Pkg::pkg101 System::Log rwxa
+User::Pkg::pkg101 System::Privileged wx
+User::Pkg::pkg101 System::Run rwxat
+User::Pkg::pkg101 System::Shared rxl
+User::Pkg::pkg101 User wx
+User::Pkg::pkg101 User::App::Shared rwxat
+User::Pkg::pkg101 User::Author::0fdfb83545aabc1f rwxat
+User::Pkg::pkg101 User::Home rxl
+User::Pkg::pkg101 User::Pkg::pkg101 rwxat
+User::Pkg::pkg101 User::Pkg::pkg101::RO rxl
+User::Pkg::pkg101 _ l
+User::Pkg::pkg102 System wx
+User::Pkg::pkg102 System::Log rwxa
+User::Pkg::pkg102 System::Privileged wx
+User::Pkg::pkg102 System::Run rwxat
+User::Pkg::pkg102 System::Shared rxl
+User::Pkg::pkg102 User wx
+User::Pkg::pkg102 User::App::Shared rwxat
+User::Pkg::pkg102 User::Author::b1c7dc06f99e70d0 rwxat
+User::Pkg::pkg102 User::Home rxl
+User::Pkg::pkg102 User::Pkg::pkg102 rwxat
+User::Pkg::pkg102 User::Pkg::pkg102::RO rxl
+User::Pkg::pkg102 _ l
User::Pkg::pkg10::App::abb10 System wx
User::Pkg::pkg10::App::abb10 System::Log rwxa
User::Pkg::pkg10::App::abb10 System::Privileged wx
-System User::Author::1 rwxat
+System User::Author::0fdfb83545aabc1f rwxat
+System User::Author::42a5f0d50138e7f3 rwxat
+System User::Author::b1c7dc06f99e70d0 rwxat
System User::Pkg::attach-panel-camera rwxat
System User::Pkg::attach-panel-camera::RO rwxat
System User::Pkg::attach-panel-document rwxat
System User::Pkg::pkg100::App::add100 rwxat
System User::Pkg::pkg100::App::app100 rwxat
System User::Pkg::pkg100::RO rwxat
+System User::Pkg::pkg101 rwxat
+System User::Pkg::pkg101::RO rwxat
+System User::Pkg::pkg102 rwxat
+System User::Pkg::pkg102::RO rwxat
System User::Pkg::pkg10::App::abb10 rwxat
System User::Pkg::pkg10::App::acc10 rwxat
System User::Pkg::pkg10::App::add10 rwxat
System User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System User::Pkg::wifi-efl-ug rwxat
System User::Pkg::wifi-efl-ug::RO rwxat
-System::Privileged User::Author::1 rwxat
+System::Privileged User::Author::0fdfb83545aabc1f rwxat
+System::Privileged User::Author::42a5f0d50138e7f3 rwxat
+System::Privileged User::Author::b1c7dc06f99e70d0 rwxat
System::Privileged User::Pkg::attach-panel-camera rwxat
System::Privileged User::Pkg::attach-panel-camera::RO rwxat
System::Privileged User::Pkg::attach-panel-document rwxat
System::Privileged User::Pkg::pkg100::App::add100 rwxat
System::Privileged User::Pkg::pkg100::App::app100 rwxat
System::Privileged User::Pkg::pkg100::RO rwxat
+System::Privileged User::Pkg::pkg101 rwxat
+System::Privileged User::Pkg::pkg101::RO rwxat
+System::Privileged User::Pkg::pkg102 rwxat
+System::Privileged User::Pkg::pkg102::RO rwxat
System::Privileged User::Pkg::pkg10::App::abb10 rwxat
System::Privileged User::Pkg::pkg10::App::acc10 rwxat
System::Privileged User::Pkg::pkg10::App::add10 rwxat
System::Privileged User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System::Privileged User::Pkg::wifi-efl-ug rwxat
System::Privileged User::Pkg::wifi-efl-ug::RO rwxat
-User User::Author::1 rwxat
+User User::Author::0fdfb83545aabc1f rwxat
+User User::Author::42a5f0d50138e7f3 rwxat
+User User::Author::b1c7dc06f99e70d0 rwxat
User User::Pkg::attach-panel-camera rwxat
User User::Pkg::attach-panel-camera::RO rwxat
User User::Pkg::attach-panel-document rwxat
User User::Pkg::pkg100::App::add100 rwxat
User User::Pkg::pkg100::App::app100 rwxat
User User::Pkg::pkg100::RO rwxat
+User User::Pkg::pkg101 rwxat
+User User::Pkg::pkg101::RO rwxat
+User User::Pkg::pkg102 rwxat
+User User::Pkg::pkg102::RO rwxat
User User::Pkg::pkg10::App::abb10 rwxat
User User::Pkg::pkg10::App::acc10 rwxat
User User::Pkg::pkg10::App::add10 rwxat
User::Pkg::org.tizen.gallery System::Shared rxl
User::Pkg::org.tizen.gallery User wx
User::Pkg::org.tizen.gallery User::App::Shared rwxat
-User::Pkg::org.tizen.gallery User::Author::1 rwxat
+User::Pkg::org.tizen.gallery User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.gallery User::Home rxl
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery rwxat
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery::RO rxl
-System User::Author::1 rwxat
+System User::Author::0fdfb83545aabc1f rwxat
+System User::Author::42a5f0d50138e7f3 rwxat
+System User::Author::b1c7dc06f99e70d0 rwxat
System User::Pkg::attach-panel-camera rwxat
System User::Pkg::attach-panel-camera::RO rwxat
System User::Pkg::attach-panel-document rwxat
System User::Pkg::pkg100::App::add100 rwxat
System User::Pkg::pkg100::App::app100 rwxat
System User::Pkg::pkg100::RO rwxat
+System User::Pkg::pkg101 rwxat
+System User::Pkg::pkg101::RO rwxat
+System User::Pkg::pkg102 rwxat
+System User::Pkg::pkg102::RO rwxat
System User::Pkg::pkg10::App::abb10 rwxat
System User::Pkg::pkg10::App::acc10 rwxat
System User::Pkg::pkg10::App::add10 rwxat
System User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System User::Pkg::wifi-efl-ug rwxat
System User::Pkg::wifi-efl-ug::RO rwxat
-System::Privileged User::Author::1 rwxat
+System::Privileged User::Author::0fdfb83545aabc1f rwxat
+System::Privileged User::Author::42a5f0d50138e7f3 rwxat
+System::Privileged User::Author::b1c7dc06f99e70d0 rwxat
System::Privileged User::Pkg::attach-panel-camera rwxat
System::Privileged User::Pkg::attach-panel-camera::RO rwxat
System::Privileged User::Pkg::attach-panel-document rwxat
System::Privileged User::Pkg::pkg100::App::add100 rwxat
System::Privileged User::Pkg::pkg100::App::app100 rwxat
System::Privileged User::Pkg::pkg100::RO rwxat
+System::Privileged User::Pkg::pkg101 rwxat
+System::Privileged User::Pkg::pkg101::RO rwxat
+System::Privileged User::Pkg::pkg102 rwxat
+System::Privileged User::Pkg::pkg102::RO rwxat
System::Privileged User::Pkg::pkg10::App::abb10 rwxat
System::Privileged User::Pkg::pkg10::App::acc10 rwxat
System::Privileged User::Pkg::pkg10::App::add10 rwxat
System::Privileged User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System::Privileged User::Pkg::wifi-efl-ug rwxat
System::Privileged User::Pkg::wifi-efl-ug::RO rwxat
-User User::Author::1 rwxat
+User User::Author::0fdfb83545aabc1f rwxat
+User User::Author::42a5f0d50138e7f3 rwxat
+User User::Author::b1c7dc06f99e70d0 rwxat
User User::Pkg::attach-panel-camera rwxat
User User::Pkg::attach-panel-camera::RO rwxat
User User::Pkg::attach-panel-document rwxat
User User::Pkg::pkg100::App::add100 rwxat
User User::Pkg::pkg100::App::app100 rwxat
User User::Pkg::pkg100::RO rwxat
+User User::Pkg::pkg101 rwxat
+User User::Pkg::pkg101::RO rwxat
+User User::Pkg::pkg102 rwxat
+User User::Pkg::pkg102::RO rwxat
User User::Pkg::pkg10::App::abb10 rwxat
User User::Pkg::pkg10::App::acc10 rwxat
User User::Pkg::pkg10::App::add10 rwxat
User::Pkg::org.tizen.app-selector System::Shared rxl
User::Pkg::org.tizen.app-selector User wx
User::Pkg::org.tizen.app-selector User::App::Shared rwxat
-User::Pkg::org.tizen.app-selector User::Author::1 rwxat
+User::Pkg::org.tizen.app-selector User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.app-selector User::Home rxl
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector rwxat
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector::RO rxl
User::Pkg::org.tizen.bluetooth-share-ui System::Shared rxl
User::Pkg::org.tizen.bluetooth-share-ui User wx
User::Pkg::org.tizen.bluetooth-share-ui User::App::Shared rwxat
-User::Pkg::org.tizen.bluetooth-share-ui User::Author::1 rwxat
+User::Pkg::org.tizen.bluetooth-share-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Home rxl
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui::RO rxl
User::Pkg::org.tizen.calendar System::Shared rxl
User::Pkg::org.tizen.calendar User wx
User::Pkg::org.tizen.calendar User::App::Shared rwxat
-User::Pkg::org.tizen.calendar User::Author::1 rwxat
+User::Pkg::org.tizen.calendar User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.calendar User::Home rxl
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar rwxat
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar::RO rxl
User::Pkg::org.tizen.call-setting System::Shared rxl
User::Pkg::org.tizen.call-setting User wx
User::Pkg::org.tizen.call-setting User::App::Shared rwxat
-User::Pkg::org.tizen.call-setting User::Author::1 rwxat
+User::Pkg::org.tizen.call-setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-setting User::Home rxl
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting rwxat
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting::RO rxl
User::Pkg::org.tizen.call-ui System::Shared rxl
User::Pkg::org.tizen.call-ui User wx
User::Pkg::org.tizen.call-ui User::App::Shared rwxat
-User::Pkg::org.tizen.call-ui User::Author::1 rwxat
+User::Pkg::org.tizen.call-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-ui User::Home rxl
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui rwxat
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui::RO rxl
User::Pkg::org.tizen.camera-app System::Shared rxl
User::Pkg::org.tizen.camera-app User wx
User::Pkg::org.tizen.camera-app User::App::Shared rwxat
-User::Pkg::org.tizen.camera-app User::Author::1 rwxat
+User::Pkg::org.tizen.camera-app User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.camera-app User::Home rxl
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app rwxat
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app::RO rxl
User::Pkg::org.tizen.clock System::Shared rxl
User::Pkg::org.tizen.clock User wx
User::Pkg::org.tizen.clock User::App::Shared rwxat
-User::Pkg::org.tizen.clock User::Author::1 rwxat
+User::Pkg::org.tizen.clock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.clock User::Home rxl
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock rwxat
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock::RO rxl
User::Pkg::org.tizen.contacts System::Shared rxl
User::Pkg::org.tizen.contacts User wx
User::Pkg::org.tizen.contacts User::App::Shared rwxat
-User::Pkg::org.tizen.contacts User::Author::1 rwxat
+User::Pkg::org.tizen.contacts User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.contacts User::Home rxl
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts rwxat
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts::RO rxl
User::Pkg::org.tizen.download-manager System::Shared rxl
User::Pkg::org.tizen.download-manager User wx
User::Pkg::org.tizen.download-manager User::App::Shared rwxat
-User::Pkg::org.tizen.download-manager User::Author::1 rwxat
+User::Pkg::org.tizen.download-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.download-manager User::Home rxl
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager rwxat
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager::RO rxl
User::Pkg::org.tizen.email System::Shared rxl
User::Pkg::org.tizen.email User wx
User::Pkg::org.tizen.email User::App::Shared rwxat
-User::Pkg::org.tizen.email User::Author::1 rwxat
+User::Pkg::org.tizen.email User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.email User::Home rxl
User::Pkg::org.tizen.email User::Pkg::org.tizen.email rwxat
User::Pkg::org.tizen.email User::Pkg::org.tizen.email::RO rxl
User::Pkg::org.tizen.homescreen-efl System::Shared rxl
User::Pkg::org.tizen.homescreen-efl User wx
User::Pkg::org.tizen.homescreen-efl User::App::Shared rwxat
-User::Pkg::org.tizen.homescreen-efl User::Author::1 rwxat
+User::Pkg::org.tizen.homescreen-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.homescreen-efl User::Home rxl
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl rwxat
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl::RO rxl
User::Pkg::org.tizen.image-viewer System::Shared rxl
User::Pkg::org.tizen.image-viewer User wx
User::Pkg::org.tizen.image-viewer User::App::Shared rwxat
-User::Pkg::org.tizen.image-viewer User::Author::1 rwxat
+User::Pkg::org.tizen.image-viewer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.image-viewer User::Home rxl
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer rwxat
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer::RO rxl
User::Pkg::org.tizen.indicator System::Shared rxl
User::Pkg::org.tizen.indicator User wx
User::Pkg::org.tizen.indicator User::App::Shared rwxat
-User::Pkg::org.tizen.indicator User::Author::1 rwxat
+User::Pkg::org.tizen.indicator User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.indicator User::Home rxl
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator rwxat
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator::RO rxl
User::Pkg::org.tizen.installer System::Shared rxl
User::Pkg::org.tizen.installer User wx
User::Pkg::org.tizen.installer User::App::Shared rwxat
-User::Pkg::org.tizen.installer User::Author::1 rwxat
+User::Pkg::org.tizen.installer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.installer User::Home rxl
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer rwxat
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer::RO rxl
User::Pkg::org.tizen.lockscreen System::Shared rxl
User::Pkg::org.tizen.lockscreen User wx
User::Pkg::org.tizen.lockscreen User::App::Shared rwxat
-User::Pkg::org.tizen.lockscreen User::Author::1 rwxat
+User::Pkg::org.tizen.lockscreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.lockscreen User::Home rxl
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen rwxat
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen::RO rxl
User::Pkg::org.tizen.memo System::Shared rxl
User::Pkg::org.tizen.memo User wx
User::Pkg::org.tizen.memo User::App::Shared rwxat
-User::Pkg::org.tizen.memo User::Author::1 rwxat
+User::Pkg::org.tizen.memo User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.memo User::Home rxl
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo rwxat
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo::RO rxl
User::Pkg::org.tizen.message System::Shared rxl
User::Pkg::org.tizen.message User wx
User::Pkg::org.tizen.message User::App::Shared rwxat
-User::Pkg::org.tizen.message User::Author::1 rwxat
+User::Pkg::org.tizen.message User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.message User::Home rxl
User::Pkg::org.tizen.message User::Pkg::org.tizen.message rwxat
User::Pkg::org.tizen.message User::Pkg::org.tizen.message::RO rxl
User::Pkg::org.tizen.msg-manager System::Shared rxl
User::Pkg::org.tizen.msg-manager User wx
User::Pkg::org.tizen.msg-manager User::App::Shared rwxat
-User::Pkg::org.tizen.msg-manager User::Author::1 rwxat
+User::Pkg::org.tizen.msg-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.msg-manager User::Home rxl
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager rwxat
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager::RO rxl
User::Pkg::org.tizen.music-player System::Shared rxl
User::Pkg::org.tizen.music-player User wx
User::Pkg::org.tizen.music-player User::App::Shared rwxat
-User::Pkg::org.tizen.music-player User::Author::1 rwxat
+User::Pkg::org.tizen.music-player User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.music-player User::Home rxl
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player rwxat
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player::RO rxl
User::Pkg::org.tizen.myfile System::Shared rxl
User::Pkg::org.tizen.myfile User wx
User::Pkg::org.tizen.myfile User::App::Shared rwxat
-User::Pkg::org.tizen.myfile User::Author::1 rwxat
+User::Pkg::org.tizen.myfile User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.myfile User::Home rxl
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile rwxat
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile::RO rxl
User::Pkg::org.tizen.quickpanel System::Shared rxl
User::Pkg::org.tizen.quickpanel User wx
User::Pkg::org.tizen.quickpanel User::App::Shared rwxat
-User::Pkg::org.tizen.quickpanel User::Author::1 rwxat
+User::Pkg::org.tizen.quickpanel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.quickpanel User::Home rxl
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel rwxat
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel::RO rxl
User::Pkg::org.tizen.setting System::Shared rxl
User::Pkg::org.tizen.setting User wx
User::Pkg::org.tizen.setting User::App::Shared rwxat
-User::Pkg::org.tizen.setting User::Author::1 rwxat
+User::Pkg::org.tizen.setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting User::Home rxl
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting rwxat
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting::RO rxl
User::Pkg::org.tizen.setting-homescreen System::Shared rxl
User::Pkg::org.tizen.setting-homescreen User wx
User::Pkg::org.tizen.setting-homescreen User::App::Shared rwxat
-User::Pkg::org.tizen.setting-homescreen User::Author::1 rwxat
+User::Pkg::org.tizen.setting-homescreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-homescreen User::Home rxl
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen rwxat
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen::RO rxl
User::Pkg::org.tizen.setting-notification System::Shared rxl
User::Pkg::org.tizen.setting-notification User wx
User::Pkg::org.tizen.setting-notification User::App::Shared rwxat
-User::Pkg::org.tizen.setting-notification User::Author::1 rwxat
+User::Pkg::org.tizen.setting-notification User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-notification User::Home rxl
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification rwxat
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification::RO rxl
User::Pkg::org.tizen.share-panel System::Shared rxl
User::Pkg::org.tizen.share-panel User wx
User::Pkg::org.tizen.share-panel User::App::Shared rwxat
-User::Pkg::org.tizen.share-panel User::Author::1 rwxat
+User::Pkg::org.tizen.share-panel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.share-panel User::Home rxl
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel rwxat
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel::RO rxl
User::Pkg::org.tizen.sys-lock System::Shared rxl
User::Pkg::org.tizen.sys-lock User wx
User::Pkg::org.tizen.sys-lock User::App::Shared rwxat
-User::Pkg::org.tizen.sys-lock User::Author::1 rwxat
+User::Pkg::org.tizen.sys-lock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.sys-lock User::Home rxl
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock rwxat
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock::RO rxl
User::Pkg::org.tizen.task-mgr System::Shared rxl
User::Pkg::org.tizen.task-mgr User wx
User::Pkg::org.tizen.task-mgr User::App::Shared rwxat
-User::Pkg::org.tizen.task-mgr User::Author::1 rwxat
+User::Pkg::org.tizen.task-mgr User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.task-mgr User::Home rxl
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr rwxat
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr::RO rxl
User::Pkg::org.tizen.ug-gallery-efl System::Shared rxl
User::Pkg::org.tizen.ug-gallery-efl User wx
User::Pkg::org.tizen.ug-gallery-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-gallery-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-gallery-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Home rxl
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl::RO rxl
User::Pkg::org.tizen.ug-lockscreen-options System::Shared rxl
User::Pkg::org.tizen.ug-lockscreen-options User wx
User::Pkg::org.tizen.ug-lockscreen-options User::App::Shared rwxat
-User::Pkg::org.tizen.ug-lockscreen-options User::Author::1 rwxat
+User::Pkg::org.tizen.ug-lockscreen-options User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Home rxl
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options::RO rxl
User::Pkg::org.tizen.ug-myfile-efl System::Shared rxl
User::Pkg::org.tizen.ug-myfile-efl User wx
User::Pkg::org.tizen.ug-myfile-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-myfile-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-myfile-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Home rxl
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl::RO rxl
User::Pkg::org.tizen.videos System::Shared rxl
User::Pkg::org.tizen.videos User wx
User::Pkg::org.tizen.videos User::App::Shared rwxat
-User::Pkg::org.tizen.videos User::Author::1 rwxat
+User::Pkg::org.tizen.videos User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.videos User::Home rxl
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos rwxat
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos::RO rxl
User::Pkg::org.tizen.volume System::Shared rxl
User::Pkg::org.tizen.volume User wx
User::Pkg::org.tizen.volume User::App::Shared rwxat
-User::Pkg::org.tizen.volume User::Author::1 rwxat
+User::Pkg::org.tizen.volume User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.volume User::Home rxl
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume rwxat
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume::RO rxl
User::Pkg::org.tizen.wallpaper-ui-service System::Shared rxl
User::Pkg::org.tizen.wallpaper-ui-service User wx
User::Pkg::org.tizen.wallpaper-ui-service User::App::Shared rwxat
-User::Pkg::org.tizen.wallpaper-ui-service User::Author::1 rwxat
+User::Pkg::org.tizen.wallpaper-ui-service User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Home rxl
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service::RO rxl
User::Pkg::org.tizen.wifi-direct-popup System::Shared rxl
User::Pkg::org.tizen.wifi-direct-popup User wx
User::Pkg::org.tizen.wifi-direct-popup User::App::Shared rwxat
-User::Pkg::org.tizen.wifi-direct-popup User::Author::1 rwxat
+User::Pkg::org.tizen.wifi-direct-popup User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Home rxl
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup::RO rxl
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::App::add100 rwxat
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::RO rxl
User::Pkg::pkg100::App::app100 _ l
+User::Pkg::pkg101 System wx
+User::Pkg::pkg101 System::Log rwxa
+User::Pkg::pkg101 System::Privileged wx
+User::Pkg::pkg101 System::Run rwxat
+User::Pkg::pkg101 System::Shared rxl
+User::Pkg::pkg101 User wx
+User::Pkg::pkg101 User::App::Shared rwxat
+User::Pkg::pkg101 User::Author::0fdfb83545aabc1f rwxat
+User::Pkg::pkg101 User::Home rxl
+User::Pkg::pkg101 User::Pkg::pkg101 rwxat
+User::Pkg::pkg101 User::Pkg::pkg101::RO rxl
+User::Pkg::pkg101 _ l
+User::Pkg::pkg102 System wx
+User::Pkg::pkg102 System::Log rwxa
+User::Pkg::pkg102 System::Privileged wx
+User::Pkg::pkg102 System::Run rwxat
+User::Pkg::pkg102 System::Shared rxl
+User::Pkg::pkg102 User wx
+User::Pkg::pkg102 User::App::Shared rwxat
+User::Pkg::pkg102 User::Author::b1c7dc06f99e70d0 rwxat
+User::Pkg::pkg102 User::Home rxl
+User::Pkg::pkg102 User::Pkg::pkg102 rwxat
+User::Pkg::pkg102 User::Pkg::pkg102::RO rxl
+User::Pkg::pkg102 _ l
User::Pkg::pkg10::App::abb10 System wx
User::Pkg::pkg10::App::abb10 System::Log rwxa
User::Pkg::pkg10::App::abb10 System::Privileged wx
User::Pkg::org.tizen.gallery System::Shared rxl
User::Pkg::org.tizen.gallery User wx
User::Pkg::org.tizen.gallery User::App::Shared rwxat
-User::Pkg::org.tizen.gallery User::Author::1 rwxat
+User::Pkg::org.tizen.gallery User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.gallery User::Home rxl
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery rwxat
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery::RO rxl
-System User::Author::1 rwxat
+System User::Author::0fdfb83545aabc1f rwxat
+System User::Author::42a5f0d50138e7f3 rwxat
+System User::Author::b1c7dc06f99e70d0 rwxat
System User::Pkg::attach-panel-camera rwxat
System User::Pkg::attach-panel-camera::RO rwxat
System User::Pkg::attach-panel-document rwxat
System User::Pkg::pkg100::App::add100 rwxat
System User::Pkg::pkg100::App::app100 rwxat
System User::Pkg::pkg100::RO rwxat
+System User::Pkg::pkg101 rwxat
+System User::Pkg::pkg101::RO rwxat
+System User::Pkg::pkg102 rwxat
+System User::Pkg::pkg102::RO rwxat
System User::Pkg::pkg10::App::abb10 rwxat
System User::Pkg::pkg10::App::acc10 rwxat
System User::Pkg::pkg10::App::add10 rwxat
System User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System User::Pkg::wifi-efl-ug rwxat
System User::Pkg::wifi-efl-ug::RO rwxat
-System::Privileged User::Author::1 rwxat
+System::Privileged User::Author::0fdfb83545aabc1f rwxat
+System::Privileged User::Author::42a5f0d50138e7f3 rwxat
+System::Privileged User::Author::b1c7dc06f99e70d0 rwxat
System::Privileged User::Pkg::attach-panel-camera rwxat
System::Privileged User::Pkg::attach-panel-camera::RO rwxat
System::Privileged User::Pkg::attach-panel-document rwxat
System::Privileged User::Pkg::pkg100::App::add100 rwxat
System::Privileged User::Pkg::pkg100::App::app100 rwxat
System::Privileged User::Pkg::pkg100::RO rwxat
+System::Privileged User::Pkg::pkg101 rwxat
+System::Privileged User::Pkg::pkg101::RO rwxat
+System::Privileged User::Pkg::pkg102 rwxat
+System::Privileged User::Pkg::pkg102::RO rwxat
System::Privileged User::Pkg::pkg10::App::abb10 rwxat
System::Privileged User::Pkg::pkg10::App::acc10 rwxat
System::Privileged User::Pkg::pkg10::App::add10 rwxat
System::Privileged User::Pkg::ug-setting-wifidirect-efl::RO rwxat
System::Privileged User::Pkg::wifi-efl-ug rwxat
System::Privileged User::Pkg::wifi-efl-ug::RO rwxat
-User User::Author::1 rwxat
+User User::Author::0fdfb83545aabc1f rwxat
+User User::Author::42a5f0d50138e7f3 rwxat
+User User::Author::b1c7dc06f99e70d0 rwxat
User User::Pkg::attach-panel-camera rwxat
User User::Pkg::attach-panel-camera::RO rwxat
User User::Pkg::attach-panel-document rwxat
User User::Pkg::pkg100::App::add100 rwxat
User User::Pkg::pkg100::App::app100 rwxat
User User::Pkg::pkg100::RO rwxat
+User User::Pkg::pkg101 rwxat
+User User::Pkg::pkg101::RO rwxat
+User User::Pkg::pkg102 rwxat
+User User::Pkg::pkg102::RO rwxat
User User::Pkg::pkg10::App::abb10 rwxat
User User::Pkg::pkg10::App::acc10 rwxat
User User::Pkg::pkg10::App::add10 rwxat
User::Pkg::org.tizen.app-selector System::Shared rxl
User::Pkg::org.tizen.app-selector User wx
User::Pkg::org.tizen.app-selector User::App::Shared rwxat
-User::Pkg::org.tizen.app-selector User::Author::1 rwxat
+User::Pkg::org.tizen.app-selector User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.app-selector User::Home rxl
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector rwxat
User::Pkg::org.tizen.app-selector User::Pkg::org.tizen.app-selector::RO rxl
User::Pkg::org.tizen.bluetooth-share-ui System::Shared rxl
User::Pkg::org.tizen.bluetooth-share-ui User wx
User::Pkg::org.tizen.bluetooth-share-ui User::App::Shared rwxat
-User::Pkg::org.tizen.bluetooth-share-ui User::Author::1 rwxat
+User::Pkg::org.tizen.bluetooth-share-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Home rxl
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui rwxat
User::Pkg::org.tizen.bluetooth-share-ui User::Pkg::org.tizen.bluetooth-share-ui::RO rxl
User::Pkg::org.tizen.calendar System::Shared rxl
User::Pkg::org.tizen.calendar User wx
User::Pkg::org.tizen.calendar User::App::Shared rwxat
-User::Pkg::org.tizen.calendar User::Author::1 rwxat
+User::Pkg::org.tizen.calendar User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.calendar User::Home rxl
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar rwxat
User::Pkg::org.tizen.calendar User::Pkg::org.tizen.calendar::RO rxl
User::Pkg::org.tizen.call-setting System::Shared rxl
User::Pkg::org.tizen.call-setting User wx
User::Pkg::org.tizen.call-setting User::App::Shared rwxat
-User::Pkg::org.tizen.call-setting User::Author::1 rwxat
+User::Pkg::org.tizen.call-setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-setting User::Home rxl
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting rwxat
User::Pkg::org.tizen.call-setting User::Pkg::org.tizen.call-setting::RO rxl
User::Pkg::org.tizen.call-ui System::Shared rxl
User::Pkg::org.tizen.call-ui User wx
User::Pkg::org.tizen.call-ui User::App::Shared rwxat
-User::Pkg::org.tizen.call-ui User::Author::1 rwxat
+User::Pkg::org.tizen.call-ui User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.call-ui User::Home rxl
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui rwxat
User::Pkg::org.tizen.call-ui User::Pkg::org.tizen.call-ui::RO rxl
User::Pkg::org.tizen.camera-app System::Shared rxl
User::Pkg::org.tizen.camera-app User wx
User::Pkg::org.tizen.camera-app User::App::Shared rwxat
-User::Pkg::org.tizen.camera-app User::Author::1 rwxat
+User::Pkg::org.tizen.camera-app User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.camera-app User::Home rxl
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app rwxat
User::Pkg::org.tizen.camera-app User::Pkg::org.tizen.camera-app::RO rxl
User::Pkg::org.tizen.clock System::Shared rxl
User::Pkg::org.tizen.clock User wx
User::Pkg::org.tizen.clock User::App::Shared rwxat
-User::Pkg::org.tizen.clock User::Author::1 rwxat
+User::Pkg::org.tizen.clock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.clock User::Home rxl
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock rwxat
User::Pkg::org.tizen.clock User::Pkg::org.tizen.clock::RO rxl
User::Pkg::org.tizen.contacts System::Shared rxl
User::Pkg::org.tizen.contacts User wx
User::Pkg::org.tizen.contacts User::App::Shared rwxat
-User::Pkg::org.tizen.contacts User::Author::1 rwxat
+User::Pkg::org.tizen.contacts User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.contacts User::Home rxl
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts rwxat
User::Pkg::org.tizen.contacts User::Pkg::org.tizen.contacts::RO rxl
User::Pkg::org.tizen.download-manager System::Shared rxl
User::Pkg::org.tizen.download-manager User wx
User::Pkg::org.tizen.download-manager User::App::Shared rwxat
-User::Pkg::org.tizen.download-manager User::Author::1 rwxat
+User::Pkg::org.tizen.download-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.download-manager User::Home rxl
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager rwxat
User::Pkg::org.tizen.download-manager User::Pkg::org.tizen.download-manager::RO rxl
User::Pkg::org.tizen.email System::Shared rxl
User::Pkg::org.tizen.email User wx
User::Pkg::org.tizen.email User::App::Shared rwxat
-User::Pkg::org.tizen.email User::Author::1 rwxat
+User::Pkg::org.tizen.email User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.email User::Home rxl
User::Pkg::org.tizen.email User::Pkg::org.tizen.email rwxat
User::Pkg::org.tizen.email User::Pkg::org.tizen.email::RO rxl
User::Pkg::org.tizen.gallery System::Shared rxl
User::Pkg::org.tizen.gallery User wx
User::Pkg::org.tizen.gallery User::App::Shared rwxat
-User::Pkg::org.tizen.gallery User::Author::1 rwxat
+User::Pkg::org.tizen.gallery User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.gallery User::Home rxl
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery rwxat
User::Pkg::org.tizen.gallery User::Pkg::org.tizen.gallery::RO rxl
User::Pkg::org.tizen.homescreen-efl System::Shared rxl
User::Pkg::org.tizen.homescreen-efl User wx
User::Pkg::org.tizen.homescreen-efl User::App::Shared rwxat
-User::Pkg::org.tizen.homescreen-efl User::Author::1 rwxat
+User::Pkg::org.tizen.homescreen-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.homescreen-efl User::Home rxl
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl rwxat
User::Pkg::org.tizen.homescreen-efl User::Pkg::org.tizen.homescreen-efl::RO rxl
User::Pkg::org.tizen.image-viewer System::Shared rxl
User::Pkg::org.tizen.image-viewer User wx
User::Pkg::org.tizen.image-viewer User::App::Shared rwxat
-User::Pkg::org.tizen.image-viewer User::Author::1 rwxat
+User::Pkg::org.tizen.image-viewer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.image-viewer User::Home rxl
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer rwxat
User::Pkg::org.tizen.image-viewer User::Pkg::org.tizen.image-viewer::RO rxl
User::Pkg::org.tizen.indicator System::Shared rxl
User::Pkg::org.tizen.indicator User wx
User::Pkg::org.tizen.indicator User::App::Shared rwxat
-User::Pkg::org.tizen.indicator User::Author::1 rwxat
+User::Pkg::org.tizen.indicator User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.indicator User::Home rxl
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator rwxat
User::Pkg::org.tizen.indicator User::Pkg::org.tizen.indicator::RO rxl
User::Pkg::org.tizen.installer System::Shared rxl
User::Pkg::org.tizen.installer User wx
User::Pkg::org.tizen.installer User::App::Shared rwxat
-User::Pkg::org.tizen.installer User::Author::1 rwxat
+User::Pkg::org.tizen.installer User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.installer User::Home rxl
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer rwxat
User::Pkg::org.tizen.installer User::Pkg::org.tizen.installer::RO rxl
User::Pkg::org.tizen.lockscreen System::Shared rxl
User::Pkg::org.tizen.lockscreen User wx
User::Pkg::org.tizen.lockscreen User::App::Shared rwxat
-User::Pkg::org.tizen.lockscreen User::Author::1 rwxat
+User::Pkg::org.tizen.lockscreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.lockscreen User::Home rxl
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen rwxat
User::Pkg::org.tizen.lockscreen User::Pkg::org.tizen.lockscreen::RO rxl
User::Pkg::org.tizen.memo System::Shared rxl
User::Pkg::org.tizen.memo User wx
User::Pkg::org.tizen.memo User::App::Shared rwxat
-User::Pkg::org.tizen.memo User::Author::1 rwxat
+User::Pkg::org.tizen.memo User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.memo User::Home rxl
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo rwxat
User::Pkg::org.tizen.memo User::Pkg::org.tizen.memo::RO rxl
User::Pkg::org.tizen.message System::Shared rxl
User::Pkg::org.tizen.message User wx
User::Pkg::org.tizen.message User::App::Shared rwxat
-User::Pkg::org.tizen.message User::Author::1 rwxat
+User::Pkg::org.tizen.message User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.message User::Home rxl
User::Pkg::org.tizen.message User::Pkg::org.tizen.message rwxat
User::Pkg::org.tizen.message User::Pkg::org.tizen.message::RO rxl
User::Pkg::org.tizen.msg-manager System::Shared rxl
User::Pkg::org.tizen.msg-manager User wx
User::Pkg::org.tizen.msg-manager User::App::Shared rwxat
-User::Pkg::org.tizen.msg-manager User::Author::1 rwxat
+User::Pkg::org.tizen.msg-manager User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.msg-manager User::Home rxl
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager rwxat
User::Pkg::org.tizen.msg-manager User::Pkg::org.tizen.msg-manager::RO rxl
User::Pkg::org.tizen.music-player System::Shared rxl
User::Pkg::org.tizen.music-player User wx
User::Pkg::org.tizen.music-player User::App::Shared rwxat
-User::Pkg::org.tizen.music-player User::Author::1 rwxat
+User::Pkg::org.tizen.music-player User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.music-player User::Home rxl
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player rwxat
User::Pkg::org.tizen.music-player User::Pkg::org.tizen.music-player::RO rxl
User::Pkg::org.tizen.myfile System::Shared rxl
User::Pkg::org.tizen.myfile User wx
User::Pkg::org.tizen.myfile User::App::Shared rwxat
-User::Pkg::org.tizen.myfile User::Author::1 rwxat
+User::Pkg::org.tizen.myfile User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.myfile User::Home rxl
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile rwxat
User::Pkg::org.tizen.myfile User::Pkg::org.tizen.myfile::RO rxl
User::Pkg::org.tizen.quickpanel System::Shared rxl
User::Pkg::org.tizen.quickpanel User wx
User::Pkg::org.tizen.quickpanel User::App::Shared rwxat
-User::Pkg::org.tizen.quickpanel User::Author::1 rwxat
+User::Pkg::org.tizen.quickpanel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.quickpanel User::Home rxl
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel rwxat
User::Pkg::org.tizen.quickpanel User::Pkg::org.tizen.quickpanel::RO rxl
User::Pkg::org.tizen.setting System::Shared rxl
User::Pkg::org.tizen.setting User wx
User::Pkg::org.tizen.setting User::App::Shared rwxat
-User::Pkg::org.tizen.setting User::Author::1 rwxat
+User::Pkg::org.tizen.setting User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting User::Home rxl
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting rwxat
User::Pkg::org.tizen.setting User::Pkg::org.tizen.setting::RO rxl
User::Pkg::org.tizen.setting-homescreen System::Shared rxl
User::Pkg::org.tizen.setting-homescreen User wx
User::Pkg::org.tizen.setting-homescreen User::App::Shared rwxat
-User::Pkg::org.tizen.setting-homescreen User::Author::1 rwxat
+User::Pkg::org.tizen.setting-homescreen User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-homescreen User::Home rxl
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen rwxat
User::Pkg::org.tizen.setting-homescreen User::Pkg::org.tizen.setting-homescreen::RO rxl
User::Pkg::org.tizen.setting-notification System::Shared rxl
User::Pkg::org.tizen.setting-notification User wx
User::Pkg::org.tizen.setting-notification User::App::Shared rwxat
-User::Pkg::org.tizen.setting-notification User::Author::1 rwxat
+User::Pkg::org.tizen.setting-notification User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.setting-notification User::Home rxl
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification rwxat
User::Pkg::org.tizen.setting-notification User::Pkg::org.tizen.setting-notification::RO rxl
User::Pkg::org.tizen.share-panel System::Shared rxl
User::Pkg::org.tizen.share-panel User wx
User::Pkg::org.tizen.share-panel User::App::Shared rwxat
-User::Pkg::org.tizen.share-panel User::Author::1 rwxat
+User::Pkg::org.tizen.share-panel User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.share-panel User::Home rxl
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel rwxat
User::Pkg::org.tizen.share-panel User::Pkg::org.tizen.share-panel::RO rxl
User::Pkg::org.tizen.sys-lock System::Shared rxl
User::Pkg::org.tizen.sys-lock User wx
User::Pkg::org.tizen.sys-lock User::App::Shared rwxat
-User::Pkg::org.tizen.sys-lock User::Author::1 rwxat
+User::Pkg::org.tizen.sys-lock User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.sys-lock User::Home rxl
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock rwxat
User::Pkg::org.tizen.sys-lock User::Pkg::org.tizen.sys-lock::RO rxl
User::Pkg::org.tizen.task-mgr System::Shared rxl
User::Pkg::org.tizen.task-mgr User wx
User::Pkg::org.tizen.task-mgr User::App::Shared rwxat
-User::Pkg::org.tizen.task-mgr User::Author::1 rwxat
+User::Pkg::org.tizen.task-mgr User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.task-mgr User::Home rxl
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr rwxat
User::Pkg::org.tizen.task-mgr User::Pkg::org.tizen.task-mgr::RO rxl
User::Pkg::org.tizen.ug-gallery-efl System::Shared rxl
User::Pkg::org.tizen.ug-gallery-efl User wx
User::Pkg::org.tizen.ug-gallery-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-gallery-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-gallery-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Home rxl
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl rwxat
User::Pkg::org.tizen.ug-gallery-efl User::Pkg::org.tizen.ug-gallery-efl::RO rxl
User::Pkg::org.tizen.ug-lockscreen-options System::Shared rxl
User::Pkg::org.tizen.ug-lockscreen-options User wx
User::Pkg::org.tizen.ug-lockscreen-options User::App::Shared rwxat
-User::Pkg::org.tizen.ug-lockscreen-options User::Author::1 rwxat
+User::Pkg::org.tizen.ug-lockscreen-options User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Home rxl
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options rwxat
User::Pkg::org.tizen.ug-lockscreen-options User::Pkg::org.tizen.ug-lockscreen-options::RO rxl
User::Pkg::org.tizen.ug-myfile-efl System::Shared rxl
User::Pkg::org.tizen.ug-myfile-efl User wx
User::Pkg::org.tizen.ug-myfile-efl User::App::Shared rwxat
-User::Pkg::org.tizen.ug-myfile-efl User::Author::1 rwxat
+User::Pkg::org.tizen.ug-myfile-efl User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Home rxl
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl rwxat
User::Pkg::org.tizen.ug-myfile-efl User::Pkg::org.tizen.ug-myfile-efl::RO rxl
User::Pkg::org.tizen.videos System::Shared rxl
User::Pkg::org.tizen.videos User wx
User::Pkg::org.tizen.videos User::App::Shared rwxat
-User::Pkg::org.tizen.videos User::Author::1 rwxat
+User::Pkg::org.tizen.videos User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.videos User::Home rxl
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos rwxat
User::Pkg::org.tizen.videos User::Pkg::org.tizen.videos::RO rxl
User::Pkg::org.tizen.volume System::Shared rxl
User::Pkg::org.tizen.volume User wx
User::Pkg::org.tizen.volume User::App::Shared rwxat
-User::Pkg::org.tizen.volume User::Author::1 rwxat
+User::Pkg::org.tizen.volume User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.volume User::Home rxl
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume rwxat
User::Pkg::org.tizen.volume User::Pkg::org.tizen.volume::RO rxl
User::Pkg::org.tizen.wallpaper-ui-service System::Shared rxl
User::Pkg::org.tizen.wallpaper-ui-service User wx
User::Pkg::org.tizen.wallpaper-ui-service User::App::Shared rwxat
-User::Pkg::org.tizen.wallpaper-ui-service User::Author::1 rwxat
+User::Pkg::org.tizen.wallpaper-ui-service User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Home rxl
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service rwxat
User::Pkg::org.tizen.wallpaper-ui-service User::Pkg::org.tizen.wallpaper-ui-service::RO rxl
User::Pkg::org.tizen.wifi-direct-popup System::Shared rxl
User::Pkg::org.tizen.wifi-direct-popup User wx
User::Pkg::org.tizen.wifi-direct-popup User::App::Shared rwxat
-User::Pkg::org.tizen.wifi-direct-popup User::Author::1 rwxat
+User::Pkg::org.tizen.wifi-direct-popup User::Author::42a5f0d50138e7f3 rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Home rxl
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup rwxat
User::Pkg::org.tizen.wifi-direct-popup User::Pkg::org.tizen.wifi-direct-popup::RO rxl
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::App::add100 rwxat
User::Pkg::pkg100::App::app100 User::Pkg::pkg100::RO rxl
User::Pkg::pkg100::App::app100 _ l
+User::Pkg::pkg101 System wx
+User::Pkg::pkg101 System::Log rwxa
+User::Pkg::pkg101 System::Privileged wx
+User::Pkg::pkg101 System::Run rwxat
+User::Pkg::pkg101 System::Shared rxl
+User::Pkg::pkg101 User wx
+User::Pkg::pkg101 User::App::Shared rwxat
+User::Pkg::pkg101 User::Author::0fdfb83545aabc1f rwxat
+User::Pkg::pkg101 User::Home rxl
+User::Pkg::pkg101 User::Pkg::pkg101 rwxat
+User::Pkg::pkg101 User::Pkg::pkg101::RO rxl
+User::Pkg::pkg101 _ l
+User::Pkg::pkg102 System wx
+User::Pkg::pkg102 System::Log rwxa
+User::Pkg::pkg102 System::Privileged wx
+User::Pkg::pkg102 System::Run rwxat
+User::Pkg::pkg102 System::Shared rxl
+User::Pkg::pkg102 User wx
+User::Pkg::pkg102 User::App::Shared rwxat
+User::Pkg::pkg102 User::Author::b1c7dc06f99e70d0 rwxat
+User::Pkg::pkg102 User::Home rxl
+User::Pkg::pkg102 User::Pkg::pkg102 rwxat
+User::Pkg::pkg102 User::Pkg::pkg102::RO rxl
+User::Pkg::pkg102 _ l
User::Pkg::pkg10::App::abb10 System wx
User::Pkg::pkg10::App::abb10 System::Log rwxa
User::Pkg::pkg10::App::abb10 System::Privileged wx
const std::string &pkgName, const uid_t uid, const std::string &tizenVer,
const std::string &authorName, bool isHybrid)
{
- int authorId = -1;
+ std::string authorHash;
BOOST_REQUIRE_NO_THROW(testPrivDb->AddApplication(appName, pkgName, uid, tizenVer,
authorName, isHybrid));
"PkgNameExists wrongly not reported " << pkgName << " as existing package name");
if (authorName.length() > 0) {
- BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthorId(pkgName, authorId));
- BOOST_REQUIRE_MESSAGE(testPrivDb->AuthorIdExists(authorId),
- "AuthorIdExists wrongly not reported " << uid << " as existing author id");
+ BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthor(pkgName, authorHash));
+ BOOST_REQUIRE_MESSAGE(testPrivDb->AuthorExists(authorHash),
+ "AuthorExists wrongly not reported " << uid << " as existing author");
}
}
bool appNameExists;
bool pkgNameExists;
bool authorNameExists;
- int authorId;
+ std::string authorHash;
if (authorName.length() > 0) {
- BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthorId(pkgName, authorId));
- BOOST_REQUIRE_NO_THROW(authorNameExists = testPrivDb->AuthorIdExists(authorId));
+ BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthor(pkgName, authorHash));
+ BOOST_REQUIRE_NO_THROW(authorNameExists = testPrivDb->AuthorExists(authorHash));
}
BOOST_REQUIRE_NO_THROW(appNameExists = testPrivDb->AppNameExists(appName));
"PkgNameExists wrongly changed value after unsuccessful installation.");
if (authorName.length() > 0) {
- BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthorId(pkgName, authorId));
- BOOST_REQUIRE_MESSAGE(authorNameExists == testPrivDb->AuthorIdExists(authorId),
- "AuthorIdExists wrongly changed value after unsuccessful installation.");
+ BOOST_REQUIRE_NO_THROW(testPrivDb->GetPkgAuthor(pkgName, authorHash));
+ BOOST_REQUIRE_MESSAGE(authorNameExists == testPrivDb->AuthorExists(authorHash),
+ "AuthorExists wrongly changed value after unsuccessful installation.");
}
}
POSITIVE_TEST_CASE(T590_add_applications_with_empty_noempty_author)
{
- int authorIdPkg;
+ std::string authorHash;
addAppSuccess(app(1), pkg(1), uid(1), tizenVer(1), "", NotHybrid);
- BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthorId(pkg(1), authorIdPkg));
- BOOST_REQUIRE_MESSAGE(authorIdPkg == -1, "Wrong author id returned: " << authorIdPkg
- << " expected: -1");
+ BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthor(pkg(1), authorHash));
+ BOOST_REQUIRE_MESSAGE(authorHash.empty(), "Wrong author returned: " << authorHash
+ << " expected: empty");
addAppSuccess(app(2), pkg(1), uid(1), tizenVer(1), author(1), NotHybrid);
- BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthorId(pkg(1), authorIdPkg));
- BOOST_REQUIRE_MESSAGE(authorIdPkg != -1, "Wrong author id returned: -1");
+ BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthor(pkg(1), authorHash));
+ BOOST_REQUIRE_MESSAGE(!authorHash.empty(), "Wrong author returned: empty");
addAppSuccess(app(3), pkg(1), uid(1), tizenVer(1), "", NotHybrid);
- BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthorId(pkg(2), authorIdPkg));
- BOOST_REQUIRE_MESSAGE(authorIdPkg == -1, "Wrong author id returned: " << authorIdPkg
- << " expected: -1");
+ BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthor(pkg(2), authorHash));
+ BOOST_REQUIRE_MESSAGE(authorHash.empty(), "Wrong author returned: " << authorHash
+ << " expected: empty");
}
POSITIVE_TEST_CASE(T600_add_applications_with_different_isHybrid_false_true)
void checkGetAppPkgInfo(const std::string &app, const std::string &expectedPackage,
bool expectedIsHybrid, bool expectedIsSharedRO);
void checkGetPkgApps(const std::string &package, std::vector<std::string> expectedApps);
- void checkGetPkgAuthorId(const std::string &pkgName, int expectedAuthorId);
+ void checkGetPkgAuthor(const std::string &pkgName, const std::string &expectedAuthorHash);
void checkGetUserApps(const uid_t uid, std::vector<std::string> expectedApps);
void checkGetUserAppsFromPkg(uid_t uid, const std::string &pkgName,
std::vector<std::string> expectedApps);
expectedApps.begin(), expectedApps.end());
};
-void PrivilegeDBGettersFixture::checkGetPkgAuthorId(const std::string &pkgName,
- int expectedAuthorId)
+void PrivilegeDBGettersFixture::checkGetPkgAuthor(const std::string &pkgName,
+ const std::string &expectedAuthorHash)
{
- int authorId;
- BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthorId(pkgName, authorId));
- BOOST_CHECK_MESSAGE(expectedAuthorId == authorId, "GetPkgAuthorId for package: "
- << pkgName << " returned authorId: " << authorId << " expected: " << expectedAuthorId);
+ std::string authorHash;
+ BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthor(pkgName, authorHash));
+ BOOST_CHECK_MESSAGE(expectedAuthorHash == authorHash, "GetPkgAuthor for package: "
+ << pkgName << " returned author: " << authorHash << " expected: " << expectedAuthorHash);
};
void PrivilegeDBGettersFixture::checkGetUserApps(const uid_t uid,
" as existing package name");
}
-POSITIVE_TEST_CASE(T320_author_id_exists_finds_nothing)
+POSITIVE_TEST_CASE(T320_author_exists_finds_nothing)
{
- //database is clean, author ids are assigned sequentially from bottom
- const int notExistingAuthorId= 200;
+ std::string notExistingAuthorHash= "1234567890abcde";
- BOOST_REQUIRE_MESSAGE(!getPrivDb()->AuthorIdExists(notExistingAuthorId),
- "AuthorIdExists wrongly reported " << notExistingAuthorId <<
- " as existing author id");
+ BOOST_REQUIRE_MESSAGE(!getPrivDb()->AuthorExists(notExistingAuthorHash),
+ "AuthorExists wrongly reported " << notExistingAuthorHash <<
+ " as existing author");
}
POSITIVE_TEST_CASE(T325_app_name_pkg_author_exists)
{
- int authorId = -1;
+ std::string authorHash;
addAppSuccess(app(1), pkg(1), uid(1), tizenVer(1), author(1), NotHybrid);
addAppSuccess(app(2), pkg(2), uid(1), tizenVer(1), author(2), NotHybrid);
"AppNameExists wrongly not reported " << app(1) << " as existing application name");
BOOST_REQUIRE_MESSAGE(getPrivDb()->PkgNameExists(pkg(1)),
"PkgNameExists wrongly not reported " << pkg(1) << " as existing package name");
- BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthorId(pkg(1), authorId));
- BOOST_REQUIRE_MESSAGE(getPrivDb()->AuthorIdExists(authorId),
- "AuthorIdExists wrongly not found " << author(1) << " as existing author");
+ BOOST_REQUIRE_NO_THROW(getPrivDb()->GetPkgAuthor(pkg(1), authorHash));
+ BOOST_REQUIRE_MESSAGE(getPrivDb()->AuthorExists(authorHash),
+ "AuthorExists wrongly not found " << author(1) << " as existing author");
}
POSITIVE_TEST_CASE(T330_get_app_pkg_name)
POSITIVE_TEST_CASE(T370_get_pkg_author_id)
{
- checkGetPkgAuthorId(pkg(1), -1);
+ checkGetPkgAuthor(pkg(1), "");
- addAppSuccess(app(1), pkg(1), uid(1), tizenVer(1), author(1), Hybrid);
- checkGetPkgAuthorId(pkg(1), 1);
+ addAppSuccess(app(1), pkg(1), uid(1), tizenVer(1), "author(1)", Hybrid);
+ checkGetPkgAuthor(pkg(1), "f5ac9cea2142b382");
- addAppSuccess(app(2), pkg(2), uid(2), tizenVer(1), author(2), Hybrid);
- checkGetPkgAuthorId(pkg(2), 2);
+ addAppSuccess(app(2), pkg(2), uid(2), tizenVer(1), "author(2)", Hybrid);
+ checkGetPkgAuthor(pkg(2), "c970622b1db2bbcf");
- addAppSuccess(app(3), pkg(2), uid(2), tizenVer(1), author(2), Hybrid);
- checkGetPkgAuthorId(pkg(2), 2);
+ addAppSuccess(app(3), pkg(2), uid(2), tizenVer(1), "author(2)", Hybrid);
+ checkGetPkgAuthor(pkg(2), "c970622b1db2bbcf");
removeAppSuccess(app(1), uid(1));
- checkGetPkgAuthorId(pkg(1), -1);
+ checkGetPkgAuthor(pkg(1), "");
- addAppSuccess(app(1), pkg(1), uid(3), tizenVer(1), author(3), Hybrid);
- checkGetPkgAuthorId(pkg(1), 3);
+ addAppSuccess(app(1), pkg(1), uid(3), tizenVer(1), "author(3)", Hybrid);
+ checkGetPkgAuthor(pkg(1), "0a8585f0b71a5fd7");
}
POSITIVE_TEST_CASE(T380_is_package_Hybrid)
NEGATIVE_TEST_CASE(T1026_generate_smack_label_path_trusted_invalid_author)
{
- const int invalidAuthorId = -1;
- BOOST_REQUIRE_THROW(generatePathTrustedLabel(invalidAuthorId), SmackException::InvalidLabel);
+ const std::string invalidAuthorHash = "";
+ BOOST_REQUIRE_THROW(generatePathTrustedLabel(invalidAuthorHash), SmackException::InvalidLabel);
}
POSITIVE_TEST_CASE(T1030_generate_smack_labels)
{
const std::string appName = "appNameT1030";
const std::string pkgName = "pkgNameT1030";
- const int validAuthorId = 42;
+ const std::string validAuthorHash = "1234567890abcde";
const std::string path = "/usr/apps/" + appName + "/shared/";
const std::string processLabel = "User::Pkg::pkgNameT1030";
const std::string sharedPrivateLabel = "User::Pkg::$1$pkgNameT$j2QeZi5Xvx67DnPfPtwSF.";
BOOST_REQUIRE(generateSharedPrivateLabel(pkgName, path) == sharedPrivateLabel);
- const std::string pathTrustedLabel = "User::Author::42";
- BOOST_REQUIRE(generatePathTrustedLabel(validAuthorId) == pathTrustedLabel);
+ const std::string pathTrustedLabel = "User::Author::1234567890abcde";
+ BOOST_REQUIRE(generatePathTrustedLabel(validAuthorHash) == pathTrustedLabel);
}
NEGATIVE_TEST_CASE(T1031_generate_smack_label_invalid_pkg_name_non_hybrid)
NEGATIVE_FIXTURE_TEST_CASE(T1053_setup_path_rw, DirectoryFixture)
{
const std::string pkgName = "pkgNameT1053";
- const int invalidAuthorId = -1;
+ const std::string invalidAuthorHash = "";
- BOOST_REQUIRE_THROW(setupPath(pkgName, directoryPath, SECURITY_MANAGER_PATH_TRUSTED_RW, invalidAuthorId),
+ BOOST_REQUIRE_THROW(setupPath(pkgName, directoryPath, SECURITY_MANAGER_PATH_TRUSTED_RW, invalidAuthorHash),
SmackException::InvalidParam);
}
return pkgId;
}
- int getNextAuthorId() {
- static int i = 0;
+ std::string getNextAuthorHash() {
+ static int i = 10000000;
+ std::string authorHash;
do {
- ++i;
- } while (db.AuthorIdExists(i));
- return i;
+ authorHash = std::to_string(i++);
+ } while (db.AuthorExists(authorHash));
+ return authorHash;
}
PrivilegeDb db;
BOOST_REQUIRE_THROW( \
SmackAccesses().add(SUBJ, OBJ, PERM), \
SmackException::LibsmackError); \
-}
+}
NEGATIVE_RULE_ADD(T1127_smack_rules_exception_invalid_printable_character_subject, "subject/", "object", "rwxat")
NEGATIVE_RULE_ADD(T1128_smack_rules_exception_invalid_printable_character_object, "subject", "object/", "rwxat")
std::string pkg = getNextPkgId();
std::string label1 = generateProcessLabel("app1", pkg, true);
std::string label2 = generateProcessLabel("app2", pkg, true);
- int author = getNextAuthorId();
+ std::string authorHash = getNextAuthorHash();
BOOST_REQUIRE_NO_THROW(rules.installApplicationRules(
- label1, pkg, author,
+ label1, pkg, authorHash,
{label1, label2}));
BOOST_REQUIRE_NO_THROW(rules.uninstallApplicationRules(
- label1, pkg, author));
+ label1, pkg, authorHash));
}
POSITIVE_TEST_CASE(T1301_smack_rules_class_check_is_mapping_enabled)
SmackRules rules;
std::string pkg = getNextPkgId();
std::string label = generateProcessLabel("app", pkg, false);
- int author = getNextAuthorId();
- BOOST_REQUIRE_NO_THROW(rules.enablePrivilegeRules(label, pkg, author, {}));
- BOOST_REQUIRE_NO_THROW(rules.enablePrivilegeRules(label, pkg, author, {"http://tizen.org/privilege/dummy"}));
- BOOST_REQUIRE_NO_THROW(rules.disableAllPrivilegeRules(label, pkg, author));
+ std::string authorHash = getNextAuthorHash();
+ BOOST_REQUIRE_NO_THROW(rules.enablePrivilegeRules(label, pkg, authorHash, {}));
+ BOOST_REQUIRE_NO_THROW(rules.enablePrivilegeRules(label, pkg, authorHash, {"http://tizen.org/privilege/dummy"}));
+ BOOST_REQUIRE_NO_THROW(rules.disableAllPrivilegeRules(label, pkg, authorHash));
}
POSITIVE_FIXTURE_TEST_CASE(T1304_smack_rules_class_disable_specific_privilege_rules, DbFixture)
SmackRules rules;
std::string pkg = getNextPkgId();
std::string label = generateProcessLabel("app", pkg, false);
- int author = getNextAuthorId();
+ std::string authorHash = getNextAuthorHash();
BOOST_REQUIRE_NO_THROW(rules.disablePrivilegeRules(
- label, pkg, author, {"http://tizen.org/privilege/dummy"}));
+ label, pkg, authorHash, {"http://tizen.org/privilege/dummy"}));
}
POSITIVE_FIXTURE_TEST_CASE(T1305_smack_rules_class_uninstall_pkg_rules, DbFixture)
SmackRules rules;
std::string pkg = getNextPkgId();
std::string label = generateProcessLabel("app", pkg, false);
- BOOST_REQUIRE_NO_THROW(rules.uninstallApplicationRules(label, pkg, 1));
+ BOOST_REQUIRE_NO_THROW(rules.uninstallApplicationRules(label, pkg, "1"));
}
POSITIVE_FIXTURE_TEST_CASE(T1307_smack_rules_class_update_pkg_rules, DbFixture)
POSITIVE_FIXTURE_TEST_CASE(T1308_smack_rules_class_uninstall_author_rules, DbFixture)
{
SmackRules rules;
- BOOST_REQUIRE_NO_THROW(rules.uninstallAuthorRules(getNextAuthorId()));
+ BOOST_REQUIRE_NO_THROW(rules.uninstallAuthorRules(getNextAuthorHash()));
}
POSITIVE_FIXTURE_TEST_CASE(T1309_smack_rules_class_private_sharing, DbFixture)
std::string pkg = getNextPkgId();
std::string label = generateProcessLabel("app", pkg, false);
- int author = getNextAuthorId();
+ std::string authorHash = getNextAuthorHash();
BOOST_REQUIRE_NO_THROW(rules.addFromTemplate(
accesses,
TemplateManager::Type::APP_RULES_TEMPLATE,
label,
pkg,
- author));
+ authorHash));
BOOST_REQUIRE_NO_THROW(rules.addFromPrivTemplate(
accesses,
label,
"aPrivilegeLabelDummy",
pkg,
- author));
+ authorHash));
BOOST_REQUIRE_NO_THROW(rules.useTemplate(
TemplateManager::Type::APP_RULES_TEMPLATE,
- label, pkg, 1));
- BOOST_REQUIRE_NO_THROW(rules.disableAllPrivilegeRules(label, pkg, 1));
+ label, pkg, "1"));
+ BOOST_REQUIRE_NO_THROW(rules.disableAllPrivilegeRules(label, pkg, "1"));
}
BOOST_AUTO_TEST_SUITE_END()