Upload Tizen:Base source
[framework/base/util-linux-ng.git] / login-utils / selinux_utils.c
1 #include <sys/types.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <selinux/selinux.h>
5 #include <selinux/flask.h>
6 #include <selinux/av_permissions.h>
7 #include <selinux/context.h>
8 #include "selinux_utils.h"
9
10 int checkAccess(char *chuser, int access) {
11   int status=-1;
12   security_context_t user_context;
13   const char *user=NULL;
14   if( getprevcon(&user_context)==0 ) {
15     context_t c=context_new(user_context);
16     user=context_user_get(c);
17     if (strcmp(chuser, user) == 0) {
18       status=0;
19     } else {
20       struct av_decision avd;
21       int retval = security_compute_av(user_context,
22                                        user_context,
23                                        SECCLASS_PASSWD,
24                                        access,
25                                        &avd);
26           
27       if ((retval == 0) && 
28           ((access & avd.allowed) == access)) {
29         status=0;
30       }
31     }
32     context_free(c);
33     freecon(user_context);
34   }
35   return status;
36 }
37
38 int setupDefaultContext(char *orig_file) {
39   if (is_selinux_enabled() > 0) {
40     security_context_t scontext;
41     
42     if (getfilecon(orig_file,&scontext)<0) {
43       return 1;
44     }
45     
46     if (setfscreatecon(scontext) < 0) 
47       {
48         freecon(scontext);
49         return 1;
50       }
51     freecon(scontext);
52   }
53   return 0;
54 }