File tree Expand file tree Collapse file tree
spec/lib/msf/core/handler Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -239,11 +239,13 @@ def setup_handler
239239 self . service . server_name = datastore [ 'HttpServerName' ]
240240
241241 # Add the new resource
242- service . add_resource ( ( luri + "/" ) . gsub ( "//" , "/" ) ,
242+ resource_path = ( luri + "/" ) . gsub ( "//" , "/" )
243+ service . add_resource ( resource_path ,
243244 'Proc' => Proc . new { |cli , req |
244245 on_request ( cli , req )
245246 } ,
246247 'VirtualDirectory' => true )
248+ self . resource_added = true
247249
248250 print_status ( "Started #{ scheme . upcase } reverse handler on #{ listener_uri ( local_addr ) } " )
249251 lookup_proxy_settings
@@ -259,13 +261,17 @@ def setup_handler
259261 #
260262 def stop_handler
261263 if self . service
262- self . service . remove_resource ( ( luri + "/" ) . gsub ( "//" , "/" ) )
264+ if self . resource_added
265+ self . service . remove_resource ( ( luri + "/" ) . gsub ( "//" , "/" ) )
266+ self . resource_added = false
267+ end
263268 self . service . deref
264269 self . service = nil
265270 end
266271 end
267272
268273 attr_accessor :service # :nodoc:
274+ attr_accessor :resource_added # :nodoc:
269275
270276protected
271277
Original file line number Diff line number Diff line change @@ -32,6 +32,40 @@ def ssl?
3232
3333 end
3434
35+ describe '#stop_handler' do
36+ let ( :mock_service ) { double ( 'service' ) }
37+ let ( :payload ) { create_payload }
38+
39+ context 'when add_resource raised and resource was not added' do
40+ before do
41+ payload . service = mock_service
42+ payload . resource_added = false
43+ end
44+
45+ it 'does not remove the resource but still derefs the service' do
46+ expect ( mock_service ) . not_to receive ( :remove_resource )
47+ expect ( mock_service ) . to receive ( :deref )
48+ payload . stop_handler
49+ expect ( payload . service ) . to be_nil
50+ end
51+ end
52+
53+ context 'when the resource was successfully added' do
54+ before do
55+ payload . service = mock_service
56+ payload . resource_added = true
57+ end
58+
59+ it 'removes the resource and derefs the service' do
60+ expect ( mock_service ) . to receive ( :remove_resource ) . with ( '/' )
61+ expect ( mock_service ) . to receive ( :deref )
62+ payload . stop_handler
63+ expect ( payload . service ) . to be_nil
64+ expect ( payload . resource_added ) . to eq ( false )
65+ end
66+ end
67+ end
68+
3569 describe '#luri' do
3670 subject ( :luri ) do
3771 create_payload . luri
You can’t perform that action at this time.
0 commit comments