[apparmor] [patch 3/5] provide a mapping of sock type and name and a fn to look access the mapping

john.johansen at canonical.com john.johansen at canonical.com
Wed Aug 6 12:32:47 UTC 2014


Signed-off-by: John Johansen <john.johansen at canonical.com>
---
 parser/network.c |   54 +++++++++++++++++++++++++++++++++++++++++-------------
 parser/network.h |    3 +++
 2 files changed, 44 insertions(+), 13 deletions(-)

--- 2.9-test.orig/parser/network.c
+++ 2.9-test/parser/network.c
@@ -35,23 +35,51 @@
  * have to make sure these are in order.  This means we are more brittle
  * but there isn't much we can do.
  */
-const char *sock_types[] = {
-	"none",		/* 0 */
-	"stream",	/* 1 [SOCK_STREAM] */
-	"dgram",	/* 2 [SOCK_DGRAM] */
-	"raw",		/* 3 [SOCK_RAW] */
-	"rdm",		/* 4 [SOCK_RDM] */
-	"seqpacket",	/* 5 [SOCK_SEQPACKET] */
-	"dccp",		/* 6 [SOCK_DCCP] */
-	"invalid",	/* 7 */
-	"invalid",	/* 8 */
-	"invalid",	/* 9 */
-	"packet",	/* 10 [SOCK_PACKET] */
+struct sock_type_map {
+	const char *name;
+	int	value;
+};
+
+struct sock_type_map sock_types[] = {
+	{ "none",	0 },
+	{ "stream",	SOCK_STREAM },
+	{ "dgram",	SOCK_DGRAM },
+	{ "raw",	SOCK_RAW },
+	{ "rdm",	SOCK_RDM },
+	{ "seqpacket",	SOCK_SEQPACKET },
+	{ "dccp",	SOCK_DCCP },
+	{ "invalid",	-1 },
+	{ "invalid",	-1 },
+	{ "invalid",	-1 },
+	{ "packet",	SOCK_PACKET },
+	{ NULL, -1 },
 	/*
 	 * See comment above
 	*/
 };
 
+int net_find_type_val(const char *type)
+{
+	int i;
+	for (i = 0; sock_types[i].name; i++) {
+		if (strcmp(sock_types[i].name, type) == 0)
+			return sock_types[i].value;
+	}
+
+	return -1;
+}
+
+const char *net_find_type_name(int type)
+{
+	int i;
+	for (i = 0; sock_types[i].name; i++) {
+		if (sock_types[i].value  == type)
+			return sock_types[i].name;
+	}
+
+	return NULL;
+}
+
 struct network_tuple {
 	const char *family_name;
 	unsigned int family;
@@ -319,7 +347,7 @@
 			for (j = 0; j < count; j++) {
 				const char *type;
 				if (array[i] & (1 << j)) {
-					type = sock_types[j];
+					type = sock_types[j].name;
 					if (type)
 						printf("%s ", type);
 					else
--- 2.9-test.orig/parser/network.h
+++ 2.9-test/parser/network.h
@@ -75,4 +75,7 @@
 	}
 };
 
+int net_find_type_val(const char *type);
+const char *net_find_type_name(int type);
+
 #endif /* __AA_NETWORK_H */




More information about the AppArmor mailing list