| Class | MultiTkIp |
| In: |
tk/lib/remote-tk.rb
tk/lib/multi-tk.rb |
| Parent: | Object |
remove methods for security
| BASE_DIR | = | File.dirname(__FILE__) |
| new | -> | __new |
| new_master | -> | new |
| new_slave | -> | new_trusted_slave |
| new_safe_slave | -> | new_safeTk |
| cmd | [R] | |
| ip | [R] | |
| ret | [RW] | |
| target | [RW] |
# File tk/lib/remote-tk.rb, line 19 def self._DEFAULT_MASTER # work only once if @flag @flag = nil @@DEFAULT_MASTER else nil end end
# File tk/lib/multi-tk.rb, line 1324 def self.__getip current = Thread.current if TclTkLib.mainloop_thread? != false && current['callback_ip'] return current['callback_ip'] end if current.group == ThreadGroup::Default @@DEFAULT_MASTER else ip = @@IP_TABLE[current.group] unless ip fail SecurityError, "cannot call Tk methods on #{Thread.current.inspect}" end ip end end
# File tk/lib/multi-tk.rb, line 867 def self.__init_ip_env__(table, script) ret = [] mtx = Mutex.new.lock @init_ip_env_queue.enq([mtx, ret, table, script]) mtx.lock if ret[0].kind_of?(Exception) raise ret[0] else ret[0] end end
# File tk/lib/multi-tk.rb, line 757 def self.__pseudo_toplevel Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER && self.__pseudo_toplevel_evaluable? && @pseudo_toplevel[1] end
# File tk/lib/multi-tk.rb, line 763 def self.__pseudo_toplevel=(m) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end # if m.kind_of?(Module) && m.respond_to?(:pseudo_toplevel_evaluable?) if m.respond_to?(:pseudo_toplevel_evaluable?) @pseudo_toplevel[0] = true @pseudo_toplevel[1] = m else fail ArgumentError, 'fail to set pseudo-toplevel' end self end
# File tk/lib/multi-tk.rb, line 787 def self.__pseudo_toplevel_evaluable=(mode) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end @pseudo_toplevel[0] = (mode)? true: false end
# File tk/lib/multi-tk.rb, line 779 def self.__pseudo_toplevel_evaluable? begin @pseudo_toplevel[0] && @pseudo_toplevel[1].pseudo_toplevel_evaluable? rescue Exception false end end
# File tk/lib/multi-tk.rb, line 2216 def _fromUTF8(str, encoding=nil) __getip._fromUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 2254 def _get_global_var2(var, idx) __getip._get_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 2232 def _get_variable(var, flag) __getip._get_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 2235 def _get_variable2(var, idx, flag) __getip._get_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 2208 def _invoke_with_enc(*args) __getip._invoke_with_enc(*args) end
# File tk/lib/multi-tk.rb, line 2200 def _invoke_without_enc(*args) __getip._invoke_without_enc(*args) end
# File tk/lib/multi-tk.rb, line 2270 def _make_menu_embeddable(menu_path) __getip._make_menu_embeddable(menu_path) end
# File tk/lib/multi-tk.rb, line 2257 def _set_global_var(var, value) __getip._set_global_var(var, value) end
# File tk/lib/multi-tk.rb, line 2260 def _set_global_var2(var, idx, value) __getip._set_global_var2(var, idx, value) end
# File tk/lib/multi-tk.rb, line 2238 def _set_variable(var, value, flag) __getip._set_variable(var, value, flag) end
# File tk/lib/multi-tk.rb, line 2241 def _set_variable2(var, idx, value, flag) __getip._set_variable2(var, idx, value, flag) end
# File tk/lib/multi-tk.rb, line 2224 def _thread_tkwait(mode, target) __getip._thread_tkwait(mode, target) end
# File tk/lib/multi-tk.rb, line 2212 def _toUTF8(str, encoding=nil) __getip._toUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 2266 def _unset_global_var2(var, idx) __getip._unset_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 2244 def _unset_variable(var, flag) __getip._unset_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 2247 def _unset_variable2(var, idx, flag) __getip._unset_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 1651 def self.add_tk_procs(name, args=nil, body=nil) if name.kind_of?(Array) # => an array of [name, args, body] name.each{|param| self.add_tk_procs(*param)} else name = name.to_s @@ADD_TK_PROCS << [name, args, body] @@IP_TABLE.each{|tg, ip| ip._add_tk_procs(name, args, body) } end end
# File tk/lib/multi-tk.rb, line 2792 def self.alias_delete(slave, cmd_name) __getip.alias_delete(slave, cmd_name) self end
# File tk/lib/multi-tk.rb, line 2783 def self.alias_info(slave, cmd_name) __getip.alias_info(slave, cmd_name) end
# File tk/lib/multi-tk.rb, line 3023 def self.alias_target(aliascmd, slave = '') __getip.alias_target(aliascmd, slave) end
# File tk/lib/multi-tk.rb, line 835 def self.assign_receiver_and_watchdog(target) ret = [nil] @assign_thread.raise(@assign_request.new(target, ret)) while ret[0] == nil unless @assign_thread.alive? raise RuntimeError, 'lost the thread to assign a receiver and a watchdog thread' end end if ret[0].kind_of?(Exception) raise ret[0] else ret[0] end end
# File tk/lib/multi-tk.rb, line 2071 def bg_eval(*args, &blk) # class ==> interp object __getip.bg_eval(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2044 def bg_eval_proc(*args, &blk) # class ==> interp object __getip.bg_eval_proc(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2059 def bg_eval_string(cmd, *eval_args) # class ==> interp object __getip.bg_eval_string(cmd, *eval_args) end
# File tk/lib/multi-tk.rb, line 2965 def self.bgerror(cmd = Proc.new, slave = nil, &b) __getip.bgerror(cmd, slave, &b) end
# File tk/lib/multi-tk.rb, line 1598 def self.create_table if __getip.slave? begin raise SecurityError, "slave-IP has no permission creating a new table" rescue SecurityError => e #p e.backtrace # Is called on a Ruby/Tk library? caller_info = e.backtrace[1] if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:} # Probably, caller is a Ruby/Tk library --> allow creating else raise e end end end id = @@TK_TABLE_LIST.size obj = Object.new @@TK_TABLE_LIST << obj obj.instance_eval "def self.method_missing(m, *args)\nMultiTkIp.tk_object_table(\#{id}).__send__(m, *args)\nend\n" obj.freeze @@IP_TABLE.each{|tg, ip| ip._add_new_tables } return obj end
# File tk/lib/multi-tk.rb, line 2803 def self.def_alias(slave, new_cmd, org_cmd, *args) ret = __getip.def_alias(slave, new_cmd, org_cmd, *args) (ret == new_cmd)? self: nil end
# File tk/lib/multi-tk.rb, line 2842 def self.delete_cmd(slave, cmd) __getip.delete_cmd(slave, cmd) self end
# File tk/lib/multi-tk.rb, line 2822 def self.delete_slaves(*args) __getip.delete_slaves(*args) self end
# File tk/lib/multi-tk.rb, line 2088 def do_one_event(flag = TclTkLib::EventFlag::ALL) __getip.do_one_event(flag) end
# File tk/lib/multi-tk.rb, line 2067 def eval(*args, &blk) # class ==> interp object __getip.eval(*args, &blk) end
class method
# File tk/lib/multi-tk.rb, line 2038 def eval_proc(*args, &blk) # class ==> interp object __getip.eval_proc(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2053 def eval_string(cmd, *eval_args) # class ==> interp object __getip.eval_string(cmd, *eval_args) end
# File tk/lib/multi-tk.rb, line 2856 def self.expose_cmd(slave, cmd, aliasname = nil) __getip.expose_cmd(slave, cmd, aliasname) self end
# File tk/lib/multi-tk.rb, line 1686 def self.get_cb_entry(cmd) @@CB_ENTRY_CLASS.new(__getip, cmd).freeze end
# File tk/lib/multi-tk.rb, line 3006 def self.get_limit(limit_type, slave = '', slot = nil) __getip.get_limit(limit_type, slave, slot) end
# File tk/lib/multi-tk.rb, line 2879 def self.hidden_cmds(slave = '') __getip.hidden_cmds(slave) end
# File tk/lib/multi-tk.rb, line 2870 def self.hide_cmd(slave, cmd, aliasname = nil) __getip.hide_cmd(slave, cmd, aliasname) self end
# File tk/lib/multi-tk.rb, line 890 def self.inherited(subclass) # trust if on ThreadGroup::Default or @@DEFAULT_MASTER's ThreadGroup if @@IP_TABLE[Thread.current.group] == @@DEFAULT_MASTER begin class << subclass self.methods.each{|m| begin unless m == '__id__' || m == '__send__' || m == 'freeze' undef_method(m) end rescue Exception # ignore all exceptions end } end ensure subclass.freeze fail SecurityError, "cannot create subclass of MultiTkIp on a untrusted ThreadGroup" end end end
# File tk/lib/multi-tk.rb, line 1628 def self.init_ip_env(script = Proc.new) @@INIT_IP_ENV << script if __getip.slave? begin raise SecurityError, "slave-IP has no permission initializing IP env" rescue SecurityError => e #p e.backtrace # Is called on a Ruby/Tk library? caller_info = e.backtrace[1] if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:} # Probably, caller is a Ruby/Tk library --> allow creating else raise e end end end # @@IP_TABLE.each{|tg, ip| # ip._init_ip_env(script) # } @@DEFAULT_MASTER.__init_ip_env__(@@IP_TABLE, script) end
# File tk/lib/multi-tk.rb, line 1675 def self.init_ip_internal __getip._init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) end
# File tk/lib/multi-tk.rb, line 2899 def self.invoke_hidden(slave, cmd, *args) __getip.invoke_hidden(slave, cmd, *args) end
# File tk/lib/multi-tk.rb, line 2920 def self.invoke_hidden_on_global(slave, cmd, *args) __getip.invoke_hidden_on_global(slave, cmd, *args) end
# File tk/lib/multi-tk.rb, line 2938 def self.invoke_hidden_on_namespace(slave, ns, cmd, *args) __getip.invoke_hidden_on_namespace(slave, ns, cmd, *args) end
# File tk/lib/multi-tk.rb, line 2082 def mainloop(check_root = true) __getip.mainloop(check_root) end
# File tk/lib/multi-tk.rb, line 2091 def mainloop_abort_on_exception # __getip.mainloop_abort_on_exception TclTkLib.mainloop_abort_on_exception end