From c7b1e44942d44734311f429e7d6e5e4a561c7099 Mon Sep 17 00:00:00 2001 From: TheScarastic Date: Mon, 4 Apr 2022 11:39:18 +0000 Subject: [PATCH 1/3] netd: Setupp automatic upstream --- .gitlab-ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..f01e7779 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,7 @@ +stages: + - update-from-upstream + +include: + - project: 'e/templates' + ref: master + file: '/gitlab-ci/.gitlab-ci-import-updates-from-upstream.yml' -- GitLab From 094bbdb7587f4527ade977e32be1885371641d81 Mon Sep 17 00:00:00 2001 From: Alexandre Roux D'Anzi Date: Mon, 4 Apr 2022 11:42:03 +0000 Subject: [PATCH 2/3] netd: use dns blocker app to filter trackers --- resolv/getaddrinfo.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/resolv/getaddrinfo.cpp b/resolv/getaddrinfo.cpp index cf8e4d26..c0228ca1 100644 --- a/resolv/getaddrinfo.cpp +++ b/resolv/getaddrinfo.cpp @@ -3,6 +3,7 @@ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + * Copyright (C) 2022 ECORP * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -275,6 +276,63 @@ int getaddrinfo_numeric(const char* hostname, const char* servname, addrinfo hin &event); } +int shouldBlockRequest(const char* hostname, int uid){ + int sock; + struct sockaddr_in server; + char message[1000], server_reply[2000]; + + //Create socket + sock = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); + if (sock == -1) { + LOG(DEBUG) << "Socket: Could not create socket"; + } + LOG(DEBUG) << "Socket: created"; + + server.sin_addr.s_addr = inet_addr("127.0.0.1"); + server.sin_family = AF_INET; + server.sin_port = htons( 8888 ); + + //Connect to remote server + if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { + LOG(DEBUG) << "Socket: connect failed. Error"; + close(sock); + return -1; + } + + LOG(DEBUG) << "Socket: Connected"; + + //keep communicating with server + snprintf(message, sizeof(message), "%s,%d", hostname, uid); + + //Send some data + if(send(sock, message, strlen(message), 0) < 0) { + LOG(DEBUG) << "Socket: Send failed"; + close(sock); + return 0; + } + shutdown(sock, SHUT_WR); + //Receive a reply from the server + if (recv(sock, server_reply, 2000, 0) < 0) { + LOG(DEBUG) << "Socket:recv failed"; + close(sock); + return 0; + } + + LOG(DEBUG) << "Socket: Server reply : " << server_reply; + if (strncmp(server_reply, "pass", 4) == 0) { + LOG(DEBUG) << "Socket: Shouldn't block"; + close(sock); + return 0; + } else { + LOG(DEBUG) << "Socket: should block"; + close(sock); + return 1; + } + close(sock); + return 0; + +} + int android_getaddrinfofornetcontext(const char* hostname, const char* servname, const struct addrinfo* hints, const struct android_net_context* netcontext, @@ -301,6 +359,12 @@ int android_getaddrinfofornetcontext(const char* hostname, const char* servname, .ai_next = nullptr, }; + if (shouldBlockRequest(hostname, netcontext->uid)) { + char* dest = new char[10]; + strncpy(dest, "localhost", strlen("localhost")); + hostname = dest; + } + do { if (hostname == NULL && servname == NULL) { error = EAI_NONAME; -- GitLab From 3e3d9fd871a8aa56934b7c0bb1498ffe15b9c8ee Mon Sep 17 00:00:00 2001 From: TheScarastic Date: Mon, 4 Apr 2022 11:44:48 +0000 Subject: [PATCH 3/3] netd: Adapt for Unix socket --- resolv/getaddrinfo.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/resolv/getaddrinfo.cpp b/resolv/getaddrinfo.cpp index c0228ca1..5065497d 100644 --- a/resolv/getaddrinfo.cpp +++ b/resolv/getaddrinfo.cpp @@ -277,23 +277,26 @@ int getaddrinfo_numeric(const char* hostname, const char* servname, addrinfo hin } int shouldBlockRequest(const char* hostname, int uid){ - int sock; - struct sockaddr_in server; + int sock, len; + struct sockaddr_un server; char message[1000], server_reply[2000]; //Create socket - sock = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); - if (sock == -1) { - LOG(DEBUG) << "Socket: Could not create socket"; + sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (sock == -1) { + LOG(DEBUG) << "Socket: Could not create socket"; } LOG(DEBUG) << "Socket: created"; - server.sin_addr.s_addr = inet_addr("127.0.0.1"); - server.sin_family = AF_INET; - server.sin_port = htons( 8888 ); + char const* name = "foundation.e.privacy"; + int nameLen = strlen(name); + server.sun_path[0] = '\0'; /* abstract namespace */ + strncpy(server.sun_path + 1, name, nameLen); + server.sun_family = AF_UNIX; + len = 1 + nameLen + offsetof(struct sockaddr_un, sun_path); //Connect to remote server - if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { + if (connect(sock, (struct sockaddr *)&server, len) < 0) { LOG(DEBUG) << "Socket: connect failed. Error"; close(sock); return -1; -- GitLab