# File lib/puppet/application/master.rb, line 76
 76:   def main
 77:     require 'etc'
 78:     require 'puppet/file_serving/content'
 79:     require 'puppet/file_serving/metadata'
 80: 
 81:     xmlrpc_handlers = [:Status, :FileServer, :Master, :Report, :Filebucket]
 82: 
 83:     xmlrpc_handlers << :CA if Puppet[:ca]
 84: 
 85:     # Make sure we've got a localhost ssl cert
 86:     Puppet::SSL::Host.localhost
 87: 
 88:     # And now configure our server to *only* hit the CA for data, because that's
 89:     # all it will have write access to.
 90:     Puppet::SSL::Host.ca_location = :only if Puppet::SSL::CertificateAuthority.ca?
 91: 
 92:     if Puppet.features.root?
 93:       begin
 94:         Puppet::Util.chuser
 95:       rescue => detail
 96:         puts detail.backtrace if Puppet[:trace]
 97:         $stderr.puts "Could not change user to #{Puppet[:user]}: #{detail}"
 98:         exit(39)
 99:       end
100:     end
101: 
102:     unless options[:rack]
103:       require 'puppet/network/server'
104:       @daemon.server = Puppet::Network::Server.new(:xmlrpc_handlers => xmlrpc_handlers)
105:       @daemon.daemonize if Puppet[:daemonize]
106:     else
107:       require 'puppet/network/http/rack'
108:       @app = Puppet::Network::HTTP::Rack.new(:xmlrpc_handlers => xmlrpc_handlers, :protocols => [:rest, :xmlrpc])
109:     end
110: 
111:     Puppet.notice "Starting Puppet master version #{Puppet.version}"
112: 
113:     unless options[:rack]
114:       @daemon.start
115:     else
116:       return @app
117:     end
118:   end