examples/file_server.rb in ruby_smb-3.1.2 vs examples/file_server.rb in ruby_smb-3.1.3

- old
+ new

@@ -1,83 +1,21 @@ #!/usr/bin/ruby require 'bundler/setup' require 'optparse' require 'ruby_smb' -require 'ruby_smb/gss/provider/ntlm' # we just need *a* default encoding to handle the strings from the NTLM messages Encoding.default_internal = 'UTF-8' if Encoding.default_internal.nil? -options = { - allow_anonymous: true, - allow_guests: false, - domain: nil, - username: 'RubySMB', - password: 'password', - share_name: 'home', - share_path: '.', - smbv1: true, - smbv2: true, - smbv3: true -} -OptionParser.new do |opts| - opts.banner = "Usage: #{File.basename(__FILE__)} [options]" - opts.on("--path PATH", "The path to share (default: #{options[:share_path]})") do |path| +options = RubySMB::Server::Cli.parse(defaults: { share_path: '.' }) do |options, parser| + parser.banner = "Usage: #{File.basename(__FILE__)} [options]" + + parser.on("--share-path SHARE_PATH", "The path to share (default: #{options[:share_path]})") do |path| options[:share_path] = path end - opts.on("--share SHARE", "The share name (default: #{options[:share_name]})") do |share| - options[:share_name] = share - end - opts.on("--[no-]anonymous", "Allow anonymous access (default: #{options[:allow_anonymous]})") do |allow_anonymous| - options[:allow_anonymous] = allow_anonymous - end - opts.on("--[no-]smbv1", "Enable or disable SMBv1 (default: #{options[:smbv1] ? 'Enabled' : 'Disabled'})") do |smbv1| - options[:smbv1] = smbv1 - end - opts.on("--[no-]smbv2", "Enable or disable SMBv2 (default: #{options[:smbv2] ? 'Enabled' : 'Disabled'})") do |smbv2| - options[:smbv2] = smbv2 - end - opts.on("--[no-]smbv3", "Enable or disable SMBv3 (default: #{options[:smbv3] ? 'Enabled' : 'Disabled'})") do |smbv3| - options[:smbv3] = smbv3 - end - opts.on("--[no-]guests", "Allow guest accounts (default: #{options[:allow_guests]})") do |allow_guests| - options[:allow_guests] = allow_guests - end - opts.on("--username USERNAME", "The account's username (default: #{options[:username]})") do |username| - if username.include?('\\') - options[:domain], options[:username] = username.split('\\', 2) - else - options[:username] = username - end - end - opts.on("--password PASSWORD", "The account's password (default: #{options[:password]})") do |password| - options[:password] = password - end -end.parse! - -ntlm_provider = RubySMB::Gss::Provider::NTLM.new( - allow_anonymous: options[:allow_anonymous], - allow_guests: options[:allow_guests] -) -ntlm_provider.put_account(options[:username], options[:password], domain: options[:domain]) # password can also be an NTLM hash - -server = RubySMB::Server.new( - gss_provider: ntlm_provider, - logger: :stdout -) -server.dialects.select! { |dialect| RubySMB::Dialect[dialect].family != RubySMB::Dialect::FAMILY_SMB1 } unless options[:smbv1] -server.dialects.select! { |dialect| RubySMB::Dialect[dialect].family != RubySMB::Dialect::FAMILY_SMB2 } unless options[:smbv2] -server.dialects.select! { |dialect| RubySMB::Dialect[dialect].family != RubySMB::Dialect::FAMILY_SMB3 } unless options[:smbv3] - -if server.dialects.empty? - puts "at least one version must be enabled" - exit false end +server = RubySMB::Server::Cli.build(options) server.add_share(RubySMB::Server::Share::Provider::Disk.new(options[:share_name], options[:share_path])) -puts "server is running" -server.run do - puts "received connection" - true -end +RubySMB::Server::Cli.run(server)