Merge branch 'ckm' into tizen
[platform/core/test/security-tests.git] / src / common / passwd_access.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /**
17  * @file        passwd_access.cpp
18  * @author      Aleksander Zdyb <a.zdyb@samsung.com>
19  * @version     1.0
20  * @brief       Provides access to UID and GID
21  */
22
23 #include <cerrno>
24 #include <grp.h>
25 #include <pwd.h>
26
27 #include <dpl/test/test_runner.h>
28
29 #include "passwd_access.h"
30
31 namespace {
32     struct passwd *getPasswd(const std::string &username) {
33         struct passwd *info = nullptr;
34         do {
35             errno = 0;
36             info = getpwnam(username.c_str());
37         } while (info == nullptr && errno == EINTR);
38         RUNNER_ASSERT_ERRNO_MSG(info != nullptr, "Error in getpwnam(). Username: " << username);
39         return info;
40     }
41 }
42
43 namespace PasswdAccess {
44     uid_t uid(const std::string &username) {
45         return getPasswd(username)->pw_uid;
46     }
47
48     void allUser(const std::string &username, uid_t &uid, gid_t &gid) {
49         auto info = getPasswd(username);
50         uid = info->pw_uid;
51         gid = info->pw_gid;
52     }
53
54     gid_t gid(const std::string &groupname) {
55         struct group *group = nullptr;
56         do {
57             errno = 0;
58             group = getgrnam(groupname.c_str());
59         } while (group == nullptr && errno == EINTR);
60         RUNNER_ASSERT_ERRNO_MSG(group != nullptr, "Error in getgrnam(). Groupname: " << groupname);
61         return group->gr_gid;
62     }
63 } // namespace PasswdAccess