berny@tndsyd.oz.au (Berny Goodheart) (03/10/91)
I am interested in finding out known ways to make your version of UNIX crash. If you know of a particular application, program bug or programming algorithm that will guarantee to cause your UNIX Operating system to crash I would like to hear about it. Tell me as much info as possible i.e., what the machine is and what version of the OS it is, how does the problem manifest itself, etc. I am particularly interested in generic bugs. .===========================================================================. | ACSnet: berny@tndsyd.oz UUCP: uunet!munnari.oz!tndsyd.oz.au!berny | | INTERNET: berny@tndsyd.oz.au DOMAIN: goodheart_berny@tandem.com | | PSMAIL: smtpgate @comm(berny@tndsyd.oz@munnari.oz.au) | TANDEM Computers Incorporated 76 Berry St, North Sydney, NSW, 2060, Australia
gill@boris.mscs.mu.edu (VAXDEATH (Ender) Gill) (03/11/91)
In article <690@tndsyd.oz.au> berny@tndsyd.oz.au (Berny Goodheart) writes: > >I am interested in finding out known ways to make your version of UNIX >crash. If you know of a particular application, program bug or programming main() { fork (); main (); } This brought the system crashing to a halt, before they set up a quota for process. The system was a SysV 3.0, on 3B5. Also, running two copies of Franz Lisp simultaneously would cause the system to crash. This bug has since been fixed. cheers -dicky gill (Violator) -gill@boris.mscs.mu.edu
mike (03/11/91)
In an article, tndsyd.oz.au!berny (Berny Goodheart) writes: >I am interested in finding out known ways to make your version of UNIX >crash. main() { int fd; long now; time(&now); if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) return(1); while ( write(fd,&now,sizeof(long)) == sizeof(long) ) ; close(fd); return(0); } -- Michael Stefanik, MGI Inc., Los Angeles| Opinions stated are not even my own. Title of the week: Systems Engineer | UUCP: ...!uunet!bria!mike ------------------------------------------------------------------------------- Remember folks: If you can't flame MS-DOS, then what _can_ you flame?
sow@cad.luth.se (Sven-Ove Westberg) (03/12/91)
In article <690@tndsyd.oz.au> berny@tndsyd.oz.au (Berny Goodheart) writes: | My favorite on SunOS 4.0x is df /dev/*b (the swap partition) It did not crash but the computer hangs forever. Sven-Ove Westberg, CAD, University of Lulea, S-951 87 Lulea, Sweden.
brendan@cs.widener.edu (Brendan Kehoe) (03/12/91)
In <513@bria>, uunet!bria!mike writes: >In an article, tndsyd.oz.au!berny (Berny Goodheart) writes: >>I am interested in finding out known ways to make your version of UNIX >>crash. > if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) If your sysadmin (much less the vendor itself) left /dev/kmem world WRITABLE, they're begging for this kind of thing. Readable, possibly; writable, c'mon. -- Brendan Kehoe - Widener Sun Network Manager - brendan@cs.widener.edu Widener University in Chester, PA A Bloody Sun-Dec War Zone
scs@iti.org (Steve Simmons) (03/13/91)
In an article, tndsyd.oz.au!berny (Berny Goodheart) writes: >I am interested in finding out known ways to make your version of UNIX >crash. In article <513@bria> Michaoe Stefanik replies: >main() >{ >int fd; >long now; > time(&now); > if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) > return(1); > while ( write(fd,&now,sizeof(long)) == sizeof(long) ) > ; > close(fd); > return(0); >} Too verbose. On a Sun, try 'b etc/dump' at the '>' prompt. Do I need a smiley? -- "Our informal mission is to improve the love life of operators worldwide." Peter Behrendt, president of Exabyte. Quoted in Digital Review, Feb 4, 1991.
ag@amix.commodore.com (Keith "Cheese Whiz" Gabryelski) (03/13/91)
In article <513@bria> uunet!bria!mike writes: >In an article, tndsyd.oz.au!berny (Berny Goodheart) writes: >>I am interested in finding out known ways to make your version of >>UNIX crash. > >[Code to scribble on /dev/kmem--deleted] Sheeeeiiittt. Just `reading' from /dev/kmem can hose your system if you have write-only registers mapped into kernel address space. Try: ``cat /dev/kmem >/dev/null''. Pax, Keith -- Too many people take too many risks. Too many people I see get dis'd. Keith Gabryelski Advanced Products Group ag@amix.commodore.com ...!cbmvax!amix!ag
ronnie@mindcraft.com (Ronnie Kon) (03/13/91)
May I suggest that posting ways of crashing machines may not be the best of ideas? Ronnie ------------------------------------------------------------------------------- Ronnie B. Kon | kon@groundfog.stanford.edu | "I like that everyone becomes food." ...!{decwrl,ames}!mindcrf!ronnie | -- Hobbes -------------------------------------------------------------------------------
tar@math.ksu.edu (Tim Ramsey) (03/13/91)
[ diverging a bit, so I added alt.folklore.computers to the Newsgroups: and Followup-To: ] In article <513@bria>: >In an article, tndsyd.oz.au!berny (Berny Goodheart) writes: >>I am interested in finding out known ways to make your version of UNIX >>crash. > time(&now); > if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) > return(1); > while ( write(fd,&now,sizeof(long)) == sizeof(long) ) > ; A couple of years ago in an extreme fit of boredom, on an unused ATT 3B2/400 running SysV 3.1, I did the following: hack# yes > /dev/kmem (where yes just writes a stream of "y\n" to stdout) Nothing happened. I let it run for a couple of minutes with no apparent effect. Perhaps the writes weren't moving the seek pointer in kmem, so it wasn't writing over anything interesting. I wasn't energetic enough to find out. All in all, it didn't help my boredom. :) -- Tim Ramsey (tar@math.ksu.edu) (913) 532-6750 (voice) (913) 532-7004 (FAX) Department of Mathematics, Kansas State University, Manhattan KS 66506-2602
tar@math.ksu.edu (Tim Ramsey) (03/13/91)
brendan@cs.widener.edu (Brendan Kehoe) writes: [ ... ] > If your sysadmin (much less the vendor itself) left /dev/kmem world > WRITABLE, they're begging for this kind of thing. Readable, possibly; > writable, c'mon. A readable kmem is still a bit no no. Somewhere around here I have small program that lets you peek at what someone is typing by watching tty clists. It will let you crash the system; it just takes a little longer (you have to wait for someone to type in the root password so you can su and cat /bin/emacs to /dev/null :) -- Tim Ramsey (tar@math.ksu.edu) (913) 532-6750 (voice) (913) 532-7004 (FAX) Department of Mathematics, Kansas State University, Manhattan KS 66506-2602
jc@raven.bu.edu (James Cameron) (03/13/91)
>>>>> On 12 Mar 91 23:45:37 GMT, ronnie@mindcraft.com (Ronnie Kon) said:
RK> May I suggest that posting ways of crashing machines may not be the best of
RK> ideas?
RK> Ronnie
I would like to second the suggestion. Why would anyone really want
to know HOW to crash it, unless they WANTED to crash it? Now,
if someone said "the code crashes the system; why?" that would be
fair. (IMHO)
JC
--
James Cameron - jc@raven.bu.edu
Signal Processing and Interpretation Lab, ECS Engineering Dept.
Boston University, Boston MA
Work: 617 353-2879
Information Technology
Boston University, Boston MA
work: 617 353-2780 ext. 338
"But to risk we must, because the greatest hazard in life
is to risk nothing. For the man or woman who risks nothing, has
nothing, does nothing, is nothing."
(A quote from the eulogy for the late Christa McAuliffe.)
jmason@gpu.utcs.utoronto.ca (Jamie Mason) (03/13/91)
In article <589@spool.mu.edu> gill@boris.mscs.mu.edu (VAXDEATH (Ender) Gill) writes: > >main() >{ > fork (); > main (); >} > >This brought the system crashing to a halt, before they set up a quota >for process. The system was a SysV 3.0, on 3B5. Isn't C syntax fun? main() { while (1) fork(); } These only destroy the machine if you do not have a per-user process limit. If you do, you just bring YOURSELF to a grinding halt. > Also, running two copies of Franz Lisp simultaneously would cause >the system to crash. This bug has since been fixed. Well we have PCL (Commoin Lisp) at our faciltiy. No bug, but each process apparently allocates itself FIVE MEGABYTES of memory. When the Lisp class has an assignment due... Well guess what it does to the memory swapper?!? It does not CRASH the system, but drives it into the dirt. Might I suggest a nicer way to abuse your Unix? This works even if there is a per-user process limit... #define BIGNUM 128*1024*1024 #define PAGESIZE 4*1024 char eatmem[BIGNUM]; main() { for (i=0 ; i += PAGESIZE ; i < BIGNUM) ++eatmem[i]; } Define BIGNUM to be a REAL large amount of memory that your system will allow you to have in your DATASIZE limit. Alternately, you could MALLOC the memory instead of making it static, subject to your MEMORYUSE limit. Define PAGESIZE to be the size of the memory page the swapper pages in on your system. Now comes the fun part: foo.bar% cc thrash.c foo.bar% a.out This cute little program will allocate a HUGE amount of memory, then read it in a way which makes the swapper do a page-in for *EVERY ACCESS*!! This slows the system down to a *TOTAL* crawl... Almost a crash. Of course you could write a program which simply malloc()s 512k, then another 512k, and another... (Assuming you do not have per-usre limits on 'memoryuse') Until you run out of swap space... PANIC: out of swap space <CRASH!> Kids, *DO NOT TRY THIS AT HOME*!! Seriously, a cute little program can do *REAL* nasty things to your favourite UNIX box... Don't do in on any machine on which you plan on keeping your account :-) Jamie ... "Who was that Masked Interrupt?" Written On Wednesday, March 13, 1991 at 12:23:27am EST
rodney@tyrell.gtc.de (Rodney Volz) (03/15/91)
In article <1991Mar12.132003.27383@cs.widener.edu> brendan@cs.widener.edu (Brendan Kehoe) writes: > >In <513@bria>, uunet!bria!mike writes: >> >> if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) > > If your sysadmin (much less the vendor itself) left /dev/kmem world > WRITABLE, they're begging for this kind of thing. Readable, possibly; > writable, c'mon. Right. You don't even need C-programs to make the shoebox woe. $ cat /etc/termcap > /dev/kmem :-) -Rod -- Rodney Volz - 7000 Stuttgart 1 - FRG ============> ...uunet!mcsun!unido!gtc!aragon!tyrell!rodney <============= rodney@tyrell.gtc.de * rodney@delos.stgt.sub.org * rodney@mcshh.hanse.de \_____________ May your children and mine live in peace. ______________/
daveh@marob.uucp (Dave Hammond) (03/15/91)
In article <690@tndsyd.oz.au> berny@tndsyd.oz.au (Berny Goodheart) writes: > >I am interested in finding out known ways to make your version of UNIX >crash. System: Altos System V uname -a: unix ces 5.3.1 d 386/2000 (empty) (empty) (empty) 10 $ stty line 1 # the only installed line discipline is 0. -- Dave Hammond daveh@marob.uucp uunet!rutgers!phri!marob!daveh
jc@minya.UUCP (John Chambers) (03/15/91)
In article <JC.91Mar12232818@raven.bu.edu>, jc@raven.bu.edu (James Cameron) writes: > >>>>> On 12 Mar 91 23:45:37 GMT, ronnie@mindcraft.com (Ronnie Kon) said: > > RK> May I suggest that posting ways of crashing machines may not be the best of > RK> ideas? > RK> Ronnie > > I would like to second the suggestion. Why would anyone really want > to know HOW to crash it, unless they WANTED to crash it? Jeez, do we have to go through this "Don't tell them about problems; they'll just try to exploit them" argument yet again? There's a very simple and practical explanation. Some of us are trying to provide robust, secure, etc. releases of systems. If nobody tells us about the problems, how do you expect us to ever fix them? Keeping us ignorant of the problems is NOT the solution. This is a professional Unix administrators' bulletin board; it's hard to imagine a better place to post ways of damaging a Unix system. There's also comp.unix.internals, if you want another good place. (But telling the administrators will likely get faster results. :-) It'd also help if, rather than being insulting, people would followup with ways to correct the problem. One is the following permissions: cr--r----- 1 root kmem 2, 1 Sep 20 1989 /dev/kmem -r-xr-sr-x 2 root kmem 10038 Sep 20 1989 /bin/df -r-xr-sr-x 1 root kmem 21810 Sep 20 1989 /bin/ps and similarly for any other program that needs to read kmem. Many Unix systems come without the kmem group, and often have programs like ps that are setuid-root. This in general isn't the right way to do it. There should be as few setuid-root programs as possible, because of the problems with bugs and undocumented features. It is almost always possible to use setgid instead of setuid, giving much better security. One gotcha in the above: On some systems (Convex is one), ps must be left setuid-root, because it checks its euid, and if it isn't a super-user, it refuses to work. I found this the hard way, trying to do the above, and had to put ps back as I found it. Sigh. -- All opinions Copyright (c) 1991 by John Chambers. Inquire for licensing at: Home: 1-617-484-6393 Work: 1-508-486-5475 Uucp: ...!{bu.edu,harvard.edu,ima.com,eddie.mit.edu,ora.com}!minya!jc
lisbon@vpnet.chi.il.us (Gerry Swetsky) (03/16/91)
In article <668821542.3830@mindcraft.com> ronnie@mindcraft.com (Ronnie Kon) writes: >May I suggest that posting ways of crashing machines may not be the best of >ideas? Nah, that's okay, Ronnie. We're just compiling names of the idea posters here in case any one of them ever applies for a shell account on vpnet. :-) There's an ultra nasty way to bring Unix to a halt with a three line shell script. Dennis Ritchie wrote about in an article on Unix security some years back. How is it done? Let me on your system - I'll demonstrate! Meanwhile, keep your cutsie memory constipating programs on your own systems and off mine. -- ============================================================================ | Help stamp out stupid .signature files! Gerry Swetsky WB9EBO | | vpnet - Public access Unix and Usenet | | Home (708)833-8122 vpnet (708)833-8126 lisbon@vpnet.chi.il.us | ============================================================================
siebeck@infoac.rmi.de (Wolfgang Siebeck ) (03/17/91)
rodney@tyrell.gtc.de (Rodney Volz) writes: >In article <1991Mar12.132003.27383@cs.widener.edu> brendan@cs.widener.edu (Brendan Kehoe) writes: >> >>In <513@bria>, uunet!bria!mike writes: >>> >>> if ( (fd = open("/dev/kmem",O_RDWR)) == -1 ) >> >> If your sysadmin (much less the vendor itself) left /dev/kmem world >> WRITABLE, they're begging for this kind of thing. Readable, possibly; >> writable, c'mon. >Right. You don't even need C-programs to make the shoebox woe. >$ cat /etc/termcap > /dev/kmem > :-) >-Rod what about # rm -f /dev/kmem ??? Wolfgang -- siebeck@infoac.rmi.de (Wolfgang Siebeck)
jik@athena.mit.edu (Jonathan I. Kamens) (03/18/91)
In article <1991Mar16.195916.26282@infoac.rmi.de>, siebeck@infoac.rmi.de (Wolfgang Siebeck ) writes: |> what about |> |> # rm -f /dev/kmem All of the other suggestions which discussed writing to /dev/kmem assume that the device /dev/kmem is world-writeable. Your suggestion assumes that the directory /dev is world-writeable, which is a completely different thing. In any case, I'm not even convinced that removing /dev/kmem will cause a Unix system to crash. The kernel itself doesn't use /dev/kmem; the device is used only by processes that want to get access to kernel memory. Deleting /dev/kmem will simply prevent those processes (e.g. ps, ofiles) from working properly. Not a catastrophic failure by any standard. -- Jonathan Kamens USnail: MIT Project Athena 11 Ashford Terrace jik@Athena.MIT.EDU Allston, MA 02134 Office: 617-253-8085 Home: 617-782-0710
berggren@eecs.cs.pdx.edu (Eric Berggren) (03/18/91)
jik@athena.mit.edu (Jonathan I. Kamens) writes: >In article <1991Mar16.195916.26282@infoac.rmi.de>, siebeck@infoac.rmi.de (Wolfgang Siebeck ) writes: >|> what about >|> >|> # rm -f /dev/kmem > All of the other suggestions which discussed writing to /dev/kmem assume >that the device /dev/kmem is world-writeable. > Your suggestion assumes that the directory /dev is world-writeable, which is >a completely different thing. Well, shoot... go for the whole filesystem! rm -f /dev/[Place YOUR disk driver here!] -e.b. ============================================================================== Eric Berggren | "The force of the 'Dark Side' eminates from Computer Science/Eng. | the ominous DeathStar looming overhead." berggren@eecs.cs.pdx.edu | - Down with AT&T! -
jco@crane.cis.ufl.edu (Dumpmaster John) (03/19/91)
Someone talked about a 3 line script to crash a unix box here (but I can't find that message.) Anyway, what the script was: while (1) do mkdir 1; cd 1 end Minus some shell syntax. this is it. However, on newer OS's this won't work. I think it has a minfree on the inodes as well, or some thing like that. later jco -- "BSD the strongest Operating System avaible today without a prescription." John C. Orthoefer Internet: jco@smuggler.cis.ufl.edu University of Florida Floyd Mailing List: eclipse-request@reef.cis.ufl.edu CIS Department >>>>>>New Address<<<<<<-------------^^^^
les@chinet.chi.il.us (Leslie Mikesell) (03/19/91)
AT&T 7300's and 3b1's (the Unix-PC) will crash if you write to the floppy from a shared-memory segment. AT&T 3b2's with the old 23Meg streaming tape will crash if you put the tape into streaming mode and then write a chunk larger than it expects in a single write(). (And since this magic size isn't mentioned in any of the normal documentation, it's pretty easy to miss...) Les Mikesell les@chinet.chi.il.us
dpassage@tornado.Berkeley.EDU (David G. Paschich) (03/19/91)
In article <JCO.91Mar18112624@crane.cis.ufl.edu> jco@crane.cis.ufl.edu (Dumpmaster John) writes: > >Someone talked about a 3 line script to crash a unix box here (but I can't >find that message.) > >Anyway, what the script was: > >while (1) do > mkdir 1; cd 1 >end > >Minus some shell syntax. this is it. However, on newer OS's this won't >work. I think it has a minfree on the inodes as well, or some thing like >that. A while back on the machine run by the CS Undergrad Assn. here at UC Berkeley there was a tongue-in-cheek "Space Warrior" competition to try to get people to clean up their disk space. One guy won by writing a little program which malloc'ed 1 meg of memory until the disk was 99% full. This works on Apollos because the swap is kept in a "first-class file", not in a separate partition. David G. Paschich Open Computing Facility UC Berkeley dpassage@ocf.berkeley.edu "I'm so happy I can't stand myself" -- Adam Glass
akes@mcshh.hanse.de (Andreas Kessemeier) (03/22/91)
les@chinet.chi.il.us (Leslie Mikesell) writes: >AT&T 7300's and 3b1's (the Unix-PC) will crash if you write to the >floppy from a shared-memory segment. This can be done much simpler on some Systems with a poor implementation of shared memory: - create a shared memory segment. - do a shmat() on that segment. - do a write(1,"foo",3) The manual says: "never do systemcalls with attached shared memory", but crashing the machine in such a case is much more poor than this restiction. Greets, Andreas -- Andreas Kessemeier akes@mcshh.hanse.de There is no way to Freedom. Freedom is the way.
lance@motcsd.csd.mot.com (lance.norskog) (03/22/91)
Awhile back, someone found that executing random data made quite a few RISC chips sieze up.
torek@elf.ee.lbl.gov (Chris Torek) (03/22/91)
In article <3442@engadm3.csd.mot.com> lance@motcsd.csd.mot.com (lance.norskog) writes: >Awhile back, someone found that executing random data made quite >a few RISC chips sieze up. False. In fact, the program caused a number of *operating systems* to crash. As I recall, the only chip bug it exposed (one that was already known anyway) was in a ``CISC'' (namely, one of the older 80386 implementations). The ability to crash any particular operating system is not a useful indicator of the reliability of any particular microprocessor. That said, one should note that the more complex something is, the easier it is to make a mistake when implementing it. Bugs are often found in complex-addressing-mode CPUs (until fixed in a later revision) when: - an access-probe instruction crosses a page boundary (example: VAX 11/780) - a read-modify-write instruction crosses a page boundary (example: NS32016) - an exception occurs while recovering from an exception, e.g., a parity error during a register state retract during a page fault. In general, ``RISC'' chips avoid all these bugs by outlawing the situations under which they occur: their instructions never cross page boundaries, they do not provide r/m/w instructions, and so forth. There is, of course, a wide spectrum of actual implementations, with varying degrees of ``RISCness'', and simply not providing an operation does not obviate any existing need for something equivalent. In other words, this sometimes merely moves complexity from point A (the hardware) to point B (the software). Finding the correct balance of simplicity and functionality is what machine architecture is all about. If you think you can do better than ``RISC'' (whatever that is, besides a marketing word---like obscenity, we all know what RISC is when we see it, but no one can define it), by all means, gather some venture capital and start a new company. (There, have I managed to avoid pushing anyone's buttons? :-) ) -- In-Real-Life: Chris Torek, Lawrence Berkeley Lab CSE/EE (+1 415 486 5427) Berkeley, CA Domain: torek@ee.lbl.gov
guy@auspex.auspex.com (Guy Harris) (03/26/91)
>Awhile back, someone found that executing random data made quite >a few RISC chips sieze up. No, a while back, someone found that executing random data made some operating systems running on machines with RISC chips crash, and immediately charged ahead and, on the basis of that small bit of partial data and a lot of assumptions about RISC chip design methodology, speculated that this was caused by RISC-chip designers not being as rigorous as CISC-chip designers in testing their chips. Subsequent to this: 1) the same program was found to crash the OS on at least one machine running a *CISC* chip (a 80386 machine, I think); 2) at least in one case, the problem was a bug in the *OS*'s code to deal with, as I remember, illegal instructions in the delay slots of illegal branches, or something like that (this was in the MIPS version). At some point, I may dive in and see what caused SunOS to barf; I suspect it's a bug in the floating-point simulation code (which may get invoked even on SPARCs with an FPU, as the FPU may not implement every single floating-point instruction in the architecture). If one wishes to consider the code that broke on the RISC machines to be low-enough-level support code that it "should" be considered as much a part of the architecture's implementation as would the chip itself, you could, I guess, flame RISC - or, at least, the folks doing the software part of the implementation. Of course, given that, you can probably find plenty of microcode bugs to damn CISC as well, if your goal is to bash some particular architecture style (the posting in which the person revealed the results of his test had a bit of a RISC-bashing flavor to it). (Followups directed to "alt.religion.computers", if you really feel you *MUST* make your 2 small monetary units worth known on the RISC vs. CISC topic.)
mouse@thunder.mcrcim.mcgill.edu (der Mouse) (03/26/91)
In article <11313@dog.ee.lbl.gov>, torek@elf.ee.lbl.gov (Chris Torek) writes: > [...], one should note that the more complex something is, the easier > it is to make a mistake when implementing it. Bugs are often found > in complex-addressing-mode CPUs (until fixed in a later revision) > when: > [...] We came across a most mysterious bug once: our MicroVAX suddenly started coredumping in test(1), but only for this one user. After much disbelief and head-scratching, we eventually determined that the coredump was due to something going wrong when the pushes involved in taking the trap for one of the emulated instructions involved pushing past a page boundary. I think it might have been only when it took a pagefault on the new page. The user in question had just the right size environment to tickle this. I'm still not sure exactly *what* was going wrong when this happened.... About then, we realized that the coredumps had started just about the time the service guys had done some sort of maintenance operation that involved replacing the CPU...we called them back and said "we can't really describe how it's broken; we're not entirely certain we can state it to ourselves. But it's definitely broken; please replace it". They did. (Our sysadmin at the time was good at persuasion.) der Mouse old: mcgill-vision!mouse new: mouse@larry.mcrcim.mcgill.edu
rdavis@connie.UUCP (Ray Davis) (03/26/91)
In <547@minya.UUCP> jc@minya.UUCP (John Chambers) writes: >One gotcha in the above: On some systems (Convex is one), ps must >be left setuid-root, because it checks its euid, and if it isn't a >super-user, it refuses to work. I found this the hard way, trying >to do the above, and had to put ps back as I found it. Sigh. We added a kmem group in ConvexOS 9.0 and have changed ps and related kmem reading commands: -rwxr-sr-x 1 root kmem 168819 Oct 24 18:04 ps ___ Ray Davis Convex Computer GmbH, Frankfurt, West Germany rdavis@convex.com, unido!connie!rdavis, uunet!convex!rdavis, +49-69-666-8081