#!/opt/tcl803/bin/sytcl
#
# $Header: /home/cvsroot/tcldb/sybdump/sybusers,v 1.1 1999/06/11 00:44:00 de Exp $

lassign $argv server

set tclshare /opt/share/tcl
set ucodb $tclshare/lib/ucodb
loadlibindex $ucodb/ucodb.tlib
global server
global dbpipe1
set uname sa
puts stdout "Please enter the SA password for server $server"
gets stdin pass
set dbpipe1 [sybOpen master $uname $pass $server]
global sybmsg
#
set ofp [open sybusers.$server w]
#
set sqlcmd "select * from syslogins"
set sqt syslogins
doSQL 1
set cols [sybCols 1]
while {1} {
        set line [sybNext 1]
        if {$line == ""} {break}
	eval lassign \$line $cols
	keylset Logins($name) suid $suid pass $password date $accdate db $dbname
}
#
set sqlcmd "select name from sysdatabases order by name"
set sqt sysdatabases
doSQL 1
while {1} {
	set db [sybNext 1]
        if {$db == ""} {break}
        lappend dbs $db
}
#
# if user is null, then check ALL users
#

foreach db $dbs {

set sqlcmd "select suid, uid, gid, suser_name(suid), user_name(uid) from $db..sysusers order by suid"
doSQL 1
set allusers ""
while {1} {
	set line [sybNext 1]
	if {$line == ""} {break}
	lassign $line suid uid gid sname dname
	if {$suid < 0} {
		keylset Groups($db,$dname) suid $suid uid $uid gid $gid alias $sname
		set Gnames($db,$uid) $dname
	} else {
		if {$dname == ""} {set dname $sname}
		keylset Users($db,$sname) suid $suid uid $uid gid $gid alias $dname
		set Snames($db,$suid) $sname
		set Unames($db,$uid) $dname
	}
	set Suids($db,$uid) $suid
}
}
#
#
foreach u [lsort [array names Logins]] {

	set suid [keylget Logins($u) suid]
	set date [keylget Logins($u) date]
	set defd [keylget Logins($u) db]

	puts $ofp "\nSybase User $u (ID $suid) : def db $defd : $date"

	set not ""

foreach db $dbs {

	set pres 0

	if {![info exists Users($db,$u)]} {
		lappend not $db
		continue
	}

	foreach k [keylkeys Users($db,$u)] {
		set $k [keylget Users($db,$u) $k]
	}

	set group $Gnames($db,$gid)

	puts $ofp "  $db : present as $alias in group $group (uid $uid gid $gid)"

}

	if {$not != ""} {
		set not [join $not ", "]
		set not [join [strFold $not 40] "\n\t"]
		puts $ofp "  No presence in $not"
	}

}
#
close $ofp
#
