Line data Source code
1 : /*
2 : Unix SMB/CIFS implementation.
3 : sid utility functions
4 :
5 : Copyright (C) Michael Adam 2012
6 :
7 : This program is free software; you can redistribute it and/or modify
8 : it under the terms of the GNU General Public License as published by
9 : the Free Software Foundation; either version 3 of the License, or
10 : (at your option) any later version.
11 :
12 : This program is distributed in the hope that it will be useful,
13 : but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : GNU General Public License for more details.
16 :
17 : You should have received a copy of the GNU General Public License
18 : along with this program. If not, see <http://www.gnu.org/licenses/>.
19 : */
20 :
21 : #include "includes.h"
22 : #include "lib/util_sid_passdb.h"
23 : #include "lib/util_unixsids.h"
24 : #include "passdb/machine_sid.h"
25 : #include "passdb.h"
26 :
27 : /**
28 : * check whether this is an object-sid that should
29 : * be treated by the passdb, e.g. for id-mapping.
30 : */
31 3274 : bool sid_check_object_is_for_passdb(const struct dom_sid *sid)
32 : {
33 3274 : if (sid_check_is_in_our_sam(sid) && pdb_is_responsible_for_our_sam()) {
34 413 : return true;
35 : }
36 :
37 2861 : if (sid_check_is_in_builtin(sid) && pdb_is_responsible_for_builtin()) {
38 605 : return true;
39 : }
40 :
41 3302 : if (sid_check_is_in_wellknown_domain(sid) &&
42 1046 : pdb_is_responsible_for_wellknown())
43 : {
44 170 : return true;
45 : }
46 :
47 2086 : if (sid_check_is_in_unix_users(sid) &&
48 0 : pdb_is_responsible_for_unix_users())
49 : {
50 0 : return true;
51 : }
52 :
53 2086 : if (sid_check_is_in_unix_groups(sid) &&
54 0 : pdb_is_responsible_for_unix_groups())
55 : {
56 0 : return true;
57 : }
58 :
59 2086 : if (pdb_is_responsible_for_everything_else())
60 : {
61 0 : return true;
62 : }
63 :
64 2086 : return false;
65 : }
66 :
67 : /**
68 : * check whether this is an object- or domain-sid that should
69 : * be treated by the passdb, e.g. for id-mapping.
70 : */
71 0 : bool sid_check_is_for_passdb(const struct dom_sid *sid)
72 : {
73 0 : if (sid_check_is_our_sam(sid) && pdb_is_responsible_for_our_sam()) {
74 0 : return true;
75 : }
76 :
77 0 : if (sid_check_is_in_our_sam(sid) && pdb_is_responsible_for_our_sam()) {
78 0 : return true;
79 : }
80 :
81 0 : if (sid_check_is_builtin(sid) && pdb_is_responsible_for_builtin()) {
82 0 : return true;
83 : }
84 :
85 0 : if (sid_check_is_in_builtin(sid) && pdb_is_responsible_for_builtin()) {
86 0 : return true;
87 : }
88 :
89 0 : if (sid_check_is_wellknown_domain(sid, NULL) &&
90 0 : pdb_is_responsible_for_wellknown())
91 : {
92 0 : return true;
93 : }
94 :
95 0 : if (sid_check_is_in_wellknown_domain(sid) &&
96 0 : pdb_is_responsible_for_wellknown())
97 : {
98 0 : return true;
99 : }
100 :
101 0 : if (sid_check_is_unix_users(sid) &&
102 0 : pdb_is_responsible_for_unix_users())
103 : {
104 0 : return true;
105 : }
106 :
107 0 : if (sid_check_is_in_unix_users(sid) &&
108 0 : pdb_is_responsible_for_unix_users())
109 : {
110 0 : return true;
111 : }
112 :
113 0 : if (sid_check_is_unix_groups(sid) &&
114 0 : pdb_is_responsible_for_unix_groups())
115 : {
116 0 : return true;
117 : }
118 :
119 0 : if (sid_check_is_in_unix_groups(sid) &&
120 0 : pdb_is_responsible_for_unix_groups())
121 : {
122 0 : return true;
123 : }
124 :
125 0 : if (pdb_is_responsible_for_everything_else())
126 : {
127 0 : return true;
128 : }
129 :
130 0 : return false;
131 : }
|