Big gid check fixed
[platform/core/test/security-tests.git] / tests / security-server-tests / security_server_tests_weird_arguments.cpp
1 /*
2  * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
3  */
4 /*
5  * @file    security_server_tests_weird_arguments.cpp
6  * @author  Zbigniew Jasinski (z.jasinski@samsung.com)
7  * @version 1.0
8  * @brief   Test cases for security server
9  *
10  */
11 #include "tests_common.h"
12 #include "security-server.h"
13 #include <dpl/test/test_runner.h>
14 #include <dpl/log/log.h>
15
16 #define SECURITY_SERVER_MAX_OBJ_NAME 30
17
18 RUNNER_TEST_GROUP_INIT(SECURITY_SERVER_TESTS_WEIRD_ARGUMENTS);
19
20 RUNNER_TEST(tc01_security_server_get_gid_weird_input_case)
21 {
22     int ret = 0;
23     char weird[] = {static_cast <char> (0xe3), 0x79, static_cast <char> (0x82), 0x0};
24
25     /* normal param case */
26     ret = security_server_get_gid("tel_sim");
27     RUNNER_ASSERT_MSG(ret > -1, "ret: " << ret);
28
29     /* wrong param case */
30     ret = security_server_get_gid("elephony_akecall");
31     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_NO_SUCH_OBJECT, "ret: " << ret);
32
33     /* weird param case */
34     ret = security_server_get_gid(weird);
35     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_NO_SUCH_OBJECT, "ret: " << ret);
36
37     /* null param case */
38     ret = security_server_get_gid(NULL);
39     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
40
41     /* param too long case */
42     ret = security_server_get_gid("abcdefghijklmnopqrstuvwxyz01234");
43     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
44
45     /* empty param case */
46     ret = security_server_get_gid("");
47     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
48 }
49
50 /* from security_server_tests_server.cpp */
51
52 RUNNER_TEST(tc02_security_server_get_object_name_weird_input_case)
53 {
54     int ret = 0;
55     gid_t gid = 6001;
56
57     /* null object case */
58     char *object = NULL;
59
60     ret = security_server_get_object_name(gid, object, sizeof(object));
61     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
62
63     /* buffer to small case */
64     char object1[5];
65
66     ret = security_server_get_object_name(gid, object1, sizeof(object1));
67     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_BUFFER_TOO_SMALL, "ret: " << ret);
68
69     /* wrong gid case */
70     gid = 9876;
71     char object2[SECURITY_SERVER_MAX_OBJ_NAME];
72
73     ret = security_server_get_object_name(gid, object2, sizeof(object2));
74     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_NO_SUCH_OBJECT, "ret: " << ret);
75
76 /***************/
77
78     /* big gid case */
79     gid = 70666;
80
81     ret = security_server_get_object_name(gid, object2, sizeof(object2));
82     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_NO_SUCH_OBJECT, "ret: " << ret);
83
84     /* invalid gid case */
85     gid = -1;
86
87     ret = security_server_get_object_name(gid, object2, sizeof(object2));
88     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_NO_SUCH_OBJECT, "ret: " << ret);
89 }
90
91 RUNNER_TEST(tc03_security_server_request_cookie_weird_input_case)
92 {
93     int ret = 0;
94     size_t cookie_size = security_server_get_cookie_size();
95
96     /* null cookie case */
97     char *cookie = NULL;
98
99     ret = security_server_request_cookie(cookie, cookie_size);
100     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
101
102     /* buffer size too small case */
103     cookie_size = 19;
104     char cookie2[cookie_size];
105
106     ret = security_server_request_cookie(cookie2, cookie_size);
107     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_BUFFER_TOO_SMALL, "ret: " << ret);
108 }
109
110 RUNNER_TEST(tc04_security_server_check_privilege_weird_input_case)
111 {
112     int ret = 0;
113     size_t cookie_size = security_server_get_cookie_size();
114     gid_t gid = 6001;
115
116     /* null cookie case */
117     char *cookie = NULL;
118
119     ret = security_server_check_privilege(cookie, gid);
120     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
121
122     char cookie2[cookie_size];
123
124     ret = security_server_request_cookie(cookie2, cookie_size);
125     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_SUCCESS, "ret: " << ret);
126
127     /* big gid case */
128     gid = 70666;
129
130     ret = security_server_check_privilege(cookie2, gid);
131     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_ACCESS_DENIED, "ret: " << ret);
132 }
133 RUNNER_TEST(tc05_security_server_check_privilege_by_cookie_weird_input_case)
134 {
135     int ret = 0;
136     size_t cookie_size = security_server_get_cookie_size();;
137     const char *object = "telephony_makecall";
138     const char *access_rights = "r";
139
140     /* null cookie case */
141     char *cookie = NULL;
142     ret = security_server_check_privilege_by_cookie(cookie, object, access_rights);
143     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
144
145     /* null object case */
146     char *object2 = NULL;
147     char cookie2[cookie_size];
148
149     ret = security_server_request_cookie(cookie2, cookie_size);
150     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_SUCCESS, "ret: " << ret);
151
152     ret = security_server_check_privilege_by_cookie(cookie2, object2, access_rights);
153     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
154
155     /* null access rights case */
156     access_rights = NULL;
157     ret = security_server_check_privilege_by_cookie(cookie2, object, access_rights);
158     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
159 }
160
161 RUNNER_TEST_SMACK(tc06_security_server_check_privilege_by_sockfd_weird_input_case)
162 {
163     int ret = 0;
164     int sockfd = -1;
165     const char *object = "telephony_makecall";
166     const char *access_rights = "r";
167
168     /* invalid sockfd case */
169     ret = security_server_check_privilege_by_sockfd(sockfd, object, access_rights);
170     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
171     sockfd = 0;
172
173     /* null object case */
174     char *object2 = NULL;
175     ret = security_server_check_privilege_by_sockfd(sockfd, object2, access_rights);
176     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
177
178     /* null access rights case */
179     access_rights = NULL;
180     ret = security_server_check_privilege_by_sockfd(sockfd, object, access_rights);
181     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM, "ret: " << ret);
182 }
183
184 RUNNER_TEST(tc07_security_server_get_cookie_pid_weird_input_case)
185 {
186     int ret = 0;
187     char *cookie = NULL;
188
189     ret = security_server_get_cookie_pid(cookie);
190     RUNNER_ASSERT(ret == SECURITY_SERVER_API_ERROR_INPUT_PARAM);
191 }
192
193 ///////////////////////////
194 /////NOSMACK ENV TESTS/////
195 ///////////////////////////
196
197 /**
198  * NOSMACK version of tc06 test.
199  *
200  * security_server_check_privilege_by_sockfd at first checks if SMACK exists and then checks if
201  * params are correct. Even with incorrect params we should expect SUCCESS instead of
202  * ERROR_INPUT_PARAM.
203  */
204
205 RUNNER_TEST_NOSMACK(tc06_security_server_check_privilege_by_sockfd_weird_input_case_nosmack)
206 {
207     int ret = 0;
208     int sockfd = -1;
209     const char* object = "telephony_makecall";
210     const char* access_rights = "r";
211
212     //invalid sockfd case
213     ret = security_server_check_privilege_by_sockfd(sockfd, object, access_rights);
214     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_SUCCESS,
215             "check_privilege_by_sockfd failed. Result: " << ret);
216     sockfd = 0;
217
218     //null object case
219     char *object2 = NULL;
220     ret = security_server_check_privilege_by_sockfd(sockfd, object2, access_rights);
221     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_SUCCESS,
222             "check_privilege_by_sockfd failed. Result: " << ret);
223
224     //null access rights case
225     access_rights = NULL;
226     ret = security_server_check_privilege_by_sockfd(sockfd, object, access_rights);
227     RUNNER_ASSERT_MSG(ret == SECURITY_SERVER_API_SUCCESS,
228             "check_privilege_by_sockfd failed. Result: " << ret);
229 }