This patch is for backward compatibility.
To create the resolve info properly, if the mime is not an empty string
and uri has a slash, the uri should be the empty string
in the GetMime() method of ResolveInfo::Manager class.
To get the appid list properly, the GetAppID() method is added.
Change-Id: I356e5e3423df470dbe414ae32cc5d2d79e3246c7
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
}
int ret;
- auto result = AppControlResolver::GetInst().Resolve(target_uid, info);
+ auto result = AppControlResolver::GetInst().GetAppList(target_uid, info);
if (result.size() == 0)
ret = -ENOENT;
else
return resolver_->Resolve(uid, info);
}
+ std::vector<std::string> GetAppList(uid_t uid, const ResolveInfo& info) {
+ return resolver_->GetAppList(uid, info);
+ }
+
private:
void Init() {
resolver_ = std::shared_ptr<Resolver>(
if (mime.empty()) {
need_check = true;
index = 0;
+ } else {
+ uri = "";
}
} else if (uri.compare(0, 8, "file:///") == 0) {
if (mime.empty()) {
if (ret != 0)
THROW(ret);
+ SECURE_LOGD("uri_r_info(%s), scheme(%s), host(%s)",
+ uri_r_info.c_str(), scheme.c_str(), host.c_str());
builder.SetUriRInfo(uri_r_info);
builder.SetScheme(scheme);
builder.SetHost(host);
std::shared_ptr<Resolver> resolver) = 0;
virtual std::vector<std::string> Resolve(uid_t uid,
const ResolveInfo& info) = 0;
+ virtual std::vector<std::string> GetAppList(uid_t uid,
+ const ResolveInfo& info) = 0;
static std::string GetAppControl(const std::string& operation,
const std::string& uri, const std::string& mime);
auto app_control_infos = GetAppControlInfos(info.GetOperation(),
info.GetUriRInfo(), info.GetMime(), info.GetMType(), info.GetSType());
- auto app_list = GetAppList(uid, "", app_control_infos, false, false);
+ auto app_list = Resolver::GetAppList(uid, "", app_control_infos, false,
+ false);
if (app_list.size() == 0) {
if (next_resolver_.get() != nullptr)
return next_resolver_->Resolve(uid, info);
info.GetMime(), info.GetMType(), info.GetSType()));
}
- app_list = GetAppList(uid, info.GetCategory(), app_control_infos, true,
- false);
+ app_list = Resolver::GetAppList(uid, info.GetCategory(), app_control_infos,
+ true, false);
if (app_list.size() > 0) {
std::vector<std::string> result {
std::make_move_iterator(std::begin(app_list)),
return {};
}
+std::vector<std::string> SchemeHostResolver::GetAppList(uid_t uid,
+ const ResolveInfo& info) {
+ if (next_resolver_.get() != nullptr)
+ return next_resolver_->GetAppList(uid, info);
+
+ return {};
+}
+
} // namespace amd
class SchemeHostResolver : public Resolver {
public:
- virtual std::shared_ptr<Resolver> SetNext(
+ std::shared_ptr<Resolver> SetNext(
std::shared_ptr<Resolver> resolver) override;
- virtual std::vector<std::string> Resolve(uid_t uid,
+ std::vector<std::string> Resolve(uid_t uid,
+ const ResolveInfo& info) override;
+ std::vector<std::string> GetAppList(uid_t uid,
const ResolveInfo& info) override;
private:
info.GetMime(), info.GetMType(), info.GetSType()));
}
- auto app_list = GetAppList(uid, info.GetCategory(), app_control_infos, true,
- false);
+ auto app_list = Resolver::GetAppList(uid, info.GetCategory(),
+ app_control_infos, true, false);
if (app_list.size() > 0) {
std::vector<std::string> result {
std::make_move_iterator(std::begin(app_list)),
return {};
}
+std::vector<std::string> SchemeResolver::GetAppList(uid_t uid,
+ const ResolveInfo& info) {
+ if (next_resolver_.get() != nullptr)
+ return next_resolver_->GetAppList(uid, info);
+
+ return {};
+}
+
} // namespace amd
class SchemeResolver : public Resolver {
public:
- virtual std::shared_ptr<Resolver> SetNext(
+ std::shared_ptr<Resolver> SetNext(
std::shared_ptr<Resolver> resolver) override;
- virtual std::vector<std::string> Resolve(uid_t uid,
+ std::vector<std::string> Resolve(uid_t uid,
+ const ResolveInfo& info) override;
+ std::vector<std::string> GetAppList(uid_t uid,
const ResolveInfo& info) override;
private:
auto app_control_infos = GetAppControlInfos(info.GetOperation(),
info.GetUri(), info.GetMime(), info.GetMType(), info.GetSType());
- auto app_list = GetAppList(uid, "", app_control_infos, false, true);
+ auto app_list = Resolver::GetAppList(uid, "", app_control_infos, false, true);
if (app_list.size() == 0) {
if (next_resolver_.get() != nullptr)
return next_resolver_->Resolve(uid, info);
info.GetMime(), info.GetMType(), info.GetSType()));
}
- app_list = GetAppList(uid, info.GetCategory(), app_control_infos, true,
- false);
+ app_list = Resolver::GetAppList(uid, info.GetCategory(), app_control_infos,
+ true, false);
if (app_list.size() > 0) {
std::vector<std::string> result {
std::make_move_iterator(std::begin(app_list)),
return {};
}
+std::vector<std::string> UriResolver::GetAppList(uid_t uid,
+ const ResolveInfo& info) {
+ auto app_control_infos = GetAppControlInfos(info.GetOperation(),
+ info.GetUri(), info.GetMime(), info.GetMType(), info.GetSType());
+
+ if (!info.GetUriRInfo().empty()) {
+ app_control_infos.merge(GetAppControlInfos(info.GetOperation(),
+ info.GetUriRInfo(), info.GetMime(), info.GetMType(), info.GetSType()));
+ }
+
+ app_control_infos.merge(GetAppControlInfos(info.GetOperation(),
+ info.GetScheme(), info.GetMime(), info.GetMType(), info.GetSType()));
+ app_control_infos.merge(GetAppControlInfos(info.GetOperation(), "*",
+ info.GetMime(), info.GetMType(), info.GetSType()));
+ if (info.GetScheme() == "file" && info.GetMime() != "NULL") {
+ app_control_infos.merge(GetAppControlInfos(info.GetOperation(), "NULL",
+ info.GetMime(), info.GetMType(), info.GetSType()));
+ }
+
+ auto app_list = Resolver::GetAppList(uid, info.GetCategory(),
+ app_control_infos, true, true);
+ if (app_list.size() > 0) {
+ std::vector<std::string> result {
+ std::make_move_iterator(std::begin(app_list)),
+ std::make_move_iterator(std::end(app_list))
+ };
+
+ if (result.size() > 1)
+ const_cast<ResolveInfo&>(info).SetUriRInfo(info.GetUri());
+
+ return result;
+ }
+
+ if (next_resolver_.get() != nullptr)
+ return next_resolver_->GetAppList(uid, info);
+
+ return {};
+}
+
} // namespace amd
class UriResolver : public Resolver {
public:
- virtual std::shared_ptr<Resolver> SetNext(
+ std::shared_ptr<Resolver> SetNext(
std::shared_ptr<Resolver> resolver) override;
- virtual std::vector<std::string> Resolve(uid_t uid,
+ std::vector<std::string> Resolve(uid_t uid,
+ const ResolveInfo& info) override;
+ std::vector<std::string> GetAppList(uid_t uid,
const ResolveInfo& info) override;
private: