Generic solution for onlycap issues
[platform/core/test/security-tests.git] / src / common / access_provider.cpp
index e9f91dc..fb53d86 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2013 - 2019 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.
 #include <tests_common.h>
 
 #include <access_provider.h>
+#include <scoped_process_label.h>
 
 namespace SecurityServer {
 
-AccessProvider::AccessProvider(const std::string &mySubject)
-  : m_mySubject(mySubject)
+AccessProvider::AccessProvider(const std::string &myLabel)
+  : m_myLabel(myLabel)
 {}
 
 void AccessProvider::allowSS() {
-    m_smackAccess.add(m_mySubject, "System::Run", "x");
+    m_smackAccess.add(m_myLabel, "System::Run", "x");
+}
+
+void AccessProvider::addSubjectRule(const std::string &subject, const std::string &rule) {
+    m_smackAccess.add(subject, m_myLabel, rule);
 }
 
 void AccessProvider::addObjectRule(const std::string &object, const std::string &rule) {
-    m_smackAccess.add(m_mySubject, object, rule);
+    m_smackAccess.add(m_myLabel, object, rule);
 }
 
 void AccessProvider::apply() {
@@ -48,11 +53,10 @@ void AccessProvider::apply() {
 }
 
 void AccessProvider::applyAndSwithToUser(int uid, int gid) {
-    RUNNER_ASSERT_MSG(0 == smack_revoke_subject(m_mySubject.c_str()),
-        "Error in smack_revoke_subject(" << m_mySubject << ")");
+    RUNNER_ASSERT_MSG(0 == smack_revoke_subject(m_myLabel.c_str()),
+        "Error in smack_revoke_subject(" << m_myLabel << ")");
     apply();
-    RUNNER_ASSERT_MSG(0 == smack_set_label_for_self(m_mySubject.c_str()),
-        "Error in smack_set_label_for_self.");
+    ScopedProcessLabel spl(m_myLabel, false);
     RUNNER_ASSERT_MSG(0 == setgid(gid),
         "Error in setgid.");
     RUNNER_ASSERT_MSG(0 == setuid(uid),