Browse Source

Plan 9 from Bell Labs 2007-02-18

David du Colombier 17 years ago
parent
commit
bb5e8497eb

+ 26 - 26
dist/replica/_plan9.db

@@ -43,21 +43,21 @@
 386/bin/ascii - 775 sys sys 1168402265 64884
 386/bin/astro - 775 sys sys 1148500574 138871
 386/bin/auth - 20000000775 sys sys 1016920815 0
-386/bin/auth/aescbc - 775 sys sys 1168402266 140919
+386/bin/auth/aescbc - 775 sys sys 1171743872 141338
 386/bin/auth/asn12rsa - 775 sys sys 1168402266 120828
 386/bin/auth/authsrv - 775 sys sys 1169612018 166651
 386/bin/auth/changeuser - 775 sys sys 1168402267 97488
-386/bin/auth/convkeys - 775 sys sys 1168402267 88057
-386/bin/auth/convkeys2 - 775 sys sys 1168402267 88116
+386/bin/auth/convkeys - 775 sys sys 1171743872 88681
+386/bin/auth/convkeys2 - 775 sys sys 1171743873 88740
 386/bin/auth/cron - 775 sys sys 1168402268 144754
 386/bin/auth/debug - 775 sys sys 1168402268 101566
 386/bin/auth/disable - 775 sys sys 1020319057 146
 386/bin/auth/enable - 775 sys sys 1020319057 134
-386/bin/auth/factotum - 775 sys sys 1168402269 322131
+386/bin/auth/factotum - 775 sys sys 1171743873 322645
 386/bin/auth/fgui - 775 sys sys 1168402269 218990
 386/bin/auth/guard.srv - 775 sys sys 1169612018 143828
 386/bin/auth/iam - 775 sys sys 1085076981 50791
-386/bin/auth/keyfs - 775 sys sys 1168402270 116158
+386/bin/auth/keyfs - 775 sys sys 1171743874 116577
 386/bin/auth/login - 775 sys sys 1168402270 104747
 386/bin/auth/newns - 775 sys sys 1168402270 89966
 386/bin/auth/none - 775 sys sys 1168402270 89249
@@ -71,13 +71,13 @@
 386/bin/auth/rsafill - 775 sys sys 1168402273 143968
 386/bin/auth/rsagen - 775 sys sys 1168402273 153528
 386/bin/auth/secretpem - 775 sys sys 1045537944 118526
-386/bin/auth/secstore - 775 sys sys 1168402274 196045
+386/bin/auth/secstore - 775 sys sys 1171743874 196464
 386/bin/auth/secstored - 775 sys sys 1169612019 198002
 386/bin/auth/secuser - 775 sys sys 1168402275 153231
 386/bin/auth/status - 775 sys sys 1020319060 738
 386/bin/auth/uniq - 775 sys sys 1168402275 63314
 386/bin/auth/warning - 775 sys sys 1168402275 101295
-386/bin/auth/wrkey - 775 sys sys 1168402275 75651
+386/bin/auth/wrkey - 775 sys sys 1171743875 76275
 386/bin/aux - 20000000775 sys sys 1016920817 0
 386/bin/aux/8prefix - 775 sys sys 1168402276 67103
 386/bin/aux/9pcon - 775 sys sys 1168402276 95153
@@ -208,7 +208,7 @@
 386/bin/disk/exsort - 775 sys sys 1168402301 60455
 386/bin/disk/fdisk - 775 sys sys 1168402301 104096
 386/bin/disk/format - 775 sys sys 1168402302 89778
-386/bin/disk/kfs - 775 sys sys 1168402302 249457
+386/bin/disk/kfs - 775 sys sys 1171743875 250081
 386/bin/disk/kfscmd - 775 sys sys 1148500626 38257
 386/bin/disk/ksync - 775 sys sys 1020319074 302
 386/bin/disk/mbr - 775 sys sys 1168402302 73918
@@ -544,8 +544,8 @@
 386/lib/ape/libv.a - 664 sys sys 1143777858 19668
 386/lib/lib9p.a - 664 sys sys 1168402362 90956
 386/lib/libString.a - 664 sys sys 1168402362 22126
-386/lib/libauth.a - 664 sys sys 1168402363 58570
-386/lib/libauthsrv.a - 664 sys sys 1168402363 34858
+386/lib/libauth.a - 664 sys sys 1171743876 58570
+386/lib/libauthsrv.a - 664 sys sys 1171743876 35834
 386/lib/libbin.a - 664 sys sys 1168402363 2534
 386/lib/libbio.a - 664 sys sys 1168402363 25980
 386/lib/libc.a - 664 sys sys 1168402364 503128
@@ -6005,7 +6005,7 @@ sys/include/ape/utf.h - 664 sys sys 1070327359 1595
 sys/include/ape/utime.h - 664 sys sys 944948760 259
 sys/include/ar.h - 664 sys sys 1014929061 244
 sys/include/auth.h - 664 sys sys 1091904428 3439
-sys/include/authsrv.h - 664 sys sys 1014929062 4542
+sys/include/authsrv.h - 664 sys sys 1171690216 4853
 sys/include/bin.h - 664 sys sys 1091904425 239
 sys/include/bio.h - 664 sys sys 1014929062 1854
 sys/include/bootexec.h - 664 sys sys 1089314125 2610
@@ -7438,7 +7438,7 @@ sys/man/2/arith3 - 664 sys sys 1162102967 4393
 sys/man/2/assert - 664 sys sys 1102868467 377
 sys/man/2/atof - 664 sys sys 1171668702 2778
 sys/man/2/auth - 664 sys sys 1171094909 7540
-sys/man/2/authsrv - 664 sys sys 1055734550 4145
+sys/man/2/authsrv - 664 sys sys 1171690308 4505
 sys/man/2/bin - 664 sys sys 985023077 1880
 sys/man/2/bind - 664 sys sys 1015091518 4685
 sys/man/2/bio - 664 sys sys 1151854125 6546
@@ -7539,7 +7539,7 @@ sys/man/2/readcolmap - 664 sys sys 950892803 1529
 sys/man/2/readv - 664 sys sys 1017423721 1454
 sys/man/2/regexp - 664 sys sys 988225293 3548
 sys/man/2/remove - 664 sys sys 958249504 518
-sys/man/2/rendezvous - 664 sys sys 1135487949 1322
+sys/man/2/rendezvous - 664 sys sys 1171690316 1336
 sys/man/2/rsa - 664 sys sys 1165622556 4260
 sys/man/2/rune - 664 sys sys 1143079849 3086
 sys/man/2/runestrcat - 664 sys sys 969499889 1086
@@ -7836,7 +7836,7 @@ sys/src/9/bitsy/devuda1341.c - 664 sys sys 1071245420 30346
 sys/src/9/bitsy/devµc.c - 664 sys sys 1068393562 8125
 sys/src/9/bitsy/etherif.h - 664 sys sys 1045501788 913
 sys/src/9/bitsy/etherwavelan.c - 664 sys sys 1071245513 870
-sys/src/9/bitsy/fns.h - 664 sys sys 1143129861 3063
+sys/src/9/bitsy/fns.h - 664 sys sys 1171761416 3086
 sys/src/9/bitsy/fpi.c - 664 sys sys 1017695513 5248
 sys/src/9/bitsy/fpi.h - 664 sys sys 1017695513 1679
 sys/src/9/bitsy/fpiarm.c - 664 sys sys 1017695513 9328
@@ -7850,7 +7850,7 @@ sys/src/9/bitsy/main.c - 664 sys sys 1143129874 8951
 sys/src/9/bitsy/map - 664 sys sys 1017695515 236
 sys/src/9/bitsy/mem.h - 664 sys sys 1055700932 8049
 sys/src/9/bitsy/mkfile - 664 sys sys 1131289775 2459
-sys/src/9/bitsy/mmu.c - 664 sys sys 1131538486 11298
+sys/src/9/bitsy/mmu.c - 664 sys sys 1171761416 11656
 sys/src/9/bitsy/mouse.c - 664 sys sys 1017695516 962
 sys/src/9/bitsy/paqfiles - 20000000775 sys sys 1039727524 0
 sys/src/9/bitsy/paqfiles/cpurc - 664 sys sys 1020011249 3524
@@ -7859,18 +7859,18 @@ sys/src/9/bitsy/paqfiles/mfs - 664 sys sys 1032053161 1009
 sys/src/9/bitsy/paqfiles/namespace - 664 sys sys 1020011250 1061
 sys/src/9/bitsy/paqfiles/startip - 664 sys sys 1020011250 212
 sys/src/9/bitsy/paqfiles/unicode.6.font - 664 sys sys 1020011250 138
-sys/src/9/bitsy/power.c - 664 sys sys 1037812174 7375
+sys/src/9/bitsy/power.c - 664 sys sys 1171761416 7376
 sys/src/9/bitsy/random.c - 664 sys sys 1036813517 1982
 sys/src/9/bitsy/sa1110dma.c - 664 sys sys 1017695520 4666
 sys/src/9/bitsy/sa1110dma.h - 664 sys sys 1017695520 381
 sys/src/9/bitsy/screen.c - 664 sys sys 1053340962 10145
 sys/src/9/bitsy/screen.h - 664 sys sys 1147023548 284
 sys/src/9/bitsy/sd.h - 664 sys sys 1037029038 0
-sys/src/9/bitsy/sdata.c - 664 sys sys 1131289776 44404
+sys/src/9/bitsy/sdata.c - 664 sys sys 1171761416 44377
 sys/src/9/bitsy/tar.c - 664 sys sys 1017695521 1375
 sys/src/9/bitsy/trap.c - 664 sys sys 1105030166 19484
 sys/src/9/bitsy/uartsa1110.c - 664 sys sys 1142741102 8537
-sys/src/9/bitsy/wavelan.c - 664 sys sys 1116097770 27267
+sys/src/9/bitsy/wavelan.c - 664 sys sys 1171761416 27148
 sys/src/9/bitsy/wavelan.h - 664 sys sys 1037029076 27
 sys/src/9/boot - 20000000775 sys sys 1161222920 0
 sys/src/9/boot/aux.c - 664 sys sys 1168305725 2586
@@ -8016,7 +8016,7 @@ sys/src/9/pc/main.c - 664 sys sys 1168306227 15337
 sys/src/9/pc/mem.h - 664 sys sys 1137622431 5203
 sys/src/9/pc/memory.c - 664 sys sys 1153172671 18773
 sys/src/9/pc/mkfile - 664 sys sys 1158794206 4004
-sys/src/9/pc/mmu.c - 664 sys sys 1168306246 24320
+sys/src/9/pc/mmu.c - 664 sys sys 1171688128 24591
 sys/src/9/pc/mouse.c - 664 sys sys 1098479254 7057
 sys/src/9/pc/mp.c - 664 sys sys 1162388126 17349
 sys/src/9/pc/mp.h - 664 sys sys 1153193597 6795
@@ -9482,18 +9482,18 @@ sys/src/cmd/auth/debug.c - 664 sys sys 1143694911 7325
 sys/src/cmd/auth/disable - 775 sys sys 1015008431 146
 sys/src/cmd/auth/enable - 775 sys sys 1015008430 134
 sys/src/cmd/auth/factotum - 20000000775 sys sys 1140694896 0
-sys/src/cmd/auth/factotum/apop.c - 664 sys sys 1107706102 6099
-sys/src/cmd/auth/factotum/chap.c - 664 sys sys 1107706103 8967
+sys/src/cmd/auth/factotum/apop.c - 664 sys sys 1171690118 6151
+sys/src/cmd/auth/factotum/chap.c - 664 sys sys 1171690112 9019
 sys/src/cmd/auth/factotum/confirm.c - 664 sys sys 1044829586 3103
-sys/src/cmd/auth/factotum/dat.h - 664 sys sys 1140694893 4991
+sys/src/cmd/auth/factotum/dat.h - 664 sys sys 1171690086 5009
 sys/src/cmd/auth/factotum/fgui.c - 664 sys sys 1130425760 15984
-sys/src/cmd/auth/factotum/fs.c - 664 sys sys 1143694892 10527
+sys/src/cmd/auth/factotum/fs.c - 664 sys sys 1171690122 10551
 sys/src/cmd/auth/factotum/httpdigest.c - 664 sys sys 1140694896 3481
 sys/src/cmd/auth/factotum/log.c - 664 sys sys 1046655068 1781
 sys/src/cmd/auth/factotum/mkfile - 664 sys sys 1140694893 497
 sys/src/cmd/auth/factotum/p9any.c - 664 sys sys 1107706103 8484
-sys/src/cmd/auth/factotum/p9cr.c - 664 sys sys 1107706103 6666
-sys/src/cmd/auth/factotum/p9sk1.c - 664 sys sys 1115143213 9743
+sys/src/cmd/auth/factotum/p9cr.c - 664 sys sys 1171690104 6721
+sys/src/cmd/auth/factotum/p9sk1.c - 664 sys sys 1171690098 9802
 sys/src/cmd/auth/factotum/pass.c - 664 sys sys 1107706104 1514
 sys/src/cmd/auth/factotum/rpc.c - 664 sys sys 1107633794 11167
 sys/src/cmd/auth/factotum/rsa.c - 664 sys sys 1107706104 3416
@@ -14642,7 +14642,7 @@ sys/src/libauthsrv/mkfile - 664 sys sys 1035389776 409
 sys/src/libauthsrv/nvcsum.c - 664 sys sys 1015091654 192
 sys/src/libauthsrv/opasstokey.c - 664 sys sys 1015091654 448
 sys/src/libauthsrv/passtokey.c - 664 sys sys 1143695654 488
-sys/src/libauthsrv/readnvram.c - 664 sys sys 1168307443 9048
+sys/src/libauthsrv/readnvram.c - 664 sys sys 1171690274 10057
 sys/src/libbin - 20000000775 sys sys 1045502972 0
 sys/src/libbin/bin.c - 664 sys sys 1135487932 1829
 sys/src/libbin/mkfile - 664 sys sys 1035389776 197

+ 26 - 26
dist/replica/plan9.db

@@ -43,21 +43,21 @@
 386/bin/ascii - 775 sys sys 1168402265 64884
 386/bin/astro - 775 sys sys 1148500574 138871
 386/bin/auth - 20000000775 sys sys 1016920815 0
-386/bin/auth/aescbc - 775 sys sys 1168402266 140919
+386/bin/auth/aescbc - 775 sys sys 1171743872 141338
 386/bin/auth/asn12rsa - 775 sys sys 1168402266 120828
 386/bin/auth/authsrv - 775 sys sys 1169612018 166651
 386/bin/auth/changeuser - 775 sys sys 1168402267 97488
-386/bin/auth/convkeys - 775 sys sys 1168402267 88057
-386/bin/auth/convkeys2 - 775 sys sys 1168402267 88116
+386/bin/auth/convkeys - 775 sys sys 1171743872 88681
+386/bin/auth/convkeys2 - 775 sys sys 1171743873 88740
 386/bin/auth/cron - 775 sys sys 1168402268 144754
 386/bin/auth/debug - 775 sys sys 1168402268 101566
 386/bin/auth/disable - 775 sys sys 1020319057 146
 386/bin/auth/enable - 775 sys sys 1020319057 134
-386/bin/auth/factotum - 775 sys sys 1168402269 322131
+386/bin/auth/factotum - 775 sys sys 1171743873 322645
 386/bin/auth/fgui - 775 sys sys 1168402269 218990
 386/bin/auth/guard.srv - 775 sys sys 1169612018 143828
 386/bin/auth/iam - 775 sys sys 1085076981 50791
-386/bin/auth/keyfs - 775 sys sys 1168402270 116158
+386/bin/auth/keyfs - 775 sys sys 1171743874 116577
 386/bin/auth/login - 775 sys sys 1168402270 104747
 386/bin/auth/newns - 775 sys sys 1168402270 89966
 386/bin/auth/none - 775 sys sys 1168402270 89249
@@ -71,13 +71,13 @@
 386/bin/auth/rsafill - 775 sys sys 1168402273 143968
 386/bin/auth/rsagen - 775 sys sys 1168402273 153528
 386/bin/auth/secretpem - 775 sys sys 1045537944 118526
-386/bin/auth/secstore - 775 sys sys 1168402274 196045
+386/bin/auth/secstore - 775 sys sys 1171743874 196464
 386/bin/auth/secstored - 775 sys sys 1169612019 198002
 386/bin/auth/secuser - 775 sys sys 1168402275 153231
 386/bin/auth/status - 775 sys sys 1020319060 738
 386/bin/auth/uniq - 775 sys sys 1168402275 63314
 386/bin/auth/warning - 775 sys sys 1168402275 101295
-386/bin/auth/wrkey - 775 sys sys 1168402275 75651
+386/bin/auth/wrkey - 775 sys sys 1171743875 76275
 386/bin/aux - 20000000775 sys sys 1016920817 0
 386/bin/aux/8prefix - 775 sys sys 1168402276 67103
 386/bin/aux/9pcon - 775 sys sys 1168402276 95153
@@ -208,7 +208,7 @@
 386/bin/disk/exsort - 775 sys sys 1168402301 60455
 386/bin/disk/fdisk - 775 sys sys 1168402301 104096
 386/bin/disk/format - 775 sys sys 1168402302 89778
-386/bin/disk/kfs - 775 sys sys 1168402302 249457
+386/bin/disk/kfs - 775 sys sys 1171743875 250081
 386/bin/disk/kfscmd - 775 sys sys 1148500626 38257
 386/bin/disk/ksync - 775 sys sys 1020319074 302
 386/bin/disk/mbr - 775 sys sys 1168402302 73918
@@ -544,8 +544,8 @@
 386/lib/ape/libv.a - 664 sys sys 1143777858 19668
 386/lib/lib9p.a - 664 sys sys 1168402362 90956
 386/lib/libString.a - 664 sys sys 1168402362 22126
-386/lib/libauth.a - 664 sys sys 1168402363 58570
-386/lib/libauthsrv.a - 664 sys sys 1168402363 34858
+386/lib/libauth.a - 664 sys sys 1171743876 58570
+386/lib/libauthsrv.a - 664 sys sys 1171743876 35834
 386/lib/libbin.a - 664 sys sys 1168402363 2534
 386/lib/libbio.a - 664 sys sys 1168402363 25980
 386/lib/libc.a - 664 sys sys 1168402364 503128
@@ -6005,7 +6005,7 @@ sys/include/ape/utf.h - 664 sys sys 1070327359 1595
 sys/include/ape/utime.h - 664 sys sys 944948760 259
 sys/include/ar.h - 664 sys sys 1014929061 244
 sys/include/auth.h - 664 sys sys 1091904428 3439
-sys/include/authsrv.h - 664 sys sys 1014929062 4542
+sys/include/authsrv.h - 664 sys sys 1171690216 4853
 sys/include/bin.h - 664 sys sys 1091904425 239
 sys/include/bio.h - 664 sys sys 1014929062 1854
 sys/include/bootexec.h - 664 sys sys 1089314125 2610
@@ -7438,7 +7438,7 @@ sys/man/2/arith3 - 664 sys sys 1162102967 4393
 sys/man/2/assert - 664 sys sys 1102868467 377
 sys/man/2/atof - 664 sys sys 1171668702 2778
 sys/man/2/auth - 664 sys sys 1171094909 7540
-sys/man/2/authsrv - 664 sys sys 1055734550 4145
+sys/man/2/authsrv - 664 sys sys 1171690308 4505
 sys/man/2/bin - 664 sys sys 985023077 1880
 sys/man/2/bind - 664 sys sys 1015091518 4685
 sys/man/2/bio - 664 sys sys 1151854125 6546
@@ -7539,7 +7539,7 @@ sys/man/2/readcolmap - 664 sys sys 950892803 1529
 sys/man/2/readv - 664 sys sys 1017423721 1454
 sys/man/2/regexp - 664 sys sys 988225293 3548
 sys/man/2/remove - 664 sys sys 958249504 518
-sys/man/2/rendezvous - 664 sys sys 1135487949 1322
+sys/man/2/rendezvous - 664 sys sys 1171690316 1336
 sys/man/2/rsa - 664 sys sys 1165622556 4260
 sys/man/2/rune - 664 sys sys 1143079849 3086
 sys/man/2/runestrcat - 664 sys sys 969499889 1086
@@ -7836,7 +7836,7 @@ sys/src/9/bitsy/devuda1341.c - 664 sys sys 1071245420 30346
 sys/src/9/bitsy/devµc.c - 664 sys sys 1068393562 8125
 sys/src/9/bitsy/etherif.h - 664 sys sys 1045501788 913
 sys/src/9/bitsy/etherwavelan.c - 664 sys sys 1071245513 870
-sys/src/9/bitsy/fns.h - 664 sys sys 1143129861 3063
+sys/src/9/bitsy/fns.h - 664 sys sys 1171761416 3086
 sys/src/9/bitsy/fpi.c - 664 sys sys 1017695513 5248
 sys/src/9/bitsy/fpi.h - 664 sys sys 1017695513 1679
 sys/src/9/bitsy/fpiarm.c - 664 sys sys 1017695513 9328
@@ -7850,7 +7850,7 @@ sys/src/9/bitsy/main.c - 664 sys sys 1143129874 8951
 sys/src/9/bitsy/map - 664 sys sys 1017695515 236
 sys/src/9/bitsy/mem.h - 664 sys sys 1055700932 8049
 sys/src/9/bitsy/mkfile - 664 sys sys 1131289775 2459
-sys/src/9/bitsy/mmu.c - 664 sys sys 1131538486 11298
+sys/src/9/bitsy/mmu.c - 664 sys sys 1171761416 11656
 sys/src/9/bitsy/mouse.c - 664 sys sys 1017695516 962
 sys/src/9/bitsy/paqfiles - 20000000775 sys sys 1039727524 0
 sys/src/9/bitsy/paqfiles/cpurc - 664 sys sys 1020011249 3524
@@ -7859,18 +7859,18 @@ sys/src/9/bitsy/paqfiles/mfs - 664 sys sys 1032053161 1009
 sys/src/9/bitsy/paqfiles/namespace - 664 sys sys 1020011250 1061
 sys/src/9/bitsy/paqfiles/startip - 664 sys sys 1020011250 212
 sys/src/9/bitsy/paqfiles/unicode.6.font - 664 sys sys 1020011250 138
-sys/src/9/bitsy/power.c - 664 sys sys 1037812174 7375
+sys/src/9/bitsy/power.c - 664 sys sys 1171761416 7376
 sys/src/9/bitsy/random.c - 664 sys sys 1036813517 1982
 sys/src/9/bitsy/sa1110dma.c - 664 sys sys 1017695520 4666
 sys/src/9/bitsy/sa1110dma.h - 664 sys sys 1017695520 381
 sys/src/9/bitsy/screen.c - 664 sys sys 1053340962 10145
 sys/src/9/bitsy/screen.h - 664 sys sys 1147023548 284
 sys/src/9/bitsy/sd.h - 664 sys sys 1037029038 0
-sys/src/9/bitsy/sdata.c - 664 sys sys 1131289776 44404
+sys/src/9/bitsy/sdata.c - 664 sys sys 1171761416 44377
 sys/src/9/bitsy/tar.c - 664 sys sys 1017695521 1375
 sys/src/9/bitsy/trap.c - 664 sys sys 1105030166 19484
 sys/src/9/bitsy/uartsa1110.c - 664 sys sys 1142741102 8537
-sys/src/9/bitsy/wavelan.c - 664 sys sys 1116097770 27267
+sys/src/9/bitsy/wavelan.c - 664 sys sys 1171761416 27148
 sys/src/9/bitsy/wavelan.h - 664 sys sys 1037029076 27
 sys/src/9/boot - 20000000775 sys sys 1161222920 0
 sys/src/9/boot/aux.c - 664 sys sys 1168305725 2586
@@ -8016,7 +8016,7 @@ sys/src/9/pc/main.c - 664 sys sys 1168306227 15337
 sys/src/9/pc/mem.h - 664 sys sys 1137622431 5203
 sys/src/9/pc/memory.c - 664 sys sys 1153172671 18773
 sys/src/9/pc/mkfile - 664 sys sys 1158794206 4004
-sys/src/9/pc/mmu.c - 664 sys sys 1168306246 24320
+sys/src/9/pc/mmu.c - 664 sys sys 1171688128 24591
 sys/src/9/pc/mouse.c - 664 sys sys 1098479254 7057
 sys/src/9/pc/mp.c - 664 sys sys 1162388126 17349
 sys/src/9/pc/mp.h - 664 sys sys 1153193597 6795
@@ -9482,18 +9482,18 @@ sys/src/cmd/auth/debug.c - 664 sys sys 1143694911 7325
 sys/src/cmd/auth/disable - 775 sys sys 1015008431 146
 sys/src/cmd/auth/enable - 775 sys sys 1015008430 134
 sys/src/cmd/auth/factotum - 20000000775 sys sys 1140694896 0
-sys/src/cmd/auth/factotum/apop.c - 664 sys sys 1107706102 6099
-sys/src/cmd/auth/factotum/chap.c - 664 sys sys 1107706103 8967
+sys/src/cmd/auth/factotum/apop.c - 664 sys sys 1171690118 6151
+sys/src/cmd/auth/factotum/chap.c - 664 sys sys 1171690112 9019
 sys/src/cmd/auth/factotum/confirm.c - 664 sys sys 1044829586 3103
-sys/src/cmd/auth/factotum/dat.h - 664 sys sys 1140694893 4991
+sys/src/cmd/auth/factotum/dat.h - 664 sys sys 1171690086 5009
 sys/src/cmd/auth/factotum/fgui.c - 664 sys sys 1130425760 15984
-sys/src/cmd/auth/factotum/fs.c - 664 sys sys 1143694892 10527
+sys/src/cmd/auth/factotum/fs.c - 664 sys sys 1171690122 10551
 sys/src/cmd/auth/factotum/httpdigest.c - 664 sys sys 1140694896 3481
 sys/src/cmd/auth/factotum/log.c - 664 sys sys 1046655068 1781
 sys/src/cmd/auth/factotum/mkfile - 664 sys sys 1140694893 497
 sys/src/cmd/auth/factotum/p9any.c - 664 sys sys 1107706103 8484
-sys/src/cmd/auth/factotum/p9cr.c - 664 sys sys 1107706103 6666
-sys/src/cmd/auth/factotum/p9sk1.c - 664 sys sys 1115143213 9743
+sys/src/cmd/auth/factotum/p9cr.c - 664 sys sys 1171690104 6721
+sys/src/cmd/auth/factotum/p9sk1.c - 664 sys sys 1171690098 9802
 sys/src/cmd/auth/factotum/pass.c - 664 sys sys 1107706104 1514
 sys/src/cmd/auth/factotum/rpc.c - 664 sys sys 1107633794 11167
 sys/src/cmd/auth/factotum/rsa.c - 664 sys sys 1107706104 3416
@@ -14642,7 +14642,7 @@ sys/src/libauthsrv/mkfile - 664 sys sys 1035389776 409
 sys/src/libauthsrv/nvcsum.c - 664 sys sys 1015091654 192
 sys/src/libauthsrv/opasstokey.c - 664 sys sys 1015091654 448
 sys/src/libauthsrv/passtokey.c - 664 sys sys 1143695654 488
-sys/src/libauthsrv/readnvram.c - 664 sys sys 1168307443 9048
+sys/src/libauthsrv/readnvram.c - 664 sys sys 1171690274 10057
 sys/src/libbin - 20000000775 sys sys 1045502972 0
 sys/src/libbin/bin.c - 664 sys sys 1135487932 1829
 sys/src/libbin/mkfile - 664 sys sys 1035389776 197

+ 26 - 0
dist/replica/plan9.log

@@ -47474,3 +47474,29 @@
 1171567806 0 c sys/man/8/scuzz - 664 sys sys 1171566796 8701
 1171609206 0 c sys/src/9/boot/mkboot - 775 sys sys 1171608307 1935
 1171670407 0 c sys/man/2/atof - 664 sys sys 1171668702 2778
+1171688407 0 c sys/src/9/pc/mmu.c - 664 sys sys 1171688128 24591
+1171690206 0 c sys/include/authsrv.h - 664 sys sys 1171690216 4853
+1171690206 1 c sys/src/cmd/auth/factotum/apop.c - 664 sys sys 1171690118 6151
+1171690206 2 c sys/src/cmd/auth/factotum/chap.c - 664 sys sys 1171690112 9019
+1171690206 3 c sys/src/cmd/auth/factotum/dat.h - 664 sys sys 1171690086 5009
+1171690206 4 c sys/src/cmd/auth/factotum/fs.c - 664 sys sys 1171690122 10551
+1171690206 5 c sys/src/cmd/auth/factotum/p9cr.c - 664 sys sys 1171690104 6721
+1171690206 6 c sys/src/cmd/auth/factotum/p9sk1.c - 664 sys sys 1171690098 9802
+1171690206 7 c sys/src/libauthsrv/readnvram.c - 664 sys sys 1171690274 10057
+1171692006 0 c sys/man/2/rendezvous - 664 sys sys 1171690316 1336
+1171692006 1 c sys/man/2/authsrv - 664 sys sys 1171690308 4505
+1171744206 0 c 386/bin/auth/aescbc - 775 sys sys 1171743872 141338
+1171744206 1 c 386/bin/auth/convkeys - 775 sys sys 1171743872 88681
+1171744206 2 c 386/bin/auth/convkeys2 - 775 sys sys 1171743873 88740
+1171744206 3 c 386/bin/auth/factotum - 775 sys sys 1171743873 322645
+1171744206 4 c 386/bin/auth/keyfs - 775 sys sys 1171743874 116577
+1171744206 5 c 386/bin/auth/secstore - 775 sys sys 1171743874 196464
+1171744206 6 c 386/bin/auth/wrkey - 775 sys sys 1171743875 76275
+1171744206 7 c 386/bin/disk/kfs - 775 sys sys 1171743875 250081
+1171744206 8 c 386/lib/libauth.a - 664 sys sys 1171743876 58570
+1171744206 9 c 386/lib/libauthsrv.a - 664 sys sys 1171743876 35834
+1171762206 0 c sys/src/9/bitsy/fns.h - 664 sys sys 1171761416 3086
+1171762206 1 c sys/src/9/bitsy/mmu.c - 664 sys sys 1171761416 11656
+1171762206 2 c sys/src/9/bitsy/power.c - 664 sys sys 1171761416 7376
+1171762206 3 c sys/src/9/bitsy/sdata.c - 664 sys sys 1171761416 44377
+1171762206 4 c sys/src/9/bitsy/wavelan.c - 664 sys sys 1171761416 27148

+ 23 - 16
sys/include/authsrv.h

@@ -14,18 +14,18 @@ typedef struct	OMSchapreply	OMSchapreply;
 
 enum
 {
-	ANAMELEN=	28,		/* maximum size of name in previous proto */
-	AERRLEN=	64,		/* maximum size of errstr in previous proto */
-	DOMLEN=		48,		/* length of an authentication domain name */
-	DESKEYLEN=	7,		/* length of a des key for encrypt/decrypt */
-	CHALLEN=	8,		/* length of a plan9 sk1 challenge */
-	NETCHLEN=	16,		/* max network challenge length (used in AS protocol) */
+	ANAMELEN=	28,	/* name max size in previous proto */
+	AERRLEN=	64,	/* errstr max size in previous proto */
+	DOMLEN=		48,	/* authentication domain name length */
+	DESKEYLEN=	7,	/* encrypt/decrypt des key length */
+	CHALLEN=	8,	/* plan9 sk1 challenge length */
+	NETCHLEN=	16,	/* max network challenge length (used in AS protocol) */
 	CONFIGLEN=	14,
-	SECRETLEN=	32,		/* max length of a secret */
+	SECRETLEN=	32,	/* secret max size */
 
-	KEYDBOFF=	8,		/* length of random data at the start of key file */
-	OKEYDBLEN=	ANAMELEN+DESKEYLEN+4+2,	/* length of an entry in old key file */
-	KEYDBLEN=	OKEYDBLEN+SECRETLEN,	/* length of an entry in key file */
+	KEYDBOFF=	8,	/* bytes of random data at key file's start */
+	OKEYDBLEN=	ANAMELEN+DESKEYLEN+4+2,	/* old key file entry length */
+	KEYDBLEN=	OKEYDBLEN+SECRETLEN,	/* key file entry length */
 	OMD5LEN=	16,
 };
 
@@ -131,21 +131,28 @@ extern	int	passtokey(char*, char*);
  *  Nvram interface
  */
 enum {
-	NVwrite = 1<<0,		/* always prompt and rewrite nvram */
-	NVwriteonerr = 1<<1,	/* prompt and rewrite nvram when corrupt */
+	NVread		= 0,	/* just read */
+	NVwrite		= 1<<0,	/* always prompt and rewrite nvram */
+	NVwriteonerr	= 1<<1,	/* prompt and rewrite nvram when corrupt */
+	NVwritemem	= 1<<2,	/* don't prompt, write nvram from argument */
 };
 
+/* storage layout */
 struct Nvrsafe
 {
-	char	machkey[DESKEYLEN];
+	char	machkey[DESKEYLEN];	/* was file server's authid's des key */
 	uchar	machsum;
-	char	authkey[DESKEYLEN];
+	char	authkey[DESKEYLEN];	/* authid's des key from password */
 	uchar	authsum;
+	/*
+	 * file server config string of device holding full configuration;
+	 * secstore key on non-file-servers.
+	 */
 	char	config[CONFIGLEN];
 	uchar	configsum;
-	char	authid[ANAMELEN];
+	char	authid[ANAMELEN];	/* auth userid, e.g., bootes */
 	uchar	authidsum;
-	char	authdom[DOMLEN];
+	char	authdom[DOMLEN]; /* auth domain, e.g., cs.bell-labs.com */
 	uchar	authdomsum;
 };
 

+ 26 - 13
sys/man/2/authsrv

@@ -106,21 +106,26 @@ and 1 otherwise.
 .PP
 .I Readnvram
 reads authentication information into the structure:
+.PP
 .EX
 .ta 4n +4n +8n +4n +4n +4n +4n
-	struct Nvrsafe
-	{
-		char	machkey[DESKEYLEN];
-		uchar	machsum;
-		char	authkey[DESKEYLEN];
-		uchar	authsum;
-		char	config[CONFIGLEN];
-		uchar	configsum;
-		char	authid[ANAMELEN];
-		uchar	authidsum;
-		char	authdom[DOMLEN];
-		uchar	authdomsum;
-	};
+struct Nvrsafe
+{
+	char	machkey[DESKEYLEN];	/* was file server's authid's des key */
+	uchar	machsum;
+	char	authkey[DESKEYLEN];	/* authid's des key from password */
+	uchar	authsum;
+	/*
+	 * file server config string of device holding full configuration;
+	 * secstore key on non-file-servers.
+	 */
+	char	config[CONFIGLEN];
+	uchar	configsum;
+	char	authid[ANAMELEN];	/* auth userid, e.g., bootes */
+	uchar	authidsum;
+	char	authdom[DOMLEN]; /* auth domain, e.g., cs.bell-labs.com */
+	uchar	authdomsum;
+};
 .EE
 .PP
 On Sparc, MIPS, and SGI machines this information is
@@ -181,6 +186,14 @@ is
 will prompt for new values on
 .B #c/cons
 and then write them back to the storage area.
+If
+.I flag
+is
+.BR NVwritemem ,
+.I readnvram
+will write the values in
+.I *nv
+back to the storage area.
 .PP
 .IR ConvT2M ,
 .IR convA2M ,

+ 3 - 2
sys/man/2/rendezvous

@@ -50,8 +50,9 @@ so that value should not be used in normal communication.
 .SH SOURCE
 .B /sys/src/libc/9syscall
 .SH SEE ALSO
-.IR segattach (2),
-.IR fork (2)
+.IR fork (2),
+.IR lock (2),
+.IR segattach (2)
 .SH DIAGNOSTICS
 Sets
 .IR errstr .

+ 1 - 0
sys/src/9/bitsy/fns.h

@@ -7,6 +7,7 @@ void	cacheflush(void);
 void	cachewb(void);
 void	cachewbaddr(void*);
 void	cachewbregion(ulong, int);
+ulong	cankaddr(ulong);
 void	dcacheinvalidate(void);
 int	cistrcmp(char*, char*);
 int	cistrncmp(char*, char*, int);

+ 17 - 0
sys/src/9/bitsy/mmu.c

@@ -325,6 +325,23 @@ mmu_kaddr(ulong pa)
 	return findva(pa, REGZERO, REGTOP);
 }
 
+/*
+ * Return the number of bytes that can be accessed via KADDR(pa).
+ * If pa is not a valid argument to KADDR, return 0.
+ */
+ulong
+cankaddr(ulong pa)
+{
+	/*
+	 * Is this enough?
+	 * We'll find out if anyone still has one
+	 * of these...
+	 */
+	if(pa >= PHYSDRAM0 && pa <= PHYSDRAM0+(DRAMTOP-DRAMZERO))
+		return PHYSDRAM0+(DRAMTOP-DRAMZERO) - pa;
+	return 0;
+}
+
 /*
  *  table to map fault.c bits to physical bits
  */

+ 2 - 2
sys/src/9/bitsy/power.c

@@ -293,10 +293,9 @@ resetsuspendtimer(void)
 static void
 suspendtimer(void)
 {
+#ifdef notdef
 	uvlong	now;
 
-	return;	// does not work well.
-
 	if (suspendtime > 0)
 		suspendtime--;
 	if (suspendtime == 0){
@@ -310,6 +309,7 @@ suspendtimer(void)
 		lastsuspend = seconds();
 		return;
 	}
+#endif /* notdef */
 }
 
 void

+ 7 - 7
sys/src/9/bitsy/sdata.c

@@ -1725,10 +1725,10 @@ scsirio(SDreq* r)
 	r->status = ~0;
 	switch(r->unit->dev->ifc->rio(r)){
 	default:
-		return -1;
+		break;
 	case SDcheck:
 		if(!(r->flags & SDvalidsense))
-			return -1;
+			break;
 		switch(r->sense[2] & 0x0F){
 		case 0x00:		/* no sense */
 		case 0x01:		/* recovered error */
@@ -1743,16 +1743,16 @@ scsirio(SDreq* r)
 				return 2;
 			if(r->sense[12] == 0x29)
 				return 2;
-			return -1;
+			break;
 		case 0x02:		/* not ready */
 			/*
 			 * If no medium present, bail out.
 			 * If unit is becoming ready, rather than not
 			 * not ready, wait a little then poke it again. 				 */
 			if(r->sense[12] == 0x3A)
-				return 1;
+				break;
 			if(r->sense[12] != 0x04 || r->sense[13] != 0x01)
-				return -1;
+				break;
 
 			while(waserror())
 				;
@@ -1761,9 +1761,9 @@ scsirio(SDreq* r)
 			scsitest(r);
 			return 2;
 		default:
-			return -1;
+			break;
 		}
-		return -1;
+		break;
 	case SDok:
 		return 0;
 	}

+ 13 - 20
sys/src/9/bitsy/wavelan.c

@@ -300,29 +300,22 @@ w_read(Ctlr* ctlr, int type, int off, void* buf, ulong len)
 static int
 w_write(Ctlr* ctlr, int type, int off, void* buf, ulong len)
 {
-	int tries;
-
-	for (tries=0; tries < WTmOut; tries++){
-		if(w_seek(ctlr, type, off, 0)){
-			DEBUG("wavelan: w_write: seek failed\n");
-			return 0;
-		}
-
-		csr_outss(ctlr, WR_Data0, buf, len/2);
+	if(w_seek(ctlr, type, off, 0)){
+		DEBUG("wavelan: w_write: seek failed\n");
+		return 0;
+	}
 
-		csr_outs(ctlr, WR_Data0, 0xdead);
-		csr_outs(ctlr, WR_Data0, 0xbeef);
-		if(w_seek(ctlr, type, off + len, 0)){
-			DEBUG("wavelan: write seek failed\n");
-			return 0;
-		}
-		if(csr_ins(ctlr, WR_Data0) == 0xdead)
-		if(csr_ins(ctlr, WR_Data0) == 0xbeef)
-			return len;
-		DEBUG("wavelan: Hermes bug byte.\n");
+	csr_outss(ctlr, WR_Data0, buf, len/2);
+	csr_outs(ctlr, WR_Data0, 0xdead);
+	csr_outs(ctlr, WR_Data0, 0xbeef);
+	if(w_seek(ctlr, type, off + len, 0)){
+		DEBUG("wavelan: write seek failed\n");
 		return 0;
 	}
-	DEBUG("wavelan: tx timeout\n");
+	if(csr_ins(ctlr, WR_Data0) == 0xdead && csr_ins(ctlr, WR_Data0) == 0xbeef)
+		return len;
+
+	DEBUG("wavelan: Hermes bug byte.\n");
 	return 0;
 }
 

+ 3 - 1
sys/src/cmd/auth/factotum/apop.c

@@ -281,10 +281,12 @@ doreply(State *s, char *user, char *response)
 	convM2T(ticket, &s->t, (char*)s->key->priv);
 	if(s->t.num != AuthTs
 	|| memcmp(s->t.chal, s->tr.chal, sizeof(s->t.chal)) != 0){
-		disablekey(s->key);
+		if(s->key->successes == 0)
+			disablekey(s->key);
 		werrstr(Easproto);
 		goto err;
 	}
+	s->key->successes++;
 	convM2A(ticket+TICKETLEN, &a, s->t.key);
 	if(a.num != AuthAc
 	|| memcmp(a.chal, s->tr.chal, sizeof(a.chal)) != 0

+ 3 - 1
sys/src/cmd/auth/factotum/chap.c

@@ -318,10 +318,12 @@ doreply(State *s, void *reply, int nreply)
 	convM2T(ticket, &s->t, s->key->priv);
 	if(s->t.num != AuthTs
 	|| memcmp(s->t.chal, s->tr.chal, sizeof(s->t.chal)) != 0){
-		disablekey(s->key);
+		if(s->key->successes == 0)
+			disablekey(s->key);
 		werrstr(Easproto);
 		return -1;
 	}
+	s->key->successes++;
 	convM2A(ticket+TICKETLEN, &a, s->t.key);
 	if(a.num != AuthAc
 	|| memcmp(a.chal, s->tr.chal, sizeof(a.chal)) != 0

+ 1 - 0
sys/src/cmd/auth/factotum/dat.h

@@ -82,6 +82,7 @@ struct Key
 	Proto *proto;
 
 	void *priv;	/* protocol-specific; a parsed key, perhaps */
+	ulong successes;
 };
 
 struct Keyinfo	/* for findkey */

+ 4 - 2
sys/src/cmd/auth/factotum/fs.c

@@ -150,8 +150,10 @@ main(int argc, char **argv)
 			fprint(2, "factotum warning: cannot add nvram key: %r\n");
 		if(secstorepw != nil)
 			trysecstore = 1;
-		memset(s, 0, strlen(s));
-		free(s);
+		if (s != nil) {
+			memset(s, 0, strlen(s));
+			free(s);
+		}
 	} else if(uflag)
 		promptforhostowner();
 	owner = getuser();

+ 3 - 1
sys/src/cmd/auth/factotum/p9cr.c

@@ -292,9 +292,11 @@ p9crwrite(Fsstate *fss, void *va, uint n)
 		convM2T(tbuf, &s->t, s->key->priv);
 		if(s->t.num != AuthTs
 		|| memcmp(s->t.chal, s->tr.chal, sizeof(s->t.chal)) != 0){
-			disablekey(s->key);
+			if (s->key->successes == 0)
+				disablekey(s->key);
 			return failure(fss, Easproto);
 		}
+		s->key->successes++;
 		convM2A(tbuf+TICKETLEN, &a, s->t.key);
 		if(a.num != AuthAc
 		|| memcmp(a.chal, s->tr.chal, sizeof(a.chal)) != 0

+ 5 - 2
sys/src/cmd/auth/factotum/p9sk1.c

@@ -273,9 +273,11 @@ p9skwrite(Fsstate *fss, void *a, uint n)
 
 		convM2T(tbuf, &s->t, (char*)s->key->priv);
 		if(s->t.num != AuthTc){
-			disablekey(s->key);
+			if(s->key->successes == 0)
+				disablekey(s->key);
 			if(askforkeys){
-				snprint(fss->keyinfo, sizeof fss->keyinfo, "%A %s", attr, p9sk1.keyprompt);
+				snprint(fss->keyinfo, sizeof fss->keyinfo,
+					"%A %s", attr, p9sk1.keyprompt);
 				_freeattr(attr);
 				return RpcNeedkey;
 			}else{
@@ -283,6 +285,7 @@ p9skwrite(Fsstate *fss, void *a, uint n)
 				return failure(fss, Ebadkey);
 			}
 		}
+		s->key->successes++;
 		_freeattr(attr);
 		memmove(s->tbuf, tbuf+TICKETLEN, TICKETLEN);
 

+ 106 - 64
sys/src/libauthsrv/readnvram.c

@@ -121,29 +121,25 @@ readcons(char *prompt, char *def, int raw, char *buf, int nbuf)
 	}
 }
 
+typedef struct {
+	int	fd;
+	int	safeoff;
+	int	safelen;
+} Nvrwhere;
 
-/*
- *  get key info out of nvram.  since there isn't room in the PC's nvram use
- *  a disk partition there.
- */
-int
-readnvram(Nvrsafe *safep, int flag)
+/* returns with *locp filled in and locp->fd open, if possible */
+static void
+findnvram(Nvrwhere *locp)
 {
-	char buf[1024], in[128], *cputype, *nvrfile, *nvrlen, *nvroff, *v[2];
-	int fd, err, i, safeoff, safelen;
-	Nvrsafe *safe;
-
-	err = 0;
-	memset(safep, 0, sizeof(*safep));
+	char *cputype, *nvrfile, *nvrlen, *nvroff, *v[2];
+	int fd, i, safeoff, safelen;
 
 	nvrfile = getenv("nvram");
 	cputype = getenv("cputype");
 	if(cputype == nil)
-		cputype = "mips";
+		cputype = strdup("mips");
 	if(strcmp(cputype, "386")==0 || strcmp(cputype, "alpha")==0)
-		cputype = "pc";
-
-	safe = (Nvrsafe*)buf;
+		cputype = strdup("pc");
 
 	fd = -1;
 	safeoff = -1;
@@ -159,26 +155,23 @@ readnvram(Nvrsafe *safep, int flag)
 		if(nvrlen != nil)
 			safelen = atoi(nvrlen);
 		nvroff = getenv("nvroff");
-		if(nvroff != nil){
+		if(nvroff != nil)
 			if(strcmp(nvroff, "dos") == 0)
 				safeoff = -1;
 			else
 				safeoff = atoi(nvroff);
-		}
 		if(safeoff < 0 && fd >= 0){
 			safelen = 512;
-			safeoff = finddosfile(fd, i == 2 ? v[1] : "plan9.nvr");
-			if(safeoff < 0){
+			safeoff = finddosfile(fd, i == 2? v[1]: "plan9.nvr");
+			if(safeoff < 0){	/* didn't find plan9.nvr? */
 				close(fd);
 				fd = -1;
 			}
 		}
+		free(nvroff);
+		free(nvrlen);
 		free(nvrfile);
-		if(nvrlen != nil)
-			free(nvrlen);
-		if(nvroff != nil)
-			free(nvroff);
-	}else{
+	}else
 		for(i=0; i<nelem(nvtab); i++){
 			if(strcmp(cputype, nvtab[i].cputype) != 0)
 				continue;
@@ -188,7 +181,7 @@ readnvram(Nvrsafe *safep, int flag)
 			safelen = nvtab[i].len;
 			if(safeoff == -1){
 				safeoff = finddosfile(fd, "plan9.nvr");
-				if(safeoff < 0){
+				if(safeoff < 0){  /* didn't find plan9.nvr? */
 					close(fd);
 					fd = -1;
 					continue;
@@ -196,60 +189,109 @@ readnvram(Nvrsafe *safep, int flag)
 			}
 			break;
 		}
-	}
+	free(cputype);
+	locp->fd = fd;
+	locp->safelen = safelen;
+	locp->safeoff = safeoff;
+}
 
-	if(fd < 0
-	|| seek(fd, safeoff, 0) < 0
-	|| read(fd, buf, safelen) != safelen){
-		err = 1;
-		if(flag&(NVwrite|NVwriteonerr))
-			fprint(2, "can't read nvram: %r\n");
-		memset(safep, 0, sizeof(*safep));
-		safe = safep;
-	}else{
-		*safep = *safe;
-		safe = safep;
+/*
+ *  get key info out of nvram.  since there isn't room in the PC's nvram use
+ *  a disk partition there.
+ */
+int
+readnvram(Nvrsafe *safep, int flag)
+{
+	int err;
+	char buf[512], in[128];		/* 512 for floppy i/o */
+	Nvrsafe *safe;
+	Nvrwhere loc;
 
-		err |= check(safe->machkey, DESKEYLEN, safe->machsum, "bad nvram key");
-//		err |= check(safe->config, CONFIGLEN, safe->configsum, "bad secstore key");
-		err |= check(safe->authid, ANAMELEN, safe->authidsum, "bad authentication id");
-		err |= check(safe->authdom, DOMLEN, safe->authdomsum, "bad authentication domain");
+	err = 0;
+	memset(&loc, 0, sizeof loc);
+	findnvram(&loc);
+	if (loc.safelen < 0)
+		loc.safelen = sizeof *safe;
+	else if (loc.safelen > sizeof buf)
+		loc.safelen = sizeof buf;
+	if (loc.safeoff < 0) {
+		fprint(2, "readnvram: couldn't find nvram\n");
+		if(!(flag&NVwritemem))
+			memset(safep, 0, sizeof(*safep));
+		return -1;
+	}
 
-		if(err == 0)
-		if(safe->authid[0]==0 || safe->authdom[0]==0){
-			fprint(2, "empty nvram authid or authdom\n");
+	safe = (Nvrsafe*)buf;
+	if(flag&NVwritemem)
+		safe = safep;
+	else {
+		memset(safep, 0, sizeof(*safep));
+		if(loc.fd < 0
+		|| seek(loc.fd, loc.safeoff, 0) < 0
+		|| read(loc.fd, buf, loc.safelen) != loc.safelen){
 			err = 1;
+			if(flag&(NVwrite|NVwriteonerr))
+				fprint(2, "can't read nvram: %r\n");
+			/* start from scratch */
+			memset(safep, 0, sizeof(*safep));
+			safe = safep;
+		}else{
+			*safep = *safe;	/* overwrite arg with data read */
+			safe = safep;
+
+			/* verify data read */
+			err |= check(safe->machkey, DESKEYLEN, safe->machsum,
+						"bad nvram key");
+//			err |= check(safe->config, CONFIGLEN, safe->configsum,
+//						"bad secstore key");
+			err |= check(safe->authid, ANAMELEN, safe->authidsum,
+						"bad authentication id");
+			err |= check(safe->authdom, DOMLEN, safe->authdomsum,
+						"bad authentication domain");
+			if(err == 0)
+				if(safe->authid[0]==0 || safe->authdom[0]==0){
+					fprint(2, "empty nvram authid or authdom\n");
+					err = 1;
+				}
 		}
 	}
 
-	if((flag&NVwrite) || (err && (flag&NVwriteonerr))){
-		readcons("authid", nil, 0, safe->authid, sizeof(safe->authid));
-		readcons("authdom", nil, 0, safe->authdom, sizeof(safe->authdom));
-		readcons("secstore key", nil, 1, safe->config, sizeof(safe->config));
-		for(;;){
-			if(readcons("password", nil, 1, in, sizeof in) == nil)
-				goto Out;
-			if(passtokey(safe->machkey, in))
-				break;
+	if((flag&(NVwrite|NVwritemem)) || (err && (flag&NVwriteonerr))){
+		if (!(flag&NVwritemem)) {
+			readcons("authid", nil, 0, safe->authid,
+					sizeof safe->authid);
+			readcons("authdom", nil, 0, safe->authdom,
+					sizeof safe->authdom);
+			readcons("secstore key (or fs config)", nil, 1,
+					safe->config, sizeof safe->config);
+			for(;;){
+				if(readcons("password", nil, 1, in, sizeof in)
+				    == nil)
+					goto Out;
+				if(passtokey(safe->machkey, in))
+					break;
+			}
 		}
+
+		// safe->authsum = nvcsum(safe->authkey, DESKEYLEN);
 		safe->machsum = nvcsum(safe->machkey, DESKEYLEN);
 		safe->configsum = nvcsum(safe->config, CONFIGLEN);
-		safe->authidsum = nvcsum(safe->authid, sizeof(safe->authid));
-		safe->authdomsum = nvcsum(safe->authdom, sizeof(safe->authdom));
-		*(Nvrsafe*)buf = *safe;
-		if(safelen < 0)
-			safelen = sizeof(Nvrsafe);
+		safe->authidsum = nvcsum(safe->authid, sizeof safe->authid);
+		safe->authdomsum = nvcsum(safe->authdom, sizeof safe->authdom);
 
-		if(seek(fd, safeoff, 0) < 0
-		|| write(fd, buf, safelen) != safelen){
+		*(Nvrsafe*)buf = *safe;
+		if(loc.fd < 0
+		|| seek(loc.fd, loc.safeoff, 0) < 0
+		|| write(loc.fd, buf, loc.safelen) != loc.safelen){
 			fprint(2, "can't write key to nvram: %r\n");
 			err = 1;
 		}else
 			err = 0;
 	}
 Out:
-	close(fd);
-	return err ? -1 : 0;
+	if (loc.fd >= 0)
+		close(loc.fd);
+	return err? -1: 0;
 }
 
 typedef struct Dosboot	Dosboot;
@@ -358,7 +400,7 @@ finddosfile(int fd, char *file)
 	if(rootsects <= 0 || rootsects > 64)
 		return -1;
 
-	/* 
+	/*
 	 *  read root. it is contiguous to make stuff like
 	 *  this easier
 	 */