Bring in a transport-independent RPC (TI-RPC).
authorPeter Avalos <pavalos@theshell.com>
Mon, 15 Dec 2008 22:04:23 +0000 (17:04 -0500)
committerPeter Avalos <pavalos@theshell.com>
Sun, 28 Dec 2008 04:17:03 +0000 (23:17 -0500)
-rpcbind replaces portmap which is more secure.
-Essentially this is the same thing FreeBSD did over 7 years ago (svn
revision #74462).
-This also updates utilities and the kernel build associated with this
change.

267 files changed:
Makefile_upgrade.inc
etc/Makefile
etc/defaults/rc.conf
etc/netconfig [new file with mode: 0644]
etc/rc.d/Makefile
etc/rc.d/lockd [new file with mode: 0644]
etc/rc.d/nfslocking [deleted file]
etc/rc.d/statd [new file with mode: 0644]
etc/rpc
include/Makefile
include/netconfig.h [new file with mode: 0644]
include/rpc/Makefile
include/rpc/auth.h
include/rpc/auth_des.h
include/rpc/auth_kerb.h [new file with mode: 0644]
include/rpc/clnt.h
include/rpc/clnt_soc.h [new file with mode: 0644]
include/rpc/clnt_stat.h [new file with mode: 0644]
include/rpc/des_crypt.h
include/rpc/nettype.h [copied from include/rpc/svc_auth.h with 63% similarity]
include/rpc/pmap_clnt.h
include/rpc/pmap_prot.h
include/rpc/pmap_rmt.h
include/rpc/raw.h [copied from lib/libc/rpc/rpc_commondata.c with 70% similarity]
include/rpc/rpc.h
include/rpc/rpc_com.h
include/rpc/rpc_msg.h
include/rpc/rpcb_clnt.h [new file with mode: 0644]
include/rpc/rpcb_prot.x [new file with mode: 0644]
include/rpc/rpcent.h [copied from include/rpc/rpc_com.h with 54% similarity]
include/rpc/svc.h
include/rpc/svc_auth.h
include/rpc/svc_dg.h [copied from lib/libc/rpc/pmap_prot.c with 62% similarity]
include/rpc/svc_soc.h [new file with mode: 0644]
include/rpc/types.h
include/rpc/xdr.h
include/rpcsvc/bootparam_prot.x
include/rpcsvc/nis.x
include/rpcsvc/nislib.h
include/rpcsvc/nlm_prot.x
include/rpcsvc/pmap_prot.x
include/rpcsvc/rstat.x
include/rpcsvc/yp_prot.h
include/rpcsvc/ypclnt.h
lib/libc/gen/_pthread_stubs.c
lib/libc/include/namespace.h
lib/libc/include/reentrant.h [new file with mode: 0644]
lib/libc/include/un-namespace.h
lib/libc/rpc/LICENSE [new file with mode: 0644]
lib/libc/rpc/Makefile.inc
lib/libc/rpc/README
lib/libc/rpc/auth_des.c
lib/libc/rpc/auth_none.c
lib/libc/rpc/auth_time.c
lib/libc/rpc/auth_unix.c
lib/libc/rpc/authdes_prot.c
lib/libc/rpc/authunix_prot.c
lib/libc/rpc/bindresvport.3
lib/libc/rpc/bindresvport.c
lib/libc/rpc/clnt_bcast.c [new file with mode: 0644]
lib/libc/rpc/clnt_dg.c [new file with mode: 0644]
lib/libc/rpc/clnt_generic.c
lib/libc/rpc/clnt_perror.c
lib/libc/rpc/clnt_raw.c
lib/libc/rpc/clnt_simple.c
lib/libc/rpc/clnt_tcp.c [deleted file]
lib/libc/rpc/clnt_udp.c [deleted file]
lib/libc/rpc/clnt_unix.c [deleted file]
lib/libc/rpc/clnt_vc.c [new file with mode: 0644]
lib/libc/rpc/crypt_client.c
lib/libc/rpc/get_myaddress.c [deleted file]
lib/libc/rpc/getnetconfig.3 [new file with mode: 0644]
lib/libc/rpc/getnetconfig.c [new file with mode: 0644]
lib/libc/rpc/getnetpath.3 [new file with mode: 0644]
lib/libc/rpc/getnetpath.c [new file with mode: 0644]
lib/libc/rpc/getpublickey.c
lib/libc/rpc/getrpcent.3
lib/libc/rpc/getrpcent.c
lib/libc/rpc/getrpcport.c
lib/libc/rpc/key_call.c
lib/libc/rpc/key_prot_xdr.c
lib/libc/rpc/mt_misc.c [new file with mode: 0644]
lib/libc/rpc/mt_misc.h [new file with mode: 0644]
lib/libc/rpc/netconfig.5 [new file with mode: 0644]
lib/libc/rpc/netname.c
lib/libc/rpc/netnamer.c
lib/libc/rpc/pmap_clnt.c
lib/libc/rpc/pmap_getmaps.c
lib/libc/rpc/pmap_getport.c
lib/libc/rpc/pmap_prot.c
lib/libc/rpc/pmap_prot2.c
lib/libc/rpc/pmap_rmt.c
lib/libc/rpc/rpc.3
lib/libc/rpc/rpc.5
lib/libc/rpc/rpc_callmsg.c
lib/libc/rpc/rpc_clnt_auth.3 [new file with mode: 0644]
lib/libc/rpc/rpc_clnt_calls.3 [new file with mode: 0644]
lib/libc/rpc/rpc_clnt_create.3 [new file with mode: 0644]
lib/libc/rpc/rpc_com.h [copied from include/rpc/rpc_com.h with 50% similarity]
lib/libc/rpc/rpc_commondata.c
lib/libc/rpc/rpc_dtablesize.c
lib/libc/rpc/rpc_generic.c [new file with mode: 0644]
lib/libc/rpc/rpc_prot.c
lib/libc/rpc/rpc_secure.3
lib/libc/rpc/rpc_soc.3 [copied from lib/libc/rpc/rpc.3 with 85% similarity]
lib/libc/rpc/rpc_soc.c [new file with mode: 0644]
lib/libc/rpc/rpc_svc_calls.3 [new file with mode: 0644]
lib/libc/rpc/rpc_svc_create.3 [new file with mode: 0644]
lib/libc/rpc/rpc_svc_err.3 [new file with mode: 0644]
lib/libc/rpc/rpc_svc_reg.3 [new file with mode: 0644]
lib/libc/rpc/rpc_xdr.3 [new file with mode: 0644]
lib/libc/rpc/rpcb_clnt.c [new file with mode: 0644]
lib/libc/rpc/rpcb_prot.c [new file with mode: 0644]
lib/libc/rpc/rpcb_st_xdr.c [new file with mode: 0644]
lib/libc/rpc/rpcbind.3 [new file with mode: 0644]
lib/libc/rpc/rpcdname.c
lib/libc/rpc/rtime.c
lib/libc/rpc/svc.c
lib/libc/rpc/svc_auth.c
lib/libc/rpc/svc_auth_des.c
lib/libc/rpc/svc_auth_unix.c
lib/libc/rpc/svc_dg.c [new file with mode: 0644]
lib/libc/rpc/svc_generic.c [new file with mode: 0644]
lib/libc/rpc/svc_raw.c
lib/libc/rpc/svc_run.c
lib/libc/rpc/svc_simple.c
lib/libc/rpc/svc_tcp.c [deleted file]
lib/libc/rpc/svc_udp.c [deleted file]
lib/libc/rpc/svc_unix.c [deleted file]
lib/libc/rpc/svc_vc.c [new file with mode: 0644]
lib/libc/xdr/Makefile.inc
lib/libc/xdr/xdr.3
lib/libc/xdr/xdr.c
lib/libc/xdr/xdr_array.c
lib/libc/xdr/xdr_float.c
lib/libc/xdr/xdr_mem.c
lib/libc/xdr/xdr_rec.c
lib/libc/xdr/xdr_reference.c
lib/libc/xdr/xdr_sizeof.c
lib/libc/xdr/xdr_stdio.c
lib/libc_rtld/Makefile
lib/librpcsvc/rnusers.c
lib/librpcsvc/rstat.c
lib/librpcsvc/rwall.c
lib/librpcsvc/secretkey.c
lib/librpcsvc/xcrypt.c
lib/librpcsvc/yp_passwd.c
lib/librpcsvc/yp_update.c
sbin/mount_nfs/mount_nfs.c
sbin/mountd/Makefile
sbin/mountd/mountd.c
sbin/nfsd/nfsd.8
sbin/nfsd/nfsd.c
sbin/umount/Makefile
sbin/umount/umount.c
sys/conf/files
sys/netproto/atm/spans/spans_kxdr.c
sys/netproto/atm/spans/spans_kxdr.h [copied from include/rpc/xdr.h with 57% similarity]
sys/netproto/atm/spans/spans_msg.c
sys/netproto/atm/spans/spans_xdr.x
usr.bin/chpass/Makefile
usr.bin/keylogin/keylogin.c
usr.bin/passwd/Makefile
usr.bin/rpcgen/rpc_clntout.c
usr.bin/rpcgen/rpc_cout.c
usr.bin/rpcgen/rpc_hout.c
usr.bin/rpcgen/rpc_main.c
usr.bin/rpcgen/rpc_parse.c
usr.bin/rpcgen/rpc_parse.h
usr.bin/rpcgen/rpc_sample.c
usr.bin/rpcgen/rpc_scan.c
usr.bin/rpcgen/rpc_scan.h
usr.bin/rpcgen/rpc_svcout.c
usr.bin/rpcgen/rpc_tblout.c
usr.bin/rpcgen/rpc_util.c
usr.bin/rpcgen/rpc_util.h
usr.bin/rpcgen/rpcgen.1
usr.bin/rpcinfo/Makefile
usr.bin/rpcinfo/rpcinfo.8
usr.bin/rpcinfo/rpcinfo.c
usr.bin/rup/rup.1
usr.bin/rup/rup.c
usr.bin/rusers/Makefile
usr.bin/rusers/rusers.1
usr.bin/rusers/rusers.c
usr.bin/rwall/rwall.1
usr.bin/rwall/rwall.c
usr.bin/showmount/showmount.8
usr.bin/showmount/showmount.c
usr.bin/ypwhich/ypwhich.1
usr.bin/ypwhich/ypwhich.c
usr.sbin/Makefile
usr.sbin/bootparamd/bootparamd/Makefile
usr.sbin/bootparamd/bootparamd/README
usr.sbin/bootparamd/bootparamd/bootparamd.8
usr.sbin/bootparamd/bootparamd/bootparamd.c
usr.sbin/bootparamd/bootparamd/main.c
usr.sbin/keyserv/Makefile
usr.sbin/keyserv/keyserv.c
usr.sbin/keyserv/keyserv.h
usr.sbin/keyserv/keyserv_uid.c [deleted file]
usr.sbin/portmap/Makefile [deleted file]
usr.sbin/portmap/from_local.c [deleted file]
usr.sbin/portmap/pmap_check.c [deleted file]
usr.sbin/portmap/pmap_check.h [deleted file]
usr.sbin/portmap/pmap_dump/Makefile [deleted file]
usr.sbin/portmap/pmap_dump/pmap_dump.c [deleted file]
usr.sbin/portmap/pmap_set/Makefile [deleted file]
usr.sbin/portmap/pmap_set/pmap_set.c [deleted file]
usr.sbin/portmap/portmap.8 [deleted file]
usr.sbin/portmap/portmap.c [deleted file]
usr.sbin/rpc.lockd/Makefile
usr.sbin/rpc.lockd/lock_proc.c [new file with mode: 0644]
usr.sbin/rpc.lockd/lockd.c
usr.sbin/rpc.lockd/lockd.h
usr.sbin/rpc.lockd/lockd_lock.c [new file with mode: 0644]
usr.sbin/rpc.lockd/lockd_lock.h [new file with mode: 0644]
usr.sbin/rpc.lockd/procs.c [deleted file]
usr.sbin/rpc.lockd/rpc.lockd.8
usr.sbin/rpc.lockd/test.c
usr.sbin/rpc.umntall/rpc.umntall.8
usr.sbin/rpc.umntall/rpc.umntall.c
usr.sbin/rpc.yppasswdd/Makefile
usr.sbin/rpc.yppasswdd/pw_copy.c [deleted file]
usr.sbin/rpc.yppasswdd/pw_util.c [deleted file]
usr.sbin/rpc.yppasswdd/rpc.yppasswdd.8
usr.sbin/rpc.yppasswdd/yppasswdd_extern.h
usr.sbin/rpc.yppasswdd/yppasswdd_main.c
usr.sbin/rpc.yppasswdd/yppasswdd_server.c
usr.sbin/rpc.ypupdated/Makefile
usr.sbin/rpc.ypupdated/update.c
usr.sbin/rpc.ypupdated/yp_dbupdate.c
usr.sbin/rpc.ypupdated/ypupdated_main.c
usr.sbin/rpc.ypupdated/ypupdated_server.c
usr.sbin/rpcbind/Makefile [new file with mode: 0644]
usr.sbin/rpcbind/check_bound.c [new file with mode: 0644]
usr.sbin/rpcbind/pmap_svc.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcb_stat.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcb_svc.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcb_svc_4.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcb_svc_com.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcbind.8 [new file with mode: 0644]
usr.sbin/rpcbind/rpcbind.c [new file with mode: 0644]
usr.sbin/rpcbind/rpcbind.h [new file with mode: 0644]
usr.sbin/rpcbind/security.c [new file with mode: 0644]
usr.sbin/rpcbind/util.c [new file with mode: 0644]
usr.sbin/rpcbind/warmstart.c [new file with mode: 0644]
usr.sbin/spray/spray.c
usr.sbin/ypbind/yp_ping.c
usr.sbin/ypbind/ypbind.8
usr.sbin/ypbind/ypbind.c
usr.sbin/yppush/Makefile
usr.sbin/yppush/yppush.8
usr.sbin/yppush/yppush_main.c
usr.sbin/ypserv/Makefile
usr.sbin/ypserv/Makefile.yp
usr.sbin/ypserv/yp_access.c
usr.sbin/ypserv/yp_dblookup.c
usr.sbin/ypserv/yp_dnslookup.c
usr.sbin/ypserv/yp_error.c
usr.sbin/ypserv/yp_extern.h
usr.sbin/ypserv/yp_main.c
usr.sbin/ypserv/yp_server.c
usr.sbin/ypserv/yp_svc_udp.c
usr.sbin/ypserv/ypinit.8
usr.sbin/ypserv/ypinit.sh
usr.sbin/ypserv/ypserv.8

index 081fb54..e8f0d82 100644 (file)
@@ -996,3 +996,9 @@ TO_REMOVE+=/usr/share/examples/cvsup/DragonFly-release1_12-supfile
 TO_REMOVE+=/usr/share/examples/cvsup/DragonFly-release2_0-supfile
 TO_REMOVE+=/usr/share/examples/cvsup/DragonFly-src-supfile
 TO_REMOVE+=/usr/include/pcap-bpf.h
+TO_REMOVE+=/etc/rc.d/nfslocking
+TO_REMOVE+=/usr/sbin/pmap_dump
+TO_REMOVE+=/usr/sbin/pmap_set
+TO_REMOVE+=/usr/sbin/portmap
+TO_REMOVE+=/usr/share/man/cat8/portmap.8.gz
+TO_REMOVE+=/usr/share/man/man8/portmap.8.gz
index e00523d..d0b07c2 100644 (file)
@@ -30,7 +30,7 @@ BIN1= amd.map auth.conf \
        ftpusers group \
        hosts hosts.allow host.conf hosts.equiv hosts.lpd \
        inetd.conf login.access login.conf \
-       motd modems networks newsyslog.conf \
+       motd modems netconfig networks newsyslog.conf \
        pf.conf phones printcap profile \
        remote sensorsd.conf \
        shells sysctl.conf syslog.conf usbd.conf \
index 9e72ffe..a7ad2ae 100644 (file)
@@ -201,11 +201,12 @@ weak_mountd_authentication="NO"   # Allow non-root mount requests to be served.
 nfs_reserved_port_only="NO"    # Provide NFS only on secure port (or NO).
 nfs_bufpackets=""              # bufspace (in packets) for client
 rpc_lockd_enable="NO"          # Run NFS rpc.lockd needed for client/server.
+rpc_lockd_flags=""             # Flags to rpc.lockd (if enabled).
 rpc_statd_enable="NO"          # Run NFS rpc.statd needed for client/server.
+rpc_statd_flags=""             # Flags to rpc.statd (if enabled).
 rpc_umntall_enable="YES"       # Run NFS rpc.umntall on boot and shutdown
 rpcbind_enable="NO"            # Run the portmapper service (YES/NO).
-# this is rpcbind in 5.x
-rpcbind_program="/usr/sbin/portmap"    # path to rpcbind, if you want a different one.
+rpcbind_program="/usr/sbin/rpcbind"    # path to rpcbind, if you want a different one.
 rpcbind_flags=""               # Flags to rpcbind (if enabled).
 rpc_ypupdated_enable="NO"      # Run if NIS master and SecureRPC (or NO).
 keyserv_enable="NO"            # Run the SecureRPC keyserver (or NO).
diff --git a/etc/netconfig b/etc/netconfig
new file mode 100644 (file)
index 0000000..0f2fbcd
--- /dev/null
@@ -0,0 +1,20 @@
+# $FreeBSD: src/etc/netconfig,v 1.3 2002/12/16 22:24:25 mbr Exp $
+# $DragonFly$
+#
+# The network configuration file. This file is currently only used in
+# conjunction with the (TI-) RPC code in the C library, unlike its
+# use in SVR4.
+#
+# Entries consist of:
+#
+#       <network_id> <semantics> <flags> <protofamily> <protoname> \
+#               <device> <nametoaddr_libs>
+#
+# The <device> and <nametoaddr_libs> fields are always empty in DragonFly.
+#
+udp6       tpi_clts      v     inet6    udp     -       -
+tcp6       tpi_cots_ord  v     inet6    tcp     -       -
+udp        tpi_clts      v     inet     udp     -       -
+tcp        tpi_cots_ord  v     inet     tcp     -       -
+rawip      tpi_raw       -     inet      -      -       -
+local      tpi_cots_ord  -     loopback  -      -       -
index 0ede6d0..37100d7 100644 (file)
@@ -14,15 +14,15 @@ FILES=      DAEMON LOGIN NETWORKING SERVERS abi accounting addswap adjkerntz \
        inetd initdiskless initrandom ip6fw ipfilter ipfs ipfw ipmon \
        ipnat ipsec ipxrouted isdnd jail \
        kadmind kerberos keyserv kpasswdd \
-       ldconfig local localdaemons lpd \
+       ldconfig local localdaemons lockd lpd \
        mixer motd mountcritlocal mountcritremote \
        mountd moused mroute6d mrouted msgs \
        named netif netoptions newsyslog \
-       network_ipv6 nfsclient nfsd nfslocking nfsserver nisdomain \
+       network_ipv6 nfsclient nfsd nfsserver nisdomain \
        dntpd othermta pf pflog ppp ppp-user pppoed pwcheck \
        quota random rarpd rcconf.sh resident rndcontrol root route6d routed \
        routing rpcbind rtadvd rtsold rwho sysdb savecore sdpd securelevel \
-       sendmail sensorsd serial sppp sshd swap1 syscons sysctl syslogd \
+       sendmail sensorsd serial sppp sshd statd swap1 syscons sysctl syslogd \
        timed ttys usbd varsym vinum virecover watchdogd wpa_supplicant \
        ypbind yppasswdd ypserv ypset ypupdated ypxfrd
 FILESDIR=      /etc/rc.d
diff --git a/etc/rc.d/lockd b/etc/rc.d/lockd
new file mode 100644 (file)
index 0000000..d660c7d
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# FreeBSD History: src/etc/rc.d/nfslocking,v 1.11 2004/10/07 13:55:26 mtm
+# $FreeBSD: src/etc/rc.d/lockd,v 1.22 2008/07/16 19:50:29 dougb Exp $
+# $DragonFly$
+#
+
+# PROVIDE: lockd
+# REQUIRE: nfsserver nfsclient nfsd rpcbind statd
+# BEFORE:  DAEMON
+# KEYWORD: nojail shutdown
+
+. /etc/rc.subr
+
+name="lockd"
+rcvar=rpc_lockd_enable
+command="/usr/sbin/rpc.${name}"
+start_precmd='lockd_precmd'
+stop_precmd='checkyesno nfs_server_enable || checkyesno nfs_client_enable'
+status_precmd=$stop_precmd
+
+# Make sure that we are either an NFS client or server, and that we get
+# the correct flags from rc.conf(5).
+#
+lockd_precmd()
+{
+       local ret
+       ret=0
+
+       if ! checkyesno nfs_server_enable && ! checkyesno nfs_client_enable
+       then
+               ret=1
+       fi
+       if ! checkyesno rpcbind_enable && \
+           ! /etc/rc.d/rpcbind forcestatus 1>/dev/null 2>&1
+       then
+               force_depend rpcbind || ret=1
+       fi
+       rc_flags=${rpc_lockd_flags}
+       return ${ret}
+}
+
+load_rc_config $name
+run_rc_command $1
diff --git a/etc/rc.d/nfslocking b/etc/rc.d/nfslocking
deleted file mode 100644 (file)
index aa44256..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-#
-# $NetBSD: nfslocking,v 1.6 2002/03/24 15:52:41 lukem Exp $
-# $FreeBSD: src/etc/rc.d/nfslocking,v 1.4 2003/01/20 18:57:16 mtm Exp $
-# $DragonFly: src/etc/rc.d/nfslocking,v 1.4 2005/11/19 21:47:32 swildner Exp $
-#
-
-# PROVIDE: nfslocking
-# REQUIRE: nfsserver nfsclient nfsd
-# BEFORE:  DAEMON
-
-. /etc/rc.subr
-
-arg=$1
-
-RCVAR_SERVER="nfs_server_enable"
-RCVAR_CLIENT="nfs_client_enable"
-RCVAR_STATD="rpc_statd_enable"
-RCVAR_LOCKD="rpc_lockd_enable"
-
-start_precmd='checkyesno ${RCVAR_SERVER} || checkyesno ${RCVAR_CLIENT} ||
-             [ -n "$rc_force" ]'
-stop_precmd=$start_precmd
-status_precmd=$start_precmd
-
-name="statd"
-rcvar=${RCVAR_STATD}
-command="/usr/sbin/rpc.${name}"
-load_rc_config $name
-run_rc_command "$arg"
-
-name="lockd"
-rcvar=${RCVAR_LOCKD}
-command="/usr/sbin/rpc.${name}"
-load_rc_config $name
-run_rc_command "$arg"
diff --git a/etc/rc.d/statd b/etc/rc.d/statd
new file mode 100644 (file)
index 0000000..035a435
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# FreeBSD History: src/etc/rc.d/nfslocking,v 1.11 2004/10/07 13:55:26 mtm Exp
+# $FreeBSD: src/etc/rc.d/statd,v 1.21 2008/07/16 19:50:29 dougb Exp $
+# $DragonFly$
+#
+
+# PROVIDE: statd
+# REQUIRE: nfsserver nfsclient nfsd rpcbind
+# BEFORE:  DAEMON
+# KEYWORD: nojail shutdown
+
+. /etc/rc.subr
+
+name="statd"
+rcvar=rpc_statd_enable
+command="/usr/sbin/rpc.${name}"
+start_precmd='statd_precmd'
+stop_precmd='checkyesno nfs_server_enable || checkyesno nfs_client_enable'
+status_precmd=$stop_precmd
+
+# Make sure that we are either an NFS client or server, and that we get
+# the correct flags from rc.conf(5).
+#
+statd_precmd()
+{
+       local ret
+       ret=0
+
+       if ! checkyesno nfs_server_enable && ! checkyesno nfs_client_enable
+       then
+               ret=1
+       fi
+       if ! checkyesno rpcbind_enable && \
+           ! /etc/rc.d/rpcbind forcestatus 1>/dev/null 2>&1
+       then
+               force_depend rpcbind || ret=1
+       fi
+       rc_flags=${rpc_statd_flags}
+       return ${ret}
+}
+
+load_rc_config $name
+run_rc_command $1
diff --git a/etc/rpc b/etc/rpc
index dcd9973..d3efcbf 100644 (file)
--- a/etc/rpc
+++ b/etc/rpc
@@ -1,9 +1,9 @@
 #
-# $FreeBSD: src/etc/rpc,v 1.7.2.4 2002/04/15 00:44:13 dougb Exp $
+# $FreeBSD: src/etc/rpc,v 1.11 2004/06/06 11:46:27 schweikh Exp $
 # $DragonFly: src/etc/rpc,v 1.2 2003/06/17 04:24:45 dillon Exp $
 # rpc 88/08/01 4.0 RPCSRC; from 1.12   99/07/25 SMI
 #
-portmapper     100000  portmap sunrpc rpcbind
+rpcbind                100000  portmap sunrpc rpcbind
 rstatd         100001  rstat rstat_svc rup perfmeter
 rusersd                100002  rusers
 nfs            100003  nfsprog
@@ -31,7 +31,7 @@ bootparamd    100026  bootparam
 ypupdated      100028  ypupdate
 keyserv                100029  keyserver
 sunlink_mapper 100033
-tfsd           100037 
+tfsd           100037
 nsed           100038
 nsemntd                100039
 showfhd                100043  showfh
index 0d1c07c..9dd7873 100644 (file)
@@ -15,7 +15,8 @@ INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h ctype.h db.h \
        fts.h ftw.h getopt.h glob.h grp.h histedit.h \
        iconv.h ieeefp.h ifaddrs.h iso646.h inttypes.h \
        langinfo.h libgen.h limits.h link.h locale.h malloc.h math.h memory.h \
-       mpool.h monetary.h ndbm.h netdb.h nl_types.h nlist.h objformat.h \
+       mpool.h monetary.h ndbm.h netconfig.h \
+       netdb.h nl_types.h nlist.h objformat.h \
        paths.h pthread.h pthread_np.h pwd.h \
        ranlib.h readpassphrase.h regex.h regexp.h resolv.h re_comp.h rmd160.h \
        search.h setjmp.h sgtty.h \
diff --git a/include/netconfig.h b/include/netconfig.h
new file mode 100644 (file)
index 0000000..b39b9b5
--- /dev/null
@@ -0,0 +1,97 @@
+/*     $NetBSD: netconfig.h,v 1.1 2000/06/02 22:57:54 fvdl Exp $       */
+/*     $FreeBSD: src/include/netconfig.h,v 1.3 2002/03/23 17:24:53 imp Exp $ */
+/* $DragonFly$ */
+
+
+#ifndef _NETCONFIG_H_
+#define _NETCONFIG_H_
+
+#include <sys/cdefs.h>
+
+#define NETCONFIG      "/etc/netconfig"
+#define NETPATH                "NETPATH"
+
+struct netconfig {
+       char *nc_netid;                 /* Network ID */
+       unsigned long nc_semantics;     /* Semantics (see below) */
+       unsigned long nc_flag;          /* Flags (see below) */
+       char *nc_protofmly;             /* Protocol family */
+       char *nc_proto;                 /* Protocol name */
+       char *nc_device;                /* Network device pathname */
+       unsigned long nc_nlookups;      /* Number of directory lookup libs */
+       char **nc_lookups;              /* Names of the libraries */
+       unsigned long nc_unused[9];     /* reserved */
+};
+
+typedef struct {
+       struct netconfig **nc_head;
+       struct netconfig **nc_curr;
+} NCONF_HANDLE;
+
+/*
+ * nc_semantics values
+ */
+#define NC_TPI_CLTS    1
+#define NC_TPI_COTS    2
+#define NC_TPI_COTS_ORD        3
+#define NC_TPI_RAW     4
+
+/*
+ * nc_flag values
+ */
+#define NC_NOFLAG      0x00
+#define NC_VISIBLE     0x01
+#define NC_BROADCAST   0x02
+
+/*
+ * nc_protofmly values
+ */
+#define NC_NOPROTOFMLY "-"
+#define NC_LOOPBACK    "loopback"
+#define NC_INET                "inet"
+#define NC_INET6       "inet6"
+#define NC_IMPLINK     "implink"
+#define NC_PUP         "pup"
+#define NC_CHAOS       "chaos"
+#define NC_NS          "ns"
+#define NC_NBS         "nbs"
+#define NC_ECMA                "ecma"
+#define NC_DATAKIT     "datakit"
+#define NC_CCITT       "ccitt"
+#define NC_SNA         "sna"
+#define NC_DECNET      "decnet"
+#define NC_DLI         "dli"
+#define NC_LAT         "lat"
+#define NC_HYLINK      "hylink"
+#define NC_APPLETALK   "appletalk"
+#define NC_NIT         "nit"
+#define NC_IEEE802     "ieee802"
+#define NC_OSI         "osi"
+#define NC_X25         "x25"
+#define NC_OSINET      "osinet"
+#define NC_GOSIP       "gosip"
+
+/*
+ * nc_proto values
+ */
+#define NC_NOPROTO     "-"
+#define NC_TCP         "tcp"
+#define NC_UDP         "udp"
+#define NC_ICMP                "icmp"
+
+__BEGIN_DECLS
+void *setnetconfig(void);
+struct netconfig *getnetconfig(void *);
+struct netconfig *getnetconfigent(const char *);
+void freenetconfigent(struct netconfig *);
+int endnetconfig(void *);
+
+void *setnetpath(void);
+struct netconfig *getnetpath(void *);
+int endnetpath(void *);
+
+void nc_perror(const char *);
+char *nc_sperror(void);
+__END_DECLS
+
+#endif /* _NETCONFIG_H_ */
index 197b06f..cd3d397 100644 (file)
@@ -1,10 +1,31 @@
-# $FreeBSD: src/include/rpc/Makefile,v 1.2.2.1 2002/07/22 14:21:46 ru Exp $
+# $FreeBSD: src/include/rpc/Makefile,v 1.2 2002/05/12 16:00:48 ru Exp $
 # $DragonFly: src/include/rpc/Makefile,v 1.2 2003/06/17 04:25:58 dillon Exp $
 
-NOOBJ= noobj
-INCS=  auth.h auth_unix.h clnt.h pmap_clnt.h pmap_prot.h pmap_rmt.h \
-       rpc.h rpc_com.h rpc_msg.h svc.h svc_auth.h types.h xdr.h \
-       auth_des.h des.h des_crypt.h
+.SUFFIXES: .x
+
+RPCCOM = rpcgen -C
+
+HDRS=  rpcb_prot.h
+
+XFILES= rpcb_prot.x
+
+HFILES=        auth.h auth_unix.h clnt.h clnt_soc.h clnt_stat.h \
+       nettype.h pmap_clnt.h pmap_prot.h pmap_rmt.h raw.h \
+       rpc.h rpc_msg.h rpcb_clnt.h rpcent.h rpc_com.h \
+       svc.h svc_auth.h svc_soc.h svc_dg.h types.h xdr.h
+
+# Secure RPC
+HFILES+= auth_des.h des.h des_crypt.h
+
+# Kerberos
+HFILES+= auth_kerb.h
+
+CLEANFILES+= ${HDRS}
+
+INCS=  ${HFILES} ${XFILES} ${HDRS}
 INCSDIR=${INCLUDEDIR}/rpc
 
+.x.h:
+       ${RPCCOM} -h -DWANT_NFS3 ${.IMPSRC} -o ${.TARGET}
+
 .include <bsd.prog.mk>
index 4573e49..71ae812 100644 (file)
@@ -28,7 +28,9 @@
  *
  *     from: @(#)auth.h 1.17 88/02/08 SMI
  *     from: @(#)auth.h        2.3 88/08/07 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/auth.h,v 1.15 1999/08/27 23:45:02 peter Exp $
+ *     from: @(#)auth.h        1.43    98/02/02 SMI
+ * $NetBSD: auth.h,v 1.15 2000/06/02 22:57:55 fvdl Exp $
+ * $FreeBSD: src/include/rpc/auth.h,v 1.21 2006/02/28 16:02:26 deischen Exp $
  * $DragonFly: src/include/rpc/auth.h,v 1.4 2004/02/26 13:58:26 joerg Exp $
  */
 
  * Copyright (C) 1984, Sun Microsystems, Inc.
  *
  * The data structures are completely opaque to the client.  The client
- * is required to pass a AUTH * to routines that create rpc
+ * is required to pass an AUTH * to routines that create rpc
  * "sessions".
  */
 
 #ifndef _RPC_AUTH_H
 #define _RPC_AUTH_H
+#include <rpc/xdr.h>
+#include <rpc/clnt_stat.h>
 #include <sys/cdefs.h>
 #include <sys/socket.h>
 
 #define MAX_AUTH_BYTES 400
 #define MAXNETNAMELEN  255     /* maximum length of network user's name */
 
+/*
+ *  Client side authentication/security data
+ */
+
+typedef struct sec_data {
+       u_int   secmod;         /* security mode number e.g. in nfssec.conf */
+       u_int   rpcflavor;      /* rpc flavors:AUTH_UNIX,AUTH_DES,RPCSEC_GSS */
+       int     flags;          /* AUTH_F_xxx flags */
+       caddr_t data;           /* opaque data per flavor */
+} sec_data_t;
+
+#ifdef _SYSCALL32_IMPL
+struct sec_data32 {
+       uint32_t secmod;        /* security mode number e.g. in nfssec.conf */
+       uint32_t rpcflavor;     /* rpc flavors:AUTH_UNIX,AUTH_DES,RPCSEC_GSS */
+       int32_t flags;          /* AUTH_F_xxx flags */
+       caddr32_t data;         /* opaque data per flavor */
+};
+#endif /* _SYSCALL32_IMPL */
+
+/*
+ * AUTH_DES flavor specific data from sec_data opaque data field.
+ * AUTH_KERB has the same structure.
+ */
+typedef struct des_clnt_data {
+       struct netbuf   syncaddr;       /* time sync addr */
+       struct knetconfig *knconf;      /* knetconfig info that associated */
+                                       /* with the syncaddr. */
+       char            *netname;       /* server's netname */
+       int             netnamelen;     /* server's netname len */
+} dh_k4_clntdata_t;
+
+#ifdef _SYSCALL32_IMPL
+struct des_clnt_data32 {
+       struct netbuf32 syncaddr;       /* time sync addr */
+       caddr32_t knconf;               /* knetconfig info that associated */
+                                       /* with the syncaddr. */
+       caddr32_t netname;              /* server's netname */
+       int32_t netnamelen;             /* server's netname len */
+};
+#endif /* _SYSCALL32_IMPL */
+
+#ifdef KERBEROS
+/*
+ * flavor specific data to hold the data for AUTH_DES/AUTH_KERB(v4)
+ * in sec_data->data opaque field.
+ */
+typedef struct krb4_svc_data {
+       int             window;         /* window option value */
+} krb4_svcdata_t;
+
+typedef struct krb4_svc_data   des_svcdata_t;
+#endif /* KERBEROS */
+
+/*
+ * authentication/security specific flags
+ */
+#define AUTH_F_RPCTIMESYNC     0x001   /* use RPC to do time sync */
+#define AUTH_F_TRYNONE         0x002   /* allow fall back to AUTH_NONE */
+
+
 /*
  * Status returned from authentication check
  */
@@ -68,12 +133,23 @@ enum auth_stat {
        */
        AUTH_INVALIDRESP=6,             /* bogus response verifier */
        AUTH_FAILED=7                   /* some unknown reason */
+#ifdef KERBEROS
+       /*
+        * kerberos errors
+        */
+       ,
+       AUTH_KERB_GENERIC = 8,          /* kerberos generic error */
+       AUTH_TIMEEXPIRE = 9,            /* time of credential expired */
+       AUTH_TKT_FILE = 10,             /* something wrong with ticket file */
+       AUTH_DECODE = 11,               /* can't decode authenticator */
+       AUTH_NET_ADDR = 12              /* wrong net address in ticket */
+#endif /* KERBEROS */
 };
 
 union des_block {
        struct {
-               u_int32_t high;
-               u_int32_t low;
+               uint32_t high;
+               uint32_t low;
        } key;
        char c[8];
 };
@@ -90,31 +166,28 @@ struct opaque_auth {
        caddr_t oa_base;                /* address of more auth stuff */
        u_int   oa_length;              /* not to exceed MAX_AUTH_BYTES */
 };
-__BEGIN_DECLS
-bool_t xdr_opaque_auth(XDR *, struct opaque_auth *);
-__END_DECLS
 
 
 /*
  * Auth handle, interface to client side authenticators.
  */
-typedef struct __rpc_auth {
+typedef struct __auth {
        struct  opaque_auth     ah_cred;
        struct  opaque_auth     ah_verf;
        union   des_block       ah_key;
        struct auth_ops {
-               void    (*ah_nextverf) (struct __rpc_auth *);
+               void    (*ah_nextverf) (struct __auth *);
                /* nextverf & serialize */
-               int     (*ah_marshal) (struct __rpc_auth *, XDR *);
+               int     (*ah_marshal) (struct __auth *, XDR *);
                /* validate verifier */
-               int     (*ah_validate) (struct __rpc_auth *,
+               int     (*ah_validate) (struct __auth *,
                                struct opaque_auth *);
                /* refresh credentials */
-               int     (*ah_refresh) (struct __rpc_auth *);
+               int     (*ah_refresh) (struct __auth *, void *);
                /* destroy this structure */
-               void    (*ah_destroy) (struct __rpc_auth *);
+               void    (*ah_destroy) (struct __auth *);
        } *ah_ops;
-       caddr_t ah_private;
+       void *ah_private;
 } AUTH;
 
 
@@ -141,10 +214,10 @@ typedef struct __rpc_auth {
 #define auth_validate(auth, verfp)     \
                ((*((auth)->ah_ops->ah_validate))((auth), verfp))
 
-#define AUTH_REFRESH(auth)             \
-               ((*((auth)->ah_ops->ah_refresh))(auth))
-#define auth_refresh(auth)             \
-               ((*((auth)->ah_ops->ah_refresh))(auth))
+#define AUTH_REFRESH(auth, msg)                \
+               ((*((auth)->ah_ops->ah_refresh))(auth, msg))
+#define auth_refresh(auth, msg)                \
+               ((*((auth)->ah_ops->ah_refresh))(auth, msg))
 
 #define AUTH_DESTROY(auth)             \
                ((*((auth)->ah_ops->ah_destroy))(auth))
@@ -152,14 +225,16 @@ typedef struct __rpc_auth {
                ((*((auth)->ah_ops->ah_destroy))(auth))
 
 
+__BEGIN_DECLS
 extern struct opaque_auth _null_auth;
+__END_DECLS
 
 /*
  * These are the various implementations of client side authenticators.
  */
 
 /*
- * Unix style authentication
+ * System style authentication
  * AUTH *authunix_create(machname, uid, gid, len, aup_gids)
  *     char *machname;
  *     int uid;
@@ -168,93 +243,113 @@ extern struct opaque_auth _null_auth;
  *     int *aup_gids;
  */
 __BEGIN_DECLS
-struct sockaddr_in;
 AUTH   *authunix_create(char *, int, int, int, int *);
 AUTH   *authunix_create_default(void);
 AUTH   *authnone_create(void);
 __END_DECLS
-
-/* Forward compatibility with TI-RPC */
-#define authsys_create authunix_create
-#define authsys_create_default authunix_create_default
-
 /*
  * DES style authentication
- * AUTH *authdes_create(servername, window, timehost, ckey)
+ * AUTH *authsecdes_create(servername, window, timehost, ckey)
  *     char *servername;               - network name of server
  *     u_int window;                   - time to live
- *     struct sockaddr *timehost;      - optional hostname to sync with
+ *     const char *timehost;           - optional hostname to sync with
  *     des_block *ckey;                - optional conversation key to use
  */
 __BEGIN_DECLS
 AUTH   *authdes_create(char *, u_int, struct sockaddr *, des_block *);
-#ifdef NOTYET
-/*
- * TI-RPC supports this call, but it requires the inclusion of
- * NIS+-specific headers which would require the inclusion of other
- * headers which would result in a tangled mess. For now, the NIS+
- * code prototypes this routine internally.
- */
-AUTH   *authdes_pk_create(char *, netobj *, u_int, struct sockaddr *,
-                          des_block *, nis_server *);
-#endif
+AUTH   *authdes_seccreate(const char *, const u_int, const char *,
+                          const des_block *);
 __END_DECLS
 
+__BEGIN_DECLS
+bool_t xdr_opaque_auth(XDR *, struct opaque_auth *);
+__END_DECLS
+
+#define authsys_create(c,i1,i2,i3,ip) authunix_create((c),(i1),(i2),(i3),(ip))
+#define authsys_create_default() authunix_create_default()
+
 /*
  * Netname manipulation routines.
  */
 __BEGIN_DECLS
-int    netname2user(char *, uid_t *, gid_t *, int *, gid_t *);
-int    netname2host(char *, char *, int);
 int    getnetname(char *);
-int    user2netname(char *, uid_t, char *);
-int    host2netname(char *, char *, char *);
+int    host2netname(char *, const char *, const char *);
+int    user2netname(char *, const uid_t, const char *);
+int    netname2user(char *, uid_t *, gid_t *, int *, gid_t *);
+int    netname2host(char *, char *, const int);
 void   passwd2des(char *, char *);
 __END_DECLS
 
 /*
- * Keyserv interface routines.
- * XXX Should not be here.
+ *
+ * These routines interface to the keyserv daemon
+ *
  */
-#ifndef HEXKEYBYTES
-#define HEXKEYBYTES 48
-#endif
-typedef char kbuf[HEXKEYBYTES];
-typedef char *namestr;
-
-struct netstarg {
-       kbuf st_priv_key;
-       kbuf st_pub_key;
-       namestr st_netname;
-};
-
 __BEGIN_DECLS
 int    key_decryptsession(const char *, des_block *);
-int    key_decryptsession_pk(char *, netobj *, des_block *);
 int    key_encryptsession(const char *, des_block *);
-int    key_encryptsession_pk(char *, netobj *, des_block *);
 int    key_gendes(des_block *);
 int    key_setsecret(const char *);
 int    key_secretkey_is_set(void);
-int    key_setnet(struct netstarg *);
-int    key_get_conv(char *, des_block *);
 __END_DECLS
 
 /*
  * Publickey routines.
  */
 __BEGIN_DECLS
-int    getpublickey(char *, char *);
-int    getpublicandprivatekey(char *, char *);
+int    getpublickey(const char *, char *);
+int    getpublicandprivatekey(const char *, char *);
 int    getsecretkey(char *, char *, char *);
 __END_DECLS
 
+#ifdef KERBEROS
+/*
+ * Kerberos style authentication
+ * AUTH *authkerb_seccreate(service, srv_inst, realm, window, timehost, status)
+ *     const char *service;                    - service name
+ *     const char *srv_inst;                   - server instance
+ *     const char *realm;                      - server realm
+ *     const u_int window;                     - time to live
+ *     const char *timehost;                   - optional hostname to sync with
+ *     int *status;                            - kerberos status returned
+ */
+__BEGIN_DECLS
+AUTH   *authkerb_seccreate(const char *, const char *, const char *,
+                           const u_int, const char *, int *);
+__END_DECLS
+
+/*
+ * Map a kerberos credential into a unix cred.
+ *
+ *     authkerb_getucred(rqst, uid, gid, grouplen, groups)
+ *     const struct svc_req *rqst;             - request pointer
+ *     uid_t *uid;
+ *     gid_t *gid;
+ *     short *grouplen;
+ *     int *groups;
+ *
+ */
+__BEGIN_DECLS
+int    authkerb_getucred(/* struct svc_req *, uid_t *, gid_t *,
+                         short *, int * */);
+__END_DECLS
+#endif /* KERBEROS */
+
+__BEGIN_DECLS
+struct svc_req;
+struct rpc_msg;
+enum auth_stat _svcauth_null (struct svc_req *, struct rpc_msg *);
+enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *);
+enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *);
+__END_DECLS
 
 #define AUTH_NONE      0               /* no authentication */
 #define        AUTH_NULL       0               /* backward compatibility */
-#define        AUTH_UNIX       1               /* unix style (uid, gids) */
-#define        AUTH_SYS        1               /* forward compatibility */
+#define        AUTH_SYS        1               /* unix style (uid, gids) */
+#define AUTH_UNIX      AUTH_SYS
 #define        AUTH_SHORT      2               /* short hand unix style */
-#define AUTH_DES       3               /* des style (encrypted timestamps) */
+#define AUTH_DH                3               /* for Diffie-Hellman mechanism */
+#define AUTH_DES       AUTH_DH         /* for backward compatibility */
+#define AUTH_KERB      4               /* kerberos style */
 
 #endif /* !_RPC_AUTH_H */
index 7aee4e8..7012aaf 100644 (file)
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- *     @(#)auth_des.h  2.2 88/07/29 4.0 RPCSRC; from 1.3 88/02/08 SMI
+ *     from: @(#)auth_des.h 2.2 88/07/29 4.0 RPCSRC
+ *     from: @(#)auth_des.h 1.14    94/04/25 SMI
+ *     $FreeBSD: src/include/rpc/auth_des.h,v 1.3 2002/03/23 17:24:55 imp Exp $
  *     $DragonFly: src/include/rpc/auth_des.h,v 1.2 2003/11/14 01:01:50 dillon Exp $
  */
 
 /*
- * Copyright (c) 1988 by Sun Microsystems, Inc.
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
  */
 
 /*
@@ -104,8 +106,20 @@ struct authdes_verf {
 #define adv_xtimeverf  adv_time_u.adv_xtime
 #define adv_nickname   adv_int_u
 
+/*
+ * Map a des credential into a unix cred.
+ *
+ */
+__BEGIN_DECLS
+int authdes_getucred(struct authdes_cred *, uid_t *, gid_t *, int *, gid_t *);
+__END_DECLS
+
 __BEGIN_DECLS
-extern int authdes_getucred ( struct authdes_cred *, uid_t *, gid_t *, int *, gid_t * );
+bool_t xdr_authdes_cred(XDR *, struct authdes_cred *);
+bool_t xdr_authdes_verf(XDR *, struct authdes_verf *);
+int    rtime(dev_t, struct netbuf *, int, struct timeval *, struct timeval *);
+void   kgetnetname(char *);
+enum auth_stat _svcauth_des(struct svc_req *, struct rpc_msg *);
 __END_DECLS
 
 #endif /* ndef _AUTH_DES_ */
diff --git a/include/rpc/auth_kerb.h b/include/rpc/auth_kerb.h
new file mode 100644 (file)
index 0000000..7d77569
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ * $FreeBSD: src/include/rpc/auth_kerb.h,v 1.3 2007/02/02 18:11:18 schweikh Exp $
+ * $DragonFly$
+ */
+/*
+ * auth_kerb.h, Protocol for Kerberos style authentication for RPC
+ *
+ * Copyright (C) 1986, Sun Microsystems, Inc.
+ */
+
+#ifndef        _RPC_AUTH_KERB_H
+#define        _RPC_AUTH_KERB_H
+
+#ifdef KERBEROS
+
+#include <kerberos/krb.h>
+#include <sys/socket.h>
+#include <sys/t_kuser.h>
+#include <netinet/in.h>
+#include <rpc/svc.h>
+
+/*
+ * There are two kinds of "names": fullnames and nicknames
+ */
+enum authkerb_namekind {
+       AKN_FULLNAME,
+       AKN_NICKNAME
+};
+/*
+ * A fullname contains the ticket and the window
+ */
+struct authkerb_fullname {
+       KTEXT_ST ticket;
+       u_long window;          /* associated window */
+};
+
+/*
+ *  cooked credential stored in rq_clntcred
+ */
+struct authkerb_clnt_cred {
+       /* start of AUTH_DAT */
+       unsigned char k_flags;  /* Flags from ticket */
+       char    pname[ANAME_SZ]; /* Principal's name */
+       char    pinst[INST_SZ]; /* His Instance */
+       char    prealm[REALM_SZ]; /* His Realm */
+       unsigned long checksum; /* Data checksum (opt) */
+       C_Block session;        /* Session Key */
+       int     life;           /* Life of ticket */
+       unsigned long time_sec; /* Time ticket issued */
+       unsigned long address;  /* Address in ticket */
+       /* KTEXT_ST reply;      Auth reply (opt) */
+       /* end of AUTH_DAT */
+       unsigned long expiry;   /* time the ticket is expiring */
+       u_long nickname;        /* Nickname into cache */
+       u_long window;          /* associated window */
+};
+
+typedef struct authkerb_clnt_cred authkerb_clnt_cred;
+
+/*
+ * A credential
+ */
+struct authkerb_cred {
+       enum authkerb_namekind akc_namekind;
+       struct authkerb_fullname akc_fullname;
+       u_long akc_nickname;
+};
+
+/*
+ * A kerb authentication verifier
+ */
+struct authkerb_verf {
+       union {
+               struct timeval akv_ctime;       /* clear time */
+               des_block akv_xtime;            /* crypt time */
+       } akv_time_u;
+       u_long akv_int_u;
+};
+
+/*
+ * des authentication verifier: client variety
+ *
+ * akv_timestamp is the current time.
+ * akv_winverf is the credential window + 1.
+ * Both are encrypted using the conversation key.
+ */
+#ifndef akv_timestamp
+#define        akv_timestamp   akv_time_u.akv_ctime
+#define        akv_xtimestamp  akv_time_u.akv_xtime
+#define        akv_winverf     akv_int_u
+#endif
+/*
+ * des authentication verifier: server variety
+ *
+ * akv_timeverf is the client's timestamp + client's window
+ * akv_nickname is the server's nickname for the client.
+ * akv_timeverf is encrypted using the conversation key.
+ */
+#ifndef akv_timeverf
+#define        akv_timeverf    akv_time_u.akv_ctime
+#define        akv_xtimeverf   akv_time_u.akv_xtime
+#define        akv_nickname    akv_int_u
+#endif
+
+/*
+ * Register the service name, instance and realm.
+ */
+extern int     authkerb_create(char *, char *, char *, u_int,
+                       struct netbuf *, int *, dev_t, int, AUTH **);
+extern bool_t  xdr_authkerb_cred(XDR *, struct authkerb_cred *);
+extern bool_t  xdr_authkerb_verf(XDR *, struct authkerb_verf *);
+extern int     svc_kerb_reg(SVCXPRT *, char *, char *, char *);
+extern enum auth_stat _svcauth_kerb(struct svc_req *, struct rpc_msg *);
+
+#endif /* KERBEROS */
+#endif /* !_RPC_AUTH_KERB_H */
index ce5a0d7..a823d1e 100644 (file)
@@ -1,4 +1,21 @@
 /*
+ * The contents of this file are subject to the Sun Standards
+ * License Version 1.0 the (the "License";) You may not use
+ * this file except in compliance with the License.  You may
+ * obtain a copy of the License at lib/libc/rpc/LICENSE
+ *
+ * Software distributed under the License is distributed on
+ * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied.  See the License for the specific
+ * language governing rights and limitations under the License.
+ *
+ * The Original Code is Copyright 1998 by Sun Microsystems, Inc
+ *
+ * The Initial Developer of the Original Code is:  Sun
+ * Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  * unrestricted use provided that this legend is included on all tape
  * media and as a part of the software program in whole or part.  Users
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- *     from: @(#)clnt.h 1.31 88/02/08 SMI
+ *     from: @(#)clnt.h 1.31 94/04/29 SMI
  *     from: @(#)clnt.h        2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/clnt.h,v 1.11.2.1 2001/06/28 21:44:09 iedowse Exp $
+ * $NetBSD: clnt.h,v 1.14 2000/06/02 22:57:55 fvdl Exp $
+ * $FreeBSD: src/include/rpc/clnt.h,v 1.21 2003/01/24 01:47:55 fjoe Exp $
  * $DragonFly: src/include/rpc/clnt.h,v 1.6 2005/11/13 12:27:04 swildner Exp $
  */
 
 /*
  * clnt.h - Client side remote procedure call interface.
  *
- * Copyright (C) 1984, Sun Microsystems, Inc.
+ * Copyright (c) 1986-1991,1994-1999 by Sun Microsystems, Inc.
+ * All rights reserved.
  */
 
 #ifndef _RPC_CLNT_H_
 #define _RPC_CLNT_H_
+#include <rpc/clnt_stat.h>
 #include <sys/cdefs.h>
+#include <netconfig.h>
 #include <sys/un.h>
 
 /*
- * Rpc calls return an enum clnt_stat.  This should be looked at more,
- * since each implementation is required to live with this (implementation
- * independent) list of errors.
- */
-enum clnt_stat {
-       RPC_SUCCESS=0,                  /* call succeeded */
-       /*
-        * local errors
-        */
-       RPC_CANTENCODEARGS=1,           /* can't encode arguments */
-       RPC_CANTDECODERES=2,            /* can't decode results */
-       RPC_CANTSEND=3,                 /* failure in sending call */
-       RPC_CANTRECV=4,                 /* failure in receiving result */
-       RPC_TIMEDOUT=5,                 /* call timed out */
-       /*
-        * remote errors
-        */
-       RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
-       RPC_AUTHERROR=7,                /* authentication error */
-       RPC_PROGUNAVAIL=8,              /* program not available */
-       RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
-       RPC_PROCUNAVAIL=10,             /* procedure unavailable */
-       RPC_CANTDECODEARGS=11,          /* decode arguments error */
-       RPC_SYSTEMERROR=12,             /* generic "other problem" */
-
-       /*
-        * callrpc & clnt_create errors
-        */
-       RPC_UNKNOWNHOST=13,             /* unknown host name */
-       RPC_UNKNOWNPROTO=17,            /* unkown protocol */
-
-       /*
-        * _ create errors
-        */
-       RPC_PMAPFAILURE=14,             /* the pmapper failed in its call */
-       RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
-       /*
-        * unspecified error
-        */
-       RPC_FAILED=16
-};
+ * Well-known IPV6 RPC broadcast address.
+ */
+#define RPCB_MULTICAST_ADDR "ff02::202"
 
+/*
+ * the following errors are in general unrecoverable.  The caller
+ * should give up rather than retry.
+ */
+#define IS_UNRECOVERABLE_RPC(s) (((s) == RPC_AUTHERROR) || \
+       ((s) == RPC_CANTENCODEARGS) || \
+       ((s) == RPC_CANTDECODERES) || \
+       ((s) == RPC_VERSMISMATCH) || \
+       ((s) == RPC_PROCUNAVAIL) || \
+       ((s) == RPC_PROGUNAVAIL) || \
+       ((s) == RPC_PROGVERSMISMATCH) || \
+       ((s) == RPC_CANTDECODEARGS))
 
 /*
  * Error info.
@@ -96,8 +91,8 @@ struct rpc_err {
                int RE_errno;           /* related system error */
                enum auth_stat RE_why;  /* why the auth error occurred */
                struct {
-                       u_int32_t low;  /* lowest verion supported */
-                       u_int32_t high; /* highest verion supported */
+                       rpcvers_t low;  /* lowest version supported */
+                       rpcvers_t high; /* highest version supported */
                } RE_vers;
                struct {                /* maybe meaningful if RPC_FAILED */
                        int32_t s1;
@@ -113,34 +108,58 @@ struct rpc_err {
 
 /*
  * Client rpc handle.
- * Created by individual implementations, see e.g. rpc_udp.c.
+ * Created by individual implementations
  * Client is responsible for initializing auth, see e.g. auth_none.c.
  */
 typedef struct __rpc_client {
        AUTH    *cl_auth;                       /* authenticator */
        struct clnt_ops {
                /* call remote procedure */
-               enum clnt_stat  (*cl_call) (struct __rpc_client *,
-                                       u_long, xdrproc_t, caddr_t, xdrproc_t,
-                                       caddr_t, struct timeval);
+               enum clnt_stat  (*cl_call)(struct __rpc_client *,
+                                   rpcproc_t, xdrproc_t, void *, xdrproc_t,
+                                       void *, struct timeval);
                /* abort a call */
-               void            (*cl_abort) (struct __rpc_client *);
+               void            (*cl_abort)(struct __rpc_client *);
                /* get specific error code */
-               void            (*cl_geterr) (struct __rpc_client *,
+               void            (*cl_geterr)(struct __rpc_client *,
                                        struct rpc_err *);
                /* frees results */
-               bool_t          (*cl_freeres) (struct __rpc_client *,
-                                       xdrproc_t, caddr_t);
+               bool_t          (*cl_freeres)(struct __rpc_client *,
+                                       xdrproc_t, void *);
                /* destroy this structure */
-               void            (*cl_destroy) (struct __rpc_client *);
+               void            (*cl_destroy)(struct __rpc_client *);
                /* the ioctl() of rpc */
-               bool_t          (*cl_control) (struct __rpc_client *, u_int,
-                                       void *);
+               bool_t          (*cl_control)(struct __rpc_client *, u_int,
+                                   void *);
        } *cl_ops;
-       caddr_t                 cl_private;     /* private stuff */
+       void                    *cl_private;    /* private stuff */
+       char                    *cl_netid;      /* network token */
+       char                    *cl_tp;         /* device name */
 } CLIENT;
 
 
+/*
+ * Timers used for the pseudo-transport protocol when using datagrams
+ */
+struct rpc_timers {
+       u_short         rt_srtt;        /* smoothed round-trip time */
+       u_short         rt_deviate;     /* estimated deviation */
+       u_long          rt_rtxcur;      /* current (backed-off) rto */
+};
+
+/*
+ * Feedback values used for possible congestion and rate control
+ */
+#define FEEDBACK_REXMIT1       1       /* first retransmit */
+#define FEEDBACK_OK            2       /* no retransmits */
+
+/* Used to set version of portmapper used in broadcast */
+
+#define CLCR_SET_LOWVERS       3
+#define CLCR_GET_LOWVERS       4
+
+#define RPCSMALLMSGSIZE 400    /* a more reasonable packet size */
+
 /*
  * client side rpc interface ops
  *
@@ -152,19 +171,19 @@ typedef struct __rpc_client {
  * enum clnt_stat
  * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
  *     CLIENT *rh;
- *     u_long proc;
+ *     rpcproc_t proc;
  *     xdrproc_t xargs;
- *     caddr_t argsp;
+ *     void *argsp;
  *     xdrproc_t xres;
- *     caddr_t resp;
+ *     void *resp;
  *     struct timeval timeout;
  */
-#define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
-       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, (caddr_t)argsp, \
-               xres, (caddr_t)resp, secs))
-#define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
-       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, (caddr_t)argsp, \
-               xres, (caddr_t)resp, secs))
+#define        CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs) \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, \
+               argsp, xres, resp, secs))
+#define        clnt_call(rh, proc, xargs, argsp, xres, resp, secs) \
+       ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, \
+               argsp, xres, resp, secs))
 
 /*
  * void
@@ -188,7 +207,7 @@ typedef struct __rpc_client {
  * CLNT_FREERES(rh, xres, resp);
  *     CLIENT *rh;
  *     xdrproc_t xres;
- *     caddr_t resp;
+ *     void *resp;
  */
 #define        CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
 #define        clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
@@ -204,43 +223,32 @@ typedef struct __rpc_client {
 #define        clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
 
 /*
- * control operations that apply to udp, tcp and unix transports
- *
- * Note: options marked XXX are no-ops in this implementation of RPC.
- * The are present in TI-RPC but can't be implemented here since they
- * depend on the presence of STREAMS/TLI, which we don't have.
- *
+ * control operations that apply to both udp and tcp transports
  */
-#define CLSET_TIMEOUT       1   /* set timeout (timeval) */
-#define CLGET_TIMEOUT       2   /* get timeout (timeval) */
-#define CLGET_SERVER_ADDR   3   /* get server's address (sockaddr) */
-#define CLGET_FD            6  /* get connections file descriptor */
-#define CLGET_SVC_ADDR      7   /* get server's address (netbuf)         XXX */
-#define CLSET_FD_CLOSE      8   /* close fd while clnt_destroy */
-#define CLSET_FD_NCLOSE     9   /* Do not close fd while clnt_destroy */
-#define CLGET_XID           10 /* Get xid */
-#define CLSET_XID           11 /* Set xid */
-#define CLGET_VERS          12 /* Get version number */
-#define CLSET_VERS          13 /* Set version number */
-#define CLGET_PROG         14  /* Get program number */
-#define CLSET_PROG          15 /* Set program number */
-#define CLSET_SVC_ADDR      16 /* get server's address (netbuf)         XXX */
-#define CLSET_PUSH_TIMOD    17 /* push timod if not already present     XXX */
-#define CLSET_POP_TIMOD     18 /* pop timod                             XXX */
-
-/*
- * udp only control operations
+#define CLSET_TIMEOUT          1       /* set timeout (timeval) */
+#define CLGET_TIMEOUT          2       /* get timeout (timeval) */
+#define CLGET_SERVER_ADDR      3       /* get server's address (sockaddr) */
+#define CLGET_FD               6       /* get connections file descriptor */
+#define CLGET_SVC_ADDR         7       /* get server's address (netbuf) */
+#define CLSET_FD_CLOSE         8       /* close fd while clnt_destroy */
+#define CLSET_FD_NCLOSE                9       /* Do not close fd while clnt_destroy */
+#define CLGET_XID              10      /* Get xid */
+#define CLSET_XID              11      /* Set xid */
+#define CLGET_VERS             12      /* Get version number */
+#define CLSET_VERS             13      /* Set version number */
+#define CLGET_PROG             14      /* Get program number */
+#define CLSET_PROG             15      /* Set program number */
+#define CLSET_SVC_ADDR         16      /* get server's address (netbuf) */
+#define CLSET_PUSH_TIMOD       17      /* push timod if not already present */
+#define CLSET_POP_TIMOD                18      /* pop timod */
+/*
+ * Connectionless only control operations
  */
 #define CLSET_RETRY_TIMEOUT 4   /* set retry timeout (timeval) */
 #define CLGET_RETRY_TIMEOUT 5   /* get retry timeout (timeval) */
+#define CLSET_ASYNC            19
 #define CLSET_CONNECT          20      /* Use connect() for UDP. (int) */
 
-/*
- * Operations which GSSAPI needs. (Bletch.)
- */
-#define CLGET_LOCAL_ADDR    19 /* get local addr (sockaddr) */
-
-
 /*
  * void
  * CLNT_DESTROY(rh);
@@ -256,16 +264,16 @@ typedef struct __rpc_client {
  * and network administration.
  */
 
-#define RPCTEST_PROGRAM                ((u_long)1)
-#define RPCTEST_VERSION                ((u_long)1)
-#define RPCTEST_NULL_PROC      ((u_long)2)
-#define RPCTEST_NULL_BATCH_PROC        ((u_long)3)
+#define RPCTEST_PROGRAM                ((rpcprog_t)1)
+#define RPCTEST_VERSION                ((rpcvers_t)1)
+#define RPCTEST_NULL_PROC      ((rpcproc_t)2)
+#define RPCTEST_NULL_BATCH_PROC        ((rpcproc_t)3)
 
 /*
  * By convention, procedure 0 takes null arguments and returns them
  */
 
-#define NULLPROC ((u_long)0)
+#define NULLPROC ((rpcproc_t)0)
 
 /*
  * Below are the client handle creation routines for the various
@@ -274,108 +282,156 @@ typedef struct __rpc_client {
  */
 
 /*
- * Memory based rpc (for speed check and testing)
- * CLIENT *
- * clntraw_create(prog, vers)
- *     u_long prog;
- *     u_long vers;
+ * Generic client creation routine. Supported protocols are those that
+ * belong to the nettype namespace (/etc/netconfig).
  */
 __BEGIN_DECLS
-extern CLIENT *clntraw_create  (u_long, u_long);
-__END_DECLS
+extern CLIENT *clnt_create(const char *, const rpcprog_t, const rpcvers_t,
+                          const char *);
+/*
+ *
+ *     const char *hostname;                   -- hostname
+ *     const rpcprog_t prog;                   -- program number
+ *     const rpcvers_t vers;                   -- version number
+ *     const char *nettype;                    -- network type
+ */
 
+ /*
+ * Generic client creation routine. Just like clnt_create(), except
+ * it takes an additional timeout parameter.
+ */
+extern CLIENT * clnt_create_timed(const char *, const rpcprog_t,
+       const rpcvers_t, const char *, const struct timeval *);
+/*
+ *
+ *     const char *hostname;                   -- hostname
+ *     const rpcprog_t prog;                   -- program number
+ *     const rpcvers_t vers;                   -- version number
+ *     const char *nettype;                    -- network type
+ *     const struct timeval *tp;               -- timeout
+ */
 
 /*
- * Generic client creation routine. Supported protocols are "udp", "tcp"
- * and "unix".
- * CLIENT *
- * clnt_create(host, prog, vers, prot);
- *     const char *host;       -- hostname
- *     u_long prog;    -- program number
- *     u_long vers;    -- version number
- *     const char *prot;       -- protocol
+ * Generic client creation routine. Supported protocols are which belong
+ * to the nettype name space.
+ */
+extern CLIENT *clnt_create_vers(const char *, const rpcprog_t, rpcvers_t *,
+                               const rpcvers_t, const rpcvers_t,
+                               const char *);
+/*
+ *     const char *host;               -- hostname
+ *     const rpcprog_t prog;           -- program number
+ *     rpcvers_t *vers_out;            -- servers highest available version
+ *     const rpcvers_t vers_low;       -- low version number
+ *     const rpcvers_t vers_high;      -- high version number
+ *     const char *nettype;            -- network type
  */
-__BEGIN_DECLS
-CLIENT *       clnt_create(const char *, u_long, u_long, const char *);
-__END_DECLS
 
+/*
+ * Generic client creation routine. Supported protocols are which belong
+ * to the nettype name space.
+ */
+extern CLIENT * clnt_create_vers_timed(const char *, const rpcprog_t,
+       rpcvers_t *, const rpcvers_t, const rpcvers_t, const char *,
+       const struct timeval *);
+/*
+ *     const char *host;               -- hostname
+ *     const rpcprog_t prog;           -- program number
+ *     rpcvers_t *vers_out;            -- servers highest available version
+ *     const rpcvers_t vers_low;       -- low version number
+ *     const rpcvers_t vers_high;      -- high version number
+ *     const char *nettype;            -- network type
+ *     const struct timeval *tp        -- timeout
+ */
 
 /*
- * TCP based rpc
- * CLIENT *
- * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
- *     struct sockaddr_in *raddr;
- *     u_long prog;
- *     u_long version;
- *     int *sockp;
- *     u_int sendsz;
- *     u_int recvsz;
+ * Generic client creation routine. It takes a netconfig structure
+ * instead of nettype
+ */
+extern CLIENT *clnt_tp_create(const char *, const rpcprog_t,
+                             const rpcvers_t, const struct netconfig *);
+/*
+ *     const char *hostname;                   -- hostname
+ *     const rpcprog_t prog;                   -- program number
+ *     const rpcvers_t vers;                   -- version number
+ *     const struct netconfig *netconf;        -- network config structure
  */
-__BEGIN_DECLS
-extern CLIENT *clnttcp_create  (struct sockaddr_in *,
-                                    u_long,
-                                    u_long,
-                                    int *,
-                                    u_int,
-                                    u_int);
-__END_DECLS
 
+/*
+ * Generic client creation routine. Just like clnt_tp_create(), except
+ * it takes an additional timeout parameter.
+ */
+extern CLIENT * clnt_tp_create_timed(const char *, const rpcprog_t,
+       const rpcvers_t, const struct netconfig *, const struct timeval *);
+/*
+ *     const char *hostname;                   -- hostname
+ *     const rpcprog_t prog;                   -- program number
+ *     const rpcvers_t vers;                   -- version number
+ *     const struct netconfig *netconf;        -- network config structure
+ *     const struct timeval *tp                -- timeout
+ */
 
 /*
- * UDP based rpc.
- * CLIENT *
- * clntudp_create(raddr, program, version, wait, sockp)
- *     struct sockaddr_in *raddr;
- *     u_long program;
- *     u_long version;
- *     struct timeval wait;
- *     int *sockp;
- *
- * Same as above, but you specify max packet sizes.
- * CLIENT *
- * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
- *     struct sockaddr_in *raddr;
- *     u_long program;
- *     u_long version;
- *     struct timeval wait;
- *     int *sockp;
- *     u_int sendsz;
- *     u_int recvsz;
+ * Generic TLI create routine. Only provided for compatibility.
+ */
+
+extern CLIENT *clnt_tli_create(const int, const struct netconfig *,
+                              struct netbuf *, const rpcprog_t,
+                              const rpcvers_t, const u_int, const u_int);
+/*
+ *     const register int fd;          -- fd
+ *     const struct netconfig *nconf;  -- netconfig structure
+ *     struct netbuf *svcaddr;         -- servers address
+ *     const u_long prog;                      -- program number
+ *     const u_long vers;                      -- version number
+ *     const u_int sendsz;                     -- send size
+ *     const u_int recvsz;                     -- recv size
+ */
+
+/*
+ * Low level clnt create routine for connectionful transports, e.g. tcp.
+ */
+extern CLIENT *clnt_vc_create(const int, const struct netbuf *,
+                             const rpcprog_t, const rpcvers_t,
+                             u_int, u_int);
+/*
+ * Added for compatibility to old rpc 4.0. Obsoleted by clnt_vc_create().
+ */
+extern CLIENT *clntunix_create(struct sockaddr_un *,
+                              u_long, u_long, int *, u_int, u_int);
+/*
+ *     const int fd;                           -- open file descriptor
+ *     const struct netbuf *svcaddr;           -- servers address
+ *     const rpcprog_t prog;                   -- program number
+ *     const rpcvers_t vers;                   -- version number
+ *     const u_int sendsz;                     -- buffer recv size
+ *     const u_int recvsz;                     -- buffer send size
  */
-__BEGIN_DECLS
-extern CLIENT *clntudp_create  (struct sockaddr_in *,
-                                    u_long,
-                                    u_long,
-                                    struct timeval,
-                                    int *);
-extern CLIENT *clntudp_bufcreate (struct sockaddr_in *,
-                                    u_long,
-                                    u_long,
-                                    struct timeval,
-                                    int *,
-                                    u_int,
-                                    u_int);
-__END_DECLS
 
+/*
+ * Low level clnt create routine for connectionless transports, e.g. udp.
+ */
+extern CLIENT *clnt_dg_create(const int, const struct netbuf *,
+                             const rpcprog_t, const rpcvers_t,
+                             const u_int, const u_int);
+/*
+ *     const int fd;                           -- open file descriptor
+ *     const struct netbuf *svcaddr;           -- servers address
+ *     const rpcprog_t program;                -- program number
+ *     const rpcvers_t version;                -- version number
+ *     const u_int sendsz;                     -- buffer recv size
+ *     const u_int recvsz;                     -- buffer send size
+ */
 
 /*
- * AF_UNIX based rpc
+ * Memory based rpc (for speed check and testing)
  * CLIENT *
- * clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
- *     struct sockaddr_un *raddr;
+ * clnt_raw_create(prog, vers)
  *     u_long prog;
- *     u_long version;
- *     int *sockp;
- *     u_int sendsz;
- *     u_int recvsz;
+ *     u_long vers;
  */
-__BEGIN_DECLS
-extern CLIENT *clntunix_create (struct sockaddr_un *,
-                                    u_long,
-                                    u_long,
-                                    int *,
-                                    u_int,
-                                    u_int);
+extern CLIENT *clnt_raw_create(rpcprog_t, rpcvers_t);
+
 __END_DECLS
 
 
@@ -383,24 +439,24 @@ __END_DECLS
  * Print why creation failed
  */
 __BEGIN_DECLS
-extern void    clnt_pcreateerror(const char *);                        /* stderr */
-extern char    *clnt_spcreateerror(const char *);                      /* string */
+extern void clnt_pcreateerror(const char *);                   /* stderr */
+extern char *clnt_spcreateerror(const char *);                 /* string */
 __END_DECLS
 
 /*
  * Like clnt_perror(), but is more verbose in its output
  */
 __BEGIN_DECLS
-extern void clnt_perrno                (enum clnt_stat);               /* stderr */
-extern char *clnt_sperrno      (enum clnt_stat);               /* string */
+extern void clnt_perrno(enum clnt_stat);               /* stderr */
+extern char *clnt_sperrno(enum clnt_stat);             /* string */
 __END_DECLS
 
 /*
  * Print an English error message, given the client error code
  */
 __BEGIN_DECLS
-extern void     clnt_perror(CLIENT *, const char *);   /* stderr */
-extern char    *clnt_sperror(CLIENT *, const char *);  /* string */
+extern void clnt_perror(CLIENT *, const char *);               /* stderr */
+extern char *clnt_sperror(CLIENT *, const char *);             /* string */
 __END_DECLS
 
 
@@ -412,10 +468,90 @@ struct rpc_createerr {
        struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
 };
 
-extern struct rpc_createerr rpc_createerr;
+__BEGIN_DECLS
+extern struct rpc_createerr    *__rpc_createerr(void);
+__END_DECLS
+#define rpc_createerr          (*(__rpc_createerr()))
+
+/*
+ * The simplified interface:
+ * enum clnt_stat
+ * rpc_call(host, prognum, versnum, procnum, inproc, in, outproc, out, nettype)
+ *     const char *host;
+ *     const rpcprog_t prognum;
+ *     const rpcvers_t versnum;
+ *     const rpcproc_t procnum;
+ *     const xdrproc_t inproc, outproc;
+ *     const char *in;
+ *     char *out;
+ *     const char *nettype;
+ */
+__BEGIN_DECLS
+extern enum clnt_stat rpc_call(const char *, const rpcprog_t,
+                              const rpcvers_t, const rpcproc_t,
+                              const xdrproc_t, const char *,
+                              const xdrproc_t, char *, const char *);
+__END_DECLS
+
+/*
+ * RPC broadcast interface
+ * The call is broadcasted to all locally connected nets.
+ *
+ * extern enum clnt_stat
+ * rpc_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp,
+ *                     eachresult, nettype)
+ *     const rpcprog_t         prog;           -- program number
+ *     const rpcvers_t         vers;           -- version number
+ *     const rpcproc_t         proc;           -- procedure number
+ *     const xdrproc_t xargs;          -- xdr routine for args
+ *     caddr_t         argsp;          -- pointer to args
+ *     const xdrproc_t xresults;       -- xdr routine for results
+ *     caddr_t         resultsp;       -- pointer to results
+ *     const resultproc_t      eachresult;     -- call with each result
+ *     const char              *nettype;       -- Transport type
+ *
+ * For each valid response received, the procedure eachresult is called.
+ * Its form is:
+ *             done = eachresult(resp, raddr, nconf)
+ *                     bool_t done;
+ *                     caddr_t resp;
+ *                     struct netbuf *raddr;
+ *                     struct netconfig *nconf;
+ * where resp points to the results of the call and raddr is the
+ * address if the responder to the broadcast.  nconf is the transport
+ * on which the response was received.
+ *
+ * extern enum clnt_stat
+ * rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
+ *                     eachresult, inittime, waittime, nettype)
+ *     const rpcprog_t         prog;           -- program number
+ *     const rpcvers_t         vers;           -- version number
+ *     const rpcproc_t         proc;           -- procedure number
+ *     const xdrproc_t xargs;          -- xdr routine for args
+ *     caddr_t         argsp;          -- pointer to args
+ *     const xdrproc_t xresults;       -- xdr routine for results
+ *     caddr_t         resultsp;       -- pointer to results
+ *     const resultproc_t      eachresult;     -- call with each result
+ *     const int               inittime;       -- how long to wait initially
+ *     const int               waittime;       -- maximum time to wait
+ *     const char              *nettype;       -- Transport type
+ */
+
+typedef bool_t (*resultproc_t)(caddr_t, ...);
 
+__BEGIN_DECLS
+extern enum clnt_stat rpc_broadcast(const rpcprog_t, const rpcvers_t,
+                                   const rpcproc_t, const xdrproc_t,
+                                   caddr_t, const xdrproc_t, caddr_t,
+                                   const resultproc_t, const char *);
+extern enum clnt_stat rpc_broadcast_exp(const rpcprog_t, const rpcvers_t,
+                                       const rpcproc_t, const xdrproc_t,
+                                       caddr_t, const xdrproc_t, caddr_t,
+                                       const resultproc_t, const int,
+                                       const int, const char *);
+__END_DECLS
 
-#define UDPMSGSIZE     8800    /* rpc imposed limit on udp msg size */
-#define RPCSMALLMSGSIZE        400     /* a more reasonable packet size */
+/* For backward compatibility */
+#include <rpc/clnt_soc.h>
 
-#endif /* !_RPC_CLNT_H */
+#endif /* !_RPC_CLNT_H_ */
diff --git a/include/rpc/clnt_soc.h b/include/rpc/clnt_soc.h
new file mode 100644 (file)
index 0000000..1d28911
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ * $NetBSD: clnt_soc.h,v 1.1 2000/06/02 22:57:55 fvdl Exp $
+ * $FreeBSD: src/include/rpc/clnt_soc.h,v 1.2 2002/03/23 17:24:55 imp Exp $
+ * $DragonFly$
+ */
+/*
+ * Copyright (c) 1984 - 1991 by Sun Microsystems, Inc.
+ */
+
+/*
+ * clnt.h - Client side remote procedure call interface.
+ */
+
+#ifndef _RPC_CLNT_SOC_H
+#define _RPC_CLNT_SOC_H
+
+/* derived from clnt_soc.h 1.3 88/12/17 SMI     */
+
+/*
+ * All the following declarations are only for backward compatibility
+ * with TS-RPC.
+ */
+
+#include <sys/cdefs.h>
+
+#define UDPMSGSIZE      8800    /* rpc imposed limit on udp msg size */
+
+/*
+ * TCP based rpc
+ * CLIENT *
+ * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long prog;
+ *     u_long version;
+ *     register int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+__BEGIN_DECLS
+extern CLIENT *clnttcp_create(struct sockaddr_in *, u_long, u_long, int *,
+                             u_int, u_int);
+__END_DECLS
+
+/*
+ * Raw (memory) rpc.
+ */
+__BEGIN_DECLS
+extern CLIENT *clntraw_create(u_long, u_long);
+__END_DECLS
+
+
+/*
+ * UDP based rpc.
+ * CLIENT *
+ * clntudp_create(raddr, program, version, wait, sockp)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait;
+ *     int *sockp;
+ *
+ * Same as above, but you specify max packet sizes.
+ * CLIENT *
+ * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
+ *     struct sockaddr_in *raddr;
+ *     u_long program;
+ *     u_long version;
+ *     struct timeval wait;
+ *     int *sockp;
+ *     u_int sendsz;
+ *     u_int recvsz;
+ */
+__BEGIN_DECLS
+extern CLIENT *clntudp_create(struct sockaddr_in *, u_long, u_long,
+                             struct timeval, int *);
+extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, u_long, u_long,
+                                struct timeval, int *, u_int, u_int);
+__END_DECLS
+
+#endif /* _RPC_CLNT_SOC_H */
diff --git a/include/rpc/clnt_stat.h b/include/rpc/clnt_stat.h
new file mode 100644 (file)
index 0000000..7205ab3
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 1986 - 1991, 1994, 1996, 1997 by Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ * @(#)clnt_stat.h>-------1.2>----97/04/28 SMI
+ * $FreeBSD: src/include/rpc/clnt_stat.h,v 1.2 2001/03/20 08:20:50 alfred Exp $
+ * $DragonFly$
+ */
+
+/*
+ * clnt_stat.h - Client side remote procedure call enum
+ *
+ */
+
+#ifndef        _RPC_CLNT_STAT_H
+#define        _RPC_CLNT_STAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum clnt_stat {
+       RPC_SUCCESS = 0,                /* call succeeded */
+       /*
+        * local errors
+        */
+       RPC_CANTENCODEARGS = 1,         /* can't encode arguments */
+       RPC_CANTDECODERES = 2,          /* can't decode results */
+       RPC_CANTSEND = 3,               /* failure in sending call */
+       RPC_CANTRECV = 4,
+       /* failure in receiving result */
+       RPC_TIMEDOUT = 5,               /* call timed out */
+       RPC_INTR = 18,                  /* call interrupted */
+       RPC_UDERROR = 23,               /* recv got uderr indication */
+       /*
+        * remote errors
+        */
+       RPC_VERSMISMATCH = 6,           /* rpc versions not compatible */
+       RPC_AUTHERROR = 7,              /* authentication error */
+       RPC_PROGUNAVAIL = 8,            /* program not available */
+       RPC_PROGVERSMISMATCH = 9,       /* program version mismatched */
+       RPC_PROCUNAVAIL = 10,           /* procedure unavailable */
+       RPC_CANTDECODEARGS = 11,        /* decode arguments error */
+       RPC_SYSTEMERROR = 12,           /* generic "other problem" */
+
+       /*
+        * rpc_call & clnt_create errors
+        */
+       RPC_UNKNOWNHOST = 13,           /* unknown host name */
+       RPC_UNKNOWNPROTO = 17,          /* unknown protocol */
+       RPC_UNKNOWNADDR = 19,           /* Remote address unknown */
+       RPC_NOBROADCAST = 21,           /* Broadcasting not supported */
+
+       /*
+        * rpcbind errors
+        */
+       RPC_RPCBFAILURE = 14,           /* the pmapper failed in its call */
+#define        RPC_PMAPFAILURE RPC_RPCBFAILURE
+       RPC_PROGNOTREGISTERED = 15,     /* remote program is not registered */
+       RPC_N2AXLATEFAILURE = 22,
+       /* Name to address translation failed */
+       /*
+        * Misc error in the TLI library
+        */
+       RPC_TLIERROR = 20,
+       /*
+        * unspecified error
+        */
+       RPC_FAILED = 16,
+       /*
+        * asynchronous errors
+        */
+       RPC_INPROGRESS = 24,
+       RPC_STALERACHANDLE = 25,
+       RPC_CANTCONNECT = 26,           /* couldn't make connection (cots) */
+       RPC_XPRTFAILED = 27,            /* received discon from remote (cots) */
+       RPC_CANTCREATESTREAM = 28       /* can't push rpc module (cots) */
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_RPC_CLNT_STAT_H */
index 7cdb11d..e566bae 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * @(#)des_crypt.h     2.1 88/08/11 4.0 RPCSRC;        from 1.4 88/02/08 (C) 1986 SMI
- * $FreeBSD: src/include/rpc/des_crypt.h,v 1.2 1999/12/29 05:00:42 peter Exp $
+ * $FreeBSD: src/include/rpc/des_crypt.h,v 1.4 2002/03/23 17:24:55 imp Exp $
  * $DragonFly: src/include/rpc/des_crypt.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  *
  * des_crypt.h, des library routine interface
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  */
+/*
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
+ */
+
+/*
+ * des_crypt.h, des library routine interface
+ */
+
+#ifndef _DES_DES_CRYPT_H
+#define _DES_DES_CRYPT_H
 
 #include <sys/cdefs.h>
 #include <rpc/rpc.h>
  * Cipher Block Chaining mode
  */
 __BEGIN_DECLS
-#ifdef __STDC__
-int cbc_crypt ( char *, char *, unsigned int, unsigned int, char *);
-#else
-cbc_crypt(/* key, buf, len, mode, ivec */); /*
-       char *key;      
-       char *buf;
-       unsigned len;
-       unsigned mode;
-       char *ivec;     
-*/ 
-#endif
+int cbc_crypt( char *, char *, unsigned int, unsigned int, char *);
+__END_DECLS
 
 /*
  * Electronic Code Book mode
  */
-#ifdef __STDC__
-int ecb_crypt ( char *, char *, unsigned int, unsigned int );
-#else
-ecb_crypt(/* key, buf, len, mode */); /*
-       char *key;      
-       char *buf;
-       unsigned len;
-       unsigned mode;
-*/
-#endif
+__BEGIN_DECLS
+int ecb_crypt( char *, char *, unsigned int, unsigned int );
 __END_DECLS
 
-#ifndef _KERNEL
 /* 
  * Set des parity for a key.
  * DES parity is odd and in the low bit of each byte
  */
 __BEGIN_DECLS
-#ifdef __STDC__
-void des_setparity ( char *);
-#else
-void
-des_setparity(/* key */); /*
-       char *key;      
-*/
-#endif
+void des_setparity( char *);
 __END_DECLS
-#endif
+
+#endif  /* _DES_DES_CRYPT_H */
similarity index 63%
copy from include/rpc/svc_auth.h
copy to include/rpc/nettype.h
index 409574d..1a1567f 100644 (file)
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- *     from: @(#)svc_auth.h 1.6 86/07/16 SMI
- *     from: @(#)svc_auth.h    2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/svc_auth.h,v 1.12 1999/08/27 23:45:05 peter Exp $
- * $DragonFly: src/include/rpc/svc_auth.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
+ * $NetBSD: nettype.h,v 1.2 2000/07/06 03:17:19 christos Exp $
+ * $FreeBSD: src/include/rpc/nettype.h,v 1.2 2002/03/23 17:24:55 imp Exp $
+ * $DragonFly$
  */
 
 /*
- * svc_auth.h, Service side of rpc authentication.
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
+ */
+
+/*
+ * nettype.h, Nettype definitions.
+ * All for the topmost layer of rpc
  *
- * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
-#ifndef _RPC_SVCAUTH_H
-#define _RPC_SVCAUTH_H
+#ifndef        _RPC_NETTYPE_H
+#define        _RPC_NETTYPE_H
 
-struct rpc_msg;
-struct svc_req;
+#include <netconfig.h>
+
+#define        _RPC_NONE       0
+#define        _RPC_NETPATH    1
+#define        _RPC_VISIBLE    2
+#define        _RPC_CIRCUIT_V  3
+#define        _RPC_DATAGRAM_V 4
+#define        _RPC_CIRCUIT_N  5
+#define        _RPC_DATAGRAM_N 6
+#define        _RPC_TCP        7
+#define        _RPC_UDP        8
 
-/*
- * Server side authenticator
- */
 __BEGIN_DECLS
-extern enum auth_stat _authenticate (struct svc_req *, struct rpc_msg *);
-extern int svc_auth_reg (int, enum auth_stat (*)(struct svc_req *,
-                                                    struct rpc_msg *));
-extern enum auth_stat _svcauth_des (struct svc_req *, struct rpc_msg *);
+void                   *__rpc_setconf(const char *);
+void                    __rpc_endconf(void *);
+struct netconfig       *__rpc_getconf(void *);
+struct netconfig       *__rpc_getconfip(const char *);
 __END_DECLS
 
-#endif /* !_RPC_SVCAUTH_H */
+#endif /* !_RPC_NETTYPE_H */
index 79fcd53..e92f6c4 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)pmap_clnt.h 1.11 88/02/08 SMI
  *     from: @(#)pmap_clnt.h   2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/pmap_clnt.h,v 1.11 1999/08/27 23:45:04 peter Exp $
+ * $NetBSD: pmap_clnt.h,v 1.9 2000/06/02 22:57:55 fvdl Exp $
+ * $FreeBSD: src/include/rpc/pmap_clnt.h,v 1.14 2002/04/28 15:18:45 des Exp $
  * $DragonFly: src/include/rpc/pmap_clnt.h,v 1.7 2005/11/13 12:27:04 swildner Exp $
  */
 
@@ -62,8 +63,8 @@
  *             address if the responder to the broadcast.
  */
 
-#ifndef _RPC_PMAPCLNT_H
-#define _RPC_PMAPCLNT_H
+#ifndef _RPC_PMAP_CLNT_H_
+#define _RPC_PMAP_CLNT_H_
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
@@ -73,11 +74,10 @@ struct pmaplist     *pmap_getmaps(struct sockaddr_in *);
 enum clnt_stat  pmap_rmtcall(struct sockaddr_in *, u_long, u_long, u_long,
                              xdrproc_t, caddr_t, xdrproc_t, caddr_t,
                              struct timeval, u_long *);
-enum clnt_stat  clnt_broadcast(u_long, u_long, u_long, xdrproc_t, char *,
-                               xdrproc_t, char *, bool_t (*) (caddr_t,
-                               struct sockaddr_in *));
+enum clnt_stat  clnt_broadcast(u_long, u_long, u_long, xdrproc_t, void *,
+                               xdrproc_t, void *, resultproc_t);
 u_short                 pmap_getport(struct sockaddr_in *, u_long, u_long, u_int);
 void            pmap_getport_timeout(struct timeval *, struct timeval *);
 __END_DECLS
 
-#endif /* !_RPC_PMAPCLNT_H */
+#endif /* !_RPC_PMAP_CLNT_H_ */
index c9ba8c7..288de2f 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)pmap_prot.h 1.14 88/02/08 SMI
  *     from: @(#)pmap_prot.h   2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/pmap_prot.h,v 1.10 1999/08/27 23:45:04 peter Exp $
+ * $NetBSD: pmap_prot.h,v 1.8 2000/06/02 22:57:55 fvdl Exp $
+ * $FreeBSD: src/include/rpc/pmap_prot.h,v 1.12 2002/03/23 17:24:55 imp Exp $
  * $DragonFly: src/include/rpc/pmap_prot.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  */
 
@@ -69,8 +70,8 @@
  * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
  */
 
-#ifndef _RPC_PMAPPROT_H
-#define _RPC_PMAPPROT_H
+#ifndef _RPC_PMAP_PROT_H_
+#define _RPC_PMAP_PROT_H_
 #include <sys/cdefs.h>
 
 #define PMAPPORT               ((u_short)111)
@@ -98,8 +99,9 @@ struct pmaplist {
 };
 
 __BEGIN_DECLS
-extern bool_t xdr_pmap         (XDR *, struct pmap *);
-extern bool_t xdr_pmaplist     (XDR *, struct pmaplist **);
+extern bool_t  xdr_pmap(XDR *, struct pmap *);
+extern bool_t  xdr_pmaplist(XDR *, struct pmaplist **);
+extern bool_t  xdr_pmaplist_ptr(XDR *, struct pmaplist *);
 __END_DECLS
 
-#endif /* !_RPC_PMAPPROT_H */
+#endif /* !_RPC_PMAP_PROT_H_ */
index b027f40..e6f12c9 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)pmap_rmt.h 1.2 88/02/08 SMI
  *     from: @(#)pmap_rmt.h    2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/pmap_rmt.h,v 1.10 1999/08/27 23:45:05 peter Exp $
+ * $NetBSD: pmap_rmt.h,v 1.7 1998/02/11 23:01:23 lukem Exp $
+ * $FreeBSD: src/include/rpc/pmap_rmt.h,v 1.12 2002/03/23 17:24:55 imp Exp $
  * $DragonFly: src/include/rpc/pmap_rmt.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  */
 
@@ -39,8 +40,8 @@
  * Copyright (C) 1986, Sun Microsystems, Inc.
  */
 
-#ifndef _RPC_PMAPRMT_H
-#define _RPC_PMAPRMT_H
+#ifndef _RPC_PMAP_RMT_H_
+#define _RPC_PMAP_RMT_H_
 #include <sys/cdefs.h>
 
 struct rmtcallargs {
@@ -57,8 +58,8 @@ struct rmtcallres {
 };
 
 __BEGIN_DECLS
-extern bool_t xdr_rmtcall_args (XDR *, struct rmtcallargs *);
-extern bool_t xdr_rmtcallres   (XDR *, struct rmtcallres *);
+bool_t xdr_rmtcall_args(XDR *, struct rmtcallargs *);
+bool_t xdr_rmtcallres(XDR *, struct rmtcallres *);
 __END_DECLS
 
-#endif /* !_RPC_PMAPRMT_H */
+#endif /* !_RPC_PMAP_RMT_H_ */
similarity index 70%
copy from lib/libc/rpc/rpc_commondata.c
copy to include/rpc/raw.h
index 0622765..d0e980c 100644 (file)
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- * @(#)rpc_commondata.c        2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/lib/libc/rpc/rpc_commondata.c,v 1.7 1999/08/28 00:00:45 peter Exp $
- * $DragonFly: src/lib/libc/rpc/rpc_commondata.c,v 1.2 2003/06/17 04:26:45 dillon Exp $
+ *     from: @(#)raw.h>1.11>---94/04/25 SMI
+ *     from: @(#)raw.h 1.2 88/10/25 SMI
+ * $NetBSD: raw.h,v 1.1 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/raw.h,v 1.1 2001/03/19 12:49:47 alfred Exp $
+ * $DragonFly$
+
+ */
+/*
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
  */
 
-#include <rpc/rpc.h>
+#ifndef _RPC_RAW_H_
+#define        _RPC_RAW_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
- * This file should only contain common data (global data) that is exported
- * by public interfaces
+ * raw.h
+ *
+ * Raw interface
+ * The common memory area over which they will communicate
  */
-struct opaque_auth _null_auth;
-fd_set svc_fdset;
-int svc_maxfd = -1;
-struct rpc_createerr rpc_createerr;
+extern char *__rpc_rawcombuf;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RPC_RAW_H_ */
index 999f06d..66efa3c 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)rpc.h 1.9 88/02/08 SMI
  *     from: @(#)rpc.h 2.4 89/07/11 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/rpc.h,v 1.12 2000/01/26 09:02:40 shin Exp $
+ * $NetBSD: rpc.h,v 1.13 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/rpc.h,v 1.17 2002/03/23 17:24:55 imp Exp $
  * $DragonFly: src/include/rpc/rpc.h,v 1.6 2007/12/04 20:59:15 swildner Exp $
  */
 
@@ -42,6 +43,7 @@
 #define _RPC_RPC_H
 
 #include <rpc/types.h>         /* some typedefs */
+#include <sys/socket.h>
 #include <netinet/in.h>
 
 /* external data representation interfaces */
 #include <rpc/svc.h>           /* service manager and multiplexer */
 #include <rpc/svc_auth.h>      /* service side authenticator */
 
-/*
- * COMMENT OUT THE NEXT INCLUDE (or add to the #ifndef) IF RUNNING ON
- * A VERSION OF UNIX THAT USES SUN'S NFS SOURCE.  These systems will
- * already have the structures defined by <rpc/netdb.h> included in <netdb.h>.
- */
-/* routines for parsing /etc/rpc */
+/* Portmapper client, server, and protocol headers */
+#include <rpc/pmap_clnt.h>
+#include <rpc/pmap_prot.h>
 
-struct rpcent {
-      char    *r_name;        /* name of server for this rpc program */
-      char    **r_aliases;    /* alias list */
-      int     r_number;       /* rpc program number */
-};
+#ifndef _KERNEL
+#include <rpc/rpcb_clnt.h>     /* rpcbind interface functions */
+#endif
+
+#include <rpc/rpcent.h>
 
 __BEGIN_DECLS
-int             callrpc(char *, int, int, int, xdrproc_t, char *, xdrproc_t,
-                        char *);
-int             registerrpc(int, int, int, char *(*)(void), xdrproc_t,
-                            xdrproc_t);
+int    get_myaddress(struct sockaddr_in *);
+int    bindresvport(int, struct sockaddr_in *);
+int    registerrpc(int, int, int, char *(*)(char [UDPMSGSIZE]), xdrproc_t,
+                   xdrproc_t);
+int    callrpc(const char *, int, int, int, xdrproc_t, void *, xdrproc_t,
+               void *);
+int    getrpcport(char *, int, int, int);
+
+char           *taddr2uaddr(const struct netconfig *, const struct netbuf *);
+struct netbuf  *uaddr2taddr(const struct netconfig *, const char *);
 
-struct rpcent  *getrpcbyname(char *);
-struct rpcent  *getrpcbynumber(int);
-struct rpcent  *getrpcent(void);
-int             getrpcport(char *, int, int, int);
-void            setrpcent(int);
-void            endrpcent(void);
+struct sockaddr;
+int    bindresvport_sa(int, struct sockaddr *);
+__END_DECLS
 
-int             bindresvport(int, struct sockaddr_in *);
-int             bindresvport_sa(int, struct sockaddr *);
-int             get_myaddress(struct sockaddr_in *);
+/*
+ * The following are not exported interfaces, they are for internal library
+ * and rpcbind use only. Do not use, they may change without notice.
+ */
+__BEGIN_DECLS
+int    __rpc_nconf2fd(const struct netconfig *);
+int    __rpc_nconf2sockinfo(const struct netconfig *, struct __rpc_sockinfo *);
+int    __rpc_fd2sockinfo(int, struct __rpc_sockinfo *);
+u_int  __rpc_get_t_size(int, int, int);
 __END_DECLS
 
 #endif /* !_RPC_RPC_H */
index 2cf5995..132e8e4 100644 (file)
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
+ *
+ *     from: @(#)rpc_com.h     1.11    93/07/05 SMI
+ * $NetBSD: rpc_com.h,v 1.3 2000/12/10 04:10:08 christos Exp $
+ * $FreeBSD: src/include/rpc/rpc_com.h,v 1.6 2003/01/16 07:13:51 mbr Exp $
+ * $DragonFly$
  */
 /*
  * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
  *
  */
 
-#ifndef _RPC_RPCCOM_H
-#define        _RPC_RPCCOM_H
+#ifndef _RPC_RPC_COM_H_
+#define        _RPC_RPC_COM_H_
 
-/* From: #pragma ident "@(#)rpc_com.h  1.11    93/07/05 SMI" */
+#include <sys/cdefs.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
 
-/*
- * File descriptor to be used on xxx_create calls to get default descriptor
- */
-#define        RPC_ANYSOCK     -1
-#define        RPC_ANYFD       RPC_ANYSOCK
 /*
  * The max size of the transport, if the size cannot be determined
  * by other means.
@@ -57,22 +54,31 @@ extern "C" {
 #define        RPC_MAXDATASIZE 9000
 #define        RPC_MAXADDRSIZE 1024
 
-#if defined(__STDC__) || defined(__cplusplus)
-extern u_int __rpc_get_t_size (int, long);
-extern u_int __rpc_get_a_size (long);
-extern int __rpc_dtbsize (void);
-extern int _rpc_dtablesize (void);
-extern  int  _rpc_get_default_domain(char **);
-#else
-extern u_int __rpc_get_t_size ();
-extern u_int __rpc_get_a_size ();
-extern int __rpc_dtbsize ();
-extern int _rpc_dtablesize ();
-extern  int _rpc_get_default_domain();
-#endif
+#define __RPC_GETXID(now) ((u_int32_t)getpid() ^ (u_int32_t)(now)->tv_sec ^ \
+    (u_int32_t)(now)->tv_usec)
+
+__BEGIN_DECLS
+extern u_int __rpc_get_a_size(int);
+extern int __rpc_dtbsize(void);
+extern int _rpc_dtablesize(void);
+extern struct netconfig * __rpcgettp(int);
+extern  int  __rpc_get_default_domain(char **);
+
+char *__rpc_taddr2uaddr_af(int, const struct netbuf *);
+struct netbuf *__rpc_uaddr2taddr_af(int, const char *);
+int __rpc_fixup_addr(struct netbuf *, const struct netbuf *);
+int __rpc_sockinfo2netid(struct __rpc_sockinfo *, const char **);
+int __rpc_seman2socktype(int);
+int __rpc_socktype2seman(int);
+void *rpc_nullproc(CLIENT *);
+int __rpc_sockisbound(int);
+
+struct netbuf *__rpcb_findaddr(rpcprog_t, rpcvers_t, const struct netconfig *,
+                              const char *, CLIENT **);
+bool_t rpc_control(int,void *);
+
+char *_get_next_token(char *, int);
 
-#ifdef __cplusplus
-}
-#endif
+__END_DECLS
 
-#endif /* _RPC_RPCCOM_H */
+#endif /* _RPC_RPC_COM_H_ */
index cc1c38f..183708b 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)rpc_msg.h 1.7 86/07/16 SMI
  *     from: @(#)rpc_msg.h     2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/rpc_msg.h,v 1.12 1999/08/27 23:45:05 peter Exp $
+ * $NetBSD: rpc_msg.h,v 1.11 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/rpc_msg.h,v 1.15 2003/01/01 18:48:42 schweikh Exp $
  * $DragonFly: src/include/rpc/rpc_msg.h,v 1.4 2007/12/04 20:59:15 swildner Exp $
  */
 
  * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
-#ifndef _RPC_RPCMSG_H
-#define _RPC_RPCMSG_H
+#ifndef _RPC_RPC_MSG_H_
+#define _RPC_RPC_MSG_H_
 
-#define RPC_MSG_VERSION                ((u_long) 2)
+#define RPC_MSG_VERSION                ((u_int32_t) 2)
 #define RPC_SERVICE_PORT       ((u_short) 2048)
 
 /*
@@ -89,8 +90,8 @@ struct accepted_reply {
        enum accept_stat        ar_stat;
        union {
                struct {
-                       u_int32_t       low;
-                       u_int32_t       high;
+                       rpcvers_t low;
+                       rpcvers_t high;
                } AR_versions;
                struct {
                        caddr_t where;
@@ -109,8 +110,8 @@ struct rejected_reply {
        enum reject_stat rj_stat;
        union {
                struct {
-                       u_int32_t low;
-                       u_int32_t high;
+                       rpcvers_t low;
+                       rpcvers_t high;
                } RJ_versions;
                enum auth_stat RJ_why;  /* why authentication did not work */
        } ru;
@@ -135,10 +136,10 @@ struct reply_body {
  * Body of an rpc request call.
  */
 struct call_body {
-       u_int32_t cb_rpcvers;   /* must be equal to two */
-       u_int32_t cb_prog;
-       u_int32_t cb_vers;
-       u_int32_t cb_proc;
+       rpcvers_t cb_rpcvers;   /* must be equal to two */
+       rpcprog_t cb_prog;
+       rpcvers_t cb_vers;
+       rpcproc_t cb_proc;
        struct opaque_auth cb_cred;
        struct opaque_auth cb_verf; /* protocol specific - provided by client */
 };
@@ -166,7 +167,7 @@ __BEGIN_DECLS
  *     XDR *xdrs;
  *     struct rpc_msg *cmsg;
  */
-extern bool_t  xdr_callmsg     (XDR *, struct rpc_msg *);
+extern bool_t  xdr_callmsg(XDR *, struct rpc_msg *);
 
 /*
  * XDR routine to pre-serialize the static part of a rpc message.
@@ -174,7 +175,7 @@ extern bool_t       xdr_callmsg     (XDR *, struct rpc_msg *);
  *     XDR *xdrs;
  *     struct rpc_msg *cmsg;
  */
-extern bool_t  xdr_callhdr     (XDR *, struct rpc_msg *);
+extern bool_t  xdr_callhdr(XDR *, struct rpc_msg *);
 
 /*
  * XDR routine to handle a rpc reply.
@@ -182,7 +183,7 @@ extern bool_t       xdr_callhdr     (XDR *, struct rpc_msg *);
  *     XDR *xdrs;
  *     struct rpc_msg *rmsg;
  */
-extern bool_t  xdr_replymsg    (XDR *, struct rpc_msg *);
+extern bool_t  xdr_replymsg(XDR *, struct rpc_msg *);
 
 /*
  * XDR routine to handle an accepted rpc reply.
@@ -206,8 +207,7 @@ extern bool_t       xdr_rejected_reply(XDR *, struct rejected_reply *);
  *     struct rpc_msg *msg;
  *     struct rpc_err *error;
  */
-struct rpc_err;
-extern void    _seterr_reply   (struct rpc_msg *, struct rpc_err *);
+extern void    _seterr_reply(struct rpc_msg *, struct rpc_err *);
 __END_DECLS
 
-#endif /* !_RPC_RPCMSG_H */
+#endif /* !_RPC_RPC_MSG_H_ */
diff --git a/include/rpc/rpcb_clnt.h b/include/rpc/rpcb_clnt.h
new file mode 100644 (file)
index 0000000..c6ec587
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)rpcb_clnt.h   1.13    94/04/25 SMI
+ *     from: rpcb_clnt.h 1.3 88/12/05 SMI
+ * $NetBSD: rpcb_clnt.h,v 1.1 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/rpcb_clnt.h,v 1.2 2002/03/23 17:24:55 imp Exp $
+ * $DragonFly$
+ */
+/*
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
+ */
+
+/*
+ * rpcb_clnt.h
+ * Supplies C routines to get to rpcbid services.
+ *
+ */
+
+/*
+ * Usage:
+ *     success = rpcb_set(program, version, nconf, address);
+ *     success = rpcb_unset(program, version, nconf);
+ *     success = rpcb_getaddr(program, version, nconf, host);
+ *     head = rpcb_getmaps(nconf, host);
+ *     clnt_stat = rpcb_rmtcall(nconf, host, program, version, procedure,
+ *             xdrargs, argsp, xdrres, resp, tout, addr_ptr)
+ *     success = rpcb_gettime(host, timep)
+ *     uaddr = rpcb_taddr2uaddr(nconf, taddr);
+ *     taddr = rpcb_uaddr2uaddr(nconf, uaddr);
+ */
+
+#ifndef _RPC_RPCB_CLNT_H_
+#define        _RPC_RPCB_CLNT_H_
+
+
+#include <rpc/types.h>
+#include <rpc/rpcb_prot.h>
+
+__BEGIN_DECLS
+extern bool_t rpcb_set(const rpcprog_t, const rpcvers_t,
+                      const struct netconfig  *, const struct netbuf *);
+extern bool_t rpcb_unset(const rpcprog_t, const rpcvers_t,
+                        const struct netconfig *);
+extern rpcblist        *rpcb_getmaps(const struct netconfig *, const char *);
+extern enum clnt_stat rpcb_rmtcall(const struct netconfig *,
+                                  const char *, const rpcprog_t,
+                                  const rpcvers_t, const rpcproc_t,
+                                  const xdrproc_t, const caddr_t,
+                                  const xdrproc_t, const caddr_t,
+                                  const struct timeval,
+                                  const struct netbuf *);
+extern bool_t rpcb_getaddr(const rpcprog_t, const rpcvers_t,
+                          const struct netconfig *, struct netbuf *,
+                          const  char *);
+extern bool_t rpcb_gettime(const char *, time_t *);
+extern char *rpcb_taddr2uaddr(struct netconfig *, struct netbuf *);
+extern struct netbuf *rpcb_uaddr2taddr(struct netconfig *, char *);
+__END_DECLS
+
+#endif /* !_RPC_RPCB_CLNT_H_ */
diff --git a/include/rpc/rpcb_prot.x b/include/rpc/rpcb_prot.x
new file mode 100644 (file)
index 0000000..db0b630
--- /dev/null
@@ -0,0 +1,555 @@
+%/*
+% * $FreeBSD: src/include/rpc/rpcb_prot.x,v 1.3 2002/03/13 10:29:06 obrien Exp $
+% * $DragonFly$
+% *
+% * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+% * unrestricted use provided that this legend is included on all tape
+% * media and as a part of the software program in whole or part.  Users
+% * may copy or modify Sun RPC without charge, but are not authorized
+% * to license or distribute it to anyone else except as part of a product or
+% * program developed by the user.
+% *
+% * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+% * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+% * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+% *
+% * Sun RPC is provided with no support and without any obligation on the
+% * part of Sun Microsystems, Inc. to assist in its use, correction,
+% * modification or enhancement.
+% *
+% * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+% * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+% * OR ANY PART THEREOF.
+% *
+% * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+% * or profits or other special, indirect and consequential damages, even if
+% * Sun has been advised of the possibility of such damages.
+% *
+% * Sun Microsystems, Inc.
+% * 2550 Garcia Avenue
+% * Mountain View, California  94043
+% */
+%/*
+% * Copyright (c) 1988 by Sun Microsystems, Inc.
+% */
+
+%/* from rpcb_prot.x */
+
+#ifdef RPC_HDR
+%
+%/* #pragma ident      "@(#)rpcb_prot.x        1.5     94/04/29 SMI" */
+%
+%#ifndef _KERNEL
+%
+#endif
+
+/*
+ * rpcb_prot.x
+ * rpcbind protocol, versions 3 and 4, in RPC Language
+ */
+%
+%/*
+% * The following procedures are supported by the protocol in version 3:
+% *
+% * RPCBPROC_NULL() returns ()
+% *    takes nothing, returns nothing
+% *
+% * RPCBPROC_SET(rpcb) returns (bool_t)
+% *    TRUE is success, FALSE is failure.  Registers the tuple
+% *    [prog, vers, address, owner, netid].
+% *    Finds out owner and netid information on its own.
+% *
+% * RPCBPROC_UNSET(rpcb) returns (bool_t)
+% *    TRUE is success, FALSE is failure.  Un-registers tuple
+% *    [prog, vers, netid].  addresses is ignored.
+% *    If netid is NULL, unregister all.
+% *
+% * RPCBPROC_GETADDR(rpcb) returns (string).
+% *    0 is failure.  Otherwise returns the universal address where the
+% *    triple [prog, vers, netid] is registered.  Ignore address and owner.
+% *
+% * RPCBPROC_DUMP() RETURNS (rpcblist_ptr)
+% *    used to dump the entire rpcbind maps
+% *
+% * RPCBPROC_CALLIT(rpcb_rmtcallargs)
+% *    RETURNS (rpcb_rmtcallres);
+% *    Calls the procedure on the remote machine.  If it is not registered,
+% *    this procedure is quiet; i.e. it does not return error information!!!
+% *    This routine only passes null authentication parameters.
+% *    It has no interface to xdr routines for RPCBPROC_CALLIT.
+% *
+% * RPCBPROC_GETTIME() returns (int).
+% *    Gets the remote machines time
+% *
+% * RPCBPROC_UADDR2TADDR(strint) RETURNS (struct netbuf)
+% *    Returns the netbuf address from universal address.
+% *
+% * RPCBPROC_TADDR2UADDR(struct netbuf) RETURNS (string)
+% *    Returns the universal address from netbuf address.
+% *
+% * END OF RPCBIND VERSION 3 PROCEDURES
+% */
+%/*
+% * Except for RPCBPROC_CALLIT, the procedures above are carried over to
+% * rpcbind version 4.  Those below are added or modified for version 4.
+% * NOTE: RPCBPROC_BCAST HAS THE SAME FUNCTIONALITY AND PROCEDURE NUMBER
+% * AS RPCBPROC_CALLIT.
+% *
+% * RPCBPROC_BCAST(rpcb_rmtcallargs)
+% *    RETURNS (rpcb_rmtcallres);
+% *    Calls the procedure on the remote machine.  If it is not registered,
+% *    this procedure IS quiet; i.e. it DOES NOT return error information!!!
+% *    This routine should be used for broadcasting and nothing else.
+% *
+% * RPCBPROC_GETVERSADDR(rpcb) returns (string).
+% *    0 is failure.  Otherwise returns the universal address where the
+% *    triple [prog, vers, netid] is registered.  Ignore address and owner.
+% *    Same as RPCBPROC_GETADDR except that if the given version number
+% *    is not available, the address is not returned.
+% *
+% * RPCBPROC_INDIRECT(rpcb_rmtcallargs)
+% *    RETURNS (rpcb_rmtcallres);
+% *    Calls the procedure on the remote machine.  If it is not registered,
+% *    this procedure is NOT quiet; i.e. it DOES return error information!!!
+% *    as any normal application would expect.
+% *
+% * RPCBPROC_GETADDRLIST(rpcb) returns (rpcb_entry_list_ptr).
+% *    Same as RPCBPROC_GETADDR except that it returns a list of all the
+% *    addresses registered for the combination (prog, vers) (for all
+% *    transports).
+% *
+% * RPCBPROC_GETSTAT(void) returns (rpcb_stat_byvers)
+% *    Returns the statistics about the kind of requests received by rpcbind.
+% */
+%
+%/*
+% * A mapping of (program, version, network ID) to address
+% */
+struct rpcb {
+       rpcprog_t r_prog;               /* program number */
+       rpcvers_t r_vers;               /* version number */
+       string r_netid<>;               /* network id */
+       string r_addr<>;                /* universal address */
+       string r_owner<>;               /* owner of this service */
+};
+#ifdef RPC_HDR
+%
+%typedef rpcb RPCB;
+%
+#endif
+%
+%/*
+% * A list of mappings
+% *
+% * Below are two definitions for the rpcblist structure.  This is done because
+% * xdr_rpcblist() is specified to take a struct rpcblist **, rather than a
+% * struct rpcblist * that rpcgen would produce.  One version of the rpcblist
+% * structure (actually called rp__list) is used with rpcgen, and the other is
+% * defined only in the header file for compatibility with the specified
+% * interface.
+% */
+
+struct rp__list {
+       rpcb rpcb_map;
+       struct rp__list *rpcb_next;
+};
+
+typedef rp__list *rpcblist_ptr;                /* results of RPCBPROC_DUMP */
+
+#ifdef RPC_HDR
+%
+%typedef struct rp__list rpcblist;
+%typedef struct rp__list RPCBLIST;
+%
+%#ifndef __cplusplus
+%struct rpcblist {
+%      RPCB rpcb_map;
+%      struct rpcblist *rpcb_next;
+%};
+%#endif
+%
+%#ifdef __cplusplus
+%extern "C" {
+%#endif
+%extern  bool_t xdr_rpcblist(XDR *, rpcblist**);
+%#ifdef        __cplusplus
+%}
+%#endif
+%
+#endif
+
+%
+%/*
+% * Arguments of remote calls
+% */
+struct rpcb_rmtcallargs {
+       rpcprog_t prog;                 /* program number */
+       rpcvers_t vers;                 /* version number */
+       rpcproc_t proc;                 /* procedure number */
+       opaque args<>;                  /* argument */
+};
+#ifdef RPC_HDR
+%
+%/*
+% * Client-side only representation of rpcb_rmtcallargs structure.
+% *
+% * The routine that XDRs the rpcb_rmtcallargs structure must deal with the
+% * opaque arguments in the "args" structure.  xdr_rpcb_rmtcallargs() needs to
+% * be passed the XDR routine that knows the args' structure.  This routine
+% * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
+% * the application being called already knows the args structure.  So we use a
+% * different "XDR" structure on the client side, r_rpcb_rmtcallargs, which
+% * includes the args' XDR routine.
+% */
+%struct r_rpcb_rmtcallargs {
+%      rpcprog_t prog;
+%      rpcvers_t vers;
+%      rpcproc_t proc;
+%      struct {
+%              u_int args_len;
+%              char *args_val;
+%      } args;
+%      xdrproc_t       xdr_args;       /* encodes args */
+%};
+%
+#endif /* def RPC_HDR */
+%
+%/*
+% * Results of the remote call
+% */
+struct rpcb_rmtcallres {
+       string addr<>;                  /* remote universal address */
+       opaque results<>;               /* result */
+};
+#ifdef RPC_HDR
+%
+%/*
+% * Client-side only representation of rpcb_rmtcallres structure.
+% */
+%struct r_rpcb_rmtcallres {
+%      char *addr;
+%      struct {
+%              u_int32_t results_len;
+%              char *results_val;
+%      } results;
+%      xdrproc_t       xdr_res;        /* decodes results */
+%};
+#endif /* RPC_HDR */
+%
+%/*
+% * rpcb_entry contains a merged address of a service on a particular
+% * transport, plus associated netconfig information.  A list of rpcb_entrys
+% * is returned by RPCBPROC_GETADDRLIST.  See netconfig.h for values used
+% * in r_nc_* fields.
+% */
+struct rpcb_entry {
+       string          r_maddr<>;      /* merged address of service */
+       string          r_nc_netid<>;   /* netid field */
+       unsigned int    r_nc_semantics; /* semantics of transport */
+       string          r_nc_protofmly<>; /* protocol family */
+       string          r_nc_proto<>;   /* protocol name */
+};
+%
+%/*
+% * A list of addresses supported by a service.
+% */
+struct rpcb_entry_list {
+       rpcb_entry rpcb_entry_map;
+       struct rpcb_entry_list *rpcb_entry_next;
+};
+
+typedef rpcb_entry_list *rpcb_entry_list_ptr;
+
+%
+%/*
+% * rpcbind statistics
+% */
+%
+const rpcb_highproc_2 = RPCBPROC_CALLIT;
+const rpcb_highproc_3 = RPCBPROC_TADDR2UADDR;
+const rpcb_highproc_4 = RPCBPROC_GETSTAT;
+
+const RPCBSTAT_HIGHPROC = 13;  /* # of procs in rpcbind V4 plus one */
+const RPCBVERS_STAT = 3;       /* provide only for rpcbind V2, V3 and V4 */
+const RPCBVERS_4_STAT = 2;
+const RPCBVERS_3_STAT = 1;
+const RPCBVERS_2_STAT = 0;
+%
+%/* Link list of all the stats about getport and getaddr */
+struct rpcbs_addrlist {
+       rpcprog_t prog;
+       rpcvers_t vers;
+       int success;
+       int failure;
+       string netid<>;
+       struct rpcbs_addrlist *next;
+};
+%
+%/* Link list of all the stats about rmtcall */
+struct rpcbs_rmtcalllist {
+       rpcprog_t prog;
+       rpcvers_t vers;
+       rpcproc_t proc;
+       int success;
+       int failure;
+       int indirect;   /* whether callit or indirect */
+       string netid<>;
+       struct rpcbs_rmtcalllist *next;
+};
+
+typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
+typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
+typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
+
+struct rpcb_stat {
+       rpcbs_proc              info;
+       int                     setinfo;
+       int                     unsetinfo;
+       rpcbs_addrlist_ptr      addrinfo;
+       rpcbs_rmtcalllist_ptr   rmtinfo;
+};
+%
+%/*
+% * One rpcb_stat structure is returned for each version of rpcbind
+% * being monitored.
+% */
+
+typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
+
+#ifdef RPC_HDR
+%
+%/*
+% * We don't define netbuf in RPCL, since it would contain structure member
+% * names that would conflict with the definition of struct netbuf in
+% * <tiuser.h>.  Instead we merely declare the XDR routine xdr_netbuf() here,
+% * and implement it ourselves in rpc/rpcb_prot.c.
+% */
+%#ifdef __cplusplus
+%extern "C" bool_t xdr_netbuf(XDR *, struct netbuf *);
+%
+%#else /* __STDC__ */
+%extern  bool_t xdr_netbuf(XDR *, struct netbuf *);
+%
+%#endif
+#endif /* def RPC_HDR */
+
+/*
+ * rpcbind procedures
+ */
+program RPCBPROG {
+       version RPCBVERS {
+               bool
+               RPCBPROC_SET(rpcb) = 1;
+
+               bool
+               RPCBPROC_UNSET(rpcb) = 2;
+
+               string
+               RPCBPROC_GETADDR(rpcb) = 3;
+
+               rpcblist_ptr
+               RPCBPROC_DUMP(void) = 4;
+
+               rpcb_rmtcallres
+               RPCBPROC_CALLIT(rpcb_rmtcallargs) = 5;
+
+               unsigned int
+               RPCBPROC_GETTIME(void) = 6;
+
+               struct netbuf
+               RPCBPROC_UADDR2TADDR(string) = 7;
+
+               string
+               RPCBPROC_TADDR2UADDR(struct netbuf) = 8;
+       } = 3;
+
+       version RPCBVERS4 {
+               bool
+               RPCBPROC_SET(rpcb) = 1;
+
+               bool
+               RPCBPROC_UNSET(rpcb) = 2;
+
+               string
+               RPCBPROC_GETADDR(rpcb) = 3;
+
+               rpcblist_ptr
+               RPCBPROC_DUMP(void) = 4;
+
+               /*
+                * NOTE: RPCBPROC_BCAST has the same functionality as CALLIT;
+                * the new name is intended to indicate that this
+                * procedure should be used for broadcast RPC, and
+                * RPCBPROC_INDIRECT should be used for indirect calls.
+                */
+               rpcb_rmtcallres
+               RPCBPROC_BCAST(rpcb_rmtcallargs) = RPCBPROC_CALLIT;
+
+               unsigned int
+               RPCBPROC_GETTIME(void) = 6;
+
+               struct netbuf
+               RPCBPROC_UADDR2TADDR(string) = 7;
+
+               string
+               RPCBPROC_TADDR2UADDR(struct netbuf) = 8;
+
+               string
+               RPCBPROC_GETVERSADDR(rpcb) = 9;
+
+               rpcb_rmtcallres
+               RPCBPROC_INDIRECT(rpcb_rmtcallargs) = 10;
+
+               rpcb_entry_list_ptr
+               RPCBPROC_GETADDRLIST(rpcb) = 11;
+
+               rpcb_stat_byvers
+               RPCBPROC_GETSTAT(void) = 12;
+       } = 4;
+} = 100000;
+#ifdef RPC_HDR
+%
+%#define       RPCBVERS_3              RPCBVERS
+%#define       RPCBVERS_4              RPCBVERS4
+%
+%#define       _PATH_RPCBINDSOCK       "/var/run/rpcbind.sock"
+%
+%#else         /* ndef _KERNEL */
+%#ifdef __cplusplus
+%extern "C" {
+%#endif
+%
+%/*
+% * A mapping of (program, version, network ID) to address
+% */
+%struct rpcb {
+%      rpcprog_t r_prog;               /* program number */
+%      rpcvers_t r_vers;               /* version number */
+%      char *r_netid;                  /* network id */
+%      char *r_addr;                   /* universal address */
+%      char *r_owner;                  /* owner of the mapping */
+%};
+%typedef struct rpcb RPCB;
+%
+%/*
+% * A list of mappings
+% */
+%struct rpcblist {
+%      RPCB rpcb_map;
+%      struct rpcblist *rpcb_next;
+%};
+%typedef struct rpcblist RPCBLIST;
+%typedef struct rpcblist *rpcblist_ptr;
+%
+%/*
+% * Remote calls arguments
+% */
+%struct rpcb_rmtcallargs {
+%      rpcprog_t prog;                 /* program number */
+%      rpcvers_t vers;                 /* version number */
+%      rpcproc_t proc;                 /* procedure number */
+%      u_int32_t arglen;                       /* arg len */
+%      caddr_t args_ptr;               /* argument */
+%      xdrproc_t xdr_args;             /* XDR routine for argument */
+%};
+%typedef struct rpcb_rmtcallargs rpcb_rmtcallargs;
+%
+%/*
+% * Remote calls results
+% */
+%struct rpcb_rmtcallres {
+%      char *addr_ptr;                 /* remote universal address */
+%      u_int32_t resultslen;           /* results length */
+%      caddr_t results_ptr;            /* results */
+%      xdrproc_t xdr_results;          /* XDR routine for result */
+%};
+%typedef struct rpcb_rmtcallres rpcb_rmtcallres;
+%
+%struct rpcb_entry {
+%      char *r_maddr;
+%      char *r_nc_netid;
+%      unsigned int r_nc_semantics;
+%      char *r_nc_protofmly;
+%      char *r_nc_proto;
+%};
+%typedef struct rpcb_entry rpcb_entry;
+%
+%/*
+% * A list of addresses supported by a service.
+% */
+%
+%struct rpcb_entry_list {
+%      rpcb_entry rpcb_entry_map;
+%      struct rpcb_entry_list *rpcb_entry_next;
+%};
+%typedef struct rpcb_entry_list rpcb_entry_list;
+%
+%typedef rpcb_entry_list *rpcb_entry_list_ptr;
+%
+%/*
+% * rpcbind statistics
+% */
+%
+%#define       rpcb_highproc_2 RPCBPROC_CALLIT
+%#define       rpcb_highproc_3 RPCBPROC_TADDR2UADDR
+%#define       rpcb_highproc_4 RPCBPROC_GETSTAT
+%#define       RPCBSTAT_HIGHPROC 13
+%#define       RPCBVERS_STAT 3
+%#define       RPCBVERS_4_STAT 2
+%#define       RPCBVERS_3_STAT 1
+%#define       RPCBVERS_2_STAT 0
+%
+%/* Link list of all the stats about getport and getaddr */
+%
+%struct rpcbs_addrlist {
+%      rpcprog_t prog;
+%      rpcvers_t vers;
+%      int success;
+%      int failure;
+%      char *netid;
+%      struct rpcbs_addrlist *next;
+%};
+%typedef struct rpcbs_addrlist rpcbs_addrlist;
+%
+%/* Link list of all the stats about rmtcall */
+%
+%struct rpcbs_rmtcalllist {
+%      rpcprog_t prog;
+%      rpcvers_t vers;
+%      rpcproc_t proc;
+%      int success;
+%      int failure;
+%      int indirect;
+%      char *netid;
+%      struct rpcbs_rmtcalllist *next;
+%};
+%typedef struct rpcbs_rmtcalllist rpcbs_rmtcalllist;
+%
+%typedef int rpcbs_proc[RPCBSTAT_HIGHPROC];
+%
+%typedef rpcbs_addrlist *rpcbs_addrlist_ptr;
+%
+%typedef rpcbs_rmtcalllist *rpcbs_rmtcalllist_ptr;
+%
+%struct rpcb_stat {
+%      rpcbs_proc info;
+%      int setinfo;
+%      int unsetinfo;
+%      rpcbs_addrlist_ptr addrinfo;
+%      rpcbs_rmtcalllist_ptr rmtinfo;
+%};
+%typedef struct rpcb_stat rpcb_stat;
+%
+%/*
+% * One rpcb_stat structure is returned for each version of rpcbind
+% * being monitored.
+% */
+%
+%typedef rpcb_stat rpcb_stat_byvers[RPCBVERS_STAT];
+%
+%#ifdef __cplusplus
+%}
+%#endif
+%
+%#endif                /* ndef _KERNEL */
+#endif         /* RPC_HDR */
similarity index 54%
copy from include/rpc/rpc_com.h
copy to include/rpc/rpcent.h
index 2cf5995..41e34e4 100644 (file)
@@ -5,74 +5,65 @@
  * may copy or modify Sun RPC without charge, but are not authorized
  * to license or distribute it to anyone else except as part of a product or
  * program developed by the user.
- * 
+ *
  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
+ *
  * Sun RPC is provided with no support and without any obligation on the
  * part of Sun Microsystems, Inc. to assist in its use, correction,
  * modification or enhancement.
- * 
+ *
  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  * OR ANY PART THEREOF.
- * 
+ *
  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  * or profits or other special, indirect and consequential damages, even if
  * Sun has been advised of the possibility of such damages.
- * 
+ *
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
+ *
+ *     from: @(#)rpcent.h   1.13    94/04/25 SMI
+ *     from: @(#)rpcent.h 1.1 88/12/06 SMI
+ * $NetBSD: rpcent.h,v 1.1 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/rpcent.h,v 1.2 2002/03/23 17:24:55 imp Exp $
+ * $DragonFly$
  */
 /*
  * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
  */
 
 /*
- * rpc_com.h, Common definitions for both the server and client side.
- * All for the topmost layer of rpc
+ * rpcent.h,
+ * For converting rpc program numbers to names etc.
  *
  */
 
-#ifndef _RPC_RPCCOM_H
-#define        _RPC_RPCCOM_H
+#ifndef _RPC_RPCENT_H_
+#define _RPC_RPCENT_H_
 
-/* From: #pragma ident "@(#)rpc_com.h  1.11    93/07/05 SMI" */
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * File descriptor to be used on xxx_create calls to get default descriptor
- */
-#define        RPC_ANYSOCK     -1
-#define        RPC_ANYFD       RPC_ANYSOCK
-/*
- * The max size of the transport, if the size cannot be determined
- * by other means.
- */
-#define        RPC_MAXDATASIZE 9000
-#define        RPC_MAXADDRSIZE 1024
+struct rpcent {
+      char    *r_name;        /* name of server for this rpc program */
+      char    **r_aliases;    /* alias list */
+      int     r_number;       /* rpc program number */
+};
 
-#if defined(__STDC__) || defined(__cplusplus)
-extern u_int __rpc_get_t_size (int, long);
-extern u_int __rpc_get_a_size (long);
-extern int __rpc_dtbsize (void);
-extern int _rpc_dtablesize (void);
-extern  int  _rpc_get_default_domain(char **);
-#else
-extern u_int __rpc_get_t_size ();
-extern u_int __rpc_get_a_size ();
-extern int __rpc_dtbsize ();
-extern int _rpc_dtablesize ();
-extern  int _rpc_get_default_domain();
-#endif
+__BEGIN_DECLS
+extern struct rpcent *getrpcbyname_r(const char *, struct rpcent *,
+                                    char *, int);
+extern struct rpcent *getrpcbynumber_r(int, struct rpcent *, char *, int);
+extern struct rpcent *getrpcent_r(struct rpcent *, char *, int);
 
-#ifdef __cplusplus
-}
-#endif
+/* Old interfaces that return a pointer to a static area;  MT-unsafe */
+extern struct rpcent *getrpcbyname(char *);
+extern struct rpcent *getrpcbynumber(int);
+extern struct rpcent *getrpcent(void);
+extern void setrpcent(int);
+extern void endrpcent(void);
+__END_DECLS
 
-#endif /* _RPC_RPCCOM_H */
+#endif /* !_RPC_RPCENT_H_ */
index d5aa807..cda56d1 100644 (file)
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- *     from: @(#)svc.h 1.20 88/02/08 SMI
- *     from: @(#)svc.h 2.2 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/svc.h,v 1.16 1999/12/29 05:00:43 peter Exp $
+ *     from: @(#)svc.h 1.35 88/12/17 SMI
+ *     from: @(#)svc.h      1.27    94/04/25 SMI
+ * $NetBSD: svc.h,v 1.17 2000/06/02 22:57:56 fvdl Exp $
+ * $FreeBSD: src/include/rpc/svc.h,v 1.24 2003/06/15 10:32:01 mbr Exp $
  * $DragonFly: src/include/rpc/svc.h,v 1.4 2008/05/19 10:19:49 corecode Exp $
  */
 
 /*
  * svc.h, Server-side remote procedure call interface.
  *
- * Copyright (C) 1984, Sun Microsystems, Inc.
+ * Copyright (C) 1986-1993 by Sun Microsystems, Inc.
  */
 
 #ifndef _RPC_SVC_H
  * parameters, struct svc_req * and SVCXPRT *, defined below.
  */
 
+/*
+ *      Service control requests
+ */
+#define SVCGET_VERSQUIET       1
+#define SVCSET_VERSQUIET       2
+#define SVCGET_CONNMAXREC      3
+#define SVCSET_CONNMAXREC      4
+
+/*
+ * Operations for rpc_control().
+ */
+#define RPC_SVC_CONNMAXREC_SET  0      /* set max rec size, enable nonblock */
+#define RPC_SVC_CONNMAXREC_GET  1
+
 enum xprt_stat {
        XPRT_DIED,
        XPRT_MOREREQS,
        XPRT_IDLE
 };
 
-struct rpc_msg;
-
 /*
  * Server side transport handle
  */
 typedef struct __rpc_svcxprt {
-       int             xp_sock;
+       int             xp_fd;
        u_short         xp_port;         /* associated port number */
-       struct xp_ops {
+       const struct xp_ops {
            /* receive incoming requests */
-           bool_t      (*xp_recv) (struct __rpc_svcxprt *,
-                               struct rpc_msg *);
+           bool_t      (*xp_recv)(struct __rpc_svcxprt *, struct rpc_msg *);
            /* get transport status */
-           enum xprt_stat (*xp_stat) (struct __rpc_svcxprt *);
+           enum xprt_stat (*xp_stat)(struct __rpc_svcxprt *);
            /* get arguments */
-           bool_t      (*xp_getargs) (struct __rpc_svcxprt *, xdrproc_t,
-                               caddr_t);
+           bool_t      (*xp_getargs)(struct __rpc_svcxprt *, xdrproc_t,
+                               void *);
            /* send reply */
-           bool_t      (*xp_reply) (struct __rpc_svcxprt *,
-                               struct rpc_msg *);
+           bool_t      (*xp_reply)(struct __rpc_svcxprt *, struct rpc_msg *);
            /* free mem allocated for args */
-           bool_t      (*xp_freeargs) (struct __rpc_svcxprt *, xdrproc_t,
-                               caddr_t);
+           bool_t      (*xp_freeargs)(struct __rpc_svcxprt *, xdrproc_t,
+                               void *);
            /* destroy this struct */
-           void        (*xp_destroy) (struct __rpc_svcxprt *);
+           void        (*xp_destroy)(struct __rpc_svcxprt *);
        } *xp_ops;
        int             xp_addrlen;      /* length of remote address */
-       struct sockaddr_in xp_raddr;     /* remote address */
+       struct sockaddr_in xp_raddr;     /* remote addr. (backward ABI compat) */
+       /* XXX - fvdl stick this here for ABI backward compat reasons */
+       const struct xp_ops2 {
+               /* catch-all function */
+               bool_t  (*xp_control)(struct __rpc_svcxprt *, const u_int,
+                               void *);
+       } *xp_ops2;
+       char            *xp_tp;          /* transport provider device name */
+       char            *xp_netid;       /* network token */
+       struct netbuf   xp_ltaddr;       /* local transport address */
+       struct netbuf   xp_rtaddr;       /* remote transport address */
        struct opaque_auth xp_verf;      /* raw response verifier */
-       caddr_t         xp_p1;           /* private */
-       caddr_t         xp_p2;           /* private */
+       void            *xp_p1;          /* private: for use by svc ops */
+       void            *xp_p2;          /* private: for use by svc ops */
+       void            *xp_p3;          /* private: for use by svc lib */
+       int             xp_type;         /* transport type */
 } SVCXPRT;
 
+/*
+ * Service request
+ */
+struct svc_req {
+       u_int32_t       rq_prog;        /* service program number */
+       u_int32_t       rq_vers;        /* service protocol version */
+       u_int32_t       rq_proc;        /* the desired procedure */
+       struct opaque_auth rq_cred;     /* raw creds from the wire */
+       void            *rq_clntcred;   /* read only cooked cred */
+       SVCXPRT         *rq_xprt;       /* associated transport */
+};
+
 /*
  *  Approved way of getting address of caller
  */
-#define svc_getcaller(x) (&(x)->xp_raddr)
+#define svc_getrpccaller(x) (&(x)->xp_rtaddr)
 
 /*
  * Operations defined on an SVCXPRT handle
@@ -115,7 +150,7 @@ typedef struct __rpc_svcxprt {
  * SVCXPRT             *xprt;
  * struct rpc_msg      *msg;
  * xdrproc_t            xargs;
- * caddr_t              argsp;
+ * void *               argsp;
  */
 #define SVC_RECV(xprt, msg)                            \
        (*(xprt)->xp_ops->xp_recv)((xprt), (msg))
@@ -147,44 +182,36 @@ typedef struct __rpc_svcxprt {
 #define svc_destroy(xprt)                              \
        (*(xprt)->xp_ops->xp_destroy)(xprt)
 
-
-/*
- * Service request
- */
-struct svc_req {
-       u_int32_t       rq_prog;        /* service program number */
-       u_int32_t       rq_vers;        /* service protocol version */
-       u_int32_t       rq_proc;        /* the desired procedure */
-       struct opaque_auth rq_cred;     /* raw creds from the wire */
-       caddr_t         rq_clntcred;    /* read only cooked cred */
-       SVCXPRT *rq_xprt;               /* associated transport */
-};
-
+#define SVC_CONTROL(xprt, rq, in)                      \
+       (*(xprt)->xp_ops2->xp_control)((xprt), (rq), (in))
 
 /*
  * Service registration
  *
- * svc_register(xprt, prog, vers, dispatch, protocol)
- *     SVCXPRT *xprt;
- *     u_long prog;
- *     u_long vers;
- *     void (*dispatch)();
- *     int protocol;        (like TCP or UDP, zero means do not register)
+ * svc_reg(xprt, prog, vers, dispatch, nconf)
+ *     const SVCXPRT *xprt;
+ *     const rpcprog_t prog;
+ *     const rpcvers_t vers;
+ *     const void (*dispatch)();
+ *     const struct netconfig *nconf;
  */
+
 __BEGIN_DECLS
-extern bool_t  svc_register (SVCXPRT *, u_long, u_long,
-                       void (*) (struct svc_req *, SVCXPRT *), int);
+extern bool_t  svc_reg(SVCXPRT *, const rpcprog_t, const rpcvers_t,
+                       void (*)(struct svc_req *, SVCXPRT *),
+                       const struct netconfig *);
 __END_DECLS
 
 /*
  * Service un-registration
  *
- * svc_unregister(prog, vers)
- *     u_long prog;
- *     u_long vers;
+ * svc_unreg(prog, vers)
+ *     const rpcprog_t prog;
+ *     const rpcvers_t vers;
  */
+
 __BEGIN_DECLS
-extern void    svc_unregister (u_long, u_long);
+extern void    svc_unreg(const rpcprog_t, const rpcvers_t);
 __END_DECLS
 
 /*
@@ -194,7 +221,7 @@ __END_DECLS
  *     SVCXPRT *xprt;
  */
 __BEGIN_DECLS
-extern void    xprt_register   (SVCXPRT *);
+extern void    xprt_register(SVCXPRT *);
 __END_DECLS
 
 /*
@@ -204,12 +231,10 @@ __END_DECLS
  *     SVCXPRT *xprt;
  */
 __BEGIN_DECLS
-extern void    xprt_unregister (SVCXPRT *);
+extern void    xprt_unregister(SVCXPRT *);
 __END_DECLS
 
 
-
-
 /*
  * When the service routine is called, it must first check to see if it
  * knows about the procedure;  if not, it should call svcerr_noproc
@@ -237,14 +262,17 @@ __END_DECLS
  */
 
 __BEGIN_DECLS
-extern bool_t  svc_sendreply   (SVCXPRT *, xdrproc_t, char *);
-extern void    svcerr_decode   (SVCXPRT *);
-extern void    svcerr_weakauth (SVCXPRT *);
-extern void    svcerr_noproc   (SVCXPRT *);
-extern void    svcerr_progvers (SVCXPRT *, u_long, u_long);
-extern void    svcerr_auth     (SVCXPRT *, enum auth_stat);
-extern void    svcerr_noprog   (SVCXPRT *);
-extern void    svcerr_systemerr (SVCXPRT *);
+extern bool_t  svc_sendreply(SVCXPRT *, xdrproc_t, void *);
+extern void    svcerr_decode(SVCXPRT *);
+extern void    svcerr_weakauth(SVCXPRT *);
+extern void    svcerr_noproc(SVCXPRT *);
+extern void    svcerr_progvers(SVCXPRT *, rpcvers_t, rpcvers_t);
+extern void    svcerr_auth(SVCXPRT *, enum auth_stat);
+extern void    svcerr_noprog(SVCXPRT *);
+extern void    svcerr_systemerr(SVCXPRT *);
+extern int     rpc_reg(rpcprog_t, rpcvers_t, rpcproc_t,
+                       char *(*)(char *), xdrproc_t, xdrproc_t,
+                       char *);
 __END_DECLS
 
 /*
@@ -263,64 +291,142 @@ __END_DECLS
  * dynamic; must be inspected before each call to select
  */
 extern int svc_maxfd;
+#ifdef FD_SETSIZE
 extern fd_set svc_fdset;
 #define svc_fds svc_fdset.fds_bits[0]  /* compatibility */
+#else
+extern int svc_fds;
+#endif /* def FD_SETSIZE */
 
-#ifndef _KERNEL
 /*
  * a small program implemented by the svc_rpc implementation itself;
  * also see clnt.h for protocol numbers.
  */
-extern void rpctest_service();
-#endif
+__BEGIN_DECLS
+extern void rpctest_service(void);
+__END_DECLS
 
 __BEGIN_DECLS
-extern void    svc_getreq      (int);
-extern void    svc_getreqset   (fd_set *);
-extern void    svc_getreqset2  (fd_set *, int); /* XXX: nonstd, undoc */
-extern void    svc_run         (void);
+extern void    svc_getreq(int);
+extern void    svc_getreqset(fd_set *);
+extern void    svc_getreq_common(int);
+struct pollfd;
+extern void    svc_getreq_poll(struct pollfd *, int);
+
+extern void    svc_run(void);
+extern void    svc_exit(void);
 __END_DECLS
 
 /*
  * Socket to use on svcxxx_create call to get default socket
  */
 #define        RPC_ANYSOCK     -1
+#define RPC_ANYFD      RPC_ANYSOCK
 
 /*
  * These are the existing service side transport implementations
  */
 
+__BEGIN_DECLS
 /*
- * Memory based rpc for testing and timing.
+ * Transport independent svc_create routine.
+ */
+extern int svc_create(void (*)(struct svc_req *, SVCXPRT *),
+                          const rpcprog_t, const rpcvers_t, const char *);
+/*
+ *      void (*dispatch)();             -- dispatch routine
+ *      const rpcprog_t prognum;        -- program number
+ *      const rpcvers_t versnum;        -- version number
+ *      const char *nettype;            -- network type
  */
-__BEGIN_DECLS
-extern SVCXPRT *svcraw_create (void);
-__END_DECLS
 
 
 /*
- * Udp based rpc.
+ * Generic server creation routine. It takes a netconfig structure
+ * instead of a nettype.
  */
-__BEGIN_DECLS
-extern SVCXPRT *svcudp_create (int);
-extern SVCXPRT *svcudp_bufcreate (int, u_int, u_int);
-__END_DECLS
+
+extern SVCXPRT *svc_tp_create(void (*)(struct svc_req *, SVCXPRT *),
+                                  const rpcprog_t, const rpcvers_t,
+                                  const struct netconfig *);
+        /*
+         * void (*dispatch)();            -- dispatch routine
+         * const rpcprog_t prognum;       -- program number
+         * const rpcvers_t versnum;       -- version number
+         * const struct netconfig *nconf; -- netconfig structure
+         */
 
 
 /*
- * Tcp based rpc.
+ * Generic TLI create routine
+ */
+extern SVCXPRT *svc_tli_create(const int, const struct netconfig *,
+                              const struct t_bind *, const u_int,
+                              const u_int);
+/*
+ *      const int fd;                   -- connection end point
+ *      const struct netconfig *nconf;  -- netconfig structure for network
+ *      const struct t_bind *bindaddr;  -- local bind address
+ *      const u_int sendsz;             -- max sendsize
+ *      const u_int recvsz;             -- max recvsize
  */
-__BEGIN_DECLS
-extern SVCXPRT *svctcp_create (int, u_int, u_int);
-extern SVCXPRT *svcfd_create (int, u_int, u_int);
-__END_DECLS
 
 /*
- * AF_UNIX socket based rpc.
+ * Connectionless and connectionful create routines
  */
-__BEGIN_DECLS
-extern SVCXPRT *svcunix_create (int, u_int, u_int, char *);
-extern SVCXPRT *svcunixfd_create (int, u_int, u_int);
+
+extern SVCXPRT *svc_vc_create(const int, const u_int, const u_int);
+/*
+ *      const int fd;                           -- open connection end point
+ *      const u_int sendsize;                   -- max send size
+ *      const u_int recvsize;                   -- max recv size
+ */
+
+/*
+ * Added for compatibility to old rpc 4.0. Obsoleted by svc_vc_create().
+ */
+extern SVCXPRT *svcunix_create(int, u_int, u_int, char *);
+
+extern SVCXPRT *svc_dg_create(const int, const u_int, const u_int);
+        /*
+         * const int fd;                                -- open connection
+         * const u_int sendsize;                        -- max send size
+         * const u_int recvsize;                        -- max recv size
+         */
+
+
+/*
+ * the routine takes any *open* connection
+ * descriptor as its first input and is used for open connections.
+ */
+extern SVCXPRT *svc_fd_create(const int, const u_int, const u_int);
+/*
+ *      const int fd;                           -- open connection end point
+ *      const u_int sendsize;                   -- max send size
+ *      const u_int recvsize;                   -- max recv size
+ */
+
+/*
+ * Added for compatibility to old rpc 4.0. Obsoleted by svc_fd_create().
+ */
+extern SVCXPRT *svcunixfd_create(int, u_int, u_int);
+
+/*
+ * Memory based rpc (for speed check and testing)
+ */
+extern SVCXPRT *svc_raw_create(void);
+
+/*
+ * svc_dg_enable_cache() enables the cache on dg transports.
+ */
+int svc_dg_enablecache(SVCXPRT *, const u_int);
+
+int __rpc_get_local_uid(SVCXPRT *_transp, uid_t *_uid);
+
 __END_DECLS
 
+
+/* for backward compatibility */
+#include <rpc/svc_soc.h>
+
 #endif /* !_RPC_SVC_H */
index 409574d..8cce85c 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)svc_auth.h 1.6 86/07/16 SMI
  *     from: @(#)svc_auth.h    2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/svc_auth.h,v 1.12 1999/08/27 23:45:05 peter Exp $
+ * $NetBSD: svc_auth.h,v 1.8 2000/06/02 22:57:57 fvdl Exp $
+ * $FreeBSD: src/include/rpc/svc_auth.h,v 1.15 2008/09/09 14:15:55 dfr Exp $
  * $DragonFly: src/include/rpc/svc_auth.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  */
 
  * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
-#ifndef _RPC_SVCAUTH_H
-#define _RPC_SVCAUTH_H
-
-struct rpc_msg;
-struct svc_req;
+#ifndef _RPC_SVC_AUTH_H_
+#define _RPC_SVC_AUTH_H_
 
 /*
  * Server side authenticator
  */
 __BEGIN_DECLS
-extern enum auth_stat _authenticate (struct svc_req *, struct rpc_msg *);
-extern int svc_auth_reg (int, enum auth_stat (*)(struct svc_req *,
-                                                    struct rpc_msg *));
-extern enum auth_stat _svcauth_des (struct svc_req *, struct rpc_msg *);
+extern struct svc_auth_ops svc_auth_null_ops;
+
+extern enum auth_stat _authenticate(struct svc_req *, struct rpc_msg *);
+extern int svc_auth_reg(int, enum auth_stat (*)(struct svc_req *,
+                         struct rpc_msg *));
+
 __END_DECLS
 
-#endif /* !_RPC_SVCAUTH_H */
+#endif /* !_RPC_SVC_AUTH_H_ */
similarity index 62%
copy from lib/libc/rpc/pmap_prot.c
copy to include/rpc/svc_dg.h
index 0ab4da6..060a986 100644 (file)
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
- * @(#)pmap_prot.c 1.17 87/08/11 Copyr 1984 Sun Micro
- * @(#)pmap_prot.c     2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/lib/libc/rpc/pmap_prot.c,v 1.6 1999/08/28 00:00:42 peter Exp $
- * $DragonFly: src/lib/libc/rpc/pmap_prot.c,v 1.3 2005/11/13 12:27:04 swildner Exp $
+ * $NetBSD: svc_dg.h,v 1.1 2000/06/02 23:11:16 fvdl Exp $
+ * $FreeBSD: src/include/rpc/svc_dg.h,v 1.1 2001/03/19 12:49:47 alfred Exp $
+ * $DragonFly$
  */
 
 /*
- * pmap_prot.c
- * Protocol for the local binder service, or pmap.
- *
- * Copyright (C) 1984, Sun Microsystems, Inc.
+ * XXX - this file exists only so that the rpcbind code can pull it in.
+ * This should go away. It should only be include by svc_dg.c and
+ * rpcb_svc_com.c in the rpcbind code.
  */
 
-#include <rpc/types.h>
-#include <rpc/xdr.h>
-#include <rpc/pmap_prot.h>
-
-
-bool_t
-xdr_pmap(XDR *xdrs, struct pmap *regs)
-{
+/*
+ * kept in xprt->xp_p2
+ */
+struct svc_dg_data {
+       /* XXX: optbuf should be the first field, used by ti_opts.c code */
+       size_t          su_iosz;                /* size of send.recv buffer */
+       u_int32_t       su_xid;                 /* transaction id */
+       XDR             su_xdrs;                        /* XDR handle */
+       char            su_verfbody[MAX_AUTH_BYTES];    /* verifier body */
+       void            *su_cache;              /* cached data, NULL if none */
+};
 
-       if (xdr_u_long(xdrs, &regs->pm_prog) &&
-               xdr_u_long(xdrs, &regs->pm_vers) &&
-               xdr_u_long(xdrs, &regs->pm_prot))
-               return (xdr_u_long(xdrs, &regs->pm_port));
-       return (FALSE);
-}
+#define __rpcb_get_dg_xidp(x)  (&((struct svc_dg_data *)(x)->xp_p2)->su_xid)
diff --git a/include/rpc/svc_soc.h b/include/rpc/svc_soc.h
new file mode 100644 (file)
index 0000000..e16e57e
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)svc_soc.h  1.11    94/04/25 SMI
+ *     from: svc_soc.h 1.8 89/05/01 SMI
+ * $NetBSD: svc_soc.h,v 1.1 2000/06/02 22:57:57 fvdl Exp $
+ * $FreeBSD: src/include/rpc/svc_soc.h,v 1.2 2002/03/23 17:24:55 imp Exp $
+ * $DragonFly$
+ */
+/*
+ * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
+ */
+
+/*
+ * svc.h, Server-side remote procedure call interface.
+ */
+
+#ifndef _RPC_SVC_SOC_H_
+#define _RPC_SVC_SOC_H_
+#include <sys/cdefs.h>
+
+/*
+ * All the following declarations are only for backward compatibility
+ * with TS-RPC
+ */
+
+/*
+ *  Approved way of getting address of caller
+ */
+#define svc_getcaller(x) (&(x)->xp_raddr)
+
+/*
+ * Service registration
+ *
+ * svc_register(xprt, prog, vers, dispatch, protocol)
+ *     SVCXPRT *xprt;
+ *     u_long prog;
+ *     u_long vers;
+ *     void (*dispatch)();
+ *     int protocol;    like TCP or UDP, zero means do not register
+ */
+__BEGIN_DECLS
+extern bool_t  svc_register(SVCXPRT *, u_long, u_long,
+                   void (*)(struct svc_req *, SVCXPRT *), int);
+__END_DECLS
+
+/*
+ * Service un-registration
+ *
+ * svc_unregister(prog, vers)
+ *     u_long prog;
+ *     u_long vers;
+ */
+__BEGIN_DECLS
+extern void    svc_unregister(u_long, u_long);
+__END_DECLS
+
+
+/*
+ * Memory based rpc for testing and timing.
+ */
+__BEGIN_DECLS
+extern SVCXPRT *svcraw_create(void);
+__END_DECLS
+
+
+/*
+ * Udp based rpc.
+ */
+__BEGIN_DECLS
+extern SVCXPRT *svcudp_create(int);
+extern SVCXPRT *svcudp_bufcreate(int, u_int, u_int);
+extern int svcudp_enablecache(SVCXPRT *, u_long);
+__END_DECLS
+
+
+/*
+ * Tcp based rpc.
+ */
+__BEGIN_DECLS
+extern SVCXPRT *svctcp_create(int, u_int, u_int);
+__END_DECLS
+
+/*
+ * Fd based rpc.
+ */
+__BEGIN_DECLS
+extern SVCXPRT *svcfd_create(int, u_int, u_int);
+__END_DECLS
+
+#endif /* !_RPC_SVC_SOC_H_ */
index 37be7e7..d9d9276 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)types.h 1.18 87/07/24 SMI
  *     from: @(#)types.h       2.3 88/08/15 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/types.h,v 1.9 1999/08/27 23:45:06 peter Exp $
+ * $NetBSD: types.h,v 1.13 2000/06/13 01:02:44 thorpej Exp $
+ * $FreeBSD: src/sys/rpc/types.h,v 1.10 2001/03/19 12:49:47 alfred Exp $
  * $DragonFly: src/include/rpc/types.h,v 1.2 2003/06/17 04:25:58 dillon Exp $
  */
 
 #ifndef _RPC_TYPES_H
 #define _RPC_TYPES_H
 
-#define        bool_t  int32_t
-#define        enum_t  int32_t
+#include <sys/types.h>
+
+typedef int32_t bool_t;
+typedef int32_t enum_t;
+
+typedef u_int32_t rpcprog_t;
+typedef u_int32_t rpcvers_t;
+typedef u_int32_t rpcproc_t;
+typedef u_int32_t rpcprot_t;
+typedef u_int32_t rpcport_t;
+typedef   int32_t rpc_inline_t;
+
 #define __dontcare__   -1
 
 #ifndef FALSE
 #      define NULL     0
 #endif
 
-#define mem_alloc(bsize)       malloc(bsize)
+#define mem_alloc(bsize)       calloc(1, bsize)
 #define mem_free(ptr, bsize)   free(ptr)
 
-#ifndef makedev /* ie, we haven't already included it */
-#include <sys/types.h>
-#endif
 #include <sys/time.h>
+#include <netconfig.h>
+
+/*
+ * The netbuf structure is defined here, because FreeBSD / NetBSD only use
+ * it inside the RPC code. It's in <xti.h> on SVR4, but it would be confusing
+ * to have an xti.h, since FreeBSD / NetBSD does not support XTI/TLI.
+ */
+
+/*
+ * The netbuf structure is used for transport-independent address storage.
+ */
+struct netbuf {
+       unsigned int maxlen;
+       unsigned int len;
+       void *buf;
+};
+
+/*
+ * The format of the addres and options arguments of the XTI t_bind call.
+ * Only provided for compatibility, it should not be used.
+ */
+
+struct t_bind {
+       struct netbuf   addr;
+       unsigned int    qlen;
+};
+
+/*
+ * Internal library and rpcbind use. This is not an exported interface, do
+ * not use.
+ */
+struct __rpc_sockinfo {
+       int si_af;
+       int si_proto;
+       int si_socktype;
+       int si_alen;
+};
 
 #endif /* !_RPC_TYPES_H */
index 1e1ca7e..92ee67b 100644 (file)
@@ -28,7 +28,8 @@
  *
  *     from: @(#)xdr.h 1.19 87/04/22 SMI
  *     from: @(#)xdr.h 2.2 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/include/rpc/xdr.h,v 1.14.2.1 2003/03/20 12:59:55 jedgar Exp $
+ * $NetBSD: xdr.h,v 1.19 2000/07/17 05:00:45 matt Exp $
+ * $FreeBSD: src/include/rpc/xdr.h,v 1.23 2003/03/07 13:19:40 nectar Exp $
  * $DragonFly: src/include/rpc/xdr.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  */
 
@@ -98,27 +99,28 @@ enum xdr_op {
  */
 typedef struct __rpc_xdr {
        enum xdr_op     x_op;           /* operation; fast additional param */
-       struct xdr_ops {
+       const struct xdr_ops {
                /* get a long from underlying stream */
-               bool_t  (*x_getlong) (struct __rpc_xdr *, long *);
-               /* put a long to underlying stream */
-               bool_t  (*x_putlong) (struct __rpc_xdr *, long *);
-               /* get some bytes from underlying stream */
-               bool_t  (*x_getbytes) (struct __rpc_xdr *, caddr_t, u_int);
-               /* put some bytes to underlying stream */
-               bool_t  (*x_putbytes) (struct __rpc_xdr *, caddr_t, u_int);
+               bool_t  (*x_getlong)(struct __rpc_xdr *, long *);
+               /* put a long to " */
+               bool_t  (*x_putlong)(struct __rpc_xdr *, const long *);
+               /* get some bytes from " */
+               bool_t  (*x_getbytes)(struct __rpc_xdr *, char *, u_int);
+               /* put some bytes to " */
+               bool_t  (*x_putbytes)(struct __rpc_xdr *, const char *, u_int);
                /* returns bytes off from beginning */
-               u_int   (*x_getpostn) (struct __rpc_xdr *);
+               u_int   (*x_getpostn)(struct __rpc_xdr *);
                /* lets you reposition the stream */
-               bool_t  (*x_setpostn) (struct __rpc_xdr *, u_int);
+               bool_t  (*x_setpostn)(struct __rpc_xdr *, u_int);
                /* buf quick ptr to buffered data */
-               int32_t *(*x_inline) (struct __rpc_xdr *, u_int);
+               int32_t *(*x_inline)(struct __rpc_xdr *, u_int);
                /* free privates of this xdr_stream */
-               void    (*x_destroy) (struct __rpc_xdr *);
+               void    (*x_destroy)(struct __rpc_xdr *);
+               bool_t  (*x_control)(struct __rpc_xdr *, int, void *);
        } *x_ops;
-       caddr_t         x_public;       /* users' data */
-       caddr_t         x_private;      /* pointer to private data */
-       caddr_t         x_base;         /* private used for position info */
+       char *          x_public;       /* users' data */
+       void *          x_private;      /* pointer to private data */
+       char *          x_base;         /* private used for position info */
        u_int           x_handy;        /* extra private word */
 } XDR;
 
@@ -131,12 +133,12 @@ typedef struct __rpc_xdr {
  * allocate dynamic storage of the appropriate size and return it.
  */
 #ifdef _KERNEL
-typedef        bool_t (*xdrproc_t) (XDR *, void *, u_int);
+typedef        bool_t (*xdrproc_t)(XDR *, void *, u_int);
 #else
 /*
- * XXX can't actually prototype it, because some take two args!!!
+ * XXX can't actually prototype it, because some take three args!!!
  */
-typedef        bool_t (*xdrproc_t) (/* XDR *, void *, u_int */);
+typedef        bool_t (*xdrproc_t)(XDR *, ...);
 #endif
 
 /*
@@ -144,7 +146,7 @@ typedef     bool_t (*xdrproc_t) (/* XDR *, void *, u_int */);
  *
  * XDR         *xdrs;
  * long                *longp;
- * caddr_t      addr;
+ * char *       addr;
  * u_int        len;
  * u_int        pos;
  */
@@ -158,6 +160,29 @@ typedef    bool_t (*xdrproc_t) (/* XDR *, void *, u_int */);
 #define xdr_putlong(xdrs, longp)                       \
        (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
 
+static __inline int
+xdr_getint32(XDR *xdrs, int32_t *ip)
+{
+       long l;
+
+       if (!xdr_getlong(xdrs, &l))
+               return (FALSE);
+       *ip = (int32_t)l;
+       return (TRUE);
+}
+
+static __inline int
+xdr_putint32(XDR *xdrs, int32_t *ip)
+{
+       long l;
+
+       l = (long)*ip;
+       return xdr_putlong(xdrs, &l);
+}
+
+#define XDR_GETINT32(xdrs, int32p)     xdr_getint32(xdrs, int32p)
+#define XDR_PUTINT32(xdrs, int32p)     xdr_putint32(xdrs, int32p)
+
 #define XDR_GETBYTES(xdrs, addr, len)                  \
        (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
 #define xdr_getbytes(xdrs, addr, len)                  \
@@ -190,10 +215,25 @@ typedef   bool_t (*xdrproc_t) (/* XDR *, void *, u_int */);
        if ((xdrs)->x_ops->x_destroy)                   \
                (*(xdrs)->x_ops->x_destroy)(xdrs)
 
+#define XDR_CONTROL(xdrs, req, op)                     \
+       if ((xdrs)->x_ops->x_control)                   \
+               (*(xdrs)->x_ops->x_control)(xdrs, req, op)
+#define xdr_control(xdrs, req, op) XDR_CONTROL(xdrs, req, op)
+
+/*
+ * Solaris strips the '_t' from these types -- not sure why.
+ * But, let's be compatible.
+ */
+#define xdr_rpcvers(xdrs, versp) xdr_u_int32(xdrs, versp)
+#define xdr_rpcprog(xdrs, progp) xdr_u_int32(xdrs, progp)
+#define xdr_rpcproc(xdrs, procp) xdr_u_int32(xdrs, procp)
+#define xdr_rpcprot(xdrs, protp) xdr_u_int32(xdrs, protp)
+#define xdr_rpcport(xdrs, portp) xdr_u_int32(xdrs, portp)
+
 /*
  * Support struct for discriminated unions.
  * You create an array of xdrdiscrim structures, terminated with
- * a entry with a null procedure pointer.  The xdr_union routine gets
+ * an entry with a null procedure pointer.  The xdr_union routine gets
  * the discriminant value and then searches the array of structures
  * for a matching value.  If a match is found the associated xdr routine
  * is called to handle that part of the union.  If there is
@@ -221,8 +261,13 @@ struct xdr_discrim {
  * N.B. and frozen for all time: each data type here uses 4 bytes
  * of external representation.
  */
-#define IXDR_GET_LONG(buf)             ((long)ntohl((u_long)*(buf)++))
-#define IXDR_PUT_LONG(buf, v)          (*(buf)++ = (long)htonl((u_long)v))
+#define IXDR_GET_INT32(buf)            ((int32_t)__ntohl((u_int32_t)*(buf)++))
+#define IXDR_PUT_INT32(buf, v)         (*(buf)++ =(int32_t)__htonl((u_int32_t)v))
+#define IXDR_GET_U_INT32(buf)          ((u_int32_t)IXDR_GET_INT32(buf))
+#define IXDR_PUT_U_INT32(buf, v)       IXDR_PUT_INT32((buf), ((int32_t)(v)))
+
+#define IXDR_GET_LONG(buf)             ((long)__ntohl((u_int32_t)*(buf)++))
+#define IXDR_PUT_LONG(buf, v)          (*(buf)++ =(int32_t)__htonl((u_int32_t)v))
 
 #define IXDR_GET_BOOL(buf)             ((bool_t)IXDR_GET_LONG(buf))
 #define IXDR_GET_ENUM(buf, t)          ((t)IXDR_GET_LONG(buf))
@@ -230,46 +275,50 @@ struct xdr_discrim {
 #define IXDR_GET_SHORT(buf)            ((short)IXDR_GET_LONG(buf))
 #define IXDR_GET_U_SHORT(buf)          ((u_short)IXDR_GET_LONG(buf))
 
-#define IXDR_PUT_BOOL(buf, v)          IXDR_PUT_LONG((buf), ((long)(v)))
-#define IXDR_PUT_ENUM(buf, v)          IXDR_PUT_LONG((buf), ((long)(v)))
-#define IXDR_PUT_U_LONG(buf, v)                IXDR_PUT_LONG((buf), ((long)(v)))
-#define IXDR_PUT_SHORT(buf, v)         IXDR_PUT_LONG((buf), ((long)(v)))
-#define IXDR_PUT_U_SHORT(buf, v)       IXDR_PUT_LONG((buf), ((long)(v)))
+#define IXDR_PUT_BOOL(buf, v)          IXDR_PUT_LONG((buf), (v))
+#define IXDR_PUT_ENUM(buf, v)          IXDR_PUT_LONG((buf), (v))
+#define IXDR_PUT_U_LONG(buf, v)                IXDR_PUT_LONG((buf), (v))
+#define IXDR_PUT_SHORT(buf, v)         IXDR_PUT_LONG((buf), (v))
+#define IXDR_PUT_U_SHORT(buf, v)       IXDR_PUT_LONG((buf), (v))
 
 /*
  * These are the "generic" xdr routines.
  */
 __BEGIN_DECLS
-extern bool_t  xdr_void        (void);
-extern bool_t  xdr_int         (XDR *, int *);
-extern bool_t  xdr_u_int       (XDR *, u_int *);
-extern bool_t  xdr_long        (XDR *, long *);
-extern bool_t  xdr_u_long      (XDR *, u_long *);
-extern bool_t  xdr_short       (XDR *, short *);
-extern bool_t  xdr_u_short     (XDR *, u_short *);
-extern bool_t  xdr_int16_t     (XDR *, int16_t *);
-extern bool_t  xdr_u_int16_t   (XDR *, u_int16_t *);
-extern bool_t  xdr_int32_t     (XDR *, int32_t *);
-extern bool_t  xdr_u_int32_t   (XDR *, u_int32_t *);
-extern bool_t  xdr_int64_t     (XDR *, int64_t *);
-extern bool_t  xdr_u_int64_t   (XDR *, u_int64_t *);
-extern bool_t  xdr_bool        (XDR *, bool_t *);
-extern bool_t  xdr_enum        (XDR *, enum_t *);
-extern bool_t  xdr_array       (XDR *, char **, u_int *, u_int, u_int, xdrproc_t);
-extern bool_t  xdr_bytes       (XDR *, char **, u_int *, u_int);
-extern bool_t  xdr_opaque      (XDR *, caddr_t, u_int);
-extern bool_t  xdr_string      (XDR *, char **, u_int);
-extern bool_t  xdr_union       (XDR *, enum_t *, char *, struct xdr_discrim *, xdrproc_t);
-extern unsigned long   xdr_sizeof (xdrproc_t, void *);
-extern bool_t  xdr_char        (XDR *, char *);
-extern bool_t  xdr_u_char      (XDR *, u_char *);
-extern bool_t  xdr_vector      (XDR *, char *, u_int, u_int, xdrproc_t);
-extern bool_t  xdr_float       (XDR *, float *);
-extern bool_t  xdr_double      (XDR *, double *);
-extern bool_t  xdr_reference   (XDR *, caddr_t *, u_int, xdrproc_t);
-extern bool_t  xdr_pointer     (XDR *, caddr_t *, u_int, xdrproc_t);
-extern bool_t  xdr_wrapstring  (XDR *, char **);
-extern void    xdr_free        (xdrproc_t, char *);
+extern bool_t  xdr_void(void);
+extern bool_t  xdr_int(XDR *, int *);
+extern bool_t  xdr_u_int(XDR *, u_int *);
+extern bool_t  xdr_long(XDR *, long *);
+extern bool_t  xdr_u_long(XDR *, u_long *);
+extern bool_t  xdr_short(XDR *, short *);
+extern bool_t  xdr_u_short(XDR *, u_short *);
+extern bool_t  xdr_int16_t(XDR *, int16_t *);
+extern bool_t  xdr_u_int16_t(XDR *, u_int16_t *);
+extern bool_t  xdr_int32_t(XDR *, int32_t *);
+extern bool_t  xdr_u_int32_t(XDR *, u_int32_t *);
+extern bool_t  xdr_int64_t(XDR *, int64_t *);
+extern bool_t  xdr_u_int64_t(XDR *, u_int64_t *);
+extern bool_t  xdr_bool(XDR *, bool_t *);
+extern bool_t  xdr_enum(XDR *, enum_t *);
+extern bool_t  xdr_array(XDR *, char **, u_int *, u_int, u_int, xdrproc_t);
+extern bool_t  xdr_bytes(XDR *, char **, u_int *, u_int);
+extern bool_t  xdr_opaque(XDR *, char *, u_int);
+extern bool_t  xdr_string(XDR *, char **, u_int);
+extern bool_t  xdr_union(XDR *, enum_t *, char *, const struct xdr_discrim *, xdrproc_t);
+extern bool_t  xdr_char(XDR *, char *);
+extern bool_t  xdr_u_char(XDR *, u_char *);
+extern bool_t  xdr_vector(XDR *, char *, u_int, u_int, xdrproc_t);
+extern bool_t  xdr_float(XDR *, float *);
+extern bool_t  xdr_double(XDR *, double *);
+extern bool_t  xdr_quadruple(XDR *, long double *);
+extern bool_t  xdr_reference(XDR *, char **, u_int, xdrproc_t);
+extern bool_t  xdr_pointer(XDR *, char **, u_int, xdrproc_t);
+extern bool_t  xdr_wrapstring(XDR *, char **);
+extern void    xdr_free(xdrproc_t, void *);
+extern bool_t  xdr_hyper(XDR *, quad_t *);
+extern bool_t  xdr_u_hyper(XDR *, u_quad_t *);
+extern bool_t  xdr_longlong_t(XDR *, quad_t *);
+extern bool_t  xdr_u_longlong_t(XDR *, u_quad_t *);
 __END_DECLS
 
 /*
@@ -282,7 +331,7 @@ struct netobj {
        char    *n_bytes;
 };
 typedef struct netobj netobj;
-extern bool_t   xdr_netobj (XDR *, struct netobj *);
+extern bool_t   xdr_netobj(XDR *, struct netobj *);
 
 /*
  * These are the public routines for the various implementations of
@@ -290,26 +339,27 @@ extern bool_t   xdr_netobj (XDR *, struct netobj *);
  */
 __BEGIN_DECLS
 /* XDR using memory buffers */
-extern void   xdrmem_create    (XDR *, char *, u_int, enum xdr_op);
+extern void   xdrmem_create(XDR *, char *, u_int, enum xdr_op);
 
-#ifdef _STDIO_H_
 /* XDR using stdio library */
-extern void   xdrstdio_create  (XDR *, FILE *, enum xdr_op);
+#ifdef _STDIO_H_
+extern void   xdrstdio_create(XDR *, FILE *, enum xdr_op);
 #endif
 
 /* XDR pseudo records for tcp */
-extern void   xdrrec_create    (XDR *, u_int, u_int, char *,
-                               int (*) (caddr_t, caddr_t, int),
-                               int (*) (caddr_t, caddr_t, int));
+extern void   xdrrec_create(XDR *, u_int, u_int, void *,
+                           int (*)(void *, void *, int),
+                           int (*)(void *, void *, int));
 
 /* make end of xdr record */
-extern bool_t xdrrec_endofrecord (XDR *, int);
+extern bool_t xdrrec_endofrecord(XDR *, int);
 
 /* move to beginning of next record */
-extern bool_t xdrrec_skiprecord        (XDR *);
+extern bool_t xdrrec_skiprecord(XDR *);
 
 /* true if no more input */
-extern bool_t xdrrec_eof       (XDR *);
+extern bool_t xdrrec_eof(XDR *);
+extern u_int xdrrec_readbytes(XDR *, caddr_t, u_int);
 __END_DECLS
 
 #endif /* !_RPC_XDR_H */
index 3244162..dc28fa8 100644 (file)
@@ -28,7 +28,7 @@
  *
  * @(#)bootparam_prot.x 1.2 87/06/24 Copyr 1987 Sun Micro
  * @(#)bootparam_prot.x        2.1 88/08/01 4.0 RPCSRC
- * $FreeBSD: src/include/rpcsvc/bootparam_prot.x,v 1.5 1999/08/27 23:45:07 peter Exp $
+ * $FreeBSD: src/include/rpcsvc/bootparam_prot.x,v 1.7 2003/05/04 02:51:42 obrien Exp $
  * $DragonFly: src/include/rpcsvc/bootparam_prot.x,v 1.2 2003/06/17 04:25:58 dillon Exp $
  */
 
@@ -48,7 +48,6 @@
 %#include <sys/errno.h>
 %#include <sys/param.h>
 %#include <sys/syslimits.h>
-%#include <sys/ucred.h>
 #endif
 
 const MAX_MACHINE_NAME  = 255;
index 76b2e18..e4708fe 100644 (file)
@@ -27,7 +27,7 @@
 % * 2550 Garcia Avenue
 % * Mountain View, California  94043
 % *
-% * $FreeBSD: src/include/rpcsvc/nis.x,v 1.3.2.1 2001/03/05 12:47:48 obrien Exp $
+% * $FreeBSD: src/include/rpcsvc/nis.x,v 1.6 2003/05/04 02:51:42 obrien Exp $
 % * $DragonFly: src/include/rpcsvc/nis.x,v 1.2 2003/06/17 04:25:58 dillon Exp $
 % */
 
@@ -188,7 +188,7 @@ struct ping_args {
 /* 
  * These are the type of entries that are stored in the transaction log, 
  * note that modifications will appear as two entries, for names, they have
- * a "OLD" entry followed by a "NEW" entry. For entries in tables, there
+ * an "OLD" entry followed by a "NEW" entry. For entries in tables, there
  * is a remove followed by an add. It is done this way so that we can read
  * the log backwards to back out transactions and forwards to propogate
  * updated.
index 14b8768..25970bd 100644 (file)
@@ -26,6 +26,7 @@
  * 2550 Garcia Avenue
  * Mountain View, California  94043
  *
+ * $FreeBSD: src/include/rpcsvc/nislib.h,v 1.4 2002/03/23 17:24:55 imp Exp $
  * $DragonFly: src/include/rpcsvc/nislib.h,v 1.2 2004/02/25 15:12:54 joerg Exp $
  */
 
@@ -35,8 +36,7 @@
 
 /*
  * This file contains the interfaces that are visible in the SunOS 5.x
- * implementation of NIS Plus. When using C++ the defined __cplusplus and
- * __STDC__ should both be true.
+ * implementation of NIS Plus.
  */
 
 #ifndef        _RPCSVC_NISLIB_H
index 0651fc9..24fb605 100644 (file)
@@ -1,7 +1,8 @@
 %/*
 % * @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro
 % * @(#)nlm_prot.x     2.1 88/08/01 4.0 RPCSRC
-% * $FreeBSD: src/include/rpcsvc/nlm_prot.x,v 1.8.2.1 2001/08/01 06:39:36 alfred Exp $
+% * $NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $
+% * $FreeBSD: src/include/rpcsvc/nlm_prot.x,v 1.9 2001/03/19 12:49:48 alfred Exp $
 % * $DragonFly: src/include/rpcsvc/nlm_prot.x,v 1.2 2003/06/17 04:25:58 dillon Exp $
 % */
 
@@ -15,7 +16,6 @@
 #ifdef RPC_HDR
 %#define LM_MAXSTRLEN  1024
 %#define MAXNAMELEN    LM_MAXSTRLEN+1
-%#include <sys/types.h>
 #endif
 
 /*
@@ -33,8 +33,8 @@ struct nlm_holder {
        bool exclusive;
        int svid;
        netobj oh;
-       u_int32_t l_offset;
-       u_int32_t l_len;
+       unsigned l_offset;
+       unsigned l_len;
 };
 
 union nlm_testrply switch (nlm_stats stat) {
@@ -62,9 +62,9 @@ struct nlm_lock {
        string caller_name<LM_MAXSTRLEN>;
        netobj fh;              /* identify a file */
        netobj oh;              /* identify owner of a lock */
-       int32_t svid;           /* generated from pid for svid */
-       u_int32_t l_offset;
-       u_int32_t l_len;
+       int svid;               /* generated from pid for svid */
+       unsigned l_offset;
+       unsigned l_len;
 };
 
 struct nlm_lockargs {
@@ -73,24 +73,24 @@ struct nlm_lockargs {
        bool exclusive;
        struct nlm_lock alock;
        bool reclaim;           /* used for recovering locks */
-       int32_t state;          /* specify local status monitor state */
+       int state;              /* specify local status monitor state */
 };
 
 struct nlm_cancargs {
-       netobj cookie;          
+       netobj cookie;
        bool block;
        bool exclusive;
        struct nlm_lock alock;
 };
 
 struct nlm_testargs {
-       netobj cookie;          
+       netobj cookie;
        bool exclusive;
        struct nlm_lock alock;
 };
 
 struct nlm_unlockargs {
-       netobj cookie;          
+       netobj cookie;
        struct nlm_lock alock;
 };
 
@@ -132,64 +132,80 @@ struct    nlm_shareargs {
 struct nlm_shareres {
        netobj  cookie;
        nlm_stats       stat;
-       int32_t sequence;
+       int     sequence;
 };
 
 struct nlm_notify {
        string name<MAXNAMELEN>;
-       int32_t state;
+       long state;
 };
 
+#ifdef RPC_HDR
+%/* definitions for NLM version 4 */
+#endif
 enum nlm4_stats {
-       nlm4_granted = 0,
-       nlm4_denied = 1,
-       nlm4_denied_nolocks = 2,
-       nlm4_blocked = 3,
-       nlm4_denied_grace_period = 4,
-       nlm4_deadlck = 5,
-       nlm4_rofs = 6,
-       nlm4_stale_fh = 7,
-       nlm4_fbig = 8,
-       nlm4_failed = 9
+       nlm4_granted                    = 0,
+       nlm4_denied                     = 1,
+       nlm4_denied_nolock              = 2,
+       nlm4_blocked                    = 3,
+       nlm4_denied_grace_period        = 4,
+       nlm4_deadlck                    = 5,
+       nlm4_rofs                       = 6,
+       nlm4_stale_fh                   = 7,
+       nlm4_fbig                       = 8,
+       nlm4_failed                     = 9
+};
+
+struct nlm4_stat {
+       nlm4_stats stat;
 };
 
 struct nlm4_holder {
-       bool    exclusive;
-       int32_t svid;
-       netobj  oh;
-       u_int64_t       l_offset;
-       u_int64_t       l_len;
+       bool exclusive;
+       u_int32_t svid;
+       netobj oh;
+       u_int64_t l_offset;
+       u_int64_t l_len;
 };
 
-struct nlm4_stat {
-       nlm4_stats stat;
+struct nlm4_lock {
+       string caller_name<MAXNAMELEN>;
+       netobj fh;
+       netobj oh;
+       u_int32_t svid;
+       u_int64_t l_offset;
+       u_int64_t l_len;
+};
+
+struct nlm4_share {
+       string caller_name<MAXNAMELEN>;
+       netobj fh;
+       netobj oh;
+       fsh_mode mode;
+       fsh_access access;
 };
 
 union nlm4_testrply switch (nlm4_stats stat) {
-       case nlm4_denied:
+       case nlm_denied:
                struct nlm4_holder holder;
        default:
                void;
 };
 
-struct nlm4_res {
-       netobj cookie;
-       nlm4_stat stat;
-};
-
 struct nlm4_testres {
        netobj cookie;
        nlm4_testrply stat;
 };
 
+struct nlm4_testargs {
+       netobj cookie;
+       bool exclusive;
+       struct nlm4_lock alock;
+};
 
-struct nlm4_lock {
-       string caller_name<LM_MAXSTRLEN>;
-       netobj fh;              /* identify a file */
-       netobj oh;              /* identify owner of a lock */
-       int32_t svid;           /* generated from pid for svid */
-       int64_t l_offset;
-       int64_t l_len;
+struct nlm4_res {
+       netobj cookie;
+       nlm4_stat stat;
 };
 
 struct nlm4_lockargs {
@@ -198,36 +214,21 @@ struct nlm4_lockargs {
        bool exclusive;
        struct nlm4_lock alock;
        bool reclaim;           /* used for recovering locks */
-       int32_t state;          /* specify local status monitor state */
+       int state;              /* specify local status monitor state */
 };
 
-
 struct nlm4_cancargs {
-       netobj cookie;          
+       netobj cookie;
        bool block;
        bool exclusive;
        struct nlm4_lock alock;
 };
 
-struct nlm4_testargs {
-       netobj cookie;          
-       bool exclusive;
-       struct nlm4_lock alock;
-};
-
 struct nlm4_unlockargs {
-       netobj cookie;          
+       netobj cookie;
        struct nlm4_lock alock;
 };
 
-struct nlm4_share {
-       string caller_name<LM_MAXSTRLEN>;
-       netobj  fh;
-       netobj  oh;
-       fsh_mode        mode;
-       fsh_access      access;
-};
-
 struct nlm4_shareargs {
        netobj  cookie;
        nlm4_share      share;
@@ -237,12 +238,18 @@ struct    nlm4_shareargs {
 struct nlm4_shareres {
        netobj  cookie;
        nlm4_stats      stat;
-       int32_t sequence;
+       int     sequence;
 };
 
-struct nlm4_notify {
-       string name<MAXNAMELEN>;
-       int32_t state;
+/*
+ * argument for the procedure called by rpc.statd when a monitored host
+ * status change.
+ * XXX assumes LM_MAXSTRLEN == SM_MAXSTRLEN
+ */
+struct nlm_sm_status {
+       string mon_name<LM_MAXSTRLEN>; /* name of host */
+       int state;                      /* new state */
+       opaque priv[16];                /* private data */
 };
 
 /*
@@ -250,6 +257,10 @@ struct     nlm4_notify {
  */
 
 program NLM_PROG {
+       version NLM_SM {
+               void NLM_SM_NOTIFY(struct nlm_sm_status) = 1;
+       } = 0;
+
        version NLM_VERS {
 
                nlm_testres     NLM_TEST(struct nlm_testargs) = 1;
@@ -285,39 +296,25 @@ program NLM_PROG {
                void            NLM_FREE_ALL(nlm_notify) = 23;
        } = 3;
 
-       version NLM4_VERS {
-               void            NLMPROC4_NULL(void) = 0;
-               
-               nlm4_testres NLMPROC4_TEST(struct nlm4_testargs) = 1;
-
-               nlm4_res        NLMPROC4_LOCK(struct nlm4_lockargs) = 2;
-
-               nlm4_res        NLMPROC4_CANCEL(struct nlm4_cancargs) = 3;
-               nlm4_res        NLMPROC4_UNLOCK(struct nlm4_unlockargs) = 4;
-
-               /*
-                * remote lock manager call-back to grant lock
-                */
-               nlm4_res                NLMPROC4_GRANTED(struct nlm4_testargs)= 5;
-               /*
-                * message passing style of requesting lock
-                */
-               void            NLMPROC4_TEST_MSG(struct nlm4_testargs) = 6;
-               void            NLMPROC4_LOCK_MSG(struct nlm4_lockargs) = 7;
-               void            NLMPROC4_CANCEL_MSG(struct nlm4_cancargs) =8;
-               void            NLMPROC4_UNLOCK_MSG(struct nlm4_unlockargs) = 9;
-               void            NLMPROC4_GRANTED_MSG(struct nlm4_testargs) = 10;
-               void            NLMPROC4_TEST_RES(nlm4_testres) = 11;
-               void            NLMPROC4_LOCK_RES(nlm4_res) = 12;
-               void            NLMPROC4_CANCEL_RES(nlm4_res) = 13;
-               void            NLMPROC4_UNLOCK_RES(nlm4_res) = 14;
-               void            NLMPROC4_GRANTED_RES(nlm4_res) = 15;
-               
-               nlm4_shareres   NLMPROC4_SHARE(nlm4_shareargs) = 20;
-               nlm4_shareres   NLMPROC4_UNSHARE(nlm4_shareargs) = 21;
-               nlm4_res        NLMPROC4_NM_LOCK(nlm4_lockargs) = 22;
-               void            NLMPROC4_FREE_ALL(nlm4_notify) = 23;
+       version NLM_VERS4 {
+               nlm4_testres NLM4_TEST(nlm4_testargs) = 1;
+               nlm4_res NLM4_LOCK(nlm4_lockargs) = 2;
+               nlm4_res NLM4_CANCEL(nlm4_cancargs) = 3;
+               nlm4_res NLM4_UNLOCK(nlm4_unlockargs) = 4;
+               nlm4_res NLM4_GRANTED(nlm4_testargs) = 5;
+               void NLM4_TEST_MSG(nlm4_testargs) = 6;
+               void NLM4_LOCK_MSG(nlm4_lockargs) = 7;
+               void NLM4_CANCEL_MSG(nlm4_cancargs) = 8;
+               void NLM4_UNLOCK_MSG(nlm4_unlockargs) = 9;
+               void NLM4_GRANTED_MSG(nlm4_testargs) = 10;
+               void NLM4_TEST_RES(nlm4_testres) = 11;
+               void NLM4_LOCK_RES(nlm4_res) = 12;
+               void NLM4_CANCEL_RES(nlm4_res) = 13;
+               void NLM4_UNLOCK_RES(nlm4_res) = 14;
+               void NLM4_GRANTED_RES(nlm4_res) = 15;
+               nlm4_shareres NLM4_SHARE(nlm4_shareargs) = 20;
+               nlm4_shareres NLM4_UNSHARE(nlm4_shareargs) = 21;
+               nlm4_res NLM4_NM_LOCK(nlm4_lockargs) = 22;
+               void NLM4_FREE_ALL(nlm_notify) = 23;
        } = 4;
-
 } = 100021;
-
index fb167b8..c3a6f03 100644 (file)
@@ -27,6 +27,7 @@
 % * Mountain View, California  94043
 % *
 % * @(#)pmap_prot.x    1.6     94/04/29 SMI
+% * $FreeBSD: src/include/rpcsvc/pmap_prot.x,v 1.3 2003/05/04 02:51:42 obrien Exp $
 % * $DragonFly: src/include/rpcsvc/pmap_prot.x,v 1.2 2003/06/17 04:25:58 dillon Exp $
 % */
 %/*
@@ -143,11 +144,7 @@ typedef pm__list *pmaplist_ptr;            /* results of PMAPPROC_DUMP */
 %#ifdef __cplusplus
 %extern "C" {
 %#endif
-%#ifdef __STDC__
 %extern  bool_t xdr_pmaplist(XDR *, pmaplist**);
-%#else /* K&R C */
-%bool_t xdr_pmaplist();
-%#endif
 %#ifdef        __cplusplus
 %}
 %#endif
@@ -263,11 +260,7 @@ program PMAPPROG {
 %      long unsigned pm_port;
 %};
 %typedef struct pmap PMAP;
-%#ifdef __STDC__
 %extern bool_t xdr_pmap (XDR *, struct pmap *);
-%#else
-%extern bool_t xdr_pmap ();
-%#endif
 %
 %struct pmaplist {
 %      struct pmap pml_map;
index c0505da..c60a902 100644 (file)
@@ -28,7 +28,7 @@
  *
  * @(#)rstat.x 1.2 87/09/18 Copyr 1987 Sun Micro
  * @(#)rstat.x 2.2 88/08/01 4.0 RPCSRC
- * $FreeBSD: src/include/rpcsvc/rstat.x,v 1.6 1999/08/27 23:45:11 peter Exp $
+ * $FreeBSD: src/include/rpcsvc/rstat.x,v 1.8 2003/05/04 02:51:42 obrien Exp $
  * $DragonFly: src/include/rpcsvc/rstat.x,v 1.2 2003/06/17 04:25:58 dillon Exp $
  */
 
@@ -145,3 +145,10 @@ program RSTATPROG {
                RSTATPROC_HAVEDISK(void) = 2;
        } = 1;
 } = 100001;
+
+#ifdef RPC_HDR
+%
+%enum clnt_stat rstat(char *, struct statstime *);
+%int havedisk(char *);
+%
+#endif
index 8ccef69..96caa57 100644 (file)
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/include/rpcsvc/yp_prot.h,v 1.10.2.1 2002/02/15 00:46:53 des Exp $
+ * $FreeBSD: src/include/rpcsvc/yp_prot.h,v 1.13 2005/12/06 02:01:06 peter Exp $
  * $DragonFly: src/include/rpcsvc/yp_prot.h,v 1.3 2004/12/15 09:44:47 dillon Exp $
  */
 
@@ -96,7 +96,7 @@ typedef struct {
 struct ypmap_parms {
        char *domain;
        char *map;
-       u_long ordernum;
+       u_int ordernum;
        char *owner;
 };
 
@@ -113,9 +113,9 @@ struct ypreq_nokey {
 
 struct ypreq_xfr {
        struct ypmap_parms map_parms;
-       u_long transid;
-       u_long proto;
-       u_short port;
+       u_int transid;
+       u_int proto;
+       u_int port;
 };
 #define ypxfr_domain   map_parms.domain
 #define ypxfr_map      map_parms.map
@@ -123,33 +123,33 @@ struct ypreq_xfr {
 #define ypxfr_owner    map_parms.owner
 
 struct ypresp_val {
-       u_long status;
+       u_int status;
        datum valdat;
 };
 
 struct ypresp_key_val {
-       u_long status;
+       u_int status;
        datum keydat;
        datum valdat;
 };
 
 struct ypresp_master {
-       u_long status;
+       u_int status;
        char *master;
 };
 
 struct ypresp_order {
-       u_long status;
-       u_long ordernum;
+       u_int status;
+       u_int ordernum;
 };
 
 struct ypmaplist {
-       char ypml_name[YPMAXMAP + 1];
+       char *ypml_name;
        struct ypmaplist *ypml_next;
 };
 
 struct ypresp_maplist {
-       u_long status;
+       u_int status;
        struct ypmaplist *list;
 };
 
@@ -241,7 +241,7 @@ struct ypbind_binding {
 struct ypbind_resp {
        enum ypbind_resptype    ypbind_status;
        union {
-               u_long                  ypbind_error;
+               u_int                   ypbind_error;
                struct ypbind_binding   ypbind_bindinfo;
        } ypbind_respbody;
 };
@@ -257,7 +257,7 @@ struct ypbind_resp {
 struct ypbind_setdom {
        char ypsetdom_domain[YPMAXDOMAIN + 1];
        struct ypbind_binding ypsetdom_binding;
-       u_short ypsetdom_vers;
+       u_int ypsetdom_vers;
 };
 #define ypsetdom_addr ypsetdom_binding.ypbind_binding_addr
 #define ypsetdom_port ypsetdom_binding.ypbind_binding_port
@@ -282,8 +282,8 @@ struct ypbind_setdom {
 #define YPPUSHPROC_XFRRESP     ((u_long)1)
 
 struct yppushresp_xfr {
-       u_long  transid;
-       u_long  status;
+       u_int   transid;
+       u_int   status;
 };
 
 /* yppush status value in yppushresp_xfr.status */
index e93d401..dd5d096 100644 (file)
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/include/rpcsvc/ypclnt.h,v 1.11.2.1 2002/02/15 00:46:53 des Exp $
+ * $FreeBSD: src/include/rpcsvc/ypclnt.h,v 1.16 2003/10/26 16:35:11 peter Exp $
  * $DragonFly: src/include/rpcsvc/ypclnt.h,v 1.7 2005/04/27 12:26:59 joerg Exp $
  */
 
@@ -67,6 +67,8 @@ struct ypall_callback {
 };
 
 struct dom_binding;
+struct ypmaplist;
+struct ypall_callback;
 
 __BEGIN_DECLS
 int     yp_bind(char *);
index f43a496..5c6ae7b 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: /repoman/r/ncvs/src/lib/libc/gen/_pthread_stubs.c,v 1.1 2001/01/24 12:59:20 deischen Exp $
+ * $FreeBSD: src/lib/libc/gen/_pthread_stubs.c,v 1.5 2001/06/11 23:18:22 iedowse Exp $
  * $DragonFly: src/lib/libc/gen/_pthread_stubs.c,v 1.4 2005/05/09 12:43:40 davidxu Exp $
  */
 
+#include <signal.h>
 #include <pthread.h>
+#include <pthread_np.h>
 
+int    _pthread_cond_init_stub(pthread_cond_t *, const pthread_condattr_t *);
+int    _pthread_cond_signal_stub(pthread_cond_t *);
+int    _pthread_cond_wait_stub(pthread_cond_t *, pthread_mutex_t *);
 void   *_pthread_getspecific_stub(pthread_key_t);
 int    _pthread_key_create_stub(pthread_key_t *, void (*)(void *));
 int    _pthread_key_delete_stub(pthread_key_t);
+int    _pthread_main_np_stub(void);
 int    _pthread_mutex_destroy_stub(pthread_mutex_t *);
 int    _pthread_mutex_init_stub(pthread_mutex_t *,
                                 const pthread_mutexattr_t *);
@@ -42,7 +48,16 @@ int  _pthread_mutexattr_init_stub(pthread_mutexattr_t *);
 int    _pthread_mutexattr_destroy_stub(pthread_mutexattr_t *);
 int    _pthread_mutexattr_settype_stub(pthread_mutexattr_t *, int);
 int    _pthread_once_stub(pthread_once_t *, void (*)(void));
+int    _pthread_rwlock_init_stub(pthread_rwlock_t *,
+                                 const pthread_rwlockattr_t *);
+int    _pthread_rwlock_destroy_stub(pthread_rwlock_t *);
+int    _pthread_rwlock_rdlock_stub(pthread_rwlock_t *);
+int    _pthread_rwlock_tryrdlock_stub(pthread_rwlock_t *);
+int    _pthread_rwlock_trywrlock_stub(pthread_rwlock_t *);
+int    _pthread_rwlock_unlock_stub(pthread_rwlock_t *);
+int    _pthread_rwlock_wrlock_stub(pthread_rwlock_t *);
 int    _pthread_setspecific_stub(pthread_key_t, const void *);
+int    _pthread_sigmask_stub(int, const sigset_t *, sigset_t *);
 
 /* define a null pthread structure just to satisfy _pthread_self */
 struct pthread {
@@ -59,20 +74,51 @@ static struct pthread main_thread;
  * between application locks and libc locks (threads holding the
  * latter can't be allowed to exit/terminate).
  */
-__weak_reference(_pthread_getspecific_stub,_pthread_getspecific);
-__weak_reference(_pthread_key_create_stub,_pthread_key_create);
-__weak_reference(_pthread_key_delete_stub,_pthread_key_delete);
-__weak_reference(_pthread_mutex_destroy_stub,_pthread_mutex_destroy);
-__weak_reference(_pthread_mutex_init_stub,_pthread_mutex_init);
-__weak_reference(_pthread_mutex_lock_stub,_pthread_mutex_lock);
-__weak_reference(_pthread_mutex_trylock_stub,_pthread_mutex_trylock);
-__weak_reference(_pthread_mutex_unlock_stub,_pthread_mutex_unlock);
-__weak_reference(_pthread_mutexattr_init_stub,_pthread_mutexattr_init);
-__weak_reference(_pthread_mutexattr_destroy_stub,_pthread_mutexattr_destroy);
-__weak_reference(_pthread_mutexattr_settype_stub,_pthread_mutexattr_settype);
-__weak_reference(_pthread_once_stub,_pthread_once);
-__weak_reference(_pthread_setspecific_stub,_pthread_setspecific);
-__weak_reference(_pthread_self_stub,_pthread_self);
+__weak_reference(_pthread_cond_init_stub,      _pthread_cond_init);
+__weak_reference(_pthread_cond_signal_stub,    _pthread_cond_signal);
+__weak_reference(_pthread_cond_wait_stub,      _pthread_cond_wait);
+__weak_reference(_pthread_getspecific_stub,    _pthread_getspecific);
+__weak_reference(_pthread_key_create_stub,     _pthread_key_create);
+__weak_reference(_pthread_key_delete_stub,     _pthread_key_delete);
+__weak_reference(_pthread_main_np_stub,                _pthread_main_np);
+__weak_reference(_pthread_mutex_destroy_stub,  _pthread_mutex_destroy);
+__weak_reference(_pthread_mutex_init_stub,     _pthread_mutex_init);
+__weak_reference(_pthread_mutex_lock_stub,     _pthread_mutex_lock);
+__weak_reference(_pthread_mutex_trylock_stub,  _pthread_mutex_trylock);
+__weak_reference(_pthread_mutex_unlock_stub,   _pthread_mutex_unlock);
+__weak_reference(_pthread_mutexattr_init_stub, _pthread_mutexattr_init);
+__weak_reference(_pthread_mutexattr_destroy_stub, _pthread_mutexattr_destroy);
+__weak_reference(_pthread_mutexattr_settype_stub, _pthread_mutexattr_settype);
+__weak_reference(_pthread_once_stub,           _pthread_once);
+__weak_reference(_pthread_self_stub,           _pthread_self);
+__weak_reference(_pthread_rwlock_init_stub,    _pthread_rwlock_init);
+__weak_reference(_pthread_rwlock_rdlock_stub,  _pthread_rwlock_rdlock);
+__weak_reference(_pthread_rwlock_tryrdlock_stub, _pthread_rwlock_tryrdlock);
+__weak_reference(_pthread_rwlock_trywrlock_stub, _pthread_rwlock_trywrlock);
+__weak_reference(_pthread_rwlock_unlock_stub,  _pthread_rwlock_unlock);
+__weak_reference(_pthread_rwlock_wrlock_stub,  _pthread_rwlock_wrlock);
+__weak_reference(_pthread_setspecific_stub,    _pthread_setspecific);
+__weak_reference(_pthread_sigmask_stub,                _pthread_sigmask);
+
+int
+_pthread_cond_init_stub(pthread_cond_t *cond __unused,
+                       const pthread_condattr_t *cond_attr __unused)
+{
+       return (0);
+}
+
+int
+_pthread_cond_signal_stub(pthread_cond_t *cond __unused)
+{
+       return (0);
+}
+
+int
+_pthread_cond_wait_stub(pthread_cond_t *cond __unused,
+                       pthread_mutex_t *mutex __unused)
+{
+       return (0);
+}
 
 void *
 _pthread_getspecific_stub(pthread_key_t key __unused)
@@ -93,6 +139,12 @@ _pthread_key_delete_stub(pthread_key_t key __unused)
        return (0);
 }
 
+int
+_pthread_main_np_stub(void)
+{
+       return (-1);
+}
+
 int
 _pthread_mutex_destroy_stub(pthread_mutex_t *mattr __unused)
 {
@@ -150,7 +202,50 @@ _pthread_once_stub(pthread_once_t *once_control __unused,
        return (0);
 }
 
-struct pthread *
+int
+_pthread_rwlock_init_stub(pthread_rwlock_t *rwlock __unused,
+                         const pthread_rwlockattr_t *attr __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_destroy_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_rdlock_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_tryrdlock_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_trywrlock_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_unlock_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+int
+_pthread_rwlock_wrlock_stub(pthread_rwlock_t *rwlock __unused)
+{
+       return (0);
+}
+
+pthread_t
 _pthread_self_stub(void)
 {
        return (&main_thread);
@@ -162,3 +257,9 @@ _pthread_setspecific_stub(pthread_key_t key __unused,
        return (0);
 }
 
+int
+_pthread_sigmask_stub(int how __unused, const sigset_t *set __unused,
+                     sigset_t *oset __unused)
+{
+       return (0);
+}
index 91fd5cb..508fcd8 100644 (file)
@@ -59,6 +59,7 @@
 #define                listen                          _listen
 #define                nanosleep                       _nanosleep
 #define                open                            _open
+#define                poll                            _poll
 #define                pthread_atfork                  _pthread_atfork
 #define                pthread_attr_destroy            _pthread_attr_destroy
 #define                pthread_attr_get_np             _pthread_attr_get_np
 #define                msync                           _msync
 #define                nfssvc                          _nfssvc
 #define                pause                           _pause
-#define                poll                            _poll
 #define                sched_yield                     _sched_yield
 #define                sendfile                        _sendfile
 #define                shutdown                        _shutdown
diff --git a/lib/libc/include/reentrant.h b/lib/libc/include/reentrant.h
new file mode 100644 (file)
index 0000000..c9feac4
--- /dev/null
@@ -0,0 +1,136 @@
+/*-
+ * Copyright (c) 1997,98 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by J.T. Conklin.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: src/lib/libc/include/reentrant.h,v 1.3 2004/02/25 21:03:45 green Exp $
+ * $DragonFly$
+ */
+
+/*
+ * Requirements:
+ *
+ * 1. The thread safe mechanism should be lightweight so the library can
+ *    be used by non-threaded applications without unreasonable overhead.
+ *
+ * 2. There should be no dependency on a thread engine for non-threaded
+ *    applications.
+ *
+ * 3. There should be no dependency on any particular thread engine.
+ *
+ * 4. The library should be able to be compiled without support for thread
+ *    safety.
+ *
+ *
+ * Rationale:
+ *
+ * One approach for thread safety is to provide discrete versions of the
+ * library: one thread safe, the other not.  The disadvantage of this is
+ * that libc is rather large, and two copies of a library which are 99%+
+ * identical is not an efficent use of resources.
+ *
+ * Another approach is to provide a single thread safe library.  However,
+ * it should not add significant run time or code size overhead to non-
+ * threaded applications.
+ *
+ * Since the NetBSD C library is used in other projects, it should be
+ * easy to replace the mutual exclusion primitives with ones provided by
+ * another system.  Similarly, it should also be easy to remove all
+ * support for thread safety completely if the target environment does
+ * not support threads.
+ *
+ *
+ * Implementation Details:
+ *
+ * The mutex primitives used by the library (mutex_t, mutex_lock, etc.)
+ * are macros which expand to the cooresponding primitives provided by
+ * the thread engine or to nothing.  The latter is used so that code is
+ * not unreasonably cluttered with #ifdefs when all thread safe support
+ * is removed.
+ *
+ * The mutex macros can be directly mapped to the mutex primitives from
+ * pthreads, however it should be reasonably easy to wrap another mutex
+ * implementation so it presents a similar interface.
+ *
+ * Stub implementations of the mutex functions are provided with *weak*
+ * linkage.  These functions simply return success.  When linked with a
+ * thread library (i.e. -lpthread), the functions will override the
+ * stubs.
+ */
+
+#include <pthread.h>
+#include <pthread_np.h>
+#include "libc_private.h"
+
+#define mutex_t                        pthread_mutex_t
+#define cond_t                 pthread_cond_t
+#define rwlock_t               pthread_rwlock_t
+#define once_t                 pthread_once_t
+
+#define thread_key_t           pthread_key_t
+#define MUTEX_INITIALIZER      PTHREAD_MUTEX_INITIALIZER
+#define RWLOCK_INITIALIZER     PTHREAD_RWLOCK_INITIALIZER
+#define ONCE_INITIALIZER       PTHREAD_ONCE_INIT
+
+#define mutex_init(m, a)       _pthread_mutex_init(m, a)
+#define mutex_lock(m)          if (__isthreaded) \
+                               _pthread_mutex_lock(m)
+#define mutex_unlock(m)                if (__isthreaded) \
+                               _pthread_mutex_unlock(m)
+#define mutex_trylock(m)       (__isthreaded ? 0 : _pthread_mutex_trylock(m))
+
+#define cond_init(c, a, p)     _pthread_cond_init(c, a)
+#define cond_signal(m)         if (__isthreaded) \
+                               _pthread_cond_signal(m)
+#define cond_broadcast(m)      if (__isthreaded) \
+                               _pthread_cond_broadcast(m)
+#define cond_wait(c, m)                if (__isthreaded) \
+                               _pthread_cond_wait(c, m)
+
+#define rwlock_init(l, a)      _pthread_rwlock_init(l, a)
+#define rwlock_rdlock(l)       if (__isthreaded) \
+                               _pthread_rwlock_rdlock(l)
+#define rwlock_wrlock(l)       if (__isthreaded) \
+                               _pthread_rwlock_wrlock(l)
+#define rwlock_unlock(l)       if (__isthreaded) \
+                               _pthread_rwlock_unlock(l)
+
+#define thr_keycreate(k, d)    _pthread_key_create(k, d)
+#define thr_setspecific(k, p)  _pthread_setspecific(k, p)
+#define thr_getspecific(k)     _pthread_getspecific(k)
+#define thr_sigsetmask(f, n, o)        _pthread_sigmask(f, n, o)
+
+#define thr_once(o, i)         _pthread_once(o, i)
+#define thr_self()             _pthread_self()
+#define thr_exit(x)            _pthread_exit(x)
+#define thr_main()             _pthread_main_np()
index 3d3d454..8b20b57 100644 (file)
@@ -54,6 +54,7 @@
 #undef         listen
 #undef         nanosleep
 #undef         open
+#undef         poll
 #undef         pthread_atfork
 #undef         pthread_attr_destroy
 #undef         pthread_attr_get_np
 #undef         msync
 #undef         nfssvc
 #undef         pause
-#undef         poll
 #undef         pthread_rwlock_destroy
 #undef         pthread_rwlock_init
 #undef         pthread_rwlock_rdlock
diff --git a/lib/libc/rpc/LICENSE b/lib/libc/rpc/LICENSE
new file mode 100644 (file)
index 0000000..5b9220e
--- /dev/null
@@ -0,0 +1,336 @@
+$FreeBSD: src/lib/libc/rpc/LICENSE,v 1.1 2002/07/11 16:23:04 alfred Exp $
+$DragonFly$
+
+Sun Industry Standards Source License 1.0
+
+DEFINITIONS
+
+1.1.  "Commercial Use" means distribution or otherwise
+making the Original Code available to a third party.
+
+1.2.  "Contributor Version" means the combination of the
+Original Code, and the Modifications made by that particular
+Contributor.
+
+1.3.  "Electronic Distribution Mechanism" means a mechanism
+generally accepted in the software development community for
+the electronic transfer of data.
+
+1.4.  "Executable" means Original Code in any form other
+than Source Code.
+
+1.5.  "Initial Developer" means the individual or entity
+identified as the Initial Developer in the Source Code
+notice required by 2 (Exhibit A)
+
+1.6.  "Larger Work" means a work which combines Original
+Code or portions thereof with code not governed by the terms
+of this License.
+
+1.7.  "License" means this document.
+
+1.8.  "Licensable" means having the right to grant, to the
+maximum extent possible, whether at the time of the initial
+grant or subsequently acquired, any and all of the rights
+conveyed herein.
+
+1.9.  "Modifications" means any addition to or deletion from
+the substance or structure of either the Original Code or
+any previous Modifications.  A Modification is:
+
+A.  Any addition to or deletion from the contents of a file
+containing Original Code or previous Modifications.
+
+B.  Any new file that contains any part of the Original Code
+or previous Modifications.  .
+
+1.10.  "Original Code" means Source Code of computer
+software code which is described in the Source Code notice
+required by Exhibit A as Original Code.
+
+1.11.  "Patent Claims" means any patent claims, now owned or
+hereafter acquired, including without limitation, method,
+process, and apparatus claims, in any patent Licensable by
+grantor.
+
+1.12.  "Source Code" means the preferred form of the
+Original Code for making modifications to it, including all
+modules it contains, plus any associated interface
+definition files, or scripts used to control compilation and
+installation of an Executable.
+
+1.13.  "Standards" means the standard identified in Exhibit
+B or a subsequent version of such standard.
+
+1.14.  "You" or "Your" means an individual or a legal entity
+exercising rights under, and complying with all of the terms
+of, this License or a future version of this License issued
+under Section 6.1.  For legal entities, "You" includes any
+entity which controls, is controlled by, or is under common
+control with You.  For purposes of this definition,
+"control" means (a) the power, direct or indirect, to cause
+the direction or management of such entity, whether by
+contract or otherwise, or (b) ownership of more than fifty
+percent (50%) of the outstanding shares or beneficial
+ownership of such entity.
+
+2.0 SOURCE CODE LICENSE
+
+2.1 The Initial Developer Grant:  The Initial Developer
+hereby grants You a world-wide, royalty-free, non-exclusive
+license, subject to third party intellectual property
+claims:
+
+a) under intellectual property rights (other than patent or
+trademark) Licensable by Initial Developer to use,
+reproduce, modify, display, perform, sub license and
+distribute the Original Code (or portions thereof )with or
+without Modifications, and/or as part of a Larger Work; and
+
+b) under Patents Claims infringed by the making, using or
+selling of Original Code, to make, have made, use, practice,
+sell, and offer for sale, and/or otherwise dispose of the
+Original Code (or portions thereof).
+
+c) the licenses granted in this Section 2.1(a ) and (b) are
+effective on the date Initial Developer first distributes
+Original Code under the terms of this License.
+
+d) Notwithstanding Section 2.1(b )above, no patent license
+is granted:  1) for code that You delete from the Original
+Code; 2) separate from the Original Code; or 3) for
+infringements caused by:  i) the modification of the
+Original Code or
+
+ii) the combination of the Original Code with other software
+or devices, including but not limited to Modifications.
+
+3.0 DISTRIBUTION OBLIGATIONS
+
+3.1 Application of License.  The Source Code version of
+Original Code may be distributed only under the terms of
+this License or a future version of this License released
+under Section 6.1, and You must include a copy of this
+License with every copy of the Source Code You distribute.
+You may not offer or impose any terms on any Source Code
+version that alters or restricts the applicable version of
+this License or the recipient's rights hereunder.  Your
+license for shipment of the Contributor Version is
+conditioned upon your full compliance with this Section.
+The Modifications which you create must comply with all
+requirements set out by the Standards body in effect 120
+days before You ship the Contributor Version.  In the event
+that the Modifications do not meet such requirements, You
+agree to publish (i) any deviation from the Standards
+protocol resulting from implementation of your Modifications
+and (ii) a reference implementation of Your Modifications,
+and to make any such deviation and reference implementation
+available to all third parties under the same terms as the
+license on a royalty free basis within thirty (30) days of
+Your first customer shipment of Your Modifications.
+
+3.2 Required Notices.  You must duplicate the notice in
+Exhibit A in each file of the Source Code.  If it is not
+possible to put such notice in a particular Source Code file
+due to its structure, then You must include such notice in a
+location (such as a relevant directory ) where a user would
+be likely to look for such a notice.  If You created one or
+more Modifications ) You may add your name as a Contributor
+to the notice described in Exhibit A.  You must also
+duplicate this License in any documentation for the Source
+Code where You describe recipients' rights or ownership
+rights relating to Initial Code.  You may choose to offer,
+and to charge a fee for, warranty, support, indemnity or
+liability obligations to one or more recipients of Your
+version of the Code.  However, You may do so only
+
+on Your own behalf, and not on behalf of the Initial
+Developer.  You must make it absolutely clear than any such
+warranty, support, indemnity or liability obligation is
+offered by You alone, and You hereby agree to indemnify the
+Initial Developer for any liability incurred by the Initial
+Developer as a result of warranty, support, indemnity or
+liability terms You offer.
+
+3.3 Distribution of Executable Versions.  You may distribute
+Original Code in Executable and Source form only if the
+requirements of Section 3.1 and 3.2 have been met for that
+Original Code, and if You include a notice stating that the
+Source Code version of the Original Code is available under
+the terms of this License.  The notice must be conspicuously
+included in any notice in an Executable or Source versions,
+related documentation or collateral in which You describe
+recipients' rights relating to the Original Code.  You may
+distribute the Executable and Source versions of Your
+version of the Code or ownership rights under a license of
+Your choice, which may contain terms different from this
+License, provided that You are in compliance with the terms
+of this License.  If You distribute the Executable and
+Source versions under a different license You must make it
+absolutely clear that any terms which differ from this
+License are offered by You alone, not by the Initial
+Developer .  You hereby agree to indemnify the Initial
+Developer for any liability incurred by the Initial
+Developer as a result of any such terms You offer .
+
+3.4 Larger Works.  You may create a Larger Work by combining
+Original Code with other code not governed by the terms of
+this License and distribute the Larger Work as a single
+product.  In such a case, You must make sure the
+requirements of this License are fulfilled for the Original
+Code.
+
+4.0 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION
+
+If it is impossible for You to comply with any of the terms
+of this License with respect to some or all of the Original
+Code due to statute, judicial order, or regulation then You
+must:
+
+a) comply with the terms of this License to the maximum
+extent possible; and
+
+b) describe the limitations and the code they affect.  Such
+description must be included in the LEGAL file described in
+Section 3.2 and must be included with all distributions of
+the Source Code.  Except to the extent prohibited by statute
+or regulation, such description must be sufficiently
+detailed for a recipient of ordinary skill to be able to
+understand it.
+
+5.0 APPLICATION OF THIS LICENSE This License applies to code
+to which the Initial Developer has attached the notice in
+Exhibit A and to related Modifications as set out in Section
+3.1.
+
+6.0 VERSIONS OF THE LICENSE
+
+6.1 New Versions.  Sun Microsystems, Inc.  Sun may publish
+revised and/or new versions of the License from time to
+time.  Each version will be given a distinguishing version
+number .
+
+6.2 Effect of New Versions.  Once Original Code has been
+published under a particular version of the License, You may
+always continue to use it under the terms of that version.
+You may also choose to use such Original Code under the
+terms of any subsequent version of the License published by
+Sun.  No one other than Sun has the right to modify the
+terms applicable to Original Code.
+
+7.  DISCLAIMER OF W ARRANTY.  ORIGINAL CODE IS PROVIDED
+UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF
+ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT
+LIMITATION, WARRANTIES THAT THE ORIGINAL CODE IS FREE OF
+DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
+NON-INFRINGING.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE ORIGINAL CODE IS WITH YOU.  SHOULD ANY
+ORIGINAL CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+INITIAL DEVELOPER )ASSUME THE COST OF ANY NECESSARY
+SERVICING, REPAIR OR CORRECTION.  THIS DISCLAIMER OF
+WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.  NO
+USE OF ANY ORIGINAL CODE IS AUTHORIZED HEREUNDER EXCEPT
+UNDER THIS DISCLAIMER.
+
+8.0 TERMINATION
+
+8.1 This License and the rights granted hereunder will
+terminate automatically if You fail to comply with terms
+herein and fail to cure such breach within 30 days of
+becoming aware of the breach.  All sublicenses to the
+Original Code which are properly granted shall survive any
+termination of this License.  Provisions which, by their
+nature, must remain in effect beyond the termination of this
+License shall survive.
+
+8.2 .In the event of termination under Section 8.1 above,
+all end user license agreements (excluding distributors and
+resellers) which have been validly granted by You or any
+distributor hereunder prior to termination shall survive
+termination.
+
+9.0 LIMIT OF LIABILITY UNDER NO CIRCUMSTANCES AND UNDER NO
+LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE) ,CONTRACT,
+OR OTHER WISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER
+CONTRIBUTOR, OR ANY DISTRIBUTOR OF ORIGINAL CODE, OR ANY
+SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
+LOSS OF GOOD WILL, WORK STOPPAGE, COMPUTER FAILURE OR
+MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR
+LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
+POSSIBILITY OF SUCH DAMAGES.  THIS LIMITATION OF LIABILITY
+SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT
+APPLICABLE LAW PROHIBITS SUCH LIMITATION.  SOME
+JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
+INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND
+LIMITATION MAY NOT APPLY TO YOU.
+
+10.0 U .S.  GOVERNMENT END USERS U.S.  Government:  If this
+Software is being acquired by or on behalf of the U.S.
+Government or by a U.S.  Government prime contractor or
+subcontractor (at any tier), then the Government's rights in
+the Software and accompanying documentation shall be only as
+set forth in this license; this is in accordance with 48 C.F
+.R.  227.7201 through 227.7202-4 (for Department of Defense
+(DoD) acquisitions )and with 48 C.F.R.2.101 and 12.212( for
+non-DoD acquisitions).
+
+11.0 MISCELLANEOUS This License represents the complete
+agreement concerning subject matter hereof.  If any
+provision of this License is held to be unenforceable, such
+provision shall be reformed only to the extent necessary to
+make it enforceable.  This License shall be governed by
+California law provisions (except to the extent applicable
+law, if any, provides otherwise), excluding its
+conflict-of-law provisions.  With respect to disputes in
+which at least one party is a citizen of, or an entity
+chartered or registered to do business in the United States
+of America, any litigation relating to this License shall be
+subject to the jurisdiction of the Federal Courts of the
+Northern District of California, with venue lying in Santa
+Clara County, California, with the losing party responsible
+for costs, including without limitation, court costs and
+reasonable attorneys fees and expenses.  The application of
+the United Nations Convention on Contracts for the
+International Sale of Goods is expressly excluded.  Any law
+or regulation which provides that the language of a contract
+shall be construed against the drafter shall not apply to
+this License.
+
+EXHIBIT A - Sun Standards
+
+"The contents of this file are subject to the Sun Standards
+License Version 1.0 the (the "License";) You may not use
+this file except in compliance with the License.  You may
+obtain a copy of the License at
+_______________________________.
+
+    Software distributed under the License is distributed on
+an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+express or implied.  See the License for the specific
+language governing rights and limitations under the License.
+
+The Original Code is Copyright 1998 by Sun Microsystems, Inc
+
+The Initial Developer of the Original Code is:  Sun
+Microsystems, Inc.
+
+Portions created by _____________________________ are
+Copyright ______________________________.
+
+All Rights Reserved.
+
+Contributors:  ______________________________________.
+
+EXHIBIT B - Sun Standards
+
+The Standard is defined as the following IETF RFCs:
+
+RFC1831:  RPC:  Remote Procedure Call Protocol Specification
+Version 2 RFC1832:  XDR:  External Data REpresentation
+Standard RFC1833:  Binding Protocols for ONC RPC Version 2
+RFC2078:  Generic Security Service Application Program
+Interface, Version 2 RFC2203:  RPCSEC_GSS Protocol
+Specification RFC2695:  Authentication Mechanisms for ONC RPC
index d4dbe5d..37f53a8 100644 (file)
@@ -1,26 +1,33 @@
-#      @(#)Makefile    5.11 (Berkeley) 9/6/90
-# $FreeBSD: src/lib/libc/rpc/Makefile.inc,v 1.17.2.2 2001/04/25 10:04:08 ru Exp $
+#      @(#)Makefile    5.11 (Berkeley) 9/6/90
+# $FreeBSD: src/lib/libc/rpc/Makefile.inc,v 1.27 2005/09/11 20:59:52 stefanf Exp $
 # $DragonFly: src/lib/libc/rpc/Makefile.inc,v 1.3 2005/08/05 23:43:19 swildner Exp $
 
 .PATH: ${.CURDIR}/../libc/rpc ${.CURDIR}/.
+SRCS+= auth_none.c auth_unix.c authunix_prot.c bindresvport.c clnt_bcast.c \
+       clnt_dg.c clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c \
+       clnt_vc.c rpc_dtablesize.c getnetconfig.c getnetpath.c getrpcent.c \
+       getrpcport.c mt_misc.c pmap_clnt.c pmap_getmaps.c pmap_getport.c \
+       pmap_prot.c pmap_prot2.c pmap_rmt.c rpc_prot.c rpc_commondata.c \
+       rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \
+       rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_generic.c \
+       svc_raw.c svc_run.c svc_simple.c svc_vc.c
 
-SRCS+= auth_des.c auth_none.c auth_time.c auth_unix.c \
-       authdes_prot.c authunix_prot.c bindresvport.c \
-       clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c clnt_tcp.c \
-       clnt_udp.c clnt_unix.c crypt_client.c des_crypt.c des_soft.c \
-       get_myaddress.c getpublickey.c getrpcent.c getrpcport.c \
-       key_call.c key_prot_xdr.c netname.c netnamer.c \
-       pmap_clnt.c pmap_getmaps.c pmap_getport.c pmap_prot.c \
-       pmap_prot2.c pmap_rmt.c rpc_callmsg.c rpc_commondata.c \
-       rpc_dtablesize.c rpc_prot.c rpcdname.c rtime.c \
-       svc.c svc_auth.c svc_auth_des.c svc_auth_unix.c \
-       svc_raw.c svc_run.c svc_simple.c \
-       svc_tcp.c svc_udp.c svc_unix.c
+# Secure-RPC
+SRCS+=  auth_time.c auth_des.c authdes_prot.c des_crypt.c des_soft.c \
+       crypt_client.c key_call.c key_prot_xdr.c getpublickey.c \
+       svc_auth_des.c
+
+# Resolver stuff
+SRCS+= netname.c netnamer.c rpcdname.c
+
+# Misc Source
+SRCS+= rtime.c
 
 # generated sources
 SRCS+= crypt_clnt.c crypt_xdr.c crypt.h
 
-CFLAGS+= -DBROKEN_DES
+CFLAGS+= -DBROKEN_DES -DPORTMAP -DDES_BUILTIN
+CFLAGS+= -I${.CURDIR}/rpc
 
 CLEANFILES+= crypt_clnt.c crypt_xdr.c crypt.h
 
@@ -38,81 +45,137 @@ crypt.h: ${RPCDIR}/crypt.x
 
 .if ${LIB} == "c"
 
-MAN+=  bindresvport.3 des_crypt.3 getrpcent.3 getrpcport.3 publickey.3 rpc.3 \
-       rpc_secure.3 rtime.3
-MAN+=  publickey.5 rpc.5
-
+MAN+=  bindresvport.3 des_crypt.3 getnetconfig.3 getnetpath.3 getrpcent.3 \
+       getrpcport.3 rpc.3 rpc_soc.3 rpc_clnt_auth.3 rpc_clnt_calls.3 \
+       rpc_clnt_create.3 rpc_svc_calls.3 rpc_svc_create.3 rpc_svc_err.3 \
+       rpc_svc_reg.3 rpc_xdr.3 rpcbind.3 publickey.3 rpc_secure.3 \
+       rtime.3
+MAN+=  netconfig.5 publickey.5 rpc.5
 MLINKS+=       bindresvport.3 bindresvport_sa.3 \
                des_crypt.3 cbc_crypt.3 \
                des_crypt.3 des_setparity.3 \
                des_crypt.3 ecb_crypt.3 \
+               getnetconfig.3 endnetconfig.3 \
+               getnetconfig.3 freenetconfigent.3 \
+               getnetconfig.3 getnetconfigent.3 \
+               getnetconfig.3 nc_perror.3 \
+               getnetconfig.3 nc_sperror.3 \
+               getnetconfig.3 setnetconfig.3 \
+               getnetpath.3 endnetpath.3 \
+               getnetpath.3 setnetpath.3 \
                getrpcent.3 endrpcent.3 \
                getrpcent.3 getrpcbyname.3 \
                getrpcent.3 getrpcbynumber.3 \
                getrpcent.3 setrpcent.3 \
                publickey.3 getpublickey.3 \
                publickey.3 getsecretkey.3 \
-               rpc.3 auth_destroy.3 \
-               rpc.3 authnone_create.3 \
-               rpc.3 authunix_create.3 \
-               rpc.3 authunix_create_default.3 \
-               rpc.3 callrpc.3 \
-               rpc.3 clnt_broadcast.3 \
-               rpc.3 clnt_call.3 \
-               rpc.3 clnt_control.3 \
-               rpc.3 clnt_create.3 \
-               rpc.3 clnt_destroy.3 \
-               rpc.3 clnt_freeres.3 \
-               rpc.3 clnt_geterr.3 \
-               rpc.3 clnt_pcreateerror.3 \
-               rpc.3 clnt_perrno.3 \
-               rpc.3 clnt_perror.3 \
-               rpc.3 clnt_spcreateerror.3 \
-               rpc.3 clnt_sperrno.3 \
-               rpc.3 clnt_sperror.3 \
-               rpc.3 clntraw_create.3 \
-               rpc.3 clnttcp_create.3 \
-               rpc.3 clntudp_bufcreate.3 \
-               rpc.3 clntudp_create.3 \
-               rpc.3 get_myaddress.3 \
-               rpc.3 pmap_getmaps.3 \
-               rpc.3 pmap_getport.3 \
-               rpc.3 pmap_rmtcall.3 \
-               rpc.3 pmap_set.3 \
-               rpc.3 pmap_unset.3 \
-               rpc.3 regsterrpc.3 \
-               rpc.3 rpc_createerr.3 \
-               rpc.3 svc_destroy.3 \
-               rpc.3 svc_fds.3 \
-               rpc.3 svc_fdset.3 \
-               rpc.3 svc_getargs.3 \
-               rpc.3 svc_getcaller.3 \
-               rpc.3 svc_getreg.3 \
-               rpc.3 svc_getregset.3 \
-               rpc.3 svc_register.3 \
-               rpc.3 svc_run.3 \
-               rpc.3 svc_sendreply.3 \
-               rpc.3 svc_unregister.3 \
-               rpc.3 svcerr_auth.3 \
-               rpc.3 svcerr_decode.3 \
-               rpc.3 svcerr_noproc.3 \
-               rpc.3 svcerr_noprog.3 \
-               rpc.3 svcerr_progvers.3 \
-               rpc.3 svcerr_systemerr.3 \
-               rpc.3 svcerr_weakauth.3 \
-               rpc.3 svcfd_create.3 \
-               rpc.3 svcraw_create.3 \
-               rpc.3 svctcp_create.3 \
-               rpc.3 svcudp_bufcreate.3 \
-               rpc.3 xdr_accepted_reply.3 \
-               rpc.3 xdr_authunix_parms.3 \
-               rpc.3 xdr_callhdr.3 \
-               rpc.3 xdr_callmsg.3 \
-               rpc.3 xdr_opaque_auth.3 \
-               rpc.3 xdr_pmap.3 \
-               rpc.3 xdr_pmaplist.3 \
-               rpc.3 xdr_rejected_reply.3 \
-               rpc.3 xdr_replymsg.3 \
-               rpc.3 xprt_register.3 \
-               rpc.3 xprt_unregister.3
+               rpc_clnt_auth.3 auth_destroy.3 \
+               rpc_clnt_auth.3 authnone_create.3 \
+               rpc_clnt_auth.3 authsys_create.3 \
+               rpc_clnt_auth.3 authsys_create_default.3 \
+               rpc_clnt_calls.3 clnt_call.3 \
+               rpc_clnt_calls.3 clnt_freeres.3 \
+               rpc_clnt_calls.3 clnt_geterr.3 \
+               rpc_clnt_calls.3 clnt_perrno.3 \
+               rpc_clnt_calls.3 clnt_perror.3 \
+               rpc_clnt_calls.3 clnt_sperrno.3 \
+               rpc_clnt_calls.3 clnt_sperror.3 \
+               rpc_clnt_calls.3 rpc_broadcast.3 \
+               rpc_clnt_calls.3 rpc_broadcast_exp.3 \
+               rpc_clnt_calls.3 rpc_call.3 \
+               rpc_clnt_create.3 clnt_control.3 \
+               rpc_clnt_create.3 clnt_create.3 \
+               rpc_clnt_create.3 clnt_create_timed.3 \
+               rpc_clnt_create.3 clnt_create_vers.3 \
+               rpc_clnt_create.3 clnt_create_vers_timed.3 \
+               rpc_clnt_create.3 clnt_destroy.3 \
+               rpc_clnt_create.3 clnt_dg_create.3 \
+               rpc_clnt_create.3 clnt_pcreateerror.3 \
+               rpc_clnt_create.3 clnt_raw_create.3 \
+               rpc_clnt_create.3 clnt_spcreateerror.3 \
+               rpc_clnt_create.3 clnt_tli_create.3 \
+               rpc_clnt_create.3 clnt_tp_create.3 \
+               rpc_clnt_create.3 clnt_tp_create_timed.3 \
+               rpc_clnt_create.3 clnt_vc_create.3 \
+               rpc_secure.3 authdes_create.3 \
+               rpc_secure.3 authdes_getucred.3 \
+               rpc_secure.3 getnetname.3 \
+               rpc_secure.3 host2netname.3 \
+               rpc_secure.3 key_decryptsession.3 \
+               rpc_secure.3 key_encryptsession.3 \
+               rpc_secure.3 key_gendes.3 \
+               rpc_secure.3 key_setsecret.3 \
+               rpc_secure.3 netname2host.3 \
+               rpc_secure.3 netname2user.3 \
+               rpc_secure.3 user2netname.3 \
+               rpc_soc.3 authunix_create.3 \
+               rpc_soc.3 authunix_create_default.3 \
+               rpc_soc.3 callrpc.3 \
+               rpc_soc.3 clnt_broadcast.3 \
+               rpc_soc.3 clntraw_create.3 \
+               rpc_soc.3 clnttcp_create.3 \
+               rpc_soc.3 clntudp_bufcreate.3 \
+               rpc_soc.3 clntudp_create.3 \
+               rpc_soc.3 clntunix_create.3 \
+               rpc_soc.3 get_myaddress.3 \
+               rpc_soc.3 pmap_getmaps.3 \
+               rpc_soc.3 pmap_getport.3 \
+               rpc_soc.3 pmap_rmtcall.3 \
+               rpc_soc.3 pmap_set.3 \
+               rpc_soc.3 pmap_unset.3 \
+               rpc_soc.3 registerrpc.3 \
+               rpc_soc.3 rpc_createerr.3 \
+               rpc_soc.3 svc_fds.3 \
+               rpc_soc.3 svc_fdset.3 \
+               rpc_soc.3 svc_getcaller.3 \
+               rpc_soc.3 svc_register.3 \
+               rpc_soc.3 svc_unregister.3 \
+               rpc_soc.3 svcfd_create.3 \
+               rpc_soc.3 svcraw_create.3 \
+               rpc_soc.3 svctcp_create.3 \
+               rpc_soc.3 svcudp_bufcreate.3 \
+               rpc_soc.3 svcunix_create.3 \
+               rpc_soc.3 svcunixfd_create.3 \
+               rpc_soc.3 xdr_pmap.3 \
+               rpc_soc.3 xdr_pmaplist.3 \
+               rpc_svc_calls.3 __svc_getcallercreds.3 \
+               rpc_svc_calls.3 svc_dg_enablecache.3 \
+               rpc_svc_calls.3 svc_exit.3 \
+               rpc_svc_calls.3 svc_freeargs.3 \
+               rpc_svc_calls.3 svc_getargs.3 \
+               rpc_svc_calls.3 svc_getreq_common.3 \
+               rpc_svc_calls.3 svc_getreq_poll.3 \
+               rpc_svc_calls.3 svc_getreqset.3 \
+               rpc_svc_calls.3 svc_getrpccaller.3 \
+               rpc_svc_calls.3 svc_pollset.3 \
+               rpc_svc_calls.3 svc_run.3 \
+               rpc_svc_calls.3 svc_sendreply.3 \
+               rpc_svc_create.3 svc_control.3 \
+               rpc_svc_create.3 svc_create.3 \
+               rpc_svc_create.3 svc_destroy.3 \
+               rpc_svc_create.3 svc_dg_create.3 \
+               rpc_svc_create.3 svc_fd_create.3 \
+               rpc_svc_create.3 svc_raw_create.3 \
+               rpc_svc_create.3 svc_tli_create.3 \
+               rpc_svc_create.3 svc_tp_create.3 \
+               rpc_svc_create.3 svc_vc_create.3 \
+               rpc_svc_err.3 svcerr_auth.3 \
+               rpc_svc_err.3 svcerr_decode.3 \
+               rpc_svc_err.3 svcerr_noproc.3 \
+               rpc_svc_err.3 svcerr_noprog.3 \
+               rpc_svc_err.3 svcerr_progvers.3 \
+               rpc_svc_err.3 svcerr_systemerr.3 \
+               rpc_svc_err.3 svcerr_weakauth.3 \
+               rpc_svc_reg.3 rpc_reg.3 \
+               rpc_svc_reg.3 svc_auth_reg.3 \
+               rpc_svc_reg.3 svc_reg.3 \
+               rpc_svc_reg.3 svc_unreg.3 \
+               rpc_svc_reg.3 xprt_register.3 \
+               rpc_svc_reg.3 xprt_unregister.3 \
+               rpcbind.3 rpcb_getaddr.3 \
+               rpcbind.3 rpcb_getmaps.3 \
+               rpcbind.3 rpcb_gettime.3 \
+               rpcbind.3 rpcb_rmtcall.3 \
+               rpcbind.3 rpcb_set.3 \
+               rpcbind.3 rpcb_unset.3
 .endif
index ad9d70f..0e7b630 100644 (file)
-RPCSRC 4.0 7/11/89
+$FreeBSD: src/lib/libc/rpc/README,v 1.2 2001/03/19 12:49:50 alfred Exp $
+$DragonFly$
+
+PLEASE READ THE DISCLAIMER FILE.  DO NOT CALL THE SUN MICROSYSTEMS SUPPORT
+LINE WITH QUESTIONS ON THIS RELEASE.  THEY CANNOT ANSWER QUESTIONS ABOUT THIS
+UNSUPPORTED SOURCE RELEASE.
+
+TIRPCSRC 2.3 29 Aug 1994
+
+This distribution contains SunSoft's implementation of transport-independent
+RPC (TI-RPC), External Data Representation (XDR), and various utilities and
+documentation.  These libraries and programs form the base of Open Network
+Computing (ONC), and are derived directly from the Solaris 2.3 source.
+
+Previous releases of RPC Source based on SunOS 4.x were ported to 4.2BSD and
+used Sockets as the transport interface.  These versions were
+transport-specific RPC (TS-RPC).
+
+TI-RPC is an enhanced version of TS-RPC that requires the UNIX System V
+Transport Layer Interface (TLI) or an equivalent X/Open Transport Interface
+(XTI).  TI-RPC is on-the-wire compatible with the TS-RPC, which is supported
+by almost 70 vendors on all major operating systems.  TS-RPC source code
+(RPCSRC 4.0) remains available from several internet sites.
+
+This release is a native source release, that is, it is compatible for
+building on Solaris 2.3.  This release was built on Solaris 2.3 using SunPro
+SPARCompiler 2.0.1.
+
+Solaris 2.3 is based on System V, Release 4 (SVR4), and while this release
+should be mostly compatible with other SVR4 systems, some Solaris facilities
+that are assumed may not be available.  In particular, this release uses the
+Makefile format supported by SparcCompiler 2.0.1.  Second, the Secure RPC
+routines use the Solaris Name Service Switch to access public-key credential
+databases.  This code will need to be ported if your system does not support
+the Name Service Switch.  Finally, this release uses the synchronization
+interfaces of UI Threads to make certain interfaces thread-safe.  These
+interfaces are found in libthread in Solaris 2.3 and later.
+
+Applications linked with this release's librpc must link with the United
+States domestic version of libcrypt in order to resolve the cbc_crypt() and
+ecb_crypt() functions.  These routines are used with Secure RPC however all
+RPC programs that link with this release's librpc will need to link with the
+domestic libcrypt.  Note that the Solaris 2.3 Encryption Kit is only available
+within the United States.  (PLEASE NOTE: The RPC implementation found in
+Solaris 2.3's libnsl does *not* have this requirement; linking with libcrypt
+is only a requirement for the TIRPCSRC 2.3 version of librpc.)
+
+
+DOCUMENTATION NOTE
+
+The documentation found in the doc directory are derived from the Solaris 2.3
+Network Interfaces Programming Guide.  A small number of compile examples are
+given, and these use libnsl to link in the RPC library.  This release builds
+the RPC library as librpc.  To use this release's librpc, use the link command
+"-lrpc -lnsl -lcrypt".  This links the application with TIRPCSRC 2.3's librpc
+for RPC routines, Solaris's libnsl for other networking functions, and
+libcrypt for the cbc_crypt() and ecb_crypt functions.
+
+
+WHY IS THIS RELEASE BEING DONE?
+
+This release is being distributed to make the Sun implementation of the ONC
+technologies available for reference and porting to non-Solaris platforms.
+The current release is a native source distribution, and provides services
+that are already available on Solaris 2.3 (such as the RPC headers, the RPC
+library in libnsl, rpcbind, rpcinfo, etc.).  It is not our intention to
+replace these services.  See the DISCLAIMER for further information about the
+legal status of this release.
+
+
+WHAT'S NEW IN THIS RELEASE: TIRPCSRC 2.3
+
+The previous release was TIRPCSRC 2.0.
+
+1.      This release is based on Solaris 2.3.  The previous release was
+       based on Solaris 2.0.  This release contains a siginificant number of
+       bug fixes and other enhancements over TIRPCSRC 2.0.
+
+2.      The RPC library is thread safe for all client-side interfaces
+       (clnt_create, clnt_call, etc.).  The server-side interfaces
+       (svc_create, svc_run, etc.) are not thread safe in this release. The
+       server-side interfaces will be made thread safe in the next release of
+       TIRPCSRC.  Please see the manual pages for details about which
+       interfaces are thread safe.
+
+3.      As part of the work to make the RPC library thread-safe, rpcgen has
+       been enhanced to generate thread-safe RPC stubs (the -M option).  Note
+       that this modifies the call-signature for the stub functions; the
+       procedure calling the RPC stub must now pass to the stub a pointer to
+       an allocated structure where results will be placed by the stub.  See
+       the rpcgen manual page and the rpcgen Programming Guide for details.
+
+4.      The Remote Asynchronous Calls (RAC) library is now included.  RAC was
+       first introduced in TIRPCSRC 1.0, and was bundled with librpc.  It is
+       now a separate library.  The asynchronous call model that RAC provides
+       can be achieved by using threads for making client-side RPC calls.
+       The ONC Technology group recommends using threads (where possible) to
+       achieve asynchrony rather than RAC.  See the rpc_rac(3n) manual page
+       for details.
 
-This distribution contains Sun Microsystem's implementation of the
-RPC and XDR protocols and is compatible with 4.2BSD and 4.3BSD.  Also
-included is complete documentation, utilities, RPC service
-specification files, and demonstration services in the format used by
-the RPC protocol compiler (rpcgen).  See WHAT'S NEW below for
-details.
 
-NOTE ABOUT SECURE RPC:
+ROADMAP
 
-This release of RPCSRC contains most of the code needed to implement
-Secure RPC (see "DES Authentication" in the RPC Protocol Specification,
-doc/rpc.rfc.ms).  Due to legal considerations, we are unable to
-distribute an implementation of DES, the Data Encryption Standard, which
-Secure RPC requires.  For this reason, all of the files, documentation, and
-programs associated with Secure RPC have been placed into a separate
-directory, secure_rpc.  The RPC library contained in the main body of this
-release *DOES NOT* support Secure RPC.  See secure_rpc/README for more
-details.  (A DES library was posted in Volume 18 of comp.sources.unix.)
+The directory hierarchy is as follows:
 
-If you wish to report bugs found in this release, send mail to:
+    cmd/        Utilities
+    cmd/rpcgen      The RPC Language compiler (for .x files)
+    cmd/rpcbind     The RPC bindery and portmapper
+    cmd/rpcinfo     RPC bindery query utility
+    cmd/keyserv     The Secure RPC keyserver
+    cmd/demo        Some simple ONC demo services
 
-Portable ONC/NFS
-Sun Microsystems, Inc
-MS 12-33
-2550 Garcia Avenue
-Mountain View, CA  94043
+    doc/        Postscript versions of ONC documentation
 
-or send Email to nfsnet@sun.com (the Internet) or sun!nfsnet (Usenet).
+    head/       Header files
+    head/rpcsvc     RPCL (.x) specifications for various ONC services, and
+                    header files.
 
-ROADMAP
+    lib/        Libraries
+    lib/librpc      The RPC and XDR library
+    lib/librac      The Remote Asynchronous Calls (RAC) library
 
-The directory hierarchy is as follows:
+    man/        Manual pages for the RPC library and utilities.
+
+    uts/common/rpc      RPC header files
 
-    demo/       Various demonstration services
-    demo/dir        Remote directory lister
-    demo/msg        Remote console message delivery service
-    demo/sort       Remote sort service
 
-    doc/        Documentation for RPC, XDR and NFS in "-ms" format.
 
-    etc/        Utilities (rpcinfo and portmap).  portmap must be
-                started by root before any other RPC network services are
-                used.  SEE BELOW FOR BUGFIX TO 4.3BSD COMPILER.
+BUILD INSTRUCTIONS
 
-    man/        Manual pages for RPC library, rpcgen, and utilities.
+Prior to building the release, you must define the SRC environment variable
+to be the path to the top-level Makefile.  For example, if /usr/src/tirpcsrc
+is where to top-level Makefile is located, execute this command prior to
+building the release:
 
-    rpc/        The RPC and XDR library.  SEE BELOW
-                FOR BUGFIX TO 4.2BSD COMPILER.
+        setenv SRC /usr/src/tirpcsrc        (csh)
+or
+        SRC=/usr/src/tirpcsrc; export SRC   (sh)
 
-    rpcgen/     The RPC Language compiler (for .x files)
+The sources in the lib directory depend on header files installed from head
+and uts/common/rpc, and the programs in the cmd directory depend on libraries
+from lib.  Therefore, you should do a "make install" to build the release.
 
-    rpcsvc/     Service definition files for various services and the
-                server and client code for the Remote Status service.
+The top-level Makefile builds the release.  The "ROOT" macro defines where the
+headers and libraries are installed.  The default for ROOT is "/proto".  You
+may change this by either modifiying Makefile.master, or issuing the build
+command with a new definition for ROOT:
 
-    secure_rpc/ The files in this directory are used to build a version of
-                the RPC library with DES Authentication.  See the README
-                file in that directory for more details.
+        make install ROOT=/opt/onc
 
-BUILD INSTRUCTIONS
+You will of course need write privileges for the destination directory.
+The headers, libraries and executables will be built and installed under the
+ROOT.
 
-Makefiles can be found in all directories except for man.  The
-Makefile in the top directory will cause these others to be invoked
-(except for in the doc, man and demo directories), in turn building the
-entire release.
-
-WARNING!  THE DEFAULT INSTALLATION PROCEDURES WILL INSTALL FILES
-IN /usr/include, /usr/lib, /usr/bin and /etc.
-
-The master RPC include file, rpc/rpc.h, is used by all programs and
-routines that use RPC.  It includes other RPC and system include files
-needed by the RPC system.  PLEASE NOTE: If your system has NFS, it
-may have been based on Sun's NFS Source.  The include files installed
-by this package may duplicate include files you will find on your NFS
-system.  The RPCSRC 4.0 include files are upwardly compatible to all
-NFS Source include files as of the date of this distribution (not
-including any new definitions or declarations added by your system
-vendor).  HOWEVER: Please read the comments towards the end of
-rpc/rpc.h regarding rpc/netdb.h.  You may need to uncomment the
-inclusion of that file if the structures it defines are already
-defined by your system's include files.
-
-After making any compiler fixes that are needed (see below), at
-the top directory, type:
-
-    make install
-
-For all installations, the Makefile macro DESTDIR is prepended to the
-installation path.  It is defined to be null in the Makefiles, so
-installations are relative to root.  (You will probably need root
-privileges for installing the files under the default path.)  To
-install the files under some other tree (e.g., /usr/local), use the
-command:
-
-    make install DESTDIR=/usr/local
-
-This will place the include files in /usr/local/usr/include, the RPC
-library in /usr/local/usr/lib, rpcgen in /usr/local/usr/bin, and the
-utilities in /usr/local/etc.  You'll have to edit the Makefiles or
-install the files by hand if you want to do anything other than this
-kind of relocation of the installation tree.
-
-The RPC library will be built and installed first.  By default it is
-installed in /usr/lib as "librpclib.a".  The directory
-/usr/include/rpc will also be created, and several header files will
-be installed there.  ALL RPC SERVICES INCLUDE THESE HEADER FILES.
-
-The programs in etc/ link in routines from librpclib.a.  If you change
-where it is installed, be sure to edit etc/'s Makefile to reflect this.
-These programs are installed in /etc.  PORTMAP MUST BE RUNNING ON
-YOUR SYSTEM BEFORE YOU START ANY OTHER RPC SERVICE.
-
-rpcgen is installed in /usr/bin.  This program is required to build
-the demonstration services in demo and the rstat client and server in
-rpcsvc/.
-
-The rpcsvc/ directory will install its files in the directory
-/usr/include/rpcsvc.  The Remote Status service (rstat_svc) will be
-compiled and installed in /etc.  If you wish to make this service
-available, you should either start this service when needed or have
-it started at boot time by invoking it in your /etc/rc.local script.
-(Be sure that portmap is started first!)  Sun has modified its
-version of inetd to automatically start RPC services.  (Use "make
-LIB=" when building rstat on a Sun Workstation.)  The Remote Status
-client (rstat) will be installed in /usr/bin.  This program queries
-the rstat_svc on a remote host and prints a system status summary
-similar to the one printed by "uptime".
-
-The documentation is not built during the "make install" command.
-Typing "make" in the doc directory will cause all of the manuals to
-be formatted using nroff into a single file.  We have had a report
-that certain "troff" equivalents have trouble processing the full
-manual.  If you have trouble, try building the manuals individually
-(see the Makefile).
 
 The demonstration services in the demo directory are not built by the
-top-level "make install" command.  To build these, cd to the demo
-directory and enter "make".  The three services will be built.
+top-level "make install" command.  To build these, cd to the cmd/demo
+directory and enter "make".  The four services will be built.
 RPCGEN MUST BE INSTALLED in a path that make can find.  To run the
-services, start the portmap program as root and invoke the service
+services, rpcbind must be running, then invoke the service
 (you probably will want to put it in the background).  rpcinfo can be
 used to check that the service succeeded in getting registered with
-portmap, and to ping the service (see rpcinfo's man page).  You can
+rpcbind, and to ping the service (see rpcinfo's man page).  You can
 then use the corresponding client program to exercise the service.
-To build these services on a Sun workstation, you must prevent the
-Makefile from trying to link the RPC library (as these routines are
-already a part of Sun's libc).  Use: "make LIB=".
-
-BUGFIX FOR 4.3BSD COMPILER
-
-The use of a 'void *' declaration for one of the arguments in
-the reply_proc() procedure in etc/rpcinfo.c will trigger a bug
-in the 4.3BSD compiler.  The bug is fixed by the following change to
-the compiler file mip/manifest.h:
-
-*** manifest.h.r1.1    Thu Apr 30 13:52:25 1987
---- manifest.h.r1.2    Mon Nov 23 18:58:17 1987
-***************
-*** 21,27 ****
-  /*
-   * Bogus type values
-   */
-! #define TNULL        PTR             /* pointer to UNDEF */
-  #define TVOID        FTN             /* function returning UNDEF (for void) */
-  
-  /*
---- 21,27 ----
-  /*
-   * Bogus type values
-   */
-! #define TNULL        INCREF(MOETY)   /* pointer to MOETY -- impossible type */
-  #define TVOID        FTN             /* function returning UNDEF (for void) */
-  
-  /*
-
-If you cannot fix your compiler, change the declaration in reply_proc()
-from 'void *' to 'char *'.
-
-BUGFIX FOR 4.2BSD COMPILER
-
-Unpatched 4.2BSD compilers complain about valid C.  You can make old
-compilers happy by changing some voids to ints.  However, the fix to
-the 4.2 VAX compiler is as follows (to mip/trees.c):
-
-*** trees.c.r1.1       Mon May 11 13:47:58 1987
---- trees.c.r1.2       Wed Jul  2 18:28:52 1986
-***************
-*** 1247,1253 ****
-               if(o==CAST && mt1==0)return(TYPL+TYMATCH);
-               if( mt12 & MDBI ) return( TYPL+LVAL+TYMATCH );
-               else if( (mt1&MENU)||(mt2&MENU) ) return( LVAL+NCVT+TYPL+PTMATCH+PUN );
-!              else if( mt12 == 0 ) break;
-               else if( mt1 & MPTR ) return( LVAL+PTMATCH+PUN );
-               else if( mt12 & MPTI ) return( TYPL+LVAL+TYMATCH+PUN );
-               break;
---- 1261,1269 ----
-               if(o==CAST && mt1==0)return(TYPL+TYMATCH);
-               if( mt12 & MDBI ) return( TYPL+LVAL+TYMATCH );
-               else if( (mt1&MENU)||(mt2&MENU) ) return( LVAL+NCVT+TYPL+PTMATCH+PUN );
-!              /* if right is TVOID and looks like a CALL, is not ok */
-!              else if (mt2 == 0 && (p->in.right->in.op == CALL || p->in.right->in.op == UNARY CALL))
-!                      break;
-               else if( mt1 & MPTR ) return( LVAL+PTMATCH+PUN );
-               else if( mt12 & MPTI ) return( TYPL+LVAL+TYMATCH+PUN );
-               break;
-
-WHAT'S NEW IN THIS RELEASE: RPCSRC 4.0
-
-The previous release was RPCSRC 3.9.  As with all previous releases,
-this release is based directly on files from Sun Microsystem's
-implementation.
-
-Upgrade from RPCSRC 3.9
-
-1)  RPCSRC 4.0 upgrades RPCSRC 3.9.  Improvements from SunOS 4.0 have
-    been integrated into this release.
-
-Secure RPC (in the secure_rpc/ directory)
-
-2)  DES Authentication routines and programs are provided.
-3)  A new manual, "Secure NFS" is provided, which describes Secure RPC
-    and Secure NFS.
-4)  Skeleton routines and manual pages are provided which describe the
-    DES encryption procedures required by Secure RPC.  HOWEVER, NO DES
-    ROUTINE IS PROVIDED.
-
-New Functionality
-
-5)  rpcinfo can now be used to de-register services from the portmapper
-    which may have terminated abnormally.
-6)  A new client, rstat, is provided which queries the rstat_svc and
-    prints a status line similar to the one displayed by "uptime".
+
+
+BUILDING ONC APPLICATIONS
+
+See the Makefiles in the demonstration services for examples of building
+ONC applications with this release.  The $(ROOT)/usr/include directory
+must be included in the compiler header file search path (-I), and the
+$(ROOT)/usr/lib directory must be included in the linker library file search
+path (-L).  Also, to run executables built dynamically, the shared library
+search path (LD_LIBRARY_PATH) must also include $(ROOT)/usr/lib.  In addition
+to linking in this release's librpc (via -lrpc), you must also link with
+Solaris's libnsl (-lnsl) and the US domestic version of libcrypt (-lcrypt).
index ba00abb..008fec1 100644 (file)
@@ -27,7 +27,7 @@
  * Mountain View, California  94043
  *
  * @(#)auth_des.c      2.2 88/07/29 4.0 RPCSRC; from 1.9 88/02/08 SMI
- * $FreeBSD: src/lib/libc/rpc/auth_des.c,v 1.3 1999/08/28 00:00:32 peter Exp $
+ * $FreeBSD: src/lib/libc/rpc/auth_des.c,v 1.10 2006/02/27 22:10:58 deischen Exp $
  * $DragonFly: src/lib/libc/rpc/auth_des.c,v 1.5 2005/11/13 12:27:04 swildner Exp $
  */
 /*
 /*
  * auth_des.c, client-side implementation of DES authentication
  */
+
+#include "namespace.h"
+#include "reentrant.h"
+#include <err.h>
+#include <errno.h>
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/cdefs.h>
 #include <rpc/des_crypt.h>
+#include <syslog.h>
 #include <rpc/types.h>
-#include <rpc/xdr.h>
 #include <rpc/auth.h>
 #include <rpc/auth_des.h>
-#include <netinet/in.h>        /* XXX: just to get htonl() and ntohl() */
+#include <rpc/clnt.h>
+#include <rpc/xdr.h>
 #include <sys/socket.h>
 #undef NIS
 #include <rpcsvc/nis.h>
+#include "un-namespace.h"
+#include "mt_misc.h"
 
-extern bool_t __rpc_get_time_offset ( struct timeval *, nis_server *,
-                                               char *, char **, struct sockaddr_in * );
-extern int rtime ( struct sockaddr_in *, struct timeval *, struct timeval *);
-extern bool_t xdr_authdes_cred ( XDR *, struct authdes_cred * );
-extern bool_t xdr_authdes_verf ( XDR *, struct authdes_verf * );
-
-#define MILLION                1000000L
-#define RTIME_TIMEOUT 5                /* seconds to wait for sync */
+#define USEC_PER_SEC           1000000
+#define RTIME_TIMEOUT          5       /* seconds to wait for sync */
 
 #define AUTH_PRIVATE(auth)     (struct ad_private *) auth->ah_private
 #define ALLOC(object_type)     (object_type *) mem_alloc(sizeof(object_type))
 #define FREE(ptr, size)                mem_free((char *)(ptr), (int) size)
 #define ATTEMPT(xdr_op)                if (!(xdr_op)) return (FALSE)
 
-#define debug(msg)              /*printf("%s\n", msg) */
+extern bool_t  xdr_authdes_cred(XDR *, struct authdes_cred *);
+extern bool_t  xdr_authdes_verf(XDR *, struct authdes_verf *);
+
+extern bool_t  __rpc_get_time_offset(struct timeval *, nis_server *, char *,
+                                     char **, char **);
+
 
 /* 
  * DES authenticator operations vector
  */
-static void    authdes_nextverf();
-static bool_t  authdes_marshal();
-static bool_t  authdes_validate();
-static bool_t  authdes_refresh();
-static void    authdes_destroy();
-static struct auth_ops authdes_ops = {
-       authdes_nextverf,
-       authdes_marshal,
-       authdes_validate,
-       authdes_refresh,
-       authdes_destroy
-};
-#ifdef foo
-static bool_t  synchronize ( struct sockaddr *, struct timeval *);
-#endif
+static void    authdes_nextverf(AUTH *);
+static bool_t  authdes_marshal(AUTH *, XDR *);
+static bool_t  authdes_validate(AUTH *, struct opaque_auth *);
+static bool_t  authdes_refresh(AUTH *, void *);
+static void    authdes_destroy(AUTH *);
+
+static struct auth_ops *authdes_ops(void);
+
 /*
  * This struct is pointed to by the ah_private field of an "AUTH *"
  */
@@ -93,11 +93,11 @@ struct ad_private {
        char *ad_servername;            /* server's full name */
        u_int ad_servernamelen;         /* length of name, rounded up */
        u_int ad_window;                /* client specified window */
-       bool_t ad_dosync;               /* synchronize? */              
-       struct sockaddr ad_syncaddr;    /* remote host to synch with */
+       bool_t ad_dosync;               /* synchronize? */
+       struct netbuf ad_syncaddr;      /* remote host to synch with */
        char *ad_timehost;              /* remote host to synch with */
        struct timeval ad_timediff;     /* server's time - client's time */
-       u_long ad_nickname;             /* server's nickname for client */
+       u_int ad_nickname;              /* server's nickname for client */
        struct authdes_cred ad_cred;    /* storage for credential */
        struct authdes_verf ad_verf;    /* storage for verifier */
        struct timeval ad_timestamp;    /* timestamp sent */
@@ -107,104 +107,50 @@ struct ad_private {
        char *ad_uaddr;                 /* Timehost uaddr */
        nis_server *ad_nis_srvr;        /* NIS+ server struct */
 };
-       
 
+AUTH *authdes_pk_seccreate(const char *, netobj *, u_int, const char *,
+                          const des_block *, nis_server *);
 /*
- * Create the client des authentication object
- */    
+ * documented version of authdes_seccreate
+ */
+/*
+       servername:     network name of server
+       win:            time to live
+       timehost:       optional hostname to sync with
+       ckey:           optional conversation key to use
+*/
+
 AUTH *
-authdes_create(char *servername,                       /* network name of server */
-              u_int window,                    /* time to live */
-              struct sockaddr *syncaddr,       /* optional addr of host to sync with */
-              des_block *ckey)                 /* optional conversation key to use*/
+authdes_seccreate(const char *servername, const u_int win,
+                 const char *timehost, const des_block *ckey)
 {
-
-       AUTH *auth;
-       struct ad_private *ad;
-       char namebuf[MAXNETNAMELEN+1];
-       u_char  pkey_data[1024];
-
-       if (!getpublickey(servername, pkey_data))
-               return(NULL);
-
-       /*
-        * Allocate everything now
-        */
-       auth = ALLOC(AUTH);
-       ad = ALLOC(struct ad_private);
-       getnetname(namebuf);
-
-       ad->ad_fullnamelen = RNDUP(strlen(namebuf));
-       ad->ad_fullname = (char *)mem_alloc(ad->ad_fullnamelen + 1);
-
-       ad->ad_servernamelen = strlen(servername);
-       ad->ad_servername = (char *)mem_alloc(ad->ad_servernamelen + 1);
-
-       if (auth == NULL || ad == NULL || ad->ad_fullname == NULL ||
-           ad->ad_servername == NULL) {
-               debug("authdes_create: out of memory");
-               goto failed;
-       }
-
-       /* 
-        * Set up private data
-        */
-       bcopy(namebuf, ad->ad_fullname, ad->ad_fullnamelen + 1);
-       bcopy(servername, ad->ad_servername, ad->ad_servernamelen + 1);
-       bcopy(pkey_data, ad->ad_pkey, strlen(pkey_data) + 1);
-       if (syncaddr != NULL) {
-               ad->ad_syncaddr = *syncaddr;
-               ad->ad_dosync = TRUE;
-       } else {
-               ad->ad_dosync = FALSE;
-       }
-       ad->ad_window = window;
-       if (ckey == NULL) {
-               if (key_gendes(&auth->ah_key) < 0) {
-                       debug("authdes_create: unable to gen conversation key");
-                       return (NULL);
-               }
-       } else {
-               auth->ah_key = *ckey;
+       u_char  pkey_data[1024];
+       netobj  pkey;
+       AUTH    *dummy;
+
+       if (! getpublickey(servername, (char *) pkey_data)) {
+               syslog(LOG_ERR,
+                   "authdes_seccreate: no public key found for %s",
+                   servername);
+               return (NULL);
        }
 
-       /*
-        * Set up auth handle
-        */ 
-       auth->ah_cred.oa_flavor = AUTH_DES;
-       auth->ah_verf.oa_flavor = AUTH_DES;
-       auth->ah_ops = &authdes_ops;
-       auth->ah_private = (caddr_t)ad;
-
-       if (!authdes_refresh(auth)) {
-               goto failed;
-       }       
-       return (auth);
-
-failed:
-       if (auth != NULL) 
-               FREE(auth, sizeof(AUTH)); 
-       if (ad != NULL) 
-               FREE(ad, sizeof(struct ad_private));
-       if (ad->ad_fullname != NULL) 
-               FREE(ad->ad_fullname, ad->ad_fullnamelen + 1);
-       if (ad->ad_servername != NULL) 
-               FREE(ad->ad_servername, ad->ad_servernamelen + 1);
-       return (NULL);
+       pkey.n_bytes = (char *) pkey_data;
+       pkey.n_len = (u_int)strlen((char *)pkey_data) + 1;
+       dummy = authdes_pk_seccreate(servername, &pkey, win, timehost,
+           ckey, NULL);
+       return (dummy);
 }
 
 /*
- * Slightly modified version of authdes_create which takes the public key
+ * Slightly modified version of authdessec_create which takes the public key
  * of the server principal as an argument. This spares us a call to
  * getpublickey() which in the nameserver context can cause a deadlock.
  */
 AUTH *
-authdes_pk_create(char *servername,            /* network name of server */
-                 netobj *pkey,                 /* public key of server */
-                 u_int window,                 /* time to live */
-                 char *timehost,               /* optional hostname to sync with */
-                 des_block *ckey,              /* optional conversation key to use */
-                 nis_server *srvr)             /* optional NIS+ server struct */
+authdes_pk_seccreate(const char *servername, netobj *pkey, u_int window,
+                    const char *timehost, const des_block *ckey,
+                    nis_server *srvr)
 {
        AUTH *auth;
        struct ad_private *ad;
@@ -215,12 +161,12 @@ authdes_pk_create(char *servername,               /* network name of server */
         */
        auth = ALLOC(AUTH);
        if (auth == NULL) {
-               debug("authdes_pk_create: out of memory");
+               syslog(LOG_ERR, "authdes_pk_seccreate: out of memory");
                return (NULL);
        }
        ad = ALLOC(struct ad_private);
        if (ad == NULL) {
-               debug("authdes_pk_create: out of memory");
+               syslog(LOG_ERR, "authdes_pk_seccreate: out of memory");
                goto failed;
        }
        ad->ad_fullname = ad->ad_servername = NULL; /* Sanity reasons */
@@ -239,13 +185,13 @@ authdes_pk_create(char *servername,               /* network name of server */
        ad->ad_servername = (char *)mem_alloc(ad->ad_servernamelen + 1);
 
        if (ad->ad_fullname == NULL || ad->ad_servername == NULL) {
-               debug("authdes_pk_create: out of memory");
+               syslog(LOG_ERR, "authdes_seccreate: out of memory");
                goto failed;
        }
        if (timehost != NULL) {
                ad->ad_timehost = (char *)mem_alloc(strlen(timehost) + 1);
                if (ad->ad_timehost == NULL) {
-                       debug("authdes_pk_create: out of memory");
+                       syslog(LOG_ERR, "authdes_seccreate: out of memory");
                        goto failed;
                }
                memcpy(ad->ad_timehost, timehost, strlen(timehost) + 1);
@@ -261,7 +207,8 @@ authdes_pk_create(char *servername,         /* network name of server */
        ad->ad_window = window;
        if (ckey == NULL) {
                if (key_gendes(&auth->ah_key) < 0) {
-                       debug("authdes_pk_create: unable to gen conversation key");
+                       syslog(LOG_ERR,
+           "authdes_seccreate: keyserv(1m) is unable to generate session key");
                        goto failed;
                }
        } else {
@@ -273,10 +220,10 @@ authdes_pk_create(char *servername,               /* network name of server */
         */
        auth->ah_cred.oa_flavor = AUTH_DES;
        auth->ah_verf.oa_flavor = AUTH_DES;
-       auth->ah_ops = &authdes_ops;
+       auth->ah_ops = authdes_ops();
        auth->ah_private = (caddr_t)ad;
 
-       if (!authdes_refresh(auth)) {
+       if (!authdes_refresh(auth, NULL)) {
                goto failed;
        }
        ad->ad_nis_srvr = NULL; /* not needed any longer */
@@ -293,13 +240,14 @@ failed:
                if (ad->ad_timehost)
                        FREE(ad->ad_timehost, strlen(ad->ad_timehost) + 1);
                if (ad->ad_netid)
-                       free(ad->ad_netid);
+                       FREE(ad->ad_netid, strlen(ad->ad_netid) + 1);
                if (ad->ad_uaddr)
-                       free(ad->ad_uaddr);
+                       FREE(ad->ad_uaddr, strlen(ad->ad_uaddr) + 1);
                FREE(ad, sizeof (struct ad_private));
        }
        return (NULL);
 }
+
 /*
  * Implement the five authentication operations
  */
@@ -314,7 +262,6 @@ authdes_nextverf(AUTH *auth)
 {
        /* what the heck am I supposed to do??? */
 }
-               
 
 
 /*
@@ -323,14 +270,15 @@ authdes_nextverf(AUTH *auth)
 static bool_t
 authdes_marshal(AUTH *auth, XDR *xdrs)
 {
+/* LINTED pointer alignment */
        struct ad_private *ad = AUTH_PRIVATE(auth);
        struct authdes_cred *cred = &ad->ad_cred;
        struct authdes_verf *verf = &ad->ad_verf;
-       des_block cryptbuf[2];  
+       des_block cryptbuf[2];
        des_block ivec;
        int status;
-       long len;
-       int32_t *ixdr;
+       int len;
+       rpc_inline_t *ixdr;
 
        /*
         * Figure out the "time", accounting for any time difference
@@ -339,30 +287,32 @@ authdes_marshal(AUTH *auth, XDR *xdrs)
        gettimeofday(&ad->ad_timestamp, (struct timezone *)NULL);
        ad->ad_timestamp.tv_sec += ad->ad_timediff.tv_sec;
        ad->ad_timestamp.tv_usec += ad->ad_timediff.tv_usec;
-       if (ad->ad_timestamp.tv_usec >= MILLION) {
-               ad->ad_timestamp.tv_usec -= MILLION;
-               ad->ad_timestamp.tv_sec += 1;
+       while (ad->ad_timestamp.tv_usec >= USEC_PER_SEC) {
+               ad->ad_timestamp.tv_usec -= USEC_PER_SEC;
+               ad->ad_timestamp.tv_sec++;
        }
 
        /*
         * XDR the timestamp and possibly some other things, then
         * encrypt them.
         */
-       ixdr = (int32_t *)cryptbuf;
-       IXDR_PUT_LONG(ixdr, ad->ad_timestamp.tv_sec);
-       IXDR_PUT_LONG(ixdr, ad->ad_timestamp.tv_usec);
+       ixdr = (rpc_inline_t *)cryptbuf;
+       IXDR_PUT_INT32(ixdr, ad->ad_timestamp.tv_sec);
+       IXDR_PUT_INT32(ixdr, ad->ad_timestamp.tv_usec);
        if (ad->ad_cred.adc_namekind == ADN_FULLNAME) {
-               IXDR_PUT_U_LONG(ixdr, ad->ad_window);
-               IXDR_PUT_U_LONG(ixdr, ad->ad_window - 1);
+               IXDR_PUT_U_INT32(ixdr, ad->ad_window);
+               IXDR_PUT_U_INT32(ixdr, ad->ad_window - 1);
                ivec.key.high = ivec.key.low = 0;       
                status = cbc_crypt((char *)&auth->ah_key, (char *)cryptbuf, 
-                       2*sizeof(des_block), DES_ENCRYPT | DES_HW, (char *)&ivec);
+                       (u_int) 2 * sizeof (des_block),
+                       DES_ENCRYPT | DES_HW, (char *)&ivec);
        } else {
                status = ecb_crypt((char *)&auth->ah_key, (char *)cryptbuf, 
-                       sizeof(des_block), DES_ENCRYPT | DES_HW);
+                       (u_int) sizeof (des_block),
+                       DES_ENCRYPT | DES_HW);
        }
        if (DES_FAILED(status)) {
-               debug("authdes_marshal: DES encryption failure");
+               syslog(LOG_ERR, "authdes_marshal: DES encryption failure");
                return (FALSE);
        }
        ad->ad_verf.adv_xtimestamp = cryptbuf[0];
@@ -385,21 +335,21 @@ authdes_marshal(AUTH *auth, XDR *xdrs)
        }
 
        if ((ixdr = xdr_inline(xdrs, 2*BYTES_PER_XDR_UNIT))) {
-               IXDR_PUT_LONG(ixdr, AUTH_DES);
-               IXDR_PUT_LONG(ixdr, len);
+               IXDR_PUT_INT32(ixdr, AUTH_DES);
+               IXDR_PUT_INT32(ixdr, len);
        } else {
-               ATTEMPT(xdr_putlong(xdrs, (long *)&auth->ah_cred.oa_flavor)); 
-               ATTEMPT(xdr_putlong(xdrs, &len)); 
+               ATTEMPT(xdr_putint32(xdrs, (int *)&auth->ah_cred.oa_flavor));
+               ATTEMPT(xdr_putint32(xdrs, &len));
        }
        ATTEMPT(xdr_authdes_cred(xdrs, cred));
 
        len = (2 + 1)*BYTES_PER_XDR_UNIT; 
        if ((ixdr = xdr_inline(xdrs, 2*BYTES_PER_XDR_UNIT))) {
-               IXDR_PUT_LONG(ixdr, AUTH_DES);
-               IXDR_PUT_LONG(ixdr, len);
+               IXDR_PUT_INT32(ixdr, AUTH_DES);
+               IXDR_PUT_INT32(ixdr, len);
        } else {
-               ATTEMPT(xdr_putlong(xdrs, (long *)&auth->ah_verf.oa_flavor)); 
-               ATTEMPT(xdr_putlong(xdrs, &len)); 
+               ATTEMPT(xdr_putint32(xdrs, (int *)&auth->ah_verf.oa_flavor));
+               ATTEMPT(xdr_putint32(xdrs, &len));
        }
        ATTEMPT(xdr_authdes_verf(xdrs, verf));
        return (TRUE);
@@ -412,84 +362,90 @@ authdes_marshal(AUTH *auth, XDR *xdrs)
 static bool_t
 authdes_validate(AUTH *auth, struct opaque_auth *rverf)
 {
+/* LINTED pointer alignment */
        struct ad_private *ad = AUTH_PRIVATE(auth);
        struct authdes_verf verf;
        int status;
-       u_long *ixdr;
+       uint32_t *ixdr;
+       des_block buf;
 
        if (rverf->oa_length != (2 + 1) * BYTES_PER_XDR_UNIT) {
                return (FALSE);
        }
-       ixdr = (u_long *)rverf->oa_base;
-       verf.adv_xtimestamp.key.high = (u_long)*ixdr++;
-       verf.adv_xtimestamp.key.low = (u_long)*ixdr++;
-       verf.adv_int_u = (u_long)*ixdr++;       /* nickname not XDR'd ! */
+/* LINTED pointer alignment */
+       ixdr = (uint32_t *)rverf->oa_base;
+       buf.key.high = (uint32_t)*ixdr++;
+       buf.key.low = (uint32_t)*ixdr++;
+       verf.adv_int_u = (uint32_t)*ixdr++;
 
        /*
         * Decrypt the timestamp
         */
-       status = ecb_crypt((char *)&auth->ah_key, (char *)&verf.adv_xtimestamp,
-               sizeof(des_block), DES_DECRYPT | DES_HW);
+       status = ecb_crypt((char *)&auth->ah_key, (char *)&buf,
+               (u_int)sizeof (des_block), DES_DECRYPT | DES_HW);
 
        if (DES_FAILED(status)) {
-               debug("authdes_validate: DES decryption failure");
+               syslog(LOG_ERR, "authdes_validate: DES decryption failure");
                return (FALSE);
        }
 
        /*
-        * xdr the decrypted timestamp 
+        * xdr the decrypted timestamp
         */
-       ixdr = (u_long *)verf.adv_xtimestamp.c;
-       verf.adv_timestamp.tv_sec = IXDR_GET_LONG(ixdr) + 1;
-       verf.adv_timestamp.tv_usec = IXDR_GET_LONG(ixdr);
+/* LINTED pointer alignment */
+       ixdr = (uint32_t *)buf.c;
+       verf.adv_timestamp.tv_sec = IXDR_GET_INT32(ixdr) + 1;
+       verf.adv_timestamp.tv_usec = IXDR_GET_INT32(ixdr);
 
        /*
         * validate
         */
        if (bcmp((char *)&ad->ad_timestamp, (char *)&verf.adv_timestamp,
                 sizeof(struct timeval)) != 0) {
-               debug("authdes_validate: verifier mismatch\n");
+               syslog(LOG_DEBUG, "authdes_validate: verifier mismatch");
                return (FALSE);
        }
 
        /*
         * We have a nickname now, let's use it
         */
-       ad->ad_nickname = verf.adv_nickname;    
-       ad->ad_cred.adc_namekind = ADN_NICKNAME; 
-       return (TRUE);  
+       ad->ad_nickname = verf.adv_nickname;
+       ad->ad_cred.adc_namekind = ADN_NICKNAME;
+       return (TRUE);
 }
 
 /*
  * 4. Refresh
  */
+/*ARGSUSED*/
 static bool_t
-authdes_refresh(AUTH *auth)
+authdes_refresh(AUTH *auth, void *dummy)
 {
+/* LINTED pointer alignment */
        struct ad_private *ad = AUTH_PRIVATE(auth);
        struct authdes_cred *cred = &ad->ad_cred;
+       int             ok;
        netobj          pkey;
 
-       if (ad->ad_dosync &&
-#ifdef old
-                       !synchronize(&ad->ad_syncaddr, &ad->ad_timediff)) {
-#else
-                       !__rpc_get_time_offset(&ad->ad_timediff,ad->ad_nis_srvr,
-                                              ad->ad_timehost, &(ad->ad_uaddr),
-                               (struct sockaddr_in *)&(ad->ad_syncaddr))) {
-#endif
-               /*
-                * Hope the clocks are synced!
-                */
-               ad->ad_timediff.tv_sec = ad->ad_timediff.tv_usec = 0;
-               ad->ad_dosync = 0;
-               debug("authdes_refresh: unable to synchronize with server");
+       if (ad->ad_dosync) {
+                ok = __rpc_get_time_offset(&ad->ad_timediff, ad->ad_nis_srvr,
+                   ad->ad_timehost, &(ad->ad_uaddr),
+                   &(ad->ad_netid));
+               if (! ok) {
+                       /*
+                        * Hope the clocks are synced!
+                        */
+                       ad->ad_dosync = 0;
+                       syslog(LOG_DEBUG,
+                           "authdes_refresh: unable to synchronize clock");
+               }
        }
        ad->ad_xkey = auth->ah_key;
        pkey.n_bytes = (char *)(ad->ad_pkey);
-       pkey.n_len = strlen((char *)ad->ad_pkey) + 1;
+       pkey.n_len = (u_int)strlen((char *)ad->ad_pkey) + 1;
        if (key_encryptsession_pk(ad->ad_servername, &pkey, &ad->ad_xkey) < 0) {
-               debug("authdes_create: unable to encrypt conversation key");
+               syslog(LOG_INFO,
+                   "authdes_refresh: keyserv(1m) is unable to encrypt session key");
                return (FALSE);
        }
        cred->adc_fullname.key = ad->ad_xkey;
@@ -505,38 +461,36 @@ authdes_refresh(AUTH *auth)
 static void
 authdes_destroy(AUTH *auth)
 {
+/* LINTED pointer alignment */
        struct ad_private *ad = AUTH_PRIVATE(auth);
 
        FREE(ad->ad_fullname, ad->ad_fullnamelen + 1);
        FREE(ad->ad_servername, ad->ad_servernamelen + 1);
+       if (ad->ad_timehost)
+               FREE(ad->ad_timehost, strlen(ad->ad_timehost) + 1);
+       if (ad->ad_netid)
+               FREE(ad->ad_netid, strlen(ad->ad_netid) + 1);
+       if (ad->ad_uaddr)
+               FREE(ad->ad_uaddr, strlen(ad->ad_uaddr) + 1);
        FREE(ad, sizeof(struct ad_private));
        FREE(auth, sizeof(AUTH));
 }
-       
 
-#ifdef old
-/*
- * Synchronize with the server at the given address, that is,
- * adjust timep to reflect the delta between our clocks
- */
-static bool_t
-synchronize(struct sockaddr *syncaddr, struct timeval *timep)
+static struct auth_ops *
+authdes_ops(void)
 {
-       struct timeval mytime;
-       struct timeval timeout;
-
-       timeout.tv_sec = RTIME_TIMEOUT;
-       timeout.tv_usec = 0;
-       if (rtime((struct sockaddr_in *)syncaddr, timep, NULL /*&timeout*/) < 0) {
-               return (FALSE);
-       }
-       gettimeofday(&mytime, (struct timezone *)NULL);
-       timep->tv_sec -= mytime.tv_sec;
-       if (mytime.tv_usec > timep->tv_usec) {
-               timep->tv_sec -= 1;
-               timep->tv_usec += MILLION;
-       }
-       timep->tv_usec -= mytime.tv_usec;
-       return (TRUE);
+       static struct auth_ops ops;
+
+       /* VARIABLES PROTECTED BY ops_lock: ops */
+
+       mutex_lock(&authdes_ops_lock);
+       if (ops.ah_nextverf == NULL) {
+               ops.ah_nextverf = authdes_nextverf;
+               ops.ah_marshal = authdes_marshal;
+               ops.ah_validate = authdes_validate;
+               ops.ah_refresh = authdes_refresh;
+               ops.ah_destroy = authdes_destroy;
+        }
+       mutex_unlock(&authdes_ops_lock);
+       return (&ops);
 }
-#endif
index db89309..8e02db4 100644 (file)
@@ -28,7 +28,8 @@
  *
  * @(#)auth_none.c     1.19 87/08/11 Copyr 1984 Sun Micro
  * @(#)auth_none.c     2.1 88/07/29 4.0 RPCSRC
- * $FreeBSD: src/lib/libc/rpc/auth_none.c,v 1.9 1999/08/28 00:00:32 peter Exp $
+ * $NetBSD: auth_none.c,v 1.13 2000/01/22 22:19:17 mycroft Exp $
+ * $FreeBSD: src/lib/libc/rpc/auth_none.c,v 1.14 2006/02/27 22:10:58 deischen Exp $
  * $DragonFly: src/lib/libc/rpc/auth_none.c,v 1.4 2005/11/13 12:27:04 swildner Exp $
  */
 
  * Copyright (C) 1984, Sun Microsystems, Inc.
  */
 
+#include "namespace.h"
+#include "reentrant.h"
+#include <assert.h>
 #include <stdlib.h>
 #include <rpc/types.h>
 #include <rpc/xdr.h>
 #include <rpc/auth.h>
-#define MAX_MARSHEL_SIZE 20
+#include "un-namespace.h"
+#include "mt_misc.h"
+
+#define MAX_MARSHAL_SIZE 20
 
 /*
  * Authenticator operations routines
  */
-static void    authnone_verf();
-static void    authnone_destroy();
-static bool_t  authnone_marshal();
-static bool_t  authnone_validate();
-static bool_t  authnone_refresh();
-
-static struct auth_ops ops = {
-       authnone_verf,
-       authnone_marshal,
-       authnone_validate,
-       authnone_refresh,
-       authnone_destroy
-};
+
+static bool_t  authnone_marshal(AUTH *, XDR *);
+static void    authnone_verf(AUTH *);
+static bool_t  authnone_validate(AUTH *, struct opaque_auth *);
+static bool_t  authnone_refresh(AUTH *, void *);
+static void    authnone_destroy(AUTH *);
+
+static struct auth_ops *authnone_ops(void);
 
 static struct authnone_private {
        AUTH    no_client;
-       char    marshalled_client[MAX_MARSHEL_SIZE];
+       char    marshalled_client[MAX_MARSHAL_SIZE];
        u_int   mcnt;
 } *authnone_private;
 
@@ -76,23 +78,27 @@ authnone_create(void)
        XDR xdr_stream;
        XDR *xdrs;
 
+       mutex_lock(&authnone_lock);
        if (ap == 0) {
                ap = (struct authnone_private *)calloc(1, sizeof (*ap));
-               if (ap == 0)
+               if (ap == 0) {
+                       mutex_unlock(&authnone_lock);
                        return (0);
+               }
                authnone_private = ap;
        }
        if (!ap->mcnt) {
                ap->no_client.ah_cred = ap->no_client.ah_verf = _null_auth;
-               ap->no_client.ah_ops = &ops;
+               ap->no_client.ah_ops = authnone_ops();
                xdrs = &xdr_stream;
-               xdrmem_create(xdrs, ap->marshalled_client, (u_int)MAX_MARSHEL_SIZE,
-                   XDR_ENCODE);
+               xdrmem_create(xdrs, ap->marshalled_client,
+                   (u_int)MAX_MARSHAL_SIZE, XDR_ENCODE);
                xdr_opaque_auth(xdrs, &ap->no_client.ah_cred);
                xdr_opaque_auth(xdrs, &ap->no_client.ah_verf);
                ap->mcnt = XDR_GETPOS(xdrs);
                XDR_DESTROY(xdrs);
        }
+       mutex_unlock(&authnone_lock);
        return (&ap->no_client);
 }
 
@@ -100,34 +106,66 @@ authnone_create(void)
 static bool_t
 authnone_marshal(AUTH *client, XDR *xdrs)
 {
-       struct authnone_private *ap = authnone_private;
+       struct authnone_private *ap;
+       bool_t dummy;
 
-       if (ap == 0)
-               return (0);
-       return ((*xdrs->x_ops->x_putbytes)(xdrs,
-           ap->marshalled_client, ap->mcnt));
+       assert(xdrs != NULL);
+
+       ap = authnone_private;
+       if (ap == NULL) {
+               mutex_unlock(&authnone_lock);
+               return (FALSE);
+       }
+       dummy = (*xdrs->x_ops->x_putbytes)(xdrs,
+           ap->marshalled_client, ap->mcnt);
+       mutex_unlock(&authnone_lock);
+       return (dummy);
 }
 
+/* All these unused parameters are required to keep ANSI-C from grumbling */
+/*ARGSUSED*/
 static void
-authnone_verf(void)
+authnone_verf(AUTH *client)
 {
 }
 
+/*ARGSUSED*/
 static bool_t
-authnone_validate(void)
+authnone_validate(AUTH *client, struct opaque_auth *opaque)
 {
 
        return (TRUE);
 }
 
+/*ARGSUSED*/
 static bool_t
-authnone_refresh(void)
+authnone_refresh(AUTH *client, void *dummy)
 {
 
        return (FALSE);
 }
 
+/*ARGSUSED*/
 static void
-authnone_destroy(void)
+authnone_destroy(AUTH *client)
+{
+}
+
+static struct auth_ops *
+authnone_ops(void)
 {
+       static struct auth_ops ops;
+
+/* VARIABLES PROTECTED BY ops_lock: ops */
+
+       mutex_lock(&ops_lock);
+       if (ops.ah_nextverf == NULL) {
+               ops.ah_nextverf = authnone_verf;
+               ops.ah_marshal = authnone_marshal;
+               ops.ah_validate = authnone_validate;
+               ops.ah_refresh = authnone_refresh;
+               ops.ah_destroy = authnone_destroy;
+       }
+       mutex_unlock(&ops_lock);
+       return (&ops);
 }
index e7281ae..9463678 100644 (file)
@@ -1,5 +1,3 @@
-#pragma ident  "@(#)auth_time.c        1.4     92/11/10 SMI"
-
 /*
  *     auth_time.c
  *
  *     and returned. The SIGALRM processing is modified only if
  *     needed to deal with TCP connections.
  *
- * NOTE: This code has had the crap beaten out it in order to convert
- *       it from TI-RPC back to TD-RPC for use on FreeBSD.
- *
- * $FreeBSD: src/lib/libc/rpc/auth_time.c,v 1.4 2000/01/27 23:06:35 jasone Exp $
+ * @(#)auth_time.c     1.4     92/11/10 SMI
+ * $FreeBSD: src/lib/libc/rpc/auth_time.c,v 1.12 2007/09/20 22:35:24 matteo Exp $
  * $DragonFly: src/lib/libc/rpc/auth_time.c,v 1.4 2005/11/13 12:27:04 swildner Exp $
  */
+
 #include "namespace.h"
 #include <stdio.h>
 #include <syslog.h>
 #include <arpa/inet.h>
 #include <rpc/rpc.h>
 #include <rpc/rpc_com.h>
+#include <rpc/rpcb_prot.h>
 #undef NIS
 #include <rpcsvc/nis.h>
 #include "un-namespace.h"
 
-/*
- * FreeBSD currently uses RPC 4.0, which uses portmap rather than
- * rpcbind. Consequently, we need to fake up these values here.
- * Luckily, the RPCB_GETTIME procedure uses only base XDR data types
- * so we don't need anything besides these magic numbers.
- */
-#define RPCBPROG (u_long)100000
-#define RPCBVERS (u_long)3
-#define RPCBPROC_GETTIME (u_long)6
+extern int     _rpc_dtablesize(void);
 
 #ifdef TESTING
 #define        msg(x)  printf("ERROR: %s\n", x)
@@ -157,6 +147,7 @@ get_server(struct sockaddr_in *sin,
        struct hostent          *he;
        struct hostent          dummy;
        char                    *ptr[2];
+       endpoint                *ep;
 
        if (host == NULL && sin == NULL)
                return (NULL);
@@ -176,26 +167,34 @@ get_server(struct sockaddr_in *sin,
         * This is lame. We go around once for TCP, then again
         * for UDP.
         */
-       for (i = 0; (he->h_addr_list[i] != NULL) && (num_ep < maxep);
-                                               i++, num_ep++) {
+       for (i = 0, ep = eps; (he->h_addr_list[i] != NULL) && (num_ep < maxep);
+           i++, ep++, num_ep++) {
                struct in_addr *a;
 
                a = (struct in_addr *)he->h_addr_list[i];
                snprintf(hname, sizeof(hname), "%s.0.111", inet_ntoa(*a));
-               eps[num_ep].uaddr = strdup(hname);
-               eps[num_ep].family = strdup("inet");
-               eps[num_ep].proto =  strdup("tcp");
+               ep->uaddr = strdup(hname);
+               ep->family = strdup("inet");
+               ep->proto =  strdup("tcp");
+               if (ep->uaddr == NULL || ep->family == NULL || ep->proto == NULL) {
+                       free_eps(eps, num_ep + 1);
+                       return (NULL);
+               }
        }
 
        for (i = 0; (he->h_addr_list[i] != NULL) && (num_ep < maxep);
-                                               i++, num_ep++) {
+           i++, ep++, num_ep++) {
                struct in_addr *a;
 
                a = (struct in_addr *)he->h_addr_list[i];
                snprintf(hname, sizeof(hname), "%s.0.111", inet_ntoa(*a));
-               eps[num_ep].uaddr = strdup(hname);
-               eps[num_ep].family = strdup("inet");
-               eps[num_ep].proto =  strdup("udp");
+               ep->uaddr = strdup(hname);
+               ep->family = strdup("inet");
+               ep->proto =  strdup("udp");
+               if (ep->uaddr == NULL || ep->family == NULL || ep->proto == NULL) {
+                       free_eps(eps, num_ep + 1);
+                       return (NULL);
+               }
        }
 
        srv->name = (nis_name) host;
@@ -253,7 +252,8 @@ __rpc_get_time_offset(struct timeval *td,   /* Time difference                      */
        nis_server              tsrv;
        void                    (*oldsig)() = NULL; /* old alarm handler */
        struct sockaddr_in      sin;
-       int                     s = RPC_ANYSOCK, len;
+       socklen_t               len;
+       int                     s = RPC_ANYSOCK;
        int                     type = 0;
 
        td->tv_sec = 0;
@@ -345,8 +345,8 @@ __rpc_get_time_offset(struct timeval *td,   /* Time difference                      */
        tv.tv_sec = 5;
        tv.tv_usec = 0;
        time_valid = 0;
-       status = clnt_call(clnt, RPCBPROC_GETTIME, xdr_void, NULL,
-                                       xdr_u_long, (char *)&thetime, tv);
+       status = clnt_call(clnt, RPCBPROC_GETTIME, (xdrproc_t)xdr_void, NULL,
+                                       (xdrproc_t)xdr_u_long, &thetime, tv);
        /*
         * The only error we check for is anything but success. In
         * fact we could have seen PROGMISMATCH if talking to a 4.1
index c8345e2..b086331 100644 (file)
@@ -28,7 +28,8 @@
  *
  * @(#)auth_unix.c     1.19 87/08/11 Copyr 1984 Sun Micro
  * @(#)auth_unix.c     2.2 88/08/01 4.0 RPCSRC
- * $FreeBSD: src/lib/libc/rpc/auth_unix.c,v 1.12 1999/12/29 05:04:16 peter Exp $
+ * $NetBSD: auth_unix.c,v 1.18 2000/07/06 03:03:30 christos Exp $
+ * $FreeBSD: src/lib/libc/rpc/auth_unix.c,v 1.18 2007/06/14 20:07:35 harti Exp $
  * $DragonFly: src/lib/libc/rpc/auth_unix.c,v 1.4 2005/11/13 12:27:04 swildner Exp $
  */
 
  *
  */
 
+#include "namespace.h"
+#include "reentrant.h"
+#include <sys/param.h>
+
+#include <assert.h>
+#include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 
-#include <sys/param.h>
 #include <rpc/types.h>
 #include <rpc/xdr.h>
 #include <rpc/auth.h>
 #include <rpc/auth_unix.h>
-
-/*
- * Unix authenticator operations vector
- */
-static void    authunix_nextverf();
-static bool_t  authunix_marshal();
-static bool_t  authunix_validate();
-static bool_t  authunix_refresh();
-static void    authunix_destroy();
-
-static struct auth_ops auth_unix_ops = {
-       authunix_nextverf,
-       authunix_marshal,
-       authunix_validate,
-       authunix_refresh,
-       authunix_destroy
-};
+#include "un-namespace.h"
+#include "mt_misc.h"
+
+/* auth_unix.c */
+static void             authunix_destroy(AUTH *);
+static bool_t           authunix_marshal(AUTH *, XDR *);
+static void             authunix_nextverf(AUTH *);
+static struct auth_ops *authunix_ops(void);
+static bool_t           authunix_refresh(AUTH *, void *);
+static bool_t           authunix_validate(AUTH *, struct opaque_auth *);
+static void             marshal_new_auth(AUTH *);
 
 /*
  * This struct is pointed to by the ah_private field of an auth_handle.
@@ -84,21 +84,6 @@ struct audata {
 };
 #define        AUTH_PRIVATE(auth)      ((struct audata *)auth->ah_private)
 
-static void marshal_new_auth();
-
-/*
- * This goop is here because some servers refuse to accept a
- * credential with more than some number (usually 8) supplementary
- * groups.  Blargh!
- */
-static int authunix_maxgrouplist = 0;
-
-void
-set_rpc_maxgrouplist(int num)
-{
-       authunix_maxgrouplist = num;
-}
-
 /*
  * Create a unix style authenticator.
  * Returns an auth handle with the given stuff in it.
@@ -116,40 +101,36 @@ authunix_create(char *machname, int uid, int gid, int len, int *aup_gids)
        /*
         * Allocate and set up auth handle
         */
-       auth = (AUTH *)mem_alloc(sizeof(*auth));
+       au = NULL;
+       auth = mem_alloc(sizeof(*auth));
 #ifndef _KERNEL
        if (auth == NULL) {
-               fprintf(stderr, "authunix_create: out of memory\n");
-               return (NULL);
+               warnx("authunix_create: out of memory");
+               goto cleanup_authunix_create;
        }
 #endif
-       au = (struct audata *)mem_alloc(sizeof(*au));
+       au = mem_alloc(sizeof(*au));
 #ifndef _KERNEL
        if (au == NULL) {
-               fprintf(stderr, "authunix_create: out of memory\n");
-               return (NULL);
+               warnx("authunix_create: out of memory");
+               goto cleanup_authunix_create;
        }
 #endif
-       auth->ah_ops = &auth_unix_ops;
+       auth->ah_ops = authunix_ops();
        auth->ah_private = (caddr_t)au;
        auth->ah_verf = au->au_shcred = _null_auth;
        au->au_shfaults = 0;
+       au->au_origcred.oa_base = NULL;
 
        /*
         * fill in param struct from the given params
         */
-       gettimeofday(&now,  (struct timezone *)0);
+       gettimeofday(&now, NULL);
        aup.aup_time = now.tv_sec;
        aup.aup_machname = machname;
        aup.aup_uid = uid;
        aup.aup_gid = gid;
-       /* GW: continuation of max group list hack */
-       if(authunix_maxgrouplist != 0) {
-               aup.aup_len = ((len < authunix_maxgrouplist) ? len
-                              : authunix_maxgrouplist);
-       } else {
-               aup.aup_len = (u_int)len;
-       }
+       aup.aup_len = (u_int)len;
        aup.aup_gids = aup_gids;
 
        /*
@@ -164,11 +145,11 @@ authunix_create(char *machname, int uid, int gid, int len, int *aup_gids)
        au->au_origcred.oa_base = mem_alloc((u_int) len);
 #else
        if ((au->au_origcred.oa_base = mem_alloc((u_int) len)) == NULL) {
-               fprintf(stderr, "authunix_create: out of memory\n");
-               return (NULL);
+               warnx("authunix_create: out of memory");
+               goto cleanup_authunix_create;
        }
 #endif
-       memcpy(au->au_origcred.oa_base, mymem, (u_int)len);
+       memmove(au->au_origcred.oa_base, mymem, (size_t)len);
 
        /*
         * set auth handle to reflect new cred.
@@ -176,6 +157,17 @@ authunix_create(char *machname, int uid, int gid, int len, int *aup_gids)
        auth->ah_cred = au->au_origcred;
        marshal_new_auth(auth);
        return (auth);
+#ifndef _KERNEL
+ cleanup_authunix_create:
+       if (auth)
+               mem_free(auth, sizeof(*auth));
+       if (au) {
+               if (au->au_origcred.oa_base)
+                       mem_free(au->au_origcred.oa_base, (u_int)len);
+               mem_free(au, sizeof(*au));
+       }
+       return (NULL);
+#endif
 }
 
 /*
@@ -186,31 +178,30 @@ AUTH *
 authunix_create_default(void)
 {
        int len;
-       char machname[MAX_MACHINE_NAME + 1];
-       int uid;
-       int gid;
-       int gids[NGRPS];
-       int i;
-       gid_t real_gids[NGROUPS];
-
-       if (gethostname(machname, MAX_MACHINE_NAME) == -1)
+       char machname[MAXHOSTNAMELEN + 1];
+       uid_t uid;
+       gid_t gid;
+       gid_t gids[NGROUPS_MAX];
+
+       if (gethostname(machname, sizeof machname) == -1)
                abort();
-       machname[MAX_MACHINE_NAME] = 0;
-       uid = (int)geteuid();
-       gid = (int)getegid();
-       if ((len = getgroups(NGROUPS, real_gids)) < 0)
+       machname[sizeof(machname) - 1] = 0;
+       uid = geteuid();
+       gid = getegid();
+       if ((len = getgroups(NGROUPS_MAX, gids)) < 0)
                abort();
-       if(len > NGRPS) len = NGRPS; /* GW: turn `gid_t's into `int's */
-       for(i = 0; i < len; i++) {
-               gids[i] = (int)real_gids[i];
-       }
-       return (authunix_create(machname, uid, gid, len, gids));
+       if (len > NGRPS)
+               len = NGRPS;
+       /* XXX: interface problem; those should all have been unsigned */
+       return (authunix_create(machname, (int)uid, (int)gid, len,
+           (int *)gids));
 }
 
 /*
  * authunix operations
  */
 
+/* ARGSUSED */
 static void
 authunix_nextverf(AUTH *auth)
 {
@@ -220,20 +211,28 @@ authunix_nextverf(AUTH *auth)
 static bool_t
 authunix_marshal(AUTH *auth, XDR *xdrs)
 {
-       struct audata *au = AUTH_PRIVATE(auth);