@@ -35,11 +35,12 @@ def update_store
35
35
def load_metadata
36
36
begin
37
37
retries ||= 0
38
- configure_user_store
39
- @store = PStore . new ( @path_to_user_metadata )
38
+ copied = configure_user_store
39
+ @store = PStore . new ( @path_to_user_metadata , true )
40
40
@module_metadata_cache = @store . transaction ( true ) { @store [ :module_metadata ] }
41
- validate_data if ( !@module_metadata_cache . nil? && @module_metadata_cache . size > 0 )
41
+ validate_data ( copied ) if ( !@module_metadata_cache . nil? && @module_metadata_cache . size > 0 )
42
42
@module_metadata_cache = { } if @module_metadata_cache . nil?
43
+ puts "module size #{ @module_metadata_cache . size } "
43
44
rescue
44
45
retries +=1
45
46
@@ -54,30 +55,42 @@ def load_metadata
54
55
55
56
end
56
57
57
- def validate_data
58
+ def validate_data ( copied )
58
59
size_prior = @module_metadata_cache . size
59
- @module_metadata_cache . delete_if { |path , module_metadata | !::File . exist? ( module_metadata . path ) }
60
- update_store if ( size_prior != @module_metadata_cache . size )
60
+ @module_metadata_cache . delete_if { |key , module_metadata | !::File . exist? ( module_metadata . path ) }
61
+
62
+ if ( copied )
63
+ @module_metadata_cache . each_value { |module_metadata |
64
+ module_metadata . update_mod_time ( ::File . mtime ( module_metadata . path ) )
65
+ }
66
+ end
67
+
68
+ update_store if ( size_prior != @module_metadata_cache . size || copied )
61
69
end
62
70
63
71
def configure_user_store
72
+ copied = false
64
73
@path_to_user_metadata = ::File . join ( Msf ::Config . config_directory , UserMetaDataFile )
65
- path_to_base_metadata = ::File . join ( Msf ::Config . install_root , "db" , BaseMetaDataFile )
74
+ @ path_to_base_metadata = ::File . join ( Msf ::Config . install_root , "db" , BaseMetaDataFile )
66
75
67
76
if ( !::File . exist? ( path_to_base_metadata ) )
68
77
wlog ( "Missing base module metadata file: #{ path_to_base_metadata } " )
69
78
else
70
79
if ( !::File . exist? ( @path_to_user_metadata ) )
71
- FileUtils . cp ( path_to_base_metadata , @path_to_user_metadata )
80
+ FileUtils . cp ( @path_to_base_metadata , @path_to_user_metadata )
81
+ copied = true
72
82
dlog ( 'Created user based module store' )
73
83
74
84
# Update the user based module store if an updated base file is created/pushed
75
85
elsif ( ::File . mtime ( path_to_base_metadata ) . to_i > ::File . mtime ( @path_to_user_metadata ) . to_i )
76
86
FileUtils . remove ( @path_to_user_metadata , true )
77
- FileUtils . cp ( path_to_base_metadata , @path_to_user_metadata )
87
+ FileUtils . cp ( @path_to_base_metadata , @path_to_user_metadata )
88
+ copied = true
78
89
dlog ( 'Updated user based module store' )
79
90
end
80
91
end
92
+
93
+ return copied
81
94
end
82
95
83
96
end
0 commit comments