From: naruto canada <narutocanada@gmail.com>
To: musl@lists.openwall.com
Subject: [musl] these 2 patches might be useful for "private" use
Date: Sat, 2 Apr 2022 23:32:07 +0000 [thread overview]
Message-ID: <CAKrOiPT9cxguqE5RytJfbXY7-tj28ev5Uk2U5Dh74u7hiwv8KA@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1540 bytes --]
hi
I have kept these 2 patches for many years.
I use them daily for many years.
They enable "implied" wildcard interpretation of /etc/hosts.
I am not asking for them to be included into musl,
because they have no safety check, and code quality
sadly lacking too. However, they are good for private use.
I share them with musl community and release them into public.
Since /etc/hosts is mostly admin's responsibility, and should not
be writable by user programs, it should be ok if read only.
for example:
cat /etc/hosts
127.0.0.1 adservice.google.com
127.0.0.1 doubleclick.net
127.0.0.1 facebook.com
127.0.0.1 facebook.net
127.0.0.1 google-analytics.com
127.0.0.1 googleadservices.com
127.0.0.1 googleapis.com
127.0.0.1 googlesyndication.com
127.0.0.1 googletagmanager.com
127.0.0.1 googletagservices.com
127.0.0.1 googleusercontent.com
127.0.0.1 somecountry
The above will be interpreted as:
127.0.0.1 *.adservice.google.com
127.0.0.1 *.doubleclick.net
127.0.0.1 *.facebook.com
127.0.0.1 *.facebook.net
127.0.0.1 *.google-analytics.com
127.0.0.1 *.googleadservices.com
127.0.0.1 *.googleapis.com
127.0.0.1 *.googlesyndication.com
127.0.0.1 *.googletagmanager.com
127.0.0.1 *.googletagservices.com
127.0.0.1 *.googleusercontent.com
127.0.0.1 *.somecountry
NOTE: max line length is 255 hard coded, you may change that easily.
NOTE: there are many ways to achieve the same result with other tools,
I think of it as one more layer of protection (easier than patching browsers)
NOTE: only works if you compile your user land with musl-libc.
[-- Attachment #2: musl-1.1.21.etc.hosts.lookup.patch --]
[-- Type: application/octet-stream, Size: 2212 bytes --]
--- org/src/network/lookup_name.c
+++ musl-1.1.21/src/network/lookup_name.c
@@ -6,6 +6,7 @@
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
+#include <strings.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
@@ -63,11 +64,26 @@
}
while (fgets(line, sizeof line, f) && cnt < MAXADDRS) {
char *p, *z;
-
+/*
if ((p=strchr(line, '#'))) *p++='\n', *p=0;
for(p=line+1; (p=strstr(p, name)) &&
(!isspace(p[-1]) || !isspace(p[l])); p++);
if (!p) continue;
+*/
+ if (strchr(line, '#')) continue; // skip comment
+ char t1[256]; char t2[256]; int i,j; // t2 is name to be lookup
+ j=strlen(line); for (i=0;i<j;i++) t1[i]=(line)[j-1-i]; t1[j]=0; // reverse string
+ j=strlen(name); for (i=0;i<j;i++) t2[i]=(name)[j-1-i]; t2[j]=0; // reverse string
+ j=strlen(t1); for (i=0;i<j;i++) if (t1[i]==' ') t1[i]=0; // stops at space
+ if (t1[0]=='\n') { j=strlen(t1)-1; for (i=0;i<j;i++) t1[i]=t1[i+1]; t1[j]=0; } // skip newline
+ // fprintf(stderr,"[%s][%s]\n",t1,t2);
+ // if (t2[strlen(t2)-1]=='.') fprintf(stderr," [BS name!]\n"); // skip BS
+ if (t2[strlen(t2)-1]=='.') continue; // skip BS
+ if (strncasecmp(t1,t2,strlen(t1))==0) {
+ if (strlen(t2)==strlen(t1)) {fprintf(stderr," [%s][musl case1]\n",name);goto here;}
+ if ((strlen(t2)-1)>strlen(t1))
+ if (t2[strlen(t1)]=='.') {fprintf(stderr," [%s][musl case2]\n",name);goto here;}
+ } continue; here:
/* Isolate IP address to parse */
for (p=line; *p && !isspace(*p); p++);
@@ -87,9 +103,11 @@
for (; *p && isspace(*p); p++);
for (z=p; *z && !isspace(*z); z++);
*z = 0;
- if (is_valid_hostname(p)) memcpy(canon, p, z-p+1);
+// if (is_valid_hostname(p)) { memcpy(canon, p, z-p+1); fprintf(stderr,"[%s][%s][%d]\n",name,p,z-p+1); }
+ if (is_valid_hostname(name)) memcpy(canon, name, strlen(name));
}
__fclose_ca(f);
+ if (cnt==0) fprintf(stderr,"![%s][musl not found]\n",name);
return cnt ? cnt : badfam;
}
[-- Attachment #3: musl-1.2.2.etc.hosts.lookup.patch --]
[-- Type: application/octet-stream, Size: 2215 bytes --]
--- old/src/network/lookup_name.c
+++ new/src/network/lookup_name.c
@@ -14,6 +14,7 @@
#include "lookup.h"
#include "stdio_impl.h"
#include "syscall.h"
+#include <strings.h>
static int is_valid_hostname(const char *host)
{
@@ -63,11 +64,26 @@
}
while (fgets(line, sizeof line, f) && cnt < MAXADDRS) {
char *p, *z;
-
+/*
if ((p=strchr(line, '#'))) *p++='\n', *p=0;
for(p=line+1; (p=strstr(p, name)) &&
(!isspace(p[-1]) || !isspace(p[l])); p++);
if (!p) continue;
+*/
+ if (strchr(line, '#')) continue; // skip comment
+ char t1[256]; char t2[256]; int i,j; // t2 is name to be lookup
+ j=strlen(line); for (i=0;i<j;i++) t1[i]=(line)[j-1-i]; t1[j]=0; // reverse string
+ j=strlen(name); for (i=0;i<j;i++) t2[i]=(name)[j-1-i]; t2[j]=0; // reverse string
+ j=strlen(t1); for (i=0;i<j;i++) if (t1[i]==' ') t1[i]=0; // stops at space
+ if (t1[0]=='\n') { j=strlen(t1)-1; for (i=0;i<j;i++) t1[i]=t1[i+1]; t1[j]=0; } // skip newline
+ // fprintf(stderr,"[%s][%s]\n",t1,t2);
+ // if (t2[strlen(t2)-1]=='.') fprintf(stderr," [BS name!]\n"); // skip BS
+ if (t2[strlen(t2)-1]=='.') continue; // skip BS
+ if (strncasecmp(t1,t2,strlen(t1))==0) {
+ if (strlen(t2)==strlen(t1)) {fprintf(stderr," [%s][musl case1]\n",name);goto here;}
+ if ((strlen(t2)-1)>strlen(t1))
+ if (t2[strlen(t1)]=='.') {fprintf(stderr," [%s][musl case2]\n",name);goto here;}
+ } continue; here:
/* Isolate IP address to parse */
for (p=line; *p && !isspace(*p); p++);
@@ -92,9 +108,13 @@
if (is_valid_hostname(p)) {
have_canon = 1;
memcpy(canon, p, z-p+1);
+ fprintf(stderr," [%s][%s][%d][musl found]\n",name,p,z-p+1);
+ if (is_valid_hostname(name)) memcpy(canon, name, strlen(name));
}
+ if (is_valid_hostname(name)) memcpy(canon, name, strlen(name));
}
__fclose_ca(f);
+ if (cnt==0) fprintf(stderr,"![%s][musl not found]\n",name);
return cnt ? cnt : badfam;
}
reply other threads:[~2022-04-02 23:32 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAKrOiPT9cxguqE5RytJfbXY7-tj28ev5Uk2U5Dh74u7hiwv8KA@mail.gmail.com \
--to=narutocanada@gmail.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).