mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-29 20:04:57 +01:00
Compare commits
531
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95b66175a3 | ||
|
|
21a9168142 | ||
|
|
f79b5d7b4e | ||
|
|
d2ac0794b6 | ||
|
|
f679ee58a1 | ||
|
|
d146ffcd70 | ||
|
|
50dd249ff2 | ||
|
|
ce070a231e | ||
|
|
f08c57b743 | ||
|
|
806b696bda | ||
|
|
88669d7e76 | ||
|
|
45a32c826e | ||
|
|
1538bd7196 | ||
|
|
b94c2a8456 | ||
|
|
24819dfae6 | ||
|
|
fa82ebeccf | ||
|
|
bd708d5e35 | ||
|
|
ed58a67988 | ||
|
|
0bad08ed98 | ||
|
|
8f97227182 | ||
|
|
e9073a0a1d | ||
|
|
e85bfb7c5d | ||
|
|
2275791a58 | ||
|
|
f885fadf09 | ||
|
|
37c577255c | ||
|
|
5dab24749c | ||
|
|
fd5392c48d | ||
|
|
84b06bc81a | ||
|
|
5ee29c69ba | ||
|
|
db9a0a9613 | ||
|
|
6cf72244e5 | ||
|
|
5ba0739a24 | ||
|
|
f093f64e1b | ||
|
|
7d26afd360 | ||
|
|
fe9ab80f3c | ||
|
|
24797bfa88 | ||
|
|
ee79220c87 | ||
|
|
938f42a690 | ||
|
|
4a3e619048 | ||
|
|
911b2b4e6f | ||
|
|
cfbe635f8e | ||
|
|
71be27409e | ||
|
|
b708943b22 | ||
|
|
20a7a90213 | ||
|
|
b81d7f330a | ||
|
|
4fc19a7cc3 | ||
|
|
b0e6f7baa8 | ||
|
|
72f777784d | ||
|
|
4aa4038e99 | ||
|
|
de43ac3c73 | ||
|
|
3d2b5d3d9b | ||
|
|
e3c0ee2101 | ||
|
|
8857668bd3 | ||
|
|
a5f91f98bd | ||
|
|
18b61ffcf4 | ||
|
|
66c958c770 | ||
|
|
483f113534 | ||
|
|
d27a27016a | ||
|
|
d9188b3909 | ||
|
|
4514d3cda2 | ||
|
|
b3e2ee6ec4 | ||
|
|
d97fd2c1e7 | ||
|
|
6d93c26728 | ||
|
|
4ebd34b205 | ||
|
|
8fbfdc72cb | ||
|
|
b7d4f10dad | ||
|
|
5a8de2aec5 | ||
|
|
132278444b | ||
|
|
ee721a09d3 | ||
|
|
9117dd171b | ||
|
|
5f3015c3bd | ||
|
|
4bb2b94267 | ||
|
|
cf6ead55c8 | ||
|
|
0ab55dfca2 | ||
|
|
604f2003e4 | ||
|
|
f60d177fcf | ||
|
|
4b94c4d561 | ||
|
|
60152fd230 | ||
|
|
bd2b22f9da | ||
|
|
88f3f68f0b | ||
|
|
d8d9fcb67c | ||
|
|
3eaae8e498 | ||
|
|
49d747cacc | ||
|
|
438c3db78c | ||
|
|
2cb24c3c00 | ||
|
|
3f73857adf | ||
|
|
a91679b9f3 | ||
|
|
110bbbb972 | ||
|
|
2b364efe54 | ||
|
|
8be19deb4c | ||
|
|
8a59cbfe07 | ||
|
|
527b07d556 | ||
|
|
e8cc66a626 | ||
|
|
3874d671e0 | ||
|
|
adc76b8895 | ||
|
|
73dc329806 | ||
|
|
0e9f19d8aa | ||
|
|
472b621990 | ||
|
|
6e2c102ae1 | ||
|
|
539c8db0d8 | ||
|
|
a97c61f7a2 | ||
|
|
1f8807d283 | ||
|
|
53b6bdd138 | ||
|
|
4fa6606d60 | ||
|
|
ba39198138 | ||
|
|
c073ac0841 | ||
|
|
b6732eede4 | ||
|
|
bf4ee2f0fc | ||
|
|
618547e832 | ||
|
|
a78977ec5d | ||
|
|
4d01971996 | ||
|
|
f11780d654 | ||
|
|
fef49ae1b8 | ||
|
|
fb53305b39 | ||
|
|
4f72061603 | ||
|
|
da991c5bb8 | ||
|
|
0395b10b55 | ||
|
|
04ac22c254 | ||
|
|
66efb86d51 | ||
|
|
670f74bf0c | ||
|
|
7da55eded9 | ||
|
|
202eb0eeb1 | ||
|
|
ec50325e25 | ||
|
|
3cfee405f8 | ||
|
|
078c68c47f | ||
|
|
ec5296f4f0 | ||
|
|
7509804433 | ||
|
|
5dd54e5e91 | ||
|
|
f7c35593a8 | ||
|
|
cf572da1fe | ||
|
|
34f937162f | ||
|
|
c609e0c8df | ||
|
|
8b34ac9cfa | ||
|
|
aab4673db2 | ||
|
|
84637f89f2 | ||
|
|
a6446f386b | ||
|
|
42487bdd21 | ||
|
|
491a4a3d96 | ||
|
|
8b4d9bd896 | ||
|
|
5c4936cf92 | ||
|
|
89a195026f | ||
|
|
14fa10a9f7 | ||
|
|
cc99ed2cf0 | ||
|
|
69c57b185c | ||
|
|
efcf2affbe | ||
|
|
0f5268be8e | ||
|
|
5584981aa0 | ||
|
|
dbe7a5bde1 | ||
|
|
3ffea809b1 | ||
|
|
337dc04a90 | ||
|
|
4c2f91dcc4 | ||
|
|
2ceaee9419 | ||
|
|
ede95f98ce | ||
|
|
5e9be4258e | ||
|
|
2855e0437a | ||
|
|
87ca7569fb | ||
|
|
5447f18ee2 | ||
|
|
80f3543fbf | ||
|
|
a9267e9cc5 | ||
|
|
743780d418 | ||
|
|
9d63bf5fb8 | ||
|
|
d60b22bb8d | ||
|
|
e4653f2aee | ||
|
|
261b828a18 | ||
|
|
a3e8860c3f | ||
|
|
c958734edc | ||
|
|
2ed0c8b014 | ||
|
|
e1dafa5619 | ||
|
|
c67e0c3e21 | ||
|
|
3026b81692 | ||
|
|
83cb6761a1 | ||
|
|
87c7af1eb5 | ||
|
|
c9168f59f0 | ||
|
|
ad3059481c | ||
|
|
8b3fc09d69 | ||
|
|
28b17a7357 | ||
|
|
e9ed2d9e58 | ||
|
|
afe640f62a | ||
|
|
1edf6e57fe | ||
|
|
303999599a | ||
|
|
bd345a6847 | ||
|
|
16c46ddeb1 | ||
|
|
4aa75d8e89 | ||
|
|
f9ac6ce951 | ||
|
|
1abbc7e638 | ||
|
|
06081ff9aa | ||
|
|
ffc3058832 | ||
|
|
4e4527d08f | ||
|
|
da293e2616 | ||
|
|
ad8ae08198 | ||
|
|
68381a26cc | ||
|
|
4a9109434d | ||
|
|
c86bc6f8f0 | ||
|
|
d205a6a83f | ||
|
|
ba64e486f6 | ||
|
|
e223cc395d | ||
|
|
6f34a5269f | ||
|
|
3f8ecc006e | ||
|
|
ac2598c6c4 | ||
|
|
09a510cb6c | ||
|
|
48f5fdffe2 | ||
|
|
a6b889c518 | ||
|
|
4795697b3e | ||
|
|
24527a9225 | ||
|
|
6c1428b383 | ||
|
|
68d980cbc6 | ||
|
|
a57994cc66 | ||
|
|
9a19552514 | ||
|
|
4beeaece61 | ||
|
|
a03a3dfac9 | ||
|
|
058bfe4aa5 | ||
|
|
9cb36cbaac | ||
|
|
1d33142eed | ||
|
|
b7c5bc5cb6 | ||
|
|
6b82e09364 | ||
|
|
33c196c2f5 | ||
|
|
448679fc3a | ||
|
|
3b699a595c | ||
|
|
d31de57f41 | ||
|
|
4822dd837c | ||
|
|
540077bd30 | ||
|
|
635c19efb6 | ||
|
|
cde646b3a7 | ||
|
|
163ff400ce | ||
|
|
f458046329 | ||
|
|
069bcbca98 | ||
|
|
ecba379d49 | ||
|
|
452cdb93be | ||
|
|
2295a53329 | ||
|
|
552ca95fd8 | ||
|
|
ef99e83ff3 | ||
|
|
4983422dcd | ||
|
|
9ecccba5c2 | ||
|
|
a973ad2c65 | ||
|
|
7b861157e5 | ||
|
|
ee7b601efd | ||
|
|
a3f35d15db | ||
|
|
a5a00036aa | ||
|
|
e29c1ac30c | ||
|
|
cf59f0d227 | ||
|
|
6146d4e99b | ||
|
|
27444a8131 | ||
|
|
58e0851411 | ||
|
|
0a3be3af1f | ||
|
|
7bb87ebe36 | ||
|
|
20fa32b5ea | ||
|
|
cafb0fd054 | ||
|
|
7042dffb4a | ||
|
|
ac724a2473 | ||
|
|
15c11a8df4 | ||
|
|
f73a632628 | ||
|
|
6f500b940f | ||
|
|
5464a1398e | ||
|
|
04aee08aff | ||
|
|
f1e8b33bc8 | ||
|
|
f3f5841b4a | ||
|
|
04f2f25097 | ||
|
|
41b11ee998 | ||
|
|
fb07674849 | ||
|
|
3cb3366ab9 | ||
|
|
76c86094de | ||
|
|
77ddaa5b36 | ||
|
|
e3d9ec204a | ||
|
|
9d09e08b3c | ||
|
|
794d65904a | ||
|
|
2d71c76d2c | ||
|
|
d5ee4959a7 | ||
|
|
344d037068 | ||
|
|
b37764d749 | ||
|
|
fde09f3999 | ||
|
|
18276eff25 | ||
|
|
aefeaa1173 | ||
|
|
539896c96e | ||
|
|
65b3eb750b | ||
|
|
bf15b94ee6 | ||
|
|
a7b98b79a3 | ||
|
|
25b046d76e | ||
|
|
e291a8bf9a | ||
|
|
eb9ca9b92c | ||
|
|
6da37b7c99 | ||
|
|
e2c2af9a8c | ||
|
|
f77c73b170 | ||
|
|
a7d111f4db | ||
|
|
9a646f2063 | ||
|
|
283ffdcfac | ||
|
|
d4d195bb16 | ||
|
|
241ade09d5 | ||
|
|
87887d5259 | ||
|
|
caab4d70db | ||
|
|
2217c68da0 | ||
|
|
f78845da53 | ||
|
|
4310cfca49 | ||
|
|
e2e66a17d2 | ||
|
|
7b8db215fb | ||
|
|
958e50a67a | ||
|
|
c359b67cbf | ||
|
|
ec688f4a08 | ||
|
|
5ad7146f13 | ||
|
|
342ef5b9c8 | ||
|
|
902d99e95f | ||
|
|
f7eee400b0 | ||
|
|
8faa3f1dea | ||
|
|
3e4fc7e650 | ||
|
|
d5586588a8 | ||
|
|
a2fbc4d7b8 | ||
|
|
e84e0e513d | ||
|
|
23aed28a31 | ||
|
|
1f05bcd029 | ||
|
|
f794d7b72e | ||
|
|
a19f80c311 | ||
|
|
61dbde6cd1 | ||
|
|
2abaeea173 | ||
|
|
b610f0484c | ||
|
|
13bb7b9673 | ||
|
|
712a73e5eb | ||
|
|
b140eb280d | ||
|
|
0d6d26445e | ||
|
|
de334427d2 | ||
|
|
9e4e7b6054 | ||
|
|
a6d2b31c56 | ||
|
|
e819e61bd4 | ||
|
|
e67cead019 | ||
|
|
1a6d720884 | ||
|
|
641b786f0a | ||
|
|
2d039c6cc8 | ||
|
|
6bb8f59ee3 | ||
|
|
28585dd79d | ||
|
|
929aae7785 | ||
|
|
6cb66086a5 | ||
|
|
52316cb669 | ||
|
|
dcfa7b888e | ||
|
|
33cda32e1c | ||
|
|
2172e2dd1e | ||
|
|
e425bd5ea4 | ||
|
|
8d59e16612 | ||
|
|
8ba2edb1db | ||
|
|
db89da9393 | ||
|
|
a133c12535 | ||
|
|
c3d9cb0e86 | ||
|
|
2308e29ba2 | ||
|
|
7672e8959a | ||
|
|
8d3f9906c5 | ||
|
|
408c25a375 | ||
|
|
64374b70af | ||
|
|
cb277ac3c8 | ||
|
|
dafa9879c0 | ||
|
|
a7e1dce45e | ||
|
|
adeccdae56 | ||
|
|
23ebbd6970 | ||
|
|
72cd9b52e1 | ||
|
|
50c7e17a79 | ||
|
|
412643fd6d | ||
|
|
0646dedea9 | ||
|
|
645f328369 | ||
|
|
d1639eab00 | ||
|
|
6e7ee0c1b0 | ||
|
|
35e9f60480 | ||
|
|
cceaff95bb | ||
|
|
5a6cc9f5b8 | ||
|
|
4f671d7bcd | ||
|
|
ac1a1af858 | ||
|
|
96e16e6318 | ||
|
|
aa3eed96a7 | ||
|
|
df0364737a | ||
|
|
7cbb9e7329 | ||
|
|
b35e3fd591 | ||
|
|
966bc22633 | ||
|
|
c7e75e4336 | ||
|
|
763e66fe44 | ||
|
|
652358464f | ||
|
|
490ad6c767 | ||
|
|
2808685fc2 | ||
|
|
e5afe1bbd6 | ||
|
|
f18e98762e | ||
|
|
78878b5fb8 | ||
|
|
5a151dc465 | ||
|
|
aefa67d3f6 | ||
|
|
4b1b5f0c80 | ||
|
|
6ee19db093 | ||
|
|
2601736e6d | ||
|
|
83a78fed8e | ||
|
|
f33c2f1179 | ||
|
|
a215beeb4a | ||
|
|
3bcff1d67d | ||
|
|
842e8a5143 | ||
|
|
68d5aaad30 | ||
|
|
491263fec4 | ||
|
|
7dfc9a6c3c | ||
|
|
766e63f64b | ||
|
|
d43907184d | ||
|
|
951224d030 | ||
|
|
acb1b3e7e7 | ||
|
|
b062f88fb6 | ||
|
|
2541c81d15 | ||
|
|
0ad1b36eac | ||
|
|
21f0ce2d9e | ||
|
|
15c7e8bf52 | ||
|
|
186af8fda4 | ||
|
|
46c8a44a4c | ||
|
|
c41baf82a2 | ||
|
|
4064fa406c | ||
|
|
2af84c38f6 | ||
|
|
c5f92dcd0b | ||
|
|
014691e9da | ||
|
|
4c616886db | ||
|
|
7925bd10e5 | ||
|
|
218fcb2a12 | ||
|
|
ea685a9504 | ||
|
|
c880d1c3fb | ||
|
|
cecdd31889 | ||
|
|
11a7f3f908 | ||
|
|
05946bf5d1 | ||
|
|
3a411d362a | ||
|
|
d6ee2c7ee0 | ||
|
|
721471916a | ||
|
|
4dacc0a232 | ||
|
|
5353beeaf1 | ||
|
|
06dd32898a | ||
|
|
7d05e404d9 | ||
|
|
22d60b9d4d | ||
|
|
fbb7ff7788 | ||
|
|
b879286ad4 | ||
|
|
0dfaae48fe | ||
|
|
8289d13071 | ||
|
|
5850744002 | ||
|
|
d27e66afe9 | ||
|
|
2f7ed923c1 | ||
|
|
2d8951a051 | ||
|
|
7208f7da58 | ||
|
|
fa41e8ecbe | ||
|
|
2135867696 | ||
|
|
64824728db | ||
|
|
52a33963d4 | ||
|
|
562dd54075 | ||
|
|
591bb8b4b1 | ||
|
|
298ca8e363 | ||
|
|
07aff0ee33 | ||
|
|
0603e2d515 | ||
|
|
a2bf7e60fb | ||
|
|
922bdb6089 | ||
|
|
9c3bdda794 | ||
|
|
27cf02b4cf | ||
|
|
b1ce4b344f | ||
|
|
e321b3e873 | ||
|
|
53beafafc2 | ||
|
|
6cef80226a | ||
|
|
c5820a69f3 | ||
|
|
327f2d0a90 | ||
|
|
ca455cf9d7 | ||
|
|
b3f7f293ee | ||
|
|
b5d1606c18 | ||
|
|
2a15cb9a8f | ||
|
|
d93e123f62 | ||
|
|
67028271f1 | ||
|
|
871334506e | ||
|
|
754bfb6067 | ||
|
|
d7509ec6d4 | ||
|
|
b35f2c2f9a | ||
|
|
03ffc533f0 | ||
|
|
477a48941c | ||
|
|
b4196747f4 | ||
|
|
6c35d1f02a | ||
|
|
0732efb715 | ||
|
|
b3af28516a | ||
|
|
92d33529c7 | ||
|
|
2e167ceaa6 | ||
|
|
ad14096ab5 | ||
|
|
3baeebae3c | ||
|
|
26f8db6806 | ||
|
|
1b1c081827 | ||
|
|
1bee748688 | ||
|
|
f25ab3f571 | ||
|
|
a0683e0cdd | ||
|
|
d2c864a65a | ||
|
|
6d742d26b6 | ||
|
|
7408e84fc6 | ||
|
|
c97edb527a | ||
|
|
e30252b5ca | ||
|
|
55e902f9e2 | ||
|
|
20aea8afdc | ||
|
|
4a3285b44e | ||
|
|
6e340edf00 | ||
|
|
eb69720b0c | ||
|
|
428c4cf8bf | ||
|
|
3932765b29 | ||
|
|
736908cd90 | ||
|
|
cd4cc56df0 | ||
|
|
6af47c09ec | ||
|
|
cdd7c9a25d | ||
|
|
014865a885 | ||
|
|
bf3ac0df12 | ||
|
|
e736e9c249 | ||
|
|
3d7caa8c6a | ||
|
|
8df3b5fcbf | ||
|
|
622a6a4113 | ||
|
|
21a695e665 | ||
|
|
ca35880b03 | ||
|
|
013feb26d2 | ||
|
|
2c449f0911 | ||
|
|
4d1c414403 | ||
|
|
1f3e0bf4cb | ||
|
|
d7729627d4 | ||
|
|
5ac4756cd7 | ||
|
|
75c4c34b81 | ||
|
|
28d3934047 | ||
|
|
920282a631 | ||
|
|
701ac83834 | ||
|
|
162d7e2418 | ||
|
|
313b05c498 | ||
|
|
01b75c0024 | ||
|
|
727ebe49ba | ||
|
|
1466d87eda | ||
|
|
0b2b15452a | ||
|
|
b74bc82a00 | ||
|
|
ce3cf99c46 | ||
|
|
3aa7c0b523 | ||
|
|
f4061e06a4 | ||
|
|
6480260e65 | ||
|
|
065d7a1c62 | ||
|
|
3b1dc8dc11 | ||
|
|
97a8168533 | ||
|
|
63ea0e74a4 | ||
|
|
2e9e189c7c | ||
|
|
f05810df70 | ||
|
|
6601a957c2 | ||
|
|
01269919af | ||
|
|
734c0c19ef | ||
|
|
beb00ced8e | ||
|
|
6cb9e33bbb | ||
|
|
a320c4932b | ||
|
|
0aac22672f |
No files matched your search
@@ -1,15 +1,13 @@
|
||||
#
|
||||
# $Id: Makefile,v 1.109.2.24 1998/03/09 14:18:02 jkh Exp $
|
||||
# $Id: Makefile,v 1.109.2.32 1998/06/29 10:15:32 jkh Exp $
|
||||
#
|
||||
# Make command line options:
|
||||
# -DCLOBBER will remove /usr/include
|
||||
# -DMAKE_KERBEROS4 to build KerberosIV
|
||||
# -DALLLANG to build documentation for all languages
|
||||
# (where available -- see share/doc/Makefile)
|
||||
#
|
||||
# -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
|
||||
# -DNOCLEAN do not clean at all
|
||||
# -DNOTOOLS do not rebuild any tools first
|
||||
# -DNOTOOLS do not rebuild any tools first
|
||||
# -DNOCRYPT will prevent building of crypt versions
|
||||
# -DNOLKM do not build loadable kernel modules
|
||||
# -DNOOBJDIR do not run ``${MAKE} obj''
|
||||
@@ -18,6 +16,7 @@
|
||||
# -DNOGAMES do not go into games subdir
|
||||
# -DNOSHARE do not go into share subdir
|
||||
# -DNOINFO do not make or install info files
|
||||
# -DNOLIBC_R do not build libc_r.
|
||||
# -DNOPERL do not make or install perl
|
||||
# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
|
||||
|
||||
@@ -126,8 +125,8 @@ CLEANDIR= cleandir
|
||||
.endif
|
||||
.endif
|
||||
|
||||
SUP?= sup
|
||||
SUPFLAGS?= -v
|
||||
SUP?= cvsup
|
||||
SUPFLAGS?= -g -L 2 -P -
|
||||
|
||||
#
|
||||
# While building tools for bootstrapping, we dont need to waste time on
|
||||
@@ -345,7 +344,7 @@ reinstall:
|
||||
update:
|
||||
.if defined(SUP_UPDATE)
|
||||
@echo "--------------------------------------------------------------"
|
||||
@echo "Running sup"
|
||||
@echo "Running ${SUP}"
|
||||
@echo "--------------------------------------------------------------"
|
||||
@${SUP} ${SUPFLAGS} ${SUPFILE}
|
||||
.if defined(SUPFILE1)
|
||||
@@ -526,14 +525,14 @@ lib-tools:
|
||||
usr.bin/tsort \
|
||||
gnu/usr.bin/as \
|
||||
gnu/usr.bin/bison \
|
||||
gnu/usr.bin/cc \
|
||||
usr.bin/ar \
|
||||
usr.bin/compile_et \
|
||||
usr.bin/lex/lib \
|
||||
usr.bin/mk_cmds \
|
||||
usr.bin/nm \
|
||||
usr.bin/ranlib \
|
||||
usr.bin/uudecode
|
||||
usr.bin/uudecode \
|
||||
gnu/usr.bin/cc
|
||||
cd ${.CURDIR}/$d && ${MAKE} depend && \
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
@@ -553,6 +552,16 @@ libraries:
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
.endif
|
||||
.if exists(lib/libc)
|
||||
cd ${.CURDIR}/lib/libc && ${MAKE} depend && \
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
.endif
|
||||
.if exists(lib/libmytinfo)
|
||||
cd ${.CURDIR}/lib/libmytinfo && ${MAKE} depend && \
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
.endif
|
||||
.if exists(lib/libncurses)
|
||||
cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
@@ -594,6 +603,13 @@ libraries:
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
.endif
|
||||
|
||||
# Exclude perl from the build-tools if NOPERL is defined.
|
||||
.if defined(NOPERL)
|
||||
_perl=
|
||||
.else
|
||||
_perl= gnu/usr.bin/perl/perl
|
||||
.endif
|
||||
|
||||
#
|
||||
# build-tools - build and install any other tools needed to complete the
|
||||
# compile and install.
|
||||
@@ -619,7 +635,6 @@ build-tools:
|
||||
bin/mkdir \
|
||||
bin/mv \
|
||||
bin/rm \
|
||||
bin/sh \
|
||||
bin/test \
|
||||
gnu/usr.bin/awk \
|
||||
gnu/usr.bin/bc \
|
||||
@@ -627,9 +642,10 @@ build-tools:
|
||||
gnu/usr.bin/groff \
|
||||
gnu/usr.bin/gzip \
|
||||
gnu/usr.bin/man/makewhatis \
|
||||
gnu/usr.bin/patch \
|
||||
${_perl} \
|
||||
gnu/usr.bin/sort \
|
||||
gnu/usr.bin/texinfo \
|
||||
share/info \
|
||||
usr.bin/basename \
|
||||
usr.bin/cap_mkdb \
|
||||
usr.bin/chflags \
|
||||
@@ -640,6 +656,7 @@ build-tools:
|
||||
usr.bin/file2c \
|
||||
usr.bin/find \
|
||||
usr.bin/gencat \
|
||||
usr.bin/id \
|
||||
usr.bin/lorder \
|
||||
usr.bin/m4 \
|
||||
usr.bin/mkdep \
|
||||
@@ -660,7 +677,8 @@ build-tools:
|
||||
usr.bin/yacc \
|
||||
usr.sbin/chown \
|
||||
usr.sbin/mtree \
|
||||
usr.sbin/zic
|
||||
usr.sbin/zic \
|
||||
bin/sh
|
||||
cd ${.CURDIR}/$d && ${MAKE} depend && \
|
||||
${MAKE} ${MK_FLAGS} all && \
|
||||
${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
This is the top level of the FreeBSD source directory. This file
|
||||
was last revised on: $Id: README,v 1.7.2.1 1997/08/13 19:49:35 jkh Exp $
|
||||
was last revised on: $Id: README,v 1.7.2.2 1998/02/15 10:47:57 jkh Exp $
|
||||
|
||||
For copyright information, please see the file COPYRIGHT in this
|
||||
directory (additional copyright information also exists for some
|
||||
@@ -34,7 +34,7 @@ bin System/User commands.
|
||||
|
||||
contrib Packages contributed by 3rd parties.
|
||||
|
||||
eBones Kerberos package - NOT FOR EXPORT!
|
||||
crypto Export controlled stuff (see crypto/README).
|
||||
|
||||
etc Template files for /etc
|
||||
|
||||
@@ -45,6 +45,8 @@ gnu Various commands and libraries under the GNU Public License.
|
||||
|
||||
include System include files.
|
||||
|
||||
kerberosIV Kerberos package - also export controlled.
|
||||
|
||||
lib System libraries.
|
||||
|
||||
libexec System daemons.
|
||||
|
||||
+16
-18
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)cat.1 8.3 (Berkeley) 5/2/95
|
||||
.\" $Id: cat.1,v 1.6 1997/02/22 14:01:26 peter Exp $
|
||||
.\" $Id: cat.1,v 1.3.2.2 1998/06/30 06:42:19 charnier Exp $
|
||||
.\"
|
||||
.Dd May 2, 1995
|
||||
.Dt CAT 1
|
||||
@@ -48,7 +48,7 @@
|
||||
.Op Ar
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm cat
|
||||
.Nm
|
||||
utility reads files sequentially, writing them to the standard output.
|
||||
The
|
||||
.Ar file
|
||||
@@ -56,47 +56,44 @@ operands are processed in command line order.
|
||||
A single dash represents the standard input.
|
||||
.Pp
|
||||
The options are as follows:
|
||||
.Bl -tag -width Ds
|
||||
.Bl -tag -width indent
|
||||
.It Fl b
|
||||
Implies the
|
||||
.Fl n
|
||||
option but doesn't number blank lines.
|
||||
Number the non-blank output lines, starting at 1.
|
||||
.It Fl e
|
||||
Implies the
|
||||
Display non-printing characters (see the
|
||||
.Fl v
|
||||
option, and displays a dollar sign
|
||||
option), and display a dollar sign
|
||||
.Pq Ql \&$
|
||||
at the end of each line
|
||||
as well.
|
||||
at the end of each line.
|
||||
.It Fl n
|
||||
Number the output lines, starting at 1.
|
||||
.It Fl s
|
||||
Squeeze multiple adjacent empty lines, causing the output to be
|
||||
single spaced.
|
||||
.It Fl t
|
||||
Implies the
|
||||
Display non-printing characters (see the
|
||||
.Fl v
|
||||
option, and displays tab characters as
|
||||
.Ql ^I
|
||||
as well.
|
||||
option), and display tab characters as
|
||||
.Ql ^I .
|
||||
.It Fl u
|
||||
The
|
||||
.Fl u
|
||||
option guarantees that the output is unbuffered.
|
||||
.It Fl v
|
||||
Displays non-printing characters so they are visible.
|
||||
Display non-printing characters so they are visible.
|
||||
Control characters print as
|
||||
.Ql ^X
|
||||
for control-X; the delete
|
||||
character (octal 0177) prints as
|
||||
.Ql ^?
|
||||
Non-ascii characters (with the high bit set) are printed as
|
||||
.Pf Non- Tn ASCII
|
||||
characters (with the high bit set) are printed as
|
||||
.Ql M-
|
||||
(for meta) followed by the character for the low 7 bits.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm cat
|
||||
.Nm
|
||||
utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh BUGS
|
||||
Because of the shell language mechanism used to perform output
|
||||
@@ -119,7 +116,8 @@ will cause the original data in file1 to be destroyed!
|
||||
A
|
||||
.Nm
|
||||
command appeared in Version 1 AT&T UNIX.
|
||||
Dennis Ritchie designed and wrote the first man page.
|
||||
.An Dennis Ritchie
|
||||
designed and wrote the first man page.
|
||||
It appears to have been
|
||||
.Xr cat 1 .
|
||||
|
||||
+55
-53
@@ -30,6 +30,8 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id$
|
||||
.\"
|
||||
.Dd April 2, 1996
|
||||
.Dt CHIO 1
|
||||
.Os
|
||||
@@ -61,49 +63,53 @@ rather than the default device
|
||||
.El
|
||||
.Pp
|
||||
The default changer may be overridden by setting the environment variable
|
||||
.Nm CHANGER
|
||||
.Ev CHANGER
|
||||
to the desired changer device.
|
||||
.Pp
|
||||
A medium changer apparatus is made up of
|
||||
.Pa elements .
|
||||
.Em elements .
|
||||
There are four element types:
|
||||
.Pa picker
|
||||
.Em picker
|
||||
(medium transport),
|
||||
.Pa slot
|
||||
.Em slot
|
||||
(storage),
|
||||
.Pa portal
|
||||
.Em portal
|
||||
(import/export), and
|
||||
.Pa drive
|
||||
.Em drive
|
||||
(data transfer). In this command description, the shorthand
|
||||
.Nm ET
|
||||
.Em ET
|
||||
will be used to represent an element type, and
|
||||
.Nm EU
|
||||
.Em EU
|
||||
will be used to represent an element unit. For example, to represent
|
||||
the first robotic arm in the changer, the ET would be
|
||||
the first robotic arm in the changer, the
|
||||
.Em ET
|
||||
would be
|
||||
.Dq picker
|
||||
and the EU would be
|
||||
and the
|
||||
.Em EU
|
||||
would be
|
||||
.Dq 0 .
|
||||
.Pp
|
||||
.Sh SUPPORTED COMMANDS
|
||||
.Nm chio move
|
||||
.Bl -tag -width indent
|
||||
.It Xo Nm chio move
|
||||
.Ar <from ET> <from EU> <to ET> <to EU>
|
||||
.Op Ar inv
|
||||
.Pp
|
||||
Moves the media unit from
|
||||
.Xc
|
||||
Move the media unit from
|
||||
.Pa <from ET/EU>
|
||||
to
|
||||
.Pa <to ET/EU> .
|
||||
If the optional modifier
|
||||
.Pa inv
|
||||
is specified, the media unit will be inverted before insertion.
|
||||
.Pp
|
||||
.Nm chio exchange
|
||||
.It Xo Nm chio exchange
|
||||
.Ar <src ET> <src EU> <dst1 ET> <dst1 EU>
|
||||
.Op Ar <dst2 ET> <dst2 ET>
|
||||
.Op Ar inv1
|
||||
.Op Ar inv2
|
||||
.Pp
|
||||
Performs a media unit exchange operation. The media unit in
|
||||
.Xc
|
||||
Perform a media unit exchange operation. The media unit in
|
||||
.Pa <src ET/EU>
|
||||
is moved to
|
||||
.Pa <dst1 ET/EU>
|
||||
@@ -130,11 +136,10 @@ Note that not all medium changers support the
|
||||
.Nm exchange
|
||||
operation; The changer must have multiple free pickers or emulate
|
||||
multiple free pickers with transient storage.
|
||||
.Pp
|
||||
.Nm chio position
|
||||
.It Xo Nm chio position
|
||||
.Ar <to ET> <to EU>
|
||||
.Op Ar inv
|
||||
.Pp
|
||||
.Xc
|
||||
Position the picker in front of the element described by
|
||||
.Pa <to ET/EU> .
|
||||
If the optional modifier
|
||||
@@ -142,62 +147,59 @@ If the optional modifier
|
||||
is specified, the media unit will be inverted before insertion.
|
||||
.Pp
|
||||
Note that not all changers behave as expected when issued this command.
|
||||
.Pp
|
||||
.Nm chio params
|
||||
.Pp
|
||||
.It Nm chio params
|
||||
Report the number of slots, drives, pickers, and portals in the changer,
|
||||
and which picker unit the changer is currently configured to use.
|
||||
.Pp
|
||||
.Nm chio getpicker
|
||||
.Pp
|
||||
.It Nm chio getpicker
|
||||
Report which picker unit the changer is currently configured to use.
|
||||
.Pp
|
||||
.Nm chio setpicker
|
||||
.It Xo Nm chio setpicker
|
||||
.Ar <unit>
|
||||
.Pp
|
||||
.Xc
|
||||
Configure the changer to use picker
|
||||
.Pa <unit> .
|
||||
.Pp
|
||||
.Nm chio status
|
||||
.It Xo Nm chio status
|
||||
.Op Ar <type>
|
||||
.Pp
|
||||
.Xc
|
||||
Report the status of all elements in the changer. If
|
||||
.Pa <type>
|
||||
is specified, report the status of all elements of type
|
||||
.Pa <type> .
|
||||
.El
|
||||
.Pp
|
||||
The status bits are defined as follows:
|
||||
.Bl -tag -width indent
|
||||
.It Nm FULL
|
||||
.It FULL
|
||||
Element contains a media unit.
|
||||
.It Nm IMPEXP
|
||||
.It IMPEXP
|
||||
Media was deposited into element by an outside human operator.
|
||||
.It Nm EXCEPT
|
||||
.It EXCEPT
|
||||
Element is in an abnormal state.
|
||||
.It Nm ACCESS
|
||||
.It ACCESS
|
||||
Media in this element is accessible by a picker.
|
||||
.It Nm EXENAB
|
||||
Element supports passing media (exporting) to an outsite human operator.
|
||||
.It Nm INENAB
|
||||
.It EXENAB
|
||||
Element supports passing media (exporting) to an outside human operator.
|
||||
.It INENAB
|
||||
Element supports receiving media (importing) from an outside human operator.
|
||||
.El
|
||||
.Pp
|
||||
.Sh EXAMPLES
|
||||
.Nm chio move slot 3 drive 0
|
||||
.Pp
|
||||
Moves the media in slot 3 (fourth slot) to drive 0 (first drive).
|
||||
.Pp
|
||||
.Nm chio setpicker 2
|
||||
Configures the changer to use picker 2 (third picker) for operations.
|
||||
.Pp
|
||||
.Bl -tag -width indent
|
||||
.It Nm chio move slot 3 drive 0
|
||||
Move the media in slot 3 (fourth slot) to drive 0 (first drive).
|
||||
.It Nm chio setpicker 2
|
||||
Configure the changer to use picker 2 (third picker) for operations.
|
||||
.El
|
||||
.Sh FILES
|
||||
/dev/ch0 - default changer device
|
||||
.Bl -tag -width /dev/ch0 -compact
|
||||
.It Pa /dev/ch0
|
||||
default changer device
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr mt 1 ,
|
||||
.Xr ch 4 ,
|
||||
.Xr mount 8 .
|
||||
.Sh AUTHOR
|
||||
.Xr mount 8
|
||||
.Sh AUTHORS
|
||||
The
|
||||
.Nm chio
|
||||
program and SCSI changer driver were written by Jason R. Thorpe
|
||||
<[email protected]> for And Communications, http://www.and.com/
|
||||
.Nm
|
||||
program and SCSI changer driver were written by
|
||||
.An Jason R. Thorpe Aq [email protected]
|
||||
for And Communications, http://www.and.com/
|
||||
+50
-24
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)chmod.1 8.4 (Berkeley) 3/31/94
|
||||
.\" $Id: chmod.1,v 1.4.2.1 1997/02/28 07:54:25 mpp Exp $
|
||||
.\" $Id: chmod.1,v 1.4.2.3 1998/05/22 10:41:45 jkoshy Exp $
|
||||
.\"
|
||||
.Dd March 31, 1994
|
||||
.Dt CHMOD 1
|
||||
@@ -51,7 +51,7 @@
|
||||
.Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm chmod
|
||||
.Nm
|
||||
utility modifies the file mode bits of the listed files
|
||||
as specified by the
|
||||
.Ar mode
|
||||
@@ -82,7 +82,7 @@ Symbolic links do not have modes, so unless the
|
||||
or
|
||||
.Fl L
|
||||
option is set,
|
||||
.Nm chmod
|
||||
.Nm
|
||||
on a symbolic link always succeeds and has no effect.
|
||||
The
|
||||
.Fl H ,
|
||||
@@ -99,39 +99,63 @@ Only the owner of a file or the super-user is permitted to change
|
||||
the mode of a file.
|
||||
.Pp
|
||||
The
|
||||
.Nm chmod
|
||||
.Nm
|
||||
utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh MODES
|
||||
Modes may be absolute or symbolic.
|
||||
An absolute mode is an octal number constructed by
|
||||
.Ar or-ing
|
||||
the following values:
|
||||
An absolute mode is an octal number constructed from the sum of
|
||||
one or more of the following values:
|
||||
.Pp
|
||||
.Bl -tag -width 6n -compact -offset indent
|
||||
.It Li 4000
|
||||
set-user-ID-on-execution
|
||||
( see
|
||||
(the set-user-ID-on-execution bit) Executable files with this bit set
|
||||
will run with effective uid set to the uid of the file owner.
|
||||
Directories with the set-user-id bit set will force all files and
|
||||
sub-directories created in them to be owned by the directory owner
|
||||
and not by the uid of the creating process, if the underlying file
|
||||
system supports this feature: see
|
||||
.Xr chmod 2
|
||||
for directories )
|
||||
and the
|
||||
.Ar suiddir
|
||||
option to
|
||||
.Xr mount 1 .
|
||||
.It Li 2000
|
||||
set-group-ID-on-execution
|
||||
(the set-group-ID-on-execution bit) Executable files with this bit set
|
||||
will run with effective gid set to the gid of the file owner.
|
||||
.It Li 1000
|
||||
sticky bit, see
|
||||
.Xr chmod 2
|
||||
(the sticky bit)
|
||||
When set on a directory, unprivileged users can delete and rename
|
||||
only those files in the directory that are owned by them, regardless of
|
||||
the permissions on the directory. Under FreeBSD, the sticky bit is
|
||||
ignored for executable files and may only be set for directories (see
|
||||
.Xr sticky 8 ).
|
||||
.It Li 0400
|
||||
read by owner
|
||||
Allow read by owner.
|
||||
.It Li 0200
|
||||
write by owner
|
||||
Allow write by owner.
|
||||
.It Li 0100
|
||||
execute (or search for directories) by owner
|
||||
.It Li 0070
|
||||
read, write, execute/search by group
|
||||
.It Li 0007
|
||||
read, write, execute/search by others
|
||||
For files, allow execution by owner. For directories, allow the owner to
|
||||
search in the directory.
|
||||
.It Li 0040
|
||||
Allow read by group members.
|
||||
.It Li 0020
|
||||
Allow write by group members.
|
||||
.It Li 0010
|
||||
For files, allow execution by group members. For directories, allow
|
||||
group members to search in the directory.
|
||||
.It Li 0004
|
||||
Allow read by others.
|
||||
.It Li 0002
|
||||
Allow write by others.
|
||||
.It Li 0001
|
||||
For files, allow execution by others. For directories allow others to
|
||||
search in the directory.
|
||||
.El
|
||||
.Pp
|
||||
The read, write, and execute/search values for group and others
|
||||
are encoded as described for owner.
|
||||
For example, the absolute mode that permits read, write and execute by
|
||||
the owner, read and execute by group members, read and execute by
|
||||
others, and no set-uid or set-gid behaviour is 755
|
||||
(400+200+100+040+010+004+001).
|
||||
.Pp
|
||||
The symbolic mode is described by the following grammar:
|
||||
.Bd -literal -offset indent
|
||||
@@ -280,16 +304,18 @@ option for the naughty bits.
|
||||
.Sh SEE ALSO
|
||||
.Xr chflags 1 ,
|
||||
.Xr install 1 ,
|
||||
.Xr mount 1 ,
|
||||
.Xr chmod 2 ,
|
||||
.Xr stat 2 ,
|
||||
.Xr umask 2 ,
|
||||
.Xr fts 3 ,
|
||||
.Xr setmode 3 ,
|
||||
.Xr symlink 7 ,
|
||||
.Xr chown 8
|
||||
.Xr chown 8 ,
|
||||
.Xr sticky 8
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm chmod
|
||||
.Nm
|
||||
utility is expected to be
|
||||
.St -p1003.2
|
||||
compatible with the exception of the
|
||||
|
||||
+11
-11
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)cp.1 8.3 (Berkeley) 4/18/94
|
||||
.\" $Id: cp.1,v 1.9 1997/02/22 14:01:32 peter Exp $
|
||||
.\" $Id: cp.1,v 1.6.2.1 1997/02/28 07:54:27 mpp Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt CP 1
|
||||
@@ -60,7 +60,7 @@
|
||||
.Ar source_file ... target_directory
|
||||
.Sh DESCRIPTION
|
||||
In the first synopsis form, the
|
||||
.Nm cp
|
||||
.Nm
|
||||
utility copies the contents of the
|
||||
.Ar source_file
|
||||
to the
|
||||
@@ -72,7 +72,7 @@ is copied to the destination
|
||||
.Ar target_directory .
|
||||
The names of the files themselves are not changed.
|
||||
If
|
||||
.Nm cp
|
||||
.Nm
|
||||
detects an attempt to copy a file to itself, the copy will fail.
|
||||
.Pp
|
||||
The following options are available:
|
||||
@@ -94,11 +94,11 @@ option is specified, no symbolic links are followed.
|
||||
If
|
||||
.Ar source_file
|
||||
designates a directory,
|
||||
.Nm cp
|
||||
.Nm
|
||||
copies the directory and the entire subtree connected at that point.
|
||||
This option also causes symbolic links to be copied, rather than
|
||||
indirected through, and for
|
||||
.Nm cp
|
||||
.Nm
|
||||
to create special files rather than copying them as normal files.
|
||||
Created directories have the same mode as the corresponding source
|
||||
directory, unmodified by the process' umask.
|
||||
@@ -112,8 +112,8 @@ option overrides any previous
|
||||
.Fl i
|
||||
options.)
|
||||
.It Fl i
|
||||
Causes
|
||||
.Nm cp
|
||||
Cause
|
||||
.Nm
|
||||
to write a prompt to the standard error output before copying a file
|
||||
that would overwrite an existing file.
|
||||
If the response from the standard input begins with the character
|
||||
@@ -127,8 +127,8 @@ option overrides any previous
|
||||
.Fl f
|
||||
options.)
|
||||
.It Fl p
|
||||
Causes
|
||||
.Nm cp
|
||||
Cause
|
||||
.Nm
|
||||
to preserve in the copy as many of the modification time, access time,
|
||||
file flags, file mode, user ID, and group ID as allowed by permissions.
|
||||
.Pp
|
||||
@@ -200,7 +200,7 @@ command's actions are determined by the last one specified.
|
||||
exits 0 on success, >0 if an error occurred.
|
||||
.Sh COMPATIBILITY
|
||||
Historic versions of the
|
||||
.Nm cp
|
||||
.Nm
|
||||
utility had a
|
||||
.Fl r
|
||||
option.
|
||||
@@ -215,7 +215,7 @@ or fifo's.
|
||||
.Xr symlink 7
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm cp
|
||||
.Nm
|
||||
command is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+2
-1
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: cp.c,v 1.10 1996/03/08 06:58:06 wosch Exp $
|
||||
* $Id: cp.c,v 1.10.2.1 1997/08/24 10:34:45 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -261,6 +261,7 @@ copy(argv, type, fts_options)
|
||||
for (rval = 0; (curr = fts_read(ftsp)) != NULL;) {
|
||||
switch (curr->fts_info) {
|
||||
case FTS_NS:
|
||||
case FTS_DNR:
|
||||
case FTS_ERR:
|
||||
warnx("%s: %s",
|
||||
curr->fts_path, strerror(curr->fts_errno));
|
||||
|
||||
+30
-16
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: utils.c,v 1.9.2.1 1997/08/24 10:34:49 jkh Exp $
|
||||
* $Id: utils.c,v 1.9.2.2 1998/02/15 10:53:17 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -207,7 +207,7 @@ copy_link(p, exists)
|
||||
int len;
|
||||
char link[MAXPATHLEN];
|
||||
|
||||
if ((len = readlink(p->fts_path, link, sizeof(link))) == -1) {
|
||||
if ((len = readlink(p->fts_path, link, sizeof(link) - 1)) == -1) {
|
||||
warn("readlink: %s", p->fts_path);
|
||||
return (1);
|
||||
}
|
||||
@@ -262,7 +262,9 @@ setfile(fs, fd)
|
||||
int fd;
|
||||
{
|
||||
static struct timeval tv[2];
|
||||
struct stat ts;
|
||||
int rval;
|
||||
int gotstat;
|
||||
|
||||
rval = 0;
|
||||
fs->st_mode &= S_ISUID | S_ISGID | S_ISVTX |
|
||||
@@ -274,30 +276,42 @@ setfile(fs, fd)
|
||||
warn("utimes: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
if (fd ? fstat(fd, &ts) : stat(to.p_path, &ts))
|
||||
gotstat = 0;
|
||||
else {
|
||||
gotstat = 1;
|
||||
ts.st_mode &= S_ISUID | S_ISGID | S_ISVTX |
|
||||
S_IRWXU | S_IRWXG | S_IRWXO;
|
||||
}
|
||||
/*
|
||||
* Changing the ownership probably won't succeed, unless we're root
|
||||
* or POSIX_CHOWN_RESTRICTED is not set. Set uid/gid before setting
|
||||
* the mode; current BSD behavior is to remove all setuid bits on
|
||||
* chown. If chown fails, lose setuid/setgid bits.
|
||||
*/
|
||||
if (fd ? fchown(fd, fs->st_uid, fs->st_gid) :
|
||||
chown(to.p_path, fs->st_uid, fs->st_gid)) {
|
||||
if (errno != EPERM) {
|
||||
if (!gotstat || fs->st_uid != ts.st_uid || fs->st_gid != ts.st_gid)
|
||||
if (fd ? fchown(fd, fs->st_uid, fs->st_gid) :
|
||||
chown(to.p_path, fs->st_uid, fs->st_gid)) {
|
||||
if (errno != EPERM) {
|
||||
warn("chown: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
fs->st_mode &= ~(S_ISUID | S_ISGID);
|
||||
}
|
||||
|
||||
if (!gotstat || fs->st_mode != ts.st_mode)
|
||||
if (fd ? fchmod(fd, fs->st_mode) : chmod(to.p_path, fs->st_mode)) {
|
||||
warn("chown: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
fs->st_mode &= ~(S_ISUID | S_ISGID);
|
||||
}
|
||||
if (fd ? fchmod(fd, fs->st_mode) : chmod(to.p_path, fs->st_mode)) {
|
||||
warn("chown: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
|
||||
if (fd ?
|
||||
fchflags(fd, fs->st_flags) : chflags(to.p_path, fs->st_flags)) {
|
||||
warn("chflags: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
if (!gotstat || fs->st_flags != ts.st_flags)
|
||||
if (fd ?
|
||||
fchflags(fd, fs->st_flags) : chflags(to.p_path, fs->st_flags)) {
|
||||
warn("chflags: %s", to.p_path);
|
||||
rval = 1;
|
||||
}
|
||||
|
||||
return (rval);
|
||||
}
|
||||
|
||||
|
||||
+85
-76
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)csh.1 8.2 (Berkeley) 1/21/94
|
||||
.\" $Id: csh.1,v 1.8 1997/02/22 14:01:40 peter Exp $
|
||||
.\" $Id: csh.1,v 1.5.2.2 1998/06/30 06:42:24 charnier Exp $
|
||||
.\"
|
||||
.Dd January 21, 1994
|
||||
.Dt CSH 1
|
||||
@@ -46,15 +46,15 @@
|
||||
.Op Fl l
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm csh
|
||||
.Nm
|
||||
is a command language interpreter
|
||||
incorporating a history mechanism (see
|
||||
.Nm History Substitutions ) ,
|
||||
.Sx History Substitutions ) ,
|
||||
job control facilities (see
|
||||
.Nm Jobs ) ,
|
||||
.Sx Jobs ) ,
|
||||
interactive file name
|
||||
and user name completion (see
|
||||
.Nm File Name Completion ) ,
|
||||
.Sx File Name Completion ) ,
|
||||
and a C-like syntax. It is used both as an interactive
|
||||
login shell and a shell script command processor.
|
||||
.Ss Argument list processing
|
||||
@@ -100,7 +100,7 @@ is the only flag specified).
|
||||
The shell loads
|
||||
.Pa .cshrc
|
||||
even if it does not belong to the effective user.
|
||||
.Xr su 1
|
||||
.Xr Su 1
|
||||
can pass
|
||||
.Fl m
|
||||
to the shell.
|
||||
@@ -116,16 +116,16 @@ A
|
||||
may be used to escape the newline at the end of this
|
||||
line and continue onto another line.
|
||||
.It Fl v
|
||||
Causes the
|
||||
Cause the
|
||||
.Ar verbose
|
||||
variable to be set, with the effect
|
||||
that command input is echoed after history substitution.
|
||||
.It Fl x
|
||||
Causes the
|
||||
Cause the
|
||||
.Ar echo
|
||||
variable to be set, so that commands are echoed immediately before execution.
|
||||
.It Fl V
|
||||
Causes the
|
||||
Cause the
|
||||
.Ar verbose
|
||||
variable to be set even before
|
||||
.Pa .cshrc
|
||||
@@ -157,7 +157,7 @@ Remaining arguments initialize the variable
|
||||
.Ar argv .
|
||||
.Pp
|
||||
An instance of
|
||||
.Nm csh
|
||||
.Nm
|
||||
begins by executing commands from the file
|
||||
.Pa /etc/csh.cshrc
|
||||
and,
|
||||
@@ -256,7 +256,7 @@ showing that the job which was started asynchronously was job number
|
||||
1 and had one (top-level) process, whose process id was 1234.
|
||||
.Pp
|
||||
If you are running a job and wish to do something else you may hit the key
|
||||
.Nm ^Z
|
||||
.Em ^Z
|
||||
(control-Z) which sends a STOP signal to the current job.
|
||||
The shell will then normally show that the job has been `Stopped',
|
||||
and print another prompt. You can then manipulate the state of this job,
|
||||
@@ -271,11 +271,11 @@ the
|
||||
command
|
||||
.Ar fg .
|
||||
A
|
||||
.Nm ^Z
|
||||
.Em ^Z
|
||||
takes effect immediately and
|
||||
is like an interrupt in that pending output and unread input are discarded
|
||||
when it is typed. There is another special key
|
||||
.Nm ^Y
|
||||
.Em ^Y
|
||||
that does not generate a STOP signal until a program attempts to
|
||||
.Xr read 2
|
||||
it.
|
||||
@@ -353,7 +353,7 @@ the shell variable
|
||||
.Ar filec
|
||||
(see
|
||||
.Ic set ) ,
|
||||
.Nm csh
|
||||
.Nm
|
||||
will
|
||||
interactively complete file names and user names from unique
|
||||
prefixes, when they are input from the terminal followed by
|
||||
@@ -370,7 +370,7 @@ and the input is
|
||||
.Pp
|
||||
.Dl % vi ch<escape>
|
||||
.Pp
|
||||
.Nm csh
|
||||
.Nm
|
||||
will complete the prefix ``ch''
|
||||
to the only matching file name ``chaosnet'', changing the input
|
||||
line to
|
||||
@@ -381,7 +381,7 @@ However, given
|
||||
.Pp
|
||||
.Dl % vi D<escape>
|
||||
.Pp
|
||||
.Nm csh
|
||||
.Nm
|
||||
will only expand the input to
|
||||
.Pp
|
||||
.Dl % vi DSC.
|
||||
@@ -391,7 +391,7 @@ incomplete, since there are two file names matching the prefix ``D''.
|
||||
.Pp
|
||||
If a partial file name is followed by the end-of-file character
|
||||
(usually control-D), then, instead of completing the name,
|
||||
.Nm csh
|
||||
.Nm
|
||||
will list all file names matching the prefix. For example,
|
||||
the input
|
||||
.Pp
|
||||
@@ -455,7 +455,7 @@ in the previous command with little typing and a high degree of confidence.
|
||||
History substitutions begin with the character `!' and may begin
|
||||
.Ar anywhere
|
||||
in the input stream (with the proviso that they
|
||||
.Nm "do not"
|
||||
.Em "do not"
|
||||
nest.)
|
||||
This `!' may be preceded by a `\e' to prevent its special meaning; for
|
||||
convenience, an `!' is passed unchanged when it is followed by a blank,
|
||||
@@ -631,7 +631,7 @@ Strings enclosed in `"' may be expanded as described below.
|
||||
.Pp
|
||||
In both cases the resulting text becomes (all or part of) a single word;
|
||||
only in one special case (see
|
||||
.Em Command Substitution
|
||||
.Sx Command Substitution
|
||||
below) does a `"' quoted string yield parts of more than one word;
|
||||
`\'' quoted strings never do.
|
||||
.Ss Alias substitution
|
||||
@@ -708,7 +708,7 @@ occurs, and within `\''s where it
|
||||
.Em never
|
||||
occurs.
|
||||
Strings quoted by `\*(ga' are interpreted later (see
|
||||
.Nm "Command substitution"
|
||||
.Sx "Command substitution"
|
||||
below) so `$' substitution does not occur there until later, if at all.
|
||||
A `$' is passed unchanged if followed by a blank, tab, or end-of-line.
|
||||
.Pp
|
||||
@@ -764,11 +764,11 @@ It is not an error for a range to be empty if the second argument is omitted
|
||||
or in range.
|
||||
.It $#name
|
||||
.It ${#name}
|
||||
Gives the number of words in the variable.
|
||||
Give the number of words in the variable.
|
||||
This is useful for later use in a
|
||||
`$argv[selector]'.
|
||||
.It $0
|
||||
Substitutes the name of the file from which command input is being read.
|
||||
Substitute the name of the file from which command input is being read.
|
||||
An error occurs if the name is not known.
|
||||
.It $number
|
||||
.It ${number}
|
||||
@@ -788,16 +788,16 @@ The following substitutions may not be modified with `:' modifiers.
|
||||
.Bl -tag -width Ds -compact -offset indent
|
||||
.It $?name
|
||||
.It ${?name}
|
||||
Substitutes the string `1' if name is set, `0' if it is not.
|
||||
Substitute the string `1' if name is set, `0' if it is not.
|
||||
.It $?0
|
||||
Substitutes `1' if the current input filename is known, `0' if it is not.
|
||||
Substitute `1' if the current input filename is known, `0' if it is not.
|
||||
.It \&$\&$\&
|
||||
Substitute the (decimal) process number of the (parent) shell.
|
||||
.It $!
|
||||
Substitute the (decimal) process number of the last background process
|
||||
started by this shell.
|
||||
.It $<
|
||||
Substitutes a line from the standard
|
||||
Substitute a line from the standard
|
||||
input, with no further interpretation.
|
||||
It can be used to read from the keyboard in a shell script.
|
||||
.El
|
||||
@@ -922,7 +922,7 @@ is expanded in the same way as `<' input filenames are.
|
||||
.It >>& name
|
||||
.It >>! name
|
||||
.It >>&! name
|
||||
Uses file
|
||||
Use file
|
||||
.Ar name
|
||||
as the standard output;
|
||||
like `>' but places output at the end of the file.
|
||||
@@ -961,11 +961,11 @@ Several of the builtin commands (to be described later)
|
||||
take expressions, in which the operators are similar to those of C, with
|
||||
the same precedence.
|
||||
These expressions appear in the
|
||||
.Nm @,
|
||||
.Ar exit ,
|
||||
.Ar if ,
|
||||
.Em @ ,
|
||||
.Em exit ,
|
||||
.Em if ,
|
||||
and
|
||||
.Ar while
|
||||
.Em while
|
||||
commands.
|
||||
The following operators are available:
|
||||
.Bd -ragged -offset indent
|
||||
@@ -1076,7 +1076,7 @@ or
|
||||
.Ar unalias .
|
||||
.Pp
|
||||
.It Ic alloc
|
||||
Shows the amount of dynamic memory acquired, broken down into used and
|
||||
Show the amount of dynamic memory acquired, broken down into used and
|
||||
free memory.
|
||||
With an argument shows the number of free and used blocks in each size
|
||||
category. The categories start at size 8 and double at each step.
|
||||
@@ -1085,11 +1085,11 @@ systems other than the VAX may use a different memory allocator.
|
||||
.Pp
|
||||
.It Ic bg
|
||||
.It Ic bg \&% Ns Ar job ...
|
||||
Puts the current or specified jobs into the background, continuing them
|
||||
Put the current or specified jobs into the background, continuing them
|
||||
if they were stopped.
|
||||
.Pp
|
||||
.It Ic break
|
||||
Causes execution to resume after the
|
||||
Cause execution to resume after the
|
||||
.Ic end
|
||||
of the nearest enclosing
|
||||
.Ic foreach
|
||||
@@ -1099,7 +1099,7 @@ The remaining commands on the current line are executed.
|
||||
Multi-level breaks are thus possible by writing them all on one line.
|
||||
.Pp
|
||||
.It Ic breaksw
|
||||
Causes a break from a
|
||||
Cause a break from a
|
||||
.Ic switch ,
|
||||
resuming after the
|
||||
.Ic endsw .
|
||||
@@ -1137,7 +1137,7 @@ or
|
||||
The rest of the commands on the current line are executed.
|
||||
.Pp
|
||||
.It Ic default :
|
||||
Labels the default case in a
|
||||
Label the default case in a
|
||||
.Ic switch
|
||||
statement.
|
||||
The default should come after all
|
||||
@@ -1145,7 +1145,7 @@ The default should come after all
|
||||
labels.
|
||||
.Pp
|
||||
.It Ic dirs
|
||||
Prints the directory stack; the top of the stack is at the left,
|
||||
Print the directory stack; the top of the stack is at the left,
|
||||
the first directory in the stack being the current directory.
|
||||
.Pp
|
||||
.It Ic echo Ar wordlist
|
||||
@@ -1192,7 +1192,7 @@ variable (first form) or with the value of the specified
|
||||
.Pp
|
||||
.It Ic fg
|
||||
.It Ic fg % Ns Ar job ...
|
||||
Brings the current or specified jobs into the foreground, continuing them if
|
||||
Bring the current or specified jobs into the foreground, continuing them if
|
||||
they were stopped.
|
||||
.Pp
|
||||
.It Ic foreach Ar name (wordlist)
|
||||
@@ -1252,7 +1252,7 @@ that does not begin with a `/'.
|
||||
.It Ic history Ar n
|
||||
.It Ic history Fl r Ar n
|
||||
.It Ic history Fl h Ar n
|
||||
Displays the history event list; if
|
||||
Display the history event list; if
|
||||
.Ar n
|
||||
is given only the
|
||||
.Ar n
|
||||
@@ -1324,7 +1324,7 @@ must appear alone on its input line or after an
|
||||
.Pp
|
||||
.It Ic jobs
|
||||
.It Ic jobs Fl l
|
||||
Lists the active jobs; the
|
||||
List the active jobs; the
|
||||
.Fl l
|
||||
option lists process id's in addition to the normal information.
|
||||
.Pp
|
||||
@@ -1332,10 +1332,10 @@ option lists process id's in addition to the normal information.
|
||||
.It Ic kill Ar pid
|
||||
.It Ic kill Fl sig Ar pid ...
|
||||
.It Ic kill Fl l
|
||||
Sends either the TERM (terminate) signal or the
|
||||
Send either the TERM (terminate) signal or the
|
||||
specified signal to the specified jobs or processes.
|
||||
Signals are either given by number or by names (as given in
|
||||
.Pa /usr/include/signal.h,
|
||||
.Pa /usr/include/signal.h ,
|
||||
stripped of the prefix ``SIG'').
|
||||
The signal names are listed by ``kill \-l''.
|
||||
There is no default, just saying `kill' does not
|
||||
@@ -1349,7 +1349,7 @@ then the job or process will be sent a CONT (continue) signal as well.
|
||||
.It Ic limit Fl h
|
||||
.It Ic limit Fl h Ar resource
|
||||
.It Ic limit Fl h Ar resource maximum-use
|
||||
Limits the consumption by the current process and each process
|
||||
Limit the consumption by the current process and each process
|
||||
it creates to not individually exceed
|
||||
.Ar maximum-use
|
||||
on the
|
||||
@@ -1405,7 +1405,7 @@ of the names suffice.
|
||||
.Pp
|
||||
.It Ic login
|
||||
Terminate a login shell, replacing it with an instance of
|
||||
.Pa /usr/bin/login.
|
||||
.Pa /usr/bin/login .
|
||||
This is one way to log off, included for compatibility with
|
||||
.Xr sh 1 .
|
||||
.Pp
|
||||
@@ -1448,7 +1448,7 @@ All processes detached with `&' are effectively
|
||||
.Pp
|
||||
.It Ic notify
|
||||
.It Ic notify % Ns Ar job ...
|
||||
Causes the shell to notify the user asynchronously when the status of the
|
||||
Cause the shell to notify the user asynchronously when the status of the
|
||||
current or specified jobs change; normally notification is presented
|
||||
before a prompt. This is automatic if the shell variable
|
||||
.Ic notify
|
||||
@@ -1478,7 +1478,7 @@ are disabled (/etc/csh.cshrc, /etc/csh.login).
|
||||
.Pp
|
||||
.It Ic popd
|
||||
.It Ic popd Ar +n
|
||||
Pops the directory stack, returning to the new top directory.
|
||||
Pop the directory stack, returning to the new top directory.
|
||||
With an argument
|
||||
.Ns \`+ Ar n Ns \'
|
||||
discards the
|
||||
@@ -1511,7 +1511,7 @@ stack around to be the top element and changes to it. The members
|
||||
of the directory stack are numbered from the top starting at 0.
|
||||
.Pp
|
||||
.It Ic rehash
|
||||
Causes the internal hash table of the contents of the directories in
|
||||
Cause the internal hash table of the contents of the directories in
|
||||
the
|
||||
.Ic path
|
||||
variable to be recomputed. This is needed if new commands are added
|
||||
@@ -1589,7 +1589,7 @@ The most commonly used environment variables
|
||||
and
|
||||
.Ev PATH
|
||||
are automatically imported to and exported from the
|
||||
.Nm csh
|
||||
.Nm
|
||||
variables
|
||||
.Ar user ,
|
||||
.Ar term ,
|
||||
@@ -1625,19 +1625,21 @@ commands.
|
||||
Normally input during
|
||||
.Ic source
|
||||
commands is not placed on the history list;
|
||||
the \-h option causes the commands to be placed on the
|
||||
the
|
||||
.Fl h
|
||||
option causes the commands to be placed on the
|
||||
history list without being executed.
|
||||
.Pp
|
||||
.It Ic stop
|
||||
.It Ic stop % Ns Ar job ...
|
||||
Stops the current or specified jobs that are executing in the background.
|
||||
Stop the current or specified jobs that are executing in the background.
|
||||
.Pp
|
||||
.It Ic suspend
|
||||
Causes the shell to stop in its tracks, much as if it had been sent a stop
|
||||
Cause the shell to stop in its tracks, much as if it had been sent a stop
|
||||
signal with
|
||||
.Ic ^Z .
|
||||
.Em ^Z .
|
||||
This is most often used to stop shells started by
|
||||
.Xr su 1 .
|
||||
.Xr su 1 .
|
||||
.Pp
|
||||
.It Ic switch Ar (string)
|
||||
.It Ic case Ar str1 :
|
||||
@@ -1699,7 +1701,7 @@ is disabled.
|
||||
.It Ic unlimit Ar resource
|
||||
.It Ic unlimit Fl h
|
||||
.It Ic unlimit Fl h Ar resource
|
||||
Removes the limitation on
|
||||
Remove the limitation on
|
||||
.Ar resource .
|
||||
If no
|
||||
.Ar resource
|
||||
@@ -1718,7 +1720,7 @@ It is not an error for nothing to be
|
||||
.Ic unset .
|
||||
.Pp
|
||||
.It Ic unsetenv Ar pattern
|
||||
Removes all variables whose name match the specified pattern from the
|
||||
Remove all variables whose name match the specified pattern from the
|
||||
environment. See also the
|
||||
.Ic setenv
|
||||
command above and
|
||||
@@ -1730,7 +1732,7 @@ If the shell is interactive, then an interrupt can disrupt the wait.
|
||||
After the interrupt, the shell prints names and job numbers of all jobs
|
||||
known to be outstanding.
|
||||
.It Ic which Ar command
|
||||
Displays the resolved command that will be executed by the shell.
|
||||
Display the resolved command that will be executed by the shell.
|
||||
.Pp
|
||||
.It Ic while Ar (expr)
|
||||
.It \&...
|
||||
@@ -1755,10 +1757,10 @@ Prompting occurs here the first time through the loop as for the
|
||||
statement if the input is a terminal.
|
||||
.Pp
|
||||
.It Ic % Ns Ar job
|
||||
Brings the specified job into the foreground.
|
||||
Bring the specified job into the foreground.
|
||||
.Pp
|
||||
.It Ic % Ns Ar job Ic &
|
||||
Continues the specified job in the background.
|
||||
Continue the specified job in the background.
|
||||
.Pp
|
||||
.It Ic @
|
||||
.It Ic @ Ar name Ns = Ns expr
|
||||
@@ -1831,7 +1833,7 @@ is likewise handled; it is not
|
||||
necessary to worry about its setting other than in the file
|
||||
.Ar \&.cshrc
|
||||
as inferior
|
||||
.Nm csh
|
||||
.Nm
|
||||
processes will import the definition of
|
||||
.Ar path
|
||||
from the environment, and re-export it if you then change it.
|
||||
@@ -1842,7 +1844,7 @@ positional parameters are substituted, i.e., `$1' is replaced by
|
||||
`$argv[1]',
|
||||
etc.
|
||||
.It Ic cdpath
|
||||
Gives a list of alternate directories searched to find subdirectories
|
||||
Give a list of alternate directories searched to find subdirectories
|
||||
in
|
||||
.Ar chdir
|
||||
commands.
|
||||
@@ -1910,10 +1912,9 @@ files are not accidentally destroyed, and that `>>' redirections
|
||||
refer to existing files.
|
||||
.It Ic noglob
|
||||
If set, filename expansion is inhibited.
|
||||
This inhibition is most useful in shell scripts that
|
||||
are not dealing with filenames,
|
||||
or after a list of filenames has been obtained and further expansions
|
||||
are not desirable.
|
||||
This inhibition is most useful in shell scripts that are not dealing with
|
||||
filenames, or after a list of filenames has been obtained and further
|
||||
expansions are not desirable.
|
||||
.It Ic nonomatch
|
||||
If set, it is not an error for a filename expansion to not match any
|
||||
existing files; instead the primitive pattern is returned.
|
||||
@@ -1981,7 +1982,7 @@ If it terminated abnormally, then 0200 is added to the status.
|
||||
Builtin commands that fail return exit status `1',
|
||||
all other builtin commands set status to `0'.
|
||||
.It Ic time
|
||||
Controls automatic timing of commands.
|
||||
Control automatic timing of commands.
|
||||
If set, then any command that takes more than this many cpu seconds
|
||||
will cause a line giving user, system, and real times and a utilization
|
||||
percentage which is the ratio of user plus system times to real time
|
||||
@@ -2080,27 +2081,35 @@ signal; otherwise this signal is passed on to children from the state in the
|
||||
shell's parent.
|
||||
Interrupts are not allowed when a login shell is reading the file
|
||||
.Pa \&.logout .
|
||||
.Sh AUTHOR
|
||||
William Joy.
|
||||
Job control and directory stack features first implemented by J.E. Kulp of
|
||||
IIASA, Laxenburg, Austria,
|
||||
.Sh AUTHORS
|
||||
.An William Joy .
|
||||
.Pp
|
||||
Job control and directory stack features first implemented by
|
||||
.An J.E. Kulp
|
||||
of IIASA, Laxenburg, Austria,
|
||||
with different syntax than that used now.
|
||||
File name completion code written by Ken Greer, HP Labs.
|
||||
Eight-bit implementation Christos S. Zoulas, Cornell University.
|
||||
.Pp
|
||||
File name completion code written by
|
||||
.An Ken Greer ,
|
||||
HP Labs.
|
||||
.Pp
|
||||
Eight-bit implementation
|
||||
.An Christos S. Zoulas ,
|
||||
Cornell University.
|
||||
.Sh FILES
|
||||
.Bl -tag -width /etc/passwd -compact
|
||||
.It Pa ~/.cshrc
|
||||
Read at beginning of execution by each shell.
|
||||
read at beginning of execution by each shell.
|
||||
.It Pa ~/.login
|
||||
Read by login shell, after `.cshrc' at login.
|
||||
read by login shell, after `.cshrc' at login.
|
||||
.It Pa ~/.logout
|
||||
Read by login shell, at logout.
|
||||
read by login shell, at logout.
|
||||
.It Pa /bin/sh
|
||||
Standard shell, for shell scripts not starting with a `#'.
|
||||
standard shell, for shell scripts not starting with a `#'.
|
||||
.It Pa /tmp/sh*
|
||||
Temporary file for `<<'.
|
||||
temporary file for `<<'.
|
||||
.It Pa /etc/passwd
|
||||
Source of home directories for `~name'.
|
||||
source of home directories for `~name'.
|
||||
.El
|
||||
.Sh LIMITATIONS
|
||||
Word lengths \-
|
||||
|
||||
+6
-6
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: csh.c,v 1.6.2.1 1997/08/24 21:41:29 jkh Exp $
|
||||
* $Id: csh.c,v 1.6.2.2 1998/01/31 17:06:13 joerg Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -525,7 +525,7 @@ notty:
|
||||
{
|
||||
int osetintr = setintr;
|
||||
sig_t oparintr = parintr;
|
||||
sigset_t omask = sigblock(sigmask(SIGINT));
|
||||
int omask = sigblock(sigmask(SIGINT));
|
||||
|
||||
setintr = 0;
|
||||
parintr = SIG_IGN; /* Disable onintr */
|
||||
@@ -696,7 +696,7 @@ srcunit(unit, onlyown, hflg)
|
||||
bool otell = cantell;
|
||||
|
||||
struct Bin saveB;
|
||||
volatile sigset_t omask;
|
||||
volatile int omask;
|
||||
jmp_buf oldexit;
|
||||
|
||||
/* The (few) real local variables */
|
||||
@@ -932,9 +932,9 @@ pintr1(wantnl)
|
||||
bool wantnl;
|
||||
{
|
||||
Char **v;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
omask = sigblock((sigset_t) 0);
|
||||
omask = sigblock(0);
|
||||
if (setintr) {
|
||||
(void) sigsetmask(omask & ~sigmask(SIGINT));
|
||||
if (pjobs) {
|
||||
@@ -1004,7 +1004,7 @@ process(catch)
|
||||
* Interruptible during interactive reads
|
||||
*/
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
|
||||
/*
|
||||
* For the sake of reset()
|
||||
|
||||
+3
-5
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: dir.c,v 1.4 1995/06/18 14:34:48 ache Exp $
|
||||
* $Id: dir.c,v 1.4.2.1 1997/08/24 21:41:30 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -702,8 +702,7 @@ dcanon(cp, p)
|
||||
*/
|
||||
*--sp = 0; /* form the pathname for readlink */
|
||||
if (sp != cp && !adrof(STRignore_symlinks) &&
|
||||
(cc = readlink(short2str(cp), tlink,
|
||||
sizeof tlink)) >= 0) {
|
||||
(cc = readlink(short2str(cp), tlink, sizeof(tlink) - 1)) >= 0) {
|
||||
(void) Strcpy(link, str2short(tlink));
|
||||
link[cc] = '\0';
|
||||
|
||||
@@ -787,8 +786,7 @@ dcanon(cp, p)
|
||||
|
||||
if (sp != cp && adrof(STRchase_symlinks) &&
|
||||
!adrof(STRignore_symlinks) &&
|
||||
(cc = readlink(short2str(cp), tlink,
|
||||
sizeof tlink)) >= 0) {
|
||||
(cc = readlink(short2str(cp), tlink, sizeof(tlink) - 1)) >= 0) {
|
||||
(void) Strcpy(link, str2short(tlink));
|
||||
link[cc] = '\0';
|
||||
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: exec.c,v 1.4 1995/06/18 14:20:16 ache Exp $
|
||||
* $Id: exec.c,v 1.4.2.1 1997/08/24 21:41:31 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -193,7 +193,7 @@ doexec(v, t)
|
||||
* We must do this AFTER any possible forking (like `foo` in glob) so that
|
||||
* this shell can still do subprocesses.
|
||||
*/
|
||||
(void) sigsetmask((sigset_t) 0);
|
||||
(void) sigsetmask(0);
|
||||
/*
|
||||
* If no path, no words in path, or a / in the filename then restrict the
|
||||
* command search.
|
||||
|
||||
+5
-5
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: func.c,v 1.5 1996/08/11 23:10:38 ache Exp $
|
||||
* $Id: func.c,v 1.5.2.1 1997/08/24 21:41:33 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -507,7 +507,7 @@ preread()
|
||||
{
|
||||
whyles->w_end.type = I_SEEK;
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
|
||||
search(T_BREAK, 0, NULL); /* read the expression in */
|
||||
if (setintr)
|
||||
@@ -565,7 +565,7 @@ dorepeat(v, kp)
|
||||
struct command *kp;
|
||||
{
|
||||
int i;
|
||||
sigset_t omask = 0;
|
||||
int omask = 0;
|
||||
|
||||
i = getn(v[1]);
|
||||
if (setintr)
|
||||
@@ -907,7 +907,7 @@ xecho(sep, v)
|
||||
int nonl = 0;
|
||||
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
v++;
|
||||
if (*v == 0)
|
||||
return;
|
||||
@@ -955,7 +955,7 @@ dosetenv(v, t)
|
||||
Char **ep;
|
||||
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
for (ep = STR_environ; *ep; ep++)
|
||||
(void) fprintf(cshout, "%s\n", vis_str(*ep));
|
||||
return;
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: hist.c,v 1.2 1994/09/24 02:54:06 davidg Exp $
|
||||
* $Id: hist.c,v 1.2.8.1 1997/08/24 21:41:34 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -127,7 +127,7 @@ dohist(v, t)
|
||||
if (getn(value(STRhistory)) == 0)
|
||||
return;
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
while (*++v && **v == '-') {
|
||||
Char *vp = *v;
|
||||
|
||||
|
||||
+10
-10
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: proc.c,v 1.2.8.1 1997/08/24 21:41:37 jkh Exp $
|
||||
* $Id: proc.c,v 1.2.8.2 1998/01/31 17:06:15 joerg Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -205,7 +205,7 @@ pnote()
|
||||
{
|
||||
struct process *pp;
|
||||
int flags;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
neednote = 0;
|
||||
for (pp = proclist.p_next; pp != NULL; pp = pp->p_next) {
|
||||
@@ -228,7 +228,7 @@ void
|
||||
pwait()
|
||||
{
|
||||
struct process *fp, *pp;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
/*
|
||||
* Here's where dead procs get flushed.
|
||||
@@ -259,7 +259,7 @@ pjwait(pp)
|
||||
{
|
||||
struct process *fp;
|
||||
int jobflags, reason;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
while (pp->p_pid != pp->p_jobid)
|
||||
pp = pp->p_friends;
|
||||
@@ -348,7 +348,7 @@ dowait(v, t)
|
||||
struct command *t;
|
||||
{
|
||||
struct process *pp;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
pjobs++;
|
||||
omask = sigblock(sigmask(SIGCHLD));
|
||||
@@ -356,7 +356,7 @@ loop:
|
||||
for (pp = proclist.p_next; pp; pp = pp->p_next)
|
||||
if (pp->p_pid && /* pp->p_pid == pp->p_jobid && */
|
||||
pp->p_flags & PRUNNING) {
|
||||
(void) sigpause((sigset_t) 0);
|
||||
(void) sigpause(0);
|
||||
goto loop;
|
||||
}
|
||||
(void) sigsetmask(omask);
|
||||
@@ -1003,7 +1003,7 @@ pkill(v, signum)
|
||||
struct process *pp, *np;
|
||||
int jobflags = 0;
|
||||
int pid, err1 = 0;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
Char *cp;
|
||||
|
||||
omask = sigmask(SIGCHLD);
|
||||
@@ -1087,7 +1087,7 @@ pstart(pp, foregnd)
|
||||
int foregnd;
|
||||
{
|
||||
struct process *np;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
long jobflags = 0;
|
||||
|
||||
omask = sigblock(sigmask(SIGCHLD));
|
||||
@@ -1233,7 +1233,7 @@ pfork(t, wanttty)
|
||||
int pid;
|
||||
bool ignint = 0;
|
||||
int pgrp;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
/*
|
||||
* A child will be uninterruptible only under very special conditions.
|
||||
@@ -1330,7 +1330,7 @@ void
|
||||
pgetty(wanttty, pgrp)
|
||||
int wanttty, pgrp;
|
||||
{
|
||||
sigset_t omask = 0;
|
||||
int omask = 0;
|
||||
|
||||
/*
|
||||
* christos: I am blocking the tty signals till I've set things
|
||||
|
||||
+4
-4
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sem.c,v 1.3 1995/05/30 00:06:37 rgrimes Exp $
|
||||
* $Id: sem.c,v 1.3.6.1 1997/08/24 21:41:38 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -70,9 +70,9 @@ execute(t, wanttty, pipein, pipeout)
|
||||
int pid = 0;
|
||||
int pv[2];
|
||||
|
||||
static sigset_t csigmask;
|
||||
static int csigmask;
|
||||
|
||||
static sigset_t ocsigmask;
|
||||
static int ocsigmask;
|
||||
static int onosigchld = 0;
|
||||
static int nosigchld = 0;
|
||||
|
||||
@@ -226,7 +226,7 @@ execute(t, wanttty, pipein, pipeout)
|
||||
else {
|
||||
int ochild, osetintr, ohaderr, odidfds;
|
||||
int oSHIN, oSHOUT, oSHERR, oOLDSTD, otpgrp;
|
||||
sigset_t omask;
|
||||
int omask;
|
||||
|
||||
/*
|
||||
* Prepare for the vfork by saving everything that the child
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: set.c,v 1.4 1995/07/07 23:13:11 ache Exp $
|
||||
* $Id: set.c,v 1.4.2.1 1997/08/24 21:41:38 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -819,7 +819,7 @@ plist(p)
|
||||
int len;
|
||||
|
||||
if (setintr)
|
||||
(void) sigsetmask(sigblock((sigset_t) 0) & ~sigmask(SIGINT));
|
||||
(void) sigsetmask(sigblock(0) & ~sigmask(SIGINT));
|
||||
|
||||
for (;;) {
|
||||
while (p->v_left)
|
||||
|
||||
+15
-15
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)date.1 8.3 (Berkeley) 4/28/95
|
||||
.\" $Id: date.1,v 1.8.2.6 1997/10/03 12:54:28 danny Exp $
|
||||
.\" $Id: date.1,v 1.8.2.8 1998/06/30 06:42:44 charnier Exp $
|
||||
.\"
|
||||
.Dd November 17, 1993
|
||||
.Dt DATE 1
|
||||
@@ -52,7 +52,7 @@
|
||||
.Op Fl f Ar fmt Ar date | [[[[yy]mm]dd]HH]MM[\&.ss]
|
||||
.Op Cm + Ns Ar format
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
.Nm Date
|
||||
displays the current date and time when invoked without arguments.
|
||||
Providing arguments will format the date and time in a user-defined
|
||||
way or set the date.
|
||||
@@ -84,12 +84,12 @@ is used to synchronize the clocks on groups of machines.
|
||||
By default, if
|
||||
.Xr timed
|
||||
is running,
|
||||
.Nm date
|
||||
.Nm
|
||||
will set the time on all of the machines in the local group.
|
||||
The
|
||||
.Fl n
|
||||
option stops
|
||||
.Nm date
|
||||
.Nm
|
||||
from setting the time for other than the current machine.
|
||||
.It Fl r
|
||||
Print out the date and time in
|
||||
@@ -112,14 +112,14 @@ Adjust the minute, hour, month day, week day, month or year according to
|
||||
.Ar val .
|
||||
If
|
||||
.Ar val
|
||||
is preceeded with a plus or minus sign, the date is adjusted forwards
|
||||
is preceded with a plus or minus sign, the date is adjusted forwards
|
||||
or backwards according to the remaining string, otherwise the relevant
|
||||
part of the date is set. The date can be adjusted as many times as
|
||||
required using these flags. Flags are processed in the order given.
|
||||
.Pp
|
||||
Minutes are in the range 0-59, hours are in the range 1-12, month days
|
||||
are in the range 1-31, week days are in the range 0-6 (sun-sat), months
|
||||
are in the range 1-12 (jan-dec) and years are in the range 80-38 or
|
||||
are in the range 1-31, week days are in the range 0-6 (Sun-Sat), months
|
||||
are in the range 1-12 (Jan-Dec) and years are in the range 80-38 or
|
||||
1980-2038.
|
||||
.Pp
|
||||
If
|
||||
@@ -219,7 +219,7 @@ The command:
|
||||
date -v1d -v+1m -v-1d -v-fri
|
||||
.Ed
|
||||
.Pp
|
||||
will display the last friday of the month:
|
||||
will display the last Friday of the month:
|
||||
.Bd -literal -offset indent
|
||||
Fri Aug 29 04:31:11 BST 1997
|
||||
.Ed
|
||||
@@ -242,7 +242,7 @@ date 1432
|
||||
sets the time to
|
||||
.Li "2:32 PM" ,
|
||||
without modifying the date.
|
||||
.Sh ENVIRONMENT VARIABLES
|
||||
.Sh ENVIRONMENT
|
||||
The execution of
|
||||
.Nm
|
||||
is affected by the following environment variables:
|
||||
@@ -250,7 +250,7 @@ is affected by the following environment variables:
|
||||
.It Ev TZ
|
||||
The timezone to use when displaying dates.
|
||||
The normal format is a pathname relative to
|
||||
.Dq Pa /usr/share/zoneinfo .
|
||||
.Pa /usr/share/zoneinfo .
|
||||
For example, the command
|
||||
.Dq TZ=America/Los_Angeles date
|
||||
displays the current time in California.
|
||||
@@ -261,9 +261,9 @@ for more information.
|
||||
.Sh FILES
|
||||
.Bl -tag -width /var/log/messages -compact
|
||||
.It Pa /var/log/wtmp
|
||||
A record of date resets and time changes.
|
||||
a record of date resets and time changes
|
||||
.It Pa /var/log/messages
|
||||
A record of the user setting the time.
|
||||
a record of the user setting the time
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr gettimeofday 2 ,
|
||||
@@ -285,14 +285,14 @@ Occasionally, when
|
||||
synchronizes the time on many hosts, the setting of a new time value may
|
||||
require more than a few seconds.
|
||||
On these occasions,
|
||||
.Nm date
|
||||
.Nm
|
||||
prints:
|
||||
.Ql Network time being set .
|
||||
The message
|
||||
.Ql Communication error with timed
|
||||
occurs when the communication
|
||||
between
|
||||
.Nm date
|
||||
.Nm
|
||||
and
|
||||
.Xr timed
|
||||
fails.
|
||||
@@ -313,7 +313,7 @@ will be running on
|
||||
.Tn GMT .
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm date
|
||||
.Nm
|
||||
command is expected to be compatible with
|
||||
.St -p1003.2 .
|
||||
.Sh HISTORY
|
||||
|
||||
+9
-9
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)dd.1 8.2 (Berkeley) 1/13/94
|
||||
.\" $Id: dd.1,v 1.2.8.2 1997/08/24 21:45:30 jkh Exp $
|
||||
.\" $Id: dd.1,v 1.2.8.3 1998/02/15 11:04:28 jkh Exp $
|
||||
.\"
|
||||
.Dd January 13, 1994
|
||||
.Dt DD 1
|
||||
@@ -52,7 +52,7 @@ Input data is read and written in 512-byte blocks.
|
||||
If input reads are short, input from multiple reads are aggregated
|
||||
to form the output block.
|
||||
When finished,
|
||||
.Nm dd
|
||||
.Nm
|
||||
displays the number of complete and partial input and output blocks
|
||||
and truncated input records to the standard error output.
|
||||
.Pp
|
||||
@@ -237,7 +237,7 @@ will be positioned past the block in which the error occurred using
|
||||
Do not truncate the output file.
|
||||
This will preserve any blocks in the output file not explicitly written
|
||||
by
|
||||
.Nm dd .
|
||||
.Nm Ns .
|
||||
The
|
||||
.Cm notrunc
|
||||
value is not supported for tapes.
|
||||
@@ -287,7 +287,7 @@ in an integer, respectively.
|
||||
Two or more numbers may be separated by an ``x'' to indicate a product.
|
||||
.Pp
|
||||
When finished,
|
||||
.Nm dd
|
||||
.Nm
|
||||
displays the number of complete and partial input and output blocks,
|
||||
truncated input records and odd-length byte-swapping blocks to the
|
||||
standard error output.
|
||||
@@ -310,7 +310,7 @@ This means that the final output block may be shorter than the output
|
||||
block size.
|
||||
.Pp
|
||||
If
|
||||
.Nm dd
|
||||
.Nm
|
||||
receives a
|
||||
.Dv SIGINFO
|
||||
(see the ``status'' argument for
|
||||
@@ -319,17 +319,17 @@ signal, the current input and output block counts will
|
||||
be written to the standard error output
|
||||
in the same format as the standard completion message.
|
||||
If
|
||||
.Nm dd
|
||||
.Nm
|
||||
receives a
|
||||
.Dv SIGINT
|
||||
signal, the current input and output block counts will
|
||||
be written to the standard error output
|
||||
in the same format as the standard completion message and
|
||||
.Nm dd
|
||||
.Nm
|
||||
will exit.
|
||||
.Pp
|
||||
The
|
||||
.Nm dd
|
||||
.Nm
|
||||
utility exits 0 on success and >0 if an error occurred.
|
||||
.Sh SEE ALSO
|
||||
.Xr cp 1 ,
|
||||
@@ -337,7 +337,7 @@ utility exits 0 on success and >0 if an error occurred.
|
||||
.Xr tr 1
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm dd
|
||||
.Nm
|
||||
utility is expected to be a superset of the
|
||||
.St -p1003.2
|
||||
standard.
|
||||
|
||||
+5
-4
@@ -34,7 +34,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: misc.c,v 1.2.8.3 1998/02/11 02:24:41 asami Exp $
|
||||
* $Id: misc.c,v 1.2.8.4 1998/02/15 11:04:30 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -100,9 +100,10 @@ summaryx(notused)
|
||||
|
||||
/* ARGSUSED */
|
||||
void
|
||||
terminate(notused)
|
||||
int notused;
|
||||
terminate(sig)
|
||||
int sig;
|
||||
{
|
||||
|
||||
exit(0);
|
||||
/* XXX exit() shouldn't call exit() from a signal handler. */
|
||||
exit(sig == 0 ? 0 : 1);
|
||||
}
|
||||
+32
-25
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)df.1 8.2 (Berkeley) 1/13/94
|
||||
.\" $Id: df.1,v 1.4.2.2 1997/09/19 06:18:10 charnier Exp $
|
||||
.\" $Id: df.1,v 1.4.2.3 1998/02/15 11:06:23 jkh Exp $
|
||||
.\"
|
||||
.Dd January 13, 1994
|
||||
.Dt DF 1
|
||||
@@ -40,7 +40,7 @@
|
||||
.Nd display free disk space
|
||||
.Sh SYNOPSIS
|
||||
.Nm df
|
||||
.Op Fl ink
|
||||
.Op Fl ikn
|
||||
.Op Fl t Ar type
|
||||
.Op Ar file | Ar filesystem ...
|
||||
.Sh DESCRIPTION
|
||||
@@ -72,31 +72,37 @@ This option should be used if it is possible that one or more
|
||||
filesystems are in a state such that they will not be able to provide
|
||||
statistics without a long delay.
|
||||
When this option is specified,
|
||||
.Nm df
|
||||
.Nm
|
||||
will not request new statistics from the filesystems, but will respond
|
||||
with the possibly stale statistics that were previously obtained.
|
||||
.It Fl t
|
||||
Only print out statistics for filesystems of the specified types.
|
||||
The recognized types are:
|
||||
ufs, nfs, mfs, lfs, msdos, fdesc, portal, kernfs, procfs, afs, isofs,
|
||||
iso9660fs, cdfs, and cd9660,
|
||||
along with the aggregates:
|
||||
all (the default),
|
||||
local (ufs, mfs, lfs, msdos, cd9660),
|
||||
and misc (fdesc, portal, kernfs, procfs).
|
||||
The names isofs, iso9660fs, cdfs, and cd9660 are aliases to each other
|
||||
all of them refering to the same type of file system.
|
||||
The string ``no'' may be prepending to a type to get its complement
|
||||
(e.g. ``nonfs'' to get non-NFS filesystems). The first
|
||||
.Fl t
|
||||
option overrides the default, additional such options will add to
|
||||
(or subtract from) the current set of types; e.g. either
|
||||
``df -t ufs -t lfs''
|
||||
or
|
||||
``df -t local -t nomfs''
|
||||
will display statistics for UFS and LFS filesystems.
|
||||
More than one type may be specified in a comma separated list.
|
||||
The list of filesystem types can be prefixed with
|
||||
.Dq no
|
||||
to specify the filesystem types for which action should
|
||||
.Em not
|
||||
be taken.
|
||||
For example, the
|
||||
.Nm
|
||||
command:
|
||||
.Bd -literal -offset indent
|
||||
df -t nonfs,mfs
|
||||
.Ed
|
||||
.Pp
|
||||
lists all filesystems except those of type
|
||||
.Tn NFS
|
||||
and
|
||||
.Tn MFS .
|
||||
The
|
||||
.Xr sysctl 8
|
||||
command can be used to find out the types of filesystems
|
||||
that are available on the system:
|
||||
.Bd -literal -offset indent
|
||||
sysctl vfs
|
||||
.Ed
|
||||
.El
|
||||
.Sh ENVIRONMENT VARIABLES
|
||||
.Sh ENVIRONMENT
|
||||
.Bl -tag -width BLOCKSIZE
|
||||
.It Ev BLOCKSIZE
|
||||
If the environment variable
|
||||
@@ -111,15 +117,16 @@ and
|
||||
flags are ignored if a file or filesystem is specified.
|
||||
.Sh SEE ALSO
|
||||
.Xr quota 1 ,
|
||||
.Xr statfs 2 ,
|
||||
.Xr fstatfs 2 ,
|
||||
.Xr getfsstat 2 ,
|
||||
.Xr statfs 2 ,
|
||||
.Xr getmntinfo 3 ,
|
||||
.Xr fstab 5 ,
|
||||
.Xr mount 8 ,
|
||||
.Xr quot 8
|
||||
.Xr quot 8 ,
|
||||
.Xr sysctl 8
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm df
|
||||
.Nm
|
||||
command appeared in
|
||||
.At v1 .
|
||||
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" From: @(#)hostname.1 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: domainname.1,v 1.2 1995/01/14 17:02:33 ats Exp $
|
||||
.\" $Id: domainname.1,v 1.2.6.1 1997/08/24 21:48:26 jkh Exp $
|
||||
.\"
|
||||
.Dd September 18, 1994
|
||||
.Dt DOMAINNAME 1
|
||||
@@ -42,7 +42,7 @@
|
||||
.Nm domainname
|
||||
.Op Ar ypdomain
|
||||
.Sh DESCRIPTION
|
||||
.Nm domainname
|
||||
.Nm Domainname
|
||||
prints the name of the current YP/NIS domain. The super-user can
|
||||
set the domain name by supplying an argument; this is usually done in the
|
||||
network initialization script
|
||||
|
||||
+4
-4
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)echo.1 8.1 (Berkeley) 7/22/93
|
||||
.\" $Id: echo.1,v 1.2 1994/09/24 02:55:17 davidg Exp $
|
||||
.\" $Id: echo.1,v 1.3 1995/08/31 17:25:54 jkh Exp $
|
||||
.\"
|
||||
.Dd July 22, 1993
|
||||
.Dt ECHO 1
|
||||
@@ -47,7 +47,7 @@
|
||||
.Op "string ..."
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm echo
|
||||
.Nm
|
||||
utility writes any specified operands, separated by single blank (`` '')
|
||||
characters and followed by a newline (``\en'') character, to the standard
|
||||
output.
|
||||
@@ -61,13 +61,13 @@ by iBCS2 compatible systems.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm echo
|
||||
.Nm
|
||||
utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh SEE ALSO
|
||||
.Xr printf 1
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm echo
|
||||
.Nm
|
||||
utility is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
# $Id: Makefile,v 1.12 1995/10/03 15:44:50 markm Exp $
|
||||
# $Id: Makefile,v 1.13 1995/10/22 20:14:13 ache Exp $
|
||||
|
||||
PROG= ed
|
||||
SRCS= buf.c cbc.c glbl.c io.c main.c re.c sub.c undo.c
|
||||
LINKS= ${BINDIR}/ed ${BINDIR}/red
|
||||
MLINKS= ed.1 red.1
|
||||
LINKS= ${BINDIR}/ed ${BINDIR}/red
|
||||
MLINKS= ed.1 red.1
|
||||
|
||||
.if exists(../../secure) && !defined(NOCRYPT) && !defined(NOSECURE)
|
||||
.if exists(${.CURDIR}/../../secure) && !defined(NOCRYPT) && !defined(NOSECURE)
|
||||
DISTRIBUTION=des
|
||||
CFLAGS+=-DDES
|
||||
LDADD+= -L${CIPHEROBJDIR} -lcipher
|
||||
|
||||
+439
-547
File diff suppressed because it is too large.
Load diff
+4
-10
@@ -1,13 +1,7 @@
|
||||
# /b/source/CVS/src/bin/expr/Makefile,v 1.5 1993/06/14 19:56:06 jtc Exp
|
||||
# $Id: Makefile,v 1.8 1996/05/07 23:14:17 wosch Exp $
|
||||
# $Id: Makefile,v 1.10 1996/06/02 17:05:48 phk Exp $
|
||||
|
||||
PROG= expr
|
||||
SRCS= expr.c
|
||||
CLEANFILES+= expr.c y.tab.h
|
||||
|
||||
expr.c:
|
||||
${YACC} -d ${.IMPSRC}
|
||||
mv -f y.tab.c expr.c
|
||||
PROG= expr
|
||||
SRCS= expr.y
|
||||
YFLAGS=
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
||||
+11
-11
@@ -28,7 +28,7 @@
|
||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $Id: expr.1,v 1.3 1994/04/24 01:18:46 jkh Exp $
|
||||
.\" $Id: expr.1,v 1.4 1996/01/29 22:53:24 mpp Exp $
|
||||
.\"
|
||||
.Dd July 3, 1993
|
||||
.Dt EXPR 1
|
||||
@@ -41,13 +41,13 @@
|
||||
.Ar expression
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm expr
|
||||
.Nm
|
||||
utility evaluates
|
||||
.Ar expression
|
||||
and writes the result on standard output.
|
||||
.Pp
|
||||
All operators are separate arguments to the
|
||||
.Nm expr
|
||||
.Nm
|
||||
utility.
|
||||
Characters special to the command interpreter must be escaped.
|
||||
.Pp
|
||||
@@ -55,26 +55,26 @@ Operators are listed below in order of increasing precedence.
|
||||
Operators with equal precedence are grouped within { } symbols.
|
||||
.Bl -tag -width indent
|
||||
.It Ar expr1 Li | Ar expr2
|
||||
Returns the evaluation of
|
||||
Return the evaluation of
|
||||
.Ar expr1
|
||||
if it is neither an empty string nor zero;
|
||||
otherwise, returns the evaluation of
|
||||
.Ar expr2 .
|
||||
.It Ar expr1 Li & Ar expr2
|
||||
Returns the evaluation of
|
||||
Return the evaluation of
|
||||
.Ar expr1
|
||||
if neither expression evaluates to an empty string or zero;
|
||||
otherwise, returns zero.
|
||||
.It Ar expr1 Li "{=, >, >=, <, <=, !=}" Ar expr2
|
||||
Returns the results of integer comparison if both arguments are integers;
|
||||
Return the results of integer comparison if both arguments are integers;
|
||||
otherwise, returns the results of string comparison using the locale-specific
|
||||
collation sequence.
|
||||
The result of each comparison is 1 if the specified relation is true,
|
||||
or 0 if the relation is false.
|
||||
.It Ar expr1 Li "{+, -}" Ar expr2
|
||||
Returns the results of addition or subtraction of integer-valued arguments.
|
||||
Return the results of addition or subtraction of integer-valued arguments.
|
||||
.It Ar expr1 Li "{*, /, %}" Ar expr2
|
||||
Returns the results of multiplication, integer division, or remainder of integer-valued arguments.
|
||||
Return the results of multiplication, integer division, or remainder of integer-valued arguments.
|
||||
.It Ar expr1 Li : Ar expr2
|
||||
The
|
||||
.Dq \:
|
||||
@@ -115,9 +115,9 @@ The following example returns the number of characters in variable a.
|
||||
.El
|
||||
.Sh DIAGNOSTICS
|
||||
The
|
||||
.Nm expr
|
||||
.Nm
|
||||
utility exits with one of the following values:
|
||||
.Bl -tag -width Ds -compact
|
||||
.Bl -tag -width indent -compact
|
||||
.It 0
|
||||
the expression is neither an empty string nor 0.
|
||||
.It 1
|
||||
@@ -127,6 +127,6 @@ the expression is invalid.
|
||||
.El
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm expr
|
||||
.Nm
|
||||
utility conforms to
|
||||
.St -p1003.2 .
|
||||
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)hostname.1 8.2 (Berkeley) 4/28/95
|
||||
.\" $Id: hostname.1,v 1.3.2.1 1997/02/28 07:54:36 mpp Exp $
|
||||
.\" $Id: hostname.1,v 1.3.2.3 1998/06/30 06:43:13 charnier Exp $
|
||||
.\"
|
||||
.Dd April 28, 1995
|
||||
.Dt HOSTNAME 1
|
||||
@@ -43,7 +43,7 @@
|
||||
.Op Fl s
|
||||
.Op Ar name-of-host
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
.Nm Hostname
|
||||
prints the name of the current host. The super-user can
|
||||
set the hostname by supplying an argument; this is usually done in the
|
||||
network initialization script
|
||||
@@ -54,13 +54,13 @@ time.
|
||||
Options:
|
||||
.Bl -tag -width flag
|
||||
.It Fl s
|
||||
Trims off any domain information from the printed
|
||||
Trim off any domain information from the printed
|
||||
name.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr gethostname 3
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm hostname
|
||||
.Nm
|
||||
command appeared in
|
||||
.Bx 4.2 .
|
||||
+6
-6
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)kill.1 8.2 (Berkeley) 4/28/95
|
||||
.\" $Id$
|
||||
.\" $Id: kill.1,v 1.3.2.2 1998/05/22 10:50:26 jkoshy Exp $
|
||||
.\"
|
||||
.Dd April 28, 1995
|
||||
.Dt KILL 1
|
||||
@@ -110,22 +110,22 @@ ALRM (alarm clock)
|
||||
TERM (software termination signal)
|
||||
.El
|
||||
.Pp
|
||||
.Nm
|
||||
.Nm Kill
|
||||
is a built-in to
|
||||
.Xr csh 1 ;
|
||||
it allows job specifiers of the form ``%...'' as arguments
|
||||
so process id's are not as often used as
|
||||
.Nm kill
|
||||
.Nm
|
||||
arguments.
|
||||
See
|
||||
.Xr csh 1
|
||||
.Xr csh 1
|
||||
for details.
|
||||
.Sh SEE ALSO
|
||||
.Xr csh 1 ,
|
||||
.Xr killall 1 ,
|
||||
.Xr ps 1 ,
|
||||
.Xr kill 2 ,
|
||||
.Xr sigvec 2
|
||||
.Xr sigaction 2
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm
|
||||
@@ -134,7 +134,7 @@ function is expected to be
|
||||
compatible.
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm kill
|
||||
.Nm
|
||||
command appeared in
|
||||
.At v6 .
|
||||
.Sh BUGS
|
||||
|
||||
+6
-6
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)ln.1 8.2 (Berkeley) 12/30/93
|
||||
.\" $Id: ln.1,v 1.2 1994/09/24 02:55:47 davidg Exp $
|
||||
.\" $Id: ln.1,v 1.3 1996/08/29 18:05:55 wosch Exp $
|
||||
.\"
|
||||
.Dd December 30, 1993
|
||||
.Dt LN 1
|
||||
@@ -52,7 +52,7 @@
|
||||
.Op target_dir
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm ln
|
||||
.Nm
|
||||
utility creates a new directory entry (linked file) which has the
|
||||
same modes as the original file.
|
||||
It is useful for maintaining multiple copies of a file in many places
|
||||
@@ -75,7 +75,7 @@ Create a symbolic link.
|
||||
.El
|
||||
.Pp
|
||||
By default
|
||||
.Nm ln
|
||||
.Nm
|
||||
makes
|
||||
.Em hard
|
||||
links.
|
||||
@@ -99,7 +99,7 @@ call may be used to read the contents of a symbolic link.
|
||||
Symbolic links may span file systems and may refer to directories.
|
||||
.Pp
|
||||
Given one or two arguments,
|
||||
.Nm ln
|
||||
.Nm
|
||||
creates a link to an existing file
|
||||
.Ar source_file .
|
||||
If
|
||||
@@ -113,7 +113,7 @@ to the last component of
|
||||
.Ar source_file .
|
||||
.Pp
|
||||
Given more than two arguments,
|
||||
.Nm ln
|
||||
.Nm
|
||||
makes links in
|
||||
.Ar target_dir
|
||||
to all the named source files.
|
||||
@@ -127,6 +127,6 @@ The links made will have the same name as the files being linked to.
|
||||
.Xr symlink 7
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm ln
|
||||
.Nm
|
||||
command appeared in
|
||||
.At v1 .
|
||||
+15
-20
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)symlink.7 8.3 (Berkeley) 3/31/94
|
||||
.\" $Id: symlink.7,v 1.2.8.1 1997/06/14 18:47:31 jdp Exp $
|
||||
.\" $Id: symlink.7,v 1.2.8.2 1997/06/19 01:09:09 jdp Exp $
|
||||
.\"
|
||||
.Dd March 31, 1994
|
||||
.Dt SYMLINK 7
|
||||
@@ -200,6 +200,8 @@ option is not specified),
|
||||
the
|
||||
.Nm ls
|
||||
command follows symbolic links named as arguments if the
|
||||
.Fl H
|
||||
or
|
||||
.Fl L
|
||||
option is specified,
|
||||
or if the
|
||||
@@ -207,16 +209,13 @@ or if the
|
||||
.Fl d
|
||||
or
|
||||
.Fl l
|
||||
options are not specified.
|
||||
(If the
|
||||
.Fl L
|
||||
option is specified,
|
||||
options are not specified. (The
|
||||
.Nm ls
|
||||
always follows symbolic links.
|
||||
.Nm Ls
|
||||
is the only command where the
|
||||
command is the only command where the
|
||||
.Fl H
|
||||
and
|
||||
.Fl L
|
||||
option affects its behavior even though it is not doing a walk of
|
||||
options affect its behavior even though it is not doing a walk of
|
||||
a file tree.)
|
||||
.Pp
|
||||
The
|
||||
@@ -394,23 +393,19 @@ options.
|
||||
To maintain compatibility with historic systems,
|
||||
the
|
||||
.Nm ls
|
||||
command never follows symbolic links unless the
|
||||
.Fl L
|
||||
flag is specified.
|
||||
If the
|
||||
command acts a little differently. If you do not specify the
|
||||
.Fl F ,
|
||||
.Fl d or
|
||||
.Fl l
|
||||
options,
|
||||
.Nm ls
|
||||
will follow symbolic links specified on the command line. If the
|
||||
.Fl L
|
||||
flag is specified,
|
||||
.Nm ls
|
||||
follows all symbolic links,
|
||||
regardless of their type,
|
||||
whether specified on the command line or encountered in the tree walk.
|
||||
The
|
||||
.Nm ls
|
||||
command does not support the
|
||||
.Fl H
|
||||
or
|
||||
.Fl P
|
||||
options.
|
||||
.Sh SEE ALSO
|
||||
.Xr chflags 1 ,
|
||||
.Xr chgrp 1 ,
|
||||
|
||||
+3
-1
@@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)extern.h 8.1 (Berkeley) 5/31/93
|
||||
* $Id$
|
||||
* $Id: extern.h,v 1.2 1994/09/24 02:55:52 davidg Exp $
|
||||
*/
|
||||
|
||||
int acccmp __P((const FTSENT *, const FTSENT *));
|
||||
@@ -49,3 +49,5 @@ void printcol __P((DISPLAY *));
|
||||
void printlong __P((DISPLAY *));
|
||||
void printscol __P((DISPLAY *));
|
||||
void usage __P((void));
|
||||
int len_octal __P((char *, int));
|
||||
int prn_octal __P((char *));
|
||||
+76
-21
@@ -13,7 +13,7 @@
|
||||
.\" 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:
|
||||
.\" must display the following acknowledgment:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)ls.1 8.6 (Berkeley) 4/18/94
|
||||
.\" $Id: ls.1,v 1.5.2.4 1997/09/19 06:18:11 charnier Exp $
|
||||
.\" $Id: ls.1,v 1.5.2.5 1997/12/25 09:35:55 hoek Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt LS 1
|
||||
@@ -43,20 +43,20 @@
|
||||
.Nd list directory contents
|
||||
.Sh SYNOPSIS
|
||||
.Nm ls
|
||||
.Op Fl ACFLRTacdfgikloqrstu1
|
||||
.Op Fl ABCFHLPRTWabcdfgikloqrstu1
|
||||
.Op Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
For each operand that names a
|
||||
.Ar file
|
||||
of a type other than
|
||||
directory,
|
||||
.Nm ls
|
||||
.Nm
|
||||
displays its name as well as any requested,
|
||||
associated information.
|
||||
For each operand that names a
|
||||
.Ar file
|
||||
of type directory,
|
||||
.Nm ls
|
||||
.Nm
|
||||
displays the names of files contained
|
||||
within that directory, as well as any requested, associated
|
||||
information.
|
||||
@@ -76,6 +76,9 @@ List all entries except for
|
||||
and
|
||||
.Ql \&.. .
|
||||
Always set for the super-user.
|
||||
.It Fl B
|
||||
Force printing of non-graphic characters in file names as \\xxx,
|
||||
where xxx is the numeric value of the character in octal.
|
||||
.It Fl C
|
||||
Force multi-column output; this is the default when output is to a terminal.
|
||||
.It Fl F
|
||||
@@ -84,24 +87,47 @@ that is a directory, an asterisk (*) after each that is
|
||||
executable,
|
||||
an at sign (@) after each symbolic link,
|
||||
an equals sign (=) after each socket,
|
||||
a percent sign (%) after each whiteout,
|
||||
and a vertical bar (|) after each that is a
|
||||
.Tn FIFO .
|
||||
.Tn FIFO .
|
||||
.It Fl H
|
||||
Symbolic links on the command line are followed. This option is assumed if
|
||||
none of the
|
||||
.Fl F ,
|
||||
.Fl d ,
|
||||
or
|
||||
.Fl l
|
||||
options are specified.
|
||||
.It Fl L
|
||||
If argument is a symbolic link, list the file or directory the link references
|
||||
rather than the link itself.
|
||||
rather than the link itself. This option cancels the
|
||||
.Fl P
|
||||
option.
|
||||
.It Fl P
|
||||
If argument is a symbolic link, list the link itself rather than the
|
||||
object the link references. This option cancels the
|
||||
.Fl H
|
||||
and
|
||||
.Fl L
|
||||
options.
|
||||
.It Fl R
|
||||
Recursively list subdirectories encountered.
|
||||
.It Fl T
|
||||
Display complete time information for the file, including
|
||||
month, day, hour, minute, second, and year.
|
||||
.It Fl W
|
||||
Display whiteouts when scanning directories.
|
||||
.It Fl a
|
||||
Include directory entries whose names begin with a
|
||||
dot (.).
|
||||
.It Fl b
|
||||
As
|
||||
.Fl B ,
|
||||
but use C escape codes whenever possible.
|
||||
.It Fl c
|
||||
Use time when file status was last changed for sorting or printing.
|
||||
.It Fl d
|
||||
Directories are listed as plain files (not searched recursively) and
|
||||
symbolic links in the argument list are not indirected through.
|
||||
Directories are listed as plain files (not searched recursively).
|
||||
.It Fl f
|
||||
Output is not sorted.
|
||||
.It Fl g
|
||||
@@ -114,8 +140,10 @@ format output.
|
||||
.It Fl i
|
||||
For each file, print the file's file serial number (inode number).
|
||||
.It Fl k
|
||||
If the 's' option is specified, print the file size allocation in kilobytes,
|
||||
not blocks.
|
||||
If the
|
||||
.Fl s
|
||||
option is specified, print the file size allocation in kilobytes,
|
||||
not blocks. This option overrides the environment variable BLOCKSIZE.
|
||||
.It Fl l
|
||||
(The lowercase letter ``ell.'') List in long format. (See below.)
|
||||
If the output is to a terminal, a total sum for all the file
|
||||
@@ -134,7 +162,8 @@ lexicographical order or the oldest entries first.
|
||||
Display the number of file system blocks actually used by each file, in units
|
||||
of 512 bytes, where partial units are rounded up to the next integer value.
|
||||
If the output is to a terminal, a total sum for all the file
|
||||
sizes is output on a line before the listing.
|
||||
sizes is output on a line before the listing. The environment variable
|
||||
BLOCKSIZE overrides the unit size of 512 bytes.
|
||||
.It Fl t
|
||||
Sort by time modified (most recently modified
|
||||
first) before sorting the operands by lexicographical
|
||||
@@ -162,14 +191,30 @@ options all override each other; the last one specified determines
|
||||
the format used.
|
||||
.Pp
|
||||
The
|
||||
.Fl c ,
|
||||
.Fl c
|
||||
and
|
||||
.Fl u
|
||||
options override each other; the last one specified determines
|
||||
the file time used.
|
||||
.Pp
|
||||
The
|
||||
.Fl B ,
|
||||
.Fl b
|
||||
and
|
||||
.Fl q
|
||||
options all override each other; the last one specified determines
|
||||
the format used for non-printable characters.
|
||||
.Pp
|
||||
The
|
||||
.Fl H,
|
||||
.Fl L
|
||||
and
|
||||
.Fl P
|
||||
options all override each other (either partially or fully); they
|
||||
are applied in the order specified.
|
||||
.Pp
|
||||
By default,
|
||||
.Nm ls
|
||||
.Nm
|
||||
lists one entry per line to standard
|
||||
output; the exceptions are to terminals or when the
|
||||
.Fl C
|
||||
@@ -198,6 +243,10 @@ number of 512-byte blocks used by the files in the directory is displayed
|
||||
on a line by itself immediately before the information for the files in the
|
||||
directory.
|
||||
.Pp
|
||||
If the modification time of the file is more than 6 months
|
||||
in the past or future, then the year of the last modification
|
||||
is displayed in place of the hour and minute fields.
|
||||
.Pp
|
||||
If the owner or group names are not a known user or group name
|
||||
the numeric ID's are displayed.
|
||||
.Pp
|
||||
@@ -207,7 +256,9 @@ in the size field. If the file is a symbolic link the pathname of the
|
||||
linked-to file is preceded by
|
||||
.Dq \-> .
|
||||
.Pp
|
||||
The file mode printed under the -l option consists of the
|
||||
The file mode printed under the
|
||||
.Fl l
|
||||
option consists of the
|
||||
entry type, owner permissions, and group permissions.
|
||||
The entry type character describes the type of file, as
|
||||
follows:
|
||||
@@ -292,11 +343,11 @@ or
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm ls
|
||||
.Nm
|
||||
utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh ENVIRONMENT VARIABLES
|
||||
.Sh ENVIRONMENT
|
||||
The following environment variables affect the execution of
|
||||
.Nm ls :
|
||||
.Nm Ns :
|
||||
.Bl -tag -width BLOCKSIZE
|
||||
.It Ev BLOCKSIZE
|
||||
If the environment variable
|
||||
@@ -311,7 +362,7 @@ decimal integer, it is used as the
|
||||
column position width for displaying
|
||||
multiple-text-column output.
|
||||
The
|
||||
.Nm ls
|
||||
.Nm
|
||||
utility calculates how
|
||||
many pathname text columns to display
|
||||
based on the width provided.
|
||||
@@ -334,12 +385,16 @@ specification.
|
||||
.Xr sticky 8
|
||||
.Sh HISTORY
|
||||
An
|
||||
.Nm ls
|
||||
.Nm
|
||||
command appeared in
|
||||
.At v1 .
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm ls
|
||||
.Nm
|
||||
function is expected to be a superset of the
|
||||
.St -p1003.2
|
||||
specification.
|
||||
.Sh BUGS
|
||||
To maintain backward compatibility, the relationships between the many
|
||||
options is quite complex.
|
||||
|
||||
+33
-13
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: ls.c,v 1.10 1996/08/27 21:51:48 adam Exp $
|
||||
* $Id: ls.c,v 1.10.2.1 1997/12/03 05:40:06 imp Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -82,16 +82,16 @@ int f_kblocks; /* print size in kilobytes */
|
||||
int f_listdir; /* list actual directory, not contents */
|
||||
int f_listdot; /* list files beginning with . */
|
||||
int f_longform; /* long listing format */
|
||||
int f_newline; /* if precede with newline */
|
||||
int f_nonprint; /* show unprintables as ? */
|
||||
int f_nosort; /* don't sort output */
|
||||
int f_octal; /* show unprintables as \xxx */
|
||||
int f_octal_escape; /* like f_octal but use C escapes if possible */
|
||||
int f_recursive; /* ls subdirectories also */
|
||||
int f_reversesort; /* reverse whatever sort is used */
|
||||
int f_sectime; /* print the real time for all files */
|
||||
int f_singlecol; /* use single column output */
|
||||
int f_size; /* list size in short listing */
|
||||
int f_statustime; /* use time of last mode change */
|
||||
int f_dirname; /* if precede with directory name */
|
||||
int f_timesort; /* sort by time vice name */
|
||||
int f_type; /* add type character for non-regular files */
|
||||
|
||||
@@ -131,7 +131,7 @@ main(argc, argv)
|
||||
f_listdot = 1;
|
||||
|
||||
fts_options = FTS_PHYSICAL;
|
||||
while ((ch = getopt(argc, argv, "1ACFLRTacdfgikloqrstu")) != -1) {
|
||||
while ((ch = getopt(argc, argv, "1ABCFHLPRTWabcdfgikloqrstu")) != -1) {
|
||||
switch (ch) {
|
||||
/*
|
||||
* The -1, -C and -l options all override each other so shell
|
||||
@@ -141,6 +141,11 @@ main(argc, argv)
|
||||
f_singlecol = 1;
|
||||
f_column = f_longform = 0;
|
||||
break;
|
||||
case 'B':
|
||||
f_nonprint = 0;
|
||||
f_octal = 1;
|
||||
f_octal_escape = 0;
|
||||
break;
|
||||
case 'C':
|
||||
f_column = 1;
|
||||
f_longform = f_singlecol = 0;
|
||||
@@ -161,10 +166,18 @@ main(argc, argv)
|
||||
case 'F':
|
||||
f_type = 1;
|
||||
break;
|
||||
case 'H':
|
||||
fts_options |= FTS_COMFOLLOW;
|
||||
break;
|
||||
case 'L':
|
||||
fts_options &= ~FTS_PHYSICAL;
|
||||
fts_options |= FTS_LOGICAL;
|
||||
break;
|
||||
case 'P':
|
||||
fts_options &= ~FTS_COMFOLLOW;
|
||||
fts_options &= ~FTS_LOGICAL;
|
||||
fts_options |= FTS_PHYSICAL;
|
||||
break;
|
||||
case 'R':
|
||||
f_recursive = 1;
|
||||
break;
|
||||
@@ -195,6 +208,8 @@ main(argc, argv)
|
||||
break;
|
||||
case 'q':
|
||||
f_nonprint = 1;
|
||||
f_octal = 0;
|
||||
f_octal_escape = 0;
|
||||
break;
|
||||
case 'r':
|
||||
f_reversesort = 1;
|
||||
@@ -208,6 +223,11 @@ main(argc, argv)
|
||||
case 't':
|
||||
f_timesort = 1;
|
||||
break;
|
||||
case 'b':
|
||||
f_nonprint = 0;
|
||||
f_octal = 0;
|
||||
f_octal_escape = 1;
|
||||
break;
|
||||
default:
|
||||
case '?':
|
||||
usage();
|
||||
@@ -411,6 +431,10 @@ display(p, list)
|
||||
prcopy(cur->fts_name, cur->fts_name, cur->fts_namelen);
|
||||
if (cur->fts_namelen > maxlen)
|
||||
maxlen = cur->fts_namelen;
|
||||
if (f_octal || f_octal_escape) {
|
||||
int t = len_octal(cur->fts_name, cur->fts_namelen);
|
||||
if (t > maxlen) maxlen = t;
|
||||
}
|
||||
if (needstats) {
|
||||
sp = cur->fts_statp;
|
||||
if (sp->st_blocks > maxblock)
|
||||
@@ -513,16 +537,12 @@ mastercmp(a, b)
|
||||
if (a_info == FTS_NS || b_info == FTS_NS)
|
||||
return (namecmp(*a, *b));
|
||||
|
||||
if (a_info == b_info)
|
||||
return (sortfcn(*a, *b));
|
||||
|
||||
if ((*a)->fts_level == FTS_ROOTLEVEL)
|
||||
if (a_info != b_info &&
|
||||
(*a)->fts_level == FTS_ROOTLEVEL && !f_listdir) {
|
||||
if (a_info == FTS_D)
|
||||
return (1);
|
||||
else if (b_info == FTS_D)
|
||||
if (b_info == FTS_D)
|
||||
return (-1);
|
||||
else
|
||||
return (sortfcn(*a, *b));
|
||||
else
|
||||
return (sortfcn(*a, *b));
|
||||
}
|
||||
return (sortfcn(*a, *b));
|
||||
}
|
||||
+4
-1
@@ -1,3 +1,4 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
@@ -34,7 +35,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ls.h 8.1 (Berkeley) 5/31/93
|
||||
* $Id$
|
||||
* $Id: ls.h,v 1.2 1994/09/24 02:55:55 davidg Exp $
|
||||
*/
|
||||
|
||||
#define NO_PRINT 1
|
||||
@@ -45,6 +46,8 @@ extern int f_accesstime; /* use time of last access */
|
||||
extern int f_flags; /* show flags associated with a file */
|
||||
extern int f_inode; /* print inode */
|
||||
extern int f_longform; /* long listing format */
|
||||
extern int f_octal; /* print unprintables in octal */
|
||||
extern int f_octal_escape; /* like f_octal but use C escapes if possible */
|
||||
extern int f_sectime; /* print the real time for all files */
|
||||
extern int f_size; /* list size in short listing */
|
||||
extern int f_statustime; /* use time of last mode change */
|
||||
|
||||
+17
-7
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: print.c,v 1.7 1995/12/30 18:15:30 joerg Exp $
|
||||
* $Id: print.c,v 1.8 1996/01/20 10:31:14 mpp Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -95,7 +95,7 @@ printlong(dp)
|
||||
continue;
|
||||
sp = p->fts_statp;
|
||||
if (f_inode)
|
||||
(void)printf("%*lu ", dp->s_inode, sp->st_ino);
|
||||
(void)printf("%*lu ", dp->s_inode, (u_long)sp->st_ino);
|
||||
if (f_size)
|
||||
(void)printf("%*qd ",
|
||||
dp->s_block, howmany(sp->st_blocks, blocksize));
|
||||
@@ -124,7 +124,8 @@ printlong(dp)
|
||||
printtime(sp->st_ctime);
|
||||
else
|
||||
printtime(sp->st_mtime);
|
||||
(void)printf("%s", p->fts_name);
|
||||
if (f_octal || f_octal_escape) (void)prn_octal(p->fts_name);
|
||||
else (void)printf("%s", p->fts_name);
|
||||
if (f_type)
|
||||
(void)printtype(sp->st_mode);
|
||||
if (S_ISLNK(sp->st_mode))
|
||||
@@ -215,11 +216,12 @@ printaname(p, inodefield, sizefield)
|
||||
sp = p->fts_statp;
|
||||
chcnt = 0;
|
||||
if (f_inode)
|
||||
chcnt += printf("%*lu ", (int)inodefield, sp->st_ino);
|
||||
chcnt += printf("%*lu ", (int)inodefield, (u_long)sp->st_ino);
|
||||
if (f_size)
|
||||
chcnt += printf("%*qd ",
|
||||
(int)sizefield, howmany(sp->st_blocks, blocksize));
|
||||
chcnt += printf("%s", p->fts_name);
|
||||
chcnt += (f_octal || f_octal_escape) ? prn_octal(p->fts_name)
|
||||
: printf("%s", p->fts_name);
|
||||
if (f_type)
|
||||
chcnt += printtype(sp->st_mode);
|
||||
return (chcnt);
|
||||
@@ -231,6 +233,10 @@ printtime(ftime)
|
||||
{
|
||||
int i;
|
||||
char longstring[80];
|
||||
static time_t now;
|
||||
|
||||
if (now == 0)
|
||||
now = time(NULL);
|
||||
|
||||
strftime(longstring, sizeof(longstring), "%c", localtime(&ftime));
|
||||
for (i = 4; i < 11; ++i)
|
||||
@@ -240,7 +246,7 @@ printtime(ftime)
|
||||
if (f_sectime)
|
||||
for (i = 11; i < 24; i++)
|
||||
(void)putchar(longstring[i]);
|
||||
else if (ftime + SIXMONTHS > time(NULL))
|
||||
else if (ftime + SIXMONTHS > now && ftime < now + SIXMONTHS)
|
||||
for (i = 11; i < 16; ++i)
|
||||
(void)putchar(longstring[i]);
|
||||
else {
|
||||
@@ -293,5 +299,9 @@ printlink(p)
|
||||
return;
|
||||
}
|
||||
path[lnklen] = '\0';
|
||||
(void)printf(" -> %s", path);
|
||||
if (f_octal || f_octal_escape) {
|
||||
(void)printf(" -> ");
|
||||
(void)prn_octal(path);
|
||||
}
|
||||
else (void)printf(" -> %s", path);
|
||||
}
|
||||
+89
-2
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: util.c,v 1.5 1996/03/31 16:14:11 ache Exp $
|
||||
* $Id: util.c,v 1.5.2.1 1997/03/26 17:55:19 obrien Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -65,9 +65,96 @@ prcopy(src, dest, len)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The fts system makes it difficult to replace fts_name with a different-
|
||||
* sized string, so we just calculate the real length here and do the
|
||||
* conversion in prn_octal()
|
||||
*
|
||||
* XXX when using f_octal_escape (-b) rather than f_octal (-B), the
|
||||
* length computed by len_octal may be too big. I just can't be buggered
|
||||
* to fix this as an efficient fix would involve a lookup table. Same goes
|
||||
* for the rather inelegant code in prn_octal.
|
||||
*
|
||||
* DES 1998/04/23
|
||||
*/
|
||||
|
||||
int
|
||||
len_octal(s, len)
|
||||
char *s;
|
||||
int len;
|
||||
{
|
||||
int r = 0;
|
||||
|
||||
while (len--)
|
||||
if (isprint((unsigned char)*s++)) r++; else r += 4;
|
||||
return r;
|
||||
}
|
||||
|
||||
int
|
||||
prn_octal(s)
|
||||
char *s;
|
||||
{
|
||||
unsigned char ch;
|
||||
int len = 0;
|
||||
|
||||
while ((ch = *s++))
|
||||
{
|
||||
if (isprint(ch) && (ch != '\"') && (ch != '\\'))
|
||||
putchar(ch), len++;
|
||||
else if (f_octal_escape) {
|
||||
putchar('\\');
|
||||
switch (ch) {
|
||||
case '\\':
|
||||
putchar('\\');
|
||||
break;
|
||||
case '\"':
|
||||
putchar('"');
|
||||
break;
|
||||
case '\a':
|
||||
putchar('a');
|
||||
break;
|
||||
case '\b':
|
||||
putchar('b');
|
||||
break;
|
||||
case '\f':
|
||||
putchar('f');
|
||||
break;
|
||||
case '\n':
|
||||
putchar('n');
|
||||
break;
|
||||
case '\r':
|
||||
putchar('r');
|
||||
break;
|
||||
case '\t':
|
||||
putchar('t');
|
||||
break;
|
||||
case '\v':
|
||||
putchar('v');
|
||||
break;
|
||||
default:
|
||||
putchar('0' + (ch >> 6));
|
||||
putchar('0' + ((ch >> 3) & 3));
|
||||
putchar('0' + (ch & 3));
|
||||
len += 2;
|
||||
break;
|
||||
}
|
||||
len += 2;
|
||||
}
|
||||
else {
|
||||
putchar('\\');
|
||||
putchar('0' + (ch >> 6));
|
||||
putchar('0' + ((ch >> 3) & 3));
|
||||
putchar('0' + (ch & 3));
|
||||
len += 4;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
void
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr, "usage: ls [-1ACFLRTacdfikloqrstu] [file ...]\n");
|
||||
(void)fprintf(stderr, "usage: ls [-ACFHLPRTWacdfgikloqrstu1]"
|
||||
" [file ...]\n");
|
||||
exit(1);
|
||||
}
|
||||
+4
-4
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)mkdir.1 8.2 (Berkeley) 1/25/94
|
||||
.\" $Id: mkdir.1,v 1.6 1997/02/22 14:04:08 peter Exp $
|
||||
.\" $Id: mkdir.1,v 1.3.2.2 1998/06/30 06:42:30 charnier Exp $
|
||||
.\"
|
||||
.Dd January 25, 1994
|
||||
.Dt MKDIR 1
|
||||
@@ -47,7 +47,7 @@
|
||||
.Op Fl m Ar mode
|
||||
.Ar directory_name ...
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
.Nm Mkdir
|
||||
creates the directories named as operands, in the order specified,
|
||||
using mode
|
||||
.Li rwxrwxrwx (\&0777)
|
||||
@@ -81,13 +81,13 @@ permission for the owner.
|
||||
.Pp
|
||||
The user must have write permission in the parent directory.
|
||||
.Pp
|
||||
.Nm
|
||||
.Nm Mkdir
|
||||
exits 0 if successful, and >0 if an error occurred.
|
||||
.Sh SEE ALSO
|
||||
.Xr rmdir 1
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm mkdir
|
||||
.Nm
|
||||
utility is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+9
-10
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)mv.1 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: mv.1,v 1.7 1996/08/29 18:06:04 wosch Exp $
|
||||
.\" $Id: mv.1,v 1.7.2.1 1998/02/15 11:16:27 jkh Exp $
|
||||
.\"
|
||||
.Dd May 31, 1993
|
||||
.Dt MV 1
|
||||
@@ -49,9 +49,8 @@
|
||||
.Op Fl f | Fl i
|
||||
.Ar source ... directory
|
||||
.Sh DESCRIPTION
|
||||
.Pp
|
||||
In its first form, the
|
||||
.Nm mv
|
||||
.Nm
|
||||
utility renames the file named by the
|
||||
.Ar source
|
||||
operand to the destination path named by the
|
||||
@@ -61,7 +60,7 @@ This form is assumed when the last operand does not name an already
|
||||
existing directory.
|
||||
.Pp
|
||||
In its second form,
|
||||
.Nm mv
|
||||
.Nm
|
||||
moves each file named by a
|
||||
.Ar source
|
||||
operand to a destination file in the existing directory named by the
|
||||
@@ -82,8 +81,8 @@ option overrides any previous
|
||||
.Fl i
|
||||
options.)
|
||||
.It Fl i
|
||||
Causes
|
||||
.Nm mv
|
||||
Cause
|
||||
.Nm
|
||||
to write a prompt to standard error before moving a file that would
|
||||
overwrite an existing file.
|
||||
If the response from the standard input begins with the character
|
||||
@@ -103,7 +102,7 @@ It is an error for either the
|
||||
operand or the destination path to specify a directory unless both do.
|
||||
.Pp
|
||||
If the destination path does not have a mode which permits writing,
|
||||
.Nm mv
|
||||
.Nm
|
||||
prompts the user for confirmation as specified for the
|
||||
.Fl i
|
||||
option.
|
||||
@@ -111,7 +110,7 @@ option.
|
||||
As the
|
||||
.Xr rename 2
|
||||
call does not work across file systems,
|
||||
.Nm mv
|
||||
.Nm
|
||||
uses
|
||||
.Xr cp 1
|
||||
and
|
||||
@@ -125,7 +124,7 @@ rm -f destination_path && \e
|
||||
.Ed
|
||||
.Pp
|
||||
The
|
||||
.Nm mv
|
||||
.Nm
|
||||
utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh SEE ALSO
|
||||
.Xr cp 1 ,
|
||||
@@ -133,7 +132,7 @@ utility exits 0 on success, and >0 if an error occurs.
|
||||
.Xr symlink 7
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm mv
|
||||
.Nm
|
||||
utility is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+10
-6
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: mv.c,v 1.8.2.1 1997/08/25 08:33:11 jkh Exp $
|
||||
* $Id: mv.c,v 1.8.2.3 1998/05/25 22:45:42 steve Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -78,7 +78,7 @@ main(argc, argv)
|
||||
register char *p, *endp;
|
||||
struct stat sb;
|
||||
int ch;
|
||||
char path[MAXPATHLEN + 1];
|
||||
char path[MAXPATHLEN];
|
||||
|
||||
while ((ch = getopt(argc, argv, "fi")) != -1)
|
||||
switch (ch) {
|
||||
@@ -110,11 +110,15 @@ main(argc, argv)
|
||||
}
|
||||
|
||||
/* It's a directory, move each file into it. */
|
||||
if (strlen(argv[argc - 1]) > sizeof(path) - 1)
|
||||
errx(1, "%s: destination pathname too long", *argv);
|
||||
(void)strcpy(path, argv[argc - 1]);
|
||||
baselen = strlen(path);
|
||||
endp = &path[baselen];
|
||||
*endp++ = '/';
|
||||
++baselen;
|
||||
if (!baselen || *(endp - 1) != '/') {
|
||||
*endp++ = '/';
|
||||
++baselen;
|
||||
}
|
||||
for (rval = 0; --argc; ++argv) {
|
||||
/*
|
||||
* Find the last component of the source pathname. It
|
||||
@@ -266,8 +270,8 @@ err: if (unlink(to))
|
||||
|
||||
oldmode = sbp->st_mode & ALLPERMS;
|
||||
if (fchown(to_fd, sbp->st_uid, sbp->st_gid)) {
|
||||
warn("%s: set owner/group (was: %u/%u)", to, sbp->st_uid,
|
||||
sbp->st_gid);
|
||||
warn("%s: set owner/group (was: %lu/%lu)", to,
|
||||
(u_long)sbp->st_uid, (u_long)sbp->st_gid);
|
||||
if (oldmode & (S_ISUID | S_ISGID)) {
|
||||
warnx(
|
||||
"%s: owner/group changed; clearing suid/sgid (mode was 0%03o)",
|
||||
|
||||
+3
-3
@@ -34,7 +34,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: ftree.c,v 1.4.2.2 1997/09/14 13:07:23 jkh Exp $
|
||||
* $Id: ftree.c,v 1.4.2.3 1998/02/15 11:18:19 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -506,14 +506,14 @@ next_file(arcn)
|
||||
* have to read the symlink path from the file
|
||||
*/
|
||||
if ((cnt = readlink(ftent->fts_path, arcn->ln_name,
|
||||
PAXPATHLEN)) < 0) {
|
||||
PAXPATHLEN - 1)) < 0) {
|
||||
sys_warn(1, errno, "Unable to read symlink %s",
|
||||
ftent->fts_path);
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* set link name length, watch out readlink does not
|
||||
* allways null terminate the link path
|
||||
* allways NUL terminate the link path
|
||||
*/
|
||||
arcn->ln_name[cnt] = '\0';
|
||||
arcn->ln_nlen = cnt;
|
||||
|
||||
+40
-39
@@ -34,7 +34,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)pax.1 8.4 (Berkeley) 4/18/94
|
||||
.\" $Id: pax.1,v 1.2 1994/09/24 02:56:26 davidg Exp $
|
||||
.\" $Id: pax.1,v 1.3.2.2 1998/06/30 06:42:49 charnier Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt PAX 1
|
||||
@@ -194,7 +194,7 @@ The presence of the
|
||||
and the
|
||||
.Fl w
|
||||
options specifies which of the following functional modes
|
||||
.Nm pax
|
||||
.Nm
|
||||
will operate under:
|
||||
.Em list , read , write ,
|
||||
and
|
||||
@@ -284,7 +284,7 @@ While processing a damaged archive during a
|
||||
or
|
||||
.Em list
|
||||
operation,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will attempt to recover from media defects and will search through the archive
|
||||
to locate and process the largest number of archive members possible (see the
|
||||
.Fl E
|
||||
@@ -298,7 +298,7 @@ If the
|
||||
.Ar directory
|
||||
operand does not exist, or it is not writable by the user,
|
||||
or it is not of type directory,
|
||||
.Nm Pax
|
||||
.Nm
|
||||
will exit with a non-zero exit status.
|
||||
.Pp
|
||||
The
|
||||
@@ -317,7 +317,7 @@ be selected.
|
||||
When a
|
||||
.Ar pattern
|
||||
operand does not select at least one archive member,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will write these
|
||||
.Ar pattern
|
||||
operands in a diagnostic message to
|
||||
@@ -330,7 +330,7 @@ operand specifies the pathname of a file to be copied or archived.
|
||||
When a
|
||||
.Ar file
|
||||
operand does not select at least one archive member,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will write these
|
||||
.Ar file
|
||||
operand pathnames in a diagnostic message to
|
||||
@@ -357,7 +357,7 @@ and
|
||||
as the mode argument.
|
||||
When the selected archive format supports the specification of linked
|
||||
files and these files cannot be linked while the archive is being extracted,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will write a diagnostic message to
|
||||
.Dv standard error
|
||||
and exit with a non-zero exit status at the completion of operation.
|
||||
@@ -381,7 +381,7 @@ If an archive format is not specified with a
|
||||
option, the format currently being used in the archive will be selected.
|
||||
Any attempt to append to an archive in a format different from the
|
||||
format already used in the archive will cause
|
||||
.Nm pax
|
||||
.Nm
|
||||
to exit immediately
|
||||
with a non-zero exit status.
|
||||
The blocking size used in the archive volume where writing starts
|
||||
@@ -450,7 +450,7 @@ or
|
||||
.Em write ) .
|
||||
A single archive may span multiple files and different archive devices.
|
||||
When required,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will prompt for the pathname of the file or device of the next volume in the
|
||||
archive.
|
||||
.It Fl i
|
||||
@@ -460,7 +460,7 @@ For each archive member matching a
|
||||
operand or each file matching a
|
||||
.Ar file
|
||||
operand,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will prompt to
|
||||
.Pa /dev/tty
|
||||
giving the name of the file, its file mode and its modification time.
|
||||
@@ -569,7 +569,7 @@ nor the
|
||||
.Cm o
|
||||
specification character is specified, or the user ID and group ID are not
|
||||
preserved for any reason,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will not set the
|
||||
.Dv S_ISUID
|
||||
.Em ( setuid )
|
||||
@@ -578,7 +578,7 @@ and
|
||||
.Em ( setgid )
|
||||
bits of the file mode.
|
||||
If the preservation of any of these items fails for any reason,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will write a diagnostic message to
|
||||
.Dv standard error .
|
||||
Failure to preserve these items will affect the final exit status,
|
||||
@@ -636,9 +636,9 @@ File or archive member names that substitute to the empty string
|
||||
are not selected and will be skipped.
|
||||
.It Fl t
|
||||
Reset the access times of any file or directory read or accessed by
|
||||
.Nm pax
|
||||
.Nm
|
||||
to be the same as they were before being read or accessed by
|
||||
.Nm pax .
|
||||
.Nm Ns .
|
||||
.It Fl u
|
||||
Ignore files that are older (having a less recent file modification time)
|
||||
than a pre-existing file or archive member with the same name.
|
||||
@@ -699,7 +699,7 @@ standard.
|
||||
The default blocksize for this format is 5120 bytes.
|
||||
Inode and device information about a file (used for detecting file hard links
|
||||
by this format) which may be truncated by this format is detected by
|
||||
.Nm pax
|
||||
.Nm
|
||||
and is repaired.
|
||||
.It Ar bcpio
|
||||
The old binary cpio format.
|
||||
@@ -708,21 +708,21 @@ This format is not very portable and should not be used when other formats
|
||||
are available.
|
||||
Inode and device information about a file (used for detecting file hard links
|
||||
by this format) which may be truncated by this format is detected by
|
||||
.Nm pax
|
||||
.Nm
|
||||
and is repaired.
|
||||
.It Ar sv4cpio
|
||||
The System V release 4 cpio.
|
||||
The default blocksize for this format is 5120 bytes.
|
||||
Inode and device information about a file (used for detecting file hard links
|
||||
by this format) which may be truncated by this format is detected by
|
||||
.Nm pax
|
||||
.Nm
|
||||
and is repaired.
|
||||
.It Ar sv4crc
|
||||
The System V release 4 cpio with file crc checksums.
|
||||
The default blocksize for this format is 5120 bytes.
|
||||
Inode and device information about a file (used for detecting file hard links
|
||||
by this format) which may be truncated by this format is detected by
|
||||
.Nm pax
|
||||
.Nm
|
||||
and is repaired.
|
||||
.It Ar tar
|
||||
The old BSD tar format as found in BSD4.3.
|
||||
@@ -790,20 +790,20 @@ archives to
|
||||
.Ar limit .
|
||||
With a positive
|
||||
.Ar limit ,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will attempt to recover from an archive read error and will
|
||||
continue processing starting with the next file stored in the archive.
|
||||
A
|
||||
.Ar limit
|
||||
of 0 will cause
|
||||
.Nm pax
|
||||
.Nm
|
||||
to stop operation after the first read error is detected on an archive volume.
|
||||
A
|
||||
.Ar limit
|
||||
of
|
||||
.Li NONE
|
||||
will cause
|
||||
.Nm pax
|
||||
.Nm
|
||||
to attempt to recover from read errors forever.
|
||||
The default
|
||||
.Ar limit
|
||||
@@ -813,7 +813,7 @@ is a small positive number of retries.
|
||||
Using this option with
|
||||
.Li NONE
|
||||
should be used with extreme caution as
|
||||
.Nm pax
|
||||
.Nm
|
||||
may get stuck in an infinite loop on a very badly flawed archive.
|
||||
.It Fl G Ar group
|
||||
Select a file based on its
|
||||
@@ -857,7 +857,7 @@ only files with a modification or inode change time of exactly that
|
||||
time will be selected.
|
||||
.Pp
|
||||
When
|
||||
.Nm pax
|
||||
.Nm
|
||||
is in the
|
||||
.Em write
|
||||
or
|
||||
@@ -887,7 +887,7 @@ created and had their modification time reset to an older time (as what
|
||||
happens when a file is extracted from an archive and the modification time
|
||||
is preserved).
|
||||
Time comparisons using both file times is useful when
|
||||
.Nm pax
|
||||
.Nm
|
||||
is used to create a time based incremental archive (only files that were
|
||||
changed during a specified time range will be archived).
|
||||
.Pp
|
||||
@@ -1053,13 +1053,13 @@ gives the verbose table of contents for an archive stored in
|
||||
.Pa filename .
|
||||
.Pp
|
||||
The following commands:
|
||||
.Dl mkdir newdir
|
||||
.Dl cd olddir
|
||||
.Dl pax -rw .\ newdir
|
||||
.Dl mkdir /tmp/foo
|
||||
.Dl cd /tmp/bar
|
||||
.Dl pax -rw .\ /tmp/foo
|
||||
will copy the entire
|
||||
.Pa olddir
|
||||
.Pa /tmp/bar
|
||||
directory hierarchy to
|
||||
.Pa newdir .
|
||||
.Pa /tmp/foo .
|
||||
.Pp
|
||||
The command:
|
||||
.Dl pax -r -s ',^//*usr//*,,' -f a.pax
|
||||
@@ -1093,7 +1093,7 @@ files with the same name found in the source file tree
|
||||
.Pa home .
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm pax
|
||||
.Nm
|
||||
utility is a superset of the
|
||||
.St -p1003.2
|
||||
standard.
|
||||
@@ -1121,10 +1121,11 @@ and
|
||||
operations are extensions to the
|
||||
.Tn POSIX
|
||||
standard.
|
||||
.Sh AUTHOR
|
||||
Keith Muller at the University of California, San Diego
|
||||
.Sh AUTHORS
|
||||
.An Keith Muller
|
||||
at the University of California, San Diego
|
||||
.Sh ERRORS
|
||||
.Nm pax
|
||||
.Nm Pax
|
||||
will exit with one of the following values:
|
||||
.Bl -tag -width 2n
|
||||
.It 0
|
||||
@@ -1134,7 +1135,7 @@ An error occurred.
|
||||
.El
|
||||
.Pp
|
||||
Whenever
|
||||
.Nm pax
|
||||
.Nm
|
||||
cannot create a file or a link when reading an archive or cannot
|
||||
find a file when writing an archive, or cannot preserve the user ID,
|
||||
group ID, or file mode when the
|
||||
@@ -1143,28 +1144,28 @@ option is specified, a diagnostic message is written to
|
||||
.Dv standard error
|
||||
and a non-zero exit status will be returned, but processing will continue.
|
||||
In the case where pax cannot create a link to a file,
|
||||
.Nm pax
|
||||
.Nm
|
||||
will not create a second copy of the file.
|
||||
.Pp
|
||||
If the extraction of a file from an archive is prematurely terminated by
|
||||
a signal or error,
|
||||
.Nm pax
|
||||
.Nm
|
||||
may have only partially extracted a file the user wanted.
|
||||
Additionally, the file modes of extracted files and directories
|
||||
may have incorrect file bits, and the modification and access times may be
|
||||
wrong.
|
||||
.Pp
|
||||
If the creation of an archive is prematurely terminated by a signal or error,
|
||||
.Nm pax
|
||||
.Nm
|
||||
may have only partially created the archive which may violate the specific
|
||||
archive format specification.
|
||||
.Pp
|
||||
If while doing a
|
||||
.Em copy ,
|
||||
.Nm pax
|
||||
.Nm
|
||||
detects a file is about to overwrite itself, the file is not copied,
|
||||
a diagnostic message is written to
|
||||
.Dv standard error
|
||||
and when
|
||||
.Nm pax
|
||||
.Nm
|
||||
completes it will exit with a non-zero exit status.
|
||||
+2
-1
@@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)extern.h 8.3 (Berkeley) 4/2/94
|
||||
* $Id: extern.h,v 1.2 1994/09/24 02:56:42 davidg Exp $
|
||||
* $Id: extern.h,v 1.3 1996/10/21 07:30:23 peter Exp $
|
||||
*/
|
||||
|
||||
struct kinfo;
|
||||
@@ -64,6 +64,7 @@ void parsefmt __P((char *));
|
||||
void pcpu __P((KINFO *, VARENT *));
|
||||
void pmem __P((KINFO *, VARENT *));
|
||||
void pri __P((KINFO *, VARENT *));
|
||||
void rtprior __P((KINFO *, VARENT *));
|
||||
void printheader __P((void));
|
||||
void pvar __P((KINFO *, VARENT *));
|
||||
void rssize __P((KINFO *, VARENT *));
|
||||
|
||||
+11
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: fmt.c,v 1.6 1995/10/23 21:03:40 ache Exp $
|
||||
* $Id: fmt.c,v 1.6.2.1 1997/03/10 19:10:52 guido Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -44,6 +44,7 @@ static char sccsid[] = "@(#)fmt.c 8.4 (Berkeley) 4/15/94";
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <vis.h>
|
||||
#include "ps.h"
|
||||
|
||||
@@ -58,8 +59,16 @@ static char *
|
||||
shquote(argv)
|
||||
char **argv;
|
||||
{
|
||||
long arg_max;
|
||||
char **p, *dst, *src;
|
||||
static char buf[4*ARG_MAX]; /* XXX */
|
||||
static char *buf = NULL;
|
||||
|
||||
if (buf == NULL) {
|
||||
if ((arg_max = sysconf(_SC_ARG_MAX)) == -1)
|
||||
errx(1, "sysconf _SC_ARG_MAX failed");
|
||||
if ((buf = malloc((4 * arg_max) + 1)) == NULL)
|
||||
errx(1, "malloc failed");
|
||||
}
|
||||
|
||||
if (*argv == 0) {
|
||||
buf[0] = 0;
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: keyword.c,v 1.8 1995/10/28 20:11:15 phk Exp $
|
||||
* $Id: keyword.c,v 1.9 1996/07/31 09:27:23 davidg Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -139,7 +139,7 @@ VAR var[] = {
|
||||
{"rss", "RSS", NULL, 0, p_rssize, 4},
|
||||
{"rssize", "", "rsz"},
|
||||
{"rsz", "RSZ", NULL, 0, rssize, 4},
|
||||
{"rtprio", "RTPRIO", NULL, 0, pvar, 7, POFF(p_rtprio), LONG, "d"},
|
||||
{"rtprio", "RTPRIO", NULL, 0, rtprior, 7, POFF(p_rtprio)},
|
||||
{"ruid", "RUID", NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_ruid),
|
||||
ULONG, UIDFMT},
|
||||
{"ruser", "RUSER", NULL, LJUST, runame, USERLEN},
|
||||
|
||||
+34
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: print.c,v 1.16.2.1 1997/04/16 16:10:48 jdp Exp $
|
||||
* $Id: print.c,v 1.16.2.2 1997/08/03 08:33:17 peter Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -164,12 +164,13 @@ logname(k, ve)
|
||||
VARENT *ve;
|
||||
{
|
||||
VAR *v;
|
||||
char *s;
|
||||
|
||||
v = ve->var;
|
||||
#ifndef NEWVM
|
||||
(void)printf("%-*s", v->width, KI_PROC(k)->p_logname);
|
||||
#else
|
||||
(void)printf("%-*s", v->width, KI_EPROC(k)->e_login);
|
||||
(void)printf("%-*s", v->width, (s = KI_EPROC(k)->e_login, *s) ? s : "-");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -657,6 +658,37 @@ trss(k, ve)
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
rtprior(k, ve)
|
||||
KINFO *k;
|
||||
VARENT *ve;
|
||||
{
|
||||
VAR *v;
|
||||
struct rtprio *prtp;
|
||||
char str[8];
|
||||
unsigned type, prio;
|
||||
|
||||
v = ve->var;
|
||||
prtp = (struct rtprio *) ((char *)KI_PROC(k) + v->off);
|
||||
prio = prtp->prio;
|
||||
switch (type = prtp->type) {
|
||||
case RTP_PRIO_REALTIME:
|
||||
snprintf(str, sizeof(str), "real:%u", prio);
|
||||
break;
|
||||
case RTP_PRIO_NORMAL:
|
||||
strncpy(str, "normal", sizeof(str));
|
||||
break;
|
||||
case RTP_PRIO_IDLE:
|
||||
snprintf(str, sizeof(str), "idle:%u", prio);
|
||||
break;
|
||||
default:
|
||||
snprintf(str, sizeof(str), "%u:%u", type, prio);
|
||||
break;
|
||||
}
|
||||
str[sizeof(str)-1] = '\0';
|
||||
(void)printf("%*s", v->width, str);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic output routines. Print fields from various prototype
|
||||
* structures.
|
||||
|
||||
+3
-3
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)pwd.1 8.2 (Berkeley) 4/28/95
|
||||
.\" $Id: pwd.1,v 1.5 1997/02/22 14:05:15 peter Exp $
|
||||
.\" $Id: pwd.1,v 1.2.8.2 1998/06/30 06:43:02 charnier Exp $
|
||||
.\"
|
||||
.Dd April 28, 1995
|
||||
.Dt PWD 1
|
||||
@@ -44,14 +44,14 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm pwd
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
.Nm Pwd
|
||||
writes the absolute pathname of the current working directory to
|
||||
the standard output.
|
||||
.Pp
|
||||
The pwd utility exits 0 on success, and >0 if an error occurs.
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm pwd
|
||||
.Nm
|
||||
command is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+3
-1
@@ -31,10 +31,12 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)pathnames.h 8.1 (Berkeley) 5/31/93
|
||||
* $Id$
|
||||
* $Id: pathnames.h,v 1.2 1994/09/24 02:56:55 davidg Exp $
|
||||
*/
|
||||
|
||||
#include <paths.h>
|
||||
|
||||
#define _PATH_CP "/bin/cp"
|
||||
#define _PATH_RCP "/bin/rcp"
|
||||
#define _PATH_RLOGIN "/usr/bin/rlogin"
|
||||
#define _PATH_RSH "/usr/bin/rsh"
|
||||
+14
-21
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)rcp.1 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: rcp.1,v 1.5 1997/02/22 14:05:21 peter Exp $
|
||||
.\" $Id: rcp.1,v 1.2.8.1 1997/02/28 07:54:41 mpp Exp $
|
||||
.\"
|
||||
.Dd May 31, 1993
|
||||
.Dt RCP 1
|
||||
@@ -58,26 +58,21 @@ argument is either a remote file name of the
|
||||
form ``rname@rhost:path'', or a local file name (containing no `:' characters,
|
||||
or a `/' before any `:'s).
|
||||
.Pp
|
||||
.Bl -tag -width flag
|
||||
The following options are available:
|
||||
.Bl -tag -width indent
|
||||
.It Fl K
|
||||
The
|
||||
.Fl K
|
||||
option turns off all Kerberos authentication.
|
||||
Turn off all Kerberos authentication.
|
||||
.It Fl k
|
||||
The
|
||||
.Fl k
|
||||
option requests
|
||||
.Nm rcp
|
||||
Request
|
||||
.Nm
|
||||
to obtain tickets
|
||||
for the remote host in realm
|
||||
.Ar realm
|
||||
instead of the remote host's realm as determined by
|
||||
.Xr krb_realmofhost 3 .
|
||||
.It Fl p
|
||||
The
|
||||
.Fl p
|
||||
option causes
|
||||
.Nm rcp
|
||||
Cause
|
||||
.Nm
|
||||
to attempt to preserve (duplicate) in its copies the modification
|
||||
times and modes of the source files, ignoring the
|
||||
.Ar umask .
|
||||
@@ -89,16 +84,14 @@ modified by the
|
||||
on the destination host is used.
|
||||
.It Fl r
|
||||
If any of the source files are directories,
|
||||
.Nm rcp
|
||||
.Nm
|
||||
copies each subtree rooted at that name; in this case
|
||||
the destination must be a directory.
|
||||
.It Fl x
|
||||
The
|
||||
.Fl x
|
||||
option turns on
|
||||
Turn on
|
||||
.Tn DES
|
||||
encryption for all data passed by
|
||||
.Nm rcp .
|
||||
.Nm Ns .
|
||||
This may impact response time and
|
||||
.Tn CPU
|
||||
utilization, but provides
|
||||
@@ -134,11 +127,11 @@ are on the current machine.
|
||||
.Xr rsh 1
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm rcp
|
||||
.Nm
|
||||
command appeared in
|
||||
.Bx 4.2 .
|
||||
The version of
|
||||
.Nm rcp
|
||||
.Nm
|
||||
described here
|
||||
has been reimplemented with Kerberos in
|
||||
.Bx 4.3 Reno .
|
||||
@@ -157,4 +150,4 @@ The destination user and hostname may have to be specified as
|
||||
``rhost.rname'' when the destination machine is running the
|
||||
.Bx 4.2
|
||||
version of
|
||||
.Nm rcp .
|
||||
.Nm Ns .
|
||||
+24
-11
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id$
|
||||
* $Id: rcp.c,v 1.8.2.4 1998/02/18 11:38:37 markm Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -72,8 +72,6 @@ static char const sccsid[] = "@(#)rcp.c 8.2 (Berkeley) 4/2/94";
|
||||
#include <des.h>
|
||||
#include <krb.h>
|
||||
|
||||
/* #include "../../usr.bin/rlogin/krb.h" */
|
||||
|
||||
char dst_realm_buf[REALM_SZ];
|
||||
char *dest_realm = NULL;
|
||||
int use_kerberos = 1;
|
||||
@@ -96,6 +94,9 @@ uid_t userid;
|
||||
int errs, rem;
|
||||
int pflag, iamremote, iamrecursive, targetshouldbedirectory;
|
||||
|
||||
static int argc_copy;
|
||||
static char **argv_copy;
|
||||
|
||||
#define CMDNEEDS 64
|
||||
char cmd[CMDNEEDS]; /* must hold "rcp -r -p -d\0" */
|
||||
|
||||
@@ -119,6 +120,24 @@ main(argc, argv)
|
||||
struct servent *sp;
|
||||
int ch, fflag, tflag;
|
||||
char *targ, *shell;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Prepare for execing ourselves.
|
||||
*/
|
||||
|
||||
argc_copy = argc + 1;
|
||||
argv_copy = malloc((argc_copy + 1) * sizeof(*argv_copy));
|
||||
if (argv_copy == NULL)
|
||||
err(1, "malloc");
|
||||
argv_copy[0] = argv[0];
|
||||
argv_copy[1] = "-K";
|
||||
for(i = 1; i < argc; ++i) {
|
||||
argv_copy[i + 1] = strdup(argv[i]);
|
||||
if (argv_copy[i + 1] == NULL)
|
||||
errx(1, "strdup: out of memory");
|
||||
}
|
||||
argv_copy[argc + 1] = NULL;
|
||||
|
||||
fflag = tflag = 0;
|
||||
while ((ch = getopt(argc, argv, OPTIONS)) != -1)
|
||||
@@ -774,10 +793,8 @@ int
|
||||
kerberos(host, bp, locuser, user)
|
||||
char **host, *bp, *locuser, *user;
|
||||
{
|
||||
struct servent *sp;
|
||||
|
||||
again:
|
||||
if (use_kerberos) {
|
||||
setuid(getuid());
|
||||
rem = KSUCCESS;
|
||||
errno = 0;
|
||||
if (dest_realm == NULL)
|
||||
@@ -791,15 +808,11 @@ again:
|
||||
krcmd(host, port, user, bp, 0, dest_realm);
|
||||
|
||||
if (rem < 0) {
|
||||
use_kerberos = 0;
|
||||
if ((sp = getservbyname("shell", "tcp")) == NULL)
|
||||
errx(1, "unknown service shell/tcp");
|
||||
if (errno == ECONNREFUSED)
|
||||
oldw("remote host doesn't support Kerberos");
|
||||
else if (errno == ENOENT)
|
||||
oldw("can't provide Kerberos authentication data");
|
||||
port = sp->s_port;
|
||||
goto again;
|
||||
execv(_PATH_RCP, argv_copy);
|
||||
}
|
||||
} else {
|
||||
#ifdef CRYPT
|
||||
|
||||
+13
-8
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)rm.1 8.2 (Berkeley) 4/18/94
|
||||
.\" $Id: rm.1,v 1.4.2.1 1997/04/08 20:43:37 mpp Exp $
|
||||
.\" $Id: rm.1,v 1.4.2.2 1997/04/09 05:05:46 mpp Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt RM 1
|
||||
@@ -44,11 +44,11 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm rm
|
||||
.Op Fl f | Fl i
|
||||
.Op Fl dPRr
|
||||
.Op Fl dPRrW
|
||||
.Ar file ...
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm rm
|
||||
.Nm
|
||||
utility attempts to remove the non-directory type files specified on the
|
||||
command line.
|
||||
If the permissions of the file do not permit writing, and the standard
|
||||
@@ -100,23 +100,27 @@ that directory is skipped.
|
||||
.It Fl r
|
||||
Equivalent to
|
||||
.Fl R .
|
||||
.It Fl W
|
||||
Attempt to undelete the named files.
|
||||
Currently, this option can only be used to recover
|
||||
files covered by whiteouts.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm rm
|
||||
.Nm
|
||||
utility removes symbolic links, not the files referenced by the links.
|
||||
.Pp
|
||||
It is an error to attempt to remove the files ``.'' and ``..''.
|
||||
.Pp
|
||||
The
|
||||
.Nm rm
|
||||
.Nm
|
||||
utility exits 0 if all of the named files or file hierarchies were removed,
|
||||
or if the
|
||||
.Fl f
|
||||
option was specified and all of the existing files or file hierarchies were
|
||||
removed.
|
||||
If an error occurs,
|
||||
.Nm rm
|
||||
.Nm
|
||||
exits with a value >0.
|
||||
.Sh NOTE
|
||||
The
|
||||
@@ -141,6 +145,7 @@ This is useful for commands that do not use
|
||||
to parse the command line arguments.
|
||||
.Sh SEE ALSO
|
||||
.Xr rmdir 1 ,
|
||||
.Xr undelete 2 ,
|
||||
.Xr unlink 2 ,
|
||||
.Xr fts 3 ,
|
||||
.Xr getopt 3 ,
|
||||
@@ -155,7 +160,7 @@ In addition, only regular files are overwritten, other types of files
|
||||
are not.
|
||||
.Sh COMPATIBILITY
|
||||
The
|
||||
.Nm rm
|
||||
.Nm
|
||||
utility differs from historical implementations in that the
|
||||
.Fl f
|
||||
option only masks attempts to remove non-existent files instead of
|
||||
@@ -167,7 +172,7 @@ implementations prompted on the standard output,
|
||||
not the standard error output.
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm rm
|
||||
.Nm
|
||||
command is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+22
-18
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: rm.c,v 1.11 1996/03/07 23:26:59 wosch Exp $
|
||||
* $Id: rm.c,v 1.11.2.1 1997/12/03 05:40:08 imp Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -81,7 +81,7 @@ main(argc, argv)
|
||||
{
|
||||
int ch, rflag;
|
||||
|
||||
rflag = 0;
|
||||
Pflag = rflag = 0;
|
||||
while ((ch = getopt(argc, argv, "dfiPRr")) != -1)
|
||||
switch(ch) {
|
||||
case 'd':
|
||||
@@ -112,16 +112,17 @@ main(argc, argv)
|
||||
usage();
|
||||
|
||||
checkdot(argv);
|
||||
if (!*argv)
|
||||
exit (eval);
|
||||
|
||||
stdin_ok = isatty(STDIN_FILENO);
|
||||
uid = geteuid();
|
||||
|
||||
if (rflag)
|
||||
rm_tree(argv);
|
||||
else
|
||||
rm_file(argv);
|
||||
if (*argv) {
|
||||
stdin_ok = isatty(STDIN_FILENO);
|
||||
|
||||
if (rflag)
|
||||
rm_tree(argv);
|
||||
else
|
||||
rm_file(argv);
|
||||
}
|
||||
|
||||
exit (eval);
|
||||
}
|
||||
|
||||
@@ -132,13 +133,14 @@ rm_tree(argv)
|
||||
FTS *fts;
|
||||
FTSENT *p;
|
||||
int needstat;
|
||||
int flags;
|
||||
int rval;
|
||||
|
||||
/*
|
||||
* Remove a file hierarchy. If forcing removal (-f), or interactive
|
||||
* (-i) or can't ask anyway (stdin_ok), don't stat the file.
|
||||
*/
|
||||
needstat = !uid || !fflag && !iflag && stdin_ok;
|
||||
needstat = !uid || (!fflag && !iflag && stdin_ok);
|
||||
|
||||
/*
|
||||
* If the -i option is specified, the user can skip on the pre-order
|
||||
@@ -176,7 +178,7 @@ rm_tree(argv)
|
||||
continue;
|
||||
case FTS_D:
|
||||
/* Pre-order: give user chance to skip. */
|
||||
if (iflag && !check(p->fts_path, p->fts_accpath,
|
||||
if (!fflag && !check(p->fts_path, p->fts_accpath,
|
||||
p->fts_statp)) {
|
||||
(void)fts_set(fts, p, FTS_SKIP);
|
||||
p->fts_number = SKIPPED;
|
||||
@@ -193,10 +195,11 @@ rm_tree(argv)
|
||||
if (p->fts_number == SKIPPED)
|
||||
continue;
|
||||
break;
|
||||
default:
|
||||
if (!fflag &&
|
||||
!check(p->fts_path, p->fts_accpath, p->fts_statp))
|
||||
continue;
|
||||
}
|
||||
if (!fflag &&
|
||||
!check(p->fts_path, p->fts_accpath, p->fts_statp))
|
||||
continue;
|
||||
|
||||
rval = 0;
|
||||
if (!uid &&
|
||||
@@ -357,9 +360,9 @@ check(path, name, sp)
|
||||
* first because we may not have stat'ed the file.
|
||||
*/
|
||||
if (!stdin_ok || S_ISLNK(sp->st_mode) ||
|
||||
!access(name, W_OK) &&
|
||||
(!access(name, W_OK) &&
|
||||
!(sp->st_flags & (SF_APPEND|SF_IMMUTABLE)) &&
|
||||
(!(sp->st_flags & (UF_APPEND|UF_IMMUTABLE)) || !uid))
|
||||
(!(sp->st_flags & (UF_APPEND|UF_IMMUTABLE)) || !uid)))
|
||||
return (1);
|
||||
strmode(sp->st_mode, modep);
|
||||
strcpy(flagsp, flags_to_string(sp->st_flags, NULL));
|
||||
@@ -398,7 +401,8 @@ checkdot(argv)
|
||||
if (!complained++)
|
||||
warnx("\".\" and \"..\" may not be removed");
|
||||
eval = 1;
|
||||
for (save = t; (t[0] = t[1]) != NULL; ++t);
|
||||
for (save = t; (t[0] = t[1]) != NULL; ++t)
|
||||
continue;
|
||||
t = save;
|
||||
} else
|
||||
++t;
|
||||
|
||||
+6
-6
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)rmail.8 6.10 (Berkeley) 4/29/93
|
||||
.\" $Id: rmail.8,v 1.5 1997/02/22 14:05:30 peter Exp $
|
||||
.\" $Id: rmail.8,v 1.2.8.2 1998/06/30 06:43:18 charnier Exp $
|
||||
.\"
|
||||
.Dd April 29, 1993
|
||||
.Dt RMAIL 8
|
||||
@@ -42,7 +42,7 @@
|
||||
.Nm rmail
|
||||
.Ar user ...
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
.Nm Rmail
|
||||
interprets incoming mail received via
|
||||
.Xr uucp 1 ,
|
||||
collapsing ``From'' lines in the form generated
|
||||
@@ -52,18 +52,18 @@ into a single line of the form ``return-path!sender'',
|
||||
and passing the processed mail on to
|
||||
.Xr sendmail 8 .
|
||||
.Pp
|
||||
.Nm
|
||||
.Nm Rmail
|
||||
is explicitly designed for use with
|
||||
.Xr uucp
|
||||
.Xr uucp 1
|
||||
and
|
||||
.Xr sendmail .
|
||||
.Xr sendmail 8 .
|
||||
.Sh SEE ALSO
|
||||
.Xr uucp 1 ,
|
||||
.Xr mail.local 8 ,
|
||||
.Xr sendmail 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm rmail
|
||||
.Nm
|
||||
program appeared in
|
||||
.Bx 4.2 .
|
||||
.Sh BUGS
|
||||
|
||||
+8
-6
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)rmdir.1 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: rmdir.1,v 1.3 1996/08/29 18:06:08 wosch Exp $
|
||||
.\" $Id: rmdir.1,v 1.3.2.2 1998/06/30 06:42:35 charnier Exp $
|
||||
.\"
|
||||
.Dd May 31, 1993
|
||||
.Dt RMDIR 1
|
||||
@@ -46,7 +46,9 @@
|
||||
.Op Fl p
|
||||
.Ar directory ...
|
||||
.Sh DESCRIPTION
|
||||
The rmdir utility removes the directory entry specified by
|
||||
The
|
||||
.Nm
|
||||
utility removes the directory entry specified by
|
||||
each
|
||||
.Ar directory
|
||||
argument, provided it is empty.
|
||||
@@ -56,11 +58,11 @@ In order to remove both a parent directory and a subdirectory
|
||||
of that parent, the subdirectory
|
||||
must be specified first so the parent directory
|
||||
is empty when
|
||||
.Nm rmdir
|
||||
.Nm
|
||||
tries to remove it.
|
||||
.Pp
|
||||
The following option is available:
|
||||
.Bl -tag -width Ds
|
||||
.Bl -tag -width indent
|
||||
.It Fl p
|
||||
Each
|
||||
.Ar directory
|
||||
@@ -73,7 +75,7 @@ for fully non-discriminant recursive removal.)
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm rmdir
|
||||
.Nm
|
||||
utility exits with one of the following values:
|
||||
.Bl -tag -width Ds
|
||||
.It Li \&0
|
||||
@@ -87,7 +89,7 @@ An error occurred.
|
||||
.Xr rm 1
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm rmdir
|
||||
.Nm
|
||||
command is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
|
||||
+6
-10
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: rmdir.c,v 1.2 1994/09/24 02:57:13 davidg Exp $
|
||||
* $Id: rmdir.c,v 1.2.8.1 1997/08/25 08:43:06 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -40,7 +40,11 @@ static char const copyright[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static char const sccsid[] = "@(#)rmdir.c 8.3 (Berkeley) 4/2/94";
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)rmdir.c 8.3 (Berkeley) 4/2/94";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <err.h>
|
||||
@@ -78,14 +82,6 @@ main(argc, argv)
|
||||
usage();
|
||||
|
||||
for (errors = 0; *argv; argv++) {
|
||||
char *p;
|
||||
|
||||
/* Delete trailing slashes, per POSIX. */
|
||||
p = *argv + strlen(*argv);
|
||||
while (--p > *argv && *p == '/')
|
||||
;
|
||||
*++p = '\0';
|
||||
|
||||
if (rmdir(*argv) < 0) {
|
||||
warn("%s", *argv);
|
||||
errors = 1;
|
||||
|
||||
+5
-2
@@ -33,7 +33,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: eval.c,v 1.7.2.2 1997/05/13 19:18:56 steve Exp $
|
||||
* $Id: eval.c,v 1.7.2.3 1997/08/25 09:09:42 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -764,7 +764,10 @@ evalcommand(cmd, flags, backcmd)
|
||||
for (sp = varlist.list ; sp ; sp = sp->next)
|
||||
mklocal(sp->text);
|
||||
funcnest++;
|
||||
evaltree(cmdentry.u.func, 0);
|
||||
if (flags & EV_TESTED)
|
||||
evaltree(cmdentry.u.func, EV_TESTED);
|
||||
else
|
||||
evaltree(cmdentry.u.func, 0);
|
||||
funcnest--;
|
||||
INTOFF;
|
||||
poplocalvars();
|
||||
|
||||
+3
-3
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
|
||||
.\" $Id: sh.1,v 1.9.2.7 1998/02/12 01:25:29 jdp Exp $
|
||||
.\" $Id: sh.1,v 1.9.2.8 1998/02/15 11:32:26 jkh Exp $
|
||||
.\"
|
||||
.Dd May 5, 1995
|
||||
.Dt SH 1
|
||||
@@ -48,7 +48,7 @@
|
||||
.Op Fl c Ar string
|
||||
.Op Ar arg ...
|
||||
.Sh DESCRIPTION
|
||||
.Nm sh
|
||||
.Nm Sh
|
||||
is the standard command interpreter for the system.
|
||||
The current version of
|
||||
.Nm
|
||||
@@ -1092,7 +1092,7 @@ The following environment variables affect the execution of fc:
|
||||
.It Va FCEDIT
|
||||
Name of the editor to use.
|
||||
.It Va HISTSIZE
|
||||
The number of previous commands that are accessable.
|
||||
The number of previous commands that are accessible.
|
||||
.El
|
||||
.It fg [ job ]
|
||||
Move the specified job or the current job to the
|
||||
|
||||
+5
-5
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)sleep.1 8.3 (Berkeley) 4/18/94
|
||||
.\" $Id: sleep.1,v 1.2.8.1 1997/02/28 07:54:48 mpp Exp $
|
||||
.\" $Id: sleep.1,v 1.2.8.3 1998/06/30 06:43:08 charnier Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt SLEEP 1
|
||||
@@ -46,17 +46,17 @@
|
||||
.Ar seconds
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm sleep
|
||||
.Nm
|
||||
command
|
||||
suspends execution for a minimum of
|
||||
.Ar seconds .
|
||||
.Nm
|
||||
.Nm Sleep
|
||||
is used to schedule the execution of other commands (see
|
||||
.Sx EXAMPLES
|
||||
below).
|
||||
.Pp
|
||||
If the
|
||||
.Nm sleep
|
||||
.Nm
|
||||
command
|
||||
receives a SIGALRM signal, it terminates normally with a zero exit status,
|
||||
for any other signal it takes the standard action.
|
||||
@@ -117,7 +117,7 @@ awk job.
|
||||
.Xr sleep 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm sleep
|
||||
.Nm
|
||||
command is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
+5
-3
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: gfmt.c,v 1.4 1995/05/30 00:07:26 rgrimes Exp $
|
||||
* $Id: gfmt.c,v 1.4.6.1 1997/08/25 09:24:02 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -65,10 +65,12 @@ gprint(tp, wp, ldisc)
|
||||
struct cchar *cp;
|
||||
|
||||
(void)printf("gfmt1:cflag=%lx:iflag=%lx:lflag=%lx:oflag=%lx:",
|
||||
tp->c_cflag, tp->c_iflag, tp->c_lflag, tp->c_oflag);
|
||||
(u_long)tp->c_cflag, (u_long)tp->c_iflag, (u_long)tp->c_lflag,
|
||||
(u_long)tp->c_oflag);
|
||||
for (cp = cchars1; cp->name; ++cp)
|
||||
(void)printf("%s=%x:", cp->name, tp->c_cc[cp->sub]);
|
||||
(void)printf("ispeed=%ld:ospeed=%ld\n", cfgetispeed(tp), cfgetospeed(tp));
|
||||
(void)printf("ispeed=%lu:ospeed=%lu\n",
|
||||
(u_long)cfgetispeed(tp), (u_long)cfgetospeed(tp));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: key.c,v 1.4.6.1 1996/12/10 16:40:37 joerg Exp $
|
||||
* $Id: key.c,v 1.4.6.2 1997/08/25 09:24:04 jkh Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@@ -286,7 +286,7 @@ f_speed(ip)
|
||||
struct info *ip;
|
||||
{
|
||||
|
||||
(void)printf("%ld\n", cfgetospeed(&ip->t));
|
||||
(void)printf("%lu\n", (u_long)cfgetospeed(&ip->t));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+10
-8
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)stty.1 8.4 (Berkeley) 4/18/94
|
||||
.\" $Id: stty.1,v 1.4.2.1 1997/03/12 16:00:05 mpp Exp $
|
||||
.\" $Id: stty.1,v 1.4.2.4 1998/06/30 06:43:23 charnier Exp $
|
||||
.\"
|
||||
.Dd April 18, 1994
|
||||
.Dt STTY 1
|
||||
@@ -48,7 +48,7 @@
|
||||
.Op operands
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm stty
|
||||
.Nm
|
||||
utility sets or reports on terminal
|
||||
characteristics for the device that is its standard input.
|
||||
If no options or operands are specified, it reports the settings of a subset
|
||||
@@ -60,7 +60,7 @@ Some combinations of arguments are mutually
|
||||
exclusive on some terminal types.
|
||||
.Pp
|
||||
The following options are available:
|
||||
.Bl -tag -width Ds
|
||||
.Bl -tag -width indent
|
||||
.It Fl a
|
||||
Display all the current settings for the terminal to standard output
|
||||
as per
|
||||
@@ -84,7 +84,7 @@ block on the open.
|
||||
.It Fl g
|
||||
Display all the current settings for the terminal to standard output
|
||||
in a form that may be used as an argument to a subsequent invocation of
|
||||
.Nm stty
|
||||
.Nm
|
||||
to restore the current terminal state as per
|
||||
.St -p1003.2 .
|
||||
.El
|
||||
@@ -146,7 +146,7 @@ Enable (disable) the receiver.
|
||||
Assume a line without (with) modem
|
||||
control.
|
||||
.It Cm crtscts Pq Fl crtscts
|
||||
Enable RTS/CTS flow control.
|
||||
Enable (disable) RTS/CTS flow control.
|
||||
.El
|
||||
.Ss Input Modes:
|
||||
This corresponds to the c_iflag in the termios structure.
|
||||
@@ -493,7 +493,9 @@ first rows, then columns.
|
||||
.Ss Compatibility Modes:
|
||||
.Pp
|
||||
These modes remain for compatibility with the previous version of
|
||||
the stty command.
|
||||
the
|
||||
.Nm
|
||||
command.
|
||||
.Bl -tag -width Fl
|
||||
.It Cm all
|
||||
Reports all the terminal modes as with
|
||||
@@ -564,13 +566,13 @@ Same as the control character
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Nm stty
|
||||
.Nm
|
||||
utility exits with a value of 0 if successful, and >0 if an error occurs.
|
||||
.Sh SEE ALSO
|
||||
.Xr termios 4
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm stty
|
||||
.Nm
|
||||
function is expected to be
|
||||
.St -p1003.2
|
||||
compatible. The flags
|
||||
|
||||
+5
-5
@@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)sync.8 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: sync.8,v 1.3 1996/02/12 00:45:47 mpp Exp $
|
||||
.\" $Id: sync.8,v 1.3.2.2 1998/06/30 06:42:40 charnier Exp $
|
||||
.\"
|
||||
.Dd May 31, 1993
|
||||
.Dt SYNC 8
|
||||
@@ -48,14 +48,14 @@ processor is halted in a way not suitably done by
|
||||
or
|
||||
.Xr halt 8 .
|
||||
Generally, it is preferable to use
|
||||
.Xr reboot
|
||||
.Xr reboot 8
|
||||
or
|
||||
.Xr halt
|
||||
.Xr halt 8
|
||||
to shut down the system,
|
||||
as they may perform additional actions
|
||||
such as resynchronizing the hardware clock
|
||||
and flushing internal caches before performing a final
|
||||
.Nm sync .
|
||||
.Nm Ns .
|
||||
.Pp
|
||||
.Nm Sync
|
||||
utilizes the
|
||||
@@ -69,6 +69,6 @@ function call.
|
||||
.Xr reboot 8
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm sync
|
||||
.Nm
|
||||
command appeared in
|
||||
.At v6 .
|
||||
+7
-7
@@ -33,7 +33,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)test.1 8.1 (Berkeley) 5/31/93
|
||||
.\" $Id: test.1,v 1.2 1994/09/24 02:59:14 davidg Exp $
|
||||
.\" $Id: test.1,v 1.2.8.1 1997/06/02 06:40:08 charnier Exp $
|
||||
.\"
|
||||
.Dd May 31, 1993
|
||||
.Dt TEST 1
|
||||
@@ -46,7 +46,7 @@
|
||||
.Ar expression
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
utility evaluates the expression and, if it evaluates
|
||||
to true, returns a zero (true) exit status; otherwise
|
||||
it returns 1 (false).
|
||||
@@ -54,11 +54,11 @@ If there is no expression, test also
|
||||
returns 1 (false).
|
||||
.Pp
|
||||
All operators and flags are separate arguments to the
|
||||
.Nm test
|
||||
.Nm
|
||||
utility.
|
||||
.Pp
|
||||
The following primaries are used to construct expression:
|
||||
.Bl -tag -width Ar
|
||||
.Bl -tag -width indent
|
||||
.It Fl b Ar file
|
||||
True if
|
||||
.Ar file
|
||||
@@ -228,7 +228,7 @@ operator has higher precedence than the
|
||||
operator.
|
||||
.Sh GRAMMAR AMBIGUITY
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
grammar is inherently ambiguous. In order to assure a degree of consistency,
|
||||
the cases described in the
|
||||
.St -p1003.2 ,
|
||||
@@ -238,7 +238,7 @@ standards document. All other cases are subject to the ambiguity in the
|
||||
command semantics.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
utility exits with one of the following values:
|
||||
.Bl -tag -width Ds
|
||||
.It 0
|
||||
@@ -251,7 +251,7 @@ An error occurred.
|
||||
.El
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Nm test
|
||||
.Nm
|
||||
function is expected to be
|
||||
.St -p1003.2
|
||||
compatible.
|
||||
+13
-1
@@ -1,4 +1,16 @@
|
||||
$Id: CHANGES,v 8.53 1997/06/01 20:34:25 vixie Exp vixie $
|
||||
$Id: CHANGES,v 8.56 1998/04/07 04:59:42 vixie Exp $
|
||||
|
||||
--- 4.9.7-T1A released ---
|
||||
|
||||
808. [security] A number of routines did insufficient bounds checking which
|
||||
could cause crashes by reading from an invalid memory
|
||||
location. (From BIND-8).
|
||||
|
||||
807. [bug] The server sometimes leaked the flushset (ns_resp.c).
|
||||
(From BIND-8).
|
||||
|
||||
806. [bug] add_related_additional() leaked memory if the name
|
||||
was already in the related array. (From BIND-8).
|
||||
|
||||
--- 4.9.6 released ---
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$Id: INSTALL,v 8.8 1997/06/01 20:34:25 vixie Exp vixie $
|
||||
$Id: INSTALL,v 8.9 1997/06/24 06:43:50 vixie Exp $
|
||||
|
||||
THE FILES:
|
||||
----------
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Makefile for BIND>=4.9 top level
|
||||
# vixie@decwrl December, 1992 [original]
|
||||
#
|
||||
# $Id: Makefile,v 8.49 1997/06/01 20:34:25 vixie Exp vixie $
|
||||
# $Id: Makefile,v 8.52 1998/04/07 04:59:42 vixie Exp $
|
||||
|
||||
## Copyright (c) 1989
|
||||
## The Regents of the University of California. All rights reserved.
|
||||
@@ -52,7 +52,7 @@
|
||||
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
## SOFTWARE.
|
||||
|
||||
VER = 4.9.6-REL
|
||||
VER = 4.9.7-T1B
|
||||
SHELL = /bin/sh
|
||||
MAKE = make
|
||||
DESTDIR =
|
||||
|
||||
+16
-10
@@ -1,18 +1,24 @@
|
||||
The official version of BIND is now 8.1.1. This is 4.9.6, the last of 4.*
|
||||
which we are releasing since it has some important security bugs fixed.
|
||||
Internet Software Consortium
|
||||
BIND Release 4.9.7 README
|
||||
$Date: 1998/04/07 04:24:01 $
|
||||
|
||||
The official version of ISC BIND is now 8.1.1. This is ISC BIND 4.9.7,
|
||||
hoped to be the last of 4.*, which we are releasing since it has an important
|
||||
security bug (plus some memory leaks) fixed.
|
||||
|
||||
The official place to get BIND is <URL:ftp://ftp.isc.org/isc/bind/src>.
|
||||
|
||||
The official mailing lists are: [email protected] - users/admins
|
||||
(use *-request@* for admin mail) [email protected] - developers
|
||||
The official mailing lists are: <[email protected]> - users/admins
|
||||
(use *-request@* for admin mail) <[email protected]> - developers
|
||||
|
||||
The official Usenet newsgroups are: comp.protocols.tcp-ip.domains
|
||||
comp.protocols.dns.bind
|
||||
comp.protocols.dns.ops
|
||||
comp.protocols.dns.std
|
||||
The official Usenet newsgroups are: <URL:news:comp.protocols.dns.bind>
|
||||
<URL:news:comp.protocols.dns.ops>
|
||||
<URL:news:comp.protocols.dns.std>
|
||||
|
||||
BIND is currently maintained by: The Internet Software Consortium
|
||||
(see <URL:http://www.isc.org/isc>.)
|
||||
BIND is maintained by: The Internet Software Consortium
|
||||
(see <URL:http://www.isc.org/>)
|
||||
|
||||
Bug reports should be sent to: <[email protected]>
|
||||
|
||||
Read the top of CHANGES for interesting stuff.
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ char copyright[] =
|
||||
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static char sccsid[] = "@(#)named-xfer.c 4.18 (Berkeley) 3/7/91";
|
||||
static char rcsid[] = "$Id: named-xfer.c,v 8.23 1997/06/01 20:34:34 vixie Exp $";
|
||||
static char rcsid[] = "$Id: named-xfer.c,v 8.24 1998/04/07 04:59:45 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -740,6 +740,10 @@ getzone(zp, serial_no, port)
|
||||
goto badsoa;
|
||||
}
|
||||
tmp += n;
|
||||
if (tmp + 2 * INT16SZ > eom) {
|
||||
badsoa_msg = "query error";
|
||||
goto badsoa;
|
||||
}
|
||||
GETSHORT(type, tmp);
|
||||
GETSHORT(class, tmp);
|
||||
if (class != curclass || type != T_SOA ||
|
||||
@@ -778,6 +782,10 @@ getzone(zp, serial_no, port)
|
||||
GETSHORT(class, cp4);
|
||||
GETLONG(ttl, cp4);
|
||||
GETSHORT(dlen, cp4);
|
||||
if (cp4 + dlen > eom) {
|
||||
badsoa_msg = "zinfo dlen too big";
|
||||
goto badsoa;
|
||||
}
|
||||
if (type == T_SOA)
|
||||
break;
|
||||
/* Skip to next record, if any. */
|
||||
@@ -1155,6 +1163,8 @@ soa_zinfo(zp, cp, eom)
|
||||
register int n;
|
||||
int type, class;
|
||||
u_long ttl;
|
||||
u_int dlen;
|
||||
u_char *rdatap;
|
||||
|
||||
/* Are type, class, and ttl OK? */
|
||||
if (eom - cp < 3 * INT16SZ + INT32SZ)
|
||||
@@ -1162,7 +1172,8 @@ soa_zinfo(zp, cp, eom)
|
||||
GETSHORT(type, cp);
|
||||
GETSHORT(class, cp);
|
||||
GETLONG(ttl, cp);
|
||||
cp += INT16SZ; /* dlen */
|
||||
GETSHORT(dlen, cp);
|
||||
rdatap = cp;
|
||||
if (type != T_SOA || class != curclass)
|
||||
return ("zinfo wrong typ/cla/ttl");
|
||||
/* Skip master name and contact name, we can't validate them. */
|
||||
@@ -1180,9 +1191,19 @@ soa_zinfo(zp, cp, eom)
|
||||
GETLONG(zp->z_retry, cp);
|
||||
GETLONG(zp->z_expire, cp);
|
||||
GETLONG(zp->z_minimum, cp);
|
||||
if (cp != rdatap + dlen)
|
||||
return ("bad soa dlen");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#define BOUNDS_CHECK(ptr, count) \
|
||||
do { \
|
||||
if ((ptr) + (count) > eom) { \
|
||||
hp->rcode = FORMERR; \
|
||||
return (-1); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Parse the message, determine if it should be printed, and if so, print it
|
||||
* in .db file form.
|
||||
@@ -1202,7 +1223,7 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
int i, j, tab, result, class, type, dlen, n1, n;
|
||||
char data[BUFSIZ];
|
||||
u_char *cp1, *cp2, *temp_ptr, *eom, *rr_type_ptr;
|
||||
u_char *cdata;
|
||||
u_char *cdata, *rdatap;
|
||||
char *origin, *proto, dname[MAXDNAME];
|
||||
char *ignore = "";
|
||||
const char *badsoa_msg;
|
||||
@@ -1216,10 +1237,13 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
}
|
||||
cp += n;
|
||||
rr_type_ptr = cp;
|
||||
BOUNDS_CHECK(cp, 3 * INT16SZ + INT32SZ);
|
||||
GETSHORT(type, cp);
|
||||
GETSHORT(class, cp);
|
||||
GETLONG(ttl, cp);
|
||||
GETSHORT(dlen, cp);
|
||||
BOUNDS_CHECK(cp, dlen);
|
||||
rdatap = cp;
|
||||
|
||||
origin = strchr(dname, '.');
|
||||
if (origin == NULL)
|
||||
@@ -1294,10 +1318,7 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
cp += n;
|
||||
cp1 += strlen((char *) cp1) + 1;
|
||||
if (type == T_SOA) {
|
||||
if ((eom - cp) < (5 * INT32SZ)) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
BOUNDS_CHECK(cp, 5 * INT32SZ);
|
||||
temp_ptr = cp + 4 * INT32SZ;
|
||||
GETLONG(minimum_ttl, temp_ptr);
|
||||
n = 5 * INT32SZ;
|
||||
@@ -1311,24 +1332,31 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
|
||||
case T_NAPTR:
|
||||
/* Grab weight and port. */
|
||||
BOUNDS_CHECK(cp, INT16SZ*2);
|
||||
bcopy(cp, data, INT16SZ*2);
|
||||
cp1 = (u_char *) (data + INT16SZ*2);
|
||||
cp += INT16SZ*2;
|
||||
|
||||
/* Flags */
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
|
||||
/* Service */
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
|
||||
/* Regexp */
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
@@ -1352,11 +1380,13 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
case T_RT:
|
||||
case T_SRV:
|
||||
/* grab preference */
|
||||
BOUNDS_CHECK(cp, INT16SZ);
|
||||
bcopy((char *)cp, data, INT16SZ);
|
||||
cp1 = (u_char *)data + INT16SZ;
|
||||
cp += INT16SZ;
|
||||
|
||||
if (type == T_SRV) {
|
||||
BOUNDS_CHECK(cp, INT16SZ);
|
||||
bcopy((char *)cp, cp1, INT16SZ*2);
|
||||
cp1 += INT16SZ*2;
|
||||
cp += INT16SZ*2;
|
||||
@@ -1378,6 +1408,7 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
|
||||
case T_PX:
|
||||
/* grab preference */
|
||||
BOUNDS_CHECK(cp, INT16SZ);
|
||||
bcopy((char *)cp, data, INT16SZ);
|
||||
cp1 = (u_char *)data + INT16SZ;
|
||||
cp += INT16SZ;
|
||||
@@ -1408,6 +1439,7 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
|
||||
/* first just copy over the type_covered, algorithm, */
|
||||
/* labels, orig ttl, two timestamps, and the footprint */
|
||||
BOUNDS_CHECK(cp, 18);
|
||||
bcopy( cp, cp1, 18 );
|
||||
cp += 18;
|
||||
cp1 += 18;
|
||||
@@ -1423,8 +1455,10 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
/* finally, we copy over the variable-length signature.
|
||||
Its size is the total data length, minus what we copied. */
|
||||
n = dlen - (18 + n);
|
||||
if (n > (sizeof data) - (cp1 - (u_char *)data))
|
||||
if (n > (int)((sizeof data) - (int)(cp1 - (u_char *)data))) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1); /* out of room! */
|
||||
}
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n;
|
||||
cp1 += n;
|
||||
@@ -1448,6 +1482,14 @@ print_output(zp, serial_no, msg, msglen, rrp)
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
if (cp != rdatap + dlen) {
|
||||
dprintf(1, (ddt,
|
||||
"encoded rdata length is %u, but actual length was %u\n",
|
||||
dlen, (u_int)(cp - rdatap)));
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
cdata = cp1;
|
||||
result = cp - rrp;
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
|
||||
#ifdef NCACHE
|
||||
|
||||
#define BOUNDS_CHECK(ptr, count) \
|
||||
do { \
|
||||
if ((ptr) + (count) > eom) { \
|
||||
return; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
void
|
||||
cache_n_resp(msg, msglen)
|
||||
u_char *msg;
|
||||
@@ -28,7 +35,7 @@ cache_n_resp(msg, msglen)
|
||||
{
|
||||
register struct databuf *dp;
|
||||
HEADER *hp;
|
||||
u_char *cp;
|
||||
u_char *cp, *eom, *rdatap;
|
||||
char dname[MAXDNAME];
|
||||
int n;
|
||||
int type, class;
|
||||
@@ -36,19 +43,22 @@ cache_n_resp(msg, msglen)
|
||||
int Vcode;
|
||||
#endif
|
||||
int flags;
|
||||
u_int dlen;
|
||||
|
||||
nameserIncr(from_addr.sin_addr, nssRcvdNXD);
|
||||
|
||||
hp = (HEADER *)msg;
|
||||
cp = msg+HFIXEDSZ;
|
||||
eom = msg + msglen;
|
||||
|
||||
n = dn_expand(msg, msg + msglen, cp, dname, sizeof dname);
|
||||
n = dn_expand(msg, eom, cp, dname, sizeof dname);
|
||||
if (n < 0) {
|
||||
dprintf(1, (ddt, "Query expand name failed:cache_n_resp\n"));
|
||||
hp->rcode = FORMERR;
|
||||
return;
|
||||
}
|
||||
cp += n;
|
||||
BOUNDS_CHECK(cp, 2 * INT16SZ);
|
||||
GETSHORT(type, cp);
|
||||
GETSHORT(class, cp);
|
||||
dprintf(1, (ddt,
|
||||
@@ -76,13 +86,14 @@ cache_n_resp(msg, msglen)
|
||||
if (hp->rcode == NXDOMAIN)
|
||||
type = T_SOA;
|
||||
|
||||
/* store ther SOA record */
|
||||
n = dn_skipname(tp, msg + msglen);
|
||||
/* store their SOA record */
|
||||
n = dn_skipname(tp, eom);
|
||||
if (n < 0) {
|
||||
dprintf(3, (ddt, "ncache: form error\n"));
|
||||
return;
|
||||
}
|
||||
tp += n;
|
||||
BOUNDS_CHECK(tp, 3 * INT16SZ + INT32SZ);
|
||||
GETSHORT(atype, tp); /* type */
|
||||
if (atype != T_SOA) {
|
||||
dprintf(3, (ddt,
|
||||
@@ -91,10 +102,12 @@ cache_n_resp(msg, msglen)
|
||||
}
|
||||
tp += INT16SZ; /* class */
|
||||
GETLONG(ttl, tp); /* ttl */
|
||||
tp += INT16SZ; /* dlen */
|
||||
GETSHORT(dlen, tp); /* dlen */
|
||||
BOUNDS_CHECK(tp, dlen);
|
||||
rdatap = tp;
|
||||
|
||||
/* origin */
|
||||
n = dn_expand(msg, msg + msglen, tp, (char*)data, len);
|
||||
n = dn_expand(msg, eom, tp, (char*)data, len);
|
||||
if (n < 0) {
|
||||
dprintf(3, (ddt, "ncache: form error 2\n"));
|
||||
return;
|
||||
@@ -113,10 +126,17 @@ cache_n_resp(msg, msglen)
|
||||
n = strlen((char*)cp1) + 1;
|
||||
cp1 += n;
|
||||
len -= n;
|
||||
bcopy(tp, cp1, n = 5 * INT32SZ);
|
||||
n = 5 * INT32SZ;
|
||||
BOUNDS_CHECK(tp, n);
|
||||
bcopy(tp, cp1, n);
|
||||
/* serial, refresh, retry, expire, min */
|
||||
cp1 += n;
|
||||
len -= n;
|
||||
tp += n;
|
||||
if (tp != rdatap + dlen) {
|
||||
dprintf(3, (ddt, "ncache: form error 2\n"));
|
||||
return;
|
||||
}
|
||||
/* store the zone of the soa record */
|
||||
n = dn_expand(msg, msg + msglen, cp, (char*)cp1, len);
|
||||
if (n < 0) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static char sccsid[] = "@(#)ns_req.c 4.47 (Berkeley) 7/1/91";
|
||||
static char rcsid[] = "$Id: ns_req.c,v 8.28 1997/06/01 20:34:34 vixie Exp $";
|
||||
static char rcsid[] = "$Id: ns_req.c,v 8.29 1998/04/07 04:59:45 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@@ -328,6 +328,11 @@ req_notify(hp, cpp, eom, msg, from)
|
||||
hp->rcode = FORMERR;
|
||||
return (Finish);
|
||||
}
|
||||
if (*cpp + 2 * INT16SZ > eom) {
|
||||
dprintf(1, (ddt, "FORMERR notify too short"));
|
||||
hp->rcode = FORMERR;
|
||||
return (Finish);
|
||||
}
|
||||
*cpp += n;
|
||||
GETSHORT(type, *cpp);
|
||||
GETSHORT(class, *cpp);
|
||||
@@ -461,13 +466,13 @@ req_query(hp, cpp, eom, qsp, buflenp, msglenp, msg, dfd, from)
|
||||
return (Finish);
|
||||
}
|
||||
*cpp += n;
|
||||
GETSHORT(type, *cpp);
|
||||
GETSHORT(class, *cpp);
|
||||
if (*cpp > eom) {
|
||||
if (*cpp + 2 * INT16SZ > eom) {
|
||||
dprintf(1, (ddt, "FORMERR Query message length short\n"));
|
||||
hp->rcode = FORMERR;
|
||||
return (Finish);
|
||||
}
|
||||
GETSHORT(type, *cpp);
|
||||
GETSHORT(class, *cpp);
|
||||
if (*cpp < eom) {
|
||||
dprintf(6, (ddt,"message length > received message\n"));
|
||||
*msglenp = *cpp - msg;
|
||||
@@ -990,6 +995,11 @@ req_iquery(hp, cpp, eom, buflenp, msg, from)
|
||||
return (Finish);
|
||||
}
|
||||
*cpp += n;
|
||||
if (*cpp + 3 * INT16SZ + INT32SZ > eom) {
|
||||
dprintf(1, (ddt, "FORMERR IQuery message too short"));
|
||||
hp->rcode = FORMERR;
|
||||
return (Finish);
|
||||
}
|
||||
GETSHORT(type, *cpp);
|
||||
GETSHORT(class, *cpp);
|
||||
*cpp += INT32SZ; /* ttl */
|
||||
@@ -1007,7 +1017,7 @@ req_iquery(hp, cpp, eom, buflenp, msg, from)
|
||||
switch (type) {
|
||||
case T_A:
|
||||
#ifndef INVQ
|
||||
if (!fake_iquery)
|
||||
if (!fake_iquery || dlen != INT32SZ)
|
||||
return (Refuse);
|
||||
#endif
|
||||
#ifdef INVQ
|
||||
@@ -1021,7 +1031,10 @@ req_iquery(hp, cpp, eom, buflenp, msg, from)
|
||||
dprintf(1, (ddt, "req: IQuery class %d type %d\n", class, type));
|
||||
|
||||
fname = (char *)msg + HFIXEDSZ;
|
||||
bcopy(fname, anbuf, alen = (char *)*cpp - fname);
|
||||
alen = (char *)*cpp - fname;
|
||||
if ((size_t)alen > sizeof anbuf)
|
||||
return (Refuse);
|
||||
bcopy(fname, anbuf, alen);
|
||||
data = anbuf + alen - dlen;
|
||||
*cpp = (u_char *)fname;
|
||||
*buflenp -= HFIXEDSZ;
|
||||
@@ -1068,6 +1081,10 @@ req_iquery(hp, cpp, eom, buflenp, msg, from)
|
||||
return (Finish);
|
||||
}
|
||||
*cpp += n;
|
||||
if (*cpp + 2 * INT16SZ > dnbuf + *buflenp) {
|
||||
hp->tc = 1;
|
||||
return (Finish);
|
||||
}
|
||||
PUTSHORT((u_int16_t)dp->d_type, *cpp);
|
||||
PUTSHORT((u_int16_t)dp->d_class, *cpp);
|
||||
*buflenp -= n;
|
||||
@@ -1256,6 +1273,8 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
}
|
||||
|
||||
buflen -= RRFIXEDSZ;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
#if defined(RETURNSOA) && defined(NCACHE)
|
||||
if (dp->d_rcode) {
|
||||
name = (char *)dp->d_data;
|
||||
@@ -1269,6 +1288,8 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
return (-1);
|
||||
cp = buf + n;
|
||||
buflen -= n;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
PUTSHORT((u_int16_t)type, cp);
|
||||
PUTSHORT((u_int16_t)dp->d_class, cp);
|
||||
PUTLONG(ttl, cp);
|
||||
@@ -1308,6 +1329,8 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
return (-1);
|
||||
cp += n;
|
||||
buflen -= type == T_SOA ? n + 5 * INT32SZ : n;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
cp1 += strlen((char *)cp1) + 1;
|
||||
n = dn_comp((char *)cp1, cp, buflen, dnptrs, edp);
|
||||
if (n < 0)
|
||||
@@ -1326,10 +1349,10 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
/* cp1 == our data/ cp == data of RR */
|
||||
cp1 = dp->d_data;
|
||||
|
||||
if ((buflen -= INT16SZ) < 0)
|
||||
return (-1);
|
||||
|
||||
/* copy order */
|
||||
buflen -= INT16SZ;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
bcopy(cp1, cp, INT16SZ);
|
||||
cp += INT16SZ;
|
||||
cp1 += INT16SZ;
|
||||
@@ -1337,6 +1360,9 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
dprintf(1, (ddt, "current size n = %u\n", n));
|
||||
|
||||
/* copy preference */
|
||||
buflen -= INT16SZ;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
bcopy(cp1, cp, INT16SZ);
|
||||
cp += INT16SZ;
|
||||
cp1 += INT16SZ;
|
||||
@@ -1345,6 +1371,9 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
|
||||
/* Flags */
|
||||
n = *cp1++;
|
||||
buflen -= n + 1;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
dprintf(1, (ddt, "size of n at flags = %d\n", n));
|
||||
*cp++ = n;
|
||||
bcopy(cp1,cp,n);
|
||||
@@ -1355,6 +1384,9 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
|
||||
/* Service */
|
||||
n = *cp1++;
|
||||
buflen -= n + 1;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
*cp++ = n;
|
||||
bcopy(cp1,cp,n);
|
||||
cp += n;
|
||||
@@ -1364,6 +1396,9 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
|
||||
/* Regexp */
|
||||
n = *cp1++;
|
||||
buflen -= n + 1;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
*cp++ = n;
|
||||
bcopy(cp1,cp,n);
|
||||
cp += n;
|
||||
@@ -1402,6 +1437,9 @@ make_rr(name, dp, buf, buflen, doadd)
|
||||
cp1 += INT16SZ;
|
||||
|
||||
if (type == T_SRV) {
|
||||
buflen -= INT16SZ*2;
|
||||
if (buflen < 0)
|
||||
return (-1);
|
||||
bcopy(cp1, cp, INT16SZ*2);
|
||||
cp += INT16SZ*2;
|
||||
cp1 += INT16SZ*2;
|
||||
|
||||
+117
-43
@@ -1,6 +1,6 @@
|
||||
#if !defined(lint) && !defined(SABER)
|
||||
static char sccsid[] = "@(#)ns_resp.c 4.65 (Berkeley) 3/3/91";
|
||||
static char rcsid[] = "$Id: ns_resp.c,v 8.38 1997/06/01 20:34:34 vixie Exp vixie $";
|
||||
static char rcsid[] = "$Id: ns_resp.c,v 8.41 1998/04/07 04:59:45 vixie Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@@ -132,7 +132,8 @@ struct flush_set {
|
||||
static void rrsetadd __P((struct flush_set *, char *,
|
||||
struct databuf *)),
|
||||
rrsetupdate __P((struct flush_set *, int flags)),
|
||||
flushrrset __P((struct flush_set *));
|
||||
flushrrset __P((struct flush_set *)),
|
||||
free_flushset __P((struct flush_set *));
|
||||
static int rrsetcmp __P((char *, struct db_list *)),
|
||||
check_root __P((void)),
|
||||
check_ns __P((void)),
|
||||
@@ -239,7 +240,7 @@ ns_resp(msg, msglen)
|
||||
register struct databuf *ns, *ns2;
|
||||
register u_char *cp;
|
||||
u_char *eom = msg + msglen;
|
||||
struct flush_set *flushset;
|
||||
struct flush_set *flushset = NULL;
|
||||
struct sockaddr_in *nsa;
|
||||
struct databuf *nsp[NSMAX];
|
||||
int i, c, n, qdcount, ancount, aucount, nscount, arcount, arfirst;
|
||||
@@ -264,8 +265,6 @@ ns_resp(msg, msglen)
|
||||
struct fwdinfo *fwd;
|
||||
char *tname = NULL;
|
||||
|
||||
free_related_additional();
|
||||
|
||||
nameserIncr(from_addr.sin_addr, nssRcvdR);
|
||||
nsp[0] = NULL;
|
||||
hp = (HEADER *) msg;
|
||||
@@ -302,6 +301,10 @@ ns_resp(msg, msglen)
|
||||
goto formerr;
|
||||
}
|
||||
cp += n;
|
||||
if (cp + 2 * INT16SZ > eom) {
|
||||
formerrmsg = outofDataQuery;
|
||||
goto formerr;
|
||||
}
|
||||
GETSHORT(qtype, cp);
|
||||
GETSHORT(qclass, cp);
|
||||
if (!ns_nameok(qname, qclass, response_trans,
|
||||
@@ -581,16 +584,12 @@ ns_resp(msg, msglen)
|
||||
goto formerr;
|
||||
}
|
||||
tp += n;
|
||||
if (tp + 2 * INT16SZ > eom) {
|
||||
formerrmsg = outofDataAuth;
|
||||
goto formerr;
|
||||
}
|
||||
GETSHORT(type, tp);
|
||||
if (tp >= eom) {
|
||||
formerrmsg = outofDataAuth;
|
||||
goto formerr;
|
||||
}
|
||||
GETSHORT(class, tp);
|
||||
if (tp >= eom) {
|
||||
formerrmsg = outofDataAuth;
|
||||
goto formerr;
|
||||
}
|
||||
if (!ns_nameok(name, class, response_trans,
|
||||
ns_ownercontext(type, response_trans),
|
||||
name, from_addr.sin_addr)) {
|
||||
@@ -645,6 +644,7 @@ ns_resp(msg, msglen)
|
||||
u_int16_t type, class, dlen;
|
||||
u_int32_t serial;
|
||||
u_char *tp = cp;
|
||||
u_char *rdatap;
|
||||
|
||||
n = dn_expand(msg, eom, tp, name, sizeof name);
|
||||
if (n < 0) {
|
||||
@@ -652,14 +652,15 @@ ns_resp(msg, msglen)
|
||||
goto formerr;
|
||||
}
|
||||
tp += n; /* name */
|
||||
if (tp + 3 * INT16SZ + INT32SZ > eom) {
|
||||
formerrmsg = outofDataAnswer;
|
||||
goto formerr;
|
||||
}
|
||||
GETSHORT(type, tp); /* type */
|
||||
GETSHORT(class, tp); /* class */
|
||||
tp += INT32SZ; /* ttl */
|
||||
GETSHORT(dlen, tp); /* dlen */
|
||||
if (tp >= eom) {
|
||||
formerrmsg = outofDataAnswer;
|
||||
goto formerr;
|
||||
}
|
||||
rdatap = tp; /* start of rdata */
|
||||
if (!ns_nameok(name, class, response_trans,
|
||||
ns_ownercontext(type, response_trans),
|
||||
name, from_addr.sin_addr)) {
|
||||
@@ -675,10 +676,6 @@ ns_resp(msg, msglen)
|
||||
formerrmsg = msgbuf;
|
||||
goto formerr;
|
||||
}
|
||||
if ((u_int)dlen < (5 * INT32SZ)) {
|
||||
formerrmsg = dlenUnderrunAnswer;
|
||||
goto formerr;
|
||||
}
|
||||
|
||||
if (0 >= (n = dn_skipname(tp, eom))) {
|
||||
formerrmsg = skipnameFailedAnswer;
|
||||
@@ -690,7 +687,16 @@ ns_resp(msg, msglen)
|
||||
goto formerr;
|
||||
}
|
||||
tp += n; /* rname */
|
||||
if (tp + 5 * INT32SZ > eom) {
|
||||
formerrmsg = dlenUnderrunAnswer;
|
||||
goto formerr;
|
||||
}
|
||||
GETLONG(serial, tp);
|
||||
tp += 4 * INT32SZ; /* Skip rest of SOA. */
|
||||
if ((u_int)(tp - rdatap) != dlen) {
|
||||
formerrmsg = dlenOverrunAnswer;
|
||||
goto formerr;
|
||||
}
|
||||
|
||||
qserial_answer(qp, serial);
|
||||
qremove(qp);
|
||||
@@ -786,12 +792,18 @@ ns_resp(msg, msglen)
|
||||
|
||||
maybe_free(&tname);
|
||||
if (cp >= eom) {
|
||||
free_related_additional();
|
||||
if (flushset != NULL)
|
||||
free_flushset(flushset);
|
||||
formerrmsg = outofDataFinal;
|
||||
goto formerr;
|
||||
}
|
||||
n = rrextract(msg, msglen, cp, &dp, name, sizeof name, &tname);
|
||||
if (n < 0) {
|
||||
free_related_additional();
|
||||
maybe_free(&tname);
|
||||
if (flushset != NULL)
|
||||
free_flushset(flushset);
|
||||
formerrmsg = outofDataFinal;
|
||||
goto formerr;
|
||||
}
|
||||
@@ -921,13 +933,11 @@ ns_resp(msg, msglen)
|
||||
}
|
||||
rrsetadd(flushset, name, dp);
|
||||
}
|
||||
free_related_additional();
|
||||
maybe_free(&tname);
|
||||
if (flushset) {
|
||||
rrsetupdate(flushset, dbflags);
|
||||
for (i = 0; i < count; i++)
|
||||
if (flushset[i].fs_name)
|
||||
free(flushset[i].fs_name);
|
||||
free((char*)flushset);
|
||||
free_flushset(flushset);
|
||||
}
|
||||
if (lastwascname && !externalcname)
|
||||
syslog(LOG_DEBUG, "%s (%s)", danglingCname, aname);
|
||||
@@ -1365,6 +1375,14 @@ ns_resp(msg, msglen)
|
||||
return;
|
||||
}
|
||||
|
||||
#define BOUNDS_CHECK(ptr, count) \
|
||||
do { \
|
||||
if ((ptr) + (count) > eom) { \
|
||||
hp->rcode = FORMERR; \
|
||||
return (-1); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static int
|
||||
rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
u_char *msg;
|
||||
@@ -1375,7 +1393,7 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
int namelen;
|
||||
char **tnamep;
|
||||
{
|
||||
register u_char *cp;
|
||||
register u_char *cp, *eom, *rdatap;
|
||||
register int n;
|
||||
int class, type, dlen, n1;
|
||||
u_int32_t ttl;
|
||||
@@ -1389,15 +1407,19 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
|
||||
*dpp = NULL;
|
||||
cp = rrp;
|
||||
if ((n = dn_expand(msg, msg + msglen, cp, dname, namelen)) < 0) {
|
||||
eom = msg + msglen;
|
||||
if ((n = dn_expand(msg, eom, cp, dname, namelen)) < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
cp += n;
|
||||
BOUNDS_CHECK(cp, 2*INT16SZ + INT32SZ + INT16SZ);
|
||||
GETSHORT(type, cp);
|
||||
GETSHORT(class, cp);
|
||||
GETLONG(ttl, cp);
|
||||
GETSHORT(dlen, cp);
|
||||
BOUNDS_CHECK(cp, dlen);
|
||||
rdatap = cp;
|
||||
if (!ns_nameok(dname, class, response_trans,
|
||||
ns_ownercontext(type, response_trans),
|
||||
dname, from_addr.sin_addr)) {
|
||||
@@ -1456,8 +1478,7 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
case T_MR:
|
||||
case T_NS:
|
||||
case T_PTR:
|
||||
n = dn_expand(msg, msg + msglen, cp,
|
||||
(char *)data, sizeof data);
|
||||
n = dn_expand(msg, eom, cp, (char *)data, sizeof data);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
@@ -1483,8 +1504,7 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
context = mailname_ctx;
|
||||
/* FALLTHROUGH */
|
||||
soa_rp_minfo:
|
||||
n = dn_expand(msg, msg + msglen, cp,
|
||||
(char *)data, sizeof data);
|
||||
n = dn_expand(msg, eom, cp, (char *)data, sizeof data);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
@@ -1495,11 +1515,15 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
return (-1);
|
||||
}
|
||||
cp += n;
|
||||
/*
|
||||
* The next use of 'cp' is dn_expand(), so we don't have
|
||||
* to BOUNDS_CHECK() here.
|
||||
*/
|
||||
cp1 = data + (n = strlen((char *)data) + 1);
|
||||
n1 = sizeof(data) - n;
|
||||
if (type == T_SOA)
|
||||
n1 -= 5 * INT32SZ;
|
||||
n = dn_expand(msg, msg + msglen, cp, (char *)cp1, n1);
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1, n1);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
@@ -1516,7 +1540,9 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
cp += n;
|
||||
cp1 += strlen((char *)cp1) + 1;
|
||||
if (type == T_SOA) {
|
||||
bcopy(cp, cp1, n = 5 * INT32SZ);
|
||||
n = 5 * INT32SZ;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n;
|
||||
cp1 += n;
|
||||
}
|
||||
@@ -1526,30 +1552,37 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
|
||||
case T_NAPTR:
|
||||
/* Grab weight and port. */
|
||||
BOUNDS_CHECK(cp, INT16SZ*2);
|
||||
bcopy(cp, data, INT16SZ*2);
|
||||
cp1 = data + INT16SZ*2;
|
||||
cp += INT16SZ*2;
|
||||
|
||||
/* Flags */
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
|
||||
/* Service */
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
|
||||
/* Regexp */
|
||||
BOUNDS_CHECK(cp, 1);
|
||||
n = *cp++;
|
||||
BOUNDS_CHECK(cp, n);
|
||||
*cp1++ = n;
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n; cp1 += n;
|
||||
|
||||
/* Replacement */
|
||||
n = dn_expand(msg, msg + msglen, cp, (char *)cp1,
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1,
|
||||
sizeof data - (cp1 - data));
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
@@ -1574,19 +1607,21 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
case T_RT:
|
||||
case T_SRV:
|
||||
/* grab preference */
|
||||
BOUNDS_CHECK(cp, INT16SZ);
|
||||
bcopy(cp, data, INT16SZ);
|
||||
cp1 = data + INT16SZ;
|
||||
cp += INT16SZ;
|
||||
|
||||
if (type == T_SRV) {
|
||||
/* Grab weight and port. */
|
||||
BOUNDS_CHECK(cp, INT16SZ*2);
|
||||
bcopy(cp, cp1, INT16SZ*2);
|
||||
cp1 += INT16SZ*2;
|
||||
cp += INT16SZ*2;
|
||||
}
|
||||
|
||||
/* get name */
|
||||
n = dn_expand(msg, msg + msglen, cp, (char *)cp1,
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1,
|
||||
sizeof data - (cp1 - data));
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
@@ -1611,13 +1646,14 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
|
||||
case T_PX:
|
||||
/* grab preference */
|
||||
BOUNDS_CHECK(cp, INT16SZ);
|
||||
bcopy(cp, data, INT16SZ);
|
||||
cp1 = data + INT16SZ;
|
||||
cp += INT16SZ;
|
||||
|
||||
/* get MAP822 name */
|
||||
n = dn_expand(msg, msg + msglen, cp, (char *)cp1,
|
||||
sizeof data - INT16SZ);
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1,
|
||||
sizeof data - INT16SZ);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
@@ -1628,9 +1664,13 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
return (-1);
|
||||
}
|
||||
cp += n;
|
||||
/*
|
||||
* The next use of 'cp' is dn_expand(), so we don't have
|
||||
* to BOUNDS_CHECK() here.
|
||||
*/
|
||||
cp1 += (n = strlen((char *)cp1) + 1);
|
||||
n1 = sizeof(data) - n;
|
||||
n = dn_expand(msg, msg + msglen, cp, (char *)cp1, n1);
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1, n1);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
@@ -1653,6 +1693,7 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
/* This code is similar to that in db_load.c. */
|
||||
|
||||
/* Skip coveredType, alg, labels */
|
||||
BOUNDS_CHECK(cp, INT16SZ + 1 + 1 + 3*INT32SZ);
|
||||
cp1 = cp + INT16SZ + 1 + 1;
|
||||
GETLONG(origTTL, cp1);
|
||||
GETLONG(exptime, cp1);
|
||||
@@ -1697,23 +1738,31 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
|
||||
/* first just copy over the type_covered, algorithm, */
|
||||
/* labels, orig ttl, two timestamps, and the footprint */
|
||||
BOUNDS_CHECK(cp, 18);
|
||||
bcopy(cp, cp1, 18);
|
||||
cp += 18;
|
||||
cp1 += 18;
|
||||
|
||||
/* then the signer's name */
|
||||
n = dn_expand(msg, msg + msglen, cp,
|
||||
(char *)cp1, (sizeof data) - 18);
|
||||
if (n < 0)
|
||||
n = dn_expand(msg, eom, cp, (char *)cp1, (sizeof data) - 18);
|
||||
if (n < 0) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
cp += n;
|
||||
cp1 += strlen((char*)cp1)+1;
|
||||
|
||||
/* finally, we copy over the variable-length signature.
|
||||
Its size is the total data length, minus what we copied. */
|
||||
if (18 + (u_int)n > dlen) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
n = dlen - (18 + n);
|
||||
if (n > (sizeof data) - (cp1 - (u_char *)data))
|
||||
if (n > ((int)(sizeof data) - (int)(cp1 - (u_char *)data))) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1); /* out of room! */
|
||||
}
|
||||
bcopy(cp, cp1, n);
|
||||
cp += n;
|
||||
cp1 += n;
|
||||
@@ -1728,6 +1777,18 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
|
||||
dprintf(3, (ddt, "unknown type %d\n", type));
|
||||
return ((cp - rrp) + dlen);
|
||||
}
|
||||
|
||||
if (cp > eom) {
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
if ((u_int)(cp - rdatap) != dlen) {
|
||||
dprintf(3, (ddt,
|
||||
"encoded rdata length is %u, but actual length was %u",
|
||||
dlen, (u_int)(cp - rdatap)));
|
||||
hp->rcode = FORMERR;
|
||||
return (-1);
|
||||
}
|
||||
if (n > MAXDATA) {
|
||||
dprintf(1, (ddt,
|
||||
"update type %d: %d bytes is too much data\n",
|
||||
@@ -3063,6 +3124,17 @@ flushrrset(fs)
|
||||
db_free(dp);
|
||||
}
|
||||
|
||||
static void
|
||||
free_flushset(flushset)
|
||||
struct flush_set *flushset;
|
||||
{
|
||||
struct flush_set *fs;
|
||||
|
||||
for (fs = flushset; fs->fs_name != NULL; fs++)
|
||||
free(fs->fs_name);
|
||||
free((char *)flushset);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is best thought of as a "cache invalidate" function.
|
||||
* It is called whenever a piece of data is determined to have
|
||||
@@ -3125,8 +3197,10 @@ add_related_additional(name)
|
||||
if (num_related >= MAX_RELATED - 1)
|
||||
return;
|
||||
for (i = 0; i < num_related; i++)
|
||||
if (strcasecmp(name, related[i]) == 0)
|
||||
if (strcasecmp(name, related[i]) == 0) {
|
||||
free(name);
|
||||
return;
|
||||
}
|
||||
related[num_related++] = name;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
|
||||
static char rcsid[] = "$Id: gethnamaddr.c,v 8.21 1997/06/01 20:34:37 vixie Exp $";
|
||||
static char rcsid[] = "$Id: gethnamaddr.c,v 8.23 1998/04/07 04:59:46 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -152,6 +152,23 @@ dprintf(msg, num)
|
||||
# define dprintf(msg, num) /*nada*/
|
||||
#endif
|
||||
|
||||
#define BOUNDED_INCR(x) \
|
||||
do { \
|
||||
cp += x; \
|
||||
if (cp > eom) { \
|
||||
h_errno = NO_RECOVERY; \
|
||||
return (NULL); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define BOUNDS_CHECK(ptr, count) \
|
||||
do { \
|
||||
if ((ptr) + (count) > eom) { \
|
||||
h_errno = NO_RECOVERY; \
|
||||
return (NULL); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static struct hostent *
|
||||
getanswer(answer, anslen, qname, qtype)
|
||||
const querybuf *answer;
|
||||
@@ -162,7 +179,7 @@ getanswer(answer, anslen, qname, qtype)
|
||||
register const HEADER *hp;
|
||||
register const u_char *cp;
|
||||
register int n;
|
||||
const u_char *eom;
|
||||
const u_char *eom, *erdata;
|
||||
char *bp, **ap, **hap;
|
||||
int type, class, buflen, ancount, qdcount;
|
||||
int haveanswer, had_error;
|
||||
@@ -193,7 +210,8 @@ getanswer(answer, anslen, qname, qtype)
|
||||
qdcount = ntohs(hp->qdcount);
|
||||
bp = hostbuf;
|
||||
buflen = sizeof hostbuf;
|
||||
cp = answer->buf + HFIXEDSZ;
|
||||
cp = answer->buf;
|
||||
BOUNDED_INCR(HFIXEDSZ);
|
||||
if (qdcount != 1) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
@@ -203,7 +221,7 @@ getanswer(answer, anslen, qname, qtype)
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
}
|
||||
cp += n + QFIXEDSZ;
|
||||
BOUNDED_INCR(n + QFIXEDSZ);
|
||||
if (qtype == T_A || qtype == T_AAAA) {
|
||||
/* res_send() has already verified that the query name is the
|
||||
* same as the one we sent; this just gets the expanded name
|
||||
@@ -235,12 +253,15 @@ getanswer(answer, anslen, qname, qtype)
|
||||
continue;
|
||||
}
|
||||
cp += n; /* name */
|
||||
BOUNDS_CHECK(cp, 3 * INT16SZ + INT32SZ);
|
||||
type = _getshort(cp);
|
||||
cp += INT16SZ; /* type */
|
||||
class = _getshort(cp);
|
||||
cp += INT16SZ + INT32SZ; /* class, TTL */
|
||||
n = _getshort(cp);
|
||||
cp += INT16SZ; /* len */
|
||||
BOUNDS_CHECK(cp, n);
|
||||
erdata = cp + n;
|
||||
if (class != C_IN) {
|
||||
/* XXX - debug? syslog? */
|
||||
cp += n;
|
||||
@@ -255,6 +276,10 @@ getanswer(answer, anslen, qname, qtype)
|
||||
continue;
|
||||
}
|
||||
cp += n;
|
||||
if (cp != erdata) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
}
|
||||
/* Store alias. */
|
||||
*ap++ = bp;
|
||||
n = strlen(bp) + 1; /* for the \0 */
|
||||
@@ -283,6 +308,10 @@ getanswer(answer, anslen, qname, qtype)
|
||||
continue;
|
||||
}
|
||||
cp += n;
|
||||
if (cp != erdata) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
}
|
||||
/* Get canonical name. */
|
||||
n = strlen(tbuf) + 1; /* for the \0 */
|
||||
if (n > buflen || n >= MAXHOSTNAMELEN) {
|
||||
@@ -318,6 +347,10 @@ getanswer(answer, anslen, qname, qtype)
|
||||
}
|
||||
#if MULTI_PTRS_ARE_ALIASES
|
||||
cp += n;
|
||||
if (cp != erdata) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
}
|
||||
if (!haveanswer)
|
||||
host.h_name = bp;
|
||||
else if (ap < &host_aliases[MAXALIASES-1])
|
||||
@@ -388,6 +421,10 @@ getanswer(answer, anslen, qname, qtype)
|
||||
bp += n;
|
||||
buflen -= n;
|
||||
cp += n;
|
||||
if (cp != erdata) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return (NULL);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
|
||||
+668
-242
@@ -55,7 +55,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)res_comp.c 8.1 (Berkeley) 6/4/93";
|
||||
static char rcsid[] = "$Id: res_comp.c,v 8.12 1997/06/01 20:34:37 vixie Exp $";
|
||||
static char rcsid[] = "$Id: res_comp.c,v 8.13 1998/04/07 04:24:06 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@@ -63,9 +63,10 @@ static char rcsid[] = "$Id: res_comp.c,v 8.12 1997/06/01 20:34:37 vixie Exp $";
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/nameser.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <resolv.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <resolv.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(BSD) && (BSD >= 199103)
|
||||
# include <unistd.h>
|
||||
@@ -74,8 +75,17 @@ static char rcsid[] = "$Id: res_comp.c,v 8.12 1997/06/01 20:34:37 vixie Exp $";
|
||||
# include "../conf/portability.h"
|
||||
#endif
|
||||
|
||||
static int dn_find __P((u_char *exp_dn, u_char *msg,
|
||||
u_char **dnptrs, u_char **lastdnptr));
|
||||
static int ns_name_ntop __P((const u_char *, char *, size_t));
|
||||
static int ns_name_pton __P((const char *, u_char *, size_t));
|
||||
static int ns_name_unpack __P((const u_char *, const u_char *,
|
||||
const u_char *, u_char *, size_t));
|
||||
static int ns_name_pack __P((const u_char *, u_char *, int,
|
||||
const u_char **, const u_char **));
|
||||
static int ns_name_uncompress __P((const u_char *, const u_char *,
|
||||
const u_char *, char *, size_t));
|
||||
static int ns_name_compress __P((const char *, u_char *, size_t,
|
||||
const u_char **, const u_char **));
|
||||
static int ns_name_skip __P((const u_char **, const u_char *));
|
||||
|
||||
/*
|
||||
* Expand compressed domain name 'comp_dn' to full domain name.
|
||||
@@ -85,261 +95,40 @@ static int dn_find __P((u_char *exp_dn, u_char *msg,
|
||||
* Return size of compressed name or -1 if there was an error.
|
||||
*/
|
||||
int
|
||||
dn_expand(msg, eomorig, comp_dn, exp_dn, length)
|
||||
const u_char *msg, *eomorig, *comp_dn;
|
||||
char *exp_dn;
|
||||
int length;
|
||||
dn_expand(const u_char *msg, const u_char *eom, const u_char *src,
|
||||
char *dst, int dstsiz)
|
||||
{
|
||||
register const u_char *cp;
|
||||
register char *dn;
|
||||
register int n, c;
|
||||
char *eom;
|
||||
int len = -1, checked = 0, octets = 0;
|
||||
int n = ns_name_uncompress(msg, eom, src, dst, (size_t)dstsiz);
|
||||
|
||||
dn = exp_dn;
|
||||
cp = comp_dn;
|
||||
eom = exp_dn + length;
|
||||
/*
|
||||
* fetch next label in domain name
|
||||
*/
|
||||
while (n = *cp++) {
|
||||
/*
|
||||
* Check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK) {
|
||||
case 0:
|
||||
octets += (n + 1);
|
||||
if (octets > MAXCDNAME)
|
||||
return (-1);
|
||||
if (dn != exp_dn) {
|
||||
if (dn >= eom)
|
||||
return (-1);
|
||||
*dn++ = '.';
|
||||
}
|
||||
if (dn+n >= eom)
|
||||
return (-1);
|
||||
checked += n + 1;
|
||||
while (--n >= 0) {
|
||||
if (((c = *cp++) == '.') || (c == '\\')) {
|
||||
if (dn + n + 2 >= eom)
|
||||
return (-1);
|
||||
*dn++ = '\\';
|
||||
}
|
||||
*dn++ = c;
|
||||
if (cp >= eomorig) /* out of range */
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
|
||||
case INDIR_MASK:
|
||||
if (len < 0)
|
||||
len = cp - comp_dn + 1;
|
||||
cp = msg + (((n & 0x3f) << 8) | (*cp & 0xff));
|
||||
if (cp < msg || cp >= eomorig) /* out of range */
|
||||
return (-1);
|
||||
checked += 2;
|
||||
/*
|
||||
* Check for loops in the compressed name;
|
||||
* if we've looked at the whole message,
|
||||
* there must be a loop.
|
||||
*/
|
||||
if (checked >= eomorig - msg)
|
||||
return (-1);
|
||||
break;
|
||||
|
||||
default:
|
||||
return (-1); /* flag error */
|
||||
}
|
||||
}
|
||||
*dn = '\0';
|
||||
if (len < 0)
|
||||
len = cp - comp_dn;
|
||||
return (len);
|
||||
if (n > 0 && dst[0] == '.')
|
||||
dst[0] = '\0';
|
||||
return (n);
|
||||
}
|
||||
|
||||
/*
|
||||
* Compress domain name 'exp_dn' into 'comp_dn'.
|
||||
* Pack domain name 'exp_dn' in presentation form into 'comp_dn'.
|
||||
* Return the size of the compressed name or -1.
|
||||
* 'length' is the size of the array pointed to by 'comp_dn'.
|
||||
* 'dnptrs' is a list of pointers to previous compressed names. dnptrs[0]
|
||||
* is a pointer to the beginning of the message. The list ends with NULL.
|
||||
* 'lastdnptr' is a pointer to the end of the arrary pointed to
|
||||
* by 'dnptrs'. Side effect is to update the list of pointers for
|
||||
* labels inserted into the message as we compress the name.
|
||||
* If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
|
||||
* is NULL, we don't update the list.
|
||||
*/
|
||||
int
|
||||
dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
|
||||
const char *exp_dn;
|
||||
u_char *comp_dn, **dnptrs, **lastdnptr;
|
||||
int length;
|
||||
dn_comp(const char *src, u_char *dst, int dstsiz,
|
||||
u_char **dnptrs, u_char **lastdnptr)
|
||||
{
|
||||
register u_char *cp, *dn;
|
||||
register int c, l;
|
||||
u_char **cpp, **lpp, *sp, *eob;
|
||||
u_char *msg;
|
||||
|
||||
dn = (u_char *)exp_dn;
|
||||
cp = comp_dn;
|
||||
if (length > MAXCDNAME)
|
||||
length = MAXCDNAME;
|
||||
eob = cp + length;
|
||||
lpp = cpp = NULL;
|
||||
if (dnptrs != NULL) {
|
||||
if ((msg = *dnptrs++) != NULL) {
|
||||
for (cpp = dnptrs; *cpp != NULL; cpp++)
|
||||
;
|
||||
lpp = cpp; /* end of list to search */
|
||||
}
|
||||
} else
|
||||
msg = NULL;
|
||||
for (c = *dn++; c != '\0'; ) {
|
||||
/* look to see if we can use pointers */
|
||||
if (msg != NULL) {
|
||||
if ((l = dn_find(dn-1, msg, dnptrs, lpp)) >= 0) {
|
||||
if (cp+1 >= eob)
|
||||
return (-1);
|
||||
*cp++ = (l >> 8) | INDIR_MASK;
|
||||
*cp++ = l % 256;
|
||||
return (cp - comp_dn);
|
||||
}
|
||||
/* not found, save it */
|
||||
if (lastdnptr != NULL && cpp < lastdnptr-1) {
|
||||
*cpp++ = cp;
|
||||
*cpp = NULL;
|
||||
}
|
||||
}
|
||||
sp = cp++; /* save ptr to length byte */
|
||||
do {
|
||||
if (c == '.') {
|
||||
c = *dn++;
|
||||
break;
|
||||
}
|
||||
if (c == '\\') {
|
||||
if ((c = *dn++) == '\0')
|
||||
break;
|
||||
}
|
||||
if (cp >= eob) {
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*cp++ = c;
|
||||
} while ((c = *dn++) != '\0');
|
||||
/* catch trailing '.'s but not '..' */
|
||||
if ((l = cp - sp - 1) == 0 && c == '\0') {
|
||||
cp--;
|
||||
break;
|
||||
}
|
||||
if (l <= 0 || l > MAXLABEL) {
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*sp = l;
|
||||
}
|
||||
if (cp >= eob) {
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
return (-1);
|
||||
}
|
||||
*cp++ = '\0';
|
||||
return (cp - comp_dn);
|
||||
return (ns_name_compress(src, dst, (size_t)dstsiz,
|
||||
(const u_char **)dnptrs,
|
||||
(const u_char **)lastdnptr));
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip over a compressed domain name. Return the size or -1.
|
||||
*/
|
||||
int
|
||||
__dn_skipname(comp_dn, eom)
|
||||
const u_char *comp_dn, *eom;
|
||||
{
|
||||
register const u_char *cp;
|
||||
register int n;
|
||||
__dn_skipname(const u_char *ptr, const u_char *eom) {
|
||||
const u_char *saveptr = ptr;
|
||||
|
||||
cp = comp_dn;
|
||||
while (cp < eom && (n = *cp++)) {
|
||||
/*
|
||||
* check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK) {
|
||||
case 0: /* normal case, n == len */
|
||||
cp += n;
|
||||
continue;
|
||||
case INDIR_MASK: /* indirection */
|
||||
cp++;
|
||||
break;
|
||||
default: /* illegal type */
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (cp > eom)
|
||||
if (ns_name_skip(&ptr, eom) == -1)
|
||||
return (-1);
|
||||
return (cp - comp_dn);
|
||||
}
|
||||
|
||||
static int
|
||||
mklower(ch)
|
||||
register int ch;
|
||||
{
|
||||
if (isascii(ch) && isupper(ch))
|
||||
return (tolower(ch));
|
||||
return (ch);
|
||||
}
|
||||
|
||||
/*
|
||||
* Search for expanded name from a list of previously compressed names.
|
||||
* Return the offset from msg if found or -1.
|
||||
* dnptrs is the pointer to the first name on the list,
|
||||
* not the pointer to the start of the message.
|
||||
*/
|
||||
static int
|
||||
dn_find(exp_dn, msg, dnptrs, lastdnptr)
|
||||
u_char *exp_dn, *msg;
|
||||
u_char **dnptrs, **lastdnptr;
|
||||
{
|
||||
register u_char *dn, *cp, **cpp;
|
||||
register int n;
|
||||
u_char *sp;
|
||||
|
||||
for (cpp = dnptrs; cpp < lastdnptr; cpp++) {
|
||||
dn = exp_dn;
|
||||
sp = cp = *cpp;
|
||||
while (n = *cp++) {
|
||||
/*
|
||||
* check for indirection
|
||||
*/
|
||||
switch (n & INDIR_MASK) {
|
||||
case 0: /* normal case, n == len */
|
||||
while (--n >= 0) {
|
||||
if (*dn == '.')
|
||||
goto next;
|
||||
if (*dn == '\\')
|
||||
dn++;
|
||||
if (mklower(*dn++) != mklower(*cp++))
|
||||
goto next;
|
||||
}
|
||||
if ((n = *dn++) == '\0' && *cp == '\0')
|
||||
return (sp - msg);
|
||||
if (n == '.')
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
case INDIR_MASK: /* indirection */
|
||||
cp = msg + (((n & 0x3f) << 8) | *cp);
|
||||
break;
|
||||
|
||||
default: /* illegal type */
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
if (*dn == '\0')
|
||||
return (sp - msg);
|
||||
next: ;
|
||||
}
|
||||
return (-1);
|
||||
return (ptr - saveptr);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -509,3 +298,640 @@ __putlong(l, msgp)
|
||||
{
|
||||
PUTLONG(l, msgp);
|
||||
}
|
||||
|
||||
/* ++ From BIND 8.1.1. ++ */
|
||||
/*
|
||||
* Copyright (c) 1996 by Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*"Id: ns_name.c,v 1.1 1997/12/13 02:41:13 vixie Exp vixie"*/
|
||||
|
||||
/*#include "port_before.h"*/
|
||||
|
||||
/*#include <sys/types.h>*/
|
||||
|
||||
/*#include <netinet/in.h>*/
|
||||
/*#include <arpa/nameser.h>*/
|
||||
|
||||
/*#include <errno.h>*/
|
||||
/*#include <resolv.h>*/
|
||||
/*#include <string.h>*/
|
||||
|
||||
/*#include "port_after.h"*/
|
||||
|
||||
#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */
|
||||
#define NS_MAXCDNAME 255 /* maximum compressed domain name */
|
||||
|
||||
/* Data. */
|
||||
|
||||
static char digits[] = "0123456789";
|
||||
|
||||
/* Forward. */
|
||||
|
||||
static int special(int);
|
||||
static int printable(int);
|
||||
static int dn_find(const u_char *, const u_char *,
|
||||
const u_char * const *,
|
||||
const u_char * const *);
|
||||
|
||||
/* Public. */
|
||||
|
||||
/*
|
||||
* ns_name_ntop(src, dst, dstsiz)
|
||||
* Convert an encoded domain name to printable ascii as per RFC1035.
|
||||
* return:
|
||||
* Number of bytes written to buffer, or -1 (with errno set)
|
||||
* notes:
|
||||
* The root is returned as "."
|
||||
* All other domains are returned in non absolute form
|
||||
*/
|
||||
static int
|
||||
ns_name_ntop(src, dst, dstsiz)
|
||||
const u_char *src;
|
||||
char *dst;
|
||||
size_t dstsiz;
|
||||
{
|
||||
const u_char *cp;
|
||||
char *dn, *eom;
|
||||
u_char c;
|
||||
u_int n;
|
||||
|
||||
cp = src;
|
||||
dn = dst;
|
||||
eom = dst + dstsiz;
|
||||
|
||||
while ((n = *cp++) != 0) {
|
||||
if ((n & NS_CMPRSFLGS) != 0) {
|
||||
/* Some kind of compression pointer. */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
if (dn != dst) {
|
||||
if (dn >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = '.';
|
||||
}
|
||||
if (dn + n >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
for ((void)NULL; n > 0; n--) {
|
||||
c = *cp++;
|
||||
if (special(c)) {
|
||||
if (dn + 1 >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = '\\';
|
||||
*dn++ = (char)c;
|
||||
} else if (!printable(c)) {
|
||||
if (dn + 3 >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = '\\';
|
||||
*dn++ = digits[c / 100];
|
||||
*dn++ = digits[(c % 100) / 10];
|
||||
*dn++ = digits[c % 10];
|
||||
} else {
|
||||
if (dn >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = (char)c;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dn == dst) {
|
||||
if (dn >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = '.';
|
||||
}
|
||||
if (dn >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dn++ = '\0';
|
||||
return (dn - dst);
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_pton(src, dst, dstsiz)
|
||||
* Convert a ascii string into an encoded domain name as per RFC1035.
|
||||
* return:
|
||||
* -1 if it fails
|
||||
* 1 if string was fully qualified
|
||||
* 0 is string was not fully qualified
|
||||
* notes:
|
||||
* Enforces label and domain length limits.
|
||||
*/
|
||||
|
||||
static int
|
||||
ns_name_pton(src, dst, dstsiz)
|
||||
const char *src;
|
||||
u_char *dst;
|
||||
size_t dstsiz;
|
||||
{
|
||||
u_char *label, *bp, *eom;
|
||||
int c, n, escaped;
|
||||
char *cp;
|
||||
|
||||
escaped = 0;
|
||||
bp = dst;
|
||||
eom = dst + dstsiz;
|
||||
label = bp++;
|
||||
|
||||
while ((c = *src++) != 0) {
|
||||
if (escaped) {
|
||||
if ((cp = strchr(digits, c)) != NULL) {
|
||||
n = (cp - digits) * 100;
|
||||
if ((c = *src++) == 0 ||
|
||||
(cp = strchr(digits, c)) == NULL) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
n += (cp - digits) * 10;
|
||||
if ((c = *src++) == 0 ||
|
||||
(cp = strchr(digits, c)) == NULL) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
n += (cp - digits);
|
||||
if (n > 255) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
c = n;
|
||||
}
|
||||
escaped = 0;
|
||||
} else if (c == '\\') {
|
||||
escaped = 1;
|
||||
continue;
|
||||
} else if (c == '.') {
|
||||
c = (bp - label - 1);
|
||||
if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
if (label >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*label = c;
|
||||
/* Fully qualified ? */
|
||||
if (*src == '\0') {
|
||||
if (c != 0) {
|
||||
if (bp >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*bp++ = '\0';
|
||||
}
|
||||
if ((bp - dst) > MAXCDNAME) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
if (c == 0) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
label = bp++;
|
||||
continue;
|
||||
}
|
||||
if (bp >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*bp++ = (u_char)c;
|
||||
}
|
||||
c = (bp - label - 1);
|
||||
if ((c & NS_CMPRSFLGS) != 0) { /* Label too big. */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
if (label >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*label = c;
|
||||
if (c != 0) {
|
||||
if (bp >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*bp++ = 0;
|
||||
}
|
||||
if ((bp - dst) > MAXCDNAME) { /* src too big */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_unpack(msg, eom, src, dst, dstsiz)
|
||||
* Unpack a domain name from a message, source may be compressed.
|
||||
* return:
|
||||
* -1 if it fails, or consumed octets if it succeeds.
|
||||
*/
|
||||
static int
|
||||
ns_name_unpack(msg, eom, src, dst, dstsiz)
|
||||
const u_char *msg;
|
||||
const u_char *eom;
|
||||
const u_char *src;
|
||||
u_char *dst;
|
||||
size_t dstsiz;
|
||||
{
|
||||
const u_char *srcp, *dstlim;
|
||||
u_char *dstp;
|
||||
int n, c, len, checked;
|
||||
|
||||
len = -1;
|
||||
checked = 0;
|
||||
dstp = dst;
|
||||
srcp = src;
|
||||
dstlim = dst + dstsiz;
|
||||
if (srcp < msg || srcp >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
/* Fetch next label in domain name. */
|
||||
while ((n = *srcp++) != 0) {
|
||||
/* Check for indirection. */
|
||||
switch (n & NS_CMPRSFLGS) {
|
||||
case 0:
|
||||
/* Limit checks. */
|
||||
if (dstp + n + 1 >= dstlim || srcp + n >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
checked += n + 1;
|
||||
*dstp++ = n;
|
||||
memcpy(dstp, srcp, n);
|
||||
dstp += n;
|
||||
srcp += n;
|
||||
break;
|
||||
|
||||
case NS_CMPRSFLGS:
|
||||
if (srcp >= eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
if (len < 0)
|
||||
len = srcp - src + 1;
|
||||
srcp = msg + (((n & 0x3f) << 8) | (*srcp & 0xff));
|
||||
if (srcp < msg || srcp >= eom) { /* Out of range. */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
checked += 2;
|
||||
/*
|
||||
* Check for loops in the compressed name;
|
||||
* if we've looked at the whole message,
|
||||
* there must be a loop.
|
||||
*/
|
||||
if (checked >= eom - msg) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
errno = EMSGSIZE;
|
||||
return (-1); /* flag error */
|
||||
}
|
||||
}
|
||||
*dstp = '\0';
|
||||
if (len < 0)
|
||||
len = srcp - src;
|
||||
return (len);
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_pack(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
* Pack domain name 'domain' into 'comp_dn'.
|
||||
* return:
|
||||
* Size of the compressed name, or -1.
|
||||
* notes:
|
||||
* 'dnptrs' is an array of pointers to previous compressed names.
|
||||
* dnptrs[0] is a pointer to the beginning of the message. The array
|
||||
* ends with NULL.
|
||||
* 'lastdnptr' is a pointer to the end of the array pointed to
|
||||
* by 'dnptrs'.
|
||||
* Side effects:
|
||||
* The list of pointers in dnptrs is updated for labels inserted into
|
||||
* the message as we compress the name. If 'dnptr' is NULL, we don't
|
||||
* try to compress names. If 'lastdnptr' is NULL, we don't update the
|
||||
* list.
|
||||
*/
|
||||
static int
|
||||
ns_name_pack(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
const u_char *src;
|
||||
u_char *dst;
|
||||
int dstsiz;
|
||||
const u_char **dnptrs;
|
||||
const u_char **lastdnptr;
|
||||
{
|
||||
u_char *dstp;
|
||||
const u_char **cpp, **lpp, *eob, *msg;
|
||||
const u_char *srcp;
|
||||
int n, l;
|
||||
|
||||
srcp = src;
|
||||
dstp = dst;
|
||||
eob = dstp + dstsiz;
|
||||
lpp = cpp = NULL;
|
||||
if (dnptrs != NULL) {
|
||||
if ((msg = *dnptrs++) != NULL) {
|
||||
for (cpp = dnptrs; *cpp != NULL; cpp++)
|
||||
(void)NULL;
|
||||
lpp = cpp; /* end of list to search */
|
||||
}
|
||||
} else
|
||||
msg = NULL;
|
||||
|
||||
/* make sure the domain we are about to add is legal */
|
||||
l = 0;
|
||||
do {
|
||||
n = *srcp;
|
||||
if ((n & NS_CMPRSFLGS) != 0) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
l += n + 1;
|
||||
if (l > MAXCDNAME) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
srcp += n + 1;
|
||||
} while (n != 0);
|
||||
|
||||
srcp = src;
|
||||
do {
|
||||
/* Look to see if we can use pointers. */
|
||||
n = *srcp;
|
||||
if (n != 0 && msg != NULL) {
|
||||
l = dn_find(srcp, msg, (const u_char * const *)dnptrs,
|
||||
(const u_char * const *)lpp);
|
||||
if (l >= 0) {
|
||||
if (dstp + 1 >= eob) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*dstp++ = (l >> 8) | NS_CMPRSFLGS;
|
||||
*dstp++ = l % 256;
|
||||
return (dstp - dst);
|
||||
}
|
||||
/* Not found, save it. */
|
||||
if (lastdnptr != NULL && cpp < lastdnptr - 1 &&
|
||||
(dstp - msg) < 0x4000) {
|
||||
*cpp++ = dstp;
|
||||
*cpp = NULL;
|
||||
}
|
||||
}
|
||||
/* copy label to buffer */
|
||||
if (n & NS_CMPRSFLGS) { /* Should not happen. */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
if (dstp + 1 + n >= eob) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
memcpy(dstp, srcp, n + 1);
|
||||
srcp += n + 1;
|
||||
dstp += n + 1;
|
||||
} while (n != 0);
|
||||
|
||||
if (dstp > eob) {
|
||||
if (msg != NULL)
|
||||
*lpp = NULL;
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
return (dstp - dst);
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_uncompress(msg, eom, src, dst, dstsiz)
|
||||
* Expand compressed domain name to presentation format.
|
||||
* return:
|
||||
* Number of bytes read out of `src', or -1 (with errno set).
|
||||
* note:
|
||||
* Root domain returns as "." not "".
|
||||
*/
|
||||
static int
|
||||
ns_name_uncompress(msg, eom, src, dst, dstsiz)
|
||||
const u_char *msg;
|
||||
const u_char *eom;
|
||||
const u_char *src;
|
||||
char *dst;
|
||||
size_t dstsiz;
|
||||
{
|
||||
u_char tmp[NS_MAXCDNAME];
|
||||
int n;
|
||||
|
||||
if ((n = ns_name_unpack(msg, eom, src, tmp, sizeof tmp)) == -1)
|
||||
return (-1);
|
||||
if (ns_name_ntop(tmp, dst, dstsiz) == -1)
|
||||
return (-1);
|
||||
return (n);
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_compress(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
* Compress a domain name into wire format, using compression pointers.
|
||||
* return:
|
||||
* Number of bytes consumed in `dst' or -1 (with errno set).
|
||||
* notes:
|
||||
* 'dnptrs' is an array of pointers to previous compressed names.
|
||||
* dnptrs[0] is a pointer to the beginning of the message.
|
||||
* The list ends with NULL. 'lastdnptr' is a pointer to the end of the
|
||||
* array pointed to by 'dnptrs'. Side effect is to update the list of
|
||||
* pointers for labels inserted into the message as we compress the name.
|
||||
* If 'dnptr' is NULL, we don't try to compress names. If 'lastdnptr'
|
||||
* is NULL, we don't update the list.
|
||||
*/
|
||||
static int
|
||||
ns_name_compress(src, dst, dstsiz, dnptrs, lastdnptr)
|
||||
const char *src;
|
||||
u_char *dst;
|
||||
size_t dstsiz;
|
||||
const u_char **dnptrs;
|
||||
const u_char **lastdnptr;
|
||||
{
|
||||
u_char tmp[NS_MAXCDNAME];
|
||||
|
||||
if (ns_name_pton(src, tmp, sizeof tmp) == -1)
|
||||
return (-1);
|
||||
return (ns_name_pack(tmp, dst, dstsiz, dnptrs, lastdnptr));
|
||||
}
|
||||
|
||||
/*
|
||||
* ns_name_skip(ptrptr, eom)
|
||||
* Advance *ptrptr to skip over the compressed name it points at.
|
||||
* return:
|
||||
* 0 on success, -1 (with errno set) on failure.
|
||||
*/
|
||||
static int
|
||||
ns_name_skip(ptrptr, eom)
|
||||
const u_char **ptrptr;
|
||||
const u_char *eom;
|
||||
{
|
||||
const u_char *cp;
|
||||
u_int n;
|
||||
|
||||
cp = *ptrptr;
|
||||
while (cp < eom && (n = *cp++) != 0) {
|
||||
/* Check for indirection. */
|
||||
switch (n & NS_CMPRSFLGS) {
|
||||
case 0: /* normal case, n == len */
|
||||
cp += n;
|
||||
continue;
|
||||
case NS_CMPRSFLGS: /* indirection */
|
||||
cp++;
|
||||
break;
|
||||
default: /* illegal type */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (cp > eom) {
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
*ptrptr = cp;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Private. */
|
||||
|
||||
/*
|
||||
* special(ch)
|
||||
* Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
* is this characted special ("in need of quoting") ?
|
||||
* return:
|
||||
* boolean.
|
||||
*/
|
||||
static int
|
||||
special(ch)
|
||||
int ch;
|
||||
{
|
||||
switch (ch) {
|
||||
case 0x22: /* '"' */
|
||||
case 0x2E: /* '.' */
|
||||
case 0x3B: /* ';' */
|
||||
case 0x5C: /* '\\' */
|
||||
/* Special modifiers in zone files. */
|
||||
case 0x40: /* '@' */
|
||||
case 0x24: /* '$' */
|
||||
return (1);
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* printable(ch)
|
||||
* Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
* is this character visible and not a space when printed ?
|
||||
* return:
|
||||
* boolean.
|
||||
*/
|
||||
static int
|
||||
printable(ch)
|
||||
int ch;
|
||||
{
|
||||
return (ch > 0x20 && ch < 0x7f);
|
||||
}
|
||||
|
||||
/*
|
||||
* Thinking in noninternationalized USASCII (per the DNS spec),
|
||||
* convert this character to lower case if it's upper case.
|
||||
*/
|
||||
static int
|
||||
mklower(ch)
|
||||
int ch;
|
||||
{
|
||||
if (ch >= 0x41 && ch <= 0x5A)
|
||||
return (ch + 0x20);
|
||||
return (ch);
|
||||
}
|
||||
|
||||
/*
|
||||
* dn_find(domain, msg, dnptrs, lastdnptr)
|
||||
* Search for the counted-label name in an array of compressed names.
|
||||
* return:
|
||||
* offset from msg if found, or -1.
|
||||
* notes:
|
||||
* dnptrs is the pointer to the first name on the list,
|
||||
* not the pointer to the start of the message.
|
||||
*/
|
||||
static int
|
||||
dn_find(domain, msg, dnptrs, lastdnptr)
|
||||
const u_char *domain;
|
||||
const u_char *msg;
|
||||
const u_char * const *dnptrs;
|
||||
const u_char * const *lastdnptr;
|
||||
{
|
||||
const u_char *dn, *cp, *sp;
|
||||
const u_char * const *cpp;
|
||||
u_int n;
|
||||
|
||||
for (cpp = dnptrs; cpp < lastdnptr; cpp++) {
|
||||
dn = domain;
|
||||
sp = cp = *cpp;
|
||||
while ((n = *cp++) != 0) {
|
||||
/*
|
||||
* check for indirection
|
||||
*/
|
||||
switch (n & NS_CMPRSFLGS) {
|
||||
case 0: /* normal case, n == len */
|
||||
if (n != *dn++)
|
||||
goto next;
|
||||
for ((void)NULL; n > 0; n--)
|
||||
if (mklower(*dn++) != mklower(*cp++))
|
||||
goto next;
|
||||
/* Is next root for both ? */
|
||||
if (*dn == '\0' && *cp == '\0')
|
||||
return (sp - msg);
|
||||
if (*dn)
|
||||
continue;
|
||||
goto next;
|
||||
|
||||
case NS_CMPRSFLGS: /* indirection */
|
||||
cp = msg + (((n & 0x3f) << 8) | *cp);
|
||||
break;
|
||||
|
||||
default: /* illegal type */
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
next: ;
|
||||
}
|
||||
errno = ENOENT;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* -- From BIND 8.1.1. -- */
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
|
||||
static char rcsid[] = "$Id: res_send.c,v 8.13 1997/06/01 20:34:37 vixie Exp $";
|
||||
static char rcsid[] = "$Id: res_send.c,v 8.14 1998/04/07 04:59:46 vixie Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
/* change this to "0"
|
||||
@@ -214,6 +214,8 @@ res_isourserver(inp)
|
||||
/* int
|
||||
* res_nameinquery(name, type, class, buf, eom)
|
||||
* look for (name,type,class) in the query section of packet (buf,eom)
|
||||
* requires:
|
||||
* buf + HFIXESDZ <= eom
|
||||
* returns:
|
||||
* -1 : format error
|
||||
* 0 : not found
|
||||
@@ -238,6 +240,8 @@ res_nameinquery(name, type, class, buf, eom)
|
||||
if (n < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
if (cp + 2 * INT16SZ > eom)
|
||||
return (-1);
|
||||
ttype = _getshort(cp); cp += INT16SZ;
|
||||
tclass = _getshort(cp); cp += INT16SZ;
|
||||
if (ttype == type &&
|
||||
@@ -267,6 +271,9 @@ res_queriesmatch(buf1, eom1, buf2, eom2)
|
||||
register const u_char *cp = buf1 + HFIXEDSZ;
|
||||
int qdcount = ntohs(((HEADER*)buf1)->qdcount);
|
||||
|
||||
if (buf1 + HFIXEDSZ > eom1 || buf2 + HFIXEDSZ > eom2)
|
||||
return (-1);
|
||||
|
||||
if (qdcount != ntohs(((HEADER*)buf2)->qdcount))
|
||||
return (0);
|
||||
while (qdcount-- > 0) {
|
||||
@@ -277,6 +284,8 @@ res_queriesmatch(buf1, eom1, buf2, eom2)
|
||||
if (n < 0)
|
||||
return (-1);
|
||||
cp += n;
|
||||
if (cp + 2 * INT16SZ > eom1)
|
||||
return (-1);
|
||||
ttype = _getshort(cp); cp += INT16SZ;
|
||||
tclass = _getshort(cp); cp += INT16SZ;
|
||||
if (!res_nameinquery(tname, ttype, tclass, buf2, eom2))
|
||||
@@ -302,6 +311,10 @@ res_send(buf, buflen, ans, anssiz)
|
||||
/* errno should have been set by res_init() in this case. */
|
||||
return (-1);
|
||||
}
|
||||
if (anssiz < HFIXEDSZ) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
DprintQ((_res.options & RES_DEBUG) || (_res.pfcode & RES_PRF_QUERY),
|
||||
(stdout, ";; res_send()\n"), buf, buflen);
|
||||
v_circuit = (_res.options & RES_USEVC) || buflen > PACKETSZ;
|
||||
@@ -446,6 +459,17 @@ read_len:
|
||||
len = anssiz;
|
||||
} else
|
||||
len = resplen;
|
||||
if (len < HFIXEDSZ) {
|
||||
/*
|
||||
* Undersized message.
|
||||
*/
|
||||
Dprint(_res.options & RES_DEBUG,
|
||||
(stdout, ";; undersized: %d\n", len));
|
||||
terrno = EMSGSIZE;
|
||||
badns |= (1 << ns);
|
||||
res_close();
|
||||
goto next_ns;
|
||||
}
|
||||
cp = ans;
|
||||
while (len != 0 &&
|
||||
(n = read(s, (char *)cp, (int)len)) > 0) {
|
||||
@@ -601,12 +625,12 @@ read_len:
|
||||
if ((long) timeout.tv_sec <= 0)
|
||||
timeout.tv_sec = 1;
|
||||
timeout.tv_usec = 0;
|
||||
if (s+1 > FD_SETSIZE) {
|
||||
Perror(stderr, "s+1 > FD_SETSIZE", EMFILE);
|
||||
wait:
|
||||
if (s < 0 || s >= FD_SETSIZE) {
|
||||
Perror(stderr, "s out-of-bounds", EMFILE);
|
||||
res_close();
|
||||
goto next_ns;
|
||||
}
|
||||
wait:
|
||||
FD_ZERO(&dsmask);
|
||||
FD_SET(s, &dsmask);
|
||||
n = select(s+1, &dsmask, (fd_set *)NULL,
|
||||
@@ -638,6 +662,18 @@ read_len:
|
||||
goto next_ns;
|
||||
}
|
||||
gotsomewhere = 1;
|
||||
if (resplen < HFIXEDSZ) {
|
||||
/*
|
||||
* Undersized message.
|
||||
*/
|
||||
Dprint(_res.options & RES_DEBUG,
|
||||
(stdout, ";; undersized: %d\n",
|
||||
resplen));
|
||||
terrno = EMSGSIZE;
|
||||
badns |= (1 << ns);
|
||||
res_close();
|
||||
goto next_ns;
|
||||
}
|
||||
if (hp->id != anhp->id) {
|
||||
/*
|
||||
* response from old query, ignore it.
|
||||
|
||||
+39
-24
@@ -1,12 +1,12 @@
|
||||
See the README file for information on how to report bugs (and what
|
||||
will happen to your bug reports if you do).
|
||||
See the Cederqvist manual (cvs.texinfo) for information on how to
|
||||
report bugs (and what will happen to your bug reports if you do).
|
||||
|
||||
The following is a list of some of the known bugs. It may or may not
|
||||
be comprehensive. We would dearly love for people to volunteer to
|
||||
help us keep it up to date (for starters, if you notice any
|
||||
inaccuracies, please let bug-cvs know as described in README). There
|
||||
are some other reported bugs in MINOR-BUGS; the difference, at least
|
||||
in theory, is that those bugs are less serious.
|
||||
inaccuracies, please let bug-cvs know as described in the Cederqvist
|
||||
manual). There are some other reported bugs in MINOR-BUGS; the
|
||||
difference, at least in theory, is that those bugs are less serious.
|
||||
|
||||
|
||||
* For platform-specific information (in some cases including known
|
||||
@@ -15,25 +15,45 @@ similar file for the unix-like operating systems (not yet, at least).
|
||||
This file also might contain some platform-specific bugs.
|
||||
|
||||
|
||||
* Exporting binary files on non-unix clients with "cvs export" does
|
||||
not work. The workaround is to use "cvs checkout" instead. If you
|
||||
are thinking of fixing this, check out the comment "For cvs export,
|
||||
assume it is a text file." in client.c.
|
||||
* One cannot specify some files as binary in a "cvs import" using
|
||||
CVSROOT/cvswrappers (for why, note that client_process_import_file has
|
||||
no way of knowing about CVSROOT/cvswrappers which is off on the
|
||||
server).
|
||||
|
||||
|
||||
* Wrappers do not work client/server, and there are a variety of other
|
||||
* I don't think that "cvs add" honors any of the -k wrappers, at least
|
||||
not in client/server mode. I would think it should. Getting
|
||||
CVSROOT/cvswrappers to work would presumably best be done by keeping a
|
||||
copy of it in the CVS directory on the client, as has also been
|
||||
discussed for CVS/Template, &c. Getting a client-side .cvswrappers to
|
||||
work is a separate issue.
|
||||
|
||||
|
||||
* Need more work on the procedure for fixing it if a binary file is
|
||||
accidentally added in text mode (sanity.sh test cases, better
|
||||
documentation, probably update and/or admin -kb should update
|
||||
the -k setting in CVS/Entries).
|
||||
|
||||
|
||||
* Wrappers (-t/-f) do not work client/server, and there are a variety of other
|
||||
bugs and annoyances with wrappers.
|
||||
|
||||
|
||||
* Some people have reported seeing the message "dying gasps from %s
|
||||
unexpected" (where %s is the name of your server) when using
|
||||
client/server CVS. One person reported that this had to do with using
|
||||
pserver and trying to run a program not in the PATH (which is set up
|
||||
by inetd, I think) from one of the *info scripts. But noone has
|
||||
carefully tracked this down (is it caused by something in the server
|
||||
writing to stdout or stderr when it shouldn't? But then wouldn't the
|
||||
"dying gasps" message be preceded by "warning: unrecognized response
|
||||
`%s' from cvs server"?).
|
||||
* If your login name contains a space or various other characters
|
||||
(particularly an issue on Windows), CVS will have trouble (it will
|
||||
write invalid RCS files, probably). The fix would be to have CVS
|
||||
change such characters to underscores before writing them to the RCS
|
||||
file. Furthermore, the LOGNAME or USER environment variables usually
|
||||
won't override the system login name, so this can be hard to work
|
||||
around.
|
||||
|
||||
|
||||
* If you specify the -w global option to client/server CVS, it only
|
||||
overrides a CVSREAD environment variable set on the client, not a
|
||||
CVSREAD variable which was set on the server (for example, in .bashrc
|
||||
when the server was run via rsh). The fix of course will be to
|
||||
provide a "Option-read-write" request which sends -w, in addition to
|
||||
"Global_option -r" which sends -r.
|
||||
|
||||
|
||||
* "make remotecheck" sometimes fails on test 187a3 with
|
||||
@@ -57,11 +77,6 @@ file's description.
|
||||
(and from the repository)?
|
||||
|
||||
|
||||
* `cvs checkout -d nested/dir/path <module>' just doesn't work. The
|
||||
simpler version -- `cvs checkout -d single-dir <module>' works,
|
||||
however.
|
||||
|
||||
|
||||
* The following bug was reported against CVS 1.9:
|
||||
|
||||
Create a module named test with a file named test in it.
|
||||
|
||||
@@ -1,3 +1,526 @@
|
||||
1998-03-04 Jim Kingdon <[email protected]>
|
||||
|
||||
* acconfig.h, configure.in: Add PRESERVE_PERMISSIONS_SUPPORT and
|
||||
always define it.
|
||||
* configure, config.h.in: Regenerated.
|
||||
|
||||
Tue Feb 17 18:32:36 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* configure.in: Add memmove back to AC_REPLACE_FUNCS list.
|
||||
* configure: Rebuild.
|
||||
|
||||
1998-02-16 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO (190): Remove "failed to check out" from commit.c from
|
||||
lists of error messages suppressed by -q; it no longer is.
|
||||
|
||||
4 Feb 1998 Jim Kingdon
|
||||
|
||||
* cvsnt.mak: The usual "because Visual C++ feels like it"
|
||||
changes. These ones seem to have to do with reordering
|
||||
files and release versus debug configurations, mainly.
|
||||
|
||||
Fri Jan 30 10:37:40 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Update which version of CVS was tested with EMX.
|
||||
|
||||
15 Jan 1998 W. L. Estes <[email protected]>
|
||||
and Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.spec, Makefile.in: Fix some problems with the spec file
|
||||
distributed with cvs. RPM chokes on a build root of slash, so
|
||||
that is gone now. CVS is relocatable (as far as I know) so I
|
||||
added a prefix tag. The source location was incorrect and in
|
||||
fixing that I had to add a `g' flag to one of the sed commands in
|
||||
the Makefile.in so the spec file gets generated correctly.
|
||||
|
||||
13 Jan 1998 Jim Kingdon
|
||||
|
||||
* cvsnt.mak: Add lib/fncase.c. Plus of course the usual
|
||||
"because Visual C++ feels like it" changes.
|
||||
|
||||
Tue Jan 13 16:49:38 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* acconfig.h (USE_SETMODE_STDOUT): Add undef line.
|
||||
(HAVE_SETMODE): Likewise.
|
||||
* configure.in: If cygwin32, define USE_SETMODE_STDOUT and
|
||||
HAVE_SETMODE.
|
||||
* configure, config.h.in: Regenerate.
|
||||
|
||||
* acconfig.h (UTIME_EXPECTS_WRITABLE): Add undef line.
|
||||
* configure.in: If cygwin32, define UTIME_EXPECTS_WRITABLE.
|
||||
* configure, config.h.in: Regenerate.
|
||||
|
||||
* configure.in: Add test for cygwin32, and set LIBOBJS and LIBS
|
||||
accordingly.
|
||||
* configure: Regenerate.
|
||||
|
||||
Sun Jan 11 11:43:55 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* HACKING: Add example of indentation for switch statement. I
|
||||
always have to look this one up, and it seems worthwhile to
|
||||
specify it here rather than be unsure which switch statement in
|
||||
CVS to use as an example.
|
||||
|
||||
Wed Jan 7 09:41:08 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Revise item 149 (concerning changing CVS/Root and such).
|
||||
"This whole area is a rather bad pile of individual decisions which
|
||||
accumulated over time, some of them probably bad decisions with
|
||||
hindsight."
|
||||
|
||||
Wed Dec 31 09:25:20 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. Features a change regarding
|
||||
removing directories.
|
||||
|
||||
Tue Dec 23 08:28:44 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* README.VMS, INSTALL, HACKING, BUGS, README: Change bug-cvs
|
||||
address from prep.ai.mit.edu to gnu.org per email from Martin
|
||||
Hamilton. When referring to bug-reporting procedure refer to
|
||||
Cederqvist not README.
|
||||
|
||||
Tue Dec 16 13:13:53 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. The content is the same, but
|
||||
instead of being from Mosaic, it is from "lynx -dump -nolist".
|
||||
This output is somewhat better (for example, it is formatted for
|
||||
80 columns or so, rather than Mosaic which is rather
|
||||
inconsistent), and also lynx is free and still maintained whereas
|
||||
NCSA Mosaic is proprietary and no longer maintained.
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. Features an update to the
|
||||
Sablime question.
|
||||
|
||||
* NEWS: Add item about GSSAPI.
|
||||
|
||||
Fri Dec 12 14:00:57 1997 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* configure.in: Add --with-gssapi option, and look for gssapi.h
|
||||
and GSSAPI Kerberos v5 libraries.
|
||||
* acconfig.h: Add HAVE_GSSAPI.
|
||||
* configure, config.h.in: Regenerate.
|
||||
|
||||
Thu Dec 11 15:58:06 1997 Eric Mumpower <[email protected]>
|
||||
|
||||
* configure.in: Let --with-krb4 override the system Kerberos
|
||||
header files and libraries, if any.
|
||||
* configure: Regenerate.
|
||||
|
||||
Thu Dec 4 20:01:02 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* configure.in (AC_CHECK_FUNCS): Remove mempcpy per change to
|
||||
src/rcs.c.
|
||||
* configure: Regenerated (never was regenerated after getwd change).
|
||||
|
||||
1997-12-04 Jim Meyering <[email protected]>
|
||||
|
||||
* configure.in (AC_CHECK_FUNCS): Add mempcpy.
|
||||
|
||||
Thu Dec 4 10:42:32 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Update for kfogel .cvswrappers fix.
|
||||
|
||||
Tue Dec 2 22:14:03 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* MINOR-BUGS: Update per info-cvs mail from Steve Cameron.
|
||||
|
||||
1997-11-29 Jim Kingdon
|
||||
|
||||
* cvsnt.mak: Remove lib/getwd.c (see lib/ChangeLog for rationale).
|
||||
|
||||
* cvsnt.mak: The usual "because Developer Studio feels like
|
||||
it" changes.
|
||||
|
||||
Sat Nov 29 22:10:32 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Remove getwd (see lib/ChangeLog
|
||||
for rationale).
|
||||
|
||||
Mon Nov 24 10:36:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Update QNX information per email from Michael Hunter of
|
||||
QNX.
|
||||
|
||||
Wed Nov 19 17:44:21 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Add Sequent entry per bug-cvs report.
|
||||
|
||||
1997-11-17 Karl Fogel <[email protected]>
|
||||
|
||||
* BUGS: Remove item about exporting binary files to non-unix
|
||||
clients; this is fixed.
|
||||
|
||||
Mon Nov 17 09:07:44 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Add yet another binary files problem.
|
||||
|
||||
1997-11-14 Karl Fogel <[email protected]>
|
||||
|
||||
* cvsnt.mak: updated for diff/ subdir.
|
||||
|
||||
Fri Nov 14 12:25:10 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Remove item about dying gasps message. At least one known
|
||||
cause has been fixed.
|
||||
|
||||
Wed Nov 12 20:24:49 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. Features a wording fix to
|
||||
"What do I do first? How do I create a Repository?" and a
|
||||
formatting fix (makes it clear which bullets are under what)
|
||||
to "What is a module?"
|
||||
|
||||
* NEWS: Add item about RCS library. Remove item about RCSBIN in
|
||||
CVSROOT/config.
|
||||
* INSTALL: Simplify instructions to reflect the fact that one need
|
||||
not any longer install RCS and GNU diff.
|
||||
* PROJECTS: Remove item about RCS library; it is done.
|
||||
|
||||
Mon, 10 Nov 1997 Jim Kingdon
|
||||
|
||||
* cvsnt.dsp: For diff/diff.c, also look for include files in
|
||||
diff directory. This means we get diff/system.h not lib/system.h.
|
||||
|
||||
Sun Nov 9 16:16:56 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO (#195): New item, about rsync and such issues.
|
||||
|
||||
Thu Nov 6 14:29:14 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO (#194): New item, about separated metadata.
|
||||
|
||||
* TODO (#186): Rewrite paragraph on CVSclusters to be clearer
|
||||
about what this can do and why I think it is a cool idea.
|
||||
|
||||
Sun Nov 2 19:34:30 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* DEVEL-CVS: Wording fix: want to specify that new developers are
|
||||
granted checkin access and the ability to send to devel-cvs, not
|
||||
specify whether this is implemented via an "account" (whatever
|
||||
that is) (editorial change, not run by devel-cvs).
|
||||
|
||||
Fri Oct 31 16:30:57 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* NEWS: Mention admin -o rev1::rev2.
|
||||
|
||||
Wed Oct 29 08:40:05 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Add item 193, about alternatives to timestamps in CVS/Entries.
|
||||
|
||||
Tue Oct 28 19:59:48 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO (190): "rcs failed" message is no longer affected by global
|
||||
-q option.
|
||||
|
||||
1997-10-28 Jim Kingdon
|
||||
|
||||
* .cvsignore: Add Visual C++ files du jour, namely
|
||||
{diff,vc50}.{pdb,idb,pch}.
|
||||
|
||||
* cvsnt.dsp: Add files for diff library. The custom build
|
||||
stuff for diff/version.c and diff/diff.c was to deal with
|
||||
there also being a src/version.c and src/diff.c. There
|
||||
might be an easier way.
|
||||
|
||||
Mon Oct 27 11:21:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. Features an edit from Larry
|
||||
Jones regarding CVS on Windows.
|
||||
|
||||
Mon Oct 20 15:23:17 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Add item about spaces in login names.
|
||||
|
||||
Mon Oct 20 10:25:42 1997 Hannes R. Boehm <[email protected]>
|
||||
|
||||
* INSTALL (Tested platforms): Add Red Hat Linux 4.2.
|
||||
|
||||
Wed Oct 15 10:55:20 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO (#192): Also mention issue with opening connections to new
|
||||
servers if CVSROOT changes.
|
||||
|
||||
* TODO (#191): Add thoughts on external difference programs.
|
||||
|
||||
1997-10-11 Noel Cragg <[email protected]>
|
||||
|
||||
* BUGS: remove note about the `-d' flag bug that was just fixed.
|
||||
|
||||
* TODO: new item 192.
|
||||
|
||||
Thu Oct 9 12:59:28 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Revise item #182 to be clearer and to point to the
|
||||
unofficial patch.
|
||||
|
||||
Thu Sep 25 14:48:26 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* build.com: Also recurse into diff directory.
|
||||
|
||||
Wed Sep 24 10:35:50 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* configure.in: Don't check for system-supplied regex matcher; see
|
||||
comment for rationale.
|
||||
* configure: Regenerated.
|
||||
|
||||
Tue Sep 23 16:00:25 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Add item about cvs add and -k wrappers.
|
||||
|
||||
Mon Sep 22 11:21:11 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Revise item #191 in response to xdelta 1.10 release and a
|
||||
few other random thoughts.
|
||||
|
||||
Sun Sep 21 17:56:28 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* configure.in: Instead of checking for memchr, just define
|
||||
HAVE_MEMCHR and HAVE_STRCHR.
|
||||
Add comment about AC_FUNC_VFORK and vfork in general.
|
||||
* acconfig.h: Add HAVE_MEMCHR and HAVE_STRCHR.
|
||||
* configure, config.h.in: Regenerated.
|
||||
|
||||
* config.h.in: Regenerate using autoheader from autoconf 2.10.
|
||||
|
||||
Sat Sep 20 01:17:10 1997 Tim Pierce <[email protected]>
|
||||
|
||||
[notes: (1) includes the patches to config.h.in which he sent
|
||||
(presumably generated), (2) I have omitted a change, which was
|
||||
sent without a ChangeLog entry, to change re_exec to
|
||||
re_compile_pattern in configure.in, (3) Also adds diff/Makefile in
|
||||
AC_OUTPUT -kingdon]
|
||||
|
||||
* Makefile.in (USOURCE_SUBDIRS, check, remotecheck, installcheck):
|
||||
Add diff.
|
||||
|
||||
Note that AC_CHECK_FUNCS(vfork)
|
||||
has been replaced by AC_FUNC_VFORK... libdiff wants the more
|
||||
specific test, and it seems unlikely to break CVS.
|
||||
|
||||
* configure.in: Add AC_FUNC_CLOSEDIR_VOID, AC_FUNC_VFORK,
|
||||
AC_STRUCT_ST_BLKSIZE.
|
||||
(AC_CHECK_HEADERS): Add limits.h and sys/file.h.
|
||||
(AC_REPLACE_FUNCS): Add memchr.
|
||||
(AC_CHECK_FUNCS): Remove vfork.
|
||||
|
||||
Fri Sep 19 09:59:33 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Add item #191, concerning how to store binary files.
|
||||
|
||||
Wed Sep 17 16:13:49 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TESTS: Add ideas about ability to pass spaces in arguments, and
|
||||
stdin, to the program under test, as something to consider for the
|
||||
different test frameworks.
|
||||
|
||||
Tue Sep 16 00:14:55 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Add item about importing binary files.
|
||||
|
||||
* TODO: Adjust item #150 to reflect the fact that the client is
|
||||
not quite so mean about tossing the log message as it was.
|
||||
|
||||
Fri Sep 12 13:04:31 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Update Windows entries per email from Greg Strockbine
|
||||
<[email protected]>.
|
||||
|
||||
Thu Sep 11 15:03:21 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: New item #190, about meaning of -q and -Q global options.
|
||||
|
||||
Wed Sep 10 18:48:41 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: A few more thoughts on "cvs message" (item 150).
|
||||
|
||||
Tue Sep 9 22:20:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* README.VMS (Notes regarding compiling on VAX/VMS): Add item
|
||||
about mode_t and pid_t.
|
||||
|
||||
Sun Sep 7 17:34:03 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. The metavariables are back.
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. Features comment from
|
||||
julian@whistle about update -r branch:date. It also clobbered the
|
||||
metavariables (confusion about "<" as data vs. HTML tag I would
|
||||
guess), which I plan on fixing in a moment.
|
||||
|
||||
* configure.in: Add comment about re_exec and regexp syntax.
|
||||
|
||||
* configure.in (AC_REPLACE_FUNCS): Remove strdup; CVS was long
|
||||
ago converted to use its own routine xstrdup.
|
||||
* configure: Regenerated.
|
||||
|
||||
Sat Sep 6 00:08:20 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. In particular: GIC info
|
||||
updated, binary files updated (e.g. -kb not -ko), rename database
|
||||
and rCVS info updated (refer to TODO), tweaks to section on
|
||||
contributing (HACKING, DEVEL-CVS, &c), Cyclic info updated
|
||||
(e.g. remove Indiana address), usenet info updated
|
||||
(e.g. comp.software.config-mgmt not gnu.*).
|
||||
|
||||
Fri Sep 5 20:46:26 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* FAQ: Add another introductory paragraph which talks about out of
|
||||
date material from 1995 FAQ.
|
||||
|
||||
* FAQ: Re-import from FAQ-O-Matic. This was mainly as a proof of
|
||||
concept that I could edit the Cygnus question and have the diffs
|
||||
come out looking right (which worked), but I also discovered that
|
||||
the previous checkin was truncated partway through.
|
||||
|
||||
* FAQ: Replace file with an introductory paragraph plus a
|
||||
downloaded copy of Molli's FAQ-O-Matic. I believe the content
|
||||
closely matches the 1995 Grubbs FAQ but because everything is
|
||||
re-ordered it would be painstaking work to verify this.
|
||||
|
||||
Thu Sep 4 17:33:53 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Add item about -w global option and client/server.
|
||||
|
||||
Wed Sep 3 23:03:34 1997 Noel Cragg <[email protected]>
|
||||
|
||||
* TODO: Verbosify verbiage in item #189.
|
||||
|
||||
Wed Sep 3 14:14:54 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Add item #189, concerning renames.
|
||||
|
||||
Sat Aug 30 03:26:57 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Fix typo in Noel's change.
|
||||
|
||||
Sat Aug 30 03:17:36 1997 Noel Cragg <[email protected]>
|
||||
|
||||
* TODO: Add a header so emacs chooses the correct editing mode.
|
||||
Made several entries more verbose (expanded some of the less
|
||||
well-known acronyms and/or added pointers to further
|
||||
documentation).
|
||||
|
||||
Wed Aug 20 09:51:52 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Remove "SparcClassing" typo that has been there for
|
||||
a while.
|
||||
|
||||
Wed Aug 20 09:51:52 1997 Jim Kingdon <[email protected]>
|
||||
and Loren James Rittle <[email protected]>
|
||||
|
||||
* INSTALL: Update information for SunOS4, Solaris, Digital Unix,
|
||||
and HPUX.
|
||||
|
||||
Fri Aug 15 16:42:12 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Remove the "CVS 1.6" crud; it really isn't needed. Add
|
||||
paragraph about the meaning of the last three arguments to cvs
|
||||
import.
|
||||
|
||||
Thu Aug 14 14:42:53 1997 Jim Kingdon <[email protected]>
|
||||
and Loren James Rittle <[email protected]>
|
||||
|
||||
* INSTALL: Update information for SunOS4 and Solaris.
|
||||
|
||||
Mon Aug 4 00:02:24 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* BUGS: Be specific about wrappers not working client/server.
|
||||
|
||||
Sat Aug 2 09:23:50 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: In step 4, be more generic (the CVS sources are just an
|
||||
example, and people might not have them handy).
|
||||
|
||||
Fri Jul 25 17:02:30 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Refer to cvs.texinfo as the Cederqvist manual; that
|
||||
seems to be the description which best applies no matter how it
|
||||
was obtained. Be a little more explicit about the "$" prompt
|
||||
convention and setting environment variables. Use double quotes
|
||||
because they work on both DOS and Unix.
|
||||
|
||||
Thu Jul 24 12:22:49 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* NEWS: Also mention SystemAuth.
|
||||
|
||||
* INSTALL (MIPS): Add more detailed report concerning Irix 6.2,
|
||||
as reported by [email protected] (Larry Jones).
|
||||
|
||||
Tue Jul 22 17:35:31 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL (PowerPC): Add item for Lynx 2.5.
|
||||
|
||||
21 Jul 1997 Jim Kingdon
|
||||
|
||||
* Makefile.in (DISTFILES): Add cvsnt.dsp.
|
||||
|
||||
Mon Jul 21 09:40:10 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* configure.in: Adjust comment regarding version of autoconf which
|
||||
introduced --bindir.
|
||||
|
||||
Fri Jul 18 09:47:12 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Remove item 161 (the comments in cvs.texinfo have a much
|
||||
more complete discussion of date format issues). In item 30,
|
||||
change "patch" to "rdiff" and expand discussion slightly. Remove
|
||||
item 64 (the performance issues in initial checkout have probably
|
||||
changed quite a bit since that was written and in any event it
|
||||
isn't particularly useful without specifics of what is slow and
|
||||
ideas for speeding it up).
|
||||
|
||||
* INSTALL: Reorganize to separate out building/installing CVS
|
||||
executables from what to do once you have them. Adjust Visual C++
|
||||
instructions to deal with Visual C++ 5.x. Add brief mentions of
|
||||
platforms other than unix and Windows.
|
||||
|
||||
Thu Jul 17 21:13:16 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: In item 39, talk about how PRCS 1.2 as a possible model.
|
||||
|
||||
Sat Jul 12 15:43:01 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* HACKING: Rewrite paragraph on arbitrary limits to reflect the
|
||||
fact that the known arbitrary limits are gone.
|
||||
|
||||
8 Jul 1997 Jim Kingdon
|
||||
|
||||
* cvsnt.dsp: Turn on browse information.
|
||||
|
||||
Thu Jul 3 10:07:01 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* INSTALL: Sending exact suggested text is almost as good as a diff.
|
||||
|
||||
* INSTALL (i386 family): Add lines about Watcom and EMX on OS/2.
|
||||
|
||||
* TODO: Add notes about popt and option parsing in general.
|
||||
|
||||
Wed Jul 2 13:11:03 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* TODO: Update item 149 to reflect CVS/Root.
|
||||
|
||||
* TODO: Add item 187, about usage errors vs. help messages.
|
||||
|
||||
Mon Jun 23 18:24:13 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* NEWS: Adjust mention of read-only access in the light of
|
||||
changes to cvs.texinfo.
|
||||
|
||||
* TODO: Add item 186, concerning multisite.
|
||||
|
||||
Sun, 22 Jun 1997 Jim Kingdon
|
||||
|
||||
* cvsnt.dsp: New file. This apparently is what Visual C++ 5.0
|
||||
uses in lieu of a .mak file (or so it seems).
|
||||
* .cvsignore: Add cvsnt.opt cvsnt.dsw cvsnt.plg. These seem to
|
||||
be the generated files du jour for Visual C++ 5.0.
|
||||
|
||||
Thu Jun 19 17:16:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* NEWS: Add item about CVSROOT/config.
|
||||
|
||||
Wed Jun 18 00:00:02 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* NEWS: Mention pserver --allow-root.
|
||||
|
||||
@@ -50,7 +50,7 @@ interest), then one of the developers can ask the devel-cvs mailing
|
||||
list whether it is OK to make this person a developer (after first
|
||||
sending the prospective developer a copy of this file and then having
|
||||
the prospective developer say they want to be a developer). If there
|
||||
are no objections, an account will be created.
|
||||
are no objections, the person will be made a developer.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Policy regarding checkout-only access:
|
||||
|
||||
+8585
-11
File diff suppressed because it is too large.
Load diff
@@ -13,11 +13,12 @@ lib/getdate.c
|
||||
tools/pcl-cvs/*.ps
|
||||
tools/pcl-cvs/*.aux
|
||||
tools/pcl-cvs/texinfo.tex
|
||||
cvsnt.mak
|
||||
cvsnt.*
|
||||
cvs.spec
|
||||
build.com
|
||||
src/build_src.com
|
||||
lib/build_lib.com
|
||||
diff/build_diff.com
|
||||
README.VMS
|
||||
|
||||
The following non-freebsd-specific directories were deleted:
|
||||
|
||||
+15
-8
@@ -28,6 +28,12 @@ foo (arg)
|
||||
bar (arg);
|
||||
baz (arg);
|
||||
}
|
||||
switch (c)
|
||||
{
|
||||
case 'A':
|
||||
aflag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
The file cvs-format.el contains settings for emacs and the NEWS file
|
||||
@@ -64,12 +70,13 @@ but we want to fix that code. Of course, bad input data, a corrupt
|
||||
repository, bad options, etc., should always print a real error
|
||||
message instead.
|
||||
|
||||
We realize that CVS contains many arbitrary limits (such as PATH_MAX).
|
||||
Do not do this in new code; we are trying to *fix* those arbitrary
|
||||
limits. In particular, it should be possible to pass very long
|
||||
arguments (e.g. from a WWW cgi script) to CVS without having it
|
||||
overrun any buffers (which might create a security hole in the WWW
|
||||
example).
|
||||
Do not use arbitrary limits (such as PATH_MAX) except perhaps when the
|
||||
operating system or some external interface requires it. We spent a
|
||||
lot of time getting rid of them, and we don't want to put them back.
|
||||
If you find any that we missed, please report it as with other bugs.
|
||||
In most cases such code will create security holes (for example, for
|
||||
anonymous readonly access via the CVS protocol, or if a WWW cgi script
|
||||
passes client-supplied arguments to CVS).
|
||||
|
||||
Although this is a long-term goal, it also would be nice to move CVS
|
||||
in the direction of reentrancy. This reduces the size of the data
|
||||
@@ -145,7 +152,7 @@ context diffs or unidiffs for patches.
|
||||
|
||||
Note that all submitted changes may be distributed under the terms of
|
||||
the GNU Public License, so if you don't like this, don't submit them.
|
||||
Submit changes to bug-cvs@prep.ai.mit.edu.
|
||||
Submit changes to bug-cvs@gnu.org.
|
||||
|
||||
Generally speaking if you follow the guidelines in this file you can
|
||||
expect a yes or no answer about whether your patch is accepted. But
|
||||
@@ -185,7 +192,7 @@ test-results.
|
||||
|
||||
One other list related to CVS development is bug-cvs. This is the
|
||||
list which users are requested to send bug reports to. Anyone can
|
||||
subscribe; to do so send mail to bug-cvs-request@prep.ai.mit.edu.
|
||||
subscribe; to do so send mail to bug-cvs-request@gnu.org.
|
||||
|
||||
Other CVS discussions take place on the info-cvs mailing list
|
||||
(send mail to [email protected] to subscribe) or on
|
||||
|
||||
+150
-98
@@ -1,13 +1,106 @@
|
||||
First, read the README file. If you're still happy...
|
||||
|
||||
First you need to obtain and install the CVS executables. If you got
|
||||
a distribution which contains executables, consult the installation
|
||||
instructions for that distribution. If you got source code, do not
|
||||
panic. On many platforms building CVS from source code is a
|
||||
straightforward process requiring no programming knowledge. See the
|
||||
section BUILDING FROM SOURCE CODE at the end of this file, which
|
||||
includes a list of platforms which have been tested.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
1) Take a look at the CVS documentation, if desired. For most
|
||||
purposes you want doc/cvs.texinfo, also known as _Version Management
|
||||
with CVS_ by Per Cederqvist et al. Looking at it might be as simple
|
||||
as "info cvs" but this will depend on your installation; see README
|
||||
for more details.
|
||||
|
||||
See what CVS can do for you, and if it fits your environment (or can
|
||||
possibly be made to fit your environment). If things look good,
|
||||
continue on. Alternately, just give CVS a try first then figure out
|
||||
what it is good for.
|
||||
|
||||
2) Set the CVSROOT environment variable to where you want to put your
|
||||
source repository. See the "Setting up the repository" section of
|
||||
the Cederqvist manual for details, but the quick summary is just to
|
||||
pick some directory. We'll use /src/master as an example. For
|
||||
users of a POSIX shell (sh/bash/ksh) on unix, the following
|
||||
commands can be placed in user's ~/.profile, ~/.bash_profile file;
|
||||
or in the site-wide /etc/profile:
|
||||
|
||||
CVSROOT=/src/master; export CVSROOT
|
||||
|
||||
For C shell users on unix place the following commands in the
|
||||
user's ~/.cshrc, ~/.login, or /etc/chsrc file:
|
||||
|
||||
setenv CVSROOT /src/master
|
||||
|
||||
For Windows users, supposing the repository will be in
|
||||
d:\src\master, place the following line in c:\autoexec.bat. On
|
||||
Windows 95, autoexec.bat might not already exist. In that case,
|
||||
just create a new file containing the following line.
|
||||
|
||||
set CVSROOT=:local:d:\src\master
|
||||
|
||||
If these environment variables are not already set in your current
|
||||
shell, set them now by typing the above line at the command prompt
|
||||
(or source the login script you just edited).
|
||||
The instructions for the remaining steps assume that you have set
|
||||
the CVSROOT environment variable.
|
||||
|
||||
3) Create the master source repository. Again, the details are in
|
||||
the "Setting up the repository" section of cvs.texinfo; the
|
||||
one-line summary is:
|
||||
|
||||
$ cvs init
|
||||
|
||||
In this and subsequent examples we use "$" to indicate the command
|
||||
prompt; do not type the "$".
|
||||
|
||||
4) It might be a good idea to jump right in and put some sources or
|
||||
documents directly under CVS control. From within the top-level
|
||||
directory of your source tree, run the following commands:
|
||||
|
||||
$ cvs import -m "test distribution" ccvs CVS_DIST CVS-TEST
|
||||
|
||||
(Those last three items are, respectively, a repository location, a
|
||||
"vendor tag", and a "release tag". You don't need to understand
|
||||
them yet, but read the section "Starting new projects" in the
|
||||
Cederqvist manual for details).
|
||||
|
||||
5) Having done step 4, one should be able to checkout a fresh copy of the
|
||||
sources you just imported and hack away at the sources with the
|
||||
following command:
|
||||
|
||||
$ cd
|
||||
$ cvs checkout ccvs
|
||||
|
||||
This will make the directory "ccvs" in your current directory and
|
||||
populate it with the appropriate files and directories.
|
||||
|
||||
6) You may wish to customize the various administrative files, in particular
|
||||
modules. See the Cederqvist manual for details.
|
||||
|
||||
7) Read the NEWS file to see what's new.
|
||||
|
||||
8) Hack away.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
BUILDING FROM SOURCE CODE
|
||||
|
||||
Tested platforms
|
||||
|
||||
CVS has been tested on the following platforms. The most recent
|
||||
version of CVS reported to have been tested is indicated, but more
|
||||
recent versions of CVS probably will work too. Please send updates to
|
||||
this list to bug-cvs@prep.ai.mit.edu (doing so in the form of a diff
|
||||
to this file is encouraged). "tested" means, at a minimum, that CVS
|
||||
compiles and appears to work on simple (manual) testing. In many
|
||||
cases it also means "make check" and/or "make remotecheck" passes, but
|
||||
we don't try to list the platforms for which that is true.
|
||||
this list to bug-cvs@gnu.org (doing so in the form of a diff
|
||||
to this file, or at least exact suggested text, is encouraged).
|
||||
"tested" means, at a minimum, that CVS compiles and appears to work on
|
||||
simple (manual) testing. In many cases it also means "make check"
|
||||
and/or "make remotecheck" passes, but we don't try to list the
|
||||
platforms for which that is true.
|
||||
|
||||
Alpha:
|
||||
DEC Alpha running OSF/1 version 1.3 using cc (about 1.4A2)
|
||||
@@ -15,6 +108,7 @@ Alpha:
|
||||
DEC Alpha running OSF/1 version 2.1 (about 1.4A2)
|
||||
DEC Alpha running OSF/1 version 3.0 (1.5.95) (footnote 7)
|
||||
DEC Alpha running OSF/1 version 3.2 (1.9)
|
||||
DEC Alpha running Digital UNIX v4.0C using gcc 2.7.2.2 (1.9.14)
|
||||
DEC Alpha running VMS 6.2 (1.8.85 client-only)
|
||||
Cray:
|
||||
J90 (CVS 970215 snapshot)
|
||||
@@ -22,10 +116,11 @@ Cray:
|
||||
HPPA:
|
||||
HP 9000/710 running HP-UX 8.07A using gcc (about 1.4A2)
|
||||
HPPA running HP-UX 9 (1.8)
|
||||
HPPA running HP-UX 10.01 (1.7)
|
||||
HPPA 1.1 running HP-UX A.09.03 (1.5.95) (footnote 8)
|
||||
HPPA 1.1 running HP-UX A.09.04 (1.7.1)
|
||||
HPPA 9000/735 running HP-UX A.09.05 (1.8.87)
|
||||
HPPA running HP-UX 10.01 (1.7)
|
||||
HPPA running HP-UX 10.20 using gcc 2.7.2.2 (1.9.14)
|
||||
NextSTEP 3.3 (1.7)
|
||||
i386 family:
|
||||
Solaris 2.4 using gcc (about 1.4A2)
|
||||
@@ -33,17 +128,23 @@ i386 family:
|
||||
Unixware 2.1 (1.8.86)
|
||||
ISC 4.0.1 (1.8.87)
|
||||
Linux (kernel 1.2.x) (1.8.86)
|
||||
Linux (kernel 2.0.x, RedHat 4.2) (1.9)
|
||||
BSDI 2.0 (1.4.93) (footnote 5)
|
||||
FreeBSD 2.1.5-stable (1.8.87)
|
||||
NextSTEP 3.3 (1.7)
|
||||
SCO Unix 3.2.4.2, gcc 2.7.2 (1.8.87) (footnote 4)
|
||||
SCO OpenServer 5 (1.8.86)
|
||||
Sequent Dynix/PTX 4.1.4 (1.9.20 or so + patches)
|
||||
Lynx 2.3.0 080695 (1.6.86) (footnote 9)
|
||||
Windows NT 3.51 (1.8.86 client; 1.8.3 local)
|
||||
Windows NT 3.51 service pack 4 (1.9)
|
||||
Windows NT 3.51 service pack 5 (1.9) -- DOES NOT WORK (footnote 11)
|
||||
Windows NT 4.0 (1.9 client and local)
|
||||
Windows 95 (1.8.86 client and local)
|
||||
QNX 4 (1.7 + obvious patches)
|
||||
Windows 95 (1.9 client and local)
|
||||
QNX (1.9.1 + patches for strippath() and va_list)
|
||||
OS/2 Version 3 using IBM C/C++ Tools 2.01 (1.8.86 + patches, client)
|
||||
OS/2 Version 3 using EMX 0.9c (1.9.22, client)
|
||||
OS/2 Version 3 using Watcom version ? (? - has this been tested?)
|
||||
m68k:
|
||||
Sun 3 running SunOS 4.1.1_U1 w/ bundled K&R /usr/5bin/cc (1.8.86+)
|
||||
NextSTEP 3.3p1 (1.8.87)
|
||||
@@ -57,6 +158,7 @@ MIPS:
|
||||
DECstation running Ultrix 4.3 (1.8.85)
|
||||
SGI running Irix 4.0.5H using gcc and cc (about 1.4A2) (footnote 2)
|
||||
SGI running Irix 5.3 using gcc 2.7.2 (1.8.87)
|
||||
SGI running Irix 6.2 using SGI MIPSpro 6.2 and beta 7.2 compilers (1.9)
|
||||
SGI running Irix-6.2 (1.9.8)
|
||||
Siemens-Nixdorf RM600 running SINIX-Y (1.6)
|
||||
PowerPC or RS/6000:
|
||||
@@ -64,13 +166,15 @@ PowerPC or RS/6000:
|
||||
IBM RS/6000 running AIX 3.2.5 (1.8)
|
||||
IBM RS/6000 running AIX 4.1 using gcc and cc (about 1.4A2) (footnote 1)
|
||||
Lynx 2.3.1 120495 (1.6.86) (footnote 9)
|
||||
Lynx 2.5 (1.9) (footnote 10)
|
||||
SPARC:
|
||||
Sun SPARC running SunOS 4.1.x (1.8.87)
|
||||
Sun SPARC running SunOS 4.1.x using gcc 2.7.2.1 (1.9.14)
|
||||
Sun SPARCstation 10 running Solaris 2.3 using gcc and cc (about 1.4A2)
|
||||
Sun SPARCstation running Solaris 2.4 using gcc and cc (about 1.5.91)
|
||||
Sun SPARC running Solaris 2.5 (1.8.87)
|
||||
Sun SPARC running Solaris 2.5.1 using gcc 2.7.2.2 (1.9.14)
|
||||
NextSTEP 3.3 (1.7)
|
||||
Sun SparcClassing running Linux 2.0.17, gcc 2.7.2 (1.8.87)
|
||||
Sun SPARC running Linux 2.0.17, gcc 2.7.2 (1.8.87)
|
||||
VAX:
|
||||
VAX running VMS 6.2 (1.9+patches, client-only)
|
||||
(see README.VMS for information on necessary hacks).
|
||||
@@ -117,11 +221,19 @@ VAX:
|
||||
So after running configure I had to undef HAVE_DIRENT_H and
|
||||
define HAVE_SYS_DIR_H.
|
||||
|
||||
(footnote 10)
|
||||
Had to compile with "make LIBS=-lbsd" (to get gethostbyname
|
||||
and getservbyname).
|
||||
|
||||
(footnote 11)
|
||||
when I do a `cvs init' I get this message:
|
||||
ci: 'RCS/loginfo,v' is not a regular file
|
||||
ci: RCS/loginfo,v: Invalid argument
|
||||
cvs [init aborted]: failed to checkin n:/safe/CVSROOT/loginfo
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Installation under Unix (if you got a binary distribution from
|
||||
somewhere, install it according to procedure for that binary
|
||||
distribution, then skip to step 5):
|
||||
Building from source code under Unix:
|
||||
|
||||
1) Run "configure":
|
||||
|
||||
@@ -148,23 +260,8 @@ distribution, then skip to step 5):
|
||||
|
||||
Typically this can reduce the size of the executable by around 30%.
|
||||
|
||||
If you are using server or local CVS, RCS needs to be installed in
|
||||
the user's PATH (or a path you have configured in src/options.h,
|
||||
or a path specified with the -b option). If you don't have RCS,
|
||||
you will need to get it from GNU as well. It is best to get the
|
||||
version 5.7 (or later) version of RCS, available from
|
||||
prep.ai.mit.edu in the file pub/gnu/rcs-5.7.tar.gz. If you do not
|
||||
have RCS version 5.x (for example, if you are using the old RCS
|
||||
shipped with some versions of HPUX), CVS will probably fail to work
|
||||
entirely. To find out what version of RCS you have, invoke "co -V".
|
||||
If it fails to print a version number, it is an old version.
|
||||
|
||||
If you want version control of files with binary data, make sure
|
||||
that the RCS configure script finds GNU diff 1.15 or later and
|
||||
notices that diff supports the -a option. CVS itself is much less
|
||||
picky about which version of diff it uses, and you shouldn't need
|
||||
to worry about that. If you are using GNU diff 2.6 or 2.7, you may
|
||||
want to know about a (subtle) bug described in doc/DIFFUTILS-2.7-BUG.
|
||||
Unlike previous versions of CVS, you do not need to install RCS
|
||||
or GNU diff.
|
||||
|
||||
NOTE: The configure program will cache the results of the previous
|
||||
configure execution. If you need to re-run configure from scratch, you
|
||||
@@ -221,11 +318,8 @@ distribution, then skip to step 5):
|
||||
|
||||
END OF NOTE FOR NDBM GUNK.
|
||||
|
||||
2) Edit src/options.h. Appropriate things to look at may be the
|
||||
invocation locations of programs like DIFF.
|
||||
Also glance at the default values for the environment variables
|
||||
that CVS uses, in particular, the RCSBIN variable, which holds the
|
||||
path to where the RCS programs live on your system.
|
||||
2) Edit src/options.h. The defaults should be reasonable, and in fact
|
||||
if you are lazy you can safely skip this step.
|
||||
|
||||
3) Try to build it:
|
||||
|
||||
@@ -257,65 +351,6 @@ distribution, then skip to step 5):
|
||||
Depending on your installation's configuration, you may need to be
|
||||
root to do this.
|
||||
|
||||
5) Take a look at the CVS documentation.
|
||||
|
||||
$ man cvs
|
||||
|
||||
and
|
||||
|
||||
$ info cvs
|
||||
|
||||
See what it can do for you, and if it fits your environment (or can
|
||||
possibly be made to fit your environment). If things look good,
|
||||
continue on...
|
||||
|
||||
6) Set up the master source repository. See the "Setting up the repository"
|
||||
section of cvs.texinfo for details; the one-line summary is (if you
|
||||
are putting the repository in /src/master):
|
||||
$ cvs -d /src/master init
|
||||
|
||||
7) Have all users of the CVS system set the CVSROOT environment
|
||||
variable appropriately to reflect the placement of your source
|
||||
repository. If the above example is used, the following commands
|
||||
can be placed in user's ~/.profile, ~/.bash_profile file; or in the
|
||||
site-wide /etc/profile:
|
||||
|
||||
CVSROOT=/src/master; export CVSROOT
|
||||
|
||||
for sh/bash/ksh users, or place the following commands in the user's
|
||||
~/.cshrc, ~/.login, or /etc/chsrc file:
|
||||
|
||||
setenv CVSROOT /src/master
|
||||
|
||||
for csh/tcsh users. If these environment variables are not already set
|
||||
in your current shell, set them now (or source the login script you
|
||||
just edited). You will need to have the CVSROOT environment variable
|
||||
set to continue on to the next step.
|
||||
|
||||
8) It might be a good idea to jump right in and put the CVS distribution
|
||||
directly under CVS control. From within the top-level directory of the
|
||||
CVS distribution (the one that contains this README file) do the
|
||||
following commands:
|
||||
|
||||
$ make distclean
|
||||
$ cvs import -m 'CVS 1.6 distribution' cvs CVS_DIST CVS-1_6
|
||||
|
||||
9) Having done step 8, one should be able to checkout a fresh copy of the
|
||||
CVS distribution and hack away at the sources with the following command:
|
||||
|
||||
$ cd
|
||||
$ cvs checkout cvs
|
||||
|
||||
This will make the directory "cvs" in your current directory and
|
||||
populate it with the appropriate CVS files and directories.
|
||||
|
||||
10) You may wish to customize the various administrative files, in particular
|
||||
modules. See cvs.texinfo for details.
|
||||
|
||||
11) Read the NEWS file to see what's new.
|
||||
|
||||
12) Hack away.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Detailed information about your interaction with "configure":
|
||||
@@ -351,13 +386,30 @@ behaviour:
|
||||
appear to be.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Installation under Windows NT:
|
||||
|
||||
Building from source code under Windows NT/95:
|
||||
|
||||
You may find interesting information in windows-NT/README.
|
||||
|
||||
1) Using Microsoft Visual C++ version 2.1, open the project `cvsnt.mak',
|
||||
in the top directory of the CVS distribution.
|
||||
1) Using Microsoft Visual C++ 5.x, open the project `cvsnt.dsp',
|
||||
in the top directory of the CVS distribution. If you have an older
|
||||
version of Visual C++, take a look at windows-NT/README.
|
||||
2) Choose "Build cvs.exe" from the "Project" menu.
|
||||
3) MSVC will place the executable file cvs.exe in WinDebug, or whatever
|
||||
3) MSVC will place the executable file cvs.exe in WinRel, or whatever
|
||||
your target directory is.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Building from source code under other platforms:
|
||||
|
||||
For OS/2, see os2/README and emx/README.
|
||||
|
||||
For VMS, see README.VMS
|
||||
|
||||
For Macintosh, see macintosh/README.MacCVS
|
||||
|
||||
For a Java client, see jCVS (which is a separate package from CVS
|
||||
itself, but which might be preferable to the Macintosh port mentioned
|
||||
above, for example).
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -45,8 +45,8 @@ particular reason to think the bug is fixed -kingdon, Sep 96).
|
||||
...
|
||||
|
||||
I claim that CVS dirs should be ignored.
|
||||
(I don't *think* this always happens; is "-I !" getting picked up somewhere
|
||||
something like that? -kingdon, Sep 96)
|
||||
(This reportedly happens if "cvs add CVS" (or "cvs add *")
|
||||
is followed by "cvs status", in client/server mode - CVS 1.9).
|
||||
|
||||
* On remote checkout, files don't have the right time/date stamps in
|
||||
the CVS/Entries files. Doesn't look like the C/S protocol has any
|
||||
|
||||
@@ -89,12 +89,12 @@ DISTFILES = \
|
||||
ChangeLog NEWS ChangeLog.zoo \
|
||||
configure configure.in stamp-h.in config.h.in Makefile.in acconfig.h \
|
||||
cvs-format.el mkinstalldirs install-sh \
|
||||
cvsnt.mak \
|
||||
cvsnt.mak cvsnt.dsp \
|
||||
.cvsignore cvs.spec
|
||||
|
||||
### Subdirectories to run make in for the primary targets.
|
||||
# Unix source subdirs, where we'll want to run lint and etags:
|
||||
USOURCE_SUBDIRS = lib zlib src
|
||||
USOURCE_SUBDIRS = lib zlib diff src
|
||||
# All other subdirs:
|
||||
SUBDIRS = ${USOURCE_SUBDIRS} man doc contrib tools \
|
||||
windows-NT os2 emx macintosh vms
|
||||
@@ -188,18 +188,21 @@ saber:
|
||||
check:
|
||||
cd lib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd zlib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd diff ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd src ; $(MAKE) $(FLAGS_TO_PASS) check
|
||||
|
||||
.PHONY: remotecheck
|
||||
remotecheck:
|
||||
cd lib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd zlib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd diff ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd src ; $(MAKE) $(FLAGS_TO_PASS) remotecheck
|
||||
|
||||
.PHONY: installcheck
|
||||
installcheck:
|
||||
cd lib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd zlib ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd diff ; $(MAKE) $(FLAGS_TO_PASS)
|
||||
cd src ; $(MAKE) $(FLAGS_TO_PASS) installcheck
|
||||
|
||||
.PHONY: lint
|
||||
@@ -239,7 +242,7 @@ spec:
|
||||
echo > .fname cvs-`cat .version`
|
||||
rm -f `cat .fname`.spec
|
||||
sed < $(top_srcdir)/cvs.spec \
|
||||
-e 's/@VERSION@/'`cat .version`'/' \
|
||||
-e 's/@VERSION@/'`cat .version`'/g' \
|
||||
> `cat .fname`.spec
|
||||
|
||||
|
||||
|
||||
+28
-4
@@ -1,5 +1,30 @@
|
||||
Changes since 1.9:
|
||||
|
||||
* One can now authenticate and encrypt using the GSSAPI network
|
||||
security interface. For details see the description of :gserver: in
|
||||
CVSROOT, and the -a global option.
|
||||
|
||||
* All access to RCS files is now implemented internally rather than by
|
||||
calling RCS programs. The main user-visible consequence of this is
|
||||
that there is no need to worry about making sure that CVS finds the
|
||||
correct version of RCS. The -b global option and the RCSBIN setting
|
||||
in CVSROOT/config are still accepted but don't do anything. The
|
||||
$RCSBIN internal variable in administrative files is no longer
|
||||
accepted.
|
||||
|
||||
* There is a new syntax, "cvs admin -orev1::rev2", which collapses the
|
||||
revisions between rev1 and rev2 without deleting rev1 or rev2
|
||||
themselves.
|
||||
|
||||
* There is a new administrative file CVSROOT/config which allows one
|
||||
to specify miscellaneous aspects of CVS configuration. Currently
|
||||
supported here:
|
||||
|
||||
- SystemAuth, allows you to prevent pserver from checking for system
|
||||
usernames/passwords.
|
||||
|
||||
For more information see the "config" section of cvs.texinfo.
|
||||
|
||||
* When setting up the pserver server, one now must specify the
|
||||
allowable CVSROOT directories in inetd.conf. See the Password
|
||||
authentication server section of cvs.texinfo for details. Note that
|
||||
@@ -21,10 +46,9 @@ repository from the cvspass file.
|
||||
password-authenticated server (other access methods are just governed
|
||||
by Unix file permissions, since they require login access to the
|
||||
repository machine anyway). See the "Repository" section of
|
||||
cvs.texinfo for details. Note that the security cautions in
|
||||
cvs.texinfo ("Password authentication security"), and the requirement
|
||||
that read-only users be able to create locks and write the history
|
||||
file, both apply.
|
||||
cvs.texinfo for details, including a discussion of security issues.
|
||||
Note that the requirement that read-only users be able to create locks
|
||||
and write the history file still applies.
|
||||
|
||||
* The "checkout" command now creates a CVS directory at the top level
|
||||
of the new working directory, in addition to CVS directories created
|
||||
|
||||
@@ -46,13 +46,6 @@ are actually more appropriate for this list.
|
||||
(and modify) indexes. This becomes very apparent with files
|
||||
with several hundred revisions.
|
||||
|
||||
* A RCS "library", so CVS could operate on RCS files directly.
|
||||
|
||||
CVS parses RCS files in order to determine if work needs to be done,
|
||||
and then RCS parses the files again when it is performing the work.
|
||||
This would be much faster if CVS could do whatever is necessary
|
||||
by itself. (see comment at start of rcscmds.c for a few notes on this).
|
||||
|
||||
1. Improved testsuite/sanity check script
|
||||
|
||||
* Need to use a code coverage tool to determine how much the sanity
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ ChangeLog files in each directory for a more complete idea.
|
||||
In addition to the above contributors, the following Beta testers
|
||||
deserve special mention for their support. This is only a partial
|
||||
list; if you have helped in this way and would like to be listed, let
|
||||
bug-cvs know (as described elsewhere in this file).
|
||||
bug-cvs know (as described in the Cederqvist manual).
|
||||
|
||||
Mark D. Baushke <[email protected]>
|
||||
Per Cederqvist <[email protected]>
|
||||
|
||||
@@ -134,3 +134,12 @@ unnecessary baggage. The only dependency would be on tcl (that is,
|
||||
wish).
|
||||
|
||||
* perl or python or <any other serious contenders here?>
|
||||
|
||||
It is worth thinking about how to:
|
||||
|
||||
a. include spaces in arguments which we pass to the program under
|
||||
test (sanity.sh dotest cannot do this; see test rcs-9 for a
|
||||
workaround).
|
||||
|
||||
b. pass stdin to the program under test (sanity.sh, again, handles
|
||||
this by bypassing dotest).
|
||||
+409
-41
@@ -1,10 +1,14 @@
|
||||
The "TODO" file! -*-Indented-Text-*-
|
||||
|
||||
22. Catch signals for cleanup when "add"ing files.
|
||||
|
||||
24. Insist on a log message.
|
||||
(If done, this should be configurable via commitinfo or some new
|
||||
config file -kingdon, Jun 1995).
|
||||
|
||||
30. Add "patch" program option to the modules database.
|
||||
30. Add "rdiff" program option to the modules database (and "diff"
|
||||
too?). (perhaps should think a little harder about what this is
|
||||
trying to accomplish and what the best way is -kingdon, Jul 1997).
|
||||
|
||||
31. Think hard about ^C recovery.
|
||||
|
||||
@@ -16,7 +20,9 @@
|
||||
that other branch is already merged. This has pitfalls--it could
|
||||
easily lead to invisible state which could confuse users very
|
||||
rapidly--but having to create a tag or some such mechanism to keep
|
||||
track of what has been merged is a pain.
|
||||
track of what has been merged is a pain. Take a look at PRCS 1.2.
|
||||
PRCS 1.0 was particularly bad the way it handled the "invisible
|
||||
state", but 1.2 is significantly better.
|
||||
|
||||
45. Consider enhancing the "rdiff" and "tag" (rtag??) command support in
|
||||
the module database -- they seem hard to use since these commands
|
||||
@@ -45,9 +51,6 @@
|
||||
63. The "import" and vendor support commands (co -j) need to be documented
|
||||
better.
|
||||
|
||||
64. Need to greatly increase the performance of an initial checkout.
|
||||
[[ it got better, then we added functionality, making it worse again ]]
|
||||
|
||||
66. Length of the CVS temporary files must be limited to 14 characters for
|
||||
System-V stupid support. As well as the length on the CVS.adm files.
|
||||
|
||||
@@ -57,8 +60,8 @@
|
||||
73. Consider an option (in .cvsrc?) to automatically add files that are new
|
||||
and specified to commit.
|
||||
|
||||
79. Might be nice to have some sort of interface to TFS and tagged
|
||||
revisions.
|
||||
79. Might be nice to have some sort of interface to Sun's Translucent
|
||||
(?) File System and tagged revisions.
|
||||
|
||||
82. Maybe the import stuff should allow an arbitrary revision to be
|
||||
specified.
|
||||
@@ -66,8 +69,10 @@
|
||||
84. Improve the documentation about administration of the repository and
|
||||
how to add/remove files and the use of symbolic links.
|
||||
|
||||
85. Add revision controlled symbolic links to CVS using one of the tag
|
||||
fields in the RCS file.
|
||||
85. Make symbolic links a valid thing to put under version control.
|
||||
Perhaps use one of the tag fields in the RCS file? Note that we
|
||||
can only support symlinks that are relative and within the scope of
|
||||
the sources being controlled.
|
||||
|
||||
92. Look into this:
|
||||
After a bit of soul searching via dbx, I realized my sin was that I'd
|
||||
@@ -130,11 +135,12 @@
|
||||
113. The "cvs update" command should tee its output to a log file in ".".
|
||||
(why? What is wrong with piping stdout to "tee"? -kingdon, Jun 1995)
|
||||
|
||||
119. Consider an option to have import checkout the RCS or SCCS files
|
||||
if necessary. (this is if someone want to import something which is
|
||||
in RCS or SCCS without preserving the history, but making sure they
|
||||
do get the latest versions. It isn't clear to me how useful that is
|
||||
-kingdon, June 1996).
|
||||
119. When importing a directory tree that is under SCCS/RCS control,
|
||||
consider an option to have import checkout the SCCS/RCS files if
|
||||
necessary. (This is if someone wants to import something which
|
||||
is in RCS or SCCS without preserving the history, but makes sure
|
||||
they do get the latest versions. It isn't clear to me how useful
|
||||
that is -kingdon, June 1996).
|
||||
|
||||
122. If Name_Repository fails, it currently causes CVS to die completely. It
|
||||
should instead return NULL and have the caller do something reasonable
|
||||
@@ -142,6 +148,7 @@
|
||||
-kingdon, June 1996).
|
||||
|
||||
123. Add a flag to import to not build vendor branches for local code.
|
||||
(See `importb' tests in src/sanity.sh for more details).
|
||||
|
||||
124. Anyway, I thought you might want to add something like the following
|
||||
to the cvs man pages:
|
||||
@@ -157,8 +164,6 @@
|
||||
127. Look at *info files; they should all be quiet if the files are not
|
||||
there. Should be able to point at a RCS directory and go.
|
||||
|
||||
128. When I tag a file, the message tells me that I'm tagging a directory.
|
||||
|
||||
130. cvs diff with no -r arguments does not need to look up the current RCS
|
||||
version number since it only cares about what's in the Entries file.
|
||||
This should make it much faster.
|
||||
@@ -184,10 +189,14 @@
|
||||
variable to limit the amount of sources that need to be duplicated for
|
||||
sites with giant source trees and no disk space.
|
||||
|
||||
141. Import should accept modules as its directory argument.
|
||||
141. Import should accept modules as its directory argument. If we're
|
||||
going to implement this, we should think hard about how modules
|
||||
might be expanded and how to handle those cases.
|
||||
|
||||
143. Update the documentation to show that the source repository is
|
||||
something far away from the files that you work on.
|
||||
something far away from the files that you work on. (People who
|
||||
come from an RCS background are used to their `repository' being
|
||||
_very_ close to their working directory.)
|
||||
|
||||
144. Have cvs checkout look for the environment variable CVSPREFIX
|
||||
(or CVSMODPREFIX or some such). If it's set, then when looking
|
||||
@@ -227,14 +236,42 @@
|
||||
.#foo.c.1.5 or whatever), so they can do the interactive part at
|
||||
that point -kingdon, June 1996).
|
||||
|
||||
149. On Sun, 2 Feb 92 22:01:38 EST, [email protected] (John P. Rouillard)
|
||||
said:
|
||||
Maybe there should be an option to cvs admin that allows a user to
|
||||
change the Repository file with some degree of error checking?
|
||||
149. Maybe there should be an option to cvs admin that allows a user to
|
||||
change the Repository/Root file with some degree of error checking?
|
||||
Something like "cvs admin reposmv /old/path /new/pretty/path". Before
|
||||
it does the replace it check to see that the files
|
||||
/new/pretty/path/<dir>/<files> exist.
|
||||
|
||||
The obvious cases are where one moves the repository to another
|
||||
machine or directory. But there are other cases, like where the
|
||||
user might want to change from :pserver: to :ext:, use a different
|
||||
server (if there are two server machines which share the
|
||||
repository using a networked file system), etc.
|
||||
|
||||
The status quo is a bit of a mess (as of, say, CVS 1.9). It is
|
||||
that the -d global option has two moderately different uses. One
|
||||
is to use a totally different repository (in which case we'd
|
||||
probably want to give an error if it disagreed with CVS/Root, as
|
||||
CVS 1.8 and earlier did). The other is the "reposmv"
|
||||
functionality above (in which the two repositories really are the
|
||||
same, and we want to update the CVS/Root files). A related issue
|
||||
is that the fact that CVS only sets and looks at the CVS/Root
|
||||
file in the directory where CVS is run; it doesn't do anything
|
||||
about CVS/Root files in subdirectories.
|
||||
|
||||
Note also RELATIVE_REPOS in options.h; it needs to be set for
|
||||
changing CVS/Root (not CVS/Repository) to be sufficient in the
|
||||
case where the directory has changed.
|
||||
|
||||
This whole area is a rather bad pile of individual decisions which
|
||||
accumulated over time, some of them probably bad decisions with
|
||||
hindsight. But we didn't get into this mess overnight, and we're
|
||||
not going to get out of it overnight (that is, we need to come up
|
||||
with a replacement behavior, document what parts of the status
|
||||
quo are deprecated, probably circulate some unofficial patches, &c).
|
||||
|
||||
(this item originally added 2 Feb 1992 but revised since).
|
||||
|
||||
150. I have a customer request for a way to specify log message per
|
||||
file, non-interactively before the commit, such that a single, fully
|
||||
recursive commit prompts for one commit message, and concatenates the
|
||||
@@ -256,8 +293,9 @@
|
||||
message specified at commit time. Easy enough. (having cvs
|
||||
commit be non-interactive takes care of various issues like
|
||||
whether to connect to the server before or after prompting for a
|
||||
message (see comment in commit.c at call to start_server)
|
||||
-kingdon, June 1996)
|
||||
message (see comment in commit.c at call to start_server). Also
|
||||
would clean up the kludge for what to do with the message from
|
||||
do_editor if the up-to-date check fails (see commit.c client code).
|
||||
|
||||
I'm not sure about the part above about having commit prompt
|
||||
for an overall message--part of the point is having commit
|
||||
@@ -270,30 +308,41 @@
|
||||
incompatibility between client/server (per-tree) and
|
||||
non-client/server (per-directory).
|
||||
|
||||
A few interesting issues with this: (1) if you do a cvs update or
|
||||
some other operation which changes the working directory, do you
|
||||
need to run "cvs message" again (it would, of course, bring up
|
||||
the old message which you could accept)? Probably yes, after all
|
||||
merging in some conflicts might change the situation. (2) How do
|
||||
you change the stored messages if you change your mind before the
|
||||
commit (probably run "cvs message" again, as hinted in (1))?
|
||||
|
||||
151. Also, is there a flag I am missing that allows replacing Ulrtx_Build
|
||||
by Ultrix_build? I.E. I would like a tag replacement to be a one step
|
||||
operation rather than a two step "cvs rtag -r Ulrtx_Build Ultrix_Build"
|
||||
followed by "cvs trag -d Ulrtx_Build"
|
||||
followed by "cvs rtag -d Ulrtx_Build"
|
||||
|
||||
152. The "cvs -n" option does not work as one would expect for all the
|
||||
commands. In particular, for "commit" and "import", where one would
|
||||
also like to see what it would do, without actually doing anything.
|
||||
|
||||
153. There should be some command (maybe I just haven't figured
|
||||
out which one...) to import a source directory which is already
|
||||
RCS-administered without losing all prior RCS gathered data. Thus, it
|
||||
would have to examine the RCS files and choose a starting version and
|
||||
branch higher than previous ones used.
|
||||
153. There should be some command (maybe I just haven't figured out
|
||||
which one...) to import a source directory which is already
|
||||
RCS-administered without losing all prior RCS gathered data.
|
||||
Thus, it would have to examine the RCS files and choose a
|
||||
starting version and branch higher than previous ones used.
|
||||
(Check out rcs-to-cvs and see if it addresses this issue.)
|
||||
|
||||
154. When committing the modules file, a pre-commit check should be done to
|
||||
verify the validity of the new modules file before allowing it to be
|
||||
committed.
|
||||
|
||||
155. The options for "cvs history" are mutually exclusive, even though
|
||||
useful queries can be done if they are not, as in specifying both a
|
||||
module and a tag. A workaround is to specify the module, then run the
|
||||
output through grep to only display lines that begin with T, which are
|
||||
tag lines.
|
||||
useful queries can be done if they are not, as in specifying both
|
||||
a module and a tag. A workaround is to specify the module, then
|
||||
run the output through grep to only display lines that begin with
|
||||
T, which are tag lines. (Better perhaps if we redesign the whole
|
||||
"history" business -- check out doc/cvs.texinfo for the entire
|
||||
rant.)
|
||||
|
||||
156. Also, how hard would it be to allow continuation lines in the
|
||||
{commit,rcs,log}info files? It would probably be useful with all of
|
||||
@@ -313,9 +362,6 @@
|
||||
revision was already locked by the user as well, thus moving the lock
|
||||
forward after the commit.
|
||||
|
||||
161. The date parser included with CVS (lib/getdate.y) does not support
|
||||
such RCS-supported dates as "1992/03/07". It probably should.
|
||||
|
||||
163. The rtag/tag commands should have an option that removes the specified
|
||||
tag from any file that is in the attic. This allows one to re-use a
|
||||
tag (like "Mon", "Tue", ...) all the time and still have it tag the
|
||||
@@ -385,10 +431,12 @@
|
||||
is down!).
|
||||
|
||||
182. There should be a way to show log entries corresponding to
|
||||
changes from tag "foo" to tag "bar". "cvs log -rfoo -rbar" doesn't
|
||||
cut it, because it is inclusive on the bar end. I'm not sure that is
|
||||
ever a useful or logical behavior ("cvs diff -r foo -r bar" is not
|
||||
similarly inclusive), but is compatibility an issue?
|
||||
changes from tag "foo" to tag "bar". "cvs log -rfoo:bar" doesn't cut
|
||||
it, because it erroneously shows the changes associated with the
|
||||
change from the revision before foo to foo. I'm not sure that is ever
|
||||
a useful or logical behavior ("cvs diff -r foo -r bar" gets this
|
||||
right), but is compatibility an issue? See
|
||||
http://www.cyclic.com/cvs/unoff-log.txt for an unofficial patch.
|
||||
|
||||
183. "cvs status" should report on Entries.Static flag and CVS/Tag (how?
|
||||
maybe a "cvs status -d" to give directory status?). There should also
|
||||
@@ -420,3 +468,323 @@ modifying it), but even as to the general idea, I don't have a clear
|
||||
idea about whether it would be good (see what I mean about the need
|
||||
for better documentation? I work on CVS full-time, and even I don't
|
||||
understand the state of the art on this subject).
|
||||
|
||||
186. There is a frequent discussion of multisite features.
|
||||
|
||||
* There may be some overlap with the client/server CVS, which is good
|
||||
especially when there is a single developer at each location. But by
|
||||
"multisite" I mean something in which each site is more autonomous, to
|
||||
one extent or another.
|
||||
|
||||
* Vendor branches are the closest thing that CVS currently has for
|
||||
multisite features. They have fixable drawbacks (such as poor
|
||||
handling of added and removed files), and more fundamental drawbacks
|
||||
(when you import a vendor branch, you are importing a set of files,
|
||||
not importing any knowledge of their version history outside the
|
||||
current repository).
|
||||
|
||||
* One approach would be to require checkins (or other modifications to
|
||||
the repository) to succeed at a write quorum of sites (51%) before
|
||||
they are allowed to complete. To work well, the network should be
|
||||
reliable enough that one can typically get to that many sites. When a
|
||||
server which has been out of touch reconnects, it would want to update
|
||||
its data before doing anything else. Any of the servers can service
|
||||
all requests locally, except perhaps for a check that they are
|
||||
up-to-date. The way this differs from a run-of-the-mill distributed
|
||||
database is that if one only allows reversible operations via this
|
||||
mechanism (exclude "cvs admin -o", "cvs tag -d", &c), then each site
|
||||
can back up the others, such that failures at one site, including
|
||||
something like deleting all the sources, can be recovered from. Thus
|
||||
the sites need not trust each other as much as for many shared
|
||||
databases, and the system may be resilient to many types of
|
||||
organizational failures. Sometimes I call this design the
|
||||
"CVScluster" design.
|
||||
|
||||
* Another approach is a master/slave one. Checkins happen at the
|
||||
master site, and slave sites need to check whether their local
|
||||
repository is up to date before relying on its information.
|
||||
|
||||
* Another approach is to have each site own a particular branch. This
|
||||
one is the most tolerant of flaky networks; if checkins happen at each
|
||||
site independently there is no particular problem. The big question
|
||||
is whether merges happen only manually, as with existing CVS branches,
|
||||
or whether there is a feature whereby there are circumstances in which
|
||||
merges from one branch to the other happen automatically (for example,
|
||||
the case in which the branches have not diverged). This might be a
|
||||
legitimate question to ask even quite aside from multisite features.
|
||||
|
||||
One additional random tidbit is to note that Eric Raymond has some
|
||||
interest in this sort of thing. The item "Cooperative distributed
|
||||
freeware development" on http://www.ccil.org/~esr/ has a very brief
|
||||
introduction to what he is thinking about.
|
||||
|
||||
187. Might want to separate out usage error messages and help
|
||||
messages. The problem now is that if you specify an invalid option,
|
||||
for example, the error message is lost among all the help text. In
|
||||
the new regime, the error message would be followed by a one-line
|
||||
message directing people to the appropriate help option ("cvs -H
|
||||
<command>" or "cvs --help-commands" or whatever, according to the
|
||||
situation). I'm not sure whether this change would be controversial
|
||||
(as defined in HACKING), so there might be a need for further
|
||||
discussion or other actions other than just coding.
|
||||
|
||||
188. Option parsing and .cvsrc has at least one notable limitation.
|
||||
If you want to set a global option only for some CVS commands, there
|
||||
is no way to do it (for example, if one wants to set -q only for
|
||||
"rdiff"). I am told that the "popt" package from RPM
|
||||
(http://www.rpm.org) could solve this and other problems (for example,
|
||||
if the syntax of option stuff in .cvsrc is similar to RPM, that would
|
||||
be great from a user point of view). It would at least be worth a
|
||||
look (it also provides a cleaner API than getopt_long).
|
||||
|
||||
Another issue which may or may not be related is the issue of
|
||||
overriding .cvsrc from the command line. The cleanest solution might
|
||||
be to have options in mutually exclusive sets (-l/-R being a current
|
||||
example, but --foo/--no-foo is a better way to name such options). Or
|
||||
perhaps there is some better solution.
|
||||
|
||||
189. Renaming files and directories is a frequently discussed topic.
|
||||
|
||||
Some of the problems with the status quo:
|
||||
|
||||
a. "cvs annotate" cannot operate on both the old and new files in a
|
||||
single run. You need to run it twice, once for the new name and once
|
||||
for the old name.
|
||||
|
||||
b. "cvs diff" (or "cvs diff -N") shows a rename as a removal of the
|
||||
old file and an addition of the new one. Some people would like to
|
||||
see the differences between the file contents (but then how would we
|
||||
indicate the fact that the file has been renamed? Certainly the
|
||||
notion that "patch(1)" has of renames is as a removal and addition).
|
||||
|
||||
c. "cvs log" should be able to show the changes between two
|
||||
tags/dates, even in the presence of adds/removes/renames (I'm not sure
|
||||
what the status quo is on this; see also item #182).
|
||||
|
||||
d. Renaming directories is way too hard.
|
||||
|
||||
Implementations:
|
||||
|
||||
It is perhaps premature to try to design implementation details
|
||||
without answering some of the above questions about desired behaviors
|
||||
but several general implementations get mentioned.
|
||||
|
||||
i. No fundamental changes (for example, a "cvs rename" command which
|
||||
operated on directories could still implement the current recommended
|
||||
practice for renaming directories, which is to rename each of the
|
||||
files contained therein via an add and a remove). One thing to note
|
||||
that the status quo gets right is proper merges, even with adds and
|
||||
removals (Well, mostly right at least. There are a *LOT* of different
|
||||
cases; see the testsuite for some of them).
|
||||
|
||||
ii. Rename database. In this scheme the files in the repository
|
||||
would have some arbitrary name, and then a separate rename database
|
||||
would indicate the current correspondence between the filename in the
|
||||
working directory and the actual storage. As far as I know this has
|
||||
never been designed in detail for CVS.
|
||||
|
||||
iii. A modest change in which the RCS files would contain some
|
||||
information such as "renamed from X" or "renamed to Y". That is, this
|
||||
would be generally similar to the log messages which are suggested
|
||||
when one renames via an add and a removal, but would be
|
||||
computer-parseable. I don't think anyone has tried to flesh out any
|
||||
details here either.
|
||||
|
||||
It is interesting to note that in solution ii. version numbers in the
|
||||
"new file" start where the "old file" left off, while in solutions
|
||||
i. and iii., version numbers restart from 1.1 each time a file is
|
||||
renamed. Except perhaps in the case where we rename a file from foo
|
||||
to bar and then back to foo. I'll shut up now.
|
||||
|
||||
Regardless of the method we choose, we need to address how renames
|
||||
affect existing CVS behaviors. For example, what happens when you
|
||||
rename a file on a branch but not the trunk and then try to merge the
|
||||
two? What happens when you rename a file on one branch and delete it
|
||||
on another and try to merge the two?
|
||||
|
||||
Ideally, we'd come up with a way to parameterize the problem and
|
||||
simply write up a lookup table to determine the correct behavior.
|
||||
|
||||
190. The meaning of the -q and -Q global options is very ad hoc;
|
||||
there is no clear definition of which messages are suppressed by them
|
||||
and which are not. Here is a classification of the current meanings
|
||||
of -q; I don't know whether anyone has done a similar investigation of
|
||||
-Q:
|
||||
|
||||
a. The "warm fuzzies" printed upon entering each directory (for
|
||||
example, "cvs update: Updating sdir"). The need for these messages
|
||||
may be decreased now that most of CVS uses ->fullname instead of
|
||||
->file in messages (a project which is *still* not 100% complete,
|
||||
alas). However, the issue of whether CVS can offer status as it
|
||||
runs is an important one. Of course from the command line it is
|
||||
hard to do this well and one ends up with options like -q. But
|
||||
think about emacs, jCVS, or other environments which could flash you
|
||||
the latest status line so you can see whether the system is working
|
||||
or stuck.
|
||||
|
||||
b. Other cases where the message just offers information (rather
|
||||
than an error) and might be considered unnecessarily verbose. These
|
||||
have a certain point to them, although it isn't really clear whether
|
||||
it should be the same option as the warm fuzzies or whether it is
|
||||
worth the conceptual hair:
|
||||
|
||||
add.c: scheduling %s `%s' for addition (may be an issue)
|
||||
modules.c: %s %s: Executing '%s' (I can see how that might be noise,
|
||||
but...)
|
||||
remove.c: scheduling `%s' for removal (analogous to the add.c one)
|
||||
update.c: Checking out %s (hmm, that message is a bit on the noisy side...)
|
||||
(but the similar message in annotate is not affected by -q).
|
||||
|
||||
c. Suppressing various error messages. This is almost surely
|
||||
bogus.
|
||||
|
||||
commit.c: failed to remove tag `%s' from `%s' (Questionable.
|
||||
Rationale might be that we already printed another message
|
||||
elsewhere but why would it be necessary to avoid
|
||||
the extra message in such an uncommon case?)
|
||||
commit.c: failed to commit dead revision for `%s' (likewise)
|
||||
remove.c: file `%s' still in working directory (see below about rm
|
||||
-f analogy)
|
||||
remove.c: nothing known about `%s' (looks dubious to me, especially in
|
||||
the case where the user specified it explicitly).
|
||||
remove.c: removed `%s' (seems like an obscure enough case that I fail
|
||||
to see the appeal of being cryptically concise here).
|
||||
remove.c: file `%s' already scheduled for removal (now it is starting
|
||||
to look analogous to the infamous rm -f option).
|
||||
rtag.c: cannot find tag `%s' in `%s' (more rm -f like behavior)
|
||||
rtag.c: failed to remove tag `%s' from `%s' (ditto)
|
||||
tag.c: failed to remove tag %s from %s (see above about whether RCS_*
|
||||
has already printed an error message).
|
||||
tag.c: couldn't tag added but un-commited file `%s' (more rm -f
|
||||
like behavior)
|
||||
tag.c: skipping removed but un-commited file `%s' (ditto)
|
||||
tag.c: cannot find revision control file for `%s' (ditto, but at first
|
||||
glance seems even worse, as this would seem to be a "can't happen"
|
||||
condition)
|
||||
|
||||
191. Storing RCS files, especially binary files, takes rather more
|
||||
space than it could, typically.
|
||||
- The virtue of the status quo is that it is simple to implement.
|
||||
Of course it is also simplest in terms of dealing with compatibility.
|
||||
- Just storing the revisions as separate gzipped files is a common
|
||||
technique. It also is pretty simple (no new algorithms, CVS
|
||||
already has zlib around). Of course for some files (such as files
|
||||
which are already compressed) the gzip step won't help, but
|
||||
something which can at least sometimes avoid rewriting the entire
|
||||
RCS file for each new revision would, I would think, be a big
|
||||
speedup for large files.
|
||||
- Josh MacDonald has written a tool called xdelta which produces
|
||||
differences (that is, sufficient information to transform the old
|
||||
to the new) which looks for common sequences of bytes, like RCS
|
||||
currently does, but which is not based on lines. This seems to do
|
||||
quite well for some kinds of files (e.g. FrameMaker documents,
|
||||
text files), and not as well for others (anything which is already
|
||||
compressed, executables). xdelta 1.10 also is faster than GNU diff.
|
||||
- Karl Fogel has thought some about using a difference technique
|
||||
analogous to fractal compression (see the comp.compression FAQ for
|
||||
more on fractal compression, including at least one patent to
|
||||
watch for; I don't know how analogous Karl's ideas are to the
|
||||
techniques described there).
|
||||
- Quite possibly want some documented interface by which a site can
|
||||
plug in their choice of external difference programs (with the
|
||||
ability to choose the program based on filename, magic numbers,
|
||||
or some such).
|
||||
|
||||
192. "cvs update" using an absolute pathname does not work if the
|
||||
working directory is not a CVS-controlled directory with the correct
|
||||
CVSROOT. For example, the following will fail:
|
||||
|
||||
cd /tmp
|
||||
cvs -d /repos co foo
|
||||
cd /
|
||||
cvs update /tmp/foo
|
||||
|
||||
It is possible to read the CVSROOT from the administrative files in
|
||||
the directory specified by the absolute pathname argument to update.
|
||||
In that case, the last command above would be equivalent to:
|
||||
|
||||
cd /tmp/foo
|
||||
cvs update .
|
||||
|
||||
This can be problematic, however, if we ask CVS to update two
|
||||
directories with different CVSROOTs. Currently, CVS has no way of
|
||||
changing CVSROOT mid-stream. Consider the following:
|
||||
|
||||
cd /tmp
|
||||
cvs -d /repos1 co foo
|
||||
cvs -d /repos2 co bar
|
||||
cd /
|
||||
cvs update /tmp/foo /tmp/bar
|
||||
|
||||
To make that example work, we need to think hard about:
|
||||
|
||||
- where and when CVSROOT-related variables get set
|
||||
- who caches said variables for later use
|
||||
- how the remote protocol should be extended to handle sending a new
|
||||
repository mid-stream
|
||||
- how the client should maintain connections to a variety of servers
|
||||
in a single invocation.
|
||||
|
||||
Because those issues are hairy, I suspect that having a change in
|
||||
CVSROOT be an error would be a better move.
|
||||
|
||||
193. The client relies on timestamps to figure out whether a file is
|
||||
(maybe) modified. If something goes awry, then it ends up sending
|
||||
entire files to the server to be checked, and this can be quite slow
|
||||
especially over a slow network. A couple of things that can happen:
|
||||
(a) other programs, like make, use timestamps, so one ends up needing
|
||||
to do "touch foo" and otherwise messing with timestamps, (b) changing
|
||||
the timezone offset (e.g. summer vs. winter or moving a machine)
|
||||
should work on unix, but there may be problems with non-unix.
|
||||
|
||||
Possible solutions:
|
||||
|
||||
a. Store a checksum for each file in CVS/Entries or some such
|
||||
place. What to do about hash collisions is interesting: using a
|
||||
checksum, like MD5, large enough to "never" have collisions
|
||||
probably works in practice (of course, if there is a collision then
|
||||
all hell breaks loose because that code path was not tested, but
|
||||
given the tiny, tiny probability of that I suppose this is only an
|
||||
aesthetic issue).
|
||||
|
||||
b. I'm not thinking of others, except storing the whole file in
|
||||
CVS/Base, and I'm sure using twice the disk space would be
|
||||
unpopular.
|
||||
|
||||
194. CVS does not separate the "metadata" from the actual revision
|
||||
history; it stores them both in the RCS files. Metadata means tags
|
||||
and header information such as the number of the head revision.
|
||||
Storing the metadata separately could speed up "cvs tag" enormously,
|
||||
which is a big problem for large repositories. It could also probably
|
||||
make CVS's locking much less in the way (see comment in do_recursion
|
||||
about "two-pass design").
|
||||
|
||||
195. Many people using CVS over a slow link are interested in whether
|
||||
the remote protocol could be any more efficient with network
|
||||
bandwidth. This item is about one aspect of that--how the server
|
||||
sends a new version of a file the client has a different version of,
|
||||
or vice versa.
|
||||
|
||||
a. Cases in which the status quo already sends a diff. For most text
|
||||
files, this is probably already close to optimal. For binary files,
|
||||
and anomalous text files, it might be worth looking into other
|
||||
difference algorithms (see item #191).
|
||||
|
||||
b. Cases in which the status quo does not send a diff (e.g. "cvs
|
||||
commit").
|
||||
|
||||
b1. With some frequency, people suggest rsync or a similar algorithm
|
||||
(see ftp://samba.anu.edu.au/pub/rsync/). This could speed things up,
|
||||
and in some ways involves the most minimal changes to the default CVS
|
||||
paradigm. There are some downsides though: (1) there is an extra
|
||||
network turnaround, (2) the algorithm is not as efficient with network
|
||||
bandwidth as difference type programs (it transmits a fair bit of data
|
||||
to discover what a difference program discovers locally).
|
||||
|
||||
b2. If one is willing to require that users use "cvs edit" before
|
||||
editing a file on the client side (in some cases, a development
|
||||
environment like emacs can make this fairly easy), then the Modified
|
||||
request in the protocol could be extended to allow the client to just
|
||||
send differences instead of entire files. In the degenerate case
|
||||
(e.g. "cvs diff" without arguments) the required network traffic is
|
||||
reduced to zero, and the client need not even contact the server.
|
||||
@@ -1,6 +1,9 @@
|
||||
/* Define if you have MIT Kerberos version 4 available. */
|
||||
#undef HAVE_KERBEROS
|
||||
|
||||
/* Define if you have GSSAPI with MIT Kerberos version 5 available. */
|
||||
#undef HAVE_GSSAPI
|
||||
|
||||
/* Define if you want CVS to be able to be a remote repository client. */
|
||||
#undef CLIENT_SUPPORT
|
||||
|
||||
@@ -16,3 +19,23 @@
|
||||
|
||||
/* Define if you have the connect function. */
|
||||
#undef HAVE_CONNECT
|
||||
|
||||
/* Define if this system supports chown(), link(), and friends. */
|
||||
#undef PRESERVE_PERMISSIONS_SUPPORT
|
||||
|
||||
/* Define if you have memchr (always for CVS). */
|
||||
#undef HAVE_MEMCHR
|
||||
|
||||
/* Define if you have strchr (always for CVS). */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if utime requires write access to the file (true on Windows,
|
||||
but not Unix). */
|
||||
#undef UTIME_EXPECTS_WRITABLE
|
||||
|
||||
/* Define if setmode is required when writing binary data to stdout. */
|
||||
#undef USE_SETMODE_STDOUT
|
||||
|
||||
/* Define if the diff library should use setmode for binary files.
|
||||
FIXME: Why two different macros for setmode? */
|
||||
#undef HAVE_SETMODE
|
||||
+44
-3
@@ -7,6 +7,9 @@
|
||||
#undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
/* Define if the closedir function returns void instead of int. */
|
||||
#undef CLOSEDIR_VOID
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
@@ -16,12 +19,18 @@
|
||||
/* Define if you support file names longer than 14 characters. */
|
||||
#undef HAVE_LONG_FILE_NAMES
|
||||
|
||||
/* Define if your struct stat has st_blksize. */
|
||||
#undef HAVE_ST_BLKSIZE
|
||||
|
||||
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
||||
#undef HAVE_SYS_WAIT_H
|
||||
|
||||
/* Define if utime(file, NULL) sets file's timestamp to the present. */
|
||||
#undef HAVE_UTIME_NULL
|
||||
|
||||
/* Define if you have <vfork.h>. */
|
||||
#undef HAVE_VFORK_H
|
||||
|
||||
/* Define if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
@@ -56,9 +65,15 @@
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef uid_t
|
||||
|
||||
/* Define vfork as fork if vfork does not work. */
|
||||
#undef vfork
|
||||
|
||||
/* Define if you have MIT Kerberos version 4 available. */
|
||||
#undef HAVE_KERBEROS
|
||||
|
||||
/* Define if you have GSSAPI with MIT Kerberos version 5 available. */
|
||||
#undef HAVE_GSSAPI
|
||||
|
||||
/* Define if you want CVS to be able to be a remote repository client. */
|
||||
#undef CLIENT_SUPPORT
|
||||
|
||||
@@ -75,6 +90,26 @@
|
||||
/* Define if you have the connect function. */
|
||||
#undef HAVE_CONNECT
|
||||
|
||||
/* Define if this system supports chown(), link(), and friends. */
|
||||
#undef PRESERVE_PERMISSIONS_SUPPORT
|
||||
|
||||
/* Define if you have memchr (always for CVS). */
|
||||
#undef HAVE_MEMCHR
|
||||
|
||||
/* Define if you have strchr (always for CVS). */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if utime requires write access to the file (true on Windows,
|
||||
but not Unix). */
|
||||
#undef UTIME_EXPECTS_WRITABLE
|
||||
|
||||
/* Define if setmode is required when writing binary data to stdout. */
|
||||
#undef USE_SETMODE_STDOUT
|
||||
|
||||
/* Define if the diff library should use setmode for binary files.
|
||||
FIXME: Why two different macros for setmode? */
|
||||
#undef HAVE_SETMODE
|
||||
|
||||
/* Define if you have the crypt function. */
|
||||
#undef HAVE_CRYPT
|
||||
|
||||
@@ -138,9 +173,6 @@
|
||||
/* Define if you have the tzset function. */
|
||||
#undef HAVE_TZSET
|
||||
|
||||
/* Define if you have the vfork function. */
|
||||
#undef HAVE_VFORK
|
||||
|
||||
/* Define if you have the vprintf function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
@@ -162,6 +194,9 @@
|
||||
/* Define if you have the <io.h> header file. */
|
||||
#undef HAVE_IO_H
|
||||
|
||||
/* Define if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
@@ -180,6 +215,9 @@
|
||||
/* Define if you have the <sys/dir.h> header file. */
|
||||
#undef HAVE_SYS_DIR_H
|
||||
|
||||
/* Define if you have the <sys/file.h> header file. */
|
||||
#undef HAVE_SYS_FILE_H
|
||||
|
||||
/* Define if you have the <sys/ndir.h> header file. */
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
|
||||
@@ -207,6 +245,9 @@
|
||||
/* Define if you have the crypt library (-lcrypt). */
|
||||
#undef HAVE_LIBCRYPT
|
||||
|
||||
/* Define if you have the gen library (-lgen). */
|
||||
#undef HAVE_LIBGEN
|
||||
|
||||
/* Define if you have the inet library (-linet). */
|
||||
#undef HAVE_LIBINET
|
||||
|
||||
|
||||
Vendored
+635
-161
File diff suppressed because it is too large.
Load diff
+134
-20
@@ -10,8 +10,8 @@ dnl It is possible that we should just change the above required version
|
||||
dnl to 2.10; it seems like everyone is using 2.10 anyway, and there is
|
||||
dnl at least some sentiment that we should be using a version which has
|
||||
dnl --bindir (and correspondingly, using @bindir@ and friends in our
|
||||
dnl Makefile.in files. I'm not sure exactly what version of autoconf
|
||||
dnl introduced --bindir but I know 2.10 has it.
|
||||
dnl Makefile.in files. Rumor has it that autoconf 2.7
|
||||
dnl introduced --bindir but the point is that 2.10 has it.
|
||||
AC_CONFIG_HEADER(config.h src/options.h)
|
||||
|
||||
AC_PROG_CC
|
||||
@@ -50,6 +50,7 @@ fi
|
||||
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(errno.h unistd.h string.h memory.h utime.h fcntl.h ndbm.h \
|
||||
limits.h sys/file.h \
|
||||
sys/param.h sys/select.h sys/time.h sys/timeb.h \
|
||||
io.h direct.h sys/bsdtypes.h sys/resource.h)
|
||||
AC_HEADER_SYS_WAIT
|
||||
@@ -61,8 +62,33 @@ AC_TYPE_UID_T
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_PID_T
|
||||
AC_REPLACE_FUNCS(getwd mkdir rename strdup strstr dup2 strerror valloc waitpid vasprintf strtoul)
|
||||
AC_CHECK_FUNCS(fchmod fsync ftime mktemp putenv vfork vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3)
|
||||
AC_STRUCT_ST_BLKSIZE
|
||||
AC_REPLACE_FUNCS(mkdir rename strstr dup2 strerror valloc waitpid memmove vasprintf strtoul)
|
||||
AC_CHECK_FUNCS(fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3)
|
||||
|
||||
dnl
|
||||
dnl The CVS coding standard (as specified in HACKING) is that if it exists
|
||||
dnl in SunOS4 and ANSI, we use it. CVS itself, of course, therefore doesn't
|
||||
dnl need HAVE_* defines for such functions, but diff wants them.
|
||||
dnl
|
||||
AC_DEFINE(HAVE_STRCHR)
|
||||
AC_DEFINE(HAVE_MEMCHR)
|
||||
|
||||
dnl
|
||||
dnl AC_FUNC_VFORK is rather baroque. It seems to be rather more picky
|
||||
dnl than, say, the Single Unix Specification (version 2), which simplifies
|
||||
dnl a lot of cases by saying that the child process can't set any variables
|
||||
dnl (thus avoiding problems with register allocation) or call any functions
|
||||
dnl (thus avoiding problems with whether file descriptors are shared).
|
||||
dnl It would be nice if we could just write to the Single Unix Specification.
|
||||
dnl I think the only way to do redirection this way is by doing it in the
|
||||
dnl parent, and then undoing it afterwards (analogous to windows-NT/run.c).
|
||||
dnl That would appear to have a race condition if the user hits ^C (or
|
||||
dnl some other signal) at the wrong time, as main_cleanup will try to use
|
||||
dnl stdout/stderr. So maybe we are stuck with AC_FUNC_VFORK.
|
||||
dnl
|
||||
AC_FUNC_VFORK
|
||||
AC_FUNC_CLOSEDIR_VOID
|
||||
|
||||
dnl
|
||||
dnl Look for shadow password files before we go ahead and set getspnam.
|
||||
@@ -84,7 +110,24 @@ else
|
||||
fi
|
||||
AC_MSG_RESULT([$found])
|
||||
|
||||
AC_CHECK_FUNC(re_exec, :, LIBOBJS="$LIBOBJS regex.o")
|
||||
dnl We always use CVS's regular expression matcher.
|
||||
dnl This is because:
|
||||
dnl (1) If memory serves, the syntax of the regular expressions
|
||||
dnl handled by re_exec is not consistent from system to system, which
|
||||
dnl is a Bad Thing because CVS passes this syntax out to the user.
|
||||
dnl We might have better luck with the POSIX interface, if we really
|
||||
dnl want to look for a system-supplied matcher.
|
||||
dnl (2) It is necessary to make _sure_ that we get a regex.h and regex.c
|
||||
dnl that match each other. In particular, rx and the CVS/emacs
|
||||
dnl regex.c have a different "struct re_pattern_buffer" and so using
|
||||
dnl the system regex.h and our regex.c, or vice versa, will tend to
|
||||
dnl cause a core dump.
|
||||
dnl (3) Just as a random data point, CVS uses re_exec (a BSD interface);
|
||||
dnl libdiff uses re_compile_pattern (a GNU interface, I think). Diff
|
||||
dnl should probably be fixed to have the caller (CVS) supply the regexp
|
||||
dnl matching.
|
||||
dnl
|
||||
dnl AC_CHECK_FUNC(re_exec, :, LIBOBJS="$LIBOBJS regex.o")
|
||||
AC_FUNC_UTIME_NULL
|
||||
AC_SYS_LONG_FILE_NAMES
|
||||
|
||||
@@ -139,6 +182,10 @@ fi])
|
||||
dnl
|
||||
dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
|
||||
dnl
|
||||
dnl If you change this, keep in mind that some systems have a bogus
|
||||
dnl libkrb in the system libraries, so --with-krb4=value needs to
|
||||
dnl override the system -lkrb.
|
||||
dnl
|
||||
KRB4=/usr/kerberos
|
||||
define(WITH_KRB4,[
|
||||
AC_ARG_WITH([krb4],
|
||||
@@ -151,15 +198,19 @@ WITH_KRB4
|
||||
|
||||
krb_h=
|
||||
AC_MSG_CHECKING([for krb.h])
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=],
|
||||
[if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
|
||||
hold_cflags=$CFLAGS
|
||||
CFLAGS="$CFLAGS -I$KRB4/include"
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=$KRB4/include])
|
||||
CFLAGS=$hold_cflags
|
||||
fi])
|
||||
if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
|
||||
hold_cflags=$CFLAGS
|
||||
CFLAGS="$CFLAGS -I$KRB4/include"
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=$KRB4/include],
|
||||
[CFLAGS=$hold_cflags
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=])])
|
||||
CFLAGS=$hold_cflags
|
||||
else
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=])
|
||||
fi
|
||||
if test -z "$krb_h"; then
|
||||
AC_TRY_LINK([#include <krb.h>],[int i;],
|
||||
[krb_h=yes krb_incdir=],
|
||||
@@ -173,12 +224,22 @@ if test -z "$krb_h"; then
|
||||
fi
|
||||
AC_MSG_RESULT($krb_h)
|
||||
|
||||
includeopt=
|
||||
AC_SUBST(includeopt)
|
||||
if test -n "$krb_h"; then
|
||||
krb_lib=
|
||||
AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=],
|
||||
[if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
|
||||
krb_lib=yes krb_libdir=$KRB4/lib
|
||||
fi])
|
||||
if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
|
||||
hold_ldflags=$LDFLAGS
|
||||
LDFLAGS="-L${KRB4}/lib $LDFLAGS"
|
||||
AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=${KRB4}/lib],
|
||||
[LDFLAGS=$hold_ldflags
|
||||
# Using open here instead of printf so we don't
|
||||
# get confused by the cached value for printf from above.
|
||||
AC_CHECK_LIB(krb,open,[krb_lib=yes krb_libdir=])])
|
||||
LDFLAGS=$hold_ldflags
|
||||
else
|
||||
AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=])
|
||||
fi
|
||||
if test -n "$krb_lib"; then
|
||||
AC_DEFINE(HAVE_KERBEROS)
|
||||
test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
|
||||
@@ -192,12 +253,36 @@ if test -n "$krb_h"; then
|
||||
LDFLAGS=$hold_ldflags
|
||||
if test -n "$krb_incdir"; then
|
||||
includeopt="${includeopt} -I$krb_incdir"
|
||||
AC_SUBST(includeopt)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
AC_CHECK_FUNCS(krb_get_err_text)
|
||||
|
||||
dnl
|
||||
dnl Use --with-gssapi=DIR to enable GSSAPI support.
|
||||
dnl
|
||||
GSSAPI=/usr/cygnus/kerbnet
|
||||
define(WITH_GSSAPI,[
|
||||
AC_ARG_WITH([gssapi],
|
||||
[ --with-gssapi=value GSSAPI directory],
|
||||
[GSSAPI=$withval],
|
||||
)dnl
|
||||
echo "default place for GSSAPI is $GSSAPI"
|
||||
AC_SUBST(GSSAPI)])dnl
|
||||
WITH_GSSAPI
|
||||
|
||||
AC_MSG_CHECKING([for gssapi.h])
|
||||
hold_cppflags=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS -I$GSSAPI/include "
|
||||
AC_CHECK_HEADER(gssapi/gssapi.h,
|
||||
[AC_DEFINE(HAVE_GSSAPI)
|
||||
LIBS="$LIBS -L$GSSAPI/lib -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err"
|
||||
includeopt="${includeopt} -I$GSSAPI/include"
|
||||
# This is necessary on Irix 5.3, in order to link against libkrb5 --
|
||||
# there, an_to_ln.o refers to things defined only in -lgen.
|
||||
AC_CHECK_LIB(gen, compile)])
|
||||
CPPFLAGS=$hold_cppflags
|
||||
|
||||
dnl
|
||||
dnl Use --with-encryption to turn on encryption support
|
||||
dnl
|
||||
@@ -255,6 +340,35 @@ if test "$ac_cv_func_crypt" = yes; then
|
||||
fi
|
||||
fi # enable_server
|
||||
|
||||
dnl For the moment we will assume that all systems which have
|
||||
dnl the unixyness to run configure are unixy enough to do the
|
||||
dnl PreservePermissions stuff. I have this sinking feeling that
|
||||
dnl things won't be that simple, before long.
|
||||
AC_DEFINE(PRESERVE_PERMISSIONS_SUPPORT)
|
||||
|
||||
dnl On cygwin32, we configure like a Unix system, but we use the
|
||||
dnl Windows support code in lib/fncase.c to handle the case
|
||||
dnl insensitive file system. We also need some support libraries. We
|
||||
dnl do this at the end so that the new libraries are added at the end
|
||||
dnl of LIBS.
|
||||
AC_CACHE_CHECK(for cygwin32, ccvs_cv_sys_cygwin32,
|
||||
[AC_TRY_COMPILE([], [return __CYGWIN32__;],
|
||||
ccvs_cv_sys_cygwin32=yes, ccvs_cv_sys_cygwin32=no)])
|
||||
if test $ccvs_cv_sys_cygwin32 = yes; then
|
||||
LIBOBJS="$LIBOBJS fncase.o"
|
||||
LIBS="$LIBS -ladvapi32"
|
||||
|
||||
dnl On Windows you can only change file times if you can write to
|
||||
dnl the file. cygwin32 should really handle this for us, but as of
|
||||
dnl January 1998 it doesn't.
|
||||
AC_DEFINE(UTIME_EXPECTS_WRITABLE)
|
||||
|
||||
dnl On Windows we must use setmode to change between binary and text
|
||||
dnl mode.
|
||||
AC_DEFINE(USE_SETMODE_STDOUT)
|
||||
AC_DEFINE(HAVE_SETMODE)
|
||||
fi
|
||||
|
||||
test -f src/options.h && (
|
||||
AC_MSG_WARN(saving ./src/options.h in ./src/options.h-SAVED)
|
||||
AC_MSG_WARN(You may wish to check that local options have not been lost.)
|
||||
@@ -262,7 +376,7 @@ test -f src/options.h && (
|
||||
cp ./src/options.h ./src/options.h-SAVED
|
||||
)
|
||||
|
||||
AC_OUTPUT(Makefile lib/Makefile src/Makefile zlib/Makefile doc/Makefile \
|
||||
AC_OUTPUT(Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefile doc/Makefile \
|
||||
man/Makefile tools/Makefile tools/pcl-cvs/Makefile \
|
||||
contrib/Makefile contrib/elib/Makefile \
|
||||
windows-NT/Makefile windows-NT/SCC/Makefile \
|
||||
|
||||
@@ -1,3 +1,43 @@
|
||||
Sat Feb 21 21:59:45 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* Makefile.in (clean): Change "/bin/rm" to "rm".
|
||||
|
||||
Thu Aug 7 22:42:23 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* pvcs_to_rcs: Remove RCS keywords. Remove $Log and move the data
|
||||
to this ChangeLog (below). Add paragraph that David Martin
|
||||
emailed along with the script.
|
||||
|
||||
Revision 1.6 1997/03/07 16:21:28 divad
|
||||
Need to explicitly state archive name in PVCS get command for
|
||||
those cases where the case of the workfile and the case of the
|
||||
archive file are different (OS/2)
|
||||
|
||||
Revision 1.5 1997/03/07 00:31:04 divad
|
||||
Added capitalized extensions and framemaker files as binaries;
|
||||
also overriding any path specification for workfiles at PVCS
|
||||
checkout (most annoying).
|
||||
|
||||
Revision 1.4 1997/03/06 21:04:55 divad
|
||||
Added \n to the end of each comment line to prevent multi-line
|
||||
comments for a single revision from "merging"
|
||||
|
||||
Revision 1.3 1997/03/06 19:50:25 divad
|
||||
Corrected bug in binary extensions; correcting processing
|
||||
comment strings with double quotes
|
||||
|
||||
Revision 1.2 1997/03/06 17:29:10 divad
|
||||
Provided list of extensions (rather than using Unix file
|
||||
command) to determine which files are binary; also printing
|
||||
version label as they are applied
|
||||
|
||||
Revision 1.1 1997/02/26 00:04:29 divad
|
||||
Perl script to convert pvcs archives to rcs archives
|
||||
|
||||
* README: mention pvcs_to_rcs.
|
||||
* pvcs_to_rcs: New file. This is the file as I got it from David
|
||||
Martin. Will be checking in the tweaks shortly.
|
||||
|
||||
17 May 1997 Jim Kingdon
|
||||
|
||||
* listen2.c: Failed attempt at making this do what it was
|
||||
|
||||
@@ -106,7 +106,7 @@ ls:
|
||||
.PHONY: ls
|
||||
|
||||
clean:
|
||||
/bin/rm -f *.o core
|
||||
rm -f *.o core
|
||||
.PHONY: clean
|
||||
|
||||
distclean: clean
|
||||
|
||||
@@ -86,6 +86,10 @@ An attempt at a table of Contents for this directory:
|
||||
into RCS files, retaining the info contained in the
|
||||
SCCS file (like dates, author, and log message).
|
||||
Contributed by Ken Cox <[email protected]>.
|
||||
pvcs_to_rcs A perl script that can convert (some) PVCS histories
|
||||
into RCS files, retaining the info contained in the
|
||||
PVCS history. See the comments at the start of the
|
||||
file for more details.
|
||||
intro.doc A user's view of what you need to know to get
|
||||
started with CVS.
|
||||
Contributed by <[email protected]>.
|
||||
|
||||
@@ -1,5 +1,760 @@
|
||||
1998-03-04 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Special Files): Add notes about client/server CVS
|
||||
and hard links across directories.
|
||||
|
||||
1998-03-01 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Keeping a checked out copy): The magic loginfo
|
||||
incantation isn't too likely to work except on unix.
|
||||
|
||||
1998-02-23 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (user-defined logging): Double "@" literal.
|
||||
|
||||
1998-02-18 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (user-defined logging): Add taginfo example.
|
||||
|
||||
1998-02-04 Tim Pierce <[email protected]>
|
||||
|
||||
* cvs.texinfo (config): PreservePermissions variable.
|
||||
(Special Files): New.
|
||||
(Editing files): Add note about PreservePermissions.
|
||||
|
||||
Tue Feb 10 18:07:35 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Connection): New node.
|
||||
|
||||
* cvsclient.texi (Protocol): Fix typo (lots -> lost).
|
||||
|
||||
Sun Feb 8 21:39:22 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Invoking CVS): For admin -b, point to the section
|
||||
where we talk about reverting to vendor branch.
|
||||
|
||||
* cvs.texinfo (Invoking CVS, rdiff options): Document rdiff -V
|
||||
option as obsolete, since it was made a fatal error some time ago.
|
||||
|
||||
* cvs.texinfo (Invoking CVS): Add global options, keywords, and
|
||||
keyword substitution modes. Wording fix in reference to --help
|
||||
and Index.
|
||||
|
||||
Wed Jan 28 23:09:39 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Excluding directories): Add index entry for "!".
|
||||
|
||||
28 Jan 1998 Karl Fogel and Jim Kingdon
|
||||
|
||||
* cvsclient.texi (Requests, Responses): document
|
||||
"wrapper-sendme-rcsOptions" and "Wrapper-rcsOption".
|
||||
|
||||
Tue Jan 27 18:37:37 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* cvs.texinfo (Excluding directories): New node, documenting how
|
||||
to exclude directories using ! in an alias module.
|
||||
|
||||
Sun Jan 18 18:23:02 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Requests): Add Kopt request.
|
||||
|
||||
Thu Jan 1 17:36:42 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (BUGS, Credits): Change @unnumbered to @appendix now
|
||||
that these are moved from the start to the end.
|
||||
|
||||
Sat Dec 27 10:06:56 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add "Too many arguments!".
|
||||
|
||||
Fri Dec 26 18:30:26 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (What is CVS?): Just point to the two canonical web
|
||||
sites (Pascal Molli and Cyclic) concerning CVS downloads. The GNU
|
||||
URL was out of date and GNU only has source distributions anyway.
|
||||
|
||||
* cvs.texinfo: Change bug-cvs address to gnu.org per email from
|
||||
Martin Hamilton.
|
||||
|
||||
Tue Dec 23 18:04:09 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Sticky tags): Further cleanups. Fix thinko
|
||||
(s/subsequent cvs update/& commands/). Remove "vi driver.c" and
|
||||
commit from example (totally vestigial). Reword start of
|
||||
paragraph on non-branch sticky tags, so that it better alludes
|
||||
to branch sticky tags. When introducing sticky tags, make it
|
||||
clear that even people who aren't trying to use sticky tags
|
||||
may need to know how to avoid them. Restore comment about
|
||||
CVS/Tag files.
|
||||
(Accessing branches): Don't xref to merging here; that is a much
|
||||
more advanced topic and the "but see" wording didn't tell us what
|
||||
to see the xref about.
|
||||
|
||||
Tue Dec 23 14:39:08 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon
|
||||
|
||||
* cvs.texinfo (Creating a branch): Rewritten. Introduce with
|
||||
`tag', then discuss `rtag' and `-r'.
|
||||
|
||||
Tue Dec 23 10:03:37 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon
|
||||
|
||||
* cvs.texinfo: Changes to dehairify the "Sticky tags" situation:
|
||||
(Revisions): "Sticky tags" moved here, description in menu changed
|
||||
to be a little more informative.
|
||||
(Sticky tags): Moved from "Branching and merging" to "Revisions".
|
||||
(Accessing branches): New node in "Branching and merging",
|
||||
explains how to use checkout vs update to retrieve a branch.
|
||||
Text and example inherited from "Sticky tags", but text mostly
|
||||
rewritten.
|
||||
(Sticky tags): Moved under "Revisions", rewritten somewhat (more
|
||||
rewrites to follow).
|
||||
Don't use "-v" in "cvs status" example.
|
||||
|
||||
Mon Dec 22 11:46:05 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon
|
||||
|
||||
Cleanups related to recent separation of revisions from
|
||||
branching/merging:
|
||||
* cvs.texinfo (Revisions): Take paragraph introducing branches,
|
||||
rewrite it and move it to "Branching and merging".
|
||||
(Branching and merging): Also rewrite merging intro.
|
||||
(Revision numbers): Don't go into detail about branch revision
|
||||
numbers here, just mention that they happen and refer to new
|
||||
node "Branches and revisions".
|
||||
(Branches and revisions): New node under "Branching and merging",
|
||||
inherits text from "Revision numbers".
|
||||
(Creating a branch): Refer to "Branches and revisions" now, not
|
||||
"Revision numbers".
|
||||
(Binary why): Rewrite sentence which refers to merging, so that
|
||||
it isn't specific to branch merging.
|
||||
(Branches motivation): Fix typo (select -> elect). Add comment
|
||||
about what this node is accomplishing, in general.
|
||||
|
||||
Sun Dec 21 20:57:24 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon
|
||||
|
||||
This is just moving text; related cleanups to follow.
|
||||
* cvs.texinfo: Changes to put branching and merging together, and
|
||||
keep it all separate from revisions:
|
||||
(Revisions): Renamed from "Revisions and branches".
|
||||
(Branching and merging): Renamed from "Merging".
|
||||
(Branches motivation, Creating a branch, Sticky tags, Magic branch
|
||||
numbers): these subnodes moved to "Branching and merging" from
|
||||
"Revisions".
|
||||
everywhere: Adjusted cross-references to cope with above.
|
||||
|
||||
Sun Dec 21 20:36:39 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon
|
||||
|
||||
Note that this is just moving text, not changing it:
|
||||
* cvs.texinfo: divide top-level menu into sections.
|
||||
(Multiple developers, Builds, Tracking sources, Keyword
|
||||
substitution): moved to be in "CVS and the Real World" section.
|
||||
(Compatibility): moved to be in "References" section.
|
||||
|
||||
Mon Dec 22 08:54:31 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Example): In comment, in citing the BNF style
|
||||
used in many RFCs, cite RFC2234 not RFC822 (now that the former is
|
||||
out).
|
||||
|
||||
Sun Dec 21 17:42:22 1997 Karl Fogel <[email protected]>
|
||||
|
||||
* cvs.texinfo (Overview): New node.
|
||||
(What is CVS?, A sample session): Put under Overview.
|
||||
(What is CVS not?): New node under Overview.
|
||||
[text previously was part of "What is CVS?" -kingdon]
|
||||
(Preface): Removed this node and its contents.
|
||||
(Checklist): Removed this node and its contents.
|
||||
(Credits): Now toward end of top-level menu (was under Preface).
|
||||
(BUGS): Now toward end of top-level menu (was under Preface).
|
||||
|
||||
Sun Dec 14 10:14:25 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Responses): Add MT response.
|
||||
(Text tags): New node.
|
||||
|
||||
* cvs.texinfo (loginfo): Add comment about which commands run
|
||||
loginfo.
|
||||
|
||||
Sat Dec 13 08:41:13 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Connection and Authentication): State that
|
||||
GSSAPI is preferred to kserver. Try to be clearer about what
|
||||
the term "pserver" means. Introduce GSSAPI and cite the relevant
|
||||
RFCs. Discuss the limitations of the existing features in
|
||||
preventing hijacking.
|
||||
|
||||
* cvs.texinfo (GSSAPI authenticated, Kerberos authenticated):
|
||||
Briefly introduce what GSSAPI and Kerberos are. Be slightly more
|
||||
emphatic about protecting against downgrade attacks.
|
||||
|
||||
Fri Dec 12 17:36:46 1997 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* cvs.texinfo (GSSAPI authenticated): New node.
|
||||
(Global options): Document -a. Mention GSSAPI in -x
|
||||
documentation.
|
||||
* cvsclient.texi (Connection and Authentication): Document GSSAPI
|
||||
authentication.
|
||||
(Requests): Add Gssapi-encrypt and Gssapi-authenticate.
|
||||
|
||||
Fri Dec 12 09:27:38 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (cvsignore): Add note about comments and the
|
||||
space-separated nature of the syntax.
|
||||
|
||||
Sun Dec 7 09:33:11 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (checkout): Clarify issues regarding updating
|
||||
existing working directories.
|
||||
|
||||
Sun Nov 30 20:38:17 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Wrappers): Add comment: we don't document %s.
|
||||
|
||||
Mon Nov 24 23:00:09 1997 Karl Fogel <[email protected]>
|
||||
and Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi: Move Protocol Notes node to the end.
|
||||
|
||||
* cvsclient.texi (Request intro): new node/section.
|
||||
(Protocol): added some introductory material.
|
||||
Rearranged menu into General Conventions, Protocol specification,
|
||||
and Example etc sections.
|
||||
(File Modes): replaces Modes, for consistency.
|
||||
|
||||
Sat Nov 22 12:29:58 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Entries Lines): Clarify options in entries line.
|
||||
|
||||
Tue Nov 18 09:23:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Requests): Be more explicit about "export" and
|
||||
entries lines.
|
||||
|
||||
* Makefile.in (DISTFILES): Remove DIFFUTILS-2.7-BUG.
|
||||
|
||||
Mon Nov 17 18:20:47 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (tag options): Expand comment with reference to FAQ.
|
||||
|
||||
Fri Nov 14 11:02:37 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Update discussion of "dying gasps".
|
||||
|
||||
* cvs.texinfo (tag options): Add FIXME comment about renaming tags.
|
||||
|
||||
Thu Nov 13 10:20:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Common options): Remove also has a -f option with a
|
||||
different meaning than most.
|
||||
|
||||
Wed Nov 12 21:57:40 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (File permissions, Connecting via rsh, Environment
|
||||
variables): When putting an environment variable in the index, say
|
||||
it is an environment variable. Don't index the same name twice.
|
||||
|
||||
* cvs.texinfo: Many edits to reflect the fact that CVS no longer
|
||||
invokes external RCS programs.
|
||||
|
||||
Tue Nov 11 15:15:49 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Locks, CVS in repository): New nodes, document the
|
||||
locking scheme and briefly outline CVS and CVS/fileattr.
|
||||
|
||||
Sun Nov 9 17:39:41 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* DIFFUTILS-2.7-BUG: Removed; the bug is fixed and the testcases
|
||||
are incorporated into sanity.sh.
|
||||
|
||||
Sat Nov 8 09:49:38 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Binary why): Try to be a little clearer about how
|
||||
merges fit into CVS. Say it may be error prone to have developers
|
||||
doing merges manually.
|
||||
|
||||
Tue Nov 4 13:02:22 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (admin options): Add discussion of what happens if
|
||||
there are tags.
|
||||
|
||||
Fri Oct 31 00:04:09 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (admin options): Rewrite discussion of -o to
|
||||
hopefully be clearer and to also document the new :: syntax.
|
||||
(admin examples): Removed; incorporated into admin options.
|
||||
(Invoking CVS): Wording fix for admin -o.
|
||||
|
||||
* cvs.texinfo (Binary why): New node, talks about diff and merge.
|
||||
(Binary howto): Renamed from Binary files.
|
||||
(Binary files): Now just contains an introduction.
|
||||
|
||||
* cvs.texinfo (Error messages): Add "could not merge" message. In
|
||||
discussion of "Binary files . . . differ" message, mention that
|
||||
this is only an issue with old verisons of CVS.
|
||||
|
||||
Thu Oct 30 15:55:21 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add "authorization failed" message.
|
||||
|
||||
Wed Oct 29 11:52:05 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo: Remove fake RCSid; we decided to remove rcsid's a
|
||||
while ago. Cleanups suggested by Stephen Gildea (CVSROOT/passwd
|
||||
has 2 or 3 fields; /user -> /usr; noone -> no one; in used -> in
|
||||
use). Add comment about making compilers happy about rcsids.
|
||||
|
||||
Sat Oct 25 00:58:24 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* RCSFILES: rcsfile.5 is correct about {num} after next being
|
||||
optional.
|
||||
|
||||
Wed Oct 22 10:08:27 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add message about unrecognized
|
||||
response from cvs server.
|
||||
|
||||
1997-10-11 Noel Cragg <[email protected]>
|
||||
|
||||
* cvs.texinfo (checkout options): describe how the `-d' and `-N'
|
||||
flags really work. Give examples.
|
||||
(export options): refer the reader to the descriptions for `-d'
|
||||
and `-N' in checkout options, since the behavior is the same.
|
||||
|
||||
Thu Oct 9 12:01:35 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (log options): Add comment about "cvs log -r".
|
||||
|
||||
Wed Oct 8 10:24:19 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (rtag options): Add comment about how this is
|
||||
confusing.
|
||||
|
||||
Tue Sep 30 12:31:25 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Working directory storage): Add comment about
|
||||
Entries.Static.
|
||||
|
||||
Thu Sep 25 23:52:57 1997 Noel Cragg <[email protected]>
|
||||
|
||||
* cvsclient.texi (Responses): description of Module-expansion was
|
||||
missing a carriage return after the @item clause.
|
||||
|
||||
Wed Sep 24 12:04:42 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Remote repositories): Add comment about pserver
|
||||
vs. having users create their own repositories.
|
||||
|
||||
Sat Sep 20 00:59:53 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Keyword list): Change title from "RCS Keywords" to
|
||||
"Keyword list" as it is CVS that expands them.
|
||||
(Avoiding substitution): Change "rcs" to "cvs", in the context of
|
||||
the program which expands keywords.
|
||||
|
||||
Fri Sep 19 22:57:24 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* RCSFILES: Grammar fix in first paragraph. Re-word section on
|
||||
dead newphrase. Add item about what it means if "expand" is omitted.
|
||||
|
||||
* cvs.texinfo (Magic branch numbers): Change example branch number
|
||||
from 1.2.3 to 1.2.4; CVS assigns even branch numbers and I don't
|
||||
think vendor branches are very relevant to this example.
|
||||
|
||||
Wed Sep 17 17:21:33 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (admin options): Add comment about "cvs admin -b"
|
||||
(with no argument to the -b).
|
||||
|
||||
* RCSFILES: "next" is optional, not required.
|
||||
|
||||
Tue Sep 16 15:13:22 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Binary files): Add comment about another possible
|
||||
way to auto-detect binary files.
|
||||
|
||||
Sun Sep 14 12:38:56 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Conflicts example): Adjust text and comments
|
||||
regarding conflict markers to reflect change in CVS.
|
||||
|
||||
Wed Sep 10 12:44:04 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Server requirements): Add comment about server
|
||||
disk usage in /tmp.
|
||||
|
||||
* cvs.texinfo (Common options): More comments about date formats:
|
||||
"now", "yesterday", and the "3 weeks ago" family.
|
||||
|
||||
Tue Sep 9 13:09:58 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* DIFFUTILS-2.7-BUG: Eggert patch is preferred to Rittle one.
|
||||
|
||||
Sun Sep 7 18:38:23 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (history options): Revise -e to say that it includes
|
||||
future record types (and remove out of date list of what record
|
||||
types it implies).
|
||||
|
||||
* cvs.texinfo (Environment variables): Expand/correct discussion
|
||||
of HOME, HOMEDRIVE, and HOMEPATH.
|
||||
(Error messages): Add "could not find out home directory".
|
||||
|
||||
* cvs.texinfo (update options): Reword -r doc to hopefully be
|
||||
clearer that it takes either numeric or symbolic revision.
|
||||
|
||||
* cvs.texinfo (syntax): Add comment about how regexp syntax may
|
||||
be, er, creatively altered, by configure.in.
|
||||
|
||||
Sat Sep 6 11:29:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Working directory storage): Document Baserev and
|
||||
Baserev.tmp.
|
||||
(Working directory storage): Adjust comment regarding CVS/* being
|
||||
text files.
|
||||
|
||||
Fri Sep 5 14:42:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (BUGS): Remove mention of unsupported resources page
|
||||
on http://www.cyclic.com, as it might go away in a future
|
||||
reorganization.
|
||||
|
||||
* DIFFUTILS-2.7-BUG: Further info from Eggert.
|
||||
|
||||
1997-09-05 Paul Eggert <[email protected]>
|
||||
|
||||
* DIFFUTILS-2.7-BUG: Explain how this bug will probably be
|
||||
fixed in the next diffutils release.
|
||||
|
||||
Thu Sep 4 17:09:57 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Binary files): Reword the section on what you need
|
||||
to do with cvs admin -kb to hopefully be a bit clearer. Still not
|
||||
ideal (see comment).
|
||||
|
||||
* cvs.texinfo (modules): Break node into separate nodes for alias
|
||||
modules, regular modules, ampersand modules, and options. Expand
|
||||
text with more examples and explanations. Add index entries.
|
||||
|
||||
Wed Sep 3 14:49:43 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Multiple developers): Add idea about cvs editors
|
||||
and reserved checkouts.
|
||||
|
||||
Sun Aug 31 19:36:21 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Requests): Rewrite paragraph on cvs add on a
|
||||
filename containing '/'.
|
||||
|
||||
Thu Aug 28 14:13:50 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (diff options): Add comment about "cvs diff"
|
||||
vs. "cvs diff -r HEAD".
|
||||
|
||||
* cvs.texinfo (Global options): Add comment about -w not
|
||||
overriding cvs watch on.
|
||||
|
||||
Wed Aug 27 08:09:31 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Password authentication server): Grammar fix ("under
|
||||
as the username" -> "as the username").
|
||||
|
||||
* cvs.texinfo: Fix doubled 'the the' typos. Reported by
|
||||
[email protected].
|
||||
|
||||
Tue Aug 26 12:25:42 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Checklist): Reword xref to point to Binary files
|
||||
rather than Keyword expansion. Credit goes to [email protected]
|
||||
(Jeff Breidenbach) for reporting the problem.
|
||||
|
||||
Mon Aug 18 17:23:18 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (modules): Suggest taginfo instead of -t. Add
|
||||
comment with some of the reasons. Add comment about -u and -i
|
||||
problems.
|
||||
|
||||
Sat Aug 16 10:19:06 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add note about how "could not
|
||||
check out foo.c" seems to also have been observed on Irix.
|
||||
|
||||
Fri Aug 15 17:28:01 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add "could not check out foo.c".
|
||||
|
||||
Thu Aug 14 23:57:53 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Wrappers): Document new -m 'COPY' behavior.
|
||||
|
||||
Tue Aug 12 20:56:40 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Sticky tags): Add comment about how we should be
|
||||
documenting sticky tags.
|
||||
|
||||
Fri Aug 8 10:01:03 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (File status): Add comment about "working revision"
|
||||
in cvs status for a locally removed file.
|
||||
|
||||
Thu Aug 7 22:53:45 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (From other version control systems): Mention
|
||||
pvcs_to_rcs alongside sccs2rcs.
|
||||
|
||||
Tue Aug 5 17:22:50 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Compatibility): Add comment about how CVS probably
|
||||
could be detecting the case of dead files killed by CVS 1.3.
|
||||
|
||||
* cvs.texinfo (From other version control systems): Add paragraph
|
||||
about converting from systems which don't export RCS files.
|
||||
|
||||
Sun Aug 3 21:03:14 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Responses): Cite RFC1321 for MD5.
|
||||
|
||||
* cvs.texinfo (A sample session): Nuke index entry for "A sample
|
||||
session". The fact that this isn't "sample session" is totally
|
||||
bogus, but in general the table of contents is probably better for
|
||||
this entry.
|
||||
|
||||
* cvs.texinfo (Error messages): Add comment about wording of error
|
||||
concerning unknown -x option.
|
||||
|
||||
* cvs.texinfo (Wrappers): Add comment about absolute filter pathname.
|
||||
|
||||
Thu Jul 31 14:40:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo: Use @ref not @xref when reference is not at the
|
||||
start of a sentence. Avoids capitalizing "See" when we shouldn't.
|
||||
Fixes to other similar xref problems.
|
||||
|
||||
Wed Jul 30 19:30:31 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Connection and Authentication): Don't use @samp
|
||||
on BEGIN AUTH REQUEST and friends. Avoids overfull hbox.
|
||||
|
||||
Fri Jul 25 10:40:22 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Requests): Remove obsolete sentence regarding
|
||||
using Directory instead of Repository enabling alternate response
|
||||
syntax.
|
||||
|
||||
* cvsclient.texi (Response intro): Add discussing of file updating
|
||||
responses and file update modifying responses.
|
||||
(Responses): Refer to this description rather than trying to
|
||||
describe it in each place. The descriptions in each place were
|
||||
somewhat incomplete and didn't get updated when new file updating
|
||||
responses were added.
|
||||
|
||||
* cvsclient.texi: Split node Responses into Response intro,
|
||||
Response pathnames, and Responses.
|
||||
|
||||
Thu Jul 24 23:13:24 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (config): Document SystemAuth.
|
||||
(Password authentication server): Mention SystemAuth.
|
||||
|
||||
Mon Jul 21 08:57:04 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* Makefile.in (DISTFILES): Add DIFFUTILS-2.7-BUG.
|
||||
|
||||
Sun Jul 20 17:55:52 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (admin options): For options with optional
|
||||
arguments, specify that there can be no space between the option
|
||||
and its argument. For -N, add xref to Magic branch numbers. For
|
||||
-t, talk about reading from stdin. Comment changes.
|
||||
|
||||
Sat Jul 19 22:28:47 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Preface): Make section titles more verbose.
|
||||
Likewise for the menu.
|
||||
|
||||
Fri Jul 18 08:41:11 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): No need for an external patch if
|
||||
server and client are current. Add comment with more thoughts
|
||||
about messages specific to old versions of CVS.
|
||||
|
||||
* cvs.texinfo (Error messages): Add "cannot start server via rcmd".
|
||||
|
||||
* cvs.texinfo (Error messages): Add "cannot open CVS/Root" for cvs
|
||||
init.
|
||||
|
||||
* cvs.texinfo (Error messages): Add "missing author".
|
||||
|
||||
Tue Jul 15 16:47:08 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Keyword list): Fix documentation of $Log to reflect
|
||||
the fact that we no longer use the comment leader.
|
||||
(admin options): Fix documentation of $Log.
|
||||
(admin examples): Remove example concerning comment leader, since
|
||||
the example no longer does what it claims to.
|
||||
(admin, admin options): Fix various parts of the documentation to
|
||||
not refer to this being implemented via RCS. Say nastier things
|
||||
about -I and -x. Add comments about options to "rcs" which we
|
||||
don't document.
|
||||
|
||||
Mon Jul 14 00:04:32 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): The "cannot change permissions on
|
||||
temporary directory" error has been happening in various test cases.
|
||||
|
||||
Sat Jul 12 11:12:18 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Repository files): Further comments about leading
|
||||
"-" in filenames.
|
||||
|
||||
Fri Jul 11 21:30:11 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Repository files): Add comment about legal
|
||||
filenames.
|
||||
|
||||
Wed Jul 9 18:05:26 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Responses): Add Mbinary response.
|
||||
|
||||
Mon Jul 7 12:04:01 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Goals): Add previously unwritten goal about only
|
||||
one way to do each operation.
|
||||
|
||||
* cvs.texinfo (File permissions): Rewrite paragraph on setuid to
|
||||
be more verbose and less unix-specific.
|
||||
|
||||
Sat Jul 5 03:16:38 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Connection and Authentication): When we said to
|
||||
"ignore" an unrecogized code we mean to treat it as nonspecific,
|
||||
not to ignore the response.
|
||||
|
||||
* cvsclient.texi (Example): Refer to RFC2119 when referring to
|
||||
terminology of MUST, SHALL, &c.
|
||||
|
||||
* cvs.texinfo (Windows permissions): New node.
|
||||
|
||||
Fri Jul 4 15:27:43 1997 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* cvs.texinfo (Common options): Fix typo (avaliable for
|
||||
available).
|
||||
|
||||
Tue Jul 1 09:19:02 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Server requirements): Discuss memory used by diff.
|
||||
|
||||
* cvs.texinfo (Substitution modes): Add comment about -A resetting
|
||||
both sticky tags/dates and sticky options.
|
||||
|
||||
* cvs.texinfo (File permissions): Add paragraph concerning
|
||||
ownership of the RCS files.
|
||||
|
||||
* cvs.texinfo (Working directory storage): Relative repositories
|
||||
in CVS/Repository are legal.
|
||||
|
||||
Mon Jun 30 10:48:21 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Top): Add menu item for Password scrambling.
|
||||
|
||||
* cvs.texinfo (Committing your changes): Add comment concerning
|
||||
documentation of message prompting.
|
||||
|
||||
Fri Jun 27 11:20:34 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvsclient.texi (Password scrambling): New node.
|
||||
(Connection and Authentication): Adjust accordingly.
|
||||
(Protocol Notes): Add long discussion of character sets and
|
||||
password scrambling.
|
||||
|
||||
* cvs.texinfo (Repository files): Also mention doc/RCSFILES in
|
||||
documenting RCS file format.
|
||||
(CVSROOT, storage of files): New node.
|
||||
|
||||
Thu Jun 26 09:18:15 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (File permissions): xref to the pserver thing about
|
||||
permissions in CVSROOT.
|
||||
(Kerberos authenticated): Explicitly mention kerberos rsh.
|
||||
Add various index entries for "security, <foo>".
|
||||
|
||||
Wed Jun 25 13:39:16 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Common options): Rewrite comments concerning HEAD
|
||||
and testcases and solution. Changing HEAD might be too big a
|
||||
change; might be better to phase it out.
|
||||
(Common options, Tags): Add index entries for HEAD and BASE.
|
||||
|
||||
Tue Jun 24 09:37:26 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add assertion failed.
|
||||
|
||||
* cvsclient.texi (Connection and Authentication): Add "E" and
|
||||
"error" as responses in authentication protocol. The server
|
||||
already was in the (formerly bad) habit of sending them, and we
|
||||
might as well implement this in the client and document it.
|
||||
|
||||
* cvs.texinfo (Password authentication security): Note about
|
||||
permissions on $CVSROOT also applies to its parent and so on up to
|
||||
/.
|
||||
|
||||
Mon Jun 23 18:28:18 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Creating a repository): xref to Server requirements
|
||||
for more details on memory, CPU.
|
||||
(Server requirements): Add xref to Creating a repository regarding
|
||||
disk space.
|
||||
|
||||
* cvs.texinfo (Read-only access, Password authentication
|
||||
security): The known holes which let a read-only user execute
|
||||
arbitrary programs on the server are gone.
|
||||
|
||||
* cvsclient.texi (Protocol Notes): Remove multisite item; it is
|
||||
replaced by item 186 in TODO. Add a general reference to TODO.
|
||||
Rewrite accordingly the sentence about multisite in the item
|
||||
concerning sending modified files in "cvs update".
|
||||
|
||||
Fri Jun 20 17:00:20 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Error messages): Add "binary files differ" when
|
||||
trying to check in a binary file.
|
||||
|
||||
Fri Jun 20 14:01:23 1997 David J MacKenzie <[email protected]>
|
||||
and Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo: Fix various formatting, spelling, stylistic, and
|
||||
factual errors.
|
||||
|
||||
Thu Jun 19 07:11:33 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (config): New node.
|
||||
(Password authentication server): Talk about RCSBIN in config as
|
||||
an alternative to -b global option.
|
||||
* cvsclient.texi (Requests): Specify when Root can/must be used.
|
||||
|
||||
* cvs.texinfo (Error messages): Add
|
||||
"*PANIC* administration files missing".
|
||||
|
||||
* cvs.texinfo (Password authentication server): Mention
|
||||
permissions on $CVSROOT and $CVSROOT/CVSROOT as part of the
|
||||
installation process.
|
||||
(Password authentication security): Clarify that permissions issue
|
||||
applies to $CVSROOT as well as $CVSROOT/CVSROOT.
|
||||
|
||||
Wed Jun 18 00:03:25 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* cvs.texinfo (Password authentication security): Add paragraph
|
||||
on write permissions of $CVSROOT/CVSROOT.
|
||||
|
||||
* cvs.texinfo (Adding and removing): New node. Move Adding files,
|
||||
Removing files, Removing directories, Moving files, and Moving
|
||||
directories under it.
|
||||
|
||||
* cvs.texinfo (Removing directories): Add sentence about how
|
||||
one doesn't remove the directory itself.
|
||||
|
||||
* cvs.texinfo (Password authentication server): Document
|
||||
--allow-root.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
It would be nice for the RCS file format (which is implemented by a
|
||||
It would be nice if the RCS file format (which is implemented by a
|
||||
great many tools, both free and non-free, both by calling GNU RCS and
|
||||
by reimplementing access to RCS files) were documented in some
|
||||
standard separate from any one tool. But as far as I know no such
|
||||
@@ -31,6 +31,10 @@ rcsfile.5 also showed the order of the revisions (and the "next" and
|
||||
"branch" fields and anything else where it would be useful to have an
|
||||
example of how a revision tree is represented in an RCS file).
|
||||
|
||||
The rcsfile.5 grammar shows the {num} after "next" as optional; if it
|
||||
is omitted then there is no next delta node (for example 1.1 or the
|
||||
head of a branch will typically have no next).
|
||||
|
||||
There is one case where CVS uses CVS-specific, non-compatible changes
|
||||
to the RCS file format, and this is magic branches. See cvs.texinfo
|
||||
for more information on them. CVS also sets the RCS state to "dead"
|
||||
@@ -54,8 +58,9 @@ rules.
|
||||
namespace RCS library done at Silicon Graphics Inc. (SGI) in 1996
|
||||
(a modified RCS 5.7--not sure it has any other name).
|
||||
dead A set of RCS patches developed by Rich Pixley at
|
||||
Cygnus. These were for CVS, and predated the current
|
||||
CVS death support, which does not require RCS changes.
|
||||
Cygnus about 1992. These were for CVS, and predated
|
||||
the current CVS death support, which uses a state "dead"
|
||||
rather than a "dead" newphrase.
|
||||
|
||||
The rules regarding keyword expansion are not documented along with
|
||||
the rest of the RCS file format; they are documented in the co(1)
|
||||
@@ -66,6 +71,9 @@ RCS 5.7 produces a warning whenever it behaves that way, and current
|
||||
versions of CVS do not handle this case in a special way (CVS 1.9 and
|
||||
earlier invoke RCS to perform keyword expansion).
|
||||
|
||||
Note that if the "expand" keyword is omitted from the RCS file, the
|
||||
default is "kv".
|
||||
|
||||
Note that the "comment {string};" syntax from rcsfile.5 specifies a
|
||||
comment leader, which affects expansion of the $Log keyword for old
|
||||
versions of RCS. The comment leader is not used by RCS 5.7 or current
|
||||
|
||||
+4349
-2921
File diff suppressed because it is too large.
Load diff
+524
-134
@@ -15,9 +15,10 @@ means.
|
||||
@menu
|
||||
* Introduction:: What is CVS and what is the client/server protocol for?
|
||||
* Goals:: Basic design decisions, requirements, scope, etc.
|
||||
* Protocol Notes:: Possible enhancements, limitations, etc. of the protocol
|
||||
* Connection and Authentication:: Various ways to connect to the server
|
||||
* Password scrambling:: Scrambling used by pserver
|
||||
* Protocol:: Complete description of the protocol
|
||||
* Protocol Notes:: Possible enhancements, limitations, etc. of the protocol
|
||||
@end menu
|
||||
|
||||
@node Introduction
|
||||
@@ -111,80 +112,19 @@ current @sc{cvs} server) will make sure that it does not have any such
|
||||
locks in place whenever it is waiting for communication with the client;
|
||||
this prevents one client on a slow or flaky network from interfering
|
||||
with the work of others.
|
||||
@end itemize
|
||||
|
||||
@node Protocol Notes
|
||||
@chapter Notes on the Protocol
|
||||
|
||||
A number of enhancements are possible:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
The @code{Modified} request could be speeded up by sending diffs rather
|
||||
than entire files. The client would need some way to keep the version
|
||||
of the file which was originally checked out; probably requiring the use
|
||||
of "cvs edit" in this case is the most sensible course (the "cvs edit"
|
||||
could be handled by a package like VC for emacs). This would also allow
|
||||
local operation of @code{cvs diff} without arguments.
|
||||
|
||||
@item
|
||||
Have the client keep a copy of some part of the repository. This allows
|
||||
all of @code{cvs diff} and large parts of @code{cvs update} and
|
||||
@code{cvs ci} to be local. The local copy could be made consistent with
|
||||
the master copy at night (but if the master copy has been updated since
|
||||
the latest nightly re-sync, then it would read what it needs to from the
|
||||
master).
|
||||
|
||||
It isn't clear exactly how this should relate to a more general
|
||||
multisite feature (in which one can modify the local copy even if the
|
||||
network is down between the local and the master, and then they get
|
||||
reconciled by a potentially manual process). Another variant of a
|
||||
multisite feature would be where version history is cached to speed up
|
||||
operations such as @code{cvs diff}, but in which checkins still must be
|
||||
checked in to all sites, or to a master site.
|
||||
|
||||
@item
|
||||
The current procedure for @code{cvs update} is highly sub-optimal if
|
||||
there are many modified files. One possible alternative would be to
|
||||
have the client send a first request without the contents of every
|
||||
modified file, then have the server tell it what files it needs. Note
|
||||
the server needs to do the what-needs-to-be-updated check twice (or
|
||||
more, if changes in the repository mean it has to ask the client for
|
||||
more files), because it can't keep locks open while waiting for the
|
||||
network. Perhaps this whole thing is irrelevant if client-side
|
||||
repositories are implemented, and the rcsmerge is done by the client.
|
||||
|
||||
@item
|
||||
The fact that @code{pserver} requires an extra network turnaround in
|
||||
order to perform authentication would be nice to avoid. This relates to
|
||||
the issue of reporting errors; probably the clean solution is to defer
|
||||
the error until the client has issued a request which expects a
|
||||
response. To some extent this might relate to the next item (in terms
|
||||
of how easy it is to skip a whole bunch of requests until we get to one
|
||||
that expects a response). I know that the kerberos code doesn't wait in
|
||||
this fashion, but that probably can cause network deadlocks and perhaps
|
||||
future problems running over a transport which is more transaction
|
||||
oriented than TCP. On the other hand I'm not sure it is wise to make
|
||||
the client conduct a lengthy upload only to find there is an
|
||||
authentication failure.
|
||||
|
||||
@item
|
||||
The protocol uses an extra network turnaround for protocol negotiation
|
||||
(@code{valid-requests}). It might be nice to avoid this by having the
|
||||
client be able to send requests and tell the server to ignore them if
|
||||
they are unrecognized (different requests could produce a fatal error if
|
||||
unrecognized). To do this there should be a standard syntax for
|
||||
requests. For example, perhaps all future requests should be a single
|
||||
line, with mechanisms analogous to @code{Argumentx}, or several requests
|
||||
working together, to provide greater amounts of information. Or there
|
||||
might be a standard mechanism for counted data (analogous to that used
|
||||
by @code{Modified}) or continuation lines (like a generalized
|
||||
@code{Argumentx}). It would be useful to compare what HTTP is planning
|
||||
in this area; last I looked they were contemplating something called
|
||||
Protocol Extension Protocol but I haven't looked at the relevant IETF
|
||||
documents in any detail. Obviously, we want something as simple as
|
||||
possible (but no simpler).
|
||||
|
||||
It is a general design goal to provide only one way to do a given
|
||||
operation (where possible). For example, implementations have no choice
|
||||
about whether to terminate lines with linefeeds or some other
|
||||
character(s), and request and response names are case-sensitive. This
|
||||
is to enhance interoperability. If a protocol allows more than one way
|
||||
to do something, it is all too easy for some implementations to support
|
||||
only some of them (perhaps accidentally).
|
||||
@c I vaguely remember reading, probably in an RFC, about the problems
|
||||
@c that were caused when some people decided that SMTP should accept
|
||||
@c other line termination (in the message ("DATA")?) than CRLF. However, I
|
||||
@c can't seem to track down the reference.
|
||||
@end itemize
|
||||
|
||||
@node Connection and Authentication
|
||||
@@ -209,60 +149,191 @@ by having inetd call "cvs kserver") which defaults to 1999. The client
|
||||
connects, sends the usual kerberos authentication information, and then
|
||||
starts the cvs protocol. Note: port 1999 is officially registered for
|
||||
another use, and in any event one cannot register more than one port for
|
||||
CVS, so the kerberized client and server should be changed to use port
|
||||
2401 (see below), and send a different string in place of @samp{BEGIN
|
||||
AUTH REQUEST} to identify the authentication method in use. However,
|
||||
noone has yet gotten around to implementing this.
|
||||
CVS, so GSS-API (see below) is recommended instead of kserver as a way
|
||||
to support kerberos.
|
||||
|
||||
@item pserver
|
||||
The password authenticated server listens on a port (in the current
|
||||
The name @dfn{pserver} is somewhat confusing. It refers to both a
|
||||
generic framework which allows the CVS protocol to support several
|
||||
authentication mechanisms, and a name for a specific mechanism which
|
||||
transfers a username and a cleartext password. Servers need not support
|
||||
all mechanisms, and in fact servers will typically want to support only
|
||||
those mechanisms which meet the relevant security needs.
|
||||
|
||||
The pserver server listens on a port (in the current
|
||||
implementation, by having inetd call "cvs pserver") which defaults to
|
||||
2401 (this port is officially registered). The client
|
||||
connects, sends the string @samp{BEGIN AUTH REQUEST}, a linefeed, the
|
||||
cvs root, a linefeed, the username, a linefeed, the password trivially
|
||||
encoded (see scramble.c in the cvs sources), a linefeed, the string
|
||||
@samp{END AUTH REQUEST}, and a linefeed. The client must send the
|
||||
connects, and sends the following:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
the string @samp{BEGIN AUTH REQUEST}, a linefeed,
|
||||
@item
|
||||
the cvs root, a linefeed,
|
||||
@item
|
||||
the username, a linefeed,
|
||||
@item
|
||||
the password trivially encoded (see @ref{Password scrambling}), a
|
||||
linefeed,
|
||||
@item
|
||||
the string @samp{END AUTH REQUEST}, and a linefeed.
|
||||
@end itemize
|
||||
|
||||
The client must send the
|
||||
identical string for cvs root both here and later in the
|
||||
@code{Root} request of the cvs
|
||||
protocol itself. Servers are encouraged to enforce this restriction.
|
||||
The server responds with
|
||||
@samp{I LOVE YOU} and a linefeed if the authentication is successful or
|
||||
@samp{I HATE YOU} and a linefeed if the authentication fails. After
|
||||
receiving @samp{I LOVE YOU}, the client proceeds with the cvs protocol.
|
||||
The possible server responses (each of which is followed by a linefeed)
|
||||
are the following. Note that although there is a small similarity
|
||||
between this authentication protocol and the cvs protocol, they are
|
||||
separate.
|
||||
|
||||
@table @code
|
||||
@item I LOVE YOU
|
||||
The authentication is successful. The client proceeds with the cvs
|
||||
protocol itself.
|
||||
|
||||
@item I HATE YOU
|
||||
The authentication fails. After sending this response, the server may
|
||||
close the connection. It is up to the server to decide whether to give
|
||||
this response, which is generic, or a more specific response using
|
||||
@samp{E} and/or @samp{error}.
|
||||
|
||||
@item E @var{text}
|
||||
Provide a message for the user. After this reponse, the authentication
|
||||
protocol continues with another response. Typically the server will
|
||||
provide a series of @samp{E} responses followed by @samp{error}.
|
||||
Compatibility note: @sc{cvs} 1.9.10 and older clients will print
|
||||
@code{unrecognized auth response} and @var{text}, and then exit, upon
|
||||
receiving this response.
|
||||
|
||||
@item error @var{code} @var{text}
|
||||
The authentication fails. After sending this response, the server may
|
||||
close the connection. The @var{code} is a code describing why it
|
||||
failed, intended for computer consumption. The only code currently
|
||||
defined is @samp{0} which is nonspecific, but clients must silently
|
||||
treat any unrecognized codes as nonspecific.
|
||||
The @var{text} should be supplied to the
|
||||
user. Compatibility note: @sc{cvs} 1.9.10 and older clients will print
|
||||
@code{unrecognized auth response} and @var{text}, and then exit, upon
|
||||
receiving this response.
|
||||
@end table
|
||||
|
||||
@c If you are thinking of putting samp or code around BEGIN AUTH REQUEST
|
||||
@c and friends, watch for overfull hboxes.
|
||||
If the client wishes to merely authenticate without starting the cvs
|
||||
protocol, the procedure is the same, except @samp{BEGIN AUTH REQUEST} is
|
||||
replaced with @samp{BEGIN VERIFICATION REQUEST}, @samp{END AUTH REQUEST}
|
||||
is replaced with @samp{END VERIFICATION REQUEST}, and upon receipt of
|
||||
@samp{I LOVE YOU} the connection is closed rather than continuing.
|
||||
protocol, the procedure is the same, except BEGIN AUTH REQUEST is
|
||||
replaced with BEGIN VERIFICATION REQUEST, END AUTH REQUEST
|
||||
is replaced with END VERIFICATION REQUEST, and upon receipt of
|
||||
I LOVE YOU the connection is closed rather than continuing.
|
||||
|
||||
Another mechanism is GSSAPI authentication. GSSAPI is a
|
||||
generic interface to security services such as kerberos. GSSAPI is
|
||||
specified in RFC2078 (GSSAPI version 2) and RFC1508 (GSSAPI version 1);
|
||||
we are not aware of differences between the two which affect the
|
||||
protocol in incompatible ways, so we make no attempt to specify one
|
||||
version or the other.
|
||||
The procedure here is to start with @samp{BEGIN
|
||||
GSSAPI REQUEST}. GSSAPI authentication information is then exchanged
|
||||
between the client and the server. Each packet of information consists
|
||||
of a two byte big endian length, followed by that many bytes of data.
|
||||
After the GSSAPI authentication is complete, the server continues with
|
||||
the responses described above (@samp{I LOVE YOU}, etc.).
|
||||
|
||||
@item future possibilities
|
||||
There are a nearly unlimited number of ways to connect and authenticate.
|
||||
One might want to allow access based on IP address (similar to the usual
|
||||
rsh protocol but with different/no restrictions on ports < 1024), to
|
||||
adopt mechanisms such as the General Security Service (GSS) API or
|
||||
Pluggable Authentication Modules (PAM), to allow users to run their own
|
||||
servers under their own usernames without root access, or any number of
|
||||
other possibilities. The way to add future mechanisms, for the most
|
||||
part, should be to continue to use port 2401, but to use different
|
||||
strings in place of @samp{BEGIN AUTH REQUEST}.
|
||||
adopt mechanisms such as Pluggable Authentication Modules (PAM), to
|
||||
allow users to run their own servers under their own usernames without
|
||||
root access, or any number of other possibilities. The way to add
|
||||
future mechanisms, for the most part, should be to continue to use port
|
||||
2401, but to use different strings in place of @samp{BEGIN AUTH
|
||||
REQUEST}.
|
||||
@end table
|
||||
|
||||
@node Password scrambling
|
||||
@chapter Password scrambling algorithm
|
||||
|
||||
The pserver authentication protocol, as described in @ref{Connection and
|
||||
Authentication}, trivially encodes the passwords. This is only to
|
||||
prevent inadvertent compromise; it provides no protection against even a
|
||||
relatively unsophisticated attacker. For comparison, HTTP Basic
|
||||
Authentication (as described in RFC2068) uses BASE64 for a similar
|
||||
purpose. CVS uses its own algorithm, described here.
|
||||
|
||||
The scrambled password starts with @samp{A}, which serves to identify
|
||||
the scrambling algorithm in use. After that follows a single octet for
|
||||
each character in the password, according to a fixed encoding. The
|
||||
values are shown here, with the encoded values in decimal. Control
|
||||
characters, space, and characters outside the invariant ISO 646
|
||||
character set are not shown; such characters are not recommended for use
|
||||
in passwords. There is a long discussion of character set issues in
|
||||
@ref{Protocol Notes}.
|
||||
|
||||
@example
|
||||
0 111 P 125 p 58
|
||||
! 120 1 52 A 57 Q 55 a 121 q 113
|
||||
" 53 2 75 B 83 R 54 b 117 r 32
|
||||
3 119 C 43 S 66 c 104 s 90
|
||||
4 49 D 46 T 124 d 101 t 44
|
||||
% 109 5 34 E 102 U 126 e 100 u 98
|
||||
& 72 6 82 F 40 V 59 f 69 v 60
|
||||
' 108 7 81 G 89 W 47 g 73 w 51
|
||||
( 70 8 95 H 38 X 92 h 99 x 33
|
||||
) 64 9 65 I 103 Y 71 i 63 y 97
|
||||
* 76 : 112 J 45 Z 115 j 94 z 62
|
||||
+ 67 ; 86 K 50 k 93
|
||||
, 116 < 118 L 42 l 39
|
||||
- 74 = 110 M 123 m 37
|
||||
. 68 > 122 N 91 n 61
|
||||
/ 87 ? 105 O 35 _ 56 o 48
|
||||
@end example
|
||||
|
||||
@node Protocol
|
||||
@chapter The CVS client/server protocol
|
||||
|
||||
In the following, @samp{\n} refers to a linefeed and @samp{\t} refers
|
||||
to a horizontal tab.
|
||||
In the following, @samp{\n} refers to a linefeed and @samp{\t} refers to
|
||||
a horizontal tab; @dfn{requests} are what the client sends and
|
||||
@dfn{responses} are what the server sends. In general, the connection is
|
||||
governed by the client---the server does not send responses without
|
||||
first receiving requests to do so; see @ref{Response intro} for more
|
||||
details of this convention.
|
||||
|
||||
It is typical, early in the connection, for the client to transmit a
|
||||
@code{Valid-responses} request, containing all the responses it
|
||||
supports, followed by a @code{valid-requests} request, which elicits
|
||||
from the server a @code{Valid-requests} response containing all the
|
||||
requests it understands. In this way, the client and server each find
|
||||
out what the other supports before exchanging large amounts of data
|
||||
(such as file contents).
|
||||
|
||||
@c Hmm, having 3 sections in this menu makes a certain amount of sense
|
||||
@c but that structure gets lost in the printed manual (not sure about
|
||||
@c HTML). Perhaps there is a better way.
|
||||
@menu
|
||||
* Entries Lines::
|
||||
* Modes::
|
||||
|
||||
General protocol conventions:
|
||||
|
||||
* Entries Lines:: Transmitting RCS data
|
||||
* File Modes:: Read, write, execute, and possibly more...
|
||||
* Filenames:: Conventions regarding filenames
|
||||
* File transmissions:: How file contents are transmitted
|
||||
* Strings:: Strings in various requests and responses
|
||||
* Requests::
|
||||
* Responses::
|
||||
* Example::
|
||||
* Requirements::
|
||||
|
||||
The protocol itself:
|
||||
|
||||
* Request intro:: General conventions relating to requests
|
||||
* Requests:: List of requests
|
||||
* Response intro:: General conventions relating to responses
|
||||
* Response pathnames:: The "pathname" in responses
|
||||
* Responses:: List of responses
|
||||
* Text tags:: More details about the MT response
|
||||
|
||||
An example session, and some further observations:
|
||||
|
||||
* Example:: A conversation between client and server
|
||||
* Requirements:: Things not to omit from an implementation
|
||||
* Obsolete:: Former protocol features
|
||||
@end menu
|
||||
|
||||
@@ -290,8 +361,16 @@ conflicts in it. The rest of @var{conflict} is @samp{=} if the
|
||||
timestamp matches the file, or anything else if it doesn't. If
|
||||
@var{conflict} does not start with a @samp{+}, it is silently ignored.
|
||||
|
||||
@node Modes
|
||||
@section Modes
|
||||
@var{options} signifies the keyword expansion options (for example
|
||||
@samp{-ko}). In an @code{Entry} request, this indicates the options
|
||||
that were specified with the file from the previous file updating
|
||||
response (@pxref{Response intro}, for a list of file updating
|
||||
responses); if the client is specifying the @samp{-k} or @samp{-A}
|
||||
option to @code{update}, then it is the server which figures out what
|
||||
overrides what.
|
||||
|
||||
@node File Modes
|
||||
@section File Modes
|
||||
|
||||
A mode is any number of repetitions of
|
||||
|
||||
@@ -389,8 +468,8 @@ existing practice is probably to just transmit whatever the user
|
||||
specifies, and hope that everyone involved agrees which character set is
|
||||
in use, or sticks to a common subset.
|
||||
|
||||
@node Requests
|
||||
@section Requests
|
||||
@node Request intro
|
||||
@section Request intro
|
||||
|
||||
By convention, requests which begin with a capital letter do not elicit
|
||||
a response from the server, while all others do -- save one. The
|
||||
@@ -398,6 +477,11 @@ exception is @samp{gzip-file-contents}. Unrecognized requests will
|
||||
always elicit a response from the server, even if that request begins
|
||||
with a capital letter.
|
||||
|
||||
@node Requests
|
||||
@section Requests
|
||||
|
||||
Here are the requests:
|
||||
|
||||
@table @code
|
||||
@item Root @var{pathname} \n
|
||||
Response expected: no. Tell the server which @code{CVSROOT} to use.
|
||||
@@ -408,6 +492,10 @@ already exist; if creating a new root, use the @code{init} request, not
|
||||
server, how to access the server, etc.; by the time the CVS protocol is
|
||||
in use, connection, authentication, etc., are already taken care of.
|
||||
|
||||
The @code{Root} request must be sent only once, and it must be sent
|
||||
before any requests other than @code{Valid-responses},
|
||||
@code{valid-requests}, @code{UseUnchanged}, or @code{init}.
|
||||
|
||||
@item Valid-responses @var{request-list} \n
|
||||
Response expected: no.
|
||||
Tell the server what responses the client will accept.
|
||||
@@ -426,8 +514,7 @@ also for @code{ci} and the other commands; normal usage is to send
|
||||
@code{Directory} for each directory in which there will be an
|
||||
@code{Entry} or @code{Modified}, and then a final @code{Directory}
|
||||
for the original directory, then the command.
|
||||
If the client uses this request, it affects the way the server returns
|
||||
pathnames; see @ref{Responses}. @var{local-directory} is relative to
|
||||
The @var{local-directory} is relative to
|
||||
the top level at which the command is occurring (i.e. the last
|
||||
@code{Directory} which is sent before the command);
|
||||
to indicate that top level, @samp{.} should be send for
|
||||
@@ -549,6 +636,15 @@ sent for the same file, @code{Entry} must be sent first. For a
|
||||
given file, one can send @code{Modified}, @code{Is-modified}, or
|
||||
@code{Unchanged}, but not more than one of these three.
|
||||
|
||||
@item Kopt @var{option} \n
|
||||
This indicates to the server which keyword expansion options to use for
|
||||
the file specified by the next @code{Modified} or @code{Is-modified}
|
||||
request (for example @samp{-kb} for a binary file). This is similar to
|
||||
@code{Entry}, but is used for a file for which there is no entries line.
|
||||
Typically this will be a file being added via an @code{add} or
|
||||
@code{import} request. The client may not send both @code{Kopt} and
|
||||
@code{Entry} for the same file.
|
||||
|
||||
@item Modified @var{filename} \n
|
||||
Response expected: no. Additional data: mode, \n, file transmission.
|
||||
Send the server a copy of one locally modified file. @var{filename} is
|
||||
@@ -703,6 +799,38 @@ the client and server encrypt the compressed data, as opposed to
|
||||
compressing the encrypted data. Encrypted data is generally
|
||||
incompressible.
|
||||
|
||||
Note that this request does not fully prevent an attacker from hijacking
|
||||
the connection, in the sense that it does not prevent hijacking the
|
||||
connection between the initial authentication and the
|
||||
@code{Kerberos-encrypt} request.
|
||||
|
||||
@item Gssapi-encrypt \n
|
||||
Response expected: no.
|
||||
Use GSSAPI encryption to encrypt all further communication between the
|
||||
client and the server. This will only work if the connection was made
|
||||
over GSSAPI in the first place. See @code{Kerberos-encrypt}, above, for
|
||||
the relation between @code{Gssapi-encrypt} and @code{Gzip-stream}.
|
||||
|
||||
Note that this request does not fully prevent an attacker from hijacking
|
||||
the connection, in the sense that it does not prevent hijacking the
|
||||
connection between the initial authentication and the
|
||||
@code{Gssapi-encrypt} request.
|
||||
|
||||
@item Gssapi-authenticate \n
|
||||
Response expected: no.
|
||||
Use GSSAPI authentication to authenticate all further communication
|
||||
between the client and the server. This will only work if the
|
||||
connection was made over GSSAPI in the first place. Encrypted data is
|
||||
automatically authenticated, so using both @code{Gssapi-authenticate}
|
||||
and @code{Gssapi-encrypt} has no effect beyond that of
|
||||
@code{Gssapi-encrypt}. Unlike encrypted data, it is reasonable to
|
||||
compress authenticated data.
|
||||
|
||||
Note that this request does not fully prevent an attacker from hijacking
|
||||
the connection, in the sense that it does not prevent hijacking the
|
||||
connection between the initial authentication and the
|
||||
@code{Gssapi-authenticate} request.
|
||||
|
||||
@item Set @var{variable}=@var{value} \n
|
||||
Response expected: no.
|
||||
Set a user variable @var{variable} to @var{value}.
|
||||
@@ -766,7 +894,6 @@ directory.
|
||||
@itemx log \n
|
||||
@itemx remove \n
|
||||
@itemx admin \n
|
||||
@itemx export \n
|
||||
@itemx history \n
|
||||
@itemx watchers \n
|
||||
@itemx editors \n
|
||||
@@ -788,6 +915,19 @@ correspond to except by (1) just sending the @code{co} request, and then
|
||||
seeing what directory names the server sends back in its responses, and
|
||||
(2) the @code{expand-modules} request.
|
||||
|
||||
@item export \n
|
||||
Response expected: yes. Get files from the repository. This uses any
|
||||
previous @code{Argument}, @code{Directory}, @code{Entry}, or
|
||||
@code{Modified} requests, if they have been sent. Arguments to this
|
||||
command are module names, as described for the @code{co} request. The
|
||||
intention behind this command is that a client can get sources from a
|
||||
server without storing CVS information about those sources. That is, a
|
||||
client probably should not count on being able to take the entries line
|
||||
returned in the @code{Created} response from an @code{export} request
|
||||
and send it in a future @code{Entry} request. Note that the entries
|
||||
line in the @code{Created} response must indicate whether the file is
|
||||
binary or text, so the client can create it correctly.
|
||||
|
||||
@item rdiff \n
|
||||
@itemx rtag \n
|
||||
Response expected: yes. Actually do a cvs command. This uses any
|
||||
@@ -882,17 +1022,17 @@ to perform a few more checks.
|
||||
The client sends a subsequent @code{ci} to actually add the file to the
|
||||
repository.
|
||||
|
||||
Another quirk of the @code{add} request is that a pathname specified in
|
||||
Another quirk of the @code{add} request is that with CVS 1.9 and older,
|
||||
a pathname specified in
|
||||
an @code{Argument} request cannot contain @samp{/}. There is no good
|
||||
reason for this restriction, and it could be eliminated if someone took
|
||||
the effort to rewrite the @code{add} code in the CVS server to not have
|
||||
it. But in the meantime, the way to comply with it is to ensure that
|
||||
reason for this restriction, and in fact more recent CVS servers don't
|
||||
have it.
|
||||
But the way to interoperate with the older servers is to ensure that
|
||||
all @code{Directory} requests for @code{add} (except those used to add
|
||||
directories, as described above), use @samp{.} for
|
||||
@var{local-directory}. Specifying another string for
|
||||
@var{local-directory} may not get an error, but it will get you strange
|
||||
@code{Checked-in} responses, until servers are fixed to send the correct
|
||||
responses.
|
||||
@code{Checked-in} responses from the buggy servers.
|
||||
|
||||
@item watch-on \n
|
||||
@itemx watch-off \n
|
||||
@@ -941,6 +1081,11 @@ Availability of this request in the server indicates to the client that
|
||||
it may compress files sent to the server, regardless of whether the
|
||||
client actually uses this request.
|
||||
|
||||
@item wrapper-sendme-rcsOptions \n
|
||||
Response expected: yes.
|
||||
Request that the server transmit mappings from filenames to keyword
|
||||
expansion modes in @code{Wrapper-rcsOption} responses.
|
||||
|
||||
@item @var{other-request} @var{text} \n
|
||||
Response expected: yes.
|
||||
Any unrecognized request expects a response, and does not
|
||||
@@ -951,8 +1096,8 @@ a previous command which doesn't expect a response produced an error.
|
||||
|
||||
When the client is done, it drops the connection.
|
||||
|
||||
@node Responses
|
||||
@section Responses
|
||||
@node Response intro
|
||||
@section Introduction to Responses
|
||||
|
||||
After a command which expects a response, the server sends however many
|
||||
of the following responses are appropriate. The server should not send
|
||||
@@ -960,9 +1105,31 @@ data at other times (the current implementation may violate this
|
||||
principle in a few minor places, where the server is printing an error
|
||||
message and exiting---this should be investigated further).
|
||||
|
||||
Any set of responses always ends with @samp{error} or @samp{ok}. This
|
||||
indicates that the response is over.
|
||||
|
||||
@c "file updating response" and "file update modifying response" are
|
||||
@c lame terms (mostly because they are so awkward). Any better ideas?
|
||||
The responses @code{Checked-in}, @code{New-entry}, @code{Updated},
|
||||
@code{Created}, @code{Update-existing}, @code{Merged}, and
|
||||
@code{Patched} are refered to as @dfn{file updating} responses, because
|
||||
they change the status of a file in the working directory in some way.
|
||||
The responses @code{Mode}, @code{Mod-time}, and @code{Checksum} are
|
||||
referred to as @dfn{file update modifying} responses because they modify
|
||||
the next file updating response. In no case shall a file update
|
||||
modifying response apply to a file updating response other than the next
|
||||
one. Nor can the same file update modifying response occur twice for
|
||||
a given file updating response (if servers diagnose this problem, it may
|
||||
aid in detecting the case where clients send an update modifying
|
||||
response without following it by a file updating response).
|
||||
|
||||
@node Response pathnames
|
||||
@section The "pathname" in responses
|
||||
|
||||
Many of the responses contain something called @var{pathname}.
|
||||
@c FIXME: should better document when the specified repository needs to
|
||||
@c end in "/.".
|
||||
In the following, @var{pathname} actually indicates a pair of
|
||||
The name is somewhat misleading; it actually indicates a pair of
|
||||
pathnames. First, a local directory name
|
||||
relative to the directory in which the command was given (i.e. the last
|
||||
@code{Directory} before the command). Then a linefeed and a repository
|
||||
@@ -1001,8 +1168,10 @@ greatly by only telling the client to create directories if the
|
||||
directory in question should exist, but until servers do this, clients
|
||||
will need to offer the @samp{-P} behavior described above.
|
||||
|
||||
Any response always ends with @samp{error} or @samp{ok}. This indicates
|
||||
that the response is over.
|
||||
@node Responses
|
||||
@section Responses
|
||||
|
||||
Here are the responses:
|
||||
|
||||
@table @code
|
||||
@item Valid-requests @var{request-list} \n
|
||||
@@ -1096,13 +1265,14 @@ only support @code{Patched}.
|
||||
|
||||
@item Mode @var{mode} \n
|
||||
This @var{mode} applies to the next file mentioned in
|
||||
@code{Checked-in}. It does not apply to any request which follows a
|
||||
@code{Checked-in}, @code{New-entry}, @code{Updated}, @code{Merged}, or
|
||||
@code{Patched} response.
|
||||
@code{Checked-in}. @code{Mode} is a file update modifying response
|
||||
as described in @ref{Response intro}.
|
||||
|
||||
@item Mod-time @var{time} \n
|
||||
Set the modification time of the next file sent to @var{time}. Next
|
||||
file sent means sent by @code{Checked-in}, @code{Created}, etc. The
|
||||
Set the modification time of the next file sent to @var{time}.
|
||||
@code{Mod-time} is a file update modifying response
|
||||
as described in @ref{Response intro}.
|
||||
The
|
||||
@var{time} is in the format specified by RFC822 as modified by RFC1123.
|
||||
The server may specify any timezone it chooses; clients will want to
|
||||
convert that to their own timezone as appropriate. An example of this
|
||||
@@ -1118,13 +1288,16 @@ synchronized. The server just sends its recommendation for a timestamp
|
||||
it (this means that the time might be in the future, for example).
|
||||
|
||||
@item Checksum @var{checksum}\n
|
||||
The @var{checksum} applies to the next file sent over via
|
||||
@code{Updated}, @code{Merged}, or @code{Patched}. In the case of
|
||||
The @var{checksum} applies to the next file sent (that is,
|
||||
@code{Checksum} is a file update modifying response
|
||||
as described in @ref{Response intro}).
|
||||
In the case of
|
||||
@code{Patched}, the checksum applies to the file after being patched,
|
||||
not to the patch itself. The client should compute the checksum itself,
|
||||
after receiving the file or patch, and signal an error if the checksums
|
||||
do not match. The checksum is the 128 bit MD5 checksum represented as
|
||||
32 hex digits. This response is optional, and is only used if the
|
||||
32 hex digits (MD5 is described in RFC1321).
|
||||
This response is optional, and is only used if the
|
||||
client supports it (as judged by the @code{Valid-responses} request).
|
||||
|
||||
@item Copy-file @var{pathname} \n
|
||||
@@ -1194,7 +1367,8 @@ request; if there are several @code{Notify} requests for a single file,
|
||||
the requests should be processed in order; the first @code{Notified}
|
||||
response pertains to the first @code{Notify} request, etc.
|
||||
|
||||
@item Module-expansion @var{pathname} \n Return a file or directory
|
||||
@item Module-expansion @var{pathname} \n
|
||||
Return a file or directory
|
||||
which is included in a particular module. @var{pathname} is relative
|
||||
to cvsroot, unlike most pathnames in responses. @var{pathname} should
|
||||
be used to look and see whether some or all of the module exists on
|
||||
@@ -1203,9 +1377,27 @@ argument to a @code{co} request (for example, if the modules file
|
||||
contains the @samp{-d} option, it will be the directory specified with
|
||||
@samp{-d}, not the name of the module).
|
||||
|
||||
@item Wrapper-rcsOption @var{pattern} -k '@var{option}' \n
|
||||
Transmit to the client a filename pattern which implies a certain
|
||||
keyword expansion mode. The @var{pattern} is a wildcard pattern (for
|
||||
example, @samp{*.exe}. The @var{option} is @samp{b} for binary, and so
|
||||
on. Note that although the syntax happens to resemble the syntax in
|
||||
certain CVS configuration files, it is more constrained; there must be
|
||||
exactly one space between @var{pattern} and @samp{-k} and exactly one
|
||||
space between @samp{-k} and @samp{'}, and no string is permitted in
|
||||
place of @samp{-k} (extensions should be done with new responses, not by
|
||||
extending this one, for graceful handling of @code{Valid-responses}).
|
||||
|
||||
@item M @var{text} \n
|
||||
A one-line message for the user.
|
||||
|
||||
@item Mbinary \n
|
||||
Additional data: file transmission (note: compressed file transmissions
|
||||
are not supported). This is like @samp{M}, except the contents of the
|
||||
file transmission are binary and should be copied to standard output
|
||||
without translation to local text file conventions. To transmit a text
|
||||
file to standard output, servers should use a series of @samp{M} requests.
|
||||
|
||||
@item E @var{text} \n
|
||||
Same as @code{M} but send to stderr not stdout.
|
||||
|
||||
@@ -1217,6 +1409,77 @@ Flush stderr. That is, make it possible for the user to see what has
|
||||
been written to stderr (it is up to the implementation to decide exactly
|
||||
how far it should go to ensure this).
|
||||
|
||||
@item MT @var{tagname} @var{data} \n
|
||||
|
||||
This response provides for tagged text. It is similar to
|
||||
SGML/HTML/XML in that the data is structured and a naive application
|
||||
can also make some sense of it without understanding the structure.
|
||||
The syntax is not SGML-like, however, in order to fit into the CVS
|
||||
protocol better and (more importantly) to make it easier to parse,
|
||||
especially in a language like perl or awk.
|
||||
|
||||
The @var{tagname} can have several forms. If it starts with @samp{a}
|
||||
to @samp{z} or @samp{A} to @samp{Z}, then it represents tagged text.
|
||||
If the implementation recognizes @var{tagname}, then it may interpret
|
||||
@var{data} in some particular fashion. If the implementation does not
|
||||
recognize @var{tagname}, then it should simply treat @var{data} as
|
||||
text to be sent to the user (similar to an @samp{M} response). There
|
||||
are two tags which are general purpose. The @samp{text} tag is
|
||||
similar to an unrecognized tag in that it provides text which will
|
||||
ordinarily be sent to the user. The @samp{newline} tag is used
|
||||
without @var{data} and indicates that a newline will ordinarily be
|
||||
sent to the user (there is no provision for embedding newlines in the
|
||||
@var{data} of other tagged text responses).
|
||||
|
||||
If @var{tagname} starts with @samp{+} it indicates a start tag and if
|
||||
it starts with @samp{-} it indicates an end tag. The remainder of
|
||||
@var{tagname} should be the same for matching start and end tags, and
|
||||
tags should be nested (for example one could have tags in the
|
||||
following order @code{+bold} @code{+italic} @code{text} @code{-italic}
|
||||
@code{-bold} but not @code{+bold} @code{+italic} @code{text}
|
||||
@code{-bold} @code{-italic}). A particular start and end tag may be
|
||||
documented to constrain the tagged text responses which are valid
|
||||
between them.
|
||||
|
||||
Note that if @var{data} is present there will always be exactly one
|
||||
space between @var{tagname} and @var{data}; if there is more than one
|
||||
space, then the spaces beyond the first are part of @var{data}.
|
||||
|
||||
Here is an example of some tagged text responses. Note that there is
|
||||
a trailing space after @samp{Checking in} and @samp{initial revision:}
|
||||
and there are two trailing spaces after @samp{<--}. Such trailing
|
||||
spaces are, of course, part of @var{data}.
|
||||
|
||||
@example
|
||||
MT +checking-in
|
||||
MT text Checking in
|
||||
MT fname gz.tst
|
||||
MT text ;
|
||||
MT newline
|
||||
MT rcsfile /home/kingdon/zwork/cvsroot/foo/gz.tst,v
|
||||
MT text <--
|
||||
MT fname gz.tst
|
||||
MT newline
|
||||
MT text initial revision:
|
||||
MT init-rev 1.1
|
||||
MT newline
|
||||
MT text done
|
||||
MT newline
|
||||
MT -checking-in
|
||||
@end example
|
||||
|
||||
If the client does not support the @samp{MT} response, the same
|
||||
responses might be sent as:
|
||||
|
||||
@example
|
||||
M Checking in gz.tst;
|
||||
M /home/kingdon/zwork/cvsroot/foo/gz.tst,v <-- gz.tst
|
||||
M initial revision: 1.1
|
||||
M done
|
||||
@end example
|
||||
|
||||
For a list of specific tags, see @ref{Text tags}.
|
||||
|
||||
@item error @var{errno-code} @samp{ } @var{text} \n
|
||||
The command completed with an error. @var{errno-code} is a symbolic
|
||||
error code (e.g. @code{ENOENT}); if the server doesn't support this
|
||||
@@ -1229,6 +1492,35 @@ strerror(), or any other message the server wants to use.
|
||||
The command completed successfully.
|
||||
@end table
|
||||
|
||||
@node Text tags
|
||||
@section Tags for the MT tagged text response
|
||||
|
||||
The @code{MT} response, as described in @ref{Responses}, offers a
|
||||
way for the server to send tagged text to the client. This section
|
||||
describes specific tags. The intention is to update this section as
|
||||
servers add new tags.
|
||||
|
||||
In the following descriptions, @code{text} and @code{newline} tags are
|
||||
omitted. Such tags contain information which is intended for users (or
|
||||
to be discarded), and are subject to change at the whim of the server.
|
||||
To avoid being vulnerable to such whim, clients should look for the tags
|
||||
listed here, not @code{text}, @code{newline}, or other tags.
|
||||
|
||||
The following tag means to indicate to the user that a file has been
|
||||
updated. It is more or less redundant with the @code{Created} and
|
||||
@code{Update-existing} responses, but we don't try to specify here
|
||||
whether it occurs in exactly the same circumstances as @code{Created}
|
||||
and @code{Update-existing}. The @var{name} is the pathname of the file
|
||||
being updated relative to the directory in which the command is
|
||||
occurring (that is, the last @code{Directory} request which is sent
|
||||
before the command).
|
||||
|
||||
@example
|
||||
MT +updated
|
||||
MT fname @var{name}
|
||||
MT -updated
|
||||
@end example
|
||||
|
||||
@node Example
|
||||
@section Example
|
||||
|
||||
@@ -1236,9 +1528,9 @@ The command completed successfully.
|
||||
@c other RFC's). In other formatting concerns, we might want to think
|
||||
@c about whether there is an easy way to provide RFC1543 formatting
|
||||
@c (without negating the advantages of texinfo), and whether we should
|
||||
@c use RFC822-style BNF (I fear that would be less clear than
|
||||
@c what we do now, however). Plus what about IETF terminology (SHOULD,
|
||||
@c MUST, etc.) or ISO terminology (shall, should, or whatever they are)?
|
||||
@c use RFC2234 BNF (I fear that would be less clear than
|
||||
@c what we do now, however). Plus what about RFC2119 terminology (MUST,
|
||||
@c SHOULD, &c) or ISO terminology (shall, should, or whatever they are)?
|
||||
Here is an example; lines are prefixed by @samp{C: } to indicate the
|
||||
client sends them or @samp{S: } to indicate the server sends them.
|
||||
|
||||
@@ -1410,4 +1702,102 @@ working directory, and the meaning of sending @code{Entries} without
|
||||
@code{Lost} or @code{Modified} was different. All current clients (CVS
|
||||
1.5 and later) will send @code{UseUnchanged} if it is supported.
|
||||
|
||||
@node Protocol Notes
|
||||
@chapter Notes on the Protocol
|
||||
|
||||
A number of enhancements are possible. Also see the file @sc{todo} in
|
||||
the @sc{cvs} source distribution, which has further ideas concerning
|
||||
various aspects of @sc{cvs}, some of which impact the protocol.
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
The @code{Modified} request could be speeded up by sending diffs rather
|
||||
than entire files. The client would need some way to keep the version
|
||||
of the file which was originally checked out; probably requiring the use
|
||||
of "cvs edit" in this case is the most sensible course (the "cvs edit"
|
||||
could be handled by a package like VC for emacs). This would also allow
|
||||
local operation of @code{cvs diff} without arguments.
|
||||
|
||||
@item
|
||||
The current procedure for @code{cvs update} is highly sub-optimal if
|
||||
there are many modified files. One possible alternative would be to
|
||||
have the client send a first request without the contents of every
|
||||
modified file, then have the server tell it what files it needs. Note
|
||||
the server needs to do the what-needs-to-be-updated check twice (or
|
||||
more, if changes in the repository mean it has to ask the client for
|
||||
more files), because it can't keep locks open while waiting for the
|
||||
network. Perhaps this whole thing is irrelevant if there is a multisite
|
||||
capability (as noted in @sc{todo}), and therefore the rcsmerge can be
|
||||
done with a repository which is connected via a fast connection.
|
||||
|
||||
@item
|
||||
The fact that @code{pserver} requires an extra network turnaround in
|
||||
order to perform authentication would be nice to avoid. This relates to
|
||||
the issue of reporting errors; probably the clean solution is to defer
|
||||
the error until the client has issued a request which expects a
|
||||
response. To some extent this might relate to the next item (in terms
|
||||
of how easy it is to skip a whole bunch of requests until we get to one
|
||||
that expects a response). I know that the kerberos code doesn't wait in
|
||||
this fashion, but that probably can cause network deadlocks and perhaps
|
||||
future problems running over a transport which is more transaction
|
||||
oriented than TCP. On the other hand I'm not sure it is wise to make
|
||||
the client conduct a lengthy upload only to find there is an
|
||||
authentication failure.
|
||||
|
||||
@item
|
||||
The protocol uses an extra network turnaround for protocol negotiation
|
||||
(@code{valid-requests}). It might be nice to avoid this by having the
|
||||
client be able to send requests and tell the server to ignore them if
|
||||
they are unrecognized (different requests could produce a fatal error if
|
||||
unrecognized). To do this there should be a standard syntax for
|
||||
requests. For example, perhaps all future requests should be a single
|
||||
line, with mechanisms analogous to @code{Argumentx}, or several requests
|
||||
working together, to provide greater amounts of information. Or there
|
||||
might be a standard mechanism for counted data (analogous to that used
|
||||
by @code{Modified}) or continuation lines (like a generalized
|
||||
@code{Argumentx}). It would be useful to compare what HTTP is planning
|
||||
in this area; last I looked they were contemplating something called
|
||||
Protocol Extension Protocol but I haven't looked at the relevant IETF
|
||||
documents in any detail. Obviously, we want something as simple as
|
||||
possible (but no simpler).
|
||||
|
||||
@item
|
||||
The scrambling algorithm in the CVS client and server actually support
|
||||
more characters than those documented in @ref{Password scrambling}.
|
||||
Someday we are going to either have to document them all (but this is
|
||||
not as easy as it may look, see below), or (gradually and with adequate
|
||||
process) phase out the support for other characters in the CVS
|
||||
implementation. This business of having the feature partly undocumented
|
||||
isn't a desirable state long-term.
|
||||
|
||||
The problem with documenting other characters is that unless we know
|
||||
what character set is in use, there is no way to make a password
|
||||
portable from one system to another. For example, a with a circle on
|
||||
top might have different encodings in different character sets.
|
||||
|
||||
It @emph{almost} works to say that the client picks an arbitrary,
|
||||
unknown character set (indeed, having the CVS client know what character
|
||||
set the user has in mind is a hard problem otherwise), and scrambles
|
||||
according to a certain octet<->octet mapping. There are two problems
|
||||
with this. One is that the protocol has no way to transmit character 10
|
||||
decimal (linefeed), and the current server and clients have no way to
|
||||
handle 0 decimal (NUL). This may cause problems with certain multibyte
|
||||
character sets, in which octets 10 and 0 will appear in the middle of
|
||||
other characters. The other problem, which is more minor and possibly
|
||||
not worth worrying about, is that someone can type a password on one
|
||||
system and then go to another system which uses a different encoding for
|
||||
the same characters, and have their password not work.
|
||||
|
||||
The restriction to the ISO646 invariant subset is the best approach for
|
||||
strings which are not particularly significant to users. Passwords are
|
||||
visible enough that this is somewhat doubtful as applied here. ISO646
|
||||
does, however, have the virtue (!?) of offending everyone. It is easy
|
||||
to say "But the $ is right on people's keyboards! Surely we can't
|
||||
forbid that". From a human factors point of view, that makes quite a
|
||||
bit of sense. The contrary argument, of course, is that a with a circle
|
||||
on top, or some of the characters poorly handled by Unicode, are on
|
||||
@emph{someone}'s keyboard.
|
||||
|
||||
@end itemize
|
||||
|
||||
@bye
|
||||
@@ -1,3 +1,99 @@
|
||||
1998-02-20 Jim Kingdon <[email protected]>
|
||||
|
||||
* regex.c: Partial merge with version from emacs 20.2. Brings
|
||||
over some trivial changes (whitespace and so on) (most such
|
||||
changes I didn't bother with, for this time). Don't cast to int
|
||||
before comparing old_regend[r] to regstart[r] (this is the point
|
||||
of bothering; the old code was broken for 64 bit machines.
|
||||
Reported by Paul Vixie).
|
||||
|
||||
Tue Feb 17 18:33:26 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* memmove.c: New file, resurrecting the old one.
|
||||
* Makefile.in (SOURCES): Add memmove.c.
|
||||
|
||||
1998-02-03 Tim Pierce <[email protected]>
|
||||
|
||||
* system.h (CVS_LSTAT): New macro.
|
||||
|
||||
Sat Feb 7 17:33:39 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* getline.h (getstr): Declare.
|
||||
|
||||
13 Jan 1998 Jim Kingdon
|
||||
|
||||
* fncase.c: Include config.h before system.h.
|
||||
|
||||
* system.h: Just include string.h unconditionally. We already
|
||||
include it unconditionally elsewhere.
|
||||
|
||||
Tue Jan 13 16:51:59 1998 Ian Lance Taylor <[email protected]>
|
||||
|
||||
* fncase.c: New file, taken from windows-NT/filesubr.c.
|
||||
* system.h: If __CYGWIN32__ or WIN32 are defined, define
|
||||
FOLD_FN_CHAR, FILENAMES_CASE_INSENSITIVE, and ISDIRSEP, and
|
||||
declare fncmp and fnfold. Taken from windows-NT/config.h.
|
||||
* Makefile.in (SOURCES): Add fncase.c.
|
||||
|
||||
Sat Jan 10 10:51:26 1998 Jim Kingdon <[email protected]>
|
||||
|
||||
* getline.c (getstr): Make sure to set errno when appropriate. I
|
||||
didn't test the error case for the new code but inspection shows
|
||||
the old code was rather broken.
|
||||
|
||||
Sat Nov 29 22:03:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
getwd and getcwd were a big big mess. Although Jim's fix might
|
||||
indeed be fixing a typo, the code is so tangled that I would guess
|
||||
it probably breaks some system. So clean this up:
|
||||
* xgetwd.c: Always assume we have getcwd (we had been anyway,
|
||||
before Jim's change).
|
||||
* getwd.c: Removed.
|
||||
* Makefile.in: Remove getwd.c
|
||||
* system.h: Remove declarations of getwd and getcwd. Move getcwd
|
||||
declaration to the !HAVE_UNISTD_H section.
|
||||
|
||||
1997-11-29 Jim Meyering <[email protected]>
|
||||
|
||||
* xgetwd.c: Fix typo s/ifndef/ifdef/ in test of HAVE_GETWD.
|
||||
|
||||
Wed Nov 26 10:12:33 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* system.h: Always use "rb" and "wb". Check for O_BINARY with an
|
||||
#ifdef, not the error-prone LINES_CRLF_TERMINATED.
|
||||
|
||||
Thu Sep 25 10:57:39 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* getdate.y (get_date): If gmtime returns NULL, try to cope.
|
||||
* getdate.c: Regenerated using byacc.
|
||||
|
||||
* getdate.y: Remove comment about sending email concerning this file
|
||||
to Rich Salz.
|
||||
* getdate.c: Regenerated using byacc.
|
||||
|
||||
Wed Sep 24 10:35:38 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* Makefile.in (OBJECTS): Add regex.o.
|
||||
|
||||
Wed Sep 17 16:37:17 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* getdate.y (ToSeconds): For am or pm, a hour of "12" really means 0.
|
||||
* getdate.c: Regenerated using byacc (not bison per comment).
|
||||
|
||||
Tue Sep 9 20:51:45 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* build_lib.com: Add vasprintf.c and vasprintf.obj.
|
||||
|
||||
* build_lib.com: Remove strippath.obj from library/create command.
|
||||
|
||||
Sun Sep 7 17:35:27 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* system.h: Replace comment referring to ChangeLog with a
|
||||
comment based on the ChangeLog entries.
|
||||
|
||||
* strdup.c: Removed, per change to ../configure.in
|
||||
* Makefile.in (SOURCES): Remove strdup.c.
|
||||
|
||||
Mon Jun 16 18:59:50 1997 Jim Kingdon <[email protected]>
|
||||
|
||||
* system.h: Add CVS_FNMATCH.
|
||||
|
||||
Loaded 100 of 1292 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user