Subject: pkg/10077: unproven-pthreads users cannot set h_errno
To: None <gnats-bugs@gnats.netbsd.org>
From: Andrew Brown <atatat@atatdot.net>
List: netbsd-bugs
Date: 05/08/2000 15:17:13
>Number:         10077
>Category:       pkg
>Synopsis:       unproven-pthreads users cannot set h_errno, only read it
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    pkg-manager
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Mon May 08 15:18:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     TheMan
>Release:        1.4X of 20000504
>Organization:
none
>Environment:
System: NetBSD ebola 1.4X NetBSD 1.4X (RESTON) #7: Mon May 8 16:42:28 EDT 2000 andrew@ebola:/usr/src/sys/arch/i386/compile/RESTON i386
	(haven't updated for a few days)

>Description:

	unproven-pthreads package's definitions of h_errno

# grep h_errno /usr/pkg/pthreads/include/*.h
/usr/pkg/pthreads/include/netdb.h:extern int h_errno;
/usr/pkg/pthreads/include/netdb.h: * (left in extern int h_errno).
/usr/pkg/pthreads/include/resolv.h:#define h_errno (_res_get_error())

	conflict, and are incompatible with the man page's
	(man gethostbyname) definition of h_errno

# grep h_errno /usr/include/*.h
/usr/include/netdb.h:extern int h_errno;
/usr/include/netdb.h: * (left in extern int h_errno).

	thus leaving the actual behavior of such an application a
	mystery to me, but definitely rendering h_errno as something
	that can't be used as an lvalue.

>How-To-Repeat:

	decide to play with sendmail's filtering api.  read docs.
	attempt to build fresh sendmail outside of tree.

# cd /usr/local/src/sendmail-8.10.1
# cat > devtools/Site/site.config.m4
dnl Milter
APPENDDEF(`conf_sendmail_ENVDEF', `-D_FFR_MILTER=1 -I/usr/pkg/pthreads/include')
APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_MILTER=1 -I/usr/pkg/pthreads/include') 
^D
# make
...
cc -O -I. -I../../include -DNEWDB -DNIS -DMAP_REGEX  -DNETISO -D_FFR_MILTER=1 -I/usr/pkg/pthreads/include   -c daemon.c
daemon.c: In function `makeconnection':
daemon.c:1554: invalid lvalue in assignment
daemon.c: In function `host_map_lookup':
daemon.c:2795: invalid lvalue in assignment
# more +1554 sendmail/daemon.c
...
        h_errno = 0;
...

>Fix:

	dunno.  i assume *we* could come up with a patch to the
	unproven-pthreads package to work this properly (i think
	h_errno should be a function that returns a pointer to
	an int, although i don't know how to make it non-volatile
	off the top of my head), but really the threads package
	shouldn't be violating the api like that.  imo.
>Release-Note:
>Audit-Trail:
>Unformatted: