Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jun 1995 08:48:59 +0200 (MET DST)
From:      J Wunsch <j@uriah.heep.sax.de>
To:        freebsd-current@FreeBSD.org (FreeBSD-current users)
Subject:   Re: kern/562: netscape (bsdi executable) can't do a uname (fix provided)
Message-ID:  <199506260648.IAA22112@uriah.heep.sax.de>
In-Reply-To: <199506251830.LAA00912@freefall.cdrom.com> from "peter@haywire.dialix.com" at Jun 25, 95 11:30:01 am

next in thread | previous in thread | raw e-mail | index | archive | help
Can any brave soul who's actually got Netscape 1.1 try this?

As peter@haywire.dialix.com wrote:
> 
> 
> >Number:         562
> >Category:       kern
> >Synopsis:       netscape (bsdi executable) can't do a uname (fix provided)
> >Confidential:   no
> >Severity:       non-critical
> >Priority:       low
> >Responsible:    freebsd-bugs (FreeBSD bugs mailing list)
> >State:          open
> >Class:          change-request
> >Submitter-Id:   current-users
> >Arrival-Date:   Sun Jun 25 11:30:00 1995
> >Originator:     Peter Wemm
> >Organization:
> DIALix Services
> >Release:        FreeBSD 2.0-BUILT-19950625 i386
> >Environment:
> 
> FreeBSD-current
> FreeBSD jhome.DIALix.COM 2.0-BUILT-19950625 FreeBSD 2.0-BUILT-19950625 #4: Sun Jun 25 22:05:25 WST 1995     pwroot@jhome.DIALix.COM:/usr/src/sys/compile/JHOME  i386
> 
> >Description:
> 
> Netscape 1.1N does a uname() at startup to discover the Host OS type.
> This information is presented to every server that it connects to, and
> is probably logged for statistics, at least on home.netscape.com.
> 
> The problem is, that it identifies itself as (while running on FreeBSD) as
> something like this:
> 
> GET / HTTP/1.0
> User-Agent: Mozilla/1.1N (X11; I; BSD/386 uname failed)
> Accept: */*
> Accept: image/gif
> Accept: image/x-xbitmap
> Accept: image/jpeg
> 
> This does not do much to help convince Netscape to support FreeBSD in the
> future.... :-)
> 
> After applying this patch, it identifies itself like this: (Thanks to 
> Gary Palmer for the idea on how to see this info)
> 
> GET / HTTP/1.0
> User-Agent: Mozilla/1.1N (X11; I; FreeBSD 2.0-BUILT-1995060 i386)
> Accept: */*
> Accept: image/gif
> Accept: image/x-xbitmap
> Accept: image/jpeg
> 
> (BTW: FreeBSD-current is still "2.0-built-nnnnn"????)
> 
> Also, when starting up netscape, there is a very annoying printf
> "uname() failed; can't tell what system we're running on"
> 
> >How-To-Repeat:
> 
> Run netscape...
> 
> >Fix:
> 	
> Apply this patch to /usr/src/sys/kern/kern_sysctl.c and make sure
> COMPAT_43 is defined (netscape is a 4.3BSD-net2 binary, so it should
> have COMPAT_43 defined anyway)
> 
> Apologies for the ugly code here..
> 
> -Peter
> 
> *** kern_sysctl-dist.c	Tue May 30 18:58:22 1995
> --- kern_sysctl.c	Mon Jun 26 02:01:21 1995
> ***************
> *** 767,772 ****
> --- 767,818 ----
>   #define	KINFO_LOADAVG		(5<<8)
>   #define	KINFO_CLOCKRATE		(6<<8)
>   
> + /* Non-standard BSDI extension - only present on their 4.3 net-2 releases */
> + #define	KINFO_BSDI_SYSINFO	(101<<8)
> + 
> + /*
> +  * XXX this is bloat, but I hope it's better here than on the potentially
> +  * limited kernel stack...  -Peter
> +  */
> + 
> + struct {
> + 	char	*bsdi_machine;		/* "i386" on BSD/386 */
> + 	char	*pad0;
> + 	long	pad1;
> + 	long	pad2;
> + 	long	pad3;
> + 	u_long	pad4;
> + 	u_long	pad5;
> + 	u_long	pad6;
> + 
> + 	char	*bsdi_ostype;		/* "BSD/386" on BSD/386 */
> + 	char	*bsdi_osrelease;	/* "1.1" on BSD/386 */
> + 	long	pad7;
> + 	long	pad8;
> + 	char	*pad9;
> + 
> + 	long	pad10;
> + 	long	pad11;
> + 	int	pad12;
> + 	long	pad13;
> + 	quad_t	pad14;
> + 	long	pad15;
> + 
> + 	struct	timeval pad16;
> + 	/* we dont set this, because BSDI's uname used gethostname() instead */
> + 	char	*bsdi_hostname;		/* hostname on BSD/386 */
> + 
> + 	/* the actual string data is appended here */
> + 
> + } bsdi_si;
> + /*
> +  * this data is appended to the end of the bsdi_si structure during copyout.
> +  * The "char *" offsets are relative to the base of the bsdi_si struct.
> +  * This contains "FreeBSD\02.0-BUILT-nnnnnn\0i386\0", and these strings
> +  * should not exceed the length of the buffer here... (or else!! :-)
> +  */
> + char bsdi_strings[80];	/* It had better be less than this! */
> + 
>   struct getkerninfo_args {
>   	int	op;
>   	char	*where;
> ***************
> *** 829,834 ****
> --- 875,937 ----
>   		name[0] = KERN_CLOCKRATE;
>   		error = kern_sysctl(name, 1, uap->where, &size, NULL, 0, p);
>   		break;
> + 
> + 	case KINFO_BSDI_SYSINFO: {
> + 		/*
> + 		 * this is pretty crude, but it's just enough for uname()
> + 		 * from BSDI's 1.x libc to work.
> + 		 */
> + 
> + 		u_int needed;
> + 		u_int left;
> + 		char *s;
> + 
> + 		bzero((char *)&bsdi_si, sizeof(bsdi_si));
> + 		bzero(bsdi_strings, sizeof(bsdi_strings));
> + 
> + 		s = bsdi_strings;
> + 
> + 		bsdi_si.bsdi_ostype = ((char *)(s - bsdi_strings)) + sizeof(bsdi_si);
> + 		strcpy(s, ostype);
> + 		s += strlen(s) + 1;
> + 
> + 		bsdi_si.bsdi_osrelease = ((char *)(s - bsdi_strings)) + sizeof(bsdi_si);
> + 		strcpy(s, osrelease);
> + 		s += strlen(s) + 1;
> + 
> + 		bsdi_si.bsdi_machine = ((char *)(s - bsdi_strings)) + sizeof(bsdi_si);
> + 		strcpy(s, machine);
> + 		s += strlen(s) + 1;
> + 
> + 		needed = sizeof(bsdi_si) + (s - bsdi_strings);
> + 
> + 		if (uap->where == NULL) {
> + 			/* process is asking how much buffer to supply.. */
> + 			size = needed;
> + 			error = 0;
> + 			break;
> + 		}
> + 
> + 		/* if too much buffer supplied, trim it down */
> + 		if (size > needed)
> + 			size = needed;
> + 
> + 		/* how much of the buffer is remaining */
> + 		left = size;
> + 
> + 		if ((error = copyout((char *)&bsdi_si, uap->where, left)) != 0)
> + 			break;
> + 
> + 		/* is there any point in continuing? */
> + 		if (left > sizeof(bsdi_si))
> + 			left -= sizeof(bsdi_si);
> + 		else
> + 			break;
> + 
> + 		error = copyout(&bsdi_strings, uap->where + sizeof(bsdi_si),
> + 									left);
> + 		break;
> + 	}
>   
>   	default:
>   		return (EOPNOTSUPP);
> >Audit-Trail:
> >Unformatted:
> 
> 
> 


-- 
cheers, J"org

joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/
Never trust an operating system you don't have sources for. ;-)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199506260648.IAA22112>