MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ugidfw_rulecheck

Function ugidfw_rulecheck

freebsd/security/mac_bsdextended/mac_bsdextended.c:228–422  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

226}
227
228static int
229ugidfw_rulecheck(struct mac_bsdextended_rule *rule,
230 struct ucred *cred, struct vnode *vp, struct vattr *vap, int acc_mode)
231{
232 int mac_granted, match, priv_granted;
233 int i;
234
235 /*
236 * Is there a subject match?
237 */
238 mtx_assert(&ugidfw_mtx, MA_OWNED);
239 if (rule->mbr_subject.mbs_flags & MBS_UID_DEFINED) {
240 match = ((cred->cr_uid <= rule->mbr_subject.mbs_uid_max &&
241 cred->cr_uid >= rule->mbr_subject.mbs_uid_min) ||
242 (cred->cr_ruid <= rule->mbr_subject.mbs_uid_max &&
243 cred->cr_ruid >= rule->mbr_subject.mbs_uid_min) ||
244 (cred->cr_svuid <= rule->mbr_subject.mbs_uid_max &&
245 cred->cr_svuid >= rule->mbr_subject.mbs_uid_min));
246 if (rule->mbr_subject.mbs_neg & MBS_UID_DEFINED)
247 match = !match;
248 if (!match)
249 return (0);
250 }
251
252 if (rule->mbr_subject.mbs_flags & MBS_GID_DEFINED) {
253 match = ((cred->cr_rgid <= rule->mbr_subject.mbs_gid_max &&
254 cred->cr_rgid >= rule->mbr_subject.mbs_gid_min) ||
255 (cred->cr_svgid <= rule->mbr_subject.mbs_gid_max &&
256 cred->cr_svgid >= rule->mbr_subject.mbs_gid_min));
257 if (!match) {
258 for (i = 0; i < cred->cr_ngroups; i++) {
259 if (cred->cr_groups[i]
260 <= rule->mbr_subject.mbs_gid_max &&
261 cred->cr_groups[i]
262 >= rule->mbr_subject.mbs_gid_min) {
263 match = 1;
264 break;
265 }
266 }
267 }
268 if (rule->mbr_subject.mbs_neg & MBS_GID_DEFINED)
269 match = !match;
270 if (!match)
271 return (0);
272 }
273
274 if (rule->mbr_subject.mbs_flags & MBS_PRISON_DEFINED) {
275 match =
276 (cred->cr_prison->pr_id == rule->mbr_subject.mbs_prison);
277 if (rule->mbr_subject.mbs_neg & MBS_PRISON_DEFINED)
278 match = !match;
279 if (!match)
280 return (0);
281 }
282
283 /*
284 * Is there an object match?
285 */

Callers 1

ugidfw_checkFunction · 0.85

Calls 4

mtx_assertFunction · 0.85
groupmemberFunction · 0.50
priv_check_credFunction · 0.50
logFunction · 0.50

Tested by

no test coverage detected