# $Header: /home/cvsroot/tcldb/ucodb/Tlib/PGchkPriv,v 1.3 1998/05/18 22:28:44 de Exp $
# tcl procs saved on Sun Sep 03 16:18:55 PDT 1995

proc PGchkPriv {table priv} {

        global uname 

        case $priv in {
        {sel} {
                set code r
        }
        {ins} {
                set code w
        }
        {del} {
                set code w
        }
        {upd} {
                set code w
        }
        }

#       echo "chkPriv looking for protection code $code on table $table for user $uname"

        set temp [split $table .]
	set pref ""
	if {[llength $temp] == 3} {
		lassign $temp dbs usr tbl
		set pref "$dbs.."
	} else {
		lassign $temp usr tbl
	}

#       get my real server uid

	set sqlcmd "select b.usename, a.relacl from pg_class a, pg_user b where a.relname = '$tbl' and b.usesysid = a.relowner"

	set sqt "functions"
#        echo "chkPriv sqlcmd is\n$sqlcmd"

	set sqt pg_class 
	lassign [pgSQL 1] ct han res
#	puts stderr "return from pgSQL got ct $ct han $han res $res"
        if {[lindex $res 0] == "ERROR"} {
                startMsg "chkPriv problem : $res"
                echo "$sqlcmd"
                echo "$res"
                return NO 
        }

        lassign [pgGetI $han 0] owner privs
	set privs [split [string trimleft [string trimright $privs \}] \{] ,]
	set access ""
	foreach p $privs {
		set p [string trimleft [string trimright $p \"] \"]
		lassign [split $p =] u a
		if {($u == "") || ($u == $uname)} {
			append access $a
		}
	}

#        puts stderr "got owner $owner relacl $privs"

	if {$owner != $usr} {
		puts stderr "OUCH what happened?"
		puts stderr "Table $table owned by $owner?"
	}

#	return YES or NO

	if {($owner == $uname) || ([string first $code $access] >= 0)} {
		return YES
	} else {
		return NO
	}

}

