Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edc26f7a authored by Jan Engelhardt's avatar Jan Engelhardt Committed by David S. Miller
Browse files

[NETFILTER]: xt_owner: allow matching UID/GID ranges



Add support for ranges to the new revision. This doesn't affect
compatibility since the new revision was not released yet.

Signed-off-by: default avatarJan Engelhardt <jengelh@computergmbh.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 37c08387
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -8,8 +8,8 @@ enum {
};
};


struct xt_owner_match_info {
struct xt_owner_match_info {
	u_int32_t uid;
	u_int32_t uid_min, uid_max;
	u_int32_t gid;
	u_int32_t gid_min, gid_max;
	u_int8_t match, invert;
	u_int8_t match, invert;
};
};


+8 −6
Original line number Original line Diff line number Diff line
@@ -4,8 +4,8 @@
 *
 *
 * (C) 2000 Marc Boucher <marc@mbsi.ca>
 * (C) 2000 Marc Boucher <marc@mbsi.ca>
 *
 *
 * Copyright © CC Computer Consultants GmbH, 2007
 * Copyright © CC Computer Consultants GmbH, 2007 - 2008
 * Contact: <jengelh@computergmbh.de>
 * <jengelh@computergmbh.de>
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * it under the terms of the GNU General Public License version 2 as
@@ -102,13 +102,15 @@ owner_mt(const struct sk_buff *skb, const struct net_device *in,
		       (XT_OWNER_UID | XT_OWNER_GID)) == 0;
		       (XT_OWNER_UID | XT_OWNER_GID)) == 0;


	if (info->match & XT_OWNER_UID)
	if (info->match & XT_OWNER_UID)
		if ((filp->f_uid != info->uid) ^
		if ((filp->f_uid >= info->uid_min &&
		    !!(info->invert & XT_OWNER_UID))
		    filp->f_uid <= info->uid_max) ^
		    !(info->invert & XT_OWNER_UID))
			return false;
			return false;


	if (info->match & XT_OWNER_GID)
	if (info->match & XT_OWNER_GID)
		if ((filp->f_gid != info->gid) ^
		if ((filp->f_gid >= info->gid_min &&
		    !!(info->invert & XT_OWNER_GID))
		    filp->f_gid <= info->gid_max) ^
		    !(info->invert & XT_OWNER_GID))
			return false;
			return false;


	return true;
	return true;