__ad_verify_signature (private)
__ad_verify_signature value token_id secret expire_time hash
Defined in packages/acs-tcl/tcl/security-procs.tcl
Returns 1 if signature validated; 0 if it fails.
- Parameters:
- value (required)
- token_id (required)
- secret (required)
- expire_time (required)
- hash (required)
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: lassign [split $token_id :] raw_token_id binding if { $secret eq "" } { if { $raw_token_id eq "" } { ns_log Debug "__ad_verify_signature: Neither secret, nor token_id supplied" return 0 } elseif {![string is integer -strict $raw_token_id]} { ns_log Warning "__ad_verify_signature: token_id <$raw_token_id> is not an integer" return 0 } try { set secret_token [sec_get_token $raw_token_id] } on error {errmsg} { ns_log Warning "__ad_verify_signature: token_id <$raw_token_id> validation returns '$errmsg'" return 0 } } else { set secret_token $secret } ns_log Debug "__ad_verify_signature: Getting token_id $token_id, value $secret_token ; " ns_log Debug "__ad_verify_signature: Expire_Time is $expire_time (compare to [ns_time]), hash is $hash" if {$binding == -1} { set binding_value [ad_conn user_id] } elseif {$binding == -2} { set binding_value [::security::csrf::new] } else { set binding_value "" } # # Compute hash based on tokes, expire_time and user_id/csrf token # set computed_hash [ns_sha1 "$value$token_id$expire_time$secret_token$binding_value"] # Need to verify both hash and expiration set hash_ok_p 0 set expiration_ok_p 0 if {$computed_hash eq $hash} { ns_log Debug "__ad_verify_signature: Hash matches - Hash check OK" set hash_ok_p 1 } else { # # Check to see if IE is lame (and buggy!) and is expanding \n to \r\n # See: http://rhea.redhat.com/bboard-archive/webdb/000bfF.html # set value [string map [list \r ""] $value] set org_computed_hash $computed_hash set computed_hash [ns_sha1 "$value$token_id$expire_time$secret_token$binding_value"] if {$computed_hash eq $hash} { # # Not sure, the comments for IE are still true, so issue # warnings in the error.log when this happens. # ns_log warning "__ad_verify_signature: Hash matches after correcting for IE bug - Hash check OK" set hash_ok_p 1 } else { ns_log Debug "__ad_verify_signature: Hash ($hash) doesn't match what we expected ($org_computed_hash) - Hash check FAILED" } } if { $expire_time == 0 } { ns_log Debug "__ad_verify_signature: No expiration time - Expiration OK" set expiration_ok_p 1 } elseif { $expire_time > [ns_time] } { ns_log Debug "__ad_verify_signature: Expiration time ($expire_time) greater than current time ([ns_time]) - Expiration check OK" set expiration_ok_p 1 } else { ns_log Debug "__ad_verify_signature: Expiration time ($expire_time) less than or equal to current time ([ns_time]) - Expiration check FAILED" } # Return validation result return [expr {$hash_ok_p && $expiration_ok_p}]Generic XQL file: packages/acs-tcl/tcl/security-procs.xql
PostgreSQL XQL file: packages/acs-tcl/tcl/security-procs-postgresql.xql
Oracle XQL file: packages/acs-tcl/tcl/security-procs-oracle.xql