mailing list of musl libc
 help / color / mirror / code / Atom feed
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 \
    --subject='Re: [musl] these 2 patches might be useful for "private" use' \
    /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

Code repositories for project(s) associated with this 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).