Module: Crossdomain::Service

Extended by:
Service
Included in:
Service
Defined in:
lib/crossdomain/service.rb

Instance Method Summary collapse

Instance Method Details

#check_permissionsObject



43
44
# File 'lib/crossdomain/service.rb', line 43

def check_permissions
end

#startObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/crossdomain/service.rb', line 5

def start

  # Validates XML against Adobe's schema
  xml = Crossdomain::XML.validate!(Crossdomain::Config[:xml_path])

  unless xml
    Crossdomain.logger.error "Missing or malformed xml at #{Crossdomain::Config[:xml_path]}"
    return
  end

  if Crossdomain::Config[:port].to_i < 1000 and Process.uid != 0
    Crossdomain.logger.error "You need to be root to bind to port #{Crossdomain::Config[:port]}"
    return
  end

  Crossdomain.logger.info "Binding to #{Crossdomain::Config[:host]}:#{Crossdomain::Config[:port]}"
  @server = TCPServer.new Crossdomain::Config[:host], Crossdomain::Config[:port]

  # Drop privileges
  Crossdomain.logger.info "Dropping privileges to nobody"
  uid = Etc.getpwnam("nobody").uid
  Process::Sys.setuid(uid)

  begin

    loop do
      Thread.start(@server.accept) do |client|
        client.puts xml
        client.close
      end
    end

  rescue Interrupt
    #@server.stop
    Crossdomain.logger.info "Shutting down..."
  end
end

#stopObject



46
47
48
# File 'lib/crossdomain/service.rb', line 46

def stop
  @server.stop
end