diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2012-11-14 12:28:36 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2012-11-21 20:13:07 +0900 |
commit | 959c2543dd4335f2b19daa636ffde813043654f7 (patch) | |
tree | 7e7b3060182a0c9d776cdb398c9e349470b5ced3 | |
parent | d758e6092bbd733f608ea49ffdd00f0d421b4fc7 (diff) | |
download | ping6-959c2543dd4335f2b19daa636ffde813043654f7.tar.gz |
Include ping6 in userdebug builds.
Also require that the user be root or have Internet
permission, like we do for IPv4.
Change-Id: I8ab8350885548ab83d5198adee912137b36d7a8d
-rw-r--r-- | Android.mk | 2 | ||||
-rw-r--r-- | ping6.c | 24 |
2 files changed, 25 insertions, 1 deletions
@@ -3,5 +3,5 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= ping6.c LOCAL_MODULE := ping6 -LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_TAGS := debug include $(BUILD_EXECUTABLE) @@ -131,6 +131,8 @@ __RCSID("$NetBSD: ping6.c,v 1.73 2010/09/20 11:49:48 ahoka Exp $"); #include <unistd.h> #include <poll.h> +#include <private/android_filesystem_config.h> + #ifdef IPSEC #include <netinet6/ah.h> #include <netinet6/ipsec.h> @@ -298,6 +300,23 @@ char *nigroup(char *); void usage(void); int +isInSupplementaryGroup(gid_t group) +{ + int numgroups, i; + gid_t groups[sysconf(_SC_NGROUPS_MAX) + 1]; + numgroups = getgroups(sizeof(groups) / sizeof(groups[0]), groups); + if (numgroups < 0) { + perror("getgroups"); + return 0; + } + for (i = 0; i < numgroups; i++) { + if (group == groups[i]) + return 1; + } + return 0; +} + +int main(int argc, char *argv[]) { struct itimerval itimer; @@ -331,6 +350,11 @@ main(int argc, char *argv[]) int mflag = 0; #endif + if (getuid() != 0 && !isInSupplementaryGroup(AID_INET)) { + fprintf(stderr, "%s: not root or in group AID_INET\n", argv[0]); + exit(3); + } + /* just to be sure */ memset(&smsghdr, 0, sizeof(smsghdr)); memset(&smsgiov, 0, sizeof(smsgiov)); |