@@ -103,6 +103,66 @@ static void split_range(const char *range, char **l_s, char **l_c, char **h_s, c
103
103
}
104
104
}
105
105
106
+ static SEXP_t * create_process_probe_item_with_range (
107
+ const char * range , const char * user , const char * role , const char * type ,
108
+ int pid_number ) {
109
+ char * l_sensitivity , * l_category , * h_sensitivity , * h_category ;
110
+ SEXP_t * item ;
111
+
112
+ split_range (range , & l_sensitivity , & l_category , & h_sensitivity , & h_category );
113
+ item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
114
+ "pid" , OVAL_DATATYPE_INTEGER , (int64_t )pid_number ,
115
+
116
+ "user" , OVAL_DATATYPE_STRING , user ,
117
+ "role" , OVAL_DATATYPE_STRING , role ,
118
+ "type" , OVAL_DATATYPE_STRING , type ,
119
+ "low_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
120
+ "low_category" , OVAL_DATATYPE_STRING , l_category ,
121
+ "high_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
122
+ "high_category" , OVAL_DATATYPE_STRING , h_category ,
123
+ NULL );
124
+ free (l_sensitivity );
125
+ free (l_category );
126
+ free (h_sensitivity );
127
+ free (h_category );
128
+
129
+ return item ;
130
+ }
131
+
132
+
133
+ static SEXP_t * create_file_probe_item_with_range (
134
+ const char * range , const char * user , const char * role , const char * type ,
135
+ const char * pbuf , const char * p , const char * f ) {
136
+ char * l_sensitivity , * l_category , * h_sensitivity , * h_category ;
137
+ SEXP_t * item ;
138
+
139
+ split_range (range , & l_sensitivity , & l_category , & h_sensitivity , & h_category );
140
+ item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
141
+ "filepath" , OVAL_DATATYPE_STRING , pbuf ,
142
+ "path" , OVAL_DATATYPE_STRING , p ,
143
+ "filename" , OVAL_DATATYPE_STRING , f ,
144
+
145
+ "user" , OVAL_DATATYPE_STRING , user ,
146
+ "role" , OVAL_DATATYPE_STRING , role ,
147
+ "type" , OVAL_DATATYPE_STRING , type ,
148
+ "low_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
149
+ "low_category" , OVAL_DATATYPE_STRING , l_category ,
150
+ "high_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
151
+ "high_category" , OVAL_DATATYPE_STRING , h_category ,
152
+
153
+ "rawlow_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
154
+ "rawlow_category" , OVAL_DATATYPE_STRING , l_category ,
155
+ "rawhigh_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
156
+ "rawhigh_category" , OVAL_DATATYPE_STRING , h_category ,
157
+ NULL );
158
+ free (l_sensitivity );
159
+ free (l_category );
160
+ free (h_sensitivity );
161
+ free (h_category );
162
+
163
+ return item ;
164
+ }
165
+
106
166
static int selinuxsecuritycontext_process_cb (SEXP_t * pid_ent , probe_ctx * ctx ) {
107
167
108
168
SEXP_t * pid_sexp , * item ;
@@ -112,7 +172,6 @@ static int selinuxsecuritycontext_process_cb (SEXP_t *pid_ent, probe_ctx *ctx) {
112
172
DIR * proc ;
113
173
struct dirent * dir_entry ;
114
174
const char * user , * role , * type , * range ;
115
- char * l_sensitivity , * l_category , * h_sensitivity , * h_category ;
116
175
117
176
if ((proc = opendir ("/proc" )) == NULL ) {
118
177
dE ("Can't open /proc dir: %s" , strerror (errno ));
@@ -143,17 +202,7 @@ static int selinuxsecuritycontext_process_cb (SEXP_t *pid_ent, probe_ctx *ctx) {
143
202
type = context_type_get (context );
144
203
range = context_range_get (context );
145
204
if (range != NULL ) {
146
- split_range (range , & l_sensitivity , & l_category , & h_sensitivity , & h_category );
147
- item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
148
- "pid" , OVAL_DATATYPE_INTEGER , (int64_t )pid_number ,
149
- "user" , OVAL_DATATYPE_STRING , user ,
150
- "role" , OVAL_DATATYPE_STRING , role ,
151
- "type" , OVAL_DATATYPE_STRING , type ,
152
- "low_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
153
- "low_category" , OVAL_DATATYPE_STRING , l_category ,
154
- "high_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
155
- "high_category" , OVAL_DATATYPE_STRING , h_category ,
156
- NULL );
205
+ item = create_process_probe_item_with_range (range , user , role , type , pid_number );
157
206
}
158
207
else {
159
208
item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
@@ -188,7 +237,6 @@ static int selinuxsecuritycontext_file_cb(const char *prefix, const char *p, con
188
237
int file_context_size ;
189
238
context_t context ;
190
239
const char * user , * role , * type , * range ;
191
- char * l_sensitivity , * l_category , * h_sensitivity , * h_category ;
192
240
int err = 0 ;
193
241
194
242
/* directory */
@@ -244,23 +292,7 @@ static int selinuxsecuritycontext_file_cb(const char *prefix, const char *p, con
244
292
range = context_range_get (context );
245
293
246
294
if (range != NULL ) {
247
- split_range (range , & l_sensitivity , & l_category , & h_sensitivity , & h_category );
248
- item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
249
- "filepath" , OVAL_DATATYPE_STRING , pbuf ,
250
- "path" , OVAL_DATATYPE_STRING , p ,
251
- "filename" , OVAL_DATATYPE_STRING , f ,
252
- "user" , OVAL_DATATYPE_STRING , user ,
253
- "role" , OVAL_DATATYPE_STRING , role ,
254
- "type" , OVAL_DATATYPE_STRING , type ,
255
- "low_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
256
- "low_category" , OVAL_DATATYPE_STRING , l_category ,
257
- "high_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
258
- "high_category" , OVAL_DATATYPE_STRING , h_category ,
259
- "rawlow_sensitivity" , OVAL_DATATYPE_STRING , l_sensitivity ,
260
- "rawlow_category" , OVAL_DATATYPE_STRING , l_category ,
261
- "rawhigh_sensitivity" , OVAL_DATATYPE_STRING , h_sensitivity ,
262
- "rawhigh_category" , OVAL_DATATYPE_STRING , h_category ,
263
- NULL );
295
+ item = create_file_probe_item_with_range (range , user , role , type , pbuf , p , f );
264
296
}
265
297
else {
266
298
item = probe_item_create (OVAL_LINUX_SELINUXSECURITYCONTEXT , NULL ,
0 commit comments