##################################################################
#
# Check the finer aspects of lookup
#
# Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
#
##################################################################

##################################################################
#
# Initialization
#
##################################################################
INIT {
	global	ARGS host path

	if {[llength $ARGS] < 1} {
		set host "localhost"
	} else {
		set host [lindex $ARGS 0]
	}
	if {[llength $ARGS] < 2} {
		set path "/tmp/nfsbench"
	} else {
		set path [lindex $ARGS 1]
	}

	set mnt [rpc create $host mount 1]
	set nfs [rpc create $host nfs 2]
	set root [$mnt mount $path]
}

##################################################################
TEST	loo0001		Check for lookup of ..
BODY {
	set fh $root
	set dev [lindex [$nfs getattr $fh]  9]
	set ino [lindex [$nfs getattr $fh] 10]
	while {1} {
		if [catch {set result [$nfs lookup $fh ".."]}] {
			break;
		}
		set fh   [lindex $result 0]
		set ndev [lindex $result 10]
		set nino [lindex $result 11]
		if {$dev == $ndev && $ino == $nino} {
			break;
		}
		set dev $ndev
		set ino $nino
	}

	if {$fh != $root} {
		WARN "parent directory of $path exported, or server allows\n\
			lookup of .. across export root"
	}
}

##################################################################
# Some clients (notably OS/2) generate lookups of ""
##################################################################
TEST	loo0002		Check lookup of ""
BODY {
	$nfs lookup $root ""
}

##################################################################
# Check whether server follows symlinks
##################################################################
TEST	loo0003		Check lookup of symlinks
BODY {
	catch {$nfs remove $root test}
	$nfs symlink $root test "/etc/passwd" {}
	set result [$nfs lookup $root "test"]
	set fh1 [lindex $result 0]
	set result [$nfs lookup $root "test/"]
	set fh2 [lindex $result 0]
	if {$fh1 != $fh2} {
		WARN "Server follows symlinks on lookup of test/"
	}
}
