Updated to the latest upstream RC release: libtirpc-1-3-3-rc4
Signed-off-by: Steve Dickson <steved@redhat.com>
This commit is contained in:
		
							parent
							
								
									14f88bf20d
								
							
						
					
					
						commit
						b4a233e957
					
				| @ -1,417 +0,0 @@ | |||||||
| diff --git a/man/rpc_secure.3t b/man/rpc_secure.3t
 |  | ||||||
| index 4a1ad93..404df0b 100644
 |  | ||||||
| --- a/man/rpc_secure.3t
 |  | ||||||
| +++ b/man/rpc_secure.3t
 |  | ||||||
| @@ -19,7 +19,7 @@
 |  | ||||||
|  .Ft AUTH * |  | ||||||
|  .Fo authdes_pk_create |  | ||||||
|  .Fa "char *name" |  | ||||||
| -.FA "netobj *publickey"
 |  | ||||||
| +.Fa "netobj *publickey"
 |  | ||||||
|  .Fa "unsigned window" |  | ||||||
|  .Fa "struct sockaddr *addr" |  | ||||||
|  .Fa "des_block *ckey" |  | ||||||
| diff --git a/src/Makefile.am b/src/Makefile.am
 |  | ||||||
| index 932414d..b40a6b4 100644
 |  | ||||||
| --- a/src/Makefile.am
 |  | ||||||
| +++ b/src/Makefile.am
 |  | ||||||
| @@ -38,7 +38,7 @@ endif
 |  | ||||||
|  if GSS |  | ||||||
|      libtirpc_la_SOURCES += auth_gss.c authgss_prot.c svc_auth_gss.c \ |  | ||||||
|  			   rpc_gss_utils.c |  | ||||||
| -    libtirpc_la_LDFLAGS += $(GSSAPI_LIBS)
 |  | ||||||
| +    libtirpc_la_LIBADD = $(GSSAPI_LIBS)
 |  | ||||||
|      libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS $(GSSAPI_CFLAGS) |  | ||||||
|  endif |  | ||||||
|   |  | ||||||
| diff --git a/src/auth_des.c b/src/auth_des.c
 |  | ||||||
| index af2f61f..c9af2e9 100644
 |  | ||||||
| --- a/src/auth_des.c
 |  | ||||||
| +++ b/src/auth_des.c
 |  | ||||||
| @@ -396,7 +396,7 @@ authdes_validate(AUTH *auth, struct opaque_auth *rverf)
 |  | ||||||
|  	/* |  | ||||||
|  	 * validate |  | ||||||
|  	 */ |  | ||||||
| -	if (bcmp((char *)&ad->ad_timestamp, (char *)&verf.adv_timestamp,
 |  | ||||||
| +	if (memcmp((char *)&ad->ad_timestamp, (char *)&verf.adv_timestamp,
 |  | ||||||
|  		 sizeof(struct timeval)) != 0) { |  | ||||||
|  		LIBTIRPC_DEBUG(1, ("authdes_validate: verifier mismatch")); |  | ||||||
|  		return (FALSE); |  | ||||||
| diff --git a/src/auth_gss.c b/src/auth_gss.c
 |  | ||||||
| index 5959893..7d08262 100644
 |  | ||||||
| --- a/src/auth_gss.c
 |  | ||||||
| +++ b/src/auth_gss.c
 |  | ||||||
| @@ -207,6 +207,7 @@ authgss_create(CLIENT *clnt, gss_name_t name, struct rpc_gss_sec *sec)
 |  | ||||||
|  			rpc_createerr.cf_stat = RPC_SYSTEMERROR; |  | ||||||
|  			rpc_createerr.cf_error.re_errno = ENOMEM; |  | ||||||
|  			free(auth); |  | ||||||
| +			free(gd);
 |  | ||||||
|  			return (NULL); |  | ||||||
|  		} |  | ||||||
|  	} |  | ||||||
| @@ -592,7 +593,7 @@ _rpc_gss_refresh(AUTH *auth, rpc_gss_options_ret_t *options_ret)
 |  | ||||||
|  			if (rpc_gss_oid_to_mech(actual_mech_type, &mechanism)) { |  | ||||||
|  				strncpy(options_ret->actual_mechanism, |  | ||||||
|  					mechanism, |  | ||||||
| -					sizeof(options_ret->actual_mechanism));
 |  | ||||||
| +					(sizeof(options_ret->actual_mechanism)-1));
 |  | ||||||
|  			} |  | ||||||
|   |  | ||||||
|  			gd->established = TRUE; |  | ||||||
| diff --git a/src/auth_time.c b/src/auth_time.c
 |  | ||||||
| index 69400bc..936dd76 100644
 |  | ||||||
| --- a/src/auth_time.c
 |  | ||||||
| +++ b/src/auth_time.c
 |  | ||||||
| @@ -104,7 +104,7 @@ static int uaddr_to_sockaddr(uaddr, sin)
 |  | ||||||
|  	p_bytes[1] = (unsigned char)a[5] & 0x000000FF; |  | ||||||
|   |  | ||||||
|  	sin->sin_family = AF_INET; /* always */ |  | ||||||
| -	bcopy((char *)&p_bytes, (char *)&sin->sin_port, 2);
 |  | ||||||
| +	memcpy((char *)&sin->sin_port, (char *)&p_bytes, 2);
 |  | ||||||
|   |  | ||||||
|  	return (0); |  | ||||||
|  } |  | ||||||
| diff --git a/src/clnt_bcast.c b/src/clnt_bcast.c
 |  | ||||||
| index 98cf061..2ad6c89 100644
 |  | ||||||
| --- a/src/clnt_bcast.c
 |  | ||||||
| +++ b/src/clnt_bcast.c
 |  | ||||||
| @@ -330,6 +330,7 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
 |  | ||||||
|  	if (nettype == NULL) |  | ||||||
|  		nettype = "datagram_n"; |  | ||||||
|  	if ((handle = __rpc_setconf(nettype)) == NULL) { |  | ||||||
| +		AUTH_DESTROY(sys_auth);
 |  | ||||||
|  		return (RPC_UNKNOWNPROTO); |  | ||||||
|  	} |  | ||||||
|  	while ((nconf = __rpc_getconf(handle)) != NULL) { |  | ||||||
| diff --git a/src/crypt_client.c b/src/crypt_client.c
 |  | ||||||
| index f393926..cd6f7de 100644
 |  | ||||||
| --- a/src/crypt_client.c
 |  | ||||||
| +++ b/src/crypt_client.c
 |  | ||||||
| @@ -75,8 +75,8 @@ _des_crypt_call(buf, len, dparms)
 |  | ||||||
|  	des_crypt_1_arg.desbuf.desbuf_val = buf; |  | ||||||
|  	des_crypt_1_arg.des_dir = dparms->des_dir; |  | ||||||
|  	des_crypt_1_arg.des_mode = dparms->des_mode; |  | ||||||
| -	bcopy(dparms->des_ivec, des_crypt_1_arg.des_ivec, 8);
 |  | ||||||
| -	bcopy(dparms->des_key, des_crypt_1_arg.des_key, 8);
 |  | ||||||
| +	memcpy(des_crypt_1_arg.des_ivec, dparms->des_ivec, 8);
 |  | ||||||
| +	memcpy(des_crypt_1_arg.des_key, dparms->des_key, 8);
 |  | ||||||
|   |  | ||||||
|  	result_1 = des_crypt_1(&des_crypt_1_arg, clnt); |  | ||||||
|  	if (result_1 == (desresp *) NULL) { |  | ||||||
| @@ -88,8 +88,8 @@ _des_crypt_call(buf, len, dparms)
 |  | ||||||
|   |  | ||||||
|  	if (result_1->stat == DESERR_NONE || |  | ||||||
|  	    result_1->stat == DESERR_NOHWDEVICE) { |  | ||||||
| -		bcopy(result_1->desbuf.desbuf_val, buf, len);
 |  | ||||||
| -		bcopy(result_1->des_ivec, dparms->des_ivec, 8);
 |  | ||||||
| +		memcpy(buf, result_1->desbuf.desbuf_val, len);
 |  | ||||||
| +		memcpy(dparms->des_ivec, result_1->des_ivec, 8);
 |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	clnt_freeres(clnt, (xdrproc_t)xdr_desresp, result_1); |  | ||||||
| diff --git a/src/getnetconfig.c b/src/getnetconfig.c
 |  | ||||||
| index 92e7c43..cfd33c2 100644
 |  | ||||||
| --- a/src/getnetconfig.c
 |  | ||||||
| +++ b/src/getnetconfig.c
 |  | ||||||
| @@ -681,6 +681,7 @@ struct netconfig	*ncp;
 |  | ||||||
|  { |  | ||||||
|      struct netconfig	*p; |  | ||||||
|      char	*tmp; |  | ||||||
| +    char	*t;
 |  | ||||||
|      u_int	i; |  | ||||||
|   |  | ||||||
|      if ((tmp=malloc(MAXNETCONFIGLINE)) == NULL) |  | ||||||
| @@ -700,20 +701,21 @@ struct netconfig	*ncp;
 |  | ||||||
|       */ |  | ||||||
|      *p = *ncp; |  | ||||||
|      p->nc_netid = (char *)strcpy(tmp,ncp->nc_netid); |  | ||||||
| -    tmp = strchr(tmp, 0) + 1;
 |  | ||||||
| -    p->nc_protofmly = (char *)strcpy(tmp,ncp->nc_protofmly);
 |  | ||||||
| -    tmp = strchr(tmp, 0) + 1;
 |  | ||||||
| -    p->nc_proto = (char *)strcpy(tmp,ncp->nc_proto);
 |  | ||||||
| -    tmp = strchr(tmp, 0) + 1;
 |  | ||||||
| -    p->nc_device = (char *)strcpy(tmp,ncp->nc_device);
 |  | ||||||
| +    t = strchr(tmp, 0) + 1;
 |  | ||||||
| +    p->nc_protofmly = (char *)strcpy(t,ncp->nc_protofmly);
 |  | ||||||
| +    t = strchr(t, 0) + 1;
 |  | ||||||
| +    p->nc_proto = (char *)strcpy(t,ncp->nc_proto);
 |  | ||||||
| +    t = strchr(t, 0) + 1;
 |  | ||||||
| +    p->nc_device = (char *)strcpy(t,ncp->nc_device);
 |  | ||||||
|      p->nc_lookups = (char **)malloc((size_t)(p->nc_nlookups+1) * sizeof(char *)); |  | ||||||
|      if (p->nc_lookups == NULL) { |  | ||||||
| -	free(p->nc_netid);
 |  | ||||||
| +	free(p);
 |  | ||||||
| +	free(tmp);
 |  | ||||||
|  	return(NULL); |  | ||||||
|      } |  | ||||||
|      for (i=0; i < p->nc_nlookups; i++) { |  | ||||||
| -    	tmp = strchr(tmp, 0) + 1;
 |  | ||||||
| -    	p->nc_lookups[i] = (char *)strcpy(tmp,ncp->nc_lookups[i]);
 |  | ||||||
| +	t = strchr(t, 0) + 1;
 |  | ||||||
| +	p->nc_lookups[i] = (char *)strcpy(t,ncp->nc_lookups[i]);
 |  | ||||||
|      } |  | ||||||
|      return(p); |  | ||||||
|  } |  | ||||||
| diff --git a/src/getnetpath.c b/src/getnetpath.c
 |  | ||||||
| index 7c19932..ea1a18c 100644
 |  | ||||||
| --- a/src/getnetpath.c
 |  | ||||||
| +++ b/src/getnetpath.c
 |  | ||||||
| @@ -88,6 +88,7 @@ setnetpath()
 |  | ||||||
|      } |  | ||||||
|      if ((np_sessionp->nc_handlep = setnetconfig()) == NULL) { |  | ||||||
|  	syslog (LOG_ERR, "rpc: failed to open " NETCONFIG); |  | ||||||
| +	free(np_sessionp);
 |  | ||||||
|  	return (NULL); |  | ||||||
|      } |  | ||||||
|      np_sessionp->valid = NP_VALID; |  | ||||||
| diff --git a/src/getpublickey.c b/src/getpublickey.c
 |  | ||||||
| index 8cf4dc2..be37a24 100644
 |  | ||||||
| --- a/src/getpublickey.c
 |  | ||||||
| +++ b/src/getpublickey.c
 |  | ||||||
| @@ -74,7 +74,7 @@ __getpublickey_real(netname, publickey)
 |  | ||||||
|  		return (0); |  | ||||||
|  	} |  | ||||||
|  	*p = '\0'; |  | ||||||
| -	(void) strncpy(publickey, lookup, HEXKEYBYTES);
 |  | ||||||
| +	memcpy(publickey, lookup, HEXKEYBYTES);
 |  | ||||||
|  	publickey[HEXKEYBYTES] = '\0'; |  | ||||||
|  	return (1); |  | ||||||
|  } |  | ||||||
| diff --git a/src/getrpcent.c b/src/getrpcent.c
 |  | ||||||
| index cba4cd8..e49dc05 100644
 |  | ||||||
| --- a/src/getrpcent.c
 |  | ||||||
| +++ b/src/getrpcent.c
 |  | ||||||
| @@ -100,7 +100,7 @@ _rpcdata()
 |  | ||||||
|  	return (d); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| -#if !HAVE_GETRPCBYNYMBER
 |  | ||||||
| +#if !HAVE_GETRPCBYNUMBER
 |  | ||||||
|  struct rpcent * |  | ||||||
|  getrpcbynumber(number) |  | ||||||
|  	int number; |  | ||||||
| diff --git a/src/rpc_generic.c b/src/rpc_generic.c
 |  | ||||||
| index 589cbd5..51f36ac 100644
 |  | ||||||
| --- a/src/rpc_generic.c
 |  | ||||||
| +++ b/src/rpc_generic.c
 |  | ||||||
| @@ -319,6 +319,7 @@ __rpc_setconf(nettype)
 |  | ||||||
|  		handle->nflag = FALSE; |  | ||||||
|  		break; |  | ||||||
|  	default: |  | ||||||
| +		free(handle);
 |  | ||||||
|  		return (NULL); |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| diff --git a/src/rpc_soc.c b/src/rpc_soc.c
 |  | ||||||
| index 5a6eeb7..a85cb17 100644
 |  | ||||||
| --- a/src/rpc_soc.c
 |  | ||||||
| +++ b/src/rpc_soc.c
 |  | ||||||
| @@ -663,15 +663,17 @@ svcunix_create(sock, sendsize, recvsize, path)
 |  | ||||||
|  		    strcmp(nconf->nc_protofmly, NC_LOOPBACK) == 0) |  | ||||||
|  			break; |  | ||||||
|  	} |  | ||||||
| -	if (nconf == NULL)
 |  | ||||||
| +	if (nconf == NULL) {
 |  | ||||||
| +		endnetconfig(localhandle);
 |  | ||||||
|  		return(xprt); |  | ||||||
| +	}
 |  | ||||||
|   |  | ||||||
|  	if ((sock = __rpc_nconf2fd(nconf)) < 0) |  | ||||||
|  		goto done; |  | ||||||
|   |  | ||||||
|  	memset(&sun, 0, sizeof sun); |  | ||||||
|  	sun.sun_family = AF_LOCAL; |  | ||||||
| -	strncpy(sun.sun_path, path, sizeof(sun.sun_path));
 |  | ||||||
| +	strncpy(sun.sun_path, path, (sizeof(sun.sun_path)-1));
 |  | ||||||
|  	addrlen = sizeof(struct sockaddr_un); |  | ||||||
|  	sa = (struct sockaddr *)&sun; |  | ||||||
|   |  | ||||||
| @@ -692,6 +694,8 @@ svcunix_create(sock, sendsize, recvsize, path)
 |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	xprt = (SVCXPRT *)svc_tli_create(sock, nconf, &taddr, sendsize, recvsize); |  | ||||||
| +	if (xprt == NULL)
 |  | ||||||
| +		close(sock);
 |  | ||||||
|   |  | ||||||
|  done: |  | ||||||
|  	endnetconfig(localhandle); |  | ||||||
| diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
 |  | ||||||
| index e45736a..0c34cb7 100644
 |  | ||||||
| --- a/src/rpcb_clnt.c
 |  | ||||||
| +++ b/src/rpcb_clnt.c
 |  | ||||||
| @@ -547,6 +547,7 @@ try_nconf:
 |  | ||||||
|  		if (tmpnconf == NULL) { |  | ||||||
|   			rpc_createerr.cf_stat = RPC_UNKNOWNPROTO; |  | ||||||
|  			mutex_unlock(&loopnconf_lock); |  | ||||||
| +			endnetconfig(nc_handle);
 |  | ||||||
|  			return (NULL); |  | ||||||
|  		} |  | ||||||
|  		loopnconf = getnetconfigent(tmpnconf->nc_netid); |  | ||||||
| diff --git a/src/rtime.c b/src/rtime.c
 |  | ||||||
| index b642840..29fbf0a 100644
 |  | ||||||
| --- a/src/rtime.c
 |  | ||||||
| +++ b/src/rtime.c
 |  | ||||||
| @@ -90,6 +90,7 @@ rtime(addrp, timep, timeout)
 |  | ||||||
|   |  | ||||||
|  	/* TCP and UDP port are the same in this case */ |  | ||||||
|  	if ((serv = getservbyname("time", "tcp")) == NULL) { |  | ||||||
| +		do_close(s);
 |  | ||||||
|  		return(-1); |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| diff --git a/src/svc_auth_des.c b/src/svc_auth_des.c
 |  | ||||||
| index 19a7c60..b096e08 100644
 |  | ||||||
| --- a/src/svc_auth_des.c
 |  | ||||||
| +++ b/src/svc_auth_des.c
 |  | ||||||
| @@ -145,7 +145,7 @@ _svcauth_des(rqst, msg)
 |  | ||||||
|  			return (AUTH_BADCRED); |  | ||||||
|  		} |  | ||||||
|  		cred->adc_fullname.name = area->area_netname; |  | ||||||
| -		bcopy((char *)ixdr, cred->adc_fullname.name, 
 |  | ||||||
| +		memcpy(cred->adc_fullname.name, (char *)ixdr,
 |  | ||||||
|  			(u_int)namelen); |  | ||||||
|  		cred->adc_fullname.name[namelen] = 0; |  | ||||||
|  		ixdr += (RNDUP(namelen) / BYTES_PER_XDR_UNIT); |  | ||||||
| @@ -419,7 +419,7 @@ cache_spot(key, name, timestamp)
 |  | ||||||
|  		if (cp->key.key.high == hi &&  |  | ||||||
|  		    cp->key.key.low == key->key.low && |  | ||||||
|  		    cp->rname != NULL && |  | ||||||
| -		    bcmp(cp->rname, name, strlen(name) + 1) == 0) {
 |  | ||||||
| +		    memcmp(cp->rname, name, strlen(name) + 1) == 0) {
 |  | ||||||
|  			if (BEFORE(timestamp, &cp->laststamp)) { |  | ||||||
|  				svcauthdes_stats.ncachereplays++; |  | ||||||
|  				return (-1); /* replay */ |  | ||||||
| diff --git a/src/svc_generic.c b/src/svc_generic.c
 |  | ||||||
| index 52a56c2..20abaa2 100644
 |  | ||||||
| --- a/src/svc_generic.c
 |  | ||||||
| +++ b/src/svc_generic.c
 |  | ||||||
| @@ -113,6 +113,7 @@ svc_create(dispatch, prognum, versnum, nettype)
 |  | ||||||
|  				if (l == NULL) { |  | ||||||
|  					warnx("svc_create: no memory"); |  | ||||||
|  					mutex_unlock(&xprtlist_lock); |  | ||||||
| +					__rpc_endconf(handle);
 |  | ||||||
|  					return (0); |  | ||||||
|  				} |  | ||||||
|  				l->xprt = xprt; |  | ||||||
| diff --git a/src/svc_simple.c b/src/svc_simple.c
 |  | ||||||
| index cb58002..c32fe0a 100644
 |  | ||||||
| --- a/src/svc_simple.c
 |  | ||||||
| +++ b/src/svc_simple.c
 |  | ||||||
| @@ -157,6 +157,7 @@ rpc_reg(prognum, versnum, procnum, progname, inproc, outproc, nettype)
 |  | ||||||
|  				((netid = strdup(nconf->nc_netid)) == NULL)) { |  | ||||||
|  				warnx(rpc_reg_err, rpc_reg_msg, __no_mem_str); |  | ||||||
|  				SVC_DESTROY(svcxprt); |  | ||||||
| +				free(xdrbuf);
 |  | ||||||
|  				break; |  | ||||||
|  			} |  | ||||||
|  			madenow = TRUE; |  | ||||||
| diff --git a/src/svc_vc.c b/src/svc_vc.c
 |  | ||||||
| index 97a76a3..c23cd36 100644
 |  | ||||||
| --- a/src/svc_vc.c
 |  | ||||||
| +++ b/src/svc_vc.c
 |  | ||||||
| @@ -502,9 +502,14 @@ read_vc(xprtp, buf, len)
 |  | ||||||
|  	cfp = (struct cf_conn *)xprt->xp_p1; |  | ||||||
|   |  | ||||||
|  	if (cfp->nonblock) { |  | ||||||
| +		/* Since len == 0 is returned on zero length
 |  | ||||||
| +		 * read or EOF errno needs to be reset before
 |  | ||||||
| +		 * the read
 |  | ||||||
| +		 */
 |  | ||||||
| +		errno = 0;
 |  | ||||||
|  		len = read(sock, buf, (size_t)len); |  | ||||||
|  		if (len < 0) { |  | ||||||
| -			if (errno == EAGAIN)
 |  | ||||||
| +			if (errno == EAGAIN || errno == EWOULDBLOCK)
 |  | ||||||
|  				len = 0; |  | ||||||
|  			else |  | ||||||
|  				goto fatal_err; |  | ||||||
| diff --git a/src/xdr.c b/src/xdr.c
 |  | ||||||
| index b9a1558..28d1382 100644
 |  | ||||||
| --- a/src/xdr.c
 |  | ||||||
| +++ b/src/xdr.c
 |  | ||||||
| @@ -877,7 +877,8 @@ xdr_int64_t(xdrs, llp)
 |  | ||||||
|  		if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE) |  | ||||||
|  			return (FALSE); |  | ||||||
|  		*llp = (int64_t) |  | ||||||
| -		    (((u_int64_t)ul[0] << 32) | ((u_int64_t)ul[1]));
 |  | ||||||
| +		    (((u_int64_t)ul[0] << 32) |
 |  | ||||||
| +		     ((u_int64_t)(ul[1]) & 0xffffffff));
 |  | ||||||
|  		return (TRUE); |  | ||||||
|  	case XDR_FREE: |  | ||||||
|  		return (TRUE); |  | ||||||
| @@ -910,7 +911,8 @@ xdr_u_int64_t(xdrs, ullp)
 |  | ||||||
|  		if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE) |  | ||||||
|  			return (FALSE); |  | ||||||
|  		*ullp = (u_int64_t) |  | ||||||
| -		    (((u_int64_t)ul[0] << 32) | ((u_int64_t)ul[1]));
 |  | ||||||
| +		    (((u_int64_t)ul[0] << 32) |
 |  | ||||||
| +		     ((u_int64_t)(ul[1]) & 0xffffffff));
 |  | ||||||
|  		return (TRUE); |  | ||||||
|  	case XDR_FREE: |  | ||||||
|  		return (TRUE); |  | ||||||
| diff --git a/src/xdr_rec.c b/src/xdr_rec.c
 |  | ||||||
| index 7d535cf..676cc82 100644
 |  | ||||||
| --- a/src/xdr_rec.c
 |  | ||||||
| +++ b/src/xdr_rec.c
 |  | ||||||
| @@ -61,6 +61,7 @@
 |  | ||||||
|  #include <rpc/svc.h> |  | ||||||
|  #include <rpc/clnt.h> |  | ||||||
|  #include <stddef.h> |  | ||||||
| +#include <errno.h>
 |  | ||||||
|  #include "rpc_com.h" |  | ||||||
|  static bool_t	xdrrec_getlong(XDR *, long *); |  | ||||||
|  static bool_t	xdrrec_putlong(XDR *, const long *); |  | ||||||
| @@ -537,7 +538,13 @@ __xdrrec_getrec(xdrs, statp, expectdata)
 |  | ||||||
|  		n = rstrm->readit(rstrm->tcp_handle, rstrm->in_hdrp, |  | ||||||
|  		    (int)sizeof (rstrm->in_header) - rstrm->in_hdrlen); |  | ||||||
|  		if (n == 0) { |  | ||||||
| -			*statp = expectdata ? XPRT_DIED : XPRT_IDLE;
 |  | ||||||
| +			/* EAGAIN or EWOULDBLOCK means a zero length
 |  | ||||||
| +			 * read not an EOF.
 |  | ||||||
| +			 */
 |  | ||||||
| +			if (errno == EAGAIN || errno == EWOULDBLOCK)
 |  | ||||||
| +				*statp = XPRT_IDLE;
 |  | ||||||
| +			else
 |  | ||||||
| +				*statp = expectdata ? XPRT_DIED : XPRT_IDLE;
 |  | ||||||
|  			return FALSE; |  | ||||||
|  		} |  | ||||||
|  		if (n < 0) { |  | ||||||
| @@ -564,6 +571,7 @@ __xdrrec_getrec(xdrs, statp, expectdata)
 |  | ||||||
|  			rstrm->in_header &= ~LAST_FRAG; |  | ||||||
|  			rstrm->last_frag = TRUE; |  | ||||||
|  		} |  | ||||||
| +		rstrm->in_haveheader = 1;
 |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	n =  rstrm->readit(rstrm->tcp_handle, |  | ||||||
| @@ -576,7 +584,13 @@ __xdrrec_getrec(xdrs, statp, expectdata)
 |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
|  	if (n == 0) { |  | ||||||
| -		*statp = expectdata ? XPRT_DIED : XPRT_IDLE;
 |  | ||||||
| +		/* EAGAIN or EWOULDBLOCK means a zero length
 |  | ||||||
| +		 * read not an EOF.
 |  | ||||||
| +		 */
 |  | ||||||
| +		if (errno == EAGAIN || errno == EWOULDBLOCK)
 |  | ||||||
| +			*statp = XPRT_IDLE;
 |  | ||||||
| +		else
 |  | ||||||
| +			*statp = expectdata ? XPRT_DIED : XPRT_IDLE;
 |  | ||||||
|  		return FALSE; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| diff --git a/tirpc/rpc/rpcent.h b/tirpc/rpc/rpcent.h
 |  | ||||||
| index 9d3ef9c..5bff876 100644
 |  | ||||||
| --- a/tirpc/rpc/rpcent.h
 |  | ||||||
| +++ b/tirpc/rpc/rpcent.h
 |  | ||||||
| @@ -48,8 +48,9 @@
 |  | ||||||
|  extern "C" { |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| -/* These are defined in /usr/include/rpc/netdb.h */
 |  | ||||||
| -#if !defined(__GLIBC__) || defined(__UCLIBC__)
 |  | ||||||
| +/* These are defined in /usr/include/rpc/netdb.h, unless we are using
 |  | ||||||
| +   the C library without RPC support. */
 |  | ||||||
| +#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)
 |  | ||||||
|  struct rpcent { |  | ||||||
|  	char	*r_name;	/* name of server for this rpc program */ |  | ||||||
|  	char	**r_aliases;	/* alias list */ |  | ||||||
| @ -1,71 +0,0 @@ | |||||||
| diff --git a/doc/bindresvport.blacklist b/doc/bindresvport.blacklist
 |  | ||||||
| index 8904277..a7ed193 100644
 |  | ||||||
| --- a/doc/bindresvport.blacklist
 |  | ||||||
| +++ b/doc/bindresvport.blacklist
 |  | ||||||
| @@ -8,6 +8,7 @@
 |  | ||||||
|  631     # cups |  | ||||||
|  636     # ldaps |  | ||||||
|  664     # Secure ASF, used by IPMI on some cards |  | ||||||
| +774     # rpasswd
 |  | ||||||
|  921     # lwresd |  | ||||||
|  993     # imaps |  | ||||||
|  995     # pops |  | ||||||
| diff --git a/src/rpc_com.h b/src/rpc_com.h
 |  | ||||||
| index 10bec79..76badef 100644
 |  | ||||||
| --- a/src/rpc_com.h
 |  | ||||||
| +++ b/src/rpc_com.h
 |  | ||||||
| @@ -61,8 +61,7 @@ void __xprt_unregister_unlocked(SVCXPRT *);
 |  | ||||||
|  void __xprt_set_raddr(SVCXPRT *, const struct sockaddr_storage *); |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -SVCXPRT **__svc_xports;
 |  | ||||||
| -int __svc_maxrec;
 |  | ||||||
| +extern int __svc_maxrec;
 |  | ||||||
|   |  | ||||||
|  #ifdef __cplusplus |  | ||||||
|  } |  | ||||||
| diff --git a/src/rpc_soc.c b/src/rpc_soc.c
 |  | ||||||
| index ac7d312..fde121d 100644
 |  | ||||||
| --- a/src/rpc_soc.c
 |  | ||||||
| +++ b/src/rpc_soc.c
 |  | ||||||
| @@ -613,6 +613,13 @@ authdes_pk_create(servername, pkey, window, syncaddr, ckey)
 |  | ||||||
|  	des_block *ckey;		/* optional conversation key to use */ |  | ||||||
|  { return (NULL); } |  | ||||||
|   |  | ||||||
| +AUTH *
 |  | ||||||
| +authdes_seccreate(const char *servername, const u_int win,
 |  | ||||||
| +	const char *timehost, const des_block *ckey)
 |  | ||||||
| +{
 |  | ||||||
| +	return (NULL);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
|   |  | ||||||
| diff --git a/src/svc.c b/src/svc.c
 |  | ||||||
| index b59467b..6db164b 100644
 |  | ||||||
| --- a/src/svc.c
 |  | ||||||
| +++ b/src/svc.c
 |  | ||||||
| @@ -57,6 +57,9 @@
 |  | ||||||
|   |  | ||||||
|  #define max(a, b) (a > b ? a : b) |  | ||||||
|   |  | ||||||
| +static SVCXPRT **__svc_xports;
 |  | ||||||
| +int __svc_maxrec;
 |  | ||||||
| +
 |  | ||||||
|  /* |  | ||||||
|   * The services list |  | ||||||
|   * Each entry represents a set of procedures (an rpc program). |  | ||||||
| diff --git a/src/xdr_float.c b/src/xdr_float.c
 |  | ||||||
| index 26bc865..349d48f 100644
 |  | ||||||
| --- a/src/xdr_float.c
 |  | ||||||
| +++ b/src/xdr_float.c
 |  | ||||||
| @@ -83,7 +83,7 @@ static struct sgl_limits {
 |  | ||||||
|  }; |  | ||||||
|  #else |  | ||||||
|   |  | ||||||
| -#include <bits/endian.h>
 |  | ||||||
| +#include <endian.h>
 |  | ||||||
|  #define IEEEFP |  | ||||||
|   |  | ||||||
|  #endif /* vax */ |  | ||||||
| @ -1,96 +0,0 @@ | |||||||
| diff --git a/doc/bindresvport.blacklist b/doc/bindresvport.blacklist
 |  | ||||||
| index a7ed193..67ff771 100644
 |  | ||||||
| --- a/doc/bindresvport.blacklist
 |  | ||||||
| +++ b/doc/bindresvport.blacklist
 |  | ||||||
| @@ -8,7 +8,11 @@
 |  | ||||||
|  631     # cups |  | ||||||
|  636     # ldaps |  | ||||||
|  664     # Secure ASF, used by IPMI on some cards |  | ||||||
| +749     # Kerberos V kadmin
 |  | ||||||
|  774     # rpasswd |  | ||||||
| +873     # rsyncd
 |  | ||||||
|  921     # lwresd |  | ||||||
| +992     # SSL-enabled telnet
 |  | ||||||
|  993     # imaps |  | ||||||
| +994     # irc
 |  | ||||||
|  995     # pops |  | ||||||
| diff --git a/src/auth_gss.c b/src/auth_gss.c
 |  | ||||||
| index d871672..e317664 100644
 |  | ||||||
| --- a/src/auth_gss.c
 |  | ||||||
| +++ b/src/auth_gss.c
 |  | ||||||
| @@ -982,3 +982,9 @@ rpc_gss_max_data_length(AUTH *auth, int maxlen)
 |  | ||||||
|  	rpc_gss_clear_error(); |  | ||||||
|  	return result; |  | ||||||
|  } |  | ||||||
| +
 |  | ||||||
| +bool_t
 |  | ||||||
| +is_authgss_client(CLIENT *clnt)
 |  | ||||||
| +{
 |  | ||||||
| +	return (clnt->cl_auth->ah_ops == &authgss_ops);
 |  | ||||||
| +}
 |  | ||||||
| diff --git a/src/clnt_dg.c b/src/clnt_dg.c
 |  | ||||||
| index abc09f1..e1255de 100644
 |  | ||||||
| --- a/src/clnt_dg.c
 |  | ||||||
| +++ b/src/clnt_dg.c
 |  | ||||||
| @@ -61,6 +61,9 @@
 |  | ||||||
|  #include <sys/uio.h> |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +#ifdef HAVE_RPCSEC_GSS
 |  | ||||||
| +#include <rpc/auth_gss.h>
 |  | ||||||
| +#endif
 |  | ||||||
|   |  | ||||||
|  #define MAX_DEFAULT_FDS                 20000 |  | ||||||
|   |  | ||||||
| @@ -334,6 +337,11 @@ clnt_dg_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout)
 |  | ||||||
|  		salen = cu->cu_rlen; |  | ||||||
|  	} |  | ||||||
|   |  | ||||||
| +#ifdef HAVE_RPCSEC_GSS
 |  | ||||||
| +	if (is_authgss_client(cl))
 |  | ||||||
| +		nrefreshes = 0;
 |  | ||||||
| +#endif
 |  | ||||||
| +
 |  | ||||||
|  	/* Clean up in case the last call ended in a longjmp(3) call. */ |  | ||||||
|  call_again: |  | ||||||
|  	xdrs = &(cu->cu_outxdrs); |  | ||||||
| diff --git a/src/clnt_vc.c b/src/clnt_vc.c
 |  | ||||||
| index 6f7f7da..a07e297 100644
 |  | ||||||
| --- a/src/clnt_vc.c
 |  | ||||||
| +++ b/src/clnt_vc.c
 |  | ||||||
| @@ -69,6 +69,10 @@
 |  | ||||||
|  #include "rpc_com.h" |  | ||||||
|  #include "clnt_fd_locks.h" |  | ||||||
|   |  | ||||||
| +#ifdef HAVE_RPCSEC_GSS
 |  | ||||||
| +#include <rpc/auth_gss.h>
 |  | ||||||
| +#endif
 |  | ||||||
| +
 |  | ||||||
|  #define MCALL_MSG_SIZE 24 |  | ||||||
|   |  | ||||||
|  #define CMGROUP_MAX    16 |  | ||||||
| @@ -363,6 +367,11 @@ clnt_vc_call(cl, proc, xdr_args, args_ptr, xdr_results, results_ptr, timeout)
 |  | ||||||
|  	    (xdr_results == NULL && timeout.tv_sec == 0 |  | ||||||
|  	    && timeout.tv_usec == 0) ? FALSE : TRUE; |  | ||||||
|   |  | ||||||
| +#ifdef HAVE_RPCSEC_GSS
 |  | ||||||
| +	if (is_authgss_client(cl))
 |  | ||||||
| +		refreshes = 0;
 |  | ||||||
| +#endif
 |  | ||||||
| +
 |  | ||||||
|  call_again: |  | ||||||
|  	xdrs->x_op = XDR_ENCODE; |  | ||||||
|  	ct->ct_error.re_status = RPC_SUCCESS; |  | ||||||
| diff --git a/tirpc/rpc/auth_gss.h b/tirpc/rpc/auth_gss.h
 |  | ||||||
| index 5316ed6..f2af6e9 100644
 |  | ||||||
| --- a/tirpc/rpc/auth_gss.h
 |  | ||||||
| +++ b/tirpc/rpc/auth_gss.h
 |  | ||||||
| @@ -120,6 +120,8 @@ void	gss_log_debug		(const char *fmt, ...);
 |  | ||||||
|  void	gss_log_status		(char *m, OM_uint32 major, OM_uint32 minor); |  | ||||||
|  void	gss_log_hexdump		(const u_char *buf, int len, int offset); |  | ||||||
|   |  | ||||||
| +bool_t	is_authgss_client	(CLIENT *);
 |  | ||||||
| +
 |  | ||||||
|  #ifdef __cplusplus |  | ||||||
|  } |  | ||||||
|  #endif |  | ||||||
| @ -1,523 +0,0 @@ | |||||||
| diff --git a/INSTALL b/INSTALL
 |  | ||||||
| deleted file mode 100644 |  | ||||||
| index 2099840..0000000
 |  | ||||||
| --- a/INSTALL
 |  | ||||||
| +++ /dev/null
 |  | ||||||
| @@ -1,370 +0,0 @@
 |  | ||||||
| -Installation Instructions
 |  | ||||||
| -*************************
 |  | ||||||
| -
 |  | ||||||
| -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
 |  | ||||||
| -Inc.
 |  | ||||||
| -
 |  | ||||||
| -   Copying and distribution of this file, with or without modification,
 |  | ||||||
| -are permitted in any medium without royalty provided the copyright
 |  | ||||||
| -notice and this notice are preserved.  This file is offered as-is,
 |  | ||||||
| -without warranty of any kind.
 |  | ||||||
| -
 |  | ||||||
| -Basic Installation
 |  | ||||||
| -==================
 |  | ||||||
| -
 |  | ||||||
| -   Briefly, the shell command `./configure && make && make install'
 |  | ||||||
| -should configure, build, and install this package.  The following
 |  | ||||||
| -more-detailed instructions are generic; see the `README' file for
 |  | ||||||
| -instructions specific to this package.  Some packages provide this
 |  | ||||||
| -`INSTALL' file but do not implement all of the features documented
 |  | ||||||
| -below.  The lack of an optional feature in a given package is not
 |  | ||||||
| -necessarily a bug.  More recommendations for GNU packages can be found
 |  | ||||||
| -in *note Makefile Conventions: (standards)Makefile Conventions.
 |  | ||||||
| -
 |  | ||||||
| -   The `configure' shell script attempts to guess correct values for
 |  | ||||||
| -various system-dependent variables used during compilation.  It uses
 |  | ||||||
| -those values to create a `Makefile' in each directory of the package.
 |  | ||||||
| -It may also create one or more `.h' files containing system-dependent
 |  | ||||||
| -definitions.  Finally, it creates a shell script `config.status' that
 |  | ||||||
| -you can run in the future to recreate the current configuration, and a
 |  | ||||||
| -file `config.log' containing compiler output (useful mainly for
 |  | ||||||
| -debugging `configure').
 |  | ||||||
| -
 |  | ||||||
| -   It can also use an optional file (typically called `config.cache'
 |  | ||||||
| -and enabled with `--cache-file=config.cache' or simply `-C') that saves
 |  | ||||||
| -the results of its tests to speed up reconfiguring.  Caching is
 |  | ||||||
| -disabled by default to prevent problems with accidental use of stale
 |  | ||||||
| -cache files.
 |  | ||||||
| -
 |  | ||||||
| -   If you need to do unusual things to compile the package, please try
 |  | ||||||
| -to figure out how `configure' could check whether to do them, and mail
 |  | ||||||
| -diffs or instructions to the address given in the `README' so they can
 |  | ||||||
| -be considered for the next release.  If you are using the cache, and at
 |  | ||||||
| -some point `config.cache' contains results you don't want to keep, you
 |  | ||||||
| -may remove or edit it.
 |  | ||||||
| -
 |  | ||||||
| -   The file `configure.ac' (or `configure.in') is used to create
 |  | ||||||
| -`configure' by a program called `autoconf'.  You need `configure.ac' if
 |  | ||||||
| -you want to change it or regenerate `configure' using a newer version
 |  | ||||||
| -of `autoconf'.
 |  | ||||||
| -
 |  | ||||||
| -   The simplest way to compile this package is:
 |  | ||||||
| -
 |  | ||||||
| -  1. `cd' to the directory containing the package's source code and type
 |  | ||||||
| -     `./configure' to configure the package for your system.
 |  | ||||||
| -
 |  | ||||||
| -     Running `configure' might take a while.  While running, it prints
 |  | ||||||
| -     some messages telling which features it is checking for.
 |  | ||||||
| -
 |  | ||||||
| -  2. Type `make' to compile the package.
 |  | ||||||
| -
 |  | ||||||
| -  3. Optionally, type `make check' to run any self-tests that come with
 |  | ||||||
| -     the package, generally using the just-built uninstalled binaries.
 |  | ||||||
| -
 |  | ||||||
| -  4. Type `make install' to install the programs and any data files and
 |  | ||||||
| -     documentation.  When installing into a prefix owned by root, it is
 |  | ||||||
| -     recommended that the package be configured and built as a regular
 |  | ||||||
| -     user, and only the `make install' phase executed with root
 |  | ||||||
| -     privileges.
 |  | ||||||
| -
 |  | ||||||
| -  5. Optionally, type `make installcheck' to repeat any self-tests, but
 |  | ||||||
| -     this time using the binaries in their final installed location.
 |  | ||||||
| -     This target does not install anything.  Running this target as a
 |  | ||||||
| -     regular user, particularly if the prior `make install' required
 |  | ||||||
| -     root privileges, verifies that the installation completed
 |  | ||||||
| -     correctly.
 |  | ||||||
| -
 |  | ||||||
| -  6. You can remove the program binaries and object files from the
 |  | ||||||
| -     source code directory by typing `make clean'.  To also remove the
 |  | ||||||
| -     files that `configure' created (so you can compile the package for
 |  | ||||||
| -     a different kind of computer), type `make distclean'.  There is
 |  | ||||||
| -     also a `make maintainer-clean' target, but that is intended mainly
 |  | ||||||
| -     for the package's developers.  If you use it, you may have to get
 |  | ||||||
| -     all sorts of other programs in order to regenerate files that came
 |  | ||||||
| -     with the distribution.
 |  | ||||||
| -
 |  | ||||||
| -  7. Often, you can also type `make uninstall' to remove the installed
 |  | ||||||
| -     files again.  In practice, not all packages have tested that
 |  | ||||||
| -     uninstallation works correctly, even though it is required by the
 |  | ||||||
| -     GNU Coding Standards.
 |  | ||||||
| -
 |  | ||||||
| -  8. Some packages, particularly those that use Automake, provide `make
 |  | ||||||
| -     distcheck', which can by used by developers to test that all other
 |  | ||||||
| -     targets like `make install' and `make uninstall' work correctly.
 |  | ||||||
| -     This target is generally not run by end users.
 |  | ||||||
| -
 |  | ||||||
| -Compilers and Options
 |  | ||||||
| -=====================
 |  | ||||||
| -
 |  | ||||||
| -   Some systems require unusual options for compilation or linking that
 |  | ||||||
| -the `configure' script does not know about.  Run `./configure --help'
 |  | ||||||
| -for details on some of the pertinent environment variables.
 |  | ||||||
| -
 |  | ||||||
| -   You can give `configure' initial values for configuration parameters
 |  | ||||||
| -by setting variables in the command line or in the environment.  Here
 |  | ||||||
| -is an example:
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
 |  | ||||||
| -
 |  | ||||||
| -   *Note Defining Variables::, for more details.
 |  | ||||||
| -
 |  | ||||||
| -Compiling For Multiple Architectures
 |  | ||||||
| -====================================
 |  | ||||||
| -
 |  | ||||||
| -   You can compile the package for more than one kind of computer at the
 |  | ||||||
| -same time, by placing the object files for each architecture in their
 |  | ||||||
| -own directory.  To do this, you can use GNU `make'.  `cd' to the
 |  | ||||||
| -directory where you want the object files and executables to go and run
 |  | ||||||
| -the `configure' script.  `configure' automatically checks for the
 |  | ||||||
| -source code in the directory that `configure' is in and in `..'.  This
 |  | ||||||
| -is known as a "VPATH" build.
 |  | ||||||
| -
 |  | ||||||
| -   With a non-GNU `make', it is safer to compile the package for one
 |  | ||||||
| -architecture at a time in the source code directory.  After you have
 |  | ||||||
| -installed the package for one architecture, use `make distclean' before
 |  | ||||||
| -reconfiguring for another architecture.
 |  | ||||||
| -
 |  | ||||||
| -   On MacOS X 10.5 and later systems, you can create libraries and
 |  | ||||||
| -executables that work on multiple system types--known as "fat" or
 |  | ||||||
| -"universal" binaries--by specifying multiple `-arch' options to the
 |  | ||||||
| -compiler but only a single `-arch' option to the preprocessor.  Like
 |  | ||||||
| -this:
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
 |  | ||||||
| -                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
 |  | ||||||
| -                 CPP="gcc -E" CXXCPP="g++ -E"
 |  | ||||||
| -
 |  | ||||||
| -   This is not guaranteed to produce working output in all cases, you
 |  | ||||||
| -may have to build one architecture at a time and combine the results
 |  | ||||||
| -using the `lipo' tool if you have problems.
 |  | ||||||
| -
 |  | ||||||
| -Installation Names
 |  | ||||||
| -==================
 |  | ||||||
| -
 |  | ||||||
| -   By default, `make install' installs the package's commands under
 |  | ||||||
| -`/usr/local/bin', include files under `/usr/local/include', etc.  You
 |  | ||||||
| -can specify an installation prefix other than `/usr/local' by giving
 |  | ||||||
| -`configure' the option `--prefix=PREFIX', where PREFIX must be an
 |  | ||||||
| -absolute file name.
 |  | ||||||
| -
 |  | ||||||
| -   You can specify separate installation prefixes for
 |  | ||||||
| -architecture-specific files and architecture-independent files.  If you
 |  | ||||||
| -pass the option `--exec-prefix=PREFIX' to `configure', the package uses
 |  | ||||||
| -PREFIX as the prefix for installing programs and libraries.
 |  | ||||||
| -Documentation and other data files still use the regular prefix.
 |  | ||||||
| -
 |  | ||||||
| -   In addition, if you use an unusual directory layout you can give
 |  | ||||||
| -options like `--bindir=DIR' to specify different values for particular
 |  | ||||||
| -kinds of files.  Run `configure --help' for a list of the directories
 |  | ||||||
| -you can set and what kinds of files go in them.  In general, the
 |  | ||||||
| -default for these options is expressed in terms of `${prefix}', so that
 |  | ||||||
| -specifying just `--prefix' will affect all of the other directory
 |  | ||||||
| -specifications that were not explicitly provided.
 |  | ||||||
| -
 |  | ||||||
| -   The most portable way to affect installation locations is to pass the
 |  | ||||||
| -correct locations to `configure'; however, many packages provide one or
 |  | ||||||
| -both of the following shortcuts of passing variable assignments to the
 |  | ||||||
| -`make install' command line to change installation locations without
 |  | ||||||
| -having to reconfigure or recompile.
 |  | ||||||
| -
 |  | ||||||
| -   The first method involves providing an override variable for each
 |  | ||||||
| -affected directory.  For example, `make install
 |  | ||||||
| -prefix=/alternate/directory' will choose an alternate location for all
 |  | ||||||
| -directory configuration variables that were expressed in terms of
 |  | ||||||
| -`${prefix}'.  Any directories that were specified during `configure',
 |  | ||||||
| -but not in terms of `${prefix}', must each be overridden at install
 |  | ||||||
| -time for the entire installation to be relocated.  The approach of
 |  | ||||||
| -makefile variable overrides for each directory variable is required by
 |  | ||||||
| -the GNU Coding Standards, and ideally causes no recompilation.
 |  | ||||||
| -However, some platforms have known limitations with the semantics of
 |  | ||||||
| -shared libraries that end up requiring recompilation when using this
 |  | ||||||
| -method, particularly noticeable in packages that use GNU Libtool.
 |  | ||||||
| -
 |  | ||||||
| -   The second method involves providing the `DESTDIR' variable.  For
 |  | ||||||
| -example, `make install DESTDIR=/alternate/directory' will prepend
 |  | ||||||
| -`/alternate/directory' before all installation names.  The approach of
 |  | ||||||
| -`DESTDIR' overrides is not required by the GNU Coding Standards, and
 |  | ||||||
| -does not work on platforms that have drive letters.  On the other hand,
 |  | ||||||
| -it does better at avoiding recompilation issues, and works well even
 |  | ||||||
| -when some directory options were not specified in terms of `${prefix}'
 |  | ||||||
| -at `configure' time.
 |  | ||||||
| -
 |  | ||||||
| -Optional Features
 |  | ||||||
| -=================
 |  | ||||||
| -
 |  | ||||||
| -   If the package supports it, you can cause programs to be installed
 |  | ||||||
| -with an extra prefix or suffix on their names by giving `configure' the
 |  | ||||||
| -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 |  | ||||||
| -
 |  | ||||||
| -   Some packages pay attention to `--enable-FEATURE' options to
 |  | ||||||
| -`configure', where FEATURE indicates an optional part of the package.
 |  | ||||||
| -They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 |  | ||||||
| -is something like `gnu-as' or `x' (for the X Window System).  The
 |  | ||||||
| -`README' should mention any `--enable-' and `--with-' options that the
 |  | ||||||
| -package recognizes.
 |  | ||||||
| -
 |  | ||||||
| -   For packages that use the X Window System, `configure' can usually
 |  | ||||||
| -find the X include and library files automatically, but if it doesn't,
 |  | ||||||
| -you can use the `configure' options `--x-includes=DIR' and
 |  | ||||||
| -`--x-libraries=DIR' to specify their locations.
 |  | ||||||
| -
 |  | ||||||
| -   Some packages offer the ability to configure how verbose the
 |  | ||||||
| -execution of `make' will be.  For these packages, running `./configure
 |  | ||||||
| ---enable-silent-rules' sets the default to minimal output, which can be
 |  | ||||||
| -overridden with `make V=1'; while running `./configure
 |  | ||||||
| ---disable-silent-rules' sets the default to verbose, which can be
 |  | ||||||
| -overridden with `make V=0'.
 |  | ||||||
| -
 |  | ||||||
| -Particular systems
 |  | ||||||
| -==================
 |  | ||||||
| -
 |  | ||||||
| -   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
 |  | ||||||
| -CC is not installed, it is recommended to use the following options in
 |  | ||||||
| -order to use an ANSI C compiler:
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
 |  | ||||||
| -
 |  | ||||||
| -and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 |  | ||||||
| -
 |  | ||||||
| -   HP-UX `make' updates targets which have the same time stamps as
 |  | ||||||
| -their prerequisites, which makes it generally unusable when shipped
 |  | ||||||
| -generated files such as `configure' are involved.  Use GNU `make'
 |  | ||||||
| -instead.
 |  | ||||||
| -
 |  | ||||||
| -   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 |  | ||||||
| -parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 |  | ||||||
| -a workaround.  If GNU CC is not installed, it is therefore recommended
 |  | ||||||
| -to try
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC="cc"
 |  | ||||||
| -
 |  | ||||||
| -and if that doesn't work, try
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC="cc -nodtk"
 |  | ||||||
| -
 |  | ||||||
| -   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
 |  | ||||||
| -directory contains several dysfunctional programs; working variants of
 |  | ||||||
| -these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
 |  | ||||||
| -in your `PATH', put it _after_ `/usr/bin'.
 |  | ||||||
| -
 |  | ||||||
| -   On Haiku, software installed for all users goes in `/boot/common',
 |  | ||||||
| -not `/usr/local'.  It is recommended to use the following options:
 |  | ||||||
| -
 |  | ||||||
| -     ./configure --prefix=/boot/common
 |  | ||||||
| -
 |  | ||||||
| -Specifying the System Type
 |  | ||||||
| -==========================
 |  | ||||||
| -
 |  | ||||||
| -   There may be some features `configure' cannot figure out
 |  | ||||||
| -automatically, but needs to determine by the type of machine the package
 |  | ||||||
| -will run on.  Usually, assuming the package is built to be run on the
 |  | ||||||
| -_same_ architectures, `configure' can figure that out, but if it prints
 |  | ||||||
| -a message saying it cannot guess the machine type, give it the
 |  | ||||||
| -`--build=TYPE' option.  TYPE can either be a short name for the system
 |  | ||||||
| -type, such as `sun4', or a canonical name which has the form:
 |  | ||||||
| -
 |  | ||||||
| -     CPU-COMPANY-SYSTEM
 |  | ||||||
| -
 |  | ||||||
| -where SYSTEM can have one of these forms:
 |  | ||||||
| -
 |  | ||||||
| -     OS
 |  | ||||||
| -     KERNEL-OS
 |  | ||||||
| -
 |  | ||||||
| -   See the file `config.sub' for the possible values of each field.  If
 |  | ||||||
| -`config.sub' isn't included in this package, then this package doesn't
 |  | ||||||
| -need to know the machine type.
 |  | ||||||
| -
 |  | ||||||
| -   If you are _building_ compiler tools for cross-compiling, you should
 |  | ||||||
| -use the option `--target=TYPE' to select the type of system they will
 |  | ||||||
| -produce code for.
 |  | ||||||
| -
 |  | ||||||
| -   If you want to _use_ a cross compiler, that generates code for a
 |  | ||||||
| -platform different from the build platform, you should specify the
 |  | ||||||
| -"host" platform (i.e., that on which the generated programs will
 |  | ||||||
| -eventually be run) with `--host=TYPE'.
 |  | ||||||
| -
 |  | ||||||
| -Sharing Defaults
 |  | ||||||
| -================
 |  | ||||||
| -
 |  | ||||||
| -   If you want to set default values for `configure' scripts to share,
 |  | ||||||
| -you can create a site shell script called `config.site' that gives
 |  | ||||||
| -default values for variables like `CC', `cache_file', and `prefix'.
 |  | ||||||
| -`configure' looks for `PREFIX/share/config.site' if it exists, then
 |  | ||||||
| -`PREFIX/etc/config.site' if it exists.  Or, you can set the
 |  | ||||||
| -`CONFIG_SITE' environment variable to the location of the site script.
 |  | ||||||
| -A warning: not all `configure' scripts look for a site script.
 |  | ||||||
| -
 |  | ||||||
| -Defining Variables
 |  | ||||||
| -==================
 |  | ||||||
| -
 |  | ||||||
| -   Variables not defined in a site shell script can be set in the
 |  | ||||||
| -environment passed to `configure'.  However, some packages may run
 |  | ||||||
| -configure again during the build, and the customized values of these
 |  | ||||||
| -variables may be lost.  In order to avoid this problem, you should set
 |  | ||||||
| -them in the `configure' command line, using `VAR=value'.  For example:
 |  | ||||||
| -
 |  | ||||||
| -     ./configure CC=/usr/local2/bin/gcc
 |  | ||||||
| -
 |  | ||||||
| -causes the specified `gcc' to be used as the C compiler (unless it is
 |  | ||||||
| -overridden in the site shell script).
 |  | ||||||
| -
 |  | ||||||
| -Unfortunately, this technique does not work for `CONFIG_SHELL' due to
 |  | ||||||
| -an Autoconf limitation.  Until the limitation is lifted, you can use
 |  | ||||||
| -this workaround:
 |  | ||||||
| -
 |  | ||||||
| -     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 |  | ||||||
| -
 |  | ||||||
| -`configure' Invocation
 |  | ||||||
| -======================
 |  | ||||||
| -
 |  | ||||||
| -   `configure' recognizes the following options to control how it
 |  | ||||||
| -operates.
 |  | ||||||
| -
 |  | ||||||
| -`--help'
 |  | ||||||
| -`-h'
 |  | ||||||
| -     Print a summary of all of the options to `configure', and exit.
 |  | ||||||
| -
 |  | ||||||
| -`--help=short'
 |  | ||||||
| -`--help=recursive'
 |  | ||||||
| -     Print a summary of the options unique to this package's
 |  | ||||||
| -     `configure', and exit.  The `short' variant lists options used
 |  | ||||||
| -     only in the top level, while the `recursive' variant lists options
 |  | ||||||
| -     also present in any nested packages.
 |  | ||||||
| -
 |  | ||||||
| -`--version'
 |  | ||||||
| -`-V'
 |  | ||||||
| -     Print the version of Autoconf used to generate the `configure'
 |  | ||||||
| -     script, and exit.
 |  | ||||||
| -
 |  | ||||||
| -`--cache-file=FILE'
 |  | ||||||
| -     Enable the cache: use and save the results of the tests in FILE,
 |  | ||||||
| -     traditionally `config.cache'.  FILE defaults to `/dev/null' to
 |  | ||||||
| -     disable caching.
 |  | ||||||
| -
 |  | ||||||
| -`--config-cache'
 |  | ||||||
| -`-C'
 |  | ||||||
| -     Alias for `--cache-file=config.cache'.
 |  | ||||||
| -
 |  | ||||||
| -`--quiet'
 |  | ||||||
| -`--silent'
 |  | ||||||
| -`-q'
 |  | ||||||
| -     Do not print messages saying which checks are being made.  To
 |  | ||||||
| -     suppress all normal output, redirect it to `/dev/null' (any error
 |  | ||||||
| -     messages will still be shown).
 |  | ||||||
| -
 |  | ||||||
| -`--srcdir=DIR'
 |  | ||||||
| -     Look for the package's source code in directory DIR.  Usually
 |  | ||||||
| -     `configure' can determine that directory automatically.
 |  | ||||||
| -
 |  | ||||||
| -`--prefix=DIR'
 |  | ||||||
| -     Use DIR as the installation prefix.  *note Installation Names::
 |  | ||||||
| -     for more details, including other options available for fine-tuning
 |  | ||||||
| -     the installation locations.
 |  | ||||||
| -
 |  | ||||||
| -`--no-create'
 |  | ||||||
| -`-n'
 |  | ||||||
| -     Run the configure checks, but stop before creating any output
 |  | ||||||
| -     files.
 |  | ||||||
| -
 |  | ||||||
| -`configure' also accepts some other, not widely useful, options.  Run
 |  | ||||||
| -`configure --help' for more details.
 |  | ||||||
| diff --git a/INSTALL b/INSTALL
 |  | ||||||
| new file mode 120000 |  | ||||||
| index 0000000..e3f22c0
 |  | ||||||
| --- /dev/null
 |  | ||||||
| +++ b/INSTALL
 |  | ||||||
| @@ -0,0 +1 @@
 |  | ||||||
| +/usr/share/automake-1.16/INSTALL
 |  | ||||||
| \ No newline at end of file |  | ||||||
| diff --git a/src/svc.c b/src/svc.c
 |  | ||||||
| index 6db164b..3a8709f 100644
 |  | ||||||
| --- a/src/svc.c
 |  | ||||||
| +++ b/src/svc.c
 |  | ||||||
| @@ -57,7 +57,7 @@
 |  | ||||||
|   |  | ||||||
|  #define max(a, b) (a > b ? a : b) |  | ||||||
|   |  | ||||||
| -static SVCXPRT **__svc_xports;
 |  | ||||||
| +SVCXPRT **__svc_xports;
 |  | ||||||
|  int __svc_maxrec; |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
| @@ -194,6 +194,21 @@ __xprt_do_unregister (xprt, dolock)
 |  | ||||||
|      rwlock_unlock (&svc_fd_lock); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +int
 |  | ||||||
| +svc_open_fds()
 |  | ||||||
| +{
 |  | ||||||
| +	int ix;
 |  | ||||||
| +	int nfds = 0;
 |  | ||||||
| +
 |  | ||||||
| +	rwlock_rdlock (&svc_fd_lock);
 |  | ||||||
| +	for (ix = 0; ix < svc_max_pollfd; ++ix) {
 |  | ||||||
| +		if (svc_pollfd[ix].fd != -1)
 |  | ||||||
| +			nfds++;
 |  | ||||||
| +	}
 |  | ||||||
| +	rwlock_unlock (&svc_fd_lock);
 |  | ||||||
| +	return (nfds);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
|  /* |  | ||||||
|   * Add a service program to the callout list. |  | ||||||
|   * The dispatch routine will be called when a rpc request for this |  | ||||||
| diff --git a/src/svc_vc.c b/src/svc_vc.c
 |  | ||||||
| index f1d9f00..3dc8a75 100644
 |  | ||||||
| --- a/src/svc_vc.c
 |  | ||||||
| +++ b/src/svc_vc.c
 |  | ||||||
| @@ -64,6 +64,8 @@
 |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  extern rwlock_t svc_fd_lock; |  | ||||||
| +extern SVCXPRT **__svc_xports;
 |  | ||||||
| +extern int svc_open_fds();
 |  | ||||||
|   |  | ||||||
|  static SVCXPRT *makefd_xprt(int, u_int, u_int); |  | ||||||
|  static bool_t rendezvous_request(SVCXPRT *, struct rpc_msg *); |  | ||||||
| @@ -82,6 +84,7 @@ static void svc_vc_ops(SVCXPRT *);
 |  | ||||||
|  static bool_t svc_vc_control(SVCXPRT *xprt, const u_int rq, void *in); |  | ||||||
|  static bool_t svc_vc_rendezvous_control (SVCXPRT *xprt, const u_int rq, |  | ||||||
|  				   	     void *in); |  | ||||||
| +static int __svc_destroy_idle(int timeout);
 |  | ||||||
|   |  | ||||||
|  struct cf_rendezvous { /* kept in xprt->xp_p1 for rendezvouser */ |  | ||||||
|  	u_int sendsize; |  | ||||||
| @@ -313,13 +316,14 @@ done:
 |  | ||||||
|  	return (xprt); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +
 |  | ||||||
|  /*ARGSUSED*/ |  | ||||||
|  static bool_t |  | ||||||
|  rendezvous_request(xprt, msg) |  | ||||||
|  	SVCXPRT *xprt; |  | ||||||
|  	struct rpc_msg *msg; |  | ||||||
|  { |  | ||||||
| -	int sock, flags;
 |  | ||||||
| +	int sock, flags, nfds, cnt;
 |  | ||||||
|  	struct cf_rendezvous *r; |  | ||||||
|  	struct cf_conn *cd; |  | ||||||
|  	struct sockaddr_storage addr; |  | ||||||
| @@ -379,6 +383,16 @@ again:
 |  | ||||||
|   |  | ||||||
|  	gettimeofday(&cd->last_recv_time, NULL); |  | ||||||
|   |  | ||||||
| +	nfds = svc_open_fds();
 |  | ||||||
| +	if (nfds >= (_rpc_dtablesize() / 5) * 4) {
 |  | ||||||
| +		/* destroy idle connections */
 |  | ||||||
| +		cnt = __svc_destroy_idle(15);
 |  | ||||||
| +		if (cnt == 0) {
 |  | ||||||
| +			/* destroy least active */
 |  | ||||||
| +			__svc_destroy_idle(0);
 |  | ||||||
| +		}
 |  | ||||||
| +	}
 |  | ||||||
| +
 |  | ||||||
|  	return (FALSE); /* there is never an rpc msg to be processed */ |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| @@ -820,3 +834,49 @@ __svc_clean_idle(fd_set *fds, int timeout, bool_t cleanblock)
 |  | ||||||
|  { |  | ||||||
|  	return FALSE; |  | ||||||
|  } |  | ||||||
| +
 |  | ||||||
| +static int
 |  | ||||||
| +__svc_destroy_idle(int timeout)
 |  | ||||||
| +{
 |  | ||||||
| +	int i, ncleaned = 0;
 |  | ||||||
| +	SVCXPRT *xprt, *least_active;
 |  | ||||||
| +	struct timeval tv, tdiff, tmax;
 |  | ||||||
| +	struct cf_conn *cd;
 |  | ||||||
| +
 |  | ||||||
| +	gettimeofday(&tv, NULL);
 |  | ||||||
| +	tmax.tv_sec = tmax.tv_usec = 0;
 |  | ||||||
| +	least_active = NULL;
 |  | ||||||
| +	rwlock_wrlock(&svc_fd_lock);
 |  | ||||||
| +
 |  | ||||||
| +	for (i = 0; i <= svc_max_pollfd; i++) {
 |  | ||||||
| +		if (svc_pollfd[i].fd == -1)
 |  | ||||||
| +			continue;
 |  | ||||||
| +		xprt = __svc_xports[i];
 |  | ||||||
| +		if (xprt == NULL || xprt->xp_ops == NULL ||
 |  | ||||||
| +			xprt->xp_ops->xp_recv != svc_vc_recv)
 |  | ||||||
| +			continue;
 |  | ||||||
| +		cd = (struct cf_conn *)xprt->xp_p1;
 |  | ||||||
| +		if (!cd->nonblock)
 |  | ||||||
| +			continue;
 |  | ||||||
| +		if (timeout == 0) {
 |  | ||||||
| +			timersub(&tv, &cd->last_recv_time, &tdiff);
 |  | ||||||
| +			if (timercmp(&tdiff, &tmax, >)) {
 |  | ||||||
| +				tmax = tdiff;
 |  | ||||||
| +				least_active = xprt;
 |  | ||||||
| +			}
 |  | ||||||
| +			continue;
 |  | ||||||
| +		}
 |  | ||||||
| +		if (tv.tv_sec - cd->last_recv_time.tv_sec > timeout) {
 |  | ||||||
| +			__xprt_unregister_unlocked(xprt);
 |  | ||||||
| +			__svc_vc_dodestroy(xprt);
 |  | ||||||
| +			ncleaned++;
 |  | ||||||
| +		}
 |  | ||||||
| +	}
 |  | ||||||
| +	if (timeout == 0 && least_active != NULL) {
 |  | ||||||
| +		__xprt_unregister_unlocked(least_active);
 |  | ||||||
| +		__svc_vc_dodestroy(least_active);
 |  | ||||||
| +		ncleaned++;
 |  | ||||||
| +	}
 |  | ||||||
| +	rwlock_unlock(&svc_fd_lock);
 |  | ||||||
| +	return (ncleaned);
 |  | ||||||
| +}
 |  | ||||||
							
								
								
									
										1448
									
								
								libtirpc-1.3.3-rc4.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1448
									
								
								libtirpc-1.3.3-rc4.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -2,13 +2,13 @@ | |||||||
| 
 | 
 | ||||||
| Name:			libtirpc | Name:			libtirpc | ||||||
| Version:		1.3.2 | Version:		1.3.2 | ||||||
| Release:		1.rc1%{?dist}.2 | Release:		1.rc4%{?dist} | ||||||
| Summary:		Transport Independent RPC Library | Summary:		Transport Independent RPC Library | ||||||
| License:		SISSL and BSD | License:		SISSL and BSD | ||||||
| URL:  			http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary | URL:  			http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary | ||||||
| Source0:		http://downloads.sourceforge.net/libtirpc/libtirpc-%{version}.tar.bz2 | Source0:		http://downloads.sourceforge.net/libtirpc/libtirpc-%{version}.tar.bz2 | ||||||
| 
 | 
 | ||||||
| Patch001:	libtirpc-1.3.3-rc1.patch | Patch001:	libtirpc-1.3.3-rc4.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires:		automake, autoconf, libtool, pkgconfig | BuildRequires:		automake, autoconf, libtool, pkgconfig | ||||||
| BuildRequires:		krb5-devel | BuildRequires:		krb5-devel | ||||||
| @ -114,6 +114,9 @@ mv %{buildroot}%{_mandir}/man3 %{buildroot}%{_mandir}/man3t | |||||||
| %{_mandir}/*/* | %{_mandir}/*/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Thu Jul 28 2022 Steve Dickson <steved@redhat.com> - 1.3.2-1.rc4 | ||||||
|  | - Updated to the latest upstream RC release: libtirpc-1-3-3-rc4 | ||||||
|  | 
 | ||||||
| * Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.2-1.rc1.2 | * Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.2-1.rc1.2 | ||||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild | - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user