Subject: pkg/18728: buildlink2 support and more patches for security/libident
To: None <gnats-bugs@gnats.netbsd.org>
From: Greg A. Woods <woods@weird.com>
List: netbsd-bugs
Date: 10/19/2002 16:24:03
>Number:         18728
>Category:       pkg
>Synopsis:       buildlink2 support and more patches for security/libident
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Oct 19 13:25:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Greg A. Woods
>Release:        pkgsrc-current 2002/10/18
>Organization:
Planix, Inc.; Toronto, Ontario; Canada
>Environment:
System: NetBSD

>Description:

	buildlink2 support and more patches for security/libident

>How-To-Repeat:

>Fix:

cvs diff: Diffing security/libident
Index: security/libident/Makefile
===================================================================
RCS file: /cvs/master/m-NetBSD/main/pkgsrc/security/libident/Makefile,v
retrieving revision 1.8
diff -c -r1.8 Makefile
*** security/libident/Makefile	17 Feb 2001 17:49:50 -0000	1.8
--- security/libident/Makefile	6 Oct 2002 04:24:39 -0000
***************
*** 2,7 ****
--- 2,8 ----
  # FreeBSD ID: Makefile,v 1.6 1998/01/25 20:42:37 torstenb Exp
  
  DISTNAME=	libident-0.22
+ PKGREVISION=	1
  CATEGORIES=	security devel net
  MASTER_SITES=	ftp://ftp.lysator.liu.se/pub/ident/libs/
  
***************
*** 9,14 ****
--- 10,16 ----
  COMMENT=	Small library to interface to the ident protocol server (rfc1413)
  
  USE_LIBTOOL=	# defined
+ USE_BUILDLINK2=	YES
  
  ALL_TARGET=	netbsd
  MAKE_ENV+=	INSTALL_DATA="${INSTALL_DATA}"
Index: security/libident/buildlink2.mk
===================================================================
RCS file: security/libident/buildlink2.mk
diff -N security/libident/buildlink2.mk
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- security/libident/buildlink2.mk	6 Oct 2002 04:09:32 -0000
***************
*** 0 ****
--- 1,18 ----
+ #ident "@(#):$NetBSD$"
+ 
+ .if !defined(LIBIDENT_BUILDLINK2_MK)
+ 
+ BUILDLINK_PACKAGES+=		libident
+ BUILDLINK_DEPENDS.libident?=	libident>=0.22
+ BUILDLINK_PKGSRCDIR.libident?=	../../security/libident
+ 
+ EVAL_PREFIX+=			BUILDLINK_PREFIX.libident=libident
+ BUILDLINK_PREFIX.libident_DEFAULT=	${LOCALBASE}
+ BUILDLINK_FILES.libident=	include/ident.h
+ BUILDLINK_FILES.libident+=	lib/libident.*
+ 
+ BUILDLINK_TARGETS+=		libident-buildlink
+ 
+ libident-buildlink: _BUILDLINK_USE
+ 
+ .endif	# LIBIDENT_BUILDLINK2_MK
Index: security/libident/distinfo
===================================================================
RCS file: /cvs/master/m-NetBSD/main/pkgsrc/security/libident/distinfo,v
retrieving revision 1.2
diff -c -r1.2 distinfo
*** security/libident/distinfo	19 Apr 2001 15:40:33 -0000	1.2
--- security/libident/distinfo	22 Apr 2002 23:02:30 -0000
***************
*** 3,5 ****
--- 3,6 ----
  SHA1 (libident-0.22.tar.gz) = cf70a9600880085c333d4e8623ece8056a196cc6
  Size (libident-0.22.tar.gz) = 10716 bytes
  SHA1 (patch-aa) = 1d5f7837d8979ea62427731b858399a47fd19a80
+ SHA1 (patch-zz) = e2834a2572517fbb89bd97953171ee9d8854f2ed
cvs diff: Diffing security/libident/patches
Index: security/libident/patches/patch-zz
===================================================================
RCS file: security/libident/patches/patch-zz
diff -N security/libident/patches/patch-zz
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- security/libident/patches/patch-zz	22 Apr 2002 22:26:28 -0000
***************
*** 0 ****
--- 1,957 ----
+ 1cvs diff: Diffing .
+ Index: INSTALL
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/INSTALL,v
+ retrieving revision 1.1.1.1
+ retrieving revision 1.2
+ diff -c -r1.1.1.1 -r1.2
+ *** INSTALL	14 Feb 1995 20:48:22 -0000	1.1.1.1
+ --- INSTALL	13 Apr 1998 02:02:51 -0000	1.2
+ ***************
+ *** 4,10 ****
+   
+   where target can be one of:
+   
+ ! 	sunos5, sunos4, svr4, bsd, linux, nextstep3.0 or nextstep3.1
+   
+   For other systems you'll need to hack the Makefile (please do send
+   me any patches you make so I can include them into the next version!)
+ --- 4,11 ----
+   
+   where target can be one of:
+   
+ ! 	sunos5, sunos4, svr4, bsd, bsd2.11, bsd4.4, linux, nextstep3.0,
+ ! 	or nextstep3.1
+   
+   For other systems you'll need to hack the Makefile (please do send
+   me any patches you make so I can include them into the next version!)
+ Index: README
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/README,v
+ retrieving revision 1.1.1.3
+ retrieving revision 1.2
+ diff -c -r1.1.1.3 -r1.2
+ *** README	13 Apr 1998 00:55:33 -0000	1.1.1.3
+ --- README	22 Apr 2002 21:48:56 -0000	1.2
+ ***************
+ *** 13,19 ****
+   
+   The official FTP site and location for libident is:
+   
+ ! 	ftp://ftp.lysator.liu.se/pub/ident/libs
+   
+   
+   COMMENTS:
+ --- 13,19 ----
+   
+   The official FTP site and location for libident is:
+   
+ ! 	ftp://ftp.lysator.liu.se/pub/ident/libs/
+   
+   
+   COMMENTS:
+ Index: id_close.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/id_close.c,v
+ retrieving revision 1.1.1.1
+ retrieving revision 1.3
+ diff -c -r1.1.1.1 -r1.3
+ Index: id_open.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/id_open.c,v
+ retrieving revision 1.1.1.4
+ retrieving revision 1.2
+ diff -c -r1.1.1.4 -r1.2
+ *** id_open.c	14 Mar 1999 22:37:07 -0000	1.1.1.4
+ --- id_open.c	22 Apr 2002 22:10:04 -0000	1.2
+ ***************
+ *** 38,52 ****
+   #endif
+   
+   
+ - /*
+   ident_t *id_open __P3(struct in_addr *, laddr,
+   		      struct in_addr *, faddr,
+   		      struct timeval *, timeout)
+ - */
+ - 
+ - ident_t *id_open __P((	__STRUCT_IN_ADDR_P laddr,
+ - 			__STRUCT_IN_ADDR_P faddr,
+ - 			__STRUCT_TIMEVAL_P timeout))
+   {
+       ident_t *id;
+       int res, tmperrno;
+ --- 38,46 ----
+ Index: id_parse.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/id_parse.c,v
+ retrieving revision 1.1.1.5
+ retrieving revision 1.5
+ diff -c -r1.1.1.5 -r1.5
+ *** id_parse.c	14 Mar 1999 22:37:07 -0000	1.1.1.5
+ --- id_parse.c	22 Apr 2002 22:10:04 -0000	1.5
+ ***************
+ *** 24,44 ****
+   #include <sys/wait.h>
+   #include <sys/time.h>
+   
+ - #ifdef _AIX
+ - #  include <sys/select.h>
+ - #endif
+ - 
+ - #ifdef _AIX
+ - #  include <sys/select.h>
+ - #endif
+   #ifdef VMS
+   #  include <sys/socket.h>     /* for fd_set */
+   #endif
+   #define IN_LIBIDENT_SRC
+   #include "ident.h"
+   
+   
+ - /*
+   int id_parse __P7(ident_t *, id,
+   		  struct timeval *, timeout,
+   		  int *, lport,
+ --- 24,37 ----
+   #include <sys/wait.h>
+   #include <sys/time.h>
+   
+   #ifdef VMS
+   #  include <sys/socket.h>     /* for fd_set */
+   #endif
+ + 
+   #define IN_LIBIDENT_SRC
+   #include "ident.h"
+   
+   
+   int id_parse __P7(ident_t *, id,
+   		  struct timeval *, timeout,
+   		  int *, lport,
+ ***************
+ *** 46,60 ****
+   		  char **, identifier,
+   		  char **, opsys,
+   		  char **, charset)
+ - */
+ - 
+ - int id_parse __P((  ident_t *id,               
+ -                     __STRUCT_TIMEVAL_P timeout,
+ -                     int *lport,                
+ -                     int *fport,                
+ -                     char **identifier,         
+ -                     char **opsys,              
+ -                     char **charset))           
+   {
+       char c, *cp, *tmp_charset;
+       fd_set rs;
+ --- 39,44 ----
+ ***************
+ *** 98,110 ****
+   	}
+       }
+       
+ !     /* Every octal value is allowed except 0, \n and \r */
+ !     while (pos < sizeof(id->buf) &&
+ ! 	   (res = read(id->fd, id->buf + pos, 1)) == 1 &&
+ ! 	   id->buf[pos] != '\n' && id->buf[pos] != '\r')
+   	pos++;
+       
+ !     if (res < 0)
+   	return -1;
+       
+       if (res == 0)
+ --- 82,102 ----
+   	}
+       }
+       
+ !     /* Every 8-bit value is allowed except 0, \n, and \r */
+ !     while (pos < (sizeof(id->buf) - 1) &&
+ ! 	   (res = read(id->fd, &(id->buf[pos]), 1)) == 1 &&
+ ! 	   id->buf[pos] != '\n' &&
+ ! 	   id->buf[pos] != '\r')
+ !     {
+ ! 	if (id->buf[pos] == '\0')
+ ! 	{
+ ! 	    errno = EINVAL;
+ ! 	    return -1;
+ ! 	}
+   	pos++;
+ +     }
+       
+ !     if (res < 0)		/* errno set by read() */
+   	return -1;
+       
+       if (res == 0)
+ ***************
+ *** 184,190 ****
+   	*/
+   	if (c == ',')
+   	{
+ ! 	    cp = id_strtok((char *)0, ":", &c);
+   	    if (!cp)
+   		return -2;
+   	    
+ --- 176,182 ----
+   	*/
+   	if (c == ',')
+   	{
+ ! 	    cp = id_strtok((char *)0, ",:", &c);
+   	    if (!cp)
+   		return -2;
+   	    
+ Index: id_query.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/id_query.c,v
+ retrieving revision 1.1.1.4
+ retrieving revision 1.5
+ diff -c -r1.1.1.4 -r1.5
+ *** id_query.c	14 Mar 1999 22:37:08 -0000	1.1.1.4
+ --- id_query.c	22 Apr 2002 22:10:04 -0000	1.5
+ ***************
+ *** 18,52 ****
+   #  include <unistd.h>
+   #endif
+   
+ - #include <sys/types.h>
+   #include <sys/wait.h>
+ - #include <sys/time.h>
+   
+ - #ifdef _AIX
+ - #  include <sys/select.h>
+ - #endif
+ - 
+ - #ifdef _AIX
+ - #  include <sys/select.h>
+ - #endif
+   #ifdef VMS
+   #  include <sys/socket.h>     /* for fd_set */
+   #endif
+   #define IN_LIBIDENT_SRC
+   #include "ident.h"
+   
+   
+ - /*
+   int id_query __P4(ident_t *, id,
+   		  int, lport,
+   		  int, fport,
+   		  struct timeval *, timeout)
+ - */
+ - 
+ - int    id_query __P((	ident_t *id,                 
+ - 			int lport,                   
+ - 			int fport,                   
+ - 			__STRUCT_TIMEVAL_P timeout))
+   {
+   #ifdef SIGRETURNTYPE
+       SIGRETURNTYPE (*old_sig)();
+ --- 18,37 ----
+   #  include <unistd.h>
+   #endif
+   
+   #include <sys/wait.h>
+   
+   #ifdef VMS
+   #  include <sys/socket.h>     /* for fd_set */
+   #endif
+ + 
+   #define IN_LIBIDENT_SRC
+   #include "ident.h"
+   
+   
+   int id_query __P4(ident_t *, id,
+   		  int, lport,
+   		  int, fport,
+   		  struct timeval *, timeout)
+   {
+   #ifdef SIGRETURNTYPE
+       SIGRETURNTYPE (*old_sig)();
+ Index: ident.3
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/ident.3,v
+ retrieving revision 1.1.1.2
+ retrieving revision 1.4
+ diff -c -r1.1.1.2 -r1.4
+ *** ident.3	11 Aug 1995 18:06:59 -0000	1.1.1.2
+ --- ident.3	22 Apr 2002 21:54:23 -0000	1.4
+ ***************
+ *** 1,11 ****
+   .\" Pär Emanuelsson <pell@lysator.liu.se> 1993-03-28
+   .ds : \h'\w'u'u/5'\z"\h'-\w'e'u/5'
+ ! .TH IDENT 3N "4 April 1993" "Lysator ACS"
+   .SH NAME
+ ! ident_lookup, ident_id, ident_free, id_open, id_close, id_query, id_parse,
+ ! id_fileno \- query remote IDENT server
+   .SH SYNOPSIS
+   .nf
+   .B #include <ident.h>
+   .LP
+   .I High-level calls
+ --- 1,21 ----
+   .\" Pär Emanuelsson <pell@lysator.liu.se> 1993-03-28
+   .ds : \h'\w'u'u/5'\z"\h'-\w'e'u/5'
+ ! .TH IDENT 3N "12 April 1998" "Lysator ACS"
+   .SH NAME
+ ! ident_lookup, ident_id, ident_free, id_open, id_close, id_query, id_parse, id_fileno \- query remote IDENT server
+   .SH SYNOPSIS
+   .nf
+ + .B #if TIME_WITH_SYS_TIME
+ + .B # include <sys/time.h>
+ + .B # include <time.h>
+ + .B #else
+ + .B # if HAVE_SYS_TIME_H
+ + .B #  include <sys/time.h>
+ + .B # else
+ + .B #  include <time.h>
+ + .B # endif
+ + .B #endif
+ + .B #include <netinet/in.h>
+   .B #include <ident.h>
+   .LP
+   .I High-level calls
+ ***************
+ *** 18,44 ****
+   .LP
+   .I Low-level calls
+   .LP
+ ! .B id_t *id_open(laddr, faddr, timeout)
+   .B struct in_addr *laddr, *faddr;
+   .B struct timeval *timeout;
+   .LP
+   .B int id_close(id)
+ ! .B id_t *id;
+   .LP
+   .B id_query(id, lport, fport, timeout)
+ ! .B id_t *id;
+   .B int lport, fport;
+   .B struct timeval *timeout;
+   .LP
+   .B int id_parse(id, timeout, lport, fport, identifier,
+ ! .B		opsys, charset)
+ ! .B id_t *id;
+   .B struct timeval *timeout;
+   .B int *lport, *fport;
+   .B char **identifier, **opsys, **charset;
+   .LP
+   .B int id_fileno(id)
+ ! .B id_t *id;
+   .fi
+   .SH DESCRIPTION
+   .LP
+ --- 28,54 ----
+   .LP
+   .I Low-level calls
+   .LP
+ ! .B ident_t *id_open(laddr, faddr, timeout)
+   .B struct in_addr *laddr, *faddr;
+   .B struct timeval *timeout;
+   .LP
+   .B int id_close(id)
+ ! .B ident_t *id;
+   .LP
+   .B id_query(id, lport, fport, timeout)
+ ! .B ident_t *id;
+   .B int lport, fport;
+   .B struct timeval *timeout;
+   .LP
+   .B int id_parse(id, timeout, lport, fport, identifier,
+ ! .B \ \ \ \ \ \ \ \ \ \ \ \ \ opsys, charset)
+ ! .B ident_t *id;
+   .B struct timeval *timeout;
+   .B int *lport, *fport;
+   .B char **identifier, **opsys, **charset;
+   .LP
+   .B int id_fileno(id)
+ ! .B ident_t *id;
+   .fi
+   .SH DESCRIPTION
+   .LP
+ ***************
+ *** 50,57 ****
+   which should be a socket file descriptor.
+   .I timeout
+   is the longest permissible time to block waiting for an answer, and is
+ ! given in seconds. A value of 0 (zero) means wait indefinitely (which in the
+ ! most extreme case will normally be until the underlying network times out).
+   .B ident_lookup
+   returns a pointer to an
+   .I IDENT
+ --- 60,68 ----
+   which should be a socket file descriptor.
+   .I timeout
+   is the longest permissible time to block waiting for an answer, and is
+ ! given in seconds.  A value of 0 (zero) means wait indefinitely (which in
+ ! the most extreme case will normally be until the underlying network
+ ! times out).
+   .B ident_lookup
+   returns a pointer to an
+   .I IDENT
+ ***************
+ *** 65,71 ****
+   	int fport;		/* Far (remote) port */
+   	char *identifier;	/* Normally user name */
+   	char *opsys;		/* OS */
+ ! 	char *charset;		/* Charset (what did you expect?) */
+   } IDENT;
+   .ft R
+   .fi
+ --- 76,82 ----
+   	int fport;		/* Far (remote) port */
+   	char *identifier;	/* Normally user name */
+   	char *opsys;		/* OS */
+ ! 	char *charset;		/* for identifier & opsys */
+   } IDENT;
+   .ft R
+   .fi
+ ***************
+ *** 81,91 ****
+   struct) points to malloc'd data, which can be freed with a call to
+   .B ident_free.
+   .B ident_lookup
+ ! returns 0 on error or timeout. Presently, this should normally be taken to
+ ! mean that the remote site is not running an
+   .SM IDENT
+ ! server, but it might naturally be caused by other network related problems
+ ! as well.
+   .B Note that
+   all fields of the
+   .SM IDENT
+ --- 92,102 ----
+   struct) points to malloc'd data, which can be freed with a call to
+   .B ident_free.
+   .B ident_lookup
+ ! returns 0 on error or timeout.  Presently, this should normally be taken
+ ! to mean that the remote site is not running an
+   .SM IDENT
+ ! server, but it might naturally be caused by other network related
+ ! problems as well.
+   .B Note that
+   all fields of the
+   .SM IDENT
+ ***************
+ *** 110,118 ****
+   .ce
+   .I Low-level calls
+   .LP
+ ! The low-level calls can be used when greater flexibility is needed. For
+ ! example, if non-blocking I/O is needed, or multiple queries to the
+ ! same host are to be made.
+   .LP
+   .B id_open
+   opens a connection to the remote
+ --- 121,129 ----
+   .ce
+   .I Low-level calls
+   .LP
+ ! The low-level calls can be used when greater flexibility is needed.  For
+ ! example, if non-blocking I/O is needed, or multiple queries to the same
+ ! host are to be made.
+   .LP
+   .B id_open
+   opens a connection to the remote
+ ***************
+ *** 128,138 ****
+   .B select(2).
+   .B id_open
+   returns a pointer to an
+ ! .B id_t
+ ! datum, which is an opaque structure to be used as future reference
+ ! to the opened connection. When using non-blocking I/O it might however
+ ! be useful to access the underlying socket file descriptior, which
+ ! can be gotten at through the
+   .B id_fileno
+   macro described below.
+   .LP
+ --- 139,149 ----
+   .B select(2).
+   .B id_open
+   returns a pointer to an
+ ! .B ident_t
+ ! datum, which is an opaque structure to be used as future reference to
+ ! the opened connection.  When using non-blocking I/O it might however be
+ ! useful to access the underlying socket file descriptior, which can be
+ ! gotten at through the
+   .B id_fileno
+   macro described below.
+   .LP
+ ***************
+ *** 156,162 ****
+   .B id_open.
+   If successful,
+   .B id_query
+ ! returns the number of bytes sent to the remote server. If not, -1 is
+   returned and
+   .B errno
+   is set.
+ --- 167,173 ----
+   .B id_open.
+   If successful,
+   .B id_query
+ ! returns the number of bytes sent to the remote server.  If not, -1 is
+   returned and
+   .B errno
+   is set.
+ ***************
+ *** 179,205 ****
+ --- 190,222 ----
+   .RS
+   .TP
+    1
+ + .\"
+   If completely successful.
+   .TP
+   -3
+ + .\"
+   Illegal reply type from remote server.
+   .I identifier
+   is set to the illegal reply.
+   .TP
+   -2
+ + .\"
+   Cannot parse the reply from the server.
+   .I identifier
+   is normally set to the illegal reply.
+   .TP
+   -1
+ + .\"
+   On general errors or timeout.
+   .TP
+    0
+ + .\"
+   When non-blocking mode is set and
+   .B id_parse
+   has not finished parsing the reply from the remote server.
+   .TP
+    2
+ + .\"
+   Indicates the query/reply were successful, but the remote server
+   experienced some error.
+   .I identifier
+ ***************
+ *** 212,229 ****
+   .LP
+   .B id_fileno
+   is a macro that takes an
+ ! .B id_t
+ ! handle and returns the actual socket file descriptor used for
+ ! the connection to the remote server.
+   .SH ERRORS
+   .TP 15
+   ETIMEDOUT
+   The call timed out and non-blocking I/O was not set.
+   .SH EXAMPLES
+   .LP
+ ! Here's an example how to handle the reply from id_reply() in
+ ! the case that non-blocking I/O is set. Note that id_reply() will
+ ! return 0 as long as it's not finished parsing a reply.
+   .LP
+   .RS
+   .nf
+ --- 229,256 ----
+   .LP
+   .B id_fileno
+   is a macro that takes an
+ ! .B ident_t
+ ! handle and returns the actual socket file descriptor used for the
+ ! connection to the remote server.
+   .SH ERRORS
+ + In addition to the
+ + .B errno
+ + values that may be returned by interally used system calls, these
+ + additional values may be returned:
+   .TP 15
+   ETIMEDOUT
+   The call timed out and non-blocking I/O was not set.
+ + .TP 15
+ + ENOTCONN
+ + The connection was lost while reading the reply.
+ + .TP 15
+ + EINVAL
+ + The the reply contained invalid characters.
+   .SH EXAMPLES
+   .LP
+ ! Here's an example how to handle the reply from id_reply() in the case
+ ! that non-blocking I/O is set.  Note that id_reply() will return 0 as
+ ! long as it's not finished parsing a reply.
+   .LP
+   .RS
+   .nf
+ ***************
+ *** 236,259 ****
+   
+    ...
+   
+ ! while ((rcode = id_parse(idp, timeout,
+ ! 			 &lport, &fport, &id, &op, &cs)) == 0)
+ ! 	;
+   
+ ! if (rcode < 0)
+ ! {
+ !   if (errno == ETIMEDOUT)
+ !     foo();	/* Lookup timed out */
+ !   else
+ !     bar();      /* Fatal error */
+ ! }
+ ! else if (rcode == 1)
+ ! {
+ !   /* Valid USERID protocol reply */
+ ! }
+ ! else if (rcode == 2)
+ ! {
+ !   /* Protocol ERROR reply */
+   }
+   .fi
+   .RE
+ --- 263,281 ----
+   
+    ...
+   
+ ! while ((rcode = id_parse(idp, timeout, &lport,
+ !                          &fport, &id, &op, &cs)) == 0)
+ ! 	; /* not finished parsing reply - loop */
+   
+ ! if (rcode < 0) {
+ ! 	if (errno == ETIMEDOUT)
+ ! 		foo();		/* Lookup timed out */
+ ! 	else
+ ! 		bar();		/* Fatal error */
+ ! } else if (rcode == 1) {
+ ! 	/* Valid USERID protocol reply */
+ ! } else if (rcode == 2) {
+ ! 	/* Protocol ERROR reply */
+   }
+   .fi
+   .RE
+ ***************
+ *** 270,276 ****
+   .B ident_lookup
+   and
+   .B ident_id
+ ! the blocking time in extreme cases might be as much as three times
+ ! the value given in the
+   .I timeout
+   parameter.
+ --- 292,298 ----
+   .B ident_lookup
+   and
+   .B ident_id
+ ! the blocking time in extreme cases might be as much as three times the
+ ! value given in the
+   .I timeout
+   parameter.
+ Index: ident.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/ident.c,v
+ retrieving revision 1.1.1.3
+ retrieving revision 1.3
+ diff -c -r1.1.1.3 -r1.3
+ *** ident.c	13 Apr 1998 00:55:46 -0000	1.1.1.3
+ --- ident.c	13 Apr 1998 01:47:34 -0000	1.3
+ ***************
+ *** 18,24 ****
+   
+   #include <errno.h>
+   
+ - #include <sys/types.h>
+   #include <sys/socket.h>
+   
+   #define IN_LIBIDENT_SRC
+ --- 18,23 ----
+ ***************
+ *** 27,34 ****
+   #include <arpa/inet.h>
+   
+   
+ - 
+ - 
+   /* Do a complete ident query and return result */
+   
+   IDENT *ident_lookup __P2(int, fd,
+ --- 26,31 ----
+ ***************
+ *** 39,49 ****
+       
+       len = sizeof(remoteaddr);
+       if (getpeername(fd, (struct sockaddr*) &remoteaddr, &len) < 0)
+ ! 	return 0;
+       
+       len = sizeof(localaddr);
+       if (getsockname(fd, (struct sockaddr *) &localaddr, &len) < 0)
+ ! 	return 0;
+   
+       return ident_query( &localaddr.sin_addr, &remoteaddr.sin_addr,
+   		       ntohs(localaddr.sin_port), ntohs(remoteaddr.sin_port),
+ --- 36,46 ----
+       
+       len = sizeof(remoteaddr);
+       if (getpeername(fd, (struct sockaddr*) &remoteaddr, &len) < 0)
+ ! 	return (IDENT *)0;
+       
+       len = sizeof(localaddr);
+       if (getsockname(fd, (struct sockaddr *) &localaddr, &len) < 0)
+ ! 	return (IDENT *)0;
+   
+       return ident_query( &localaddr.sin_addr, &remoteaddr.sin_addr,
+   		       ntohs(localaddr.sin_port), ntohs(remoteaddr.sin_port),
+ ***************
+ *** 74,80 ****
+       if (!id)
+       {
+   	errno = EINVAL;
+ ! 	return 0;
+       }
+     
+       if (timeout)
+ --- 71,77 ----
+       if (!id)
+       {
+   	errno = EINVAL;
+ ! 	return (IDENT *)0;
+       }
+     
+       if (timeout)
+ ***************
+ *** 85,97 ****
+       if (res < 0)
+       {
+   	id_close(id);
+ ! 	return 0;
+       }
+       
+       ident = (IDENT *) malloc(sizeof(IDENT));
+       if (!ident) {
+   	id_close(id);
+ ! 	return 0;
+       }
+       
+       if (timeout)
+ --- 82,94 ----
+       if (res < 0)
+       {
+   	id_close(id);
+ ! 	return (IDENT *)0;
+       }
+       
+       ident = (IDENT *) malloc(sizeof(IDENT));
+       if (!ident) {
+   	id_close(id);
+ ! 	return (IDENT *)0;
+       }
+       
+       if (timeout)
+ ***************
+ *** 113,119 ****
+       {
+   	free(ident);
+   	id_close(id);
+ ! 	return 0;
+       }
+       
+       id_close(id);
+ --- 110,116 ----
+       {
+   	free(ident);
+   	id_close(id);
+ ! 	return (IDENT *)0;
+       }
+       
+       id_close(id);
+ Index: ident.h
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/ident.h,v
+ retrieving revision 1.1.1.3
+ retrieving revision 1.4
+ diff -c -r1.1.1.3 -r1.4
+ *** ident.h	13 Apr 1998 00:55:30 -0000	1.1.1.3
+ --- ident.h	22 Apr 2002 22:10:30 -0000	1.4
+ ***************
+ *** 13,22 ****
+   #endif
+   
+   /* Sigh */
+ ! #ifdef __STDC__
+ ! #  if __STDC__ == 1
+ ! #    define IS_STDC 1
+ ! #  endif
+   #endif
+   
+   #ifdef __P
+ --- 13,20 ----
+   #endif
+   
+   /* Sigh */
+ ! #if (0 - __STDC__) <= -1
+ ! #  define IS_STDC 1
+   #endif
+   
+   #ifdef __P
+ ***************
+ *** 45,51 ****
+   
+   #  define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
+       (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7)
+ ! #endif
+       
+   #else
+   
+ --- 43,49 ----
+   
+   #  define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
+       (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7)
+ ! #endif /* IN_LIBIDENT_SRC */
+       
+   #else
+   
+ ***************
+ *** 82,88 ****
+       t5 a5; \
+       t6 a6; \
+       t7 a7;
+ ! #endif
+   #endif
+   
+   #ifdef IS_STDC
+ --- 80,86 ----
+       t5 a5; \
+       t6 a6; \
+       t7 a7;
+ ! #endif /* IN_LIBIDENT_SRC */
+   #endif
+   
+   #ifdef IS_STDC
+ ***************
+ *** 96,129 ****
+   #  include <bstring.h>
+   #endif
+   #include <sys/types.h>
+   #include <netinet/in.h>
+ - #include <sys/time.h>
+   
+   #if defined(VMS) && !defined(FD_SETSIZE)
+   #  define FD_SETSIZE 64
+   #endif
+   
+ - /*
+ -  * Sigh, GCC v2 complains when using undefined struct tags
+ -  * in function prototypes...
+ -  */
+ - #if defined(__GNUC__) && !defined(INADDR_ANY)
+ - #  define __STRUCT_IN_ADDR_P	void *
+ - #else
+ - #  define __STRUCT_IN_ADDR_P	struct in_addr *
+ - #endif
+ - 
+ - #if defined(__GNUC__) && !defined(DST_NONE)
+ - #  define __STRUCT_TIMEVAL_P	void *
+ - #else
+ - #  define __STRUCT_TIMEVAL_P	struct timeval *
+ - #endif
+ - 
+ - #if defined(__sgi) && defined(_POSIX_SOURCE)
+ - #  undef  __STRUCT_TIMEVAL_P
+ - #  define __STRUCT_TIMEVAL_P	void *
+ - #endif
+ - 	
+   #ifndef IDBUFSIZE
+   #  define IDBUFSIZE 2048
+   #endif
+ --- 94,115 ----
+   #  include <bstring.h>
+   #endif
+   #include <sys/types.h>
+ + #if TIME_WITH_SYS_TIME
+ + # include <sys/time.h>
+ + # include <time.h>
+ + #else
+ + # if HAVE_SYS_TIME_H
+ + #  include <sys/time.h>
+ + # else
+ + #  include <time.h>
+ + # endif
+ + #endif
+   #include <netinet/in.h>
+   
+   #if defined(VMS) && !defined(FD_SETSIZE)
+   #  define FD_SETSIZE 64
+   #endif
+   
+   #ifndef IDBUFSIZE
+   #  define IDBUFSIZE 2048
+   #endif
+ ***************
+ *** 149,167 ****
+   /* Low-level calls and macros */
+   #define id_fileno(ID)	((ID)->fd)
+   
+ ! extern ident_t * id_open __P((__STRUCT_IN_ADDR_P laddr,
+ ! 			   __STRUCT_IN_ADDR_P faddr,
+ ! 			   __STRUCT_TIMEVAL_P timeout));
+     
+   extern int    id_close __P((ident_t *id));
+     
+   extern int    id_query __P((ident_t *id,
+   			    int lport,
+   			    int fport,
+ ! 			    __STRUCT_TIMEVAL_P timeout));
+     
+   extern int    id_parse __P((ident_t *id,
+ ! 			    __STRUCT_TIMEVAL_P timeout,
+   			    int *lport,
+   			    int *fport,
+   			    char **identifier,
+ --- 135,153 ----
+   /* Low-level calls and macros */
+   #define id_fileno(ID)	((ID)->fd)
+   
+ ! extern ident_t * id_open __P((struct in_addr * laddr,
+ ! 			   struct in_addr * faddr,
+ ! 			   struct timeval * timeout));
+     
+   extern int    id_close __P((ident_t *id));
+     
+   extern int    id_query __P((ident_t *id,
+   			    int lport,
+   			    int fport,
+ ! 			    struct timeval * timeout));
+     
+   extern int    id_parse __P((ident_t *id,
+ ! 			    struct timeval * timeout,
+   			    int *lport,
+   			    int *fport,
+   			    char **identifier,
+ ***************
+ *** 174,180 ****
+   
+   extern char  *ident_id __P((int fd, int timeout));
+   
+ ! extern IDENT *ident_query __P(( __STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P raddr, int lport, int rport, int timeout));
+   
+   extern void   ident_free __P((IDENT *id));
+   
+ --- 160,166 ----
+   
+   extern char  *ident_id __P((int fd, int timeout));
+   
+ ! extern IDENT *ident_query __P(( struct in_addr * laddr, struct in_addr * raddr, int lport, int rport, int timeout));
+   
+   extern void   ident_free __P((IDENT *id));
+   
+ Index: lookup-tester.c
+ ===================================================================
+ RCS file: /cvs/misc/lib/libident/lookup-tester.c,v
+ retrieving revision 1.1.1.1
+ retrieving revision 1.2
+ diff -c -r1.1.1.1 -r1.2
+ *** lookup-tester.c	14 Feb 1995 20:48:22 -0000	1.1.1.1
+ --- lookup-tester.c	13 Apr 1998 01:48:58 -0000	1.2
+ ***************
+ *** 15,22 ****
+   #  include <unistd.h>
+   #endif
+   
+ - #include <sys/types.h>
+ - 
+   /* Need this to make fileno() visible when compiling with strict ANSI */
+   #ifndef _POSIX_C_SOURCE
+   #  define _POSIX_C_SOURCE
+ --- 15,20 ----
>Release-Note:
>Audit-Trail:
>Unformatted: