diff options
41 files changed, 7 insertions, 4212 deletions
diff --git a/distrib/sets/lists/base/md.alpha b/distrib/sets/lists/base/md.alpha index 22a7b79d0fd..90a02ebee5a 100644 --- a/distrib/sets/lists/base/md.alpha +++ b/distrib/sets/lists/base/md.alpha @@ -1513,15 +1513,6 @@ ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/alpha-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.hp300 b/distrib/sets/lists/base/md.hp300 index 674d003d0dc..7a06f834a63 100644 --- a/distrib/sets/lists/base/md.hp300 +++ b/distrib/sets/lists/base/md.hp300 @@ -1523,15 +1523,6 @@ ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.hppa b/distrib/sets/lists/base/md.hppa index 963683bf775..008e026127d 100644 --- a/distrib/sets/lists/base/md.hppa +++ b/distrib/sets/lists/base/md.hppa @@ -1429,15 +1429,6 @@ ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/hppa-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.i386 b/distrib/sets/lists/base/md.i386 index be2543355b2..66c765f94b0 100644 --- a/distrib/sets/lists/base/md.i386 +++ b/distrib/sets/lists/base/md.i386 @@ -1512,15 +1512,6 @@ ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/i386-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.mac68k b/distrib/sets/lists/base/md.mac68k index e5d50480dce..e7a039008dd 100644 --- a/distrib/sets/lists/base/md.mac68k +++ b/distrib/sets/lists/base/md.mac68k @@ -1533,15 +1533,6 @@ ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.macppc b/distrib/sets/lists/base/md.macppc index f67e02404af..a8459ffaa4e 100644 --- a/distrib/sets/lists/base/md.macppc +++ b/distrib/sets/lists/base/md.macppc @@ -1512,15 +1512,6 @@ ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.mvme68k b/distrib/sets/lists/base/md.mvme68k index c18b21fd80b..99525fb0685 100644 --- a/distrib/sets/lists/base/md.mvme68k +++ b/distrib/sets/lists/base/md.mvme68k @@ -1486,15 +1486,6 @@ ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/m68k-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.mvme88k b/distrib/sets/lists/base/md.mvme88k index a5a1b681be8..86018555932 100644 --- a/distrib/sets/lists/base/md.mvme88k +++ b/distrib/sets/lists/base/md.mvme88k @@ -588,15 +588,6 @@ ./usr/libdata/perl5/site_perl/m88k-openbsd/m88k/ieee.ph ./usr/libdata/perl5/site_perl/m88k-openbsd/m88k/internal_types.ph ./usr/libdata/perl5/site_perl/m88k-openbsd/machine -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/m88k-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/m88k-openbsd/net/if_gre.ph ./usr/libdata/perl5/site_perl/m88k-openbsd/net/if_ieee80211.ph ./usr/libdata/perl5/site_perl/m88k-openbsd/net/if_pflog.ph diff --git a/distrib/sets/lists/base/md.mvmeppc b/distrib/sets/lists/base/md.mvmeppc index 9f57b6965d0..1ec18677f8a 100644 --- a/distrib/sets/lists/base/md.mvmeppc +++ b/distrib/sets/lists/base/md.mvmeppc @@ -1451,15 +1451,6 @@ ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/powerpc-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.sparc b/distrib/sets/lists/base/md.sparc index 64d991f0615..33270f24545 100644 --- a/distrib/sets/lists/base/md.sparc +++ b/distrib/sets/lists/base/md.sparc @@ -948,15 +948,6 @@ ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/sparc-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.sparc64 b/distrib/sets/lists/base/md.sparc64 index ca914ef404a..6f4a67e62dc 100644 --- a/distrib/sets/lists/base/md.sparc64 +++ b/distrib/sets/lists/base/md.sparc64 @@ -949,15 +949,6 @@ ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/sparc64-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/md.vax b/distrib/sets/lists/base/md.vax index a4865519732..677606830ff 100644 --- a/distrib/sets/lists/base/md.vax +++ b/distrib/sets/lists/base/md.vax @@ -886,15 +886,6 @@ ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/procfs/procfs.ph ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/specfs ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/specfs/specdev.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_cipher.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_cmd.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_fileinfo.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_keytab.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_mount.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_rw.ph -./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/tcfs/tcfs_version.ph ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/umapfs ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/umapfs/umap.ph ./usr/libdata/perl5/site_perl/vax-openbsd/miscfs/union diff --git a/distrib/sets/lists/base/mi b/distrib/sets/lists/base/mi index a23d16091dc..7fe64625b5e 100644 --- a/distrib/sets/lists/base/mi +++ b/distrib/sets/lists/base/mi @@ -63,7 +63,6 @@ ./etc/ssl/lib ./etc/ssl/private ./etc/systrace -./etc/tcfs ./etc/termcap ./home ./mnt @@ -110,7 +109,6 @@ ./sbin/mount_null ./sbin/mount_portal ./sbin/mount_procfs -./sbin/mount_tcfs ./sbin/mount_umap ./sbin/mount_union ./sbin/mount_xfs diff --git a/distrib/sets/lists/comp/mi b/distrib/sets/lists/comp/mi index 7996b1f7ad7..6f3f2c1c1f0 100644 --- a/distrib/sets/lists/comp/mi +++ b/distrib/sets/lists/comp/mi @@ -955,15 +955,6 @@ ./usr/include/miscfs/procfs/procfs.h ./usr/include/miscfs/specfs ./usr/include/miscfs/specfs/specdev.h -./usr/include/miscfs/tcfs -./usr/include/miscfs/tcfs/tcfs.h -./usr/include/miscfs/tcfs/tcfs_cipher.h -./usr/include/miscfs/tcfs/tcfs_cmd.h -./usr/include/miscfs/tcfs/tcfs_fileinfo.h -./usr/include/miscfs/tcfs/tcfs_keytab.h -./usr/include/miscfs/tcfs/tcfs_mount.h -./usr/include/miscfs/tcfs/tcfs_rw.h -./usr/include/miscfs/tcfs/tcfs_version.h ./usr/include/miscfs/umapfs ./usr/include/miscfs/umapfs/umap.h ./usr/include/miscfs/union diff --git a/distrib/sets/lists/man/mi b/distrib/sets/lists/man/mi index a4d6f05432c..990d379b67a 100644 --- a/distrib/sets/lists/man/mi +++ b/distrib/sets/lists/man/mi @@ -1871,7 +1871,6 @@ ./usr/share/man/cat8/mount_null.0 ./usr/share/man/cat8/mount_portal.0 ./usr/share/man/cat8/mount_procfs.0 -./usr/share/man/cat8/mount_tcfs.0 ./usr/share/man/cat8/mount_umap.0 ./usr/share/man/cat8/mount_union.0 ./usr/share/man/cat8/mount_xfs.0 diff --git a/etc/mtree/4.4BSD.dist b/etc/mtree/4.4BSD.dist index dc5ff5b3a93..e612a5b8f37 100644 --- a/etc/mtree/4.4BSD.dist +++ b/etc/mtree/4.4BSD.dist @@ -1,4 +1,4 @@ -# $OpenBSD: 4.4BSD.dist,v 1.144 2003/02/19 22:11:42 millert Exp $ +# $OpenBSD: 4.4BSD.dist,v 1.145 2003/02/24 01:17:38 deraadt Exp $ /set type=dir uname=root gname=wheel mode=0755 # . @@ -130,11 +130,6 @@ systrace # ./etc/systrace .. -# ./etc/tcfs -tcfs -# ./etc/tcfs -.. - # ./etc .. diff --git a/sbin/Makefile b/sbin/Makefile index 2cec8c6d3cb..17ac987ba06 100644 --- a/sbin/Makefile +++ b/sbin/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.64 2002/09/06 21:15:55 deraadt Exp $ +# $OpenBSD: Makefile,v 1.65 2003/02/24 01:18:03 deraadt Exp $ # Not ported: XNSrouted enpload scsiformat startslip # Missing: icheck @@ -25,7 +25,6 @@ SUBDIR+= mount_umap SUBDIR+= mount_union SUBDIR+= mount_ext2fs fsck_ext2fs SUBDIR+= mount_xfs -SUBDIR+= mount_tcfs # IPv6 SUBDIR+= ping6 rtsol diff --git a/sys/conf/files b/sys/conf/files index 30ba3f5f8ef..c0f59ad2bd8 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -1,4 +1,4 @@ -# $OpenBSD: files,v 1.268 2003/02/17 23:07:43 miod Exp $ +# $OpenBSD: files,v 1.269 2003/02/24 01:17:36 deraadt Exp $ # $NetBSD: files,v 1.87 1996/05/19 17:17:50 jonathan Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 @@ -580,21 +580,6 @@ file miscfs/kernfs/kernfs_vnops.c kernfs file miscfs/nullfs/null_subr.c nullfs file miscfs/nullfs/null_vfsops.c nullfs file miscfs/nullfs/null_vnops.c nullfs -file miscfs/tcfs/tcfs_subr.c tcfs -file miscfs/tcfs/tcfs_vfsops.c tcfs -file miscfs/tcfs/tcfs_vnops.c tcfs -file miscfs/tcfs/tcfs_attr.c tcfs -file miscfs/tcfs/tcfs_cipher_TDES.c tcfs -file miscfs/tcfs/tcfs_cipher_BLOWFISH.c tcfs -file miscfs/tcfs/tcfs_cipher_conf.c tcfs -file miscfs/tcfs/tcfs_cipher_none.c tcfs -file miscfs/tcfs/tcfs_cmd.c tcfs -file miscfs/tcfs/tcfs_crypto.c tcfs -file miscfs/tcfs/tcfs_dir.c tcfs -file miscfs/tcfs/tcfs_fileinfo.c tcfs -file miscfs/tcfs/tcfs_interp.c tcfs -file miscfs/tcfs/tcfs_keytab.c tcfs -file miscfs/tcfs/tcfs_rw.c tcfs file miscfs/portal/portal_vfsops.c portal file miscfs/portal/portal_vnops.c portal file miscfs/procfs/procfs_cmdline.c procfs @@ -705,12 +690,12 @@ file netinet/ip_ipcomp.c inet & ipsec file crypto/rijndael.c (inet & ipsec) | crypto | uvm_swap_encrypt file crypto/rmd160.c (inet & ipsec) | crypto file crypto/sha1.c (inet & ipsec) | crypto -file crypto/blf.c (inet & ipsec) | crypto | tcfs | vnd +file crypto/blf.c (inet & ipsec) | crypto | vnd file crypto/cast.c (inet & ipsec) | crypto file crypto/skipjack.c (inet & ipsec) | crypto -file crypto/ecb_enc.c (inet & ipsec) | crypto | tcfs -file crypto/set_key.c (inet & ipsec) | crypto | tcfs -file crypto/ecb3_enc.c (inet & ipsec) | crypto | tcfs +file crypto/ecb_enc.c (inet & ipsec) | crypto +file crypto/set_key.c (inet & ipsec) | crypto +file crypto/ecb3_enc.c (inet & ipsec) | crypto file crypto/crypto.c (inet & ipsec) | crypto file crypto/cryptodev.c ((inet & ipsec) | crypto) needs-flag file crypto/criov.c (inet & ipsec) | crypto diff --git a/sys/miscfs/tcfs/tcfs.h b/sys/miscfs/tcfs/tcfs.h deleted file mode 100644 index 0d4872d9c5e..00000000000 --- a/sys/miscfs/tcfs/tcfs.h +++ /dev/null @@ -1,109 +0,0 @@ -/* $OpenBSD: tcfs.h,v 1.5 2002/06/04 00:00:55 nordin Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef _TCFS_H_ -#define _TCFS_H_ - -#include <miscfs/tcfs/tcfs_mount.h> - -#ifdef _KERNEL -/* - * A cache of vnode references - */ -struct tcfs_node { - LIST_ENTRY(tcfs_node) tcfs_hash; /* Hash list */ - struct vnode *tcfs_lowervp; /* VREFed once */ - struct vnode *tcfs_vnode; /* Back pointer */ -}; - -extern int tcfs_node_create(struct mount *mp, struct vnode *target, struct vnode **vpp, int lockit); - -#define MOUNTTOTCFSMOUNT(mp) ((struct tcfs_mount *)((mp)->mnt_data)) -#define VTOTCFS(vp) ((struct tcfs_node *)(vp)->v_data) -#define TCFSTOV(xp) ((xp)->tcfs_vnode) -#ifdef TCFS_DIAGNOSTIC -extern struct vnode *tcfs_checkvp(struct vnode *vp, char *fil, int lno); -#define TCFSVPTOLOWERVP(vp) tcfs_checkvp((vp), __FILE__, __LINE__) -#else -#define TCFSVPTOLOWERVP(vp) (VTOTCFS(vp)->tcfs_lowervp) -#endif - -#define TCFS_VP2UKT(vp) ((MOUNTTOTCFSMOUNT(((vp)->v_mount)))->tcfs_uid_kt) -#define TCFS_VP2GKT(vp) ((MOUNTTOTCFSMOUNT(((vp)->v_mount)))->tcfs_gid_kt) - -#define tcfs_fhtovp ((int (*)(struct mount *, struct fid *, \ - struct vnode **))eopnotsupp) -#define tcfs_vptofh ((int (*)(struct vnode *, struct fid *))eopnotsupp) - -extern int (**tcfs_vnodeop_p)(void *); -extern struct vfsops tcfs_vfsops; - -int tcfs_init(struct vfsconf *); - -#define BLOCKSIZE 1024 -#define SBLOCKSIZE 8 - -int tcfs_bypass(void *); -int tcfs_open(void *); -int tcfs_getattr(void *); -int tcfs_setattr(void *); -int tcfs_inactive(void *); -int tcfs_reclaim(void *); -int tcfs_print(void *); -int tcfs_strategy(void *); -int tcfs_bwrite(void *); -int tcfs_lock(void *); -int tcfs_unlock(void *); -int tcfs_islocked(void *); -int tcfs_read(void *); -int tcfs_readdir(void *); -int tcfs_write(void *); -int tcfs_create(void *); -int tcfs_mknod(void *); -int tcfs_mkdir(void *); -int tcfs_link(void *); -int tcfs_symlink(void *); -int tcfs_rename(void *); -int tcfs_lookup(void *); - -void *tcfs_getukey(struct ucred *, struct proc *, struct vnode *); -void *tcfs_getpkey(struct ucred *, struct proc *, struct vnode *); -void *tcfs_getgkey(struct ucred *, struct proc *, struct vnode *); -int tcfs_checkukey(struct ucred *, struct proc *, struct vnode *); -int tcfs_checkpkey(struct ucred *, struct proc *, struct vnode *); -int tcfs_checkgkey(struct ucred *, struct proc *, struct vnode *); -int tcfs_exec_cmd(struct tcfs_mount*, struct tcfs_args *); -int tcfs_init_mp(struct tcfs_mount*, struct tcfs_args *); -int tcfs_set_status(struct tcfs_mount *, struct tcfs_args *, int); - -#define TCFS_CHECK_AKEY(c,p,v) (\ - tcfs_checkukey((c),(p),(v)) || \ - tcfs_checkpkey((c),(p),(v)) || \ - tcfs_checkgkey((c),(p),(v)) ) - -#endif /* _KERNEL */ -#endif /* _TCFS_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_attr.c b/sys/miscfs/tcfs/tcfs_attr.c deleted file mode 100644 index fcaa9468a27..00000000000 --- a/sys/miscfs/tcfs/tcfs_attr.c +++ /dev/null @@ -1,137 +0,0 @@ -/* $OpenBSD: tcfs_attr.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> - -#include <miscfs/tcfs/tcfs.h> -#include <miscfs/tcfs/tcfs_rw.h> - -int -tcfs_getattr(v) - void *v; -{ - struct vop_getattr_args *ap = v; - int error; - tcfs_fileinfo i; - if ((error = tcfs_bypass(ap)) != 0) - return (error); - /* Requires that arguments be restored. */ - - ap->a_vap->va_fsid = ap->a_vp->v_mount->mnt_stat.f_fsid.val[0]; - i.flag=ap->a_vap->va_flags; - ap->a_vap->va_size-=FI_SPURE(&i); - - return (0); -} - - -int -tcfs_setattr(v) - void *v; -{ - struct vop_setattr_args *a = v; - struct vattr *ap; - u_quad_t size = 0; - tcfs_fileinfo i, n; - int error, sp = 0; - - i = tcfs_xgetflags(a->a_vp,a->a_p,a->a_cred); - ap = a->a_vap; - - if (FI_GSHAR(&i)) { - if(!tcfs_getgkey(a->a_cred,a->a_p,a->a_vp)) - return EACCES; - } else { - if (!tcfs_getpkey(a->a_cred, a->a_p,a->a_vp)) - if (!tcfs_getukey(a->a_cred, a->a_p,a->a_vp)) - return EACCES; - } - - if ((ap->va_flags) != VNOVAL) { - n.flag = ap->va_flags; - n.end_of_file = i.end_of_file; - - if ((FI_CFLAG(&n) && FI_GSHAR(&i)) || - (FI_GSHAR(&n) && FI_CFLAG(&i))) - return EACCES; - - if (FI_SPURE(&n) != FI_SPURE(&i)) { - /* le spure no (le settano solo write e trunc) */ - return EACCES; - } - - if (FI_CFLAG(&n) && (!FI_CFLAG(&i))) { - sp = tcfs_ed(a->a_vp, a->a_p, a->a_cred, &n); - FI_SET_SP(&n, sp); - } - - if ((!FI_CFLAG(&n)) && FI_CFLAG(&i)) { - sp = tcfs_ed(a->a_vp, a->a_p, a->a_cred, &n); - FI_SET_SP(&n, 0); - } - - if (FI_GSHAR(&n) && (!FI_GSHAR(&i))) { - sp = tcfs_ed(a->a_vp, a->a_p, a->a_cred, &n); - FI_SET_SP(&n,sp); - } - - if ((!FI_GSHAR(&n)) && FI_GSHAR(&i)) { - sp = tcfs_ed(a->a_vp, a->a_p, a->a_cred, &n); - FI_SET_SP(&n,0); - } - - - ap->va_flags = i.flag = n.flag; - if (a->a_vp->v_type == VREG) { - ap->va_size = FI_ENDOF(&i) + sp; - error = tcfs_xsetflags(a->a_vp, a->a_p, a->a_cred,&i); - } - return tcfs_bypass((void *)v); - } - if ((ap->va_size) != VNOVAL) { - if (ap->va_size == 0) - size = 0; - else - size = (u_quad_t)(D_PFOFF(ap->va_size) + 1); - - FI_SET_SP(&i,(size-ap->va_size)); - ap->va_size = size; - error = tcfs_xsetflags(a->a_vp, a->a_p,a->a_cred, &i); - } - - return tcfs_bypass((void *)v); -} - diff --git a/sys/miscfs/tcfs/tcfs_cipher.h b/sys/miscfs/tcfs/tcfs_cipher.h deleted file mode 100644 index fa2105d36cc..00000000000 --- a/sys/miscfs/tcfs/tcfs_cipher.h +++ /dev/null @@ -1,108 +0,0 @@ -/* $OpenBSD: tcfs_cipher.h,v 1.4 2000/06/18 16:23:08 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef _TCFS_CIPHER_H_ -#define _TCFS_CIPHER_H_ - -#include <miscfs/tcfs/tcfs_mount.h> - -#define _TCFS_CIPHER_H_ -#define MaxNumOfCipher 8 -#define MaxCipherNameLen 8 - -struct tcfs_cipher { - char cipher_desc[MaxCipherNameLen]; - int cipher_version; - int cipher_keysize; - void *(*init_key)(char*); - void (*cleanup_key)(void*); - void (*encrypt)(char*, int, void*); - void (*decrypt)(char*, int, void*); -}; - -extern struct tcfs_cipher tcfs_cipher_vect[MaxNumOfCipher]; - -#define TCFS_MP_CIPHER(mp) (((struct tcfs_mount*)(mp))->tcfs_cipher_num) - -#define TCFS_CIPHER_KEYSIZE(mp)\ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].cipher_keysize) - -#define TCFS_CIPHER_VERSION(mp)\ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].cipher_version) - -#define TCFS_CIPHER_DESC(mp)\ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].cipher_desc) - -static __inline void *TCFS_INIT_KEY(struct tcfs_mount *,char *); -static __inline void *TCFS_INIT_KEY(struct tcfs_mount *mp, char *tok) -{ - return (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].init_key((tok))); -} - -static __inline void TCFS_CLEANUP_KEY(struct tcfs_mount*,void*); -static __inline void TCFS_CLEANUP_KEY(struct tcfs_mount* mp,void* tok) -{ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].cleanup_key((tok))); - return; -} -static __inline void TCFS_ENCRYPT(struct tcfs_mount*,char*,int,void*); -static __inline void TCFS_ENCRYPT(struct tcfs_mount *mp,char *blk,int len,void *key) -{ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].encrypt((blk),(len),(key))); - return; -} -static __inline void TCFS_DECRYPT(struct tcfs_mount*,char*,int,void*); -static __inline void TCFS_DECRYPT(struct tcfs_mount *mp,char *blk,int len,void *key) -{ - (tcfs_cipher_vect[TCFS_MP_CIPHER((mp))].decrypt((blk),(len),(key))); - return; -} - -void mkencrypt (struct tcfs_mount *, char *, int, void*); -void mkdecrypt (struct tcfs_mount *, char *, int, void*); - -/* function prototypes */ - -void *cnone_init_key(char *); -void cnone_cleanup_key(void*); -void cnone_encrypt(char *, int , void*); -void cnone_decrypt(char *, int , void*); -#define NONE_KEYSIZE 0 - -void *TDES_init_key(char *); -void TDES_cleanup_key(void*); -void TDES_encrypt(char *, int , void*); -void TDES_decrypt(char *, int , void*); -#define TDES_KEYSIZE 24 - -void *BLOWFISH_init_key(char *); -void BLOWFISH_cleanup_key(void*); -void BLOWFISH_encrypt(char *, int , void*); -void BLOWFISH_decrypt(char *, int , void*); -#define BLOWFISH_KEYSIZE 32 - -#endif /* _TCFS_CIPHER_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_cipher_BLOWFISH.c b/sys/miscfs/tcfs/tcfs_cipher_BLOWFISH.c deleted file mode 100644 index 5420c7523a2..00000000000 --- a/sys/miscfs/tcfs/tcfs_cipher_BLOWFISH.c +++ /dev/null @@ -1,69 +0,0 @@ -/* $OpenBSD: tcfs_cipher_BLOWFISH.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/malloc.h> - -#include <miscfs/tcfs/tcfs_cipher.h> - -#include <crypto/blf.h> - - -void * -BLOWFISH_init_key (char *key) -{ - blf_ctx *ks = NULL; - - ks = (blf_ctx *)malloc (sizeof (blf_ctx), M_FREE, M_NOWAIT); - if (!ks) - return NULL; - - blf_key (ks, key, BLOWFISH_KEYSIZE); - - return (void *)ks; -} - -void -BLOWFISH_cleanup_key(void *k) -{ - free((blf_ctx *)k, M_FREE); -} - -void -BLOWFISH_encrypt(char *block, int nb, void *key) -{ - char iv[] = {'\0','\0','\0','\0','\0','\0','\0','\0'}; - blf_cbc_encrypt((blf_ctx *)key, iv, block, nb); -} - -void -BLOWFISH_decrypt(char *block, int nb, void *key) -{ - char iv[] = {'\0','\0','\0','\0','\0','\0','\0','\0'}; - blf_cbc_decrypt((blf_ctx *)key, iv, block, nb); -} diff --git a/sys/miscfs/tcfs/tcfs_cipher_TDES.c b/sys/miscfs/tcfs/tcfs_cipher_TDES.c deleted file mode 100644 index 8c186528306..00000000000 --- a/sys/miscfs/tcfs/tcfs_cipher_TDES.c +++ /dev/null @@ -1,131 +0,0 @@ -/* $OpenBSD: tcfs_cipher_TDES.c,v 1.5 2000/06/18 19:08:44 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/malloc.h> -#include <sys/md5k.h> - -#include <miscfs/tcfs/tcfs_cipher.h> - -#include <crypto/des_locl.h> -#include <crypto/des.h> - -/* EDE Triple-DES with K1, K2 and K3 */ - -void * -TDES_init_key (char *key) -{ - des_key_schedule *ks; - char dkey[TDES_KEYSIZE]; - char digest[16]; - MD5_CTX ctx; - int i; - - /* Fold the bigger key into a Triple-DES suitable one */ - bcopy (key, dkey, sizeof(dkey)); - - MD5Init(&ctx); - MD5Update(&ctx, key, KEYSIZE); - MD5Final(digest, &ctx); - - for (i = 0; i < sizeof(dkey); i++) - dkey[i] ^= digest[i % 16]; - - ks = (des_key_schedule *)malloc (3 * sizeof (des_key_schedule), - M_FREE, M_NOWAIT); - if (!ks) - return NULL; - - des_set_key ((des_cblock *) dkey, ks[0]); - des_set_key ((des_cblock *)(dkey + 8), ks[1]); - des_set_key ((des_cblock *)(dkey + 16), ks[2]); - - bzero(dkey, sizeof(dkey)); - bzero(digest, sizeof(digest)); - - return (void *)ks; -} - -void -TDES_cleanup_key(void *k) -{ -/* tcfs_keytab_dispnode does it - free((des_key_schedule*)k,M_FREE); -*/ -} - -void -TDES_encrypt(char *block, int nb, void *key) -{ - u_int32_t * xi; - int i; - char *tmp; - des_key_schedule *ks = (des_key_schedule *)key; - - xi = (u_int32_t *)block; - tmp = block; - des_ecb3_encrypt((des_cblock *)tmp, (des_cblock *)tmp, - ks[2], ks[1], ks[0], DES_ENCRYPT); - tmp += 8; - for (i = 1;i < nb/8; i++) { - *(xi+2) ^= *xi; - *(xi+3) ^= *(xi + 1); - des_ecb3_encrypt((des_cblock *)tmp, (des_cblock *)tmp, - ks[2], ks[1], ks[0], DES_ENCRYPT); - tmp += 8; - xi += 2; - } -} - -void -TDES_decrypt(char *block, int nb, void *key) -{ - u_int32_t * xi, xo[2], xa[2]; - int i; - char *tmp; - des_key_schedule *ks = (des_key_schedule *)key; - - xi = (u_int32_t *)block; - tmp = block; - xo[0] = *xi; xo[1] = *(xi+1); - des_ecb3_encrypt((des_cblock *)tmp, (des_cblock *)tmp, - ks[0], ks[1], ks[2], DES_DECRYPT); - tmp += 8; - xi = (u_int32_t *)tmp; - for (i = 1;i < nb/8; i++) { - xa[0] = *xi; xa[1] = *(xi+1); - des_ecb3_encrypt((des_cblock *)tmp, (des_cblock *)tmp, - ks[0], ks[1], ks[2], DES_DECRYPT); - *(xi) ^= xo[0]; - *(xi+1)^= xo[1]; - xo[0] = xa[0]; - xo[1] = xa[1]; - tmp += 8; - xi += 2; - } -} diff --git a/sys/miscfs/tcfs/tcfs_cipher_conf.c b/sys/miscfs/tcfs/tcfs_cipher_conf.c deleted file mode 100644 index e4897bbe1e2..00000000000 --- a/sys/miscfs/tcfs/tcfs_cipher_conf.c +++ /dev/null @@ -1,47 +0,0 @@ -/* $OpenBSD: tcfs_cipher_conf.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <miscfs/tcfs/tcfs_cipher.h> - -struct tcfs_cipher tcfs_cipher_vect[]={ - {"3des", 0, TDES_KEYSIZE, TDES_init_key, TDES_cleanup_key, - TDES_encrypt, TDES_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, - {"bfish", 0, BLOWFISH_KEYSIZE, BLOWFISH_init_key, BLOWFISH_cleanup_key, - BLOWFISH_encrypt, BLOWFISH_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, - {"none", 0, 0, cnone_init_key, cnone_cleanup_key, - cnone_encrypt, cnone_decrypt}, -}; diff --git a/sys/miscfs/tcfs/tcfs_cipher_none.c b/sys/miscfs/tcfs/tcfs_cipher_none.c deleted file mode 100644 index 5a7c9bbc8ec..00000000000 --- a/sys/miscfs/tcfs/tcfs_cipher_none.c +++ /dev/null @@ -1,49 +0,0 @@ -/* $OpenBSD: tcfs_cipher_none.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <miscfs/tcfs/tcfs_cipher.h> - -void * -cnone_init_key (char *key) -{ - return (void *)key; -} - -void -cnone_cleanup_key(void *k) -{ -} - -void -cnone_encrypt(char *block, int nb, void *key) -{ -} - -void -cnone_decrypt(char *block, int nb, void *key) -{ -} diff --git a/sys/miscfs/tcfs/tcfs_cmd.c b/sys/miscfs/tcfs/tcfs_cmd.c deleted file mode 100644 index 8234595e8fe..00000000000 --- a/sys/miscfs/tcfs/tcfs_cmd.c +++ /dev/null @@ -1,231 +0,0 @@ -/* $OpenBSD: tcfs_cmd.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> -#include <miscfs/tcfs/tcfs.h> -#include <miscfs/tcfs/tcfs_rw.h> -#include <miscfs/tcfs/tcfs_keytab.h> -#include <miscfs/tcfs/tcfs_cmd.h> -#include <miscfs/tcfs/tcfs_cipher.h> - -int -tcfs_init_mp(struct tcfs_mount *mp, struct tcfs_args *req) -{ - int result = 0; - int status = 0; - - if (!(mp->tcfs_uid_kt = tcfs_keytab_init())) { - result = ENOMEM; - status = ALLOCATION_FAILED; - } else { - if (!(mp->tcfs_gid_kt = tcfs_keytab_init())) { - tcfs_keytab_dispose(mp->tcfs_uid_kt); - status = ALLOCATION_FAILED; - result = ENOMEM; - } else { - if ((req->cipher_num >= MaxNumOfCipher)|| - (tcfs_cipher_vect[req->cipher_num].cipher_keysize == 0)) { - result = EINVAL; - status = BAD_CIPHER_NUMBER; - tcfs_keytab_dispose(mp->tcfs_uid_kt); - tcfs_keytab_dispose(mp->tcfs_gid_kt); - } else - mp->tcfs_cipher_num=req->cipher_num; - } - } - - (void)tcfs_set_status(mp,req,status); - return result; -} - -int -tcfs_exec_cmd(struct tcfs_mount *mp, struct tcfs_args *req) -{ - void *ks; - int result = 0; - int status = 0; - - - switch (req->cmd) { - case TCFS_PUT_UIDKEY: - ks=TCFS_INIT_KEY(mp, req->tcfs_key); - if (!ks) { - result = ENOMEM; - status = ALLOCATION_FAILED; - break; - } - result = tcfs_keytab_push_uid(mp->tcfs_uid_kt, req->user,ks); - if(result) { - TCFS_CLEANUP_KEY(mp,ks); - status = PUSHKEY_ERROR; - } - break; - - case TCFS_RM_UIDKEY: - result = tcfs_keytab_rm_uid(mp->tcfs_uid_kt, req->user); - status = (result ? RMKEY_ERROR : TCFS_OK); - break; - - case TCFS_PUT_PIDKEY: - ks = TCFS_INIT_KEY(mp, req->tcfs_key); - if(!ks) { - result = ENOMEM; - status = ALLOCATION_FAILED; - break; - } - result = tcfs_keytab_push_pid(mp->tcfs_uid_kt, req->user, - req->proc, ks); - if(result) { - TCFS_CLEANUP_KEY(mp,ks); - status = PUSHKEY_ERROR; - } - break; - - case TCFS_RM_PIDKEY: - result = tcfs_keytab_rm_pid(mp->tcfs_uid_kt, - req->user, req->proc); - status = (result ? RMKEY_ERROR : TCFS_OK); - break; - - case TCFS_PUT_GIDKEY: - result = tcfs_keytab_push_gid(mp, mp->tcfs_gid_kt, req->user, - req->group, req->treshold, - req->tcfs_key); - - status = (result ? PUSHKEY_ERROR : TCFS_OK); - break; - - case TCFS_RM_GIDKEY: - result = tcfs_keytab_rm_gid(mp->tcfs_gid_kt, req->user, - req->group); - status = (result ? RMKEY_ERROR : TCFS_OK); - break; - - case TCFS_GET_STATUS: - return tcfs_set_status(mp, req, TCFS_OK); - } - (void)tcfs_set_status(mp, req, status); - return result; -} - -int -tcfs_set_status(struct tcfs_mount *mp, struct tcfs_args *req, int error) -{ - req->st.status = error; - req->st.tcfs_version = TCFS_VERSION_NUM; - - if(error != TCFS_OK) - return error; - - req->st.n_ukey = mp->tcfs_uid_kt->cnt; - req->st.n_gkey = mp->tcfs_gid_kt->cnt; - strncpy(req->st.cipher_desc, TCFS_CIPHER_DESC(mp), MaxCipherNameLen); - req->st.cipher_keysize = TCFS_CIPHER_KEYSIZE(mp); - req->st.cipher_version = TCFS_CIPHER_VERSION(mp); - - return error; -} - -int -tcfs_checkukey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - return tcfs_keytab_check_uid(TCFS_VP2UKT(vp), c->cr_uid); -} - -void * -tcfs_getukey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - tcfs_keytab_node *n; - - n = tcfs_keytab_fetch_uid(TCFS_VP2UKT(vp),c->cr_uid); - - if (n) - return n->kn_key; - else - return (void*)NULL; -} - -int -tcfs_checkpkey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - struct proc *cp; - - if (!p) - cp = curproc; - else - cp = p; - - return tcfs_keytab_check_pid(TCFS_VP2UKT(vp), c->cr_uid, cp->p_pid); -} - -void * -tcfs_getpkey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - tcfs_keytab_node *n; - struct proc *cp; - - if (!p) - cp = curproc; - else - cp = p; - - n = tcfs_keytab_fetch_pid(TCFS_VP2UKT(vp), c->cr_uid, cp->p_pid); - - if (n) - return n->kn_key; - else - return (void*)NULL; -} - -int -tcfs_checkgkey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - return tcfs_keytab_check_uid(TCFS_VP2GKT(vp), c->cr_gid); -} - -void * -tcfs_getgkey(struct ucred *c, struct proc *p, struct vnode *vp) -{ - tcfs_keytab_node *n; - - n = tcfs_keytab_fetch_gid(TCFS_VP2GKT(vp), c->cr_gid); - - if (n) - return n->kn_key; - else - return (void*)NULL; -} - diff --git a/sys/miscfs/tcfs/tcfs_cmd.h b/sys/miscfs/tcfs/tcfs_cmd.h deleted file mode 100644 index 13c008a2902..00000000000 --- a/sys/miscfs/tcfs/tcfs_cmd.h +++ /dev/null @@ -1,44 +0,0 @@ -/* $OpenBSD: tcfs_cmd.h,v 1.2 2000/06/17 17:32:26 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* tcfs commands */ -#define TCFS_PUT_UIDKEY 1 -#define TCFS_RM_UIDKEY 2 -#define TCFS_PUT_PIDKEY 3 -#define TCFS_RM_PIDKEY 4 -#define TCFS_PUT_GIDKEY 5 -#define TCFS_RM_GIDKEY 6 -#define TCFS_GET_STATUS 7 - -/* tcfs errors */ -#define TCFS_OK 0 -#define UNKNOWN_COMMAND 1 -#define BAD_CIPHER_NUMBER 2 -#define PUSHKEY_ERROR 3 -#define RMKEY_ERROR 3 -#define ALLOCATION_FAILED 4 - diff --git a/sys/miscfs/tcfs/tcfs_crypto.c b/sys/miscfs/tcfs/tcfs_crypto.c deleted file mode 100644 index c29857f243c..00000000000 --- a/sys/miscfs/tcfs/tcfs_crypto.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $OpenBSD: tcfs_crypto.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> - -#include <miscfs/tcfs/tcfs_cipher.h> - -#define BLOCKSIZE 1024 -#define SBLOCKSIZE 8 -#define D_NOBLK(o) ((o)/BLOCKSIZE+(o%BLOCKSIZE?1:0)) - - -void -mkencrypt(struct tcfs_mount *mp, char *block, int nb, void *ks) -{ - int i,r; - char *tmp; - - tmp = block; - r = nb; - for(i = 0; i < D_NOBLK(nb) && r > 0; i++) { - TCFS_ENCRYPT(mp, tmp, MIN(BLOCKSIZE, r), ks); - tmp += BLOCKSIZE; - r -= BLOCKSIZE; - } -} - -void -mkdecrypt(struct tcfs_mount *mp, char *block, int nb, void *ks) -{ - int i,r; - char *tmp; - - tmp = block; - r = nb; - for(i = 0; i < D_NOBLK(nb) && r > 0; i++) { - TCFS_DECRYPT(mp, tmp, MIN(BLOCKSIZE, r), ks); - tmp += BLOCKSIZE; - r -= BLOCKSIZE; - } -} - diff --git a/sys/miscfs/tcfs/tcfs_dir.c b/sys/miscfs/tcfs/tcfs_dir.c deleted file mode 100644 index 7f2adefbe4e..00000000000 --- a/sys/miscfs/tcfs/tcfs_dir.c +++ /dev/null @@ -1,222 +0,0 @@ -/* $OpenBSD: tcfs_dir.c,v 1.4 2002/03/14 01:27:08 millert Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> -#include <sys/dirent.h> - -#include <miscfs/tcfs/tcfs.h> -#include <miscfs/tcfs/tcfs_rw.h> - -int tcfs_new_direntry(void *, tcfs_fileinfo *); - -int -tcfs_new_direntry(void *v, tcfs_fileinfo *i) -{ - struct vop_create_args *x; - struct ucred *cr; - struct proc *pr; - int err; - - x = (struct vop_create_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - - if (!TCFS_CHECK_AKEY(cr, pr, x->a_dvp)) - return tcfs_bypass(v); - - /* Per i file speciali e per i link, niente flags (per ora)*/ - if((x->a_desc == VDESC(vop_mknod)) || - (x->a_desc == VDESC(vop_symlink)) || - (x->a_desc == VDESC(vop_link))) { - err=tcfs_bypass(v); - return err; - } - - if (!(err=tcfs_bypass(v))) - err = tcfs_xsetflags(*(x->a_vpp),pr,cr,i); - - return err; -} - -int -tcfs_create(v) - void *v; -{ - struct vop_create_args *x; - struct ucred *cr; - struct proc *pr; - tcfs_fileinfo i; - - x = (struct vop_create_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - i = tcfs_xgetflags(x->a_dvp, pr, cr); - - if (FI_CFLAG(&i)||FI_GSHAR(&i)) - return tcfs_new_direntry(v, &i); - else - return tcfs_bypass(v); -} - -int -tcfs_mknod(v) - void *v; -{ - struct vop_mknod_args *x; - struct ucred *cr; - struct proc *pr; - tcfs_fileinfo i; - - x = (struct vop_mknod_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - i = tcfs_xgetflags(x->a_dvp, pr, cr); - - if (FI_CFLAG(&i) || FI_GSHAR(&i)) - return tcfs_new_direntry(v, &i); - else - return tcfs_bypass(v); -} - -int -tcfs_mkdir(v) - void *v; -{ - struct vop_mkdir_args *x; - struct ucred *cr; - struct proc *pr; - tcfs_fileinfo i; - - x = (struct vop_mkdir_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - i = tcfs_xgetflags(x->a_dvp,pr,cr); - - if (FI_CFLAG(&i) || FI_GSHAR(&i)) - return tcfs_new_direntry(v, &i); - else - return tcfs_bypass(v); -} - -int tcfs_link(v) - void *v; -{ - struct vop_link_args *x; - struct ucred *cr; - struct proc *pr; - tcfs_fileinfo i; - - x = (struct vop_link_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - i = tcfs_xgetflags(x->a_dvp, pr, cr); - - if (FI_CFLAG(&i) || FI_GSHAR(&i)) - return tcfs_new_direntry(v, &i); - else - return tcfs_bypass(v); -} - -int -tcfs_symlink(v) - void *v; -{ - struct vop_symlink_args *x; - struct ucred *cr; - struct proc *pr; - tcfs_fileinfo i; - - x = (struct vop_symlink_args *)v; - cr = x->a_cnp->cn_cred; - pr = x->a_cnp->cn_proc; - i = tcfs_xgetflags(x->a_dvp,pr,cr); - - if (FI_CFLAG(&i) || FI_GSHAR(&i)) - return tcfs_new_direntry(v, &i); - else - return tcfs_bypass(v); -} - -int -tcfs_readdir(v) - void *v; -{ -/* - tcfs_fileinfo i; - struct vop_readdir_args *a=(struct vop_readdir_args*)v; - struct dirent *s,*d,*e; - char *p; - int err; - off_t offset; - int req,resid; - - - i=tcfs_xgetflags(a->a_vp,a->a_uio->uio_procp,a->a_cred); - offset=a->a_uio->uio_offset; - req=a->a_uio->uio_resid; - p=a->a_uio->uio_iov->iov_base; - - err=tcfs_bypass(v); - resid=a->a_uio->uio_resid; - - s=(struct dirent*)p; - e=(struct dirent*)a->a_uio->uio_iov->iov_base; - - if( (!FI_CFLAG(&i)) && (!FI_GSHAR(&i)) ) - return err; - - for(d=s; d<e && d->d_reclen;d=(struct dirent*)((char*)d+d->d_reclen)) - { - if(!d->d_fileno) - continue; - if((d->d_namlen==1 && d->d_name[0]=='.') || - (d->d_namlen==2 && d->d_name[0]=='.' && d->d_name[1]=='.')) - continue; - - if(d->d_namlen) - d->d_name[0]--; - } - return err; -*/ - return tcfs_bypass(v); -} - -int -tcfs_rename(v) - void *v; -{ - return tcfs_bypass(v); -} diff --git a/sys/miscfs/tcfs/tcfs_fileinfo.c b/sys/miscfs/tcfs/tcfs_fileinfo.c deleted file mode 100644 index 37cbd938435..00000000000 --- a/sys/miscfs/tcfs/tcfs_fileinfo.c +++ /dev/null @@ -1,108 +0,0 @@ -/* $OpenBSD: tcfs_fileinfo.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> -#include <sys/stat.h> - -#include <miscfs/tcfs/tcfs.h> -#include <miscfs/tcfs/tcfs_rw.h> - - -tcfs_fileinfo -tcfs_xgetflags(struct vnode *v, struct proc *p, struct ucred *c) -{ - tcfs_fileinfo r; - struct vop_getattr_args x; - struct vattr att; - int retval; - - att = va_null; - x.a_desc = VDESC(vop_getattr); - x.a_vp = v; - x.a_vap = &att; - x.a_cred = c; - x.a_p = p; - - retval = tcfs_bypass((void*)&x); - r.flag = (unsigned long)(x.a_vap->va_flags); - r.end_of_file = x.a_vap->va_size; - - return r; -} - -int -tcfs_xsetflags(struct vnode *v, struct proc *p, struct ucred *c, - tcfs_fileinfo *i) -{ - struct vop_setattr_args x; - struct vattr att; - int retval; - - att = va_null; - - att.va_flags = i->flag; - - x.a_desc = VDESC(vop_setattr); - x.a_vp = v; - x.a_vap = &att; - x.a_cred = c; - x.a_p = p; - - retval = tcfs_bypass((void*)&x); - return retval; -} - - - -tcfs_fileinfo -tcfs_get_fileinfo(void *a) -{ - struct vop_read_args *arg; - - arg = (struct vop_read_args*)a; - return tcfs_xgetflags(arg->a_vp, arg->a_uio->uio_procp, arg->a_cred); -} - - -int -tcfs_set_fileinfo(void *a, tcfs_fileinfo *i) -{ - struct vop_read_args *arg; - - arg = (struct vop_read_args*)a; - return tcfs_xsetflags(arg->a_vp, arg->a_uio->uio_procp, - arg->a_cred, i); -} diff --git a/sys/miscfs/tcfs/tcfs_fileinfo.h b/sys/miscfs/tcfs/tcfs_fileinfo.h deleted file mode 100644 index c000bf2fa7c..00000000000 --- a/sys/miscfs/tcfs/tcfs_fileinfo.h +++ /dev/null @@ -1,60 +0,0 @@ -/* $OpenBSD: tcfs_fileinfo.h,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* Management information for files */ - -typedef struct { - unsigned long flag; - unsigned int end_of_file; -} tcfs_fileinfo; - -#define MBFLAG 0x00000010 -#define SPFLAG 0x000000e0 -#define GSFLAG 0x00000100 - -#define FI_CFLAG(x) (((x)->flag&MBFLAG)>>4) -#define FI_SPURE(x) (((x)->flag&SPFLAG)>>5) -#define FI_GSHAR(x) (((x)->flag&GSFLAG)>>8) -#define FI_ENDOF(x) ((x)->end_of_file) - -#define FI_SET_CF(x,y) ((x)->flag=\ - ((x)->flag & (~MBFLAG))|((y<<4)&MBFLAG)) - -#define FI_SET_SP(x,y) ((x)->flag=\ - ((x)->flag & (~SPFLAG))|((y<<5)&SPFLAG)) - -#define FI_SET_GS(x,y) ((x)->flag=\ - ((x)->flag & (~GSFLAG))|((y<<8)&GSFLAG)) - -/* Function prototypes */ - -tcfs_fileinfo tcfs_get_fileinfo(void *); -tcfs_fileinfo tcfs_xgetflags(struct vnode *,struct proc *,struct ucred*); -int tcfs_set_fileinfo(void *, tcfs_fileinfo *); -int tcfs_xsetflags(struct vnode *, struct proc *, struct ucred *, tcfs_fileinfo *); - diff --git a/sys/miscfs/tcfs/tcfs_interp.c b/sys/miscfs/tcfs/tcfs_interp.c deleted file mode 100644 index 3b4d9ef9fa6..00000000000 --- a/sys/miscfs/tcfs/tcfs_interp.c +++ /dev/null @@ -1,157 +0,0 @@ -/* $OpenBSD: tcfs_interp.c,v 1.3 2000/06/17 20:25:54 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/types.h> -#include <sys/malloc.h> -#include <sys/errno.h> - -#include <miscfs/tcfs/tcfs_keytab.h> -#include <miscfs/tcfs/tcfs_cipher.h> - -int interp(tcfs_grp_data *,unsigned char *); -void doinverse(void); - -static int inverse[]={ - 0,1,129,86,193,103,43,147,225,200,180,187,150,178, - 202,120,241,121,100,230,90,49,222,190,75,72,89,238, - 101,195,60,199,249,148,189,235,50,132,115,145,45,163, - 153,6,111,40,95,175,166,21,36,126,173,97,119,243,179,248, - 226,61,30,59,228,102,253,87,74,234,223,149,246,181,25, - 169,66,24,186,247,201,244,151,165,210,96,205,127,3,65, - 184,26,20,209,176,152,216,46,83,53,139,135,18,28,63,5, - 215,164,177,245,188,224,250,44,218,116,124,38,113,134, - 159,54,15,17,158,140,114,220,51,85,255,2,172,206,37,143, - 117,99,240,242,203,98,123,144,219,133,141,39,213,7,33,69, - 12,80,93,42,252,194,229,239,122,118,204,174,211,41,105, - 81,48,237,231,73,192,254,130,52,161,47,92,106,13,56,10, - 71,233,191,88,232,76,11,108,34,23,183,170,4,155,29,198, - 227,196,31,9,78,14,138,160,84,131,221,236,91,82,162,217, - 146,251,104,94,212,112,142,125,207,22,68,109,8,58,197, - 62,156,19,168,185,182,67,35,208,167,27,157,136,16,137, - 55,79,107,70,77,57,32,110,214,154,64,171,128,256 -}; - -union bobbit { - unsigned char byte; - struct { - unsigned char b1:1; - unsigned char b2:1; - unsigned char b3:1; - unsigned char b4:1; - unsigned char b5:1; - unsigned char b6:1; - unsigned char b7:1; - unsigned char b8:1; - } bf; -}; - -#define mod(a) ((unsigned int)((a)%257)) -/* -unsigned int mod(long a) -{ - return (unsigned int) a%257; -} -*/ - -int -interp(tcfs_grp_data *gd,unsigned char *gidkey) -{ - unsigned int tp,kkk; - int i = 0, j, l, idx; - tcfs_grp_uinfo ktmp[MAXUSRPERGRP], *gui; - unsigned int inv, ttt; - union bobbit obits; - int k; - - k = gd->gd_k; - - for (i = 0; i < MAXUSRPERGRP && i < k; i++) { - gui = &(gd->gd_part[i]); - if (!IS_SET_GUI(*gui)) - continue; - ktmp[i].gui_uid = gui->gui_uid; - - for(l = 0; l < KEYSIZE/8; l++) { - obits.byte = gui->gui_tcfskey[9*l+8]; - ktmp[i].gui_tcfskey[8*l+0] = mod(obits.bf.b1<<8 | gui->gui_tcfskey[9*l+0]); - ktmp[i].gui_tcfskey[8*l+1] = mod(obits.bf.b2<<8 | gui->gui_tcfskey[9*l+1]); - ktmp[i].gui_tcfskey[8*l+2] = mod(obits.bf.b3<<8 | gui->gui_tcfskey[9*l+2]); - ktmp[i].gui_tcfskey[8*l+3] = mod(obits.bf.b4<<8 | gui->gui_tcfskey[9*l+3]); - ktmp[i].gui_tcfskey[8*l+4] = mod(obits.bf.b5<<8 | gui->gui_tcfskey[9*l+4]); - ktmp[i].gui_tcfskey[8*l+5] = mod(obits.bf.b6<<8 | gui->gui_tcfskey[9*l+5]); - ktmp[i].gui_tcfskey[8*l+6] = mod(obits.bf.b7<<8 | gui->gui_tcfskey[9*l+6]); - ktmp[i].gui_tcfskey[8*l+7] = mod(obits.bf.b8<<8 | gui->gui_tcfskey[9*l+7]); - } - - i++; - } - - for (idx = 0;idx<KEYSIZE;idx++) { - kkk = 0; - for (i = 0; i < k; i++) { - tp = 1; - for (j = 0; j < k; j++) { - if (j != i) { - inv = inverse[mod(ktmp[i].gui_uid-ktmp[j].gui_uid)]; - ttt = mod(inv * mod(-ktmp[j].gui_uid)); - tp = mod(tp * ttt); - } - } - tp *= mod(ktmp[i].gui_tcfskey[idx]); - kkk= (tp + kkk); - } - gidkey[idx] = (unsigned char)mod(kkk); - } - return 0; -} - -void -doinverse(void) -{ - int i, j; - for (i = 0; i < 257; i++) { - for (j = 0; j < 257; j++) { - if (mod((i*j)) == 1) - inverse[i] = j; - } - } -} - -int -tcfs_interp(struct tcfs_mount *mp, tcfs_keytab_node* x) -{ - void *ks; - char key[KEYSIZE]; - - interp(x->kn_data,key); - ks = TCFS_INIT_KEY(mp,key); - if (!ks) - return ENOMEM; - - x->kn_key = ks; - return TCFS_OK; -} diff --git a/sys/miscfs/tcfs/tcfs_keytab.c b/sys/miscfs/tcfs/tcfs_keytab.c deleted file mode 100644 index bee51e6fdfd..00000000000 --- a/sys/miscfs/tcfs/tcfs_keytab.c +++ /dev/null @@ -1,477 +0,0 @@ -/* $OpenBSD: tcfs_keytab.c,v 1.3 2000/06/17 20:25:55 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/errno.h> -#include <sys/types.h> -#include <sys/systm.h> -#include <miscfs/tcfs/tcfs_keytab.h> -#include <sys/malloc.h> - -tcfs_keytab_node * -tcfs_keytab_newnode() -{ - tcfs_keytab_node *n; - - n = (tcfs_keytab_node*)malloc(sizeof(tcfs_keytab_node), - M_FREE, M_NOWAIT); - if (!n) - return n; - - n->kn_key = (void*)0; - n->kn_data = (tcfs_grp_data*)0; - n->kn_type = CLEAN; - n->kn_n = n->kn_p = NIL; - return n; -} - -tcfs_keytab_node * -tcfs_keytab_newgidnode() -{ - tcfs_keytab_node *n; - tcfs_grp_data *gd; - int i; - - n = tcfs_keytab_newnode(); - if (!n) - return n; - - gd = (tcfs_grp_data*)malloc(sizeof(tcfs_grp_data), M_FREE, M_NOWAIT); - if (!gd) { - tcfs_keytab_dispnode(n); - return NIL; - } - gd->gd_n = 0; - gd->gd_k = 0; - for(i = 0; i < MAXUSRPERGRP; i++); { - gd->gd_part[i].gui_flag = GUI_CLEAN; - gd->gd_part[i].gui_uid = -2; /* nfs nobody */ - } - - n->kn_data = gd; - n->kn_type = GID_KEY; - n->kn_key = (void*)0; - - return n; -} - - - -void -tcfs_keytab_dispnode(tcfs_keytab_node *n) -{ - if (n->kn_key) - free(n->kn_key,M_FREE); - - - if (n->kn_data) - free(n->kn_data,M_FREE); - - if (n) - free(n,M_FREE); -} - - - -tcfs_keytab * -tcfs_keytab_init() -{ - tcfs_keytab *x; - int i; - - x = (tcfs_keytab*)malloc(sizeof(tcfs_keytab),M_FREE,M_NOWAIT); - if (!x) - return x; - - x->cnt = 0; - - for(i = 0; i < KEYTABSIZE; i++) /* one bzero or similar even */ - x->node[i] = NIL; - - return x; -} - -void -tcfs_keytab_dispose(tcfs_keytab *kt) -{ - tcfs_keytab_node *p,*q; - int i = 0; - - if(kt->cnt) - for(i = 0;i < KEYTABSIZE; i++) { - p = kt->node[i]; - while (p != NIL) { - q = p->kn_n; - tcfs_keytab_dispnode(p); - p = q; - } - } - - free(kt, M_FREE); -} - -int -tcfs_keytab_check_uid(tcfs_keytab *t, uid_t uid) -{ - int pos; - tcfs_keytab_node *p; - - pos = tcfs_keytab_hash(uid); - p = t->node[pos]; - - while(p!=NIL) { - if (IS_UID_NODE(p) && p->kn_uid == uid) - return 1; - p=p->kn_n; - } - return 0; -} - -tcfs_keytab_node * -tcfs_keytab_fetch_uid(tcfs_keytab *t, uid_t uid) -{ - tcfs_keytab_node *p; - int pos; - - pos = tcfs_keytab_hash(uid); - p = t->node[pos]; - while (p != NIL) { - if (IS_UID_NODE(p) && p->kn_uid == uid) - break; - p = p->kn_n; - } - return p; -} - -int -tcfs_keytab_check_gid(tcfs_keytab *t, gid_t gid) -{ - tcfs_keytab_node *p; - int pos; - - pos = tcfs_keytab_hash(gid); - p = t->node[pos]; - - while (p!=NIL) { - if (IS_GID_NODE(p) && p->kn_gid == gid && - IS_READY_GD(p->kn_data)) - return 1; - p=p->kn_n; - } - return 0; -} - -tcfs_keytab_node * -tcfs_keytab_fetch_gid(tcfs_keytab *t, gid_t gid) -{ - tcfs_keytab_node *p; - int pos; - - pos = tcfs_keytab_hash(gid); - p = t->node[pos]; - while (p != NIL) { - if (IS_GID_NODE(p) && p->kn_gid == gid) - break; - p = p->kn_n; - } - return p; -} - -int -tcfs_keytab_check_pid(tcfs_keytab *t, uid_t uid, pid_t pid) -{ - int pos; - tcfs_keytab_node *p; - - pos = tcfs_keytab_hash(pid); - p = t->node[pos]; - - while (p != NIL) { - if (IS_PID_NODE(p) && p->kn_pid == pid && p->kn_uid == uid) - return 1; - p = p->kn_n; - } - return 0; -} - -tcfs_keytab_node * -tcfs_keytab_fetch_pid(tcfs_keytab *t, uid_t uid, pid_t pid) -{ - tcfs_keytab_node *p; - int pos; - - pos = tcfs_keytab_hash(pid); - p = t->node[pos]; - - while (p != NIL) { - if (IS_PID_NODE(p) && p->kn_pid == pid && p->kn_uid == uid) - break; - p = p->kn_n; - } - return (p); -} - -int -tcfs_keytab_push_pid(tcfs_keytab *t, uid_t uid, pid_t pid, void *ks) -{ - int pos = 0; - tcfs_keytab_node *p,*q; - - if (tcfs_keytab_fetch_pid(t, uid, pid) != NIL) - return (EINVAL); - - q = tcfs_keytab_newnode(); - if (!q) - return (ENOMEM); - - pos = tcfs_keytab_hash(pid); - - p = t->node[pos]; - q->kn_n = p; - if (p != NIL) - p->kn_p = q; - t->node[pos] = q; - t->cnt++; - - q->kn_uid = uid; - q->kn_pid = pid; - q->kn_key = ks; - q->kn_type = PID_KEY; - - return TCFS_OK; -} - -int -tcfs_keytab_push_uid(tcfs_keytab *t, uid_t uid, void *key) -{ - int pos = 0; - tcfs_keytab_node *p,*q; - - if (tcfs_keytab_fetch_uid(t,uid) != NIL) - return (EINVAL); - - q = tcfs_keytab_newnode(); - if (!q) - return (ENOMEM); - - pos = tcfs_keytab_hash(uid); - - p = t->node[pos]; - q->kn_n = p; - if (p != NIL) - p->kn_p = q; - t->node[pos] = q; - t->cnt++; - - q->kn_uid = uid; - q->kn_pid = 0; - q->kn_key = key; - q->kn_type = UID_KEY; - - return (TCFS_OK); -} - -int -tcfs_keytab_push_gidpart(struct tcfs_mount *mp,tcfs_keytab_node *kn,uid_t uid, - gid_t gid, int k, char *key) -{ - int i = 0; - int first = -1; - tcfs_grp_data *p; - - p = kn->kn_data; - - if (IS_FULL_GD(p)) - return (EINVAL); - - for (i = 0; i < MAXUSRPERGRP; i++) { - if (first < 0 && !IS_SET_GUI(p->gd_part[i])) { - first=i; - continue; - } - if(IS_SET_GUI(p->gd_part[i]) && p->gd_part[i].gui_uid == uid) - return (EINVAL); - } - - p->gd_part[first].gui_uid = uid; - p->gd_part[first].gui_flag = GUI_SET; - memcpy(p->gd_part[first].gui_tcfskey, key, KEYPARTSIZE); - if (IS_CLEAN_GD(p)) - p->gd_k = k; - - p->gd_n++; - - if (IS_READY_GD(p) && (!kn->kn_key)) - tcfs_interp(mp,kn); - - return (TCFS_OK); -} - -int -tcfs_keytab_rm_gidpart(tcfs_keytab_node *kn, uid_t uid, gid_t gid) -{ - int i = 0; - tcfs_grp_data *p; - - p = kn->kn_data; - - if (IS_CLEAN_GD(p)) - return (EINVAL); - - for (i = 0; i < MAXUSRPERGRP; i++) - if (IS_SET_GUI(p->gd_part[i])) - if(p->gd_part[i].gui_uid == uid) { - p->gd_part[i].gui_flag=GUI_CLEAN; - break; - } - - if ( i == MAXUSRPERGRP) - return EINVAL; - - p->gd_n--; - - if (!IS_READY_GD(p)) - if(kn->kn_key) { - free(kn->kn_key,M_FREE); - kn->kn_key=(void*)0; - } - - return (TCFS_OK); -} - -int -tcfs_keytab_push_gid(struct tcfs_mount *mp, tcfs_keytab *t, uid_t uid, - gid_t gid, int k, char *key) -{ - int pos = 0; - tcfs_keytab_node *p,*q,*r; - - q = r = tcfs_keytab_fetch_gid(t,gid); - - if (r == NIL) { - q = tcfs_keytab_newgidnode(); - if (!q) - return (ENOMEM); - - pos = tcfs_keytab_hash(gid); - - p = t->node[pos]; - q->kn_n = p; - if (p != NIL) - p->kn_p = q; - t->node[pos] = q; - t->cnt++; - - q->kn_gid = gid; - q->kn_pid = 0; - q->kn_uid = 0; - } - - return tcfs_keytab_push_gidpart(mp, q, uid, gid, k, key); -} - -int -tcfs_keytab_rm_uid(tcfs_keytab *t, uid_t uid) -{ - int pos = 0; - tcfs_keytab_node *p; - - p = tcfs_keytab_fetch_uid(t, uid); - if (p == NIL) - return (EINVAL); - - if (p->kn_p == NIL) { - pos = tcfs_keytab_hash(uid); - t->node[pos] = p->kn_n; - } else - p->kn_p->kn_n = p->kn_n; - - if (p->kn_n != NIL) - p->kn_n->kn_p = p->kn_p; - - t->cnt--; - tcfs_keytab_dispnode(p); - - return (TCFS_OK); -} - -int -tcfs_keytab_rm_pid(tcfs_keytab *t, uid_t uid, pid_t pid) -{ - int pos = 0; - tcfs_keytab_node *p; - - p = tcfs_keytab_fetch_pid(t,uid,pid); - if (p == NIL) - return (EINVAL); - - if(p->kn_p == NIL) { - pos = tcfs_keytab_hash(pid); - t->node[pos] = p->kn_n; - } else - p->kn_p->kn_n = p->kn_n; - - if(p->kn_n != NIL) - p->kn_n->kn_p = p->kn_p; - - t->cnt--; - tcfs_keytab_dispnode(p); - - return (TCFS_OK); -} - -int -tcfs_keytab_rm_gid(tcfs_keytab *t, uid_t uid, gid_t gid) -{ - int pos = 0,ret = 0; - tcfs_keytab_node *p; - - p = tcfs_keytab_fetch_gid(t,gid); - if (p == NIL) - return (EINVAL); - - ret = tcfs_keytab_rm_gidpart(p, uid, gid); - - if (ret) - return (ret); - - if (!IS_CLEAN_GD(p->kn_data)) - return (TCFS_OK); - - if (p->kn_p == NIL) { - pos = tcfs_keytab_hash(gid); - t->node[pos] = p->kn_n; - } else - p->kn_p->kn_n = p->kn_n; - - if (p->kn_n != NIL) - p->kn_n->kn_p = p->kn_p; - - t->cnt--; - tcfs_keytab_dispnode(p); - - return (TCFS_OK); -} diff --git a/sys/miscfs/tcfs/tcfs_keytab.h b/sys/miscfs/tcfs/tcfs_keytab.h deleted file mode 100644 index 39026b2edc5..00000000000 --- a/sys/miscfs/tcfs/tcfs_keytab.h +++ /dev/null @@ -1,123 +0,0 @@ -/* $OpenBSD: tcfs_keytab.h,v 1.7 2002/03/14 03:16:10 millert Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef _TCFS_KEYTAB_H_ -#define _TCFS_KEYTAB_H_ - -#include <sys/types.h> -struct tcfs_mount; - -#define KEYTABSIZE 20 -#define KEYSIZE 32 -#define KEYPARTSIZE (KEYSIZE+KEYSIZE/8) - -#define CLEAN 0x00 -#define PID_BIT 0x01 -#define UID_KEY 0x02 -#define GID_KEY 0x04 -#define PID_KEY (PID_BIT|UID_KEY) - -#define IS_GID_NODE(np) (((np)->kn_type)&GID_KEY) -#define IS_UID_NODE(np) (((np)->kn_type)&UID_KEY) -#define IS_PID_NODE(np) ((((np)->kn_type)&PID_BIT)&&(IS_UID_NODE((np)))) - -#ifndef TCFS_OK -#define TCFS_OK 0 -#endif - -#define MAXUSRPERGRP 10 - -typedef struct { - unsigned char gui_flag; - uid_t gui_uid; - unsigned char gui_tcfskey[KEYPARTSIZE]; -} tcfs_grp_uinfo; - -#define GUI_CLEAN 0 -#define GUI_SET 1 -#define IS_SET_GUI(gui) ((gui).gui_flag==GUI_SET) - -typedef struct _grp_data { - int gd_flag; - int gd_n; - int gd_k; - tcfs_grp_uinfo gd_part[MAXUSRPERGRP]; -} tcfs_grp_data; - -#define IS_CLEAN_GD(gd) ((gd)->gd_n==0) -#define IS_FULL_GD(gd) ((gd)->gd_n==MAXUSRPERGRP) -#define IS_READY_GD(gd) (((gd)->gd_n)>=((gd)->gd_k)) - -typedef struct _kn { - pid_t kn_pid; - uid_t kn_uid; - gid_t kn_gid; - unsigned int kn_type; - - void *kn_key; -#undef kn_data - tcfs_grp_data *kn_data; - - struct _kn *kn_n; - struct _kn *kn_p; -} tcfs_keytab_node; - -typedef struct _kt { - unsigned int cnt; - tcfs_keytab_node* node[KEYTABSIZE]; -} tcfs_keytab; - -#define NIL ((tcfs_keytab_node*)0) - -#ifdef _HAVE_HASH_ -int _tcfs_keytab_hash(unsigned int); -#define tcfs_keytab_hash(x) _tcfs_keytab_hash((unsigned int)(x)) -#else -#define tcfs_keytab_hash(u) ((u)%KEYTABSIZE) -#endif - -tcfs_keytab_node *tcfs_keytab_newnode(void); -tcfs_keytab_node *tcfs_keytab_newgidnode(void); -void tcfs_keytab_dispnode(tcfs_keytab_node*); -tcfs_keytab *tcfs_keytab_init(void); -void tcfs_keytab_dispose(tcfs_keytab*); -tcfs_keytab_node *tcfs_keytab_fetch_uid(tcfs_keytab *, uid_t); -int tcfs_keytab_push_gidpart(struct tcfs_mount *,tcfs_keytab_node *,uid_t, gid_t,int,char*); -tcfs_keytab_node *tcfs_keytab_fetch_gid(tcfs_keytab *, gid_t); -tcfs_keytab_node *tcfs_keytab_fetch_pid(tcfs_keytab *, uid_t, pid_t); -int tcfs_keytab_push_uid(tcfs_keytab*, uid_t, void* ); -int tcfs_keytab_push_pid(tcfs_keytab*, uid_t, pid_t, void *); -int tcfs_keytab_push_gid(struct tcfs_mount *,tcfs_keytab *, uid_t, gid_t, int, char *); -int tcfs_keytab_rm_uid(tcfs_keytab *, uid_t); -int tcfs_keytab_rm_pid(tcfs_keytab *, uid_t, pid_t); -int tcfs_keytab_rm_gidpart(tcfs_keytab_node *,uid_t, gid_t); -int tcfs_keytab_rm_gid(tcfs_keytab*, uid_t, gid_t); -int tcfs_interp(struct tcfs_mount *, tcfs_keytab_node*); -int tcfs_keytab_check_uid(tcfs_keytab *, uid_t); -int tcfs_keytab_check_pid(tcfs_keytab *, uid_t, pid_t); -int tcfs_keytab_check_gid(tcfs_keytab *, gid_t); -#endif /* _TCFS_KEYTAB_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_mount.h b/sys/miscfs/tcfs/tcfs_mount.h deleted file mode 100644 index de6d87afe6d..00000000000 --- a/sys/miscfs/tcfs/tcfs_mount.h +++ /dev/null @@ -1,66 +0,0 @@ -/* $OpenBSD: tcfs_mount.h,v 1.4 2000/06/18 16:23:10 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef _TCFS_MOUNT_H_ -#define _TCFS_MOUNT_H_ - -#include <miscfs/tcfs/tcfs_keytab.h> -#include <miscfs/tcfs/tcfs_version.h> - -#define MaxCipherNameLen 8 -struct tcfs_status { - int status; - int n_ukey; - int n_gkey; - int tcfs_version; - char cipher_desc[MaxCipherNameLen]; - int cipher_keysize; - int cipher_version; -}; - -struct tcfs_args { - char *target; /* Target of loopback */ - u_char tcfs_key[KEYSIZE]; - int cipher_num; - int cmd; /* direttiva */ - uid_t user; /* utente */ - pid_t proc; /* processo */ - gid_t group; /* gruppo */ - int treshold; /* soglia grpkey */ - struct tcfs_status st; -}; - -struct tcfs_mount { - struct mount *tcfsm_vfs; - struct vnode *tcfsm_rootvp; /* Reference to root tcfs_node */ - void *ks; - tcfs_keytab *tcfs_uid_kt; - tcfs_keytab *tcfs_gid_kt; - int tcfs_cipher_num; -}; - -#endif /* _TCFS_MOUNT_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_rw.c b/sys/miscfs/tcfs/tcfs_rw.c deleted file mode 100644 index 906854ab916..00000000000 --- a/sys/miscfs/tcfs/tcfs_rw.c +++ /dev/null @@ -1,576 +0,0 @@ -/* $OpenBSD: tcfs_rw.c,v 1.4 2000/06/18 06:26:12 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> - -#include <miscfs/tcfs/tcfs.h> -#include <miscfs/tcfs/tcfs_rw.h> -#include <miscfs/tcfs/tcfs_cipher.h> - -tcfs_opinfo -tcfs_get_opinfo(void *a) -{ - struct vop_read_args *arg; - tcfs_opinfo r; - tcfs_fileinfo *i; - int iscr = 0; - - arg = (struct vop_read_args*)a; - - r.i = tcfs_get_fileinfo(a); - i = &(r.i); - - iscr = FI_CFLAG(i) || FI_GSHAR(i); - - if(!iscr) { - r.tcfs_op_desc=TCFS_NONE; - return (r); - } - - - r.off = arg->a_uio->uio_offset; - r.req = arg->a_uio->uio_resid; - - if (arg->a_uio->uio_rw == UIO_READ) { - if(r.off<FI_ENDOF(i)-FI_SPURE(i)) { - r.tcfs_op_desc = TCFS_READ_C1; - r.out_boff = BOFF(&r); - r.out_foff = (LAST(&r)>FI_ENDOF(i)-FI_SPURE(i) ? - FI_ENDOF(i) : P_FOFF(&r)); - r.in_boff = r.out_boff; - r.in_foff = r.out_foff; - return (r); - } else { - r.tcfs_op_desc = TCFS_READ_C2; - r.out_boff = 0; - r.out_foff = 0; - return (r); - } - } - if (arg->a_uio->uio_rw == UIO_WRITE) { - if (arg->a_ioflag&IO_APPEND) { - r.off = FI_ENDOF(i)-FI_SPURE(i); - arg->a_ioflag &= ~(IO_APPEND); - } - if (LAST(&r) < FI_ENDOF(i) - FI_SPURE(i)) { - if (FI_ENDOF(i) - FI_SPURE(i) - LAST(&r) > BLOCKSIZE) { - r.tcfs_op_desc = TCFS_WRITE_C1; - r.out_boff = BOFF(&r); - r.out_foff = FOFF(&r); - r.in_boff = r.out_boff; - r.in_foff = r.out_foff; - return (r); - } else { - r.tcfs_op_desc = TCFS_WRITE_C2; - r.out_boff = BOFF(&r); - r.out_foff = FI_ENDOF(i) - 1; - r.in_boff = r.out_boff; - r.in_foff = r.out_foff; - return (r); - } - } - if (LAST(&r) >= FI_ENDOF(i) - FI_SPURE(i)) { - r.out_boff = BOFF(&r); - r.out_foff = P_FOFF(&r); - if (r.off <= FI_ENDOF(i) - FI_SPURE(i)) { - r.tcfs_op_desc = TCFS_WRITE_C3; - r.in_boff = r.out_boff; - r.in_foff = r.out_foff; - return (r); - } else if(D_BOFF(FI_ENDOF(i))==D_BOFF(r.off)) { - r.tcfs_op_desc = TCFS_WRITE_C4; - r.in_boff = r.out_boff; - r.in_foff = r.out_foff; - return (r); - } else { - r.tcfs_op_desc = TCFS_WRITE_C5; - r.in_boff = D_BOFF(FI_ENDOF(i)); - r.in_foff = D_FOFF(FI_ENDOF(i)); - r.out_boff = BOFF(&r); - r.out_foff = P_FOFF(&r); - return (r); - } - } - } - return (r); -} - -char * -tcfs_new_uio_obs(struct uio *old, struct uio **new, int off, int bufsize) -{ - char *buffer; - struct uio *u; - struct iovec *n; - - u = malloc(sizeof(struct uio), M_FREE, M_NOWAIT); - if (!u) - return (NULL); - n = malloc(sizeof(struct iovec), M_FREE, M_NOWAIT); - if (!n) { - free(u, M_FREE); - return (NULL); - } - buffer = malloc(bufsize,M_FREE,M_NOWAIT); - if (!buffer) { - free(u, M_FREE); - free(n, M_FREE); - return (NULL); - } - - u->uio_offset = off; - u->uio_resid = bufsize; - u->uio_iovcnt = 1; - u->uio_segflg = UIO_SYSSPACE; - u->uio_rw = old->uio_rw; - u->uio_procp = old->uio_procp; - u->uio_iov = n; - n->iov_base = buffer; - n->iov_len = bufsize; - - *new = u; - return (buffer); -} - -char * -tcfs_new_uio_i(struct uio *old, struct uio **new, tcfs_opinfo *r) -{ - int bufsize; - char *buffer = NULL; - - - switch(r->tcfs_op_desc) { - case TCFS_READ_C2: - buffer = NULL; - return buffer; - default: - case TCFS_READ_C1: - case TCFS_WRITE_C1: - case TCFS_WRITE_C2: - case TCFS_WRITE_C3: - bufsize = r->in_foff-r->in_boff + 1; - break; - } - - return tcfs_new_uio_obs(old, new, r->in_boff, bufsize); -} - -void -tcfs_dispose_new_uio(struct uio *vec) -{ - void *p, *q; - p = (void*)vec; - q = (void*)vec->uio_iov; - - free(p, M_FREE); - free(q, M_FREE); -} - -int -tcfs_read(v) - void *v; -{ - char *buffer, /* buffer per la read interna */ - *buffp, /* puntatore all'inizio dei dati utili */ - *buffpf; /* puntatore alla fine dei dati utili */ - - int bufsize = 0; /* taglia del buffer allocato */ - - struct uio - *new, /* puntatore all'uio rifatto */ - *old; /* puntatore all'uio originale */ - - int terr, /* val. ritorno read interna */ - chdap, /* caratteri da passare */ - chread, /* caratteri letti dalla read int. */ - r_off, /* offset raggiunto */ - e_spure; /* spure effettivamente letti */ - - struct vop_read_args *arg; - tcfs_opinfo f; - tcfs_fileinfo *i; - - struct ucred *ucred; - struct proc *procp; - - struct tcfs_mount *mp; - void *ks; - - f = tcfs_get_opinfo(v); - - if (f.tcfs_op_desc == TCFS_NONE) - return tcfs_bypass(v); - - i = &(f.i); - - arg = (struct vop_read_args *)v; - mp = MOUNTTOTCFSMOUNT(arg->a_vp->v_mount); - ucred = arg->a_cred; - procp = arg->a_uio->uio_procp; - - if (FI_GSHAR(i)) { - ks = tcfs_getgkey(ucred,procp,arg->a_vp); - if (!ks) { - return (EACCES); - } - } else { - ks = tcfs_getpkey(ucred,procp,arg->a_vp); - if (!ks) - ks = tcfs_getukey(ucred,procp,arg->a_vp); - if (!ks) - return (EACCES); - } - - old = arg->a_uio; - buffer = tcfs_new_uio_i(old, &new, &f); - - if (buffer == NULL) - return (0); - - arg->a_uio = new; - bufsize = f.out_foff - f.out_boff + 1; - - terr = tcfs_bypass(arg); - chread = bufsize - new->uio_resid; - - mkdecrypt(mp, buffer, chread, ks); - - r_off = f.out_boff + chread; - - if (r_off >= FI_ENDOF(i)) - e_spure = FI_SPURE(i); - else - if(r_off > FI_ENDOF(i) - FI_SPURE(i)) - e_spure = FI_SPURE(i) - FI_ENDOF(i) + r_off; - else - e_spure = 0; - - buffp = buffer + ROFF(&f); - if (chread>ROFF(&f)) { - chdap = MIN(f.req, chread-ROFF(&f) - e_spure); - buffpf = buffp + chdap; - - uiomove(buffp, chdap, old); - } - arg->a_uio = old; - tcfs_dispose_new_uio(new); - free(buffer, M_FREE); - - return terr; -} - -int -tcfs_write(v) - void *v; -{ - char *buffer, /* buffer per la read interna */ - *buffp, /* puntatore all'inizio dei dati utili */ - *buffpf; /* puntatore alla fine dei dati utili */ - - struct uio - *tmp, /* uio per la dimensione di un blocco */ - *old; /* puntatore all'uio originale della chiamata */ - - - int bufsize, /* num. caratteri req. read interna */ - terr, /* val. ritorno read interna */ - chdap, /* caratteri da passare */ - chread = 0, /* caratteri letti dalla read int. */ - chwrote, e_chwrote, - spure = 0; /* ho scritto fino a qui */ - - tcfs_opinfo f; - tcfs_fileinfo *i; - - struct vop_read_args *arg; - struct ucred *ucred; - struct proc *procp; - void *ks; - struct tcfs_mount *mp; - - int e; - - arg = (struct vop_read_args *)v; - ucred = arg->a_cred; - procp = arg->a_uio->uio_procp; - mp = MOUNTTOTCFSMOUNT(arg->a_vp->v_mount); - - f = tcfs_get_opinfo(arg); - - if (f.tcfs_op_desc == TCFS_NONE) - return tcfs_bypass(v); - - i = &(f.i); - - if (FI_GSHAR(i)) { - ks = tcfs_getgkey(ucred,procp,arg->a_vp); - if (!ks) - return (EACCES); - } else { - ks = tcfs_getpkey(ucred,procp,arg->a_vp); - if (!ks) - ks = tcfs_getukey(ucred,procp,arg->a_vp); - if (!ks) - return (EACCES); - } - - old = arg->a_uio; - - buffer = (char*)tcfs_new_uio_i(old, &tmp, &f); - if (buffer == NULL) - return (EFAULT); - - arg->a_uio = tmp; - arg->a_desc = VDESC(vop_read); - arg->a_uio->uio_rw = UIO_READ; - - bufsize = f.in_foff-f.in_boff+1; - - terr = tcfs_bypass(arg); - - switch(f.tcfs_op_desc) { - case TCFS_WRITE_C1: - case TCFS_WRITE_C2: - if(tmp->uio_resid != 0) - goto ret; - - chread = bufsize; - break; - - case TCFS_WRITE_C3: - case TCFS_WRITE_C4: - if(tmp->uio_resid != (P_FOFF(&f) - FI_ENDOF(i) + 1)) - goto ret; - - chread = bufsize; - break; - - case TCFS_WRITE_C5: - if(tmp->uio_resid != (D_FOFF(FI_ENDOF(i)) - FI_ENDOF(i) + 1)) - goto ret; - chread = bufsize; - } - - mkdecrypt(mp,buffer,chread,ks); - - if (f.tcfs_op_desc == TCFS_WRITE_C4) { - for(e = FI_ENDOF(i) - FI_SPURE(i); e < f.off; e++) - *(buffer + e - f.out_boff) = '\0'; - } - - if (f.tcfs_op_desc != TCFS_WRITE_C5) { - buffp = buffer + ROFF(&f); - chdap = f.req; - buffpf = buffp + chdap; - - uiomove(buffp,chdap,old); - - } else { /*if not TCFS_WRITE_C5 */ - for (e = FI_ENDOF(i) - FI_SPURE(i) - f.in_boff; e < bufsize; - e++) - *(buffer+e)='\0'; - } - - mkencrypt(mp, buffer, bufsize, ks); - - arg->a_desc = VDESC(vop_write); - arg->a_uio->uio_rw = UIO_WRITE; - arg->a_uio->uio_resid = bufsize; - arg->a_uio->uio_offset = f.in_boff; - arg->a_uio->uio_iov->iov_base = buffer; - arg->a_uio->uio_iov->iov_len = bufsize; - terr = tcfs_bypass(arg); - - if (f.tcfs_op_desc == TCFS_WRITE_C5) { - tcfs_dispose_new_uio(tmp); - free(buffer, M_FREE); - - bufsize = f.out_foff - f.out_boff + 1; - buffer = tcfs_new_uio_obs(old, &tmp, f.out_boff, bufsize); - arg->a_uio = tmp; - arg->a_desc = VDESC(vop_write); - arg->a_uio->uio_rw = UIO_WRITE; - - for(e = 0; e < ROFF(&f); e++) - *(buffer+e) = '\0'; - - buffp = buffer + ROFF(&f); - chdap = f.req; - buffpf = buffp+chdap; - - uiomove(buffp, chdap, old); - mkencrypt(mp, buffer, bufsize, ks); - terr = tcfs_bypass(arg); - - } - - chwrote = bufsize-tmp->uio_resid; - e_chwrote = MIN(f.req, chwrote-ROFF(&f)); - - switch(f.tcfs_op_desc) { - case TCFS_WRITE_C1: - case TCFS_WRITE_C2: - break; - case TCFS_WRITE_C3: - if ((f.in_boff + chwrote) > FI_ENDOF(i) - FI_SPURE(i)) { - if(chwrote > f.req){ - spure = D_SPURE(f.off + f.req); - } else { - spure = D_SPURE(f.out_boff + chwrote); - } - - FI_SET_SP(i, spure); - tcfs_set_fileinfo(v, i); - } - break; - case TCFS_WRITE_C4: - case TCFS_WRITE_C5: - spure = D_SPURE(f.off + f.req); - FI_SET_SP(i, spure); - tcfs_set_fileinfo(v, i); - break; - } - - old->uio_resid = f.req - e_chwrote; - - ret: - arg->a_uio = old; - tcfs_dispose_new_uio(tmp); - free(buffer, M_FREE); - return (terr); -} - -int -tcfs_ed(struct vnode *v, struct proc *p, struct ucred *c, tcfs_fileinfo *i) -{ - struct vop_read_args ra; - struct vop_write_args wa; - struct uio *u; - struct iovec *n; - char *buff; - unsigned long csize, resid, w_resid; - unsigned long size, w_size; - int bufsize, e; - int retval, sp; - void *ks; - int encr = 0; - struct tcfs_mount *mp; - - mp = MOUNTTOTCFSMOUNT(v->v_mount); - encr = FI_CFLAG(i) || FI_GSHAR(i); - - if (v->v_type != VREG) - return (0); - - if (FI_GSHAR(i)) { - ks = tcfs_getgkey(c, p, v); - if(!ks) - return (EACCES); - } else { - ks = tcfs_getpkey(c,p,v); - if (!ks) - ks = tcfs_getukey(c,p,v); - if (!ks) - return (EACCES); - } - - u = malloc(sizeof(struct uio), M_FREE, M_NOWAIT); - n = malloc(sizeof(struct iovec), M_FREE, M_NOWAIT); - - size = FI_ENDOF(i); - - if (encr) { - resid = size; - w_size = D_PFOFF(size); - sp = D_SPURE(size); - } else { - resid = D_PFOFF(size); - w_size= size - FI_SPURE(i); - sp = -FI_SPURE(i); - } - - csize = 0; - w_resid = w_size; - - bufsize = BLOCKSIZE; - - buff = malloc(BLOCKSIZE, M_FREE, M_NOWAIT); - - u->uio_offset = 0; - u->uio_resid = bufsize; - u->uio_iovcnt = 1; - u->uio_segflg = UIO_SYSSPACE; - u->uio_procp = p; - u->uio_iov = n; - - wa.a_desc = VDESC(vop_write); - ra.a_desc = VDESC(vop_read); - wa.a_vp = ra.a_vp = v; - wa.a_cred = ra.a_cred = c; - wa.a_ioflag = ra.a_ioflag = 0; - wa.a_uio = ra.a_uio = u; - - - for (e = 0; e < D_NOBLK(size); e++) { - int x, y; - - u->uio_offset = csize; - u->uio_rw = UIO_READ; - n->iov_base = buff; - n->iov_len = u->uio_resid = x = MIN(bufsize, resid + 1); - - retval = tcfs_bypass((void*)&ra); - - u->uio_offset = csize; - u->uio_rw = UIO_WRITE; - n->iov_base = buff; - n->iov_len = u->uio_resid = y = MIN(bufsize, w_resid + 1); - - if(!encr) - mkdecrypt(mp, buff, x, ks); - else - mkencrypt(mp, buff, y, ks); - - retval = tcfs_bypass((void*)&wa); - - resid -= x; csize += x; - w_resid -= y; - - /* I should call the scheduler here */ - } - - tcfs_dispose_new_uio(u); - return (sp); -} diff --git a/sys/miscfs/tcfs/tcfs_rw.h b/sys/miscfs/tcfs/tcfs_rw.h deleted file mode 100644 index 964d4f2daf8..00000000000 --- a/sys/miscfs/tcfs/tcfs_rw.h +++ /dev/null @@ -1,81 +0,0 @@ -/* $OpenBSD: tcfs_rw.h,v 1.3 2000/06/17 20:25:55 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _TCFS_RW_H_ -#define _TCFS_RW_H_ - -/* Gestione informazioni sui files cifrati */ -#include <miscfs/tcfs/tcfs_fileinfo.h> - -typedef struct { - tcfs_fileinfo i; - int off; - int req; - int tcfs_op_desc; - int in_boff; - int in_foff; - int out_boff; - int out_foff; -} tcfs_opinfo; - -/* tcfs_opinfo x */ - -#define ROFF(x) ((x)->off%BLOCKSIZE) -#define LAST(x) ((x)->off+(x)->req-1) -#define BOFF(x) (((x)->off/BLOCKSIZE)*BLOCKSIZE) -#define FOFF(x) (LAST((x))+BLOCKSIZE-(LAST((x))%BLOCKSIZE+1)) -#define P_BOFF(x) (((x)->off/SBLOCKSIZE)*SBLOCKSIZE) -#define P_FOFF(x) (LAST((x))+SBLOCKSIZE-(LAST((x))%SBLOCKSIZE+1)) -#define SPURE(x) ((x)->req%SBLOCKSIZE?(SBLOCKSIZE-(x)->req%SBLOCKSIZE):0) - -/* int o */ -#define D_BOFF(o) (((o)/BLOCKSIZE)*BLOCKSIZE) -#define D_FOFF(o) ((o)+BLOCKSIZE-((o)%BLOCKSIZE+1)) -#define D_PFOFF(o) ((o)+SBLOCKSIZE-((o)%SBLOCKSIZE+1)) -#define D_SPURE(o) ((o)%SBLOCKSIZE?(SBLOCKSIZE-(o)%SBLOCKSIZE):0) -#define D_NOBLK(o) ((o)/BLOCKSIZE+(o%BLOCKSIZE?1:0)) - -#define TCFS_NONE 0 -#define TCFS_READ_C1 1 -#define TCFS_READ_C2 2 -#define TCFS_WRITE_C1 3 -#define TCFS_WRITE_C2 4 -#define TCFS_WRITE_C3 5 -#define TCFS_WRITE_C4 6 -#define TCFS_WRITE_C5 7 - -/* prototypes */ - -char *tcfs_new_uio_i(struct uio*,struct uio**,tcfs_opinfo*); -char *tcfs_new_uio_obs(struct uio*,struct uio**,int off, int ireq); -void tcfs_dispose_new_uio(struct uio *); -void dispose_new_uio(struct uio *); -int tcfs_ed(struct vnode*, struct proc*, struct ucred *, tcfs_fileinfo *); -tcfs_opinfo tcfs_get_opinfo(void*); - -#endif /* _TCFS_RW_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_subr.c b/sys/miscfs/tcfs/tcfs_subr.c deleted file mode 100644 index e497cf9c71d..00000000000 --- a/sys/miscfs/tcfs/tcfs_subr.c +++ /dev/null @@ -1,354 +0,0 @@ -/* $OpenBSD: tcfs_subr.c,v 1.4 2002/06/14 21:35:00 todd Exp $ */ -/* $NetBSD: tcfs_subr.c,v 1.6 1996/05/10 22:50:52 jtk Exp $ */ - -/* - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software donated to Berkeley by - * Jan-Simon Pendry. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * 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: - * 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 - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: Id: lofs_subr.c,v 1.11 1992/05/30 10:05:43 jsp Exp - * @(#)tcfs_subr.c 8.4 (Berkeley) 1/21/94 - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <miscfs/specfs/specdev.h> -#include <miscfs/tcfs/tcfs.h> - -#define LOG2_SIZEVNODE 7 /* log2(sizeof struct vnode) */ -#define NTCFSNODECACHE 16 - -/* - * Null layer cache: - * Each cache entry holds a reference to the lower vnode - * along with a pointer to the alias vnode. When an - * entry is added the lower vnode is VREF'd. When the - * alias is removed the lower vnode is vrele'd. - */ - -#define TCFS_NHASH(vp) \ - (&tcfs_node_hashtbl[(((u_long)vp)>>LOG2_SIZEVNODE) & tcfs_node_hash]) -LIST_HEAD(tcfs_node_hashhead, tcfs_node) *tcfs_node_hashtbl; -u_long tcfs_node_hash; - -static struct vnode * - tcfs_node_find(struct mount *, struct vnode *); -static int - tcfs_node_alloc(struct mount *, struct vnode *, struct vnode **); -/* - * Initialise cache headers - */ -/*ARGSUSED*/ -int -tcfs_init(vfsp) - struct vfsconf *vfsp; -{ - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_init\n"); /* printed during system boot */ -#endif - tcfs_node_hashtbl = hashinit(NTCFSNODECACHE, M_CACHE, M_WAITOK, &tcfs_node_hash); - return (0); -} - -/* - * Return a VREF'ed alias for lower vnode if already exists, else 0. - */ -static struct vnode * -tcfs_node_find(mp, lowervp) - struct mount *mp; - struct vnode *lowervp; -{ - struct tcfs_node_hashhead *hd; - struct tcfs_node *a; - struct vnode *vp; - struct proc *p = curproc; - - /* - * Find hash base, and then search the (two-way) linked - * list looking for a tcfs_node structure which is referencing - * the lower vnode. If found, the increment the tcfs_node - * reference count (but NOT the lower vnode's VREF counter). - */ - hd = TCFS_NHASH(lowervp); -loop: - for (a = hd->lh_first; a != 0; a = a->tcfs_hash.le_next) { - if (a->tcfs_lowervp == lowervp && TCFSTOV(a)->v_mount == mp) { - vp = TCFSTOV(a); - /* - * We need vget for the VXLOCK - * stuff, but we don't want to lock - * the lower node. - */ - if (vget(vp, 0, p)) { - printf ("tcfs_node_find: vget failed.\n"); - goto loop; - }; - return (vp); - } - } - - return (NULLVP); -} - -/* - * Make a new tcfs_node node. - * Vp is the alias vnode, lowervp is the lower vnode. - * Maintain a reference to lowervp. - */ -static int -tcfs_node_alloc(mp, lowervp, vpp) - struct mount *mp; - struct vnode *lowervp; - struct vnode **vpp; -{ - struct tcfs_node_hashhead *hd; - struct tcfs_node *xp; - struct vnode *vp, *nvp; - int error; - extern int (**dead_vnodeop_p)(void *); - struct proc *p = curproc; - - - MALLOC(xp, struct tcfs_node *, sizeof(struct tcfs_node), M_TEMP, - M_WAITOK); - - if ((error = getnewvnode(VT_TCFS, mp, tcfs_vnodeop_p, vpp)) != 0) { - FREE (xp, M_TEMP); - return (error); - } - - vp = *vpp; - vp->v_type = lowervp->v_type; - - if (vp->v_type == VBLK || vp->v_type == VCHR) { - MALLOC(vp->v_specinfo, struct specinfo *, - sizeof(struct specinfo), M_VNODE, M_WAITOK); - vp->v_rdev = lowervp->v_rdev; - } - - vp->v_data = xp; - xp->tcfs_vnode = vp; - xp->tcfs_lowervp = lowervp; - /* - * Before we insert our new node onto the hash chains, - * check to see if someone else has beaten us to it. - * (We could have slept in MALLOC.) - */ - if ((nvp = tcfs_node_find(mp, lowervp)) != NULL) { - *vpp = nvp; - - /* free the substructures we've allocated. */ - FREE(xp, M_TEMP); - if (vp->v_type == VBLK || vp->v_type == VCHR) - FREE(vp->v_specinfo, M_VNODE); - - vp->v_type = VBAD; /* node is discarded */ - vp->v_op = dead_vnodeop_p; /* so ops will still work */ - vrele(vp); /* get rid of it. */ - return (0); - } - - /* - * XXX if it's a device node, it needs to be checkalias()ed. - * however, for locking reasons, that's just not possible. - * so we have to do most of the dirty work inline. Note that - * this is a limited case; we know that there's going to be - * an alias, and we know that that alias will be a "real" - * device node, i.e. not tagged VT_NON. - */ - if (vp->v_type == VBLK || vp->v_type == VCHR) { - struct vnode *cvp, **cvpp; - - cvpp = &speclisth[SPECHASH(vp->v_rdev)]; -loop: - for (cvp = *cvpp; cvp; cvp = cvp->v_specnext) { - if (vp->v_rdev != cvp->v_rdev || - vp->v_type != cvp->v_type) - continue; - - /* - * Alias, but not in use, so flush it out. - */ - if (cvp->v_usecount == 0) { - vgone(cvp); - goto loop; - } - if (vget(cvp, 0, p)) /* can't lock; will die! */ - goto loop; - break; - } - - vp->v_hashchain = cvpp; - vp->v_specnext = *cvpp; - vp->v_specmountpoint = NULL; - *cvpp = vp; -#ifdef DIAGNOSTIC - if (cvp == NULLVP) - panic("tcfs_node_alloc: no alias for device"); -#endif - vp->v_flag |= VALIASED; - cvp->v_flag |= VALIASED; - vrele(cvp); - } - /* XXX end of transmogrified checkalias() */ - - VREF(lowervp); /* Extra VREF will be vrele'd in tcfs_node_create */ - hd = TCFS_NHASH(lowervp); - LIST_INSERT_HEAD(hd, xp, tcfs_hash); - return (0); -} - - -/* - * Try to find an existing tcfs_node vnode referring - * to it, otherwise make a new tcfs_node vnode which - * contains a reference to the lower vnode. - * - * >>> we assume that the lower node is already locked upon entry, so we mark - * the upper node as locked too (if caller requests it). <<< - */ -int -tcfs_node_create(mp, lowervp, newvpp, takelock) - struct mount *mp; - struct vnode *lowervp; - struct vnode **newvpp; - int takelock; -{ - struct vnode *aliasvp; - - if ((aliasvp = tcfs_node_find(mp, lowervp)) != NULL) { - /* - * tcfs_node_find has taken another reference - * to the alias vnode. - */ -#ifdef TCFS_DIAGNOSTIC - vprint("tcfs_node_create: exists", aliasvp); -#endif - /* VREF(aliasvp); --- done in tcfs_node_find */ - } else { - int error; - - /* - * Get new vnode. - */ -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_node_create: create new alias vnode\n"); -#endif - - /* - * Make new vnode reference the tcfs_node. - */ - if ((error = tcfs_node_alloc(mp, lowervp, &aliasvp)) != 0) - return error; - - /* - * aliasvp is already VREF'd by getnewvnode() - */ - } - - vrele(lowervp); - -#ifdef DIAGNOSTIC - if (lowervp->v_usecount < 1) { - /* Should never happen... */ - vprint("tcfs_node_create: alias", aliasvp); - panic("tcfs_node_create: lower has 0 usecount."); - }; -#endif - -#ifdef TCFS_DIAGNOSTIC - vprint("tcfs_node_create: alias", aliasvp); -#endif - - *newvpp = aliasvp; - return (0); -} - -#ifdef TCFS_DIAGNOSTIC -int tcfs_checkvp_barrier = 1; -struct vnode * -tcfs_checkvp(vp, fil, lno) - struct vnode *vp; - char *fil; - int lno; -{ - struct tcfs_node *a = VTOTCFS(vp); -#ifdef notyet - /* - * Can't do this check because vop_reclaim runs - * with a funny vop vector. - */ - if (vp->v_op != tcfs_vnodeop_p) { - printf ("tcfs_checkvp: on non-tcfs-node\n"); - while (tcfs_checkvp_barrier) /*WAIT*/ ; - panic("tcfs_checkvp"); - }; -#endif - if (a->tcfs_lowervp == TCFS) { - /* Should never happen */ - int i; u_long *p; - printf("vp = %p, ZERO ptr\n", vp); - for (p = (u_long *) a, i = 0; i < 8; i++) - printf(" %lx", p[i]); - printf("\n"); - /* wait for debugger */ - while (tcfs_checkvp_barrier) /*WAIT*/ ; - panic("tcfs_checkvp"); - } - if (a->tcfs_lowervp->v_usecount < 1) { - int i; u_long *p; - printf("vp = %p, unref'ed lowervp\n", vp); - for (p = (u_long *) a, i = 0; i < 8; i++) - printf(" %lx", p[i]); - printf("\n"); - /* wait for debugger */ - while (tcfs_checkvp_barrier) /*WAIT*/ ; - panic ("tcfs with unref'ed lowervp"); - }; -#ifdef notyet - printf("tcfs %p/%d -> %p/%d [%s, %d]\n", - TCFSTOV(a), TCFSTOV(a)->v_usecount, - a->tcfs_lowervp, a->tcfs_lowervp->v_usecount, - fil, lno); -#endif - return a->tcfs_lowervp; -} -#endif diff --git a/sys/miscfs/tcfs/tcfs_version.h b/sys/miscfs/tcfs/tcfs_version.h deleted file mode 100644 index c07a7f55110..00000000000 --- a/sys/miscfs/tcfs/tcfs_version.h +++ /dev/null @@ -1,34 +0,0 @@ -/* $OpenBSD: tcfs_version.h,v 1.3 2000/06/17 20:25:55 provos Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _TCFS_VERSION_H_ -#define _TCFS_VERSION_H_ - -#define TCFS_VERSION_NUM 0 - -#endif /* _TCFS_VERSION_H_ */ diff --git a/sys/miscfs/tcfs/tcfs_vfsops.c b/sys/miscfs/tcfs/tcfs_vfsops.c deleted file mode 100644 index aa60713841d..00000000000 --- a/sys/miscfs/tcfs/tcfs_vfsops.c +++ /dev/null @@ -1,354 +0,0 @@ -/* $OpenBSD: tcfs_vfsops.c,v 1.5 2002/03/14 01:27:08 millert Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <miscfs/tcfs/tcfs.h> - -int tcfs_mount(struct mount *, const char *, void *, - struct nameidata *, struct proc *); -int tcfs_start(struct mount *, int, struct proc *); -int tcfs_unmount(struct mount *, int, struct proc *); -int tcfs_root(struct mount *, struct vnode **); -int tcfs_quotactl(struct mount *, int, uid_t, caddr_t, - struct proc *); -int tcfs_statfs(struct mount *, struct statfs *, struct proc *); -int tcfs_sync(struct mount *, int, struct ucred *, struct proc *); -int tcfs_vget(struct mount *, ino_t, struct vnode **); - -/* - * Mount tcfs layer - */ -int -tcfs_mount(mp, path, data, ndp, p) - struct mount *mp; - const char *path; - void *data; - struct nameidata *ndp; - struct proc *p; -{ - int error = 0; - struct tcfs_args args; - struct vnode *lowerrootvp, *vp; - struct vnode *tcfsm_rootvp; - struct tcfs_mount *xmp; - size_t size; - int tcfs_error = 0; - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_mount(mp = %p)\n", mp); -#endif - - /* - * Get argument - */ - error = copyin(data, &args, sizeof(struct tcfs_args)); - if (error) - return (error); - - /* receiving user directives */ - if (mp->mnt_flag & MNT_UPDATE) { - int i; - i = tcfs_exec_cmd(MOUNTTOTCFSMOUNT(mp), &args); - copyout((caddr_t)&args, data, sizeof(struct tcfs_args)); - return i; - } - - /* - * Find lower node - */ - NDINIT(ndp, LOOKUP, FOLLOW|WANTPARENT|LOCKLEAF, - UIO_USERSPACE, args.target, p); - if ((error = namei(ndp)) != 0) - return (error); - - /* - * Sanity check on lower vnode - */ - lowerrootvp = ndp->ni_vp; - - vrele(ndp->ni_dvp); - ndp->ni_dvp = NULL; - - if (lowerrootvp->v_type != VDIR) { - vput(lowerrootvp); - return (EINVAL); - } - - xmp = (struct tcfs_mount *) malloc(sizeof(struct tcfs_mount), - M_UFSMNT, M_WAITOK); /* XXX */ - - /* - * Save reference to underlying FS - */ - xmp->tcfsm_vfs = lowerrootvp->v_mount; - - /* - * Save reference. Each mount also holds - * a reference on the root vnode. - */ - error = tcfs_node_create(mp, lowerrootvp, &vp, 1); - /* - * Unlock the node (either the lower or the alias) - */ - VOP_UNLOCK(vp, 0, p); - /* - * Make sure the node alias worked - */ - if (error) { - vrele(lowerrootvp); - free(xmp, M_UFSMNT); /* XXX */ - return (error); - } - - /* - * Keep a held reference to the root vnode. - * It is vrele'd in tcfs_unmount. - */ - tcfsm_rootvp = vp; - tcfsm_rootvp->v_flag |= VROOT; - xmp->tcfsm_rootvp = tcfsm_rootvp; - if (TCFSVPTOLOWERVP(tcfsm_rootvp)->v_mount->mnt_flag & MNT_LOCAL) - mp->mnt_flag |= MNT_LOCAL; - mp->mnt_data = (qaddr_t) xmp; - vfs_getnewfsid(mp); - - (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size); - bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); - (void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, - &size); - bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_mount: lower %s, alias at %s\n", - mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname); -#endif - - tcfs_error=tcfs_init_mp(xmp,&args); - copyout((caddr_t)&args,data,sizeof(struct tcfs_args)); - return (tcfs_error); -} - -/* - * VFS start. Nothing needed here - the start routine - * on the underlying filesystem will have been called - * when that filesystem was mounted. - */ -int -tcfs_start(mp, flags, p) - struct mount *mp; - int flags; - struct proc *p; -{ - - return (0); - /* return VFS_START(MOUNTTOTCFSMOUNT(mp)->tcfsm_vfs, flags, p); */ -} - -/* - * Free reference to tcfs layer - */ -int -tcfs_unmount(mp, mntflags, p) - struct mount *mp; - int mntflags; - struct proc *p; -{ - struct vnode *tcfsm_rootvp = MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp; - int error; - int flags = 0; - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_unmount(mp = %p)\n", mp); -#endif - - if (mntflags & MNT_FORCE) { - flags |= FORCECLOSE; - } - - /* - * Clear out buffer cache. I don't think we - * ever get anything cached at this level at the - * moment, but who knows... - */ -#if 0 - mntflushbuf(mp, 0); - if (mntinvalbuf(mp, 1)) - return (EBUSY); -#endif - if (tcfsm_rootvp->v_usecount > 1) - return (EBUSY); - if ((error = vflush(mp, tcfsm_rootvp, flags)) != 0) - return (error); - -#ifdef TCFS_DIAGNOSTIC - vprint("alias root of lower", tcfsm_rootvp); -#endif - /* - * Release reference on underlying root vnode - */ - vrele(tcfsm_rootvp); - /* - * And blow it away for future re-use - */ - vgone(tcfsm_rootvp); - /* - * Finally, throw away the tcfs_mount structure - */ - - tcfs_keytab_dispose(MOUNTTOTCFSMOUNT(mp)->tcfs_uid_kt); - tcfs_keytab_dispose(MOUNTTOTCFSMOUNT(mp)->tcfs_gid_kt); - - - free(mp->mnt_data, M_UFSMNT); /* XXX */ - mp->mnt_data = 0; - return (0); -} - -int -tcfs_root(mp, vpp) - struct mount *mp; - struct vnode **vpp; -{ - struct vnode *vp; - struct proc *p = curproc; - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_root(mp = %p, vp = %p->%p)\n", mp, - MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp, - TCFSVPTOLOWERVP(MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp) - ); -#endif - - /* - * Return locked reference to root. - */ - vp = MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp; - VREF(vp); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); - *vpp = vp; - return (0); -} - -int -tcfs_quotactl(mp, cmd, uid, arg, p) - struct mount *mp; - int cmd; - uid_t uid; - caddr_t arg; - struct proc *p; -{ - return VFS_QUOTACTL(MOUNTTOTCFSMOUNT(mp)->tcfsm_vfs, cmd, uid, arg, p); -} - -int -tcfs_statfs(mp, sbp, p) - struct mount *mp; - struct statfs *sbp; - struct proc *p; -{ - int error; - struct statfs mstat; - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_statfs(mp = %p, vp = %p->%p)\n", mp, - MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp, - TCFSVPTOLOWERVP(MOUNTTOTCFSMOUNT(mp)->tcfsm_rootvp) - ); -#endif - - bzero(&mstat, sizeof(mstat)); - - error = VFS_STATFS(MOUNTTOTCFSMOUNT(mp)->tcfsm_vfs, &mstat, p); - if (error) - return (error); - - /* now copy across the "interesting" information and fake the rest */ - sbp->f_flags = mstat.f_flags; - sbp->f_bsize = mstat.f_bsize; - sbp->f_iosize = mstat.f_iosize; - sbp->f_blocks = mstat.f_blocks; - sbp->f_bfree = mstat.f_bfree; - sbp->f_bavail = mstat.f_bavail; - sbp->f_files = mstat.f_files; - sbp->f_ffree = mstat.f_ffree; - if (sbp != &mp->mnt_stat) { - bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid)); - bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN); - bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN); - } - strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN); - return (0); -} - -int -tcfs_sync(mp, waitfor, cred, p) - struct mount *mp; - int waitfor; - struct ucred *cred; - struct proc *p; -{ - - /* - * XXX - Assumes no data cached at tcfs layer. - */ - return (0); -} - -int -tcfs_vget(mp, ino, vpp) - struct mount *mp; - ino_t ino; - struct vnode **vpp; -{ - - return VFS_VGET(MOUNTTOTCFSMOUNT(mp)->tcfsm_vfs, ino, vpp); -} - -#define tcfs_sysctl ((int (*)(int *, u_int, void *, size_t *, void *, \ - size_t, struct proc *))eopnotsupp) - -struct vfsops tcfs_vfsops = { - tcfs_mount, - tcfs_start, - tcfs_unmount, - tcfs_root, - tcfs_quotactl, - tcfs_statfs, - tcfs_sync, - tcfs_vget, - tcfs_fhtovp, - tcfs_vptofh, - tcfs_init, - tcfs_sysctl -}; diff --git a/sys/miscfs/tcfs/tcfs_vnops.c b/sys/miscfs/tcfs/tcfs_vnops.c deleted file mode 100644 index ff2759a26d1..00000000000 --- a/sys/miscfs/tcfs/tcfs_vnops.c +++ /dev/null @@ -1,461 +0,0 @@ -/* $OpenBSD: tcfs_vnops.c,v 1.5 2002/03/14 01:27:08 millert Exp $ */ -/* - * Copyright 2000 The TCFS Project at http://tcfs.dia.unisa.it/ - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the authors may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/proc.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/vnode.h> -#include <sys/mount.h> -#include <sys/namei.h> -#include <sys/malloc.h> -#include <sys/buf.h> -#include <miscfs/tcfs/tcfs.h> - - -int tcfs_bug_bypass = 0; /* for debugging: enables bypass printf'ing */ - -int tcfs_bypass(void *); -int tcfs_getattr(void *); -int tcfs_setattr(void *); -int tcfs_inactive(void *); -int tcfs_reclaim(void *); -int tcfs_print(void *); -int tcfs_strategy(void *); -int tcfs_bwrite(void *); -int tcfs_lock(void *); -int tcfs_unlock(void *); -int tcfs_islocked(void *); -int tcfs_read(void *); -int tcfs_readdir(void *); -int tcfs_write(void *); -int tcfs_create(void *); -int tcfs_mknod(void *); -int tcfs_mkdir(void *); -int tcfs_link(void *); -int tcfs_symlink(void *); -int tcfs_rename(void *); -int tcfs_lookup(void *); - -int -tcfs_bypass(v) - void *v; -{ - struct vop_generic_args /* { - struct vnodeop_desc *a_desc; - <other random data follows, presumably> - } */ *ap = v; - register struct vnode **this_vp_p; - int error; - struct vnode *old_vps[VDESC_MAX_VPS]; - struct vnode **vps_p[VDESC_MAX_VPS]; - struct vnode ***vppp; - struct vnodeop_desc *descp = ap->a_desc; - int reles, i; - - if (tcfs_bug_bypass) - printf ("tcfs_bypass: %s\n", descp->vdesc_name); - -#ifdef SAFETY - /* - * We require at least one vp. - */ - if (descp->vdesc_vp_offsets == TCFS || - descp->vdesc_vp_offsets[0] == VDESC_NO_OFFSET) - panic ("tcfs_bypass: no vp's in map."); -#endif - - /* - * Map the vnodes going in. - * Later, we'll invoke the operation based on - * the first mapped vnode's operation vector. - */ - reles = descp->vdesc_flags; - for (i = 0; i < VDESC_MAX_VPS; reles >>= 1, i++) { - if (descp->vdesc_vp_offsets[i] == VDESC_NO_OFFSET) - break; /* bail out at end of list */ - vps_p[i] = this_vp_p = - VOPARG_OFFSETTO(struct vnode**, - descp->vdesc_vp_offsets[i], ap); - /* - * We're not guaranteed that any but the first vnode - * are of our type. Check for and don't map any - * that aren't. (We must always map first vp or vclean fails.) - */ - if (i && (*this_vp_p == NULLVP || - (*this_vp_p)->v_op != tcfs_vnodeop_p)) { - old_vps[i] = NULLVP; - } else { - old_vps[i] = *this_vp_p; - *(vps_p[i]) = TCFSVPTOLOWERVP(*this_vp_p); - /* - * XXX - Several operations have the side effect - * of vrele'ing their vp's. We must account for - * that. (This should go away in the future.) - */ - if (reles & 1) - VREF(*this_vp_p); - } - - } - - /* - * Call the operation on the lower layer - * with the modified argument structure. - */ - error = VCALL(*(vps_p[0]), descp->vdesc_offset, ap); - - /* - * Maintain the illusion of call-by-value - * by restoring vnodes in the argument structure - * to their original value. - */ - reles = descp->vdesc_flags; - for (i = 0; i < VDESC_MAX_VPS; reles >>= 1, i++) { - if (descp->vdesc_vp_offsets[i] == VDESC_NO_OFFSET) - break; /* bail out at end of list */ - if (old_vps[i] != NULLVP) { - *(vps_p[i]) = old_vps[i]; - if (reles & 1) { - vrele(*(vps_p[i])); - } - } - - /* - * Map the possible out-going vpp - * (Assumes that the lower layer always returns - * a VREF'ed vpp unless it gets an error.) - */ - if (descp->vdesc_vpp_offset != VDESC_NO_OFFSET && - !(descp->vdesc_flags & VDESC_NOMAP_VPP) && - !error) { - /* - * XXX - even though some ops have vpp returned vp's, - * several ops actually vrele this before returning. - * We must avoid these ops. - * (This should go away when these ops are regularized.) - */ - if (descp->vdesc_flags & VDESC_VPP_WILLRELE) - goto out; - vppp = VOPARG_OFFSETTO(struct vnode***, - descp->vdesc_vpp_offset,ap); - /* - * This assumes that **vppp is a locked vnode (it is always - * so as of this writing, NetBSD-current 1995/02/16) - * - * (don't want to lock it if being called on behalf - * of lookup--it plays weird locking games depending - * on whether or not it's looking up ".", "..", etc. - */ - error = tcfs_node_create(old_vps[0]->v_mount, **vppp, *vppp, - descp == &vop_lookup_desc ? 0 : 1); - } - } - - out: - return (error); -} - - -/* - * We must handle open to be able to catch MNT_NODEV and friends. - */ -int -tcfs_open(v) - void *v; -{ - struct vop_open_args *ap = v; - struct vnode *vp = ap->a_vp; - enum vtype lower_type = VTOTCFS(vp)->tcfs_lowervp->v_type; - - - if (((lower_type == VBLK) || (lower_type == VCHR)) && - (vp->v_mount->mnt_flag & MNT_NODEV)) - return ENXIO; - - return tcfs_bypass(ap); -} - -int -tcfs_inactive(v) - void *v; -{ - struct vop_inactive_args *ap = v; - - /* - * Do nothing (and _don't_ bypass). - * Wait to vrele lowervp until reclaim, - * so that until then our tcfs_node is in the - * cache and reusable. - * - * NEEDSWORK: Someday, consider inactive'ing - * the lowervp and then trying to reactivate it - * with capabilities (v_id) - * like they do in the name lookup cache code. - * That's too much work for now. - */ - VOP_UNLOCK(ap->a_vp, 0, ap->a_p); - - return (0); -} - -int -tcfs_reclaim(v) - void *v; -{ - struct vop_reclaim_args /* { - struct vnode *a_vp; - } */ *ap = v; - struct vnode *vp = ap->a_vp; - struct tcfs_node *xp = VTOTCFS(vp); - struct vnode *lowervp = xp->tcfs_lowervp; - - /* - * Note: in vop_reclaim, vp->v_op == dead_vnodeop_p, - * so we can't call VOPs on ourself. - */ - /* After this assignment, this node will not be re-used. */ - xp->tcfs_lowervp = NULL; - LIST_REMOVE(xp, tcfs_hash); - FREE(vp->v_data, M_TEMP); - vp->v_data = NULL; - vrele (lowervp); - return (0); -} - -int -tcfs_print(v) - void *v; -{ - struct vop_print_args /* { - struct vnode *a_vp; - } */ *ap = v; - register struct vnode *vp = ap->a_vp; - - printf ("\ttag VT_TCFS, vp=%p, lowervp=%p\n", vp, TCFSVPTOLOWERVP(vp)); - vprint("tcfs lowervp", TCFSVPTOLOWERVP(vp)); - return (0); -} - - -/* - * XXX - vop_strategy must be hand coded because it has no - * vnode in its arguments. - * This goes away with a merged VM/buffer cache. - */ -int -tcfs_strategy(v) - void *v; -{ - struct vop_strategy_args /* { - struct buf *a_bp; - } */ *ap = v; - struct buf *bp = ap->a_bp; - int error; - struct vnode *savedvp; - - savedvp = bp->b_vp; - bp->b_vp = TCFSVPTOLOWERVP(bp->b_vp); - - error = VOP_STRATEGY(bp); - - bp->b_vp = savedvp; - - return (error); -} - - -/* - * XXX - like vop_strategy, vop_bwrite must be hand coded because it has no - * vnode in its arguments. - * This goes away with a merged VM/buffer cache. - */ -int -tcfs_bwrite(v) - void *v; -{ - struct vop_bwrite_args /* { - struct buf *a_bp; - } */ *ap = v; - struct buf *bp = ap->a_bp; - int error; - struct vnode *savedvp; - - savedvp = bp->b_vp; - bp->b_vp = TCFSVPTOLOWERVP(bp->b_vp); - - error = VOP_BWRITE(bp); - - bp->b_vp = savedvp; - - return (error); -} - -/* - * We need a separate tcfs lock routine, to avoid deadlocks at reclaim time. - * If a process holds the lower-vnode locked when it tries to reclaim - * the tcfs upper-vnode, _and_ tcfs_bypass is used as the locking operation, - * then a process can end up locking against itself. - * This has been observed when a tcfs mount is set up to "tunnel" beneath a - * union mount (that setup is useful if you still wish to be able to access - * the non-union version of either the above or below union layer) - */ -int -tcfs_lock(v) - void *v; -{ - struct vop_lock_args *ap = v; - -#if 0 - vop_generic_lock(ap); -#endif - if ((ap->a_flags & LK_TYPE_MASK) == LK_DRAIN) - return (0); - ap->a_flags &= ~LK_INTERLOCK; - - return (tcfs_bypass((struct vop_generic_args *)ap)); -} - -int -tcfs_unlock(v) - void *v; -{ - struct vop_unlock_args *ap = v; -#if 0 - vop_generic_unlock(ap); -#endif - ap->a_flags &= ~LK_INTERLOCK; - - return (tcfs_bypass((struct vop_generic_args *)ap)); -} - -int -tcfs_islocked(v) - void *v; -{ - /* XXX */ - return (0); -} - -int -tcfs_lookup(v) - void *v; -{ - register struct vop_lookup_args /* { - struct vnodeop_desc *a_desc; - struct vnode *a_dvp; - struct vnode **a_vpp; - struct componentname *a_cnp; - } */ *ap = v; - register int error; - int flags = ap->a_cnp->cn_flags; - struct componentname *cnp = ap->a_cnp; -#if 0 - register struct vnode *dvp, *vp; - struct proc *p = cnp->cn_proc; - struct vop_unlock_args unlockargs; - struct vop_lock_args lockargs; -#endif - -#ifdef TCFS_DIAGNOSTIC - printf("tcfs_lookup: dvp=%lx, name='%s'\n", - ap->a_dvp, cnp->cn_nameptr); -#endif - - if ((flags & ISLASTCN) && (ap->a_dvp->v_mount->mnt_flag & MNT_RDONLY) && - (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) - return (EROFS); - error = tcfs_bypass((struct vop_generic_args *)ap); - if (error == EJUSTRETURN && (flags & ISLASTCN) && - (ap->a_dvp->v_mount->mnt_flag & MNT_RDONLY) && - (cnp->cn_nameiop == CREATE || cnp->cn_nameiop == RENAME)) - error = EROFS; - -#if 0 - /* - * We must do the same locking and unlocking at this layer as - * is done in the layers below us. We could figure this out - * based on the error return and the LASTCN, LOCKPARENT, and - * LOCKLEAF flags. However, it is more expidient to just find - * out the state of the lower level vnodes and set ours to the - * same state. - */ - dvp = ap->a_dvp; - vp = *ap->a_vpp; - if (dvp == vp) - return (error); - if (!VOP_ISLOCKED(dvp)) { - unlockargs.a_vp = dvp; - unlockargs.a_flags = 0; - unlockargs.a_p = p; - vop_generic_unlock(&unlockargs); - } - if (vp != TCFSVP && VOP_ISLOCKED(vp)) { - lockargs.a_vp = vp; - lockargs.a_flags = LK_SHARED; - lockargs.a_p = p; - vop_generic_lock(&lockargs); - } -#endif - return (error); -} - -/* - * Global vfs data structures - */ -int (**tcfs_vnodeop_p)(void *); -struct vnodeopv_entry_desc tcfs_vnodeop_entries[] = { - { &vop_default_desc, tcfs_bypass }, - - { &vop_getattr_desc, tcfs_getattr }, - { &vop_setattr_desc, tcfs_setattr }, - { &vop_inactive_desc, tcfs_inactive }, - { &vop_reclaim_desc, tcfs_reclaim }, - { &vop_print_desc, tcfs_print }, - - { &vop_lock_desc, tcfs_lock }, - { &vop_unlock_desc, tcfs_unlock }, - { &vop_islocked_desc, tcfs_islocked }, - { &vop_lookup_desc, tcfs_lookup }, /* special locking frob */ - - { &vop_strategy_desc, tcfs_strategy }, - { &vop_bwrite_desc, tcfs_bwrite }, - { &vop_read_desc, tcfs_read }, - { &vop_readdir_desc, tcfs_readdir }, - { &vop_write_desc, tcfs_write }, - { &vop_create_desc, tcfs_create }, - { &vop_mknod_desc, tcfs_mknod }, - { &vop_mkdir_desc, tcfs_mkdir }, - { &vop_link_desc, tcfs_link }, - { &vop_rename_desc, tcfs_rename }, - { &vop_symlink_desc, tcfs_symlink }, - { NULL, NULL } -}; - -struct vnodeopv_desc tcfs_vnodeop_opv_desc = - { &tcfs_vnodeop_p, tcfs_vnodeop_entries }; |