code: def ConfigureHostnames(config, external_hostname = None):
    
    if not external_hostname:
      try:
        external_hostname = socket.gethostname()
      except (OSError, IOError):
        print("Sorry, we couldn't guess your hostname.\n")
  
      external_hostname = RetryQuestion(
          "Please enter your hostname e.g. "
          "grr.example.com", "^[\\.A-Za-z0-9-]+$", external_hostname)
  
    print("""\n\n-=Server URL=-
  The Server URL specifies the URL that the clients will connect to
  communicate with the server. For best results this should be publicly
  accessible. By default this will be port 8080 with the URL ending in /control.
  """)
    frontend_url = RetryQuestion("Frontend URL", "^http://.*/$",
                                 "http://%s:8080/" % external_hostname)
    config.Set("Client.server_urls", [frontend_url])
  
    frontend_port = urlparse.urlparse(frontend_url).port or grr_config.CONFIG.Get(
        "Frontend.bind_port")
    config.Set("Frontend.bind_port", frontend_port)
  
    print("""\n\n-=AdminUI URL=-:
  The UI URL specifies where the Administrative Web Interface can be found.
  """)
    ui_url = RetryQuestion("AdminUI URL", "^http[s]*://.*$",
                           "http://%s:8000" % external_hostname)
    config.Set("AdminUI.url", ui_url)
    ui_port = urlparse.urlparse(ui_url).port or grr_config.CONFIG.Get(
        "AdminUI.port")
    config.Set("AdminUI.port", ui_port)
docs: This configures the hostnames stored in the config.