From fd1e8a9737b2ea76a28496bd6bfb4741ec171b10 Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Mon, 23 Sep 2013 23:43:40 +1000 Subject: [PATCH] Allow clients logged in with user rights to run the autosave command. --- site_ansto/instrument/server_config.tcl | 28 ++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/site_ansto/instrument/server_config.tcl b/site_ansto/instrument/server_config.tcl index a92d8716..dee2ee3f 100644 --- a/site_ansto/instrument/server_config.tcl +++ b/site_ansto/instrument/server_config.tcl @@ -324,9 +324,31 @@ proc doAutosave {} { } } publish doAutosave user + +# return -1 if logged in as spy +proc set_rights {level} { + array set rights {1 manager manager 1 2 user user 2 3 spy spy 3} + array set password {manager ansto user sydney spy 007} + + set myrights [SplitReply [config myrights] ] + if {$myrights == $rights(spy)} { + return -1 + } + # Convert 'level' to a name if it is passed as an integer + if { [string is integer $level] } { + set level $rights($level) + } + config rights $level $password($level) + return $myrights +} proc autosave { {interval 300} } { global AUTOSAVE_STATE + set as_error 0 + set myrights [set_rights manager] + if {$myrights == -1} { + return -code error "ERROR: You are not authorized for this operation" + } set interval [string tolower $interval] if {$interval == "check" || $interval == "status"} { if { $AUTOSAVE_STATE == "ENABLED" } { @@ -350,9 +372,13 @@ proc autosave { {interval 300} } { } } } else { - return -code error "ERROR: Invalid argument in '[info level 0]', should be an integer or 'check'" + set as_error 1 } + set_rights $myrights + if {$as_error} { + return -code error "ERROR: Invalid argument in '[info level 0]', should be an integer or 'check'" + } } publish autosave user