Commit graph

3884 commits

Author SHA1 Message Date
Daniel C. Sobral 8ca5c256cb Spencer's regex(3) test code.
Obtained from: BSD/OS
2000-07-09 18:13:35 +00:00
Daniel C. Sobral 8f9e434f46 altoffset() always returned whenever it recursed, because at the end
of the processing of the recursion, "scan" would be pointing to O_CH
(or O_QUEST), which would then be interpreted as being the end character
for altoffset().

We avoid this by properly increasing scan before leaving the switch.

Without this, something like (a?b?)?cc would result in a g->moffset of
1 instead of 2.

I added a case to the soon-to-be-imported regex(3) test code to catch
this error.
2000-07-09 17:45:30 +00:00
Daniel C. Sobral b6c1a56180 Since g->moffset points to the _maximum_ offset at which the must
string may be found (from the beginning of the pattern), the point
at which must is found minus that offset may actually point to some
place before the start of the text.

In that case, make start = start.

Alternatively, this could be tested for in the preceding if, but it
did not occur to me. :-)

Caught by: regex(3) test code
2000-07-09 17:36:53 +00:00
Daniel C. Sobral 517bffca1b Add some casts here and there. 2000-07-09 15:12:28 +00:00
Poul-Henning Kamp 832505d0c9 Turn malloc options "AJ" on by default.
These will be turned off again as we approach 5.0-RELEASE.

If you benchmark things, make sure to
	ln -sf j /etc/malloc.conf
to see "true" performance.
2000-07-09 13:10:18 +00:00
Jun-ichiro itojun Hagino ec20fe00cc reject empty scopeid. use strtoul() for checking all-numericness of
portname.  explicitly reject empty numeric portname.
sync with kame.  based on comments from itohy@netbsd.org
2000-07-09 06:10:01 +00:00
Daniel Harris 9559d2b084 First appeared in 2.9BSD, not 3.0.
PR:		19263
Submitted by:	NOKUBI Hirotaka <nokubi@ff.iij4u.or.jp>
Obtained from:	Open|NetBSD
2000-07-08 18:17:12 +00:00
Daniel C. Sobral 6d902efe43 Since we have modified charjump to be CHAR_MIN-based, we have to
correct the offset when we free it.

Caught by: phkmalloc
2000-07-08 09:45:17 +00:00
Dag-Erling Smørgrav 51e3d46ec0 Don't assume the remote address in a 227 reply is enclosed in parentheses. 2000-07-08 09:27:47 +00:00
Dag-Erling Smørgrav 4d029f13b4 Fix basic authentication, and add proxy authentication.
Submitted by:	se
2000-07-08 08:08:58 +00:00
John Polstra 59a821dae2 Change the dllockinit() interface from "experimental" to
"deprecated" and warn that it will disappear eventually.
2000-07-08 04:17:28 +00:00
Andrey A. Chernov 6ea9889255 fix comment 2000-07-07 08:24:50 +00:00
Nick Hibma 96102cae1a Remove DIAGASSERT 2000-07-07 08:15:19 +00:00
Daniel C. Sobral 4d41cae8f8 Do not free NULL pointers. 2000-07-07 07:47:39 +00:00
Daniel C. Sobral c5e125bbbf Deal with the signed/unsigned chars issue in a more proper manner. We
use a CHAR_MIN-based array, like elsewhere in the code.

Remove a number of unused variables (some due to the above change, one
that was left after a number of optimizing steps through the source).

Brucified by: bde
2000-07-07 07:46:36 +00:00
John-Mark Gurney 20ff215b1d remove sys/time.h by instruction from bde. 2000-07-06 22:18:44 +00:00
Hajimu UMEMOTO 645cdc6be5 Reduce shlib major that is bumped by my mistake.
We don't need bumping it in this time.
2000-07-06 20:19:02 +00:00
Andrey A. Chernov 42148dbc70 Better fix for .Fx macro
Submitted by:	sheldonh
2000-07-06 20:13:42 +00:00
Alfred Perlstein 55241422d6 cleanup the tsearch import.
remove (comment out) functions defined or depricated elsewhere:
  bsearch, lfind, lsearch, insque, remque

change hcreate to take a size_t rather than uint (essentially the same)

since hcreate/hdestroy are now in <search.h>, remove private search.h
in lib/libc/db/hash/

add $FreeBSD tags to hsearch.c
2000-07-06 20:04:34 +00:00
Daniel C. Sobral f943749dcd I hate signed chars.^W^W^W^W^WCast to unsigned char before using signed
chars as array indices.
2000-07-06 06:37:30 +00:00
Daniel C. Sobral 9868274b74 Correct comment to work with test code.
Prevent out of bounds array access in some specific cases.
2000-07-06 06:34:15 +00:00
Daniel C. Sobral 03b59f2038 Use UCHAR_MAX consistently. 2000-07-06 05:19:29 +00:00
Andrey A. Chernov 26c4c891be Fix .Fx usage (causing error diagnositc) 2000-07-06 00:25:05 +00:00
Hajimu UMEMOTO f7c67fc880 IPv6 support.
This is required for forthcoming IPv6 ready installer.

Obtained from:	KAME
2000-07-05 19:34:43 +00:00
Jason Evans e21fa6847e Remove DEBUG_FLAGS=-g3, which never should have been committed. 2000-07-05 16:21:42 +00:00
Jun-ichiro itojun Hagino 024cdeff7a sync with more recent kame tree.
- correct scoped notation separator (s/@/%/)
- include example and more references
2000-07-05 08:27:50 +00:00
Jun-ichiro itojun Hagino 6cb9418289 sync with latest kame.
- permit numeric scopeid, be more careful about buffer size

TODO: 2nd arg type should be socklen_t for RFC2553 conformance,
but due to include file dependency it is not a easy thing to do
(netdb.h does not have socklen_t)
2000-07-05 05:09:17 +00:00
Jun-ichiro itojun Hagino b826397abd sync with kame.
- better return code.  from enami@netbsd
- do not use "class" as variable name.  C++ guy had trouble with it.
2000-07-05 05:07:23 +00:00
Robert Watson 76e14ed07f o Enable building of libposix1e capability state utility functions and
capability-related syscall wrappers.

Obtained from:	TrustedBSD Project
2000-07-05 04:25:09 +00:00
Robert Watson 89b7801213 o Introduce cap_{get,set}_{file,fd}() syscall wrappers, associated with
soon to be committed syscall stubs.  These calls will be used to get
  and set capability state associated with executables.

Obtained from:	TrustedBSD Project
2000-07-05 04:20:59 +00:00
Robert Watson 5d08343440 o When calling the syscall, use &cap instead of cap. Apparently this
error was introduced during the merge; fixing it corrects a (correct)
  warning about types.

Obtained from:	TrustedBSD Project
2000-07-05 04:08:35 +00:00
Robert Watson b00446f08a o Comment out <sys/audit.h> and <sys/mac.h> since they are not yet
committed

Obtained from:	TrustedBSD Project
2000-07-05 03:30:32 +00:00
Jun-ichiro itojun Hagino 23ba01423e add getifaddrs(3) from bsdi. this is a magic function which lets you grab
interface addresses in a portable manner, without headache of SIOCGIFCONF
or sysctl.  it is in bsdi/openbsd/netbsd already.
from kame tree (actually, mandatory for latest kame tree).
2000-07-05 02:13:17 +00:00
Jun-ichiro itojun Hagino 3c62e87aa3 synchronize with latest kame tree.
behavior change: policy syntax was changed.  you may need to update your
setkey(8) configuration files.
2000-07-04 16:22:05 +00:00
Andrey A. Chernov 3bc7ba9057 Describe agrument range correctly, according to multibyte(3)
Remove unneded comment
2000-07-03 13:03:15 +00:00
Peter Wemm c8e97871bf Add new man pages 2000-07-03 09:47:47 +00:00
Peter Wemm d6a123ad6e Get this to compile in the 5.1-20000701-prerelease environment. 2000-07-03 09:40:52 +00:00
Sheldon Hearn 256dba38d1 Remove trailing whitespace only. 2000-07-03 08:31:02 +00:00
Sheldon Hearn d72b904079 Fix overlong line and trailing whitespace introduced in rev 1.8. 2000-07-03 08:28:30 +00:00
Sheldon Hearn c50c83c0e1 Add to the SEE ALSO section, a reference to the RFC mentioned in
text introduced in the previous commit.
2000-07-03 08:26:50 +00:00
Brian Feldman a9e2722c58 Re-pair the MLINKS of unvis.3 with strunvisx.3. This undoubtedly was a
world breakage.
2000-07-03 05:21:43 +00:00
Kris Kennaway 3f587e572f Previous commit broke the case of chained CNAME entries. Instead handle
the bogus case by being stricter about errors.

Submitted by:   itojun
Obtained from:  KAME
2000-07-03 04:43:14 +00:00
Kris Kennaway dc578f2564 Fix a nasty bug which would leave the struct hostent incompletely filled out
when parsing certain DNS records during a reverse address resolution. Thus
when code tries to examine the returned host name, it dereferences a null
pointer :-(

Problem noticed by:	ps
2000-07-03 02:33:02 +00:00
Alexander Langer 0b1c18e4cf Add strunvisx.3 MLINK. 2000-07-02 21:45:16 +00:00
Alexander Langer d8fa6babb4 Document VIS_HTTPSTYLE:
VIS_HTTPSTYLE is a new encoding style for use in vis(), strvis() and
  strvisx() that escapes characters according to RFC 1808 (URI encoding).

Since decoding of these require different detection of start-points of
  escaped characters, VIS_HTTPSTYLE can be given as flag to unvis().
  unvis() will then properly decode URIs.

A new function appeared, strunvisx(): strunvisx() behaves similar as
  strunvis(), with one exception: It has an additional flag parameter,
  which is passed to unvis() to archive the effect I described above.
2000-07-02 21:31:26 +00:00
Daniel C. Sobral a5378e623a Fix memory leak introduced with regcomp.c rev 1.14. 2000-07-02 15:58:54 +00:00
Nick Hibma 1976c8437b Include libusb in the build 2000-07-02 14:54:22 +00:00
Daniel C. Sobral e6a886d8db Enhance the optimization provided by pre-matching. Fix style bugs with
previous commits.

At the time we search the pattern for the "must" string, we now compute
the longest offset from the beginning of the pattern at which the must
string might be found. If that offset is found to be infinite (through
use of "+" or "*"), we set it to -1 to disable the heuristics applied
later.

After we are done with pre-matching, we use that offset and the point in
the text at which the must string was found to compute the earliest
point at which the pattern might be found.

Special care should be taken here. The variable "start" is passed to the
automata-processing functions fast() and slow() to indicate the point in
the text at which they should start working from. The real beginning of
the text is passed in a struct match variable m, which is used to check
for anchors. That variable, though, is initialized with "start", so we
must not adjust "start" before "m" is properly initialized.

Simple tests showed a speed increase from 100% to 400%, but they were
biased in that regexec() was called for the whole file instead of line
by line, and parenthized subexpressions were not searched for.

This change adds a single integer to the size of the "guts" structure,
and does not change the ABI.

Further improvements possible:

Since the speed increase observed here is so huge, one intuitive
optimization would be to introduce a bias in the function that computes
the "must" string so as to prefer a smaller string with a finite offset
over a larger one with an infinite offset. Tests have shown this to be a
bad idea, though, as the cost of false pre-matches far outweights the
benefits of a must offset, even in biased situations.

A number of other improvements suggest themselves, though:

	* identify the cases where the pattern is identical to the must
	string, and avoid entering fast() and slow() in these cases.

	* compute the maximum offset from the must string to the end of
	the pattern, and use that to set the point at which fast() and
	slow() should give up trying to find a match, and return then
	return to pre-matching.

	* return all the way to pre-matching if a "match" was found and
	later invalidated by back reference processing. Since back
	references are evil and should be avoided anyway, this is of
	little use.
2000-07-02 10:58:07 +00:00
Daniel C. Sobral 5ead635430 Remove from the notes a bug that it's said to have been fixed.
PR: 15561
Submitted by: Martin Kammerhofer <mkamm@gmx.net>
Confirmed by: ache
2000-07-02 10:34:25 +00:00
Dan Moschuk d81584ae91 Style fixes. 2000-07-01 17:49:34 +00:00
Dan Moschuk e63a7af508 Add URI encoding to the vis/unvis routines courtesy of VIS_HTTPSTYLE.
Since alex is a -doc committer, he can update his own manpage. :-)

Also add $FreeBSD$ while I'm here.

Submitted by: alex
2000-07-01 15:55:49 +00:00
Alfred Perlstein 64566a3e2a bring in binary search tree code.
Obtained from: NetBSD
2000-07-01 06:55:11 +00:00
Daniel C. Sobral 6b709b74ae Initialize variables used by the Boyer-Moore algorithm.
This should fix core dumps when the must pattern is of length
three or less.

Bug found by: knu
2000-06-29 18:53:55 +00:00
Andrey A. Chernov 849c64f5ff Fix assigning alt_month in compatibility code 2000-06-29 17:21:45 +00:00
Dag-Erling Smørgrav 893980ad29 Make restart work in active mode, too.
PR:		bin/18688
Submitted by:	Rudolf Cejka <cejkar@dcse.fee.vutbr.cz>
2000-06-29 10:44:10 +00:00
Daniel C. Sobral 6049d9f0eb Add Boyler-Moore algorithm to pre-matching test.
The BM algorithm works by scanning the pattern from right to left,
and jumping as many characters as viable based on the text's mismatched
character and the pattern's already matched suffix.

This typically enable us to test only a fraction of the text's characters,
but has a worse performance than the straight-forward method for small
patterns. Because of this, the BM algorithm will only be used if the
pattern size is at least 4 characters.

Notice that this pre-matching is done on the largest substring of the
regular expression that _must_ be present on the text for a succesful
match to be possible at all.

For instance, "(xyzzy|grues)" will yield a null "must" substring, and,
therefore, not benefit from the BM algorithm at all. Because of the
lack of intelligence of the algorithm that finds the "must" string,
things like "charjump|matchjump" will also yield a null string. To
optimize that, "(char|match)jump" should be used.

The setup time (at regcomp()) for the BM algorithm will most likely
outweight any benefits for one-time matches. Given the slow regex(3)
we have, this is unlikely to be even perceptible, though.

The size of a regex_t structure is increased by 2*sizeof(char*) +
256*sizeof(int) + strlen(must)*sizeof(int). This is all inside the
regex_t's "guts", which is allocated dynamically by regcomp(). If
allocation of either of the two tables fail, the other one is freed.
In this case, the straight-forward algorithm is used for pre-matching.

Tests exercising the code path affected have shown a speed increase of
50% for "must" strings of length four or five.

API and ABI remain unchanged by this commit.

The patch submitted on the PR was not used, as it was non-functional.

PR: 14342
2000-06-29 04:48:34 +00:00
John Baldwin 61e9944f4f _PATH_DEV'ify libdisk 2000-06-28 22:28:50 +00:00
Dag-Erling Smørgrav eac7a1e07f Handle multiline replies properly, instead of kinda-right. 2000-06-28 15:48:26 +00:00
Jason Evans b79702feff Fix typo in SEE ALSO section. 2000-06-28 03:15:21 +00:00
Jason Evans 8d107d1210 If multiple threads are blocked in sigwait() for the same signal that does
not have a user-supplied signal handler, when a signal is delivered, one
thread will receive the signal, and then the code reverts to having no
signal handler for the signal.  This can leave the other sigwait()ing
threads stranded permanently if the signal is later ignored, or can result
in process termination when the process should have delivered the signal to
one of the threads in sigwait().

To fix this problem, maintain a count of sigwait()ers for each signal that
has no default signal handler.  Use the count to correctly install/uninstall
dummy signal handlers.

Reviewed by:	deischen
2000-06-27 21:30:16 +00:00
Ruslan Ermilov 36e6576b44 Fixed PunchFWHole():
- ipfw always rejected rule with `neither in nor out' diagnostics.
- number of src/dst ports was not set properly.
2000-06-27 14:56:07 +00:00
John-Mark Gurney 55b8fbfb5b change first release date to 4.1-R as 5.0-R won't be out for at least a
year (from jkh)..

Caught by:	Fx macro warning on 3.4-R
2000-06-26 21:23:57 +00:00
Alexander Langer 271c4bdbce The argument is not mcontext_t but ucontext_t.
PR:		17836
Submitted by:	Tim Moore <moore@bricoworks.com>
2000-06-26 15:00:25 +00:00
Chris Costello 4b4289e4d0 Repair a cross-reference to sync(1) that should refer to sync(8). 2000-06-23 20:47:50 +00:00
Chris Costello 1c67d6c539 Properly separate paragraphs by using `.Pp' instead of a blank line. 2000-06-23 20:35:45 +00:00
Chris Costello 4f18b87801 Remove blank lines. 2000-06-23 20:34:31 +00:00
Sheldon Hearn 8a4272bf51 Mark up errno as a variable (Va), not as a defined value (Dv).
Do not terminate the cross-reference list in the SEE ALSO section with
a period.
2000-06-23 15:02:29 +00:00
Sheldon Hearn a6a2ba1c18 Apply the accepted line breaking rules. 2000-06-23 15:01:18 +00:00
Neil Blakey-Milner 0138fc17c5 Let Disk_Names() take advantage of the kern.disks sysctl if it's
available.  If not, it falls back to the existing hack and slash method.

A positive side effect is that non-root users may now use Disk_Names(),
for non-dangerous libh/disk.tcl testing.

Reviewed by:	phk
2000-06-23 14:01:06 +00:00
Chris Costello bb33e42207 Replace .Va, .Ar and .Nm with .Fa or .Va where necessary, examples:
``.Ar errno'' -> ``.Va errno''
  ``.Nm ops'' -> ``.Fa ops''
  ``.Va fd'' -> ``.Fa fd''
2000-06-23 05:05:44 +00:00
Chris Costello a907d4fd1f Replace an erroneous .Va error' with .Va errno'. 2000-06-23 04:25:10 +00:00
Chris Costello 48b5eb7c85 Replace `FreeBSD 4.0'' with `.Fx 4.0'' and remove a useless empty line
at the end of the file.
2000-06-23 03:50:32 +00:00
Chris Costello dca3f6825f Replace .Va references to function arguments to .Fa references. 2000-06-23 03:43:34 +00:00
Archie Cobbs 33c22c64e9 - Make sure the message token returned by NgSendMsg() is non-negative
- Have NgSendAsciiMsg() return the same token as NgSendMsg()
- Document that NgSendMsg() and NgSendAsciiMsg() return the token
- Add MLINKS for the functions defined in netgraph(3)
2000-06-21 23:01:07 +00:00
Dag-Erling Smørgrav cf5af79cac Don't incorrectly report a protocol error when we get a 302 and redirects
are disabled.
2000-06-21 09:49:51 +00:00
Hajimu UMEMOTO a42af91cba Don't call _getipnodebyname_multi(). It fixes the problem that
getaddrinfo() accidentally returns IPv4 mapped IPv6 address instead
of native IPv4 address.
Now, getaddinfo() is scoped address ready.  You can put scoped
address within /etc/hosts.

Obtained from:	KAME Project.
2000-06-20 16:33:33 +00:00
Dag-Erling Smørgrav def5f54c85 Back out wes' commit with extreme prejudice. 2000-06-20 13:57:00 +00:00
Ruslan Ermilov d15583713a - Removed PacketAliasPptp() API function.
- SHLIB_MAJOR++.
2000-06-20 13:07:52 +00:00
Ruslan Ermilov 55a39fc5a2 Added true support for PPTP aliasing. Some nice features include:
- Multiple PPTP clients behind NAT to the same or different servers.

- Single PPTP server behind NAT -- you just need to redirect TCP
  port 1723 to a local machine.  Multiple servers behind NAT is
  possible but would require a simple API change.

- No API changes!

For more information on how this works see comments at the start of
the alias_pptp.c.

PacketAliasPptp() is no longer necessary and will be removed soon.

Submitted by:	Erik Salander <erik@whistle.com>
Reviewed by:	ru
Rewritten by:	ru
Reviewed by:	Erik Salander <erik@whistle.com>
2000-06-20 11:41:48 +00:00
Alexander Langer 953ae31a00 Fix groff confusion for PS output.
PR:		14532
Submitted by:	Peter Jeremy <peter.jeremy@alcatel.com.au>
2000-06-20 10:53:51 +00:00
Wes Peters bda4ef1aa0 Add implementation of fetchListFTP.
Reviewed by:	silence
2000-06-20 05:32:41 +00:00
Hajimu UMEMOTO a40e8e8ba4 Re-commit DNS IPv6 transport support with fixes for IPv4 only
kernel and compatibility issue.

Obtained from:	KAME Project
2000-06-19 18:25:06 +00:00
Josef Karthauser 1246bf7279 Remove the setflags/getflags routines. Their functionality has
been replaced with the library calls fflagstostr and strtofflags.
2000-06-18 20:10:41 +00:00
Josef Karthauser 0a266c86a2 Make a note of fflagstostr and strtofflags in the 'see also' section. 2000-06-17 14:03:34 +00:00
Josef Karthauser c5bb91d1b2 Add strtofflags and fflagstostr to libc. 2000-06-17 11:55:57 +00:00
Josef Karthauser 8c7bdc130e Modify strtofflags so that it returns a malloced string instead of a
pointer to a static buffer.
2000-06-17 11:09:24 +00:00
Josef Karthauser d502d9ac46 The "def" arg for fflagstostr is too specialized for ls. The caller
can easily translate from "" to whatever it wants to print if no
flags are set.  (ls prints "-" and mtree prints "none".)

Suggested by:	bde
2000-06-17 01:43:56 +00:00
Josef Karthauser b81eeaf0a6 Return of the evil file flags! The {s|g}etflags functions were
renamed to {s|g}etflagsbyname, which received objections.   They're
now called strtofflags (string to file flags) and fflagstostr (file
flags to string).

Suggested by:	bde
2000-06-17 01:28:13 +00:00
Ruslan Ermilov b766604065 - Improved passive mode FTP support by aliasing 229 replies.
- Stricter checking of PORT/EPRT/227/229 messages format.
- Moved all security checks into one place.
2000-06-16 20:36:16 +00:00
Hajimu UMEMOTO 672315756a Backout my previous commit.
Cannot resolve any host on IPv4 only kernel.

Reported by:	ache
2000-06-14 20:51:55 +00:00
Jason Evans 314be1347b pthread_mutex_lock(), pthread_cond_trywait(), and pthread_cond_wait() are
not allowed to return EINTR, but use of pthread_suspend_np() could cause
EINTR to be returned.  To fix this, restructure pthread_suspend_np() so that
it does not interrupt a thread that is waiting on a mutex or condition, and
keep enough state around that pthread_resume_np() can fix things up
afterwards.

Reviewed by:	deischen
2000-06-14 17:17:41 +00:00
Ruslan Ermilov 7652512976 - Added support for passive mode FTP by aliasing 227 replies.
It does mean that it is now possible to run passive-mode FTP
  server behind NAT.

- SECURITY: FTP aliasing engine now ensures that:
  o the segment preceding a PORT/227 segment terminates with a \r\n;
  o the IP address in the PORT/227 matches the source IP address of
    the packet;
  o the port number in the PORT command or 277 reply is greater than
    or equal to 1024.

Submitted by:	Erik Salander <erik@whistle.com>
Reviewed by:	ru
2000-06-14 16:09:35 +00:00
Andrey A. Chernov ee57756b5c add libxpg4 2000-06-14 14:38:11 +00:00
Alexander Langer c20d2ab74b You need options USER_LDT in your kernel to use these functions.
PR:		18943
Submitted by:	Ben Smithurst <ben@scientia.demon.co.uk>
Reviewed by:	asmodai
2000-06-14 13:38:21 +00:00
David E. O'Brien 4bc99e3e69 Add libxpg4 as the current version had it's SO version number bumped and
it no longer contains the locale functions.
2000-06-13 18:09:45 +00:00
Alexander Langer cb477b672b Fix typo: turn of -> turn off.
PR:		18805
Submitted by:	Yoshihiro Ota <ota@mail.drexel.edu>
Kind of Reviewed by:	asmodai ("sure")
2000-06-13 12:50:47 +00:00
Andrey A. Chernov 3e0f74ccaf Bump major to preserve 3.x binaries compatibility
Found by:	"Akinori -Aki- MUSHA" <knu@idaemons.org>
2000-06-13 00:41:38 +00:00
Nick Hibma 9e2046dfec The USB library from NetBSD by Lennart Augustsson <lennart@augustsson.net>. 2000-06-11 18:19:14 +00:00
Hajimu UMEMOTO 7c381eb7d5 DNS IPv6 transport support.
It is nessesary for IPv6 only life.

Obtained from:	KAME
2000-06-11 15:43:34 +00:00
Chris Costello 55ef467128 - Replace `.Va (cap_t)NULL'' with `.Dv NULL''
- Fix a typo: ``constrains'' -> ``constraints''

Reviewed by:	rwatson
2000-06-09 02:01:27 +00:00