OpenBSD src changes summary for 2017-05-27
==========================================

distrib/miniroot                        etc/rc.d/rc.subr
etc/rc.d/ypbind                         lib/libc
lib/librthread                          libexec/getty
libexec/rpc.rstatd                      libexec/rpc.rwalld
regress/lib                             regress/sys
sbin/pfctl                              sbin/wsconsctl
share/man                               sys/arch/alpha/alpha
sys/arch/amd64/amd64                    sys/arch/amd64/include
sys/arch/arm64/arm64                    sys/arch/arm64/include
sys/arch/i386/i386                      sys/arch/i386/include
sys/arch/mips64/mips64                  sys/arch/sparc64/conf
sys/arch/sparc64/include                sys/arch/sparc64/sparc64
sys/conf                                sys/ddb
sys/dev/ic                              sys/dev/pci
sys/dev/pv                              sys/dev/wscons
sys/kern                                sys/lib/libsa
sys/net                                 sys/netinet
sys/sys                                 usr.bin/banner
usr.bin/doas                            usr.bin/libtool
usr.sbin/acme-client                    usr.sbin/bgpd
usr.sbin/relayd                         usr.sbin/slaacctl
usr.sbin/slaacd                         usr.sbin/syspatch
usr.sbin/vmd                            

== distrib =========================================================== 01/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/distrib

miniroot

  ~ install.sub                           

  > De-duplicate sets selection instructions, and give a short example.
  > Still one lines shorter.
  > Input and okay from tedu@ and deraadt@; also a "weak" okay from sthen@.
  > (zhuk@)

== etc =============================================================== 02/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/etc

rc.d/rc.subr

  ~ rc.d/rc.subr                          

  > Add an ALRM timer to cope with 2 annoying issues in rc.d(8):
  > - prevent a daemon from hanging the boot
  > (typo in your flagsm e.g. httpd_flags=-d)
  > - make sure we can get the status of a backgrounded daemon instead of
  > always
  > returning success
  > Side effect of this is that we can kill a knob! rip rc_bg :-)
  > Ports will need love, and a second commit is coming for that.
  > The diff is small yet not trivial so I am committing early in the release
  > process in one shot so it can easily be reverted if needed. I started
  > working on
  > this during g2k16 in Cambridge then finished it in Brisbane for a2k17 where
  > robert@, beck@ and sthen@ agreed it was the correct way to go and I should
  > move
  > ahead with it post 6.1.
  > If you see any regression, please talk to me! (ajacoutot@)

  ~ rc.d/rc.subr                          

  > Ok turns out we still want to keep the rc_bg variable around but we need
  > to know which daemon cannot background themselves (actually we want to
  > know the opposite, but there are much more). However, it's only needed in
  > _rc_wait and rc.subr still does its magic without the need to add `&'.
  > (ajacoutot@)

rc.d/ypbind

  ~ rc.d/ypbind                           

  > Add an ALRM timer to cope with 2 annoying issues in rc.d(8):
  > - prevent a daemon from hanging the boot
  > (typo in your flagsm e.g. httpd_flags=-d)
  > - make sure we can get the status of a backgrounded daemon instead of
  > always
  > returning success
  > Side effect of this is that we can kill a knob! rip rc_bg :-)
  > Ports will need love, and a second commit is coming for that.
  > The diff is small yet not trivial so I am committing early in the release
  > process in one shot so it can easily be reverted if needed. I started
  > working on
  > this during g2k16 in Cambridge then finished it in Brisbane for a2k17 where
  > robert@, beck@ and sthen@ agreed it was the correct way to go and I should
  > move
  > ahead with it post 6.1.
  > If you see any regression, please talk to me! (ajacoutot@)

  ~ rc.d/ypbind                           

  > Ok turns out we still want to keep the rc_bg variable around but we need
  > to know which daemon cannot background themselves (actually we want to
  > know the opposite, but there are much more). However, it's only needed in
  > _rc_wait and rc.subr still does its magic without the need to add `&'.
  > (ajacoutot@)

== lib =============================================================== 03/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib

libc

  ~ hash/sha2.c                           

  > move sha224_initial_hash_value[] under !SHA2_SMALL; ok deraadt@ millert@
  > (naddy@)

librthread

  ~ rthread.h                             ~ rthread_libc.c
  + synch.h                               + rthread_cond.c
  + rthread_mutex.c                       

  > New mutex and condvar implementations based on futex(2).
  > Not enabled yet, it needs some SPINLOCK_SPIN_HOOK love and
  > some bumps.
  > Tested by many including sthen@ in a bulk.
  > ok visa@, sthen@, kettenis@, tedu@ (mpi@)

== libexec =========================================================== 04/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/libexec

getty

  ~ subr.c                                

  > unifdef XXX_DELAY which is older than i am (tedu@)

  ~ main.c                                

  > remove the getname() code trying to handle baud < 1200 terminals.
  > leave the special down under code until somebody unearths why it exists.
  > (tedu@)

  ~ gettytab.5                            ~ main.c

  > Stop supporting primordial # (erase) and @ (kill) sequences.
  > ok tedu (deraadt@)

  ~ main.c                                

  > Stop echoing ANSI sequences back to the console, by expanding ESC character
  > to literal ^[.  This makes getty interaction appear more like login, and
  > stops a mid-ANSI sequence parsing problem that messed up login, making it
  > freeze the session until timeout.
  > ok tedu fcambus (deraadt@)

rpc.rstatd

  ~ rstat_proc.c                          

  > bzero -> memset (tedu@)

rpc.rwalld

  ~ rwalld.c                              

  > remove support for OSF (tedu@)

== regress =========================================================== 05/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/regress

lib

  ~ libpthread/sigwait/sigwait.c          

  > Go to sleep to let our contending thread win a race.
  > Because we cannot assume that the contending thread will grab it
  > between our unlock/lock.
  > ok kettenis@ (mpi@)

  ~ libpthread/restart/connect/connect.c

  > Do not connect to cvs.openbsd.org in regress.  Run on loopback to
  > make the test pass without internet access.
  > OK mpi@ (bluhm@)

  ~ libc/qsort/qsort_test.c               

  > Also test arrays of double and long long. (millert@)

sys

  ~ netinet/ipsec/Makefile                

  > Do not use reject routes as they prevent path MTU discovery.
  > Drop possible old TCP connections from previous test runs.
  > Adapt regex that checks tcpdump pflog0, output has been fixed. (bluhm@)

== sbin ============================================================== 06/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sbin

pfctl

  ~ pfctl_osfp.c                          

  > Move includes.
  > This reduces the diff with usr.sbin/tcpdump/pfctl_osfp.c. The change
  > from tcpdump is newer, so change pfctl. No binary change.
  > OK deraadt@ (akfaew@)

wsconsctl

  ~ wsconsctl.8                           

  > Mention the display.font variable in EXAMPLES.
  > As mentioned by miod@ here [1], wsconsctl(8) has a currently
  > undocumented 'display.font' variable allowing to change the
  > current font on framebuffer consoles.
  > [1] http://undeadly.org/cgi?action=article&sid=20131023125815
  > OK deraadt@ (fcambus@)

== share ============================================================= 07/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/share

man

  ~ man4/options.4                        

  > option KEY got tedued. (claudio@)

  ~ man8/rc.d.8                           ~ man8/rc.subr.8

  > Add an ALRM timer to cope with 2 annoying issues in rc.d(8):
  > - prevent a daemon from hanging the boot
  > (typo in your flagsm e.g. httpd_flags=-d)
  > - make sure we can get the status of a backgrounded daemon instead of
  > always
  > returning success
  > Side effect of this is that we can kill a knob! rip rc_bg :-)
  > Ports will need love, and a second commit is coming for that.
  > The diff is small yet not trivial so I am committing early in the release
  > process in one shot so it can easily be reverted if needed. I started
  > working on
  > this during g2k16 in Cambridge then finished it in Brisbane for a2k17 where
  > robert@, beck@ and sthen@ agreed it was the correct way to go and I should
  > move
  > ahead with it post 6.1.
  > If you see any regression, please talk to me! (ajacoutot@)

  ~ man8/rc.subr.8                        

  > Ok turns out we still want to keep the rc_bg variable around but we need
  > to know which daemon cannot background themselves (actually we want to
  > know the opposite, but there are much more). However, it's only needed in
  > _rc_wait and rc.subr still does its magic without the need to add `&'.
  > (ajacoutot@)

  ~ man5/port-modules.5                   

  > remove devel/waf gone 2 years ago, may not come back but still gives
  > nightmares
  > ok ajacoutot (jung@)

== sys =============================================================== 08/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys

arch/alpha/alpha

  ~ locore.s                              

  > Implement copyin32(9) for alpha. (kettenis@)

arch/amd64/amd64

  ~ vmm.c                                 

  > add missing prototype (mlarkin@)

  ~ cpu.c                                 

  > manually inline tlbflushg. it's short and there's only one caller.
  > ok deraadt (tedu@)

arch/amd64/include

  ~ cpufunc.h                             

  > there shouldn't be any need to check for PGE on amd64. ok deraadt mlarkin
  > (tedu@)

  ~ cpufunc.h                             

  > manually inline tlbflushg. it's short and there's only one caller.
  > ok deraadt (tedu@)

  ~ atomic.h                              

  > On i386 and amd64, atomic instructions include an implicit memory barrier.
  > ok mikeb@, visa@, mpi@ (kettenis@)

arch/arm64/arm64

  ~ machdep.c                             

  > Use EFI memory map to discover available physical memory.
  > Fall back on improved code that parses the FDT /memory node.
  > However, on machines with "real" UEFI firmware, /memory may include
  > reserved memory that we shouldn't use (it does on the Overdrive 1000).
  > On those machines, make sure that you use BOOTAA64 0.3 or later such that
  > the EFI memory map gets used.
  > For now, print out the EFI memory map to help debug any issues.
  > ok patrick@ (kettenis@)

arch/arm64/include

  ~ vmparam.h                             

  > Use EFI memory map to discover available physical memory.
  > Fall back on improved code that parses the FDT /memory node.
  > However, on machines with "real" UEFI firmware, /memory may include
  > reserved memory that we shouldn't use (it does on the Overdrive 1000).
  > On those machines, make sure that you use BOOTAA64 0.3 or later such that
  > the EFI memory map gets used.
  > For now, print out the EFI memory map to help debug any issues.
  > ok patrick@ (kettenis@)

arch/i386/i386

  ~ cpu.c                                 

  > manually inline tlbflushg. it's short and there's only one caller.
  > ok deraadt (tedu@)

arch/i386/include

  ~ cpufunc.h                             

  > manually inline tlbflushg. it's short and there's only one caller.
  > ok deraadt (tedu@)

  ~ atomic.h                              

  > On i386 and amd64, atomic instructions include an implicit memory barrier.
  > ok mikeb@, visa@, mpi@ (kettenis@)

arch/mips64/mips64

  ~ pmap.c                                

  > Check cache_valias_mask earlier in the expression. The value is zero
  > on most systems, so this tweak should save an iota of CPU time. (visa@)

arch/sparc64/conf

  ~ ld.script                             

  > Make room for another 4GB of .text. (kettenis@)

arch/sparc64/include

  ~ lock.h                                

  > Move SPINLOCK_SPIN_HOOK to the header used by other archs in order to
  > prepare the terrain for MI locks.
  > ok kettenis@ (mpi@)

arch/sparc64/sparc64

  ~ pmap.c                                

  > Claim physical memory allocated during early bootstrap from the PROM.
  > (kettenis@)

  ~ lock_machdep.c                        

  > Move SPINLOCK_SPIN_HOOK to the header used by other archs in order to
  > prepare the terrain for MI locks.
  > ok kettenis@ (mpi@)

conf

  ~ GENERIC                               

  > Kill option KEY, it is a useless knob, nobody uses pfkeyv2 without IPSEC or
  > tcp md5. OK mpi@ (claudio@)

ddb

  ~ db_ctf.c                              

  > Spring cleanup:
  > - Cache the string table pointer
  > - Unify return statements
  > - Use the end of the symbol table rather than counting symbols (mpi@)

  ~ db_sym.c                              

  > Make ddb print again filename and linenumber if a bsd.gdb was loaded.
  > mpi@ agrees that this is correct. (claudio@)

dev/ic

  ~ nvme.c                                ~ nvmevar.h

  > nvme: Add suspend/resume code
  > Based on an initial patch by ehrhardt@ . Thanks to claudio@ for testing
  > and deraadt@ for advice.
  > "go ahead" deraadt@ (sf@)

  ~ nvme.c                                

  > nvme: Don't set prp1 for DEL_IOCQ
  > NVM_ADMIN_DEL_IOCQ does not need prp1 (just as NVM_ADMIN_DEL_IOSQ).
  > Remove what is likely a cut'n'paste error from the *_ADD_* code.
  > tested by claudio@
  > ok jmatthew@ (sf@)

dev/pci

  ~ ahci_pci.c                            

  > remove #ifdef HIBERNATE section that declares stuff that lives in ahci.c
  > (jmatthew@)

dev/pv

  ~ vioscsi.c                             

  > Move error path to end of function where god intended it
  > to be. goto'ing upwards into an 'if' statement block
  > is weird.
  > ok sf@ (krw@)

  ~ virtio.c                              

  > virtio: Remove MINSEG_INDIRECT
  > Remove MINSEG_INDIRECT as a tweakable define. Always use indirect
  > descriptors if we have more than 1 segment. Add a comment to document
  > the way if_vio.c uses maxnsegs in virtio_alloc_vq() to disable
  > indirect descriptors for a queue.
  > Based on a diff from krw@ (sf@)

  ~ virtiovar.h                           ~ virtio.c

  > virtio: remove unused vq_maxsegsize (sf@)

dev/wscons

  ~ ascii.h                               

  > Add missing comments for CAN and SUB, for consistency.
  > OK tb@ (fcambus@)

kern

  ~ uipc_domain.c                         

  > Kill option KEY, it is a useless knob, nobody uses pfkeyv2 without IPSEC or
  > tcp md5. OK mpi@ (claudio@)

  ~ uipc_mbuf.c                           

  > Refactor m_makespace() using MCLGETI to simplify the logic of this
  > function.
  > Still quite complicated but more legible in the end and it will do less
  > M_GET calls for huge packets.
  > OK bluhm@ (claudio@)

  ~ uipc_mbuf.c                           

  > Put an assert that M_PKTHDR is set before accessing m_pkthdr in the
  > mbuf functions.
  > OK claudio@ (bluhm@)

  ~ sys_futex.c                           

  > Use copyin32(9) to atomically copy the futex from user space.
  > On !MULTIPROCESSOR kernels we still fall back on copyin(9), but that is
  > fine.  This will break m88k MULTIPROCESSOR kernels.
  > ok deraadt@, mpi@, visa@ (kettenis@)

  ~ uipc_socket.c                         ~ uipc_socket2.c

  > Push the NET_LOCK down into PF_KEY so that it can be treated like PF_ROUTE.
  > Only pfkeyv2_send() needs the NET_LOCK() so grab it at the start and
  > release
  > at the end.  This should allow to push the locks down in other places.
  > OK mpi@, bluhm@ (claudio@)

lib/libsa

  ~ sha2.c                                

  > move sha224_initial_hash_value[] under !SHA2_SMALL; ok deraadt@ millert@
  > (naddy@)

net

  ~ if_tun.c                              

  > Remove superflyous splnet()/splx() dances.
  > ok bluhm@ (mpi@)

  ~ route.c                               

  > In ifa_ifwithroute() the rtalloc() needs to be done against the rdomain
  > so use rtable_l2() to get the right id. Fixes adding routes to rtables.
  > OK mpi@ phessler@ (claudio@)

  ~ pipex.c                               

  > Remove obsolete comment talking about splnet(). (mpi@)

  ~ pipex.c                               

  > Use rn_inithead() instead of rn_inithead0().  Since rn_inithead0()
  > doesn't trigger rn_initmask() and first session had caused panics.
  > Reported by VOblezov at mtsbank.ru. (yasuoka@)

  ~ if_pfsync.c                           

  > Remove useless splnet()/splx() dances.
  > pfsyncioctl() is executed with the NET_LOCK() held which is enough.
  > ok sashan@ (mpi@)

  ~ if_pppoe.c                            

  > Protect the global list of softc with the NET_LOCK().
  > While here remove superfluous splnet()/splx() in the ioctl routine.
  > ok sashan@ (mpi@)

  ~ if_ppp.c                              

  > Protect the global list of softc with the NET_LOCK().
  > ok sashan@ (mpi@)

  ~ pfkeyv2.c                             

  > Push the NET_LOCK down into PF_KEY so that it can be treated like PF_ROUTE.
  > Only pfkeyv2_send() needs the NET_LOCK() so grab it at the start and
  > release
  > at the end.  This should allow to push the locks down in other places.
  > OK mpi@, bluhm@ (claudio@)

  ~ if_pflow.c                            ~ if_pflow.h

  > move sending of pflow packet into a task, seperated from the data
  > collection by a mbuf queue. with help from mpi@
  > ok florian@ (benno@)

  ~ if_pflow.c                            

  > fix previous as noted by mpi, thx florian (benno@)

netinet

  ~ ip_carp.c                             

  > Fix the carp mode 'balancing ip-stealth'.  Set the link state UP
  > if at least one vhid is in state MASTER.
  > from Florian Riehm; OK florian@ (bluhm@)

sys

  ~ atomic.h                              

  > Add membar_enter_after_atomic(9) and membar_exit_before_atomic(9) APIs to
  > allow important optimizations on architectures where atomic instructions
  > include and implied memory barrier.
  > ok mikeb@, visa@, mpi@ (kettenis@)

== usr.bin =========================================================== 09/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin

banner

  ~ Makefile                              ~ banner.c
  ~ banner.h                              ~ chset.c

  > trim some unused compile options for alternative character forms. (tedu@)

doas

  ~ doas.c                                

  > for password failure, print Authorization failed instead of EPERM.
  > will make things less confusing with commands rejected by config file.
  > (tedu@)

libtool

  ~ LT/Getopt.pm                          

  > Make libtool handle --tag=... inside command line.
  > Unbreaks (and changes PLIST) multimedia/lives under Clang, and maybe
  > others.
  > okay espie@ (zhuk@)

== usr.sbin ========================================================== 10/10 ==

  http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.sbin

acme-client

  ~ main.c                                

  > Use basename(3) instead of hand rolling it.
  > Gets rid of double slashes, pointed out by Raf Czlonka (rczlonka at
  > gmail), thanks!
  > OK benno (florian@)

bgpd

  ~ bgpd.h                                

  > fix the reference to draft-ymbk-grow-blackholing, to RFC 7999 (phessler@)

  ~ bgpd.conf.5                           ~ bgpd.h
  ~ parse.y                               ~ printconf.c
  ~ rde_filter.c                          

  > allow us to use 'local-as' in the filter language
  > "match in from any set community local-as:neighbor-as"
  > OK claudio@ (phessler@)

  ~ bgpd.conf.5                           ~ parse.y
  ~ printconf.c                           ~ rde.c
  ~ rde_filter.c                          ~ rde_update.c
  ~ session.c                             

  > Allow OpenBGPD to selectively choose which local ASN to use per-peer.
  > This is intended to be used for ASN migrations, not for permanent use.
  > You MUST use filters to protect yourself from receiving your own routes.
  > There be dragons and grues.
  > OK claudio@ benno@ (phessler@)

  ~ mrt.c                                 

  > this expects 2byte ASN, so use that, instead of an asn that may or may not
  > fit
  > noticed by and OK claudio@ (phessler@)

  ~ bgpd.h                                

  > bump the size of ctl rib flags
  > OK claudio@ (phessler@)

  ~ parse.y                               

  > allow only one network <prefix> statement per for the same prefix.
  > ok florian@ phessler@ (benno@)

  ~ bgpd.conf.5                           ~ bgpd.h
  ~ parse.y                               ~ printconf.c
  ~ rde.c                                 

  > Allow an administrator to disable the bgp loop detection algorithm,
  > which is useful in very limited situations.
  > Angry dragons and grues will hunt for you, if you use it.
  > OK claudio@ sthen@ benno@ (phessler@)

relayd

  ~ Makefile                              ~ ca.c
  ~ check_tcp.c                           ~ config.c
  ~ hce.c                                 ~ parse.y
  ~ relay.c                               ~ relay_http.c
  ~ relayd.c                              ~ relayd.h
  ~ ssl.c                                 + boguskeys.h
  + check_tls.c                           

  > Migrate relayd to use libtls for TLS. Still does the TLS privsep via the
  > engine but at least we can use a sane API for new features.
  > Going in now so it is possible to work with this in tree.
  > General agreement at d2k17. (claudio@)

slaacctl

  ~ slaacctl.c                            

  > no longer carry addresses in struct radv_prefix (florian@)

  ~ slaacctl.c                            

  > show address proposals in slaacdctl show interface output (florian@)

  ~ slaacctl.c                            

  > do not use %hhu (florian@)

  ~ slaacctl.c                            

  > print router preference (florian@)

slaacd

  ~ slaacd.c                              

  > bluhm pointed out that the prefix itself can be scoped, too. So we
  > need to pass around sockaddr_in6s for that, too. While here add some
  > more validation of what we get handed in as proposal from engine.
  > (florian@)

  ~ slaacd.c                              

  > send route label (florian@)

  ~ engine.c                              

  > move towards $thing proposals and attach them to iface (florian@)

  ~ engine.c                              

  > we need to loop over all proposals (florian@)

  ~ engine.c                              ~ slaacd.h

  > no longer carry addresses in struct radv_prefix (florian@)

  ~ engine.c                              

  > proposal state (florian@)

  ~ engine.c                              ~ engine.h
  ~ slaacd.c                              

  > use new address_proposal struct to generate proposals (florian@)

  ~ engine.c                              ~ engine.h
  ~ frontend.c                            ~ slaacd.c
  ~ slaacd.h                              

  > handle proposal ack (florian@)

  ~ slaacd.c                              

  > remove unused vars (florian@)

  ~ engine.c                              ~ engine.h
  ~ frontend.c                            ~ slaacd.c
  ~ slaacd.h                              

  > configure address on interface (florian@)

  ~ frontend.c                            

  > sync route socket processing to netcfgd
  > - handle multiple messages
  > - switch to get_rtaddrs() to get an array of addresses transported in
  > the message (florian@)

  ~ engine.c                              ~ frontend.c
  ~ slaacd.c                              ~ slaacd.h

  > delete proposal if address gets deleted (florian@)

  ~ engine.c                              ~ frontend.c
  ~ slaacd.c                              ~ slaacd.h

  > show address proposals in slaacdctl show interface output (florian@)

  ~ engine.c                              

  > do not use %hhu (florian@)

  ~ engine.c                              

  > there is no need to construct and send a proposal if we reached the
  > limit and just remove the list element directly afterwards (florian@)

  ~ engine.c                              

  > handle expiration / renewal of non-privacy addresses (florian@)

  ~ slaacd.c                              

  > SOCK_CLOEXEC | SOCK_NONBLOCK (florian@)

  ~ slaacd.c                              

  > remove unused vars (florian@)

  ~ Makefile                              ~ engine.c
  ~ frontend.c                            ~ slaacd.c
  ~ slaacd.h                              

  > Generate a fake ack (or is it an alternative ack?) internally.
  > This allows slaacd to configure addresses in the absence of
  > netcfgd and might be a less scary step forward to move
  > stateless address autoconfiguration out of the kernel.
  > This intentionally a compile time option and will go away
  > once we figure out how to do proposals. (florian@)

  ~ engine.c                              ~ slaacd.h

  > print router preference (florian@)

  ~ slaacd.h                              

  > use sizeof("constant string") to avoid magic number (florian@)

syspatch

  ~ syspatch.sh                           

  > When running from cron, the ftp(1) progress bar is not shown; that's all
  > fine
  > and dandy except that if there's fetch/verify error, we may not know which
  > syspatch caused this. So if we're not associated with a terminal, just echo
  > what ftp -VD would (without the progress bar). (ajacoutot@)

vmd

  ~ virtio.c                              

  > use pread and pwrite to save code and syscalls. ok mlarkin (tedu@)

===============================================================================
_______________________________________________
odc mailing list
[email protected]
http://www.squish.net/mailman/listinfo/odc

Reply via email to