launchpad.cpp
packman.cpp
policy.cpp
+ policy-builder.cpp
policy-storage.cpp
client-manager.cpp
)
#include "administration.hxx"
+#include "policy-builder.h"
#include "client-manager.h"
#include "audit/logger.h"
return 0;
}
-AdministrationPolicy adminPolicy(Server::instance());
+DEFINE_POLICY(AdministrationPolicy);
} // namespace DevicePolicyManager
#include "application.hxx"
-#include "policy-helper.h"
+#include "policy-builder.h"
#include "packman.h"
#include "launchpad.h"
#include "audit/logger.h"
return false;
}
-ApplicationPolicy applicationPolicy(Server::instance());
+DEFINE_POLICY(ApplicationPolicy);
} // namespace DevicePolicyManager
#include "restriction.hxx"
#include "privilege.h"
-#include "policy-helper.h"
+#include "policy-builder.h"
#include "audit/logger.h"
#include "dbus/connection.h"
return IsPolicyEnabled(context, "bluetooth-uuid-restriction");
}
-BluetoothPolicy bluetoothPolicy(Server::instance());
+DEFINE_POLICY(BluetoothPolicy);
} // namespace DevicePolicyManager
#include "location.hxx"
#include "privilege.h"
-#include "policy-helper.h"
+#include "policy-builder.h"
#include "audit/logger.h"
namespace DevicePolicyManager {
return IsPolicyAllowed(context, "location");
}
-LocationPolicy locationPolicy(Server::instance());
+DEFINE_POLICY(LocationPolicy);
} // namespace DevicePolicyManager
#include <unistd.h>
#include <getopt.h>
#include <stdlib.h>
+#include <signal.h>
#include <iostream>
#include <stdexcept>
#include "server.h"
-#include <signal.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <stdlib.h>
-
void signalHandler(int signum)
{
exit(0);
::umask(0);
try {
- Server& server = Server::instance();
+ Server server;
server.run();
} catch (std::exception &e) {
std::cerr << e.what() << std::endl;
#include "password.hxx"
+#include "policy-builder.h"
#include "privilege.h"
-#include "policy-helper.h"
#include "auth/user.h"
#include "audit/logger.h"
return ForbiddenStrings;
}
-PasswordPolicy passwordPolicy(Server::instance());
+DEFINE_POLICY(PasswordPolicy);
} /* namespace DevicePolicyManager*/
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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
+ */
+
+#include "policy-builder.h"
+
+std::vector<std::function<void(PolicyControlContext& context)>> policyBuilder;
* limitations under the License
*/
-#ifndef __DPM_POLICY_STORAGE_ADAPTOR_H__
-#define __DPM_POLICY_STORAGE_ADAPTOR_H__
+#ifndef __POLICY_BUILDER_H__
+#define __POLICY_BUILDER_H__
+#include <vector>
+#include <functional>
+#include <memory>
#include <string>
#include "policy-context.hxx"
+extern std::vector<std::function<void(PolicyControlContext& context)>> policyBuilder;
+
+template<typename T>
+struct PolicyBuilder {
+ PolicyBuilder()
+ {
+ policyBuilder.emplace_back([this](PolicyControlContext& context) {
+ instance.reset(new T(context));
+ });
+ }
+
+ std::unique_ptr<T> instance;
+};
+
inline bool IsPolicyAllowed(PolicyControlContext& context, const std::string& name)
{
return context.getPolicy(name) == "allowed" ? true : false;
return context.updatePolicy(name, enable ? "enabled" : "disabled");
}
-#endif //! __DPM_POLICY_STORAGE_ADAPTOR_H__
+inline void PolicyBuild(PolicyControlContext& context)
+{
+ for (auto builder : policyBuilder) {
+ builder(context);
+ }
+}
+
+#define DEFINE_POLICY(__policy__) \
+ PolicyBuilder<__policy__> __policy__##_builder
+
+#endif //!__POLICY_BUILDER_H__
#include <sys/stat.h>
#include <unistd.h>
+#include "policy-context.hxx"
+
#include "policy-storage.h"
#include "error.h"
{
if (::unlink(location.c_str()) == -1)
::unlink(location.c_str());
-}
\ No newline at end of file
+}
#include "restriction.hxx"
#include "privilege.h"
-#include "policy-helper.h"
+#include "policy-builder.h"
#include "audit/logger.h"
#include "dbus/connection.h"
return IsPolicyAllowed(context, "browser");
}
-RestrictionPolicy restrictionPolicy(Server::instance());
+DEFINE_POLICY(RestrictionPolicy);
} // namespace DevicePolicyManager
#include "security.hxx"
#include "privilege.h"
+#include "policy-builder.h"
#include "launchpad.h"
#include "process.h"
#include "filesystem.h"
return false;
}
-SecurityPolicy securityPolicy(Server::instance());
+DEFINE_POLICY(SecurityPolicy);
} // namespace DevicePolicyManager
#include <cynara-session.h>
#include "server.h"
+#include "policy-builder.h"
using namespace std::placeholders;
void Server::run()
{
+ PolicyBuild(*this);
+
// Prepare execution environment
service->start(true);
}
return true;
}
-
-Server& Server::instance()
-{
- static Server _instance_;
-
- return _instance_;
-}
class Server {
public:
+ Server();
+ ~Server();
+
void run();
void terminate();
bool checkPeerPrivilege(const rmi::Credentials& cred, const std::string& privilege);
- static Server& instance();
-
private:
- Server();
- ~Server();
-
std::string securityLabel;
std::unique_ptr<PolicyStorage> policyStorage;
std::unique_ptr<rmi::Service> service;
#include "storage.hxx"
#include "privilege.h"
-#include "policy-helper.h"
-
+#include "policy-builder.h"
#include "exception.h"
#include "process.h"
#include "filesystem.h"
return 0;
}
-StoragePolicy storagePolicy(Server::instance());
+DEFINE_POLICY(StoragePolicy);
} //namespace DevicePolicyManager
#include "wifi.hxx"
#include "privilege.h"
-#include "policy-helper.h"
+#include "policy-builder.h"
#include "app-bundle.h"
#include "audit/logger.h"
return 0;
}
-WifiPolicy wifiPolicy(Server::instance());
+DEFINE_POLICY(WifiPolicy);
} // namespace DevicePolicyManager
#include "zone/zone.hxx"
#include "privilege.h"
-
+#include "policy-builder.h"
#include "error.h"
#include "launchpad.h"
#include "filesystem.h"
}
/* [TBD] remove dependency with zoneManager like this */
-extern ZoneManager zoneManager;
+extern ZoneManager* zoneManager;
int ZonePolicy::lockZone(const std::string& name)
{
- return zoneManager.lockZone(name);
+ return zoneManager->lockZone(name);
}
int ZonePolicy::unlockZone(const std::string& name)
{
- return zoneManager.unlockZone(name);
+ return zoneManager->unlockZone(name);
}
int ZonePolicy::getZoneState(const std::string& name)
{
- return zoneManager.getZoneState(name);
+ return zoneManager->getZoneState(name);
}
std::vector<std::string> ZonePolicy::getZoneList(int state)
{
- return zoneManager.getZoneList(state);
+ return zoneManager->getZoneList(state);
}
-ZonePolicy zonePolicy(Server::instance());
+DEFINE_POLICY(ZonePolicy);
} // namespace DevicePolicyManager
#include "zone/app-proxy.hxx"
+#include "policy-builder.h"
#include "error.h"
#include "packman.h"
#include "launchpad.h"
return false;
}
-ZoneAppProxy zoneAppManager(Server::instance());
+DEFINE_POLICY(ZoneAppProxy);
} // namespace DevicePolicyManager
#include <system_settings.h>
#include "zone/package-proxy.hxx"
-
+#include "policy-builder.h"
#include "error.h"
#include "packman.h"
#include "auth/user.h"
return 0;
}
-ZonePackageProxy zonePackageManager(Server::instance());
+DEFINE_POLICY(ZonePackageProxy);
} // namespace DevicePolicyManager
#include <auth-passwd-admin.h>
#include "zone/zone.hxx"
-
+#include "policy-builder.h"
#include "error.h"
#include "process.h"
#include "packman.h"
} // namespace
+ZoneManager* zoneManager = nullptr;
+
ZoneManager::ZoneManager(PolicyControlContext& ctx) :
context(ctx)
{
runtime::User zone(name);
notification_register_detailed_changed_cb_for_uid(notiProxyCallback, &name, zone.getUid());
}
+
+ zoneManager = this;
}
ZoneManager::~ZoneManager()
{
- PackageManager& packageManager = PackageManager::instance();
- packageManager.unsetEventCallback();
}
int ZoneManager::createZone(const std::string& name, const std::string& manifest)
return 0;
}
-ZoneManager zoneManager(Server::instance());
+DEFINE_POLICY(ZoneManager);
} // namespace DevicePolicyManager