shibboleths_lil_helper 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -10,15 +10,7 @@ Shibboleth's Lil Helper (slh) is a tool that automates the generation of Apache/
10
10
 
11
11
  * __Providing conceptually simple linear process__ that distills the main steps associated with Shibboleth integration.
12
12
 
13
- * Verifying metadata consistency across sites & hosts associated with
14
- particular Shibboletht SP entity_id.
15
-
16
- DISCLAIMER
17
- -------------------------
18
- All you see here on Github is the readme, no code yet.
19
-
20
- This is released as a RubyGem right now, we hope to push the source up
21
- here once things stabilize further
13
+ * __Verifying metadata consistency__ across sites & hosts associated with particular Shibboletht SP entity_id.
22
14
 
23
15
  Why another tool?
24
16
  -----------------
@@ -32,83 +24,152 @@ configuration consistently with minimal manual work for:
32
24
  * each running the Apache/IIS Native Service Provider
33
25
 
34
26
  Installation
35
- ============
36
- * Pre-requisites:
27
+ ------------
28
+ * Pre-requisites
29
+ * Ruby: http://www.ruby-lang.org/en/downloads/
37
30
  * Rubygems: http://rubygems.org/pages/download
38
31
 
39
32
  * Via Ruby Gems:
40
- * gem install shibboleths_lil_helper
33
+ * `gem install shibboleths_lil_helper`
41
34
  * Then type `slh` -- this provides more detailed/actionable
42
35
  documentation
43
36
 
37
+ * Via Git: (requires bundler gem)
38
+ * this is how developers/contributors should install the tool
39
+ * `git clone ...git://thisrepo... slh`
40
+ * `cd slh`
41
+ * `bundle install`
42
+ * then add a symlink to bin/slh (something like below)
43
+ * `ln -s bin/slh ~/slh`
44
+ * make sure the slh binary is the right one (not a gem one)
45
+ * `which slh`
46
+
47
+ * Install notes:
48
+ * Tool requires nokogiri gem which in-turn requires libxml2, you may
49
+ run into difficulties there: See http://nokogiri.org/tutorials/installing_nokogiri.html if you have problems.
50
+
51
+ Before using this tool
52
+ ----------------------
53
+ For each host you want to integrate with Shibboleth, do the following and have answers for the questions below.
54
+
55
+ __Don't try to use this tool until you have followed these instructions for at least one host.__
56
+
57
+ For each host:
58
+
59
+ * __Install Shibboleth Native Service Provider Apache/IIS__
60
+ https://wiki.shibboleth.net/confluence/display/SHIB2/Installation
61
+ Ideally, you should be able to hit a URL like "Shibboleth.ss/Metadata" for each site
62
+ on the host and have it cough out some XML goo. (not a strict
63
+ requirement, slh will help you with this later too)
64
+
65
+ * What web server is it? IIS or Apache
66
+
67
+ * If IIS, what is the site ID?
68
+ You can find this my clicking "Websites" in IIS and looking at the "Identifier" column for myshinynewwebsite.umn.edu.
69
+
70
+ * What is the host name of the computer? (e.g. somehost.com)
71
+
72
+ * What is the site name? (e.g. myshinynewwebsite.umn.edu)
73
+
74
+ * Is authentication required for the entire site or particular directories?
75
+
76
+ * Is this URL available for your site? myshinynewwebsite.umn.edu/Shibboleth.sso/Metadata
77
+
78
+ * What is the error support contact email?
79
+
80
+ * What is the Service Provider entity ID you'd like to use?
81
+ A simple convention is to have a dev entity for "development" or "staging" apps and one for production stuff.
82
+ You might consider https://YOUR_ORG.umn.edu/shibboleth/dev_default or https://YOUR_ORG.umn.edu/shibboleth/prod_default
83
+
84
+
44
85
  Assumptions
45
- ===========
46
- * Shibboleth Native Service Provider Apache/IIS is already installed on your target web servers.
47
- * The X509Certificate (sp-cert.pem, sp-key.pem) keys are in their default locations along-side shibboleth2.xml.
48
- * The Shibboleth apache module is loaded globally for all vHosts.
49
- * You are integrating with a single Identity Provider.
86
+ -----------
87
+ * Each host integrates with a single Identity Provider, not multiple.
88
+ * (for Apache) The Shibboleth apache module is loaded globally for all vHosts.
50
89
 
51
90
  Concept
52
- =======
91
+ -------
53
92
 
54
- All configuration and authentication specs for all Shibboleth SP instances are specified in a single ruby parseable "shibboleths_lil_helper/config.rb" file. From these specs, slh is capable of generating all of the required XML files you will need to integrate with a Shibboleth Identify Provider (Idp).
93
+ All configuration and authentication specs for all Shibboleth SP instances are specified in a single ruby parseable `shibboleths_lil_helper/config.rb` file. From these specs, slh is capable of generating all of the required XML files you will need to integrate with a Shibboleth Identify Provider (Idp). The following breaks down the essential steps.
55
94
 
56
- The generation of these XML files happens through a command line tool
57
- called "slh". Each particular task is broken into sub-commands such as
58
- "initialize", "generate", "verify_metadata", or "generate_metadata" that perform various tasks.
59
95
 
60
- * It all starts with:
96
+ ### Initialization
97
+ It all starts with
61
98
 
62
99
  mkdir shibboleth_deployer
63
100
  cd shibboleth_deployer
64
101
  slh initialize
65
102
 
66
- This creates a config file with example code you'll need to change to work.
103
+ This creates a config file with example code you'll need to change to work.
104
+
105
+ ### SP configuration
106
+ Edit `shibboleths_lil_helper/config.rb` to reflect your setup:
67
107
 
68
- * Go in and edit shibboleths_lil_helper/config.rb to reflect your setup,
69
- adding
70
108
  * entity id
71
109
  * idp metadata url
72
110
  * hosts, sites, and paths to protect for each for each site
73
111
 
74
-
75
- * From here you type:
112
+ From here you type:
76
113
 
77
114
  slh generate
78
115
 
79
- which will generate shibboleth2.xml and a couple others
80
- Now--you go put these files on the hosts they have been generated for.
116
+ This creates:
117
+
118
+ * shibboleth2.xml
119
+ * idp_metadata.xml
120
+ * shib_apache.conf (if using apache)
81
121
 
82
- * The generated shibboleth2.xml will have RequestMap specs that restrict
83
- access to specified paths you have
122
+ for each host for each entity_id. shibboleth2.xml contains RequestMap, AssertionConsumer server "endpoints" and other goo needed to integrate with an Shib IDP.
84
123
 
124
+ Go deploy these config files to you hosts. (the tool provides more details)
85
125
 
86
- * Once you've copied the shibboleth2.xml up to your target hosts, you
87
- can type:
126
+ ### Metadata verification
127
+ Verify your metadata data across all hosts:
88
128
 
89
129
  slh verify_metadata
90
130
 
91
- which will tell some of the things that are probably incorrect with
92
- your setup and how to fix it. (like copying the sp-key.pem and sp-cert.pem keys associated with the :is_key_originator site to all of the other hosts)
131
+ Which will tell some of the things that are probably incorrect with
132
+ your setup and how to fix it. (like copying the sp-key.pem and sp-cert.pem keys associated with the `:is_key_originator` site to all of the other hosts)
93
133
 
94
- * Then, once verify_metadata is showing all green:
134
+ ### Metadata generation
135
+ Once verify_metadata is showing all green:
95
136
 
96
137
  slh generate_metadata
97
138
 
98
- which generates a metadata file for each strategy/entity id you have
139
+ which generates a metadata file for each strategy/entity id you have
99
140
  that you can give you your IDP.
100
141
 
101
- Real World Example
102
- ==================
103
- The following describes how we integrate this tool's generated output
104
- into a deployment automation tool called Capistrano.
142
+ Once the IDP has added your metadata, then each site should be able to
143
+ respond to
144
+
145
+ Shibboleth.sso/Login
146
+
147
+ and be happily prompted for login.
148
+
149
+
150
+ Deployment automation
151
+ ---------------------
152
+ Once you have the basic stuff working, you may want to automate
153
+ deployment:
154
+
155
+ slh capistrano_deploy
156
+
157
+ will create a config/deploy.rb
158
+
159
+ See https://github.com/capistrano/capistrano/wiki/ for more details
105
160
 
106
- We have a private repo called shibboleth_deployer that includes the shibboleths_lil_helper generated config files and uses Capistrano to push these files out target servers and restarts shibd and httpd. It's usage looks like:
161
+ This requires some initial setup per host and only works well if your
162
+ target hosts run SSH (aka default not-IIS setup)
163
+
164
+ deployment automation example
165
+ -----------------------------
166
+ We have a private repo called shibboleth\_deployer that includes the shibboleths\_lil\_helper generated config files and uses Capistrano to push these files out target servers and restarts shibd and httpd. It's usage looks like:
107
167
 
108
168
  cap deploy HOST=asr-web-dev4.oit.umn.edu
109
169
 
170
+ ### Initial setup
110
171
  For each of our target servers we setup Capistrano to have a clone of
111
- this shibboleth_deployer repo structured in the standard way, e.g:
172
+ this shibboleth\_deployer repo structured in the standard way:
112
173
 
113
174
  ls /etc/shibboleth_deployer
114
175
  current
@@ -116,33 +177,49 @@ this shibboleth_deployer repo structured in the standard way, e.g:
116
177
  shared
117
178
 
118
179
  Setup symlinks to the appropriate config files within
119
- shibboleth_deployer from the places the Native Shibboleth SP expects
180
+ shibboleth\_deployer from the places the Native Shibboleth SP expects
120
181
  files to be, e.g:
121
182
 
122
- (from the /etc/shibboleth dir)
183
+ from the /etc/shibboleth dir
184
+
123
185
  ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shibboleth2.xml shibboleth2.xml
124
186
 
125
187
  ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/idp_metadata.xml idp_metadata.xml
126
188
 
127
- (from the /etc/httpd/conf.d dir)
128
- ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shib_apache.conf shib_apache.conf
189
+ from the /etc/httpd/conf.d dir
129
190
 
130
- Additional Docs
131
- ===============
132
- * See the stuff in /doc in this project
191
+ ln -s /etc/shibboleth_deployer/current/shibboleths_lil_helper/generated/apache_shib_test_server/asr-web-dev4.oit.umn.edu/shib_apache.conf shib_apache.conf
133
192
 
134
193
  How to Help
135
- ======================
194
+ -----------
195
+ * Let us know the issues you are having with the tool via Github Issues.
136
196
 
137
- Email Us
197
+ * Improve the documentation! The whole purpose of this tool is to
198
+ provide a straight-forward path to setting up a Shibboleth SP.
199
+
200
+ How to contribute
138
201
  ----------------------
139
- * Let us know you are interested in using the tool.
202
+ * Fork, implement, issue a pull request for small changes.
140
203
 
141
- * Voice your ideas about questions you have and features you'd like to see.
204
+ * Email us for big ideas or API changes--we'd like to keep this tool
205
+ stable and want to collaborate to identify the right way of
206
+ accommodating new features while maintaining backward compatibility.
142
207
 
143
- Authors
144
- =======
208
+ Contributors
209
+ ------------
145
210
  * Joe Goggins, Academic Support Resources, goggins@umn.edu
146
211
  * Chris Dinger, Academic Support Resources, ding0057@umn.edu
147
212
 
148
- Copyright (c) 2011 University of Minnesota
213
+ Acknowledgements
214
+ ----------------
215
+ Thanks to these folks for providing feedback and willingness to pilot
216
+ the tool.
217
+
218
+ * David Peterson, Office of Institutional Research
219
+ * Debbie Gillespie, Computer Science and Engineering
220
+ * Eva Young, Office of Institional Compliance
221
+ * Josh Buysse, CLA Office of Information Technology
222
+ * Aaron Zirbes, Environmental Health Sciences
223
+
224
+
225
+ Copyright (c) Regents of the University of Minnesota
data/TODOS.txt CHANGED
@@ -1,7 +1,14 @@
1
- * Release as gem
1
+ TODOS
2
+
3
+
2
4
 
3
5
 
4
6
  DONE
7
+ * Added note in readme: Broke because of libxml2 lacking http://nokogiri.org/tutorials/installing_nokogiri.html
8
+ * after slh generate, tell the user exactly where they should put the files.
9
+ * Blowup gracefully when no protect statements
10
+ * config.rb.erb: specify what must be specified and what is optional
11
+ * Release as gem
5
12
  * Incorporate FAQ stuff somehow https://www.pivotaltracker.com/story/show/19256223
6
13
  * Add something that warns LOUDLY to use slh with source control
7
14
  * Rejigger the default config.rb.erb--simplify and reference documentation
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
data/lib/slh/cli.rb CHANGED
@@ -107,7 +107,7 @@ OTHER DOCUMENTATION SOURCES (not just this tool)
107
107
  when 'verify_metadata'
108
108
  klass = [Slh::Cli::FetchMetadata, Slh::Cli::CompareMetadata, Slh::Cli::VerifyMetadataEncryption]
109
109
  when 'generate_metadata'
110
- klass = [Slh::Cli::FetchMetadata, Slh::Cli::CompareMetadata,Slh::Cli::VerifyMetadataEncryption, Slh::Cli::GenerateMetadata]
110
+ klass = Slh::Cli::GenerateMetadata
111
111
  when "generate_capistrano"
112
112
  klass = Slh::Cli::GenerateCapistranoDeploy
113
113
  when "copy_templates_to_override"
@@ -12,9 +12,23 @@ class Slh::Cli::Generate < Slh::Cli::HostFilterableBase
12
12
  FileUtils.mkdir_p(host.config_dir)
13
13
  File.open(strategy.config_file_path(cf,host), 'w') {|f| f.write(strategy.generate_config_file_content(cf,host)) }
14
14
  Slh::Cli.instance.output " Wrote #{strategy.config_file_path(cf,host)}"
15
+ if cf == 'shib_apache.conf'
16
+ Slh::Cli.instance.output " copy this into /etc/httpd/conf.d or somewhere apache can read it are target host", :highlight => :green
17
+ else
18
+ if host.shib_prefix.nil?
19
+ Slh::Cli.instance.output " copy this into /etc/shibboleth for this host on target host", :highlight => :green
20
+ else
21
+ Slh::Cli.instance.output " copy this into #{host.prefixed_filepath_for(cf)} on target host", :highlight => :green
22
+ end
23
+ end
15
24
  end
16
25
  end
26
+
27
+ originator_host = strategy.key_originator_site.parent_host
28
+ Slh::Cli.instance.output "\ncopy sp-key.pem sp-cert.pem from host #{originator_host.name} to ALL target hosts.", :highlight => :green
29
+ Slh::Cli.instance.output " This makes the X509Certificate stuff in all metadata for all sites associated with an entity_id match"
17
30
  end
31
+
18
32
  Slh::Cli.instance.output "You MUST deploy these files your web servers and restart httpd and shibd for subsequent commands to work", :highlight => true
19
33
  end
20
34
  end
@@ -28,6 +28,9 @@ class Slh::Models::Site < Slh::Models::Base
28
28
  if block_given?
29
29
  self.instance_eval(&block)
30
30
  end
31
+ if self.paths.empty?
32
+ raise "No protect statements for site #{site_name}, you must protect at least 1 path for every site. Adding a \"protect\" statement should make this error go away"
33
+ end
31
34
  end
32
35
 
33
36
  def metadata
@@ -1,40 +1,96 @@
1
+ # ABOUT
2
+ # =====
3
+ # This file is the basis for your shibboleth config for
4
+ # all entities, hosts, sites, and url paths you want to protect for your organization.
5
+ #
6
+ # All slh commands utilize this file to do its thing.
7
+ #
8
+ # To get started:
9
+ # * fill in the REQUIRED items
10
+ # * run slh generate
11
+ # * deploy the files our to your server to the appropriate place
12
+ # * fight with your server to get somesite.com/Shibboleth.sso/Metadata spitting out XML
13
+ # for each host
14
+ #
15
+ # Then:
16
+ # * run slh verify_metadata
17
+ # * copy sp-key, sp-cert, etc
18
+ # * re-run command until you aren't seeing any errors
19
+ # Then:
20
+ # * run slh generate_metadata
21
+ # * give the metadata to your IDP folks
22
+ #
23
+ # Verify:
24
+ # * Goto somesite.com/Shibboleth.sso/Login
25
+ # * You should be prompted to login
26
+ #
27
+ # A strategy
28
+ # has one entity
29
+ # has a metadata url
30
+ # has many hosts
31
+ # a host has many sites
32
+ # a site has many protected paths
33
+ # a protected path can require auth, optionally use auth, or restrict to a
34
+ # particular set of users
35
+ #
1
36
  Slh.for_strategy :test_idp do
2
- set :sp_entity_id, 'YOUR_ENTITY_ID'
3
- set :idp_metadata_url, 'YOUR_IDP_METADATA_URL'
4
- set :error_support_contact, 'YOUR_ERROR_SUPPORT_EMAIL_ADDRESS'
37
+ set :sp_entity_id, 'YOUR_ENTITY_ID' # REQUIRED, https://yourorg.umn.edu/shibboleth/default
5
38
 
6
- for_apache_host 'SOMEHOSTNAME.COM' do
7
- # UNCOMMENT THIS IF YOUR SHIB STUFF LIVES IN A NON-STANDARD LOCATION
8
- # set :shib_prefix, '/swadm/etc/shibboleth'
9
- for_site 'SOMESITENAME1.COM' do
39
+ set :idp_metadata_url, 'YOUR_IDP_METADATA_URL' # REQUIRED, https://idp-test.shib.umn.edu/metadata.xml
40
+ set :error_support_contact, 'YOUR_ERROR_SUPPORT_EMAIL_ADDRESS' # OPTIONAL
41
+
42
+ # Can be either
43
+ # for_apache_host
44
+ # or
45
+ # for_iis_host
46
+ for_apache_host 'SOMEHOSTNAME.COM' do # REQUIRED
47
+ # uncomment if your shib stuff lives in a non-standard location
48
+ # set :shib_prefix, '/swadm/etc/shibboleth' # OPTIONAL
49
+
50
+ # uncomment if and fill-in if you are using IIS
51
+ # set :site_id, "YOU_MUST_SET_THE_SITE_ID_HERE" # REQUIRED if for_iis_host
52
+ #
53
+ # replace with the host name of your server
54
+ for_site 'SOMESITENAME1.COM' do # REQUIRED
10
55
  # Each strategy must set this for exactly one site
11
56
  # its used as the authoritative source to from which all other
12
57
  # sites metadata's X509Certificate should match
13
58
  # the sp-key.pem and sp-cert.pem files from this host should be
14
59
  # copied to all other hosts underneath the strategy
15
- #
16
- set :is_key_originator, true
17
- protect 'SOME_PATH_YOU_WANT_TO_REQUIRE_AUTH'
18
- end
19
- for_site 'SOMESITENAME2.COM' do
20
- protect 'SOME_PATH_YOU_WANT_OPTIONAL_AUTH' do
21
- set :flavor, :authentication_optional
60
+ set :is_key_originator, true # REQUIRED, see instructions
61
+ protect '/' do # REQUIRED
62
+ # delete this line if you want to require auth for the whole site
63
+ set :flavor, :authentication_optional # OPTIONAL
64
+ # There are three "flavors":
65
+ # authentication_required: defaults to this if unspecified
66
+ # i.e. (no do-end block required)
67
+ # protect 'secure'
68
+ #
69
+ # authentication_optional: Makes it possible for
70
+ # the app layer to redirect to Shibboleth.sso/Login
71
+ # i.e.
72
+ # protect 'lazy_auth' do
73
+ # set :flavor, :authentication_optional
74
+ # end
75
+ # authentication_required_for_specific_users: Require auth and restrict to
76
+ # a particular set of users (not-tested extensively)
77
+ # i.e.
78
+ # protect 'specific_users' do
79
+ # set :flavor, :authentication_required_for_specific_users
80
+ # set :specific_users, %w(SOMEUSER@SOME.DOMAIN.COM ANOTHERUSER@SOME.DOMAIN.COM)
81
+ # end
22
82
  end
83
+ # ... for each protected dir for this site ...
23
84
  end
24
- for_site 'SOMESITENAME3.COM' do
25
- protect 'SOME_PATH_YOU_WANT_TO_RESTRICTED_TO_PARTICULAR_USERS' do
26
- set :flavor, :authentication_required_for_specific_users
27
- set :specific_users, %w(SOMEUSER@SOME.DOMAIN.COM ANOTHERUSER@SOME.DOMAIN.COM)
28
- end
29
- end
30
- end
31
- for_iis_host 'SOMEIISHOSTNAME.COM' do
32
- for_site 'SOMEIISSITENAME1.COM' do
33
- set :site_id, "YOU_MUST_SET_THE_SITE_ID_HERE"
34
- protect 'SOME_PATH_YOU_WANT_TO_REQUIRE_AUTH'
35
- end
85
+ # ... for each site on this host ...
36
86
  end
87
+ # ... for each host within this strategy (using this entity_id)
37
88
  end
38
- Slh.clone_strategy_for_new_idp :test_idp,
39
- :production_idp,
40
- 'THE_PRODUCTION_IDP_METADATA_URL'
89
+ # ... for each strategy/aka entity_id ...
90
+ #
91
+ # Uncomment this line if you want to create a new strategy that is identical
92
+ # an existing one but points at a different IDP entity URL
93
+ #
94
+ # Slh.clone_strategy_for_new_idp :test_idp, # OPTIONAL
95
+ # :production_idp,
96
+ # 'THE_PRODUCTION_IDP_METADATA_URL'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{shibboleths_lil_helper}
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joe Goggins"]
12
- s.date = %q{2011-11-02}
12
+ s.date = %q{2011-11-08}
13
13
  s.default_executable = %q{slh}
14
14
  s.description = %q{See the summary text.}
15
15
  s.email = %q{goggins@umn.edu}
@@ -2,14 +2,14 @@
2
2
  # Slh.define_idp_meta_data :default, 'https://idp-test.shib.umn.edu/metadata.xml'
3
3
  # Slh.define_error_support_contact :default, 'goggins@umn.edu'
4
4
  #
5
- Slh.define_strategy :dummy1,
5
+ Slh.for_strategy :dummy1,
6
6
  :sp_entity_id => 'https://shib-local-vm1.asr.umn.edu/rhel5_sp1',
7
7
  :idp_metadata_url => 'https://idp-test.shib.umn.edu/metadata.xml',
8
8
  :error_support_contact => 'goggins@umn.edu' do
9
9
  for_host 'shib-local-vm1.asr.umn.edu' do
10
- for_app 'https://shib-local-vm1.asr.umn.edu' do
11
- protect_location '/secure'
12
- protect_location '/lazy', :with => :lazy_authentication
10
+ for_site 'https://shib-local-vm1.asr.umn.edu' do
11
+ protect '/secure'
12
+ protect '/lazy', :flavor => :authentication_optional
13
13
  end
14
14
  end
15
15
  end
@@ -1,17 +1,9 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestShibbolethsLilHelper < Test::Unit::TestCase
4
- # should "have a Slh namespace that will contain all classes contained" do
5
- # assert Slh.class == Module
6
- # end
7
- # should "provides class representing core shibboleth model-ish ideas" do
8
- # assert Slh::Models::App.class == Class
9
- # assert Slh::Models::Host.class == Class
10
- # # TODO add more
11
- # end
12
- # should "provide some top level methods for using the tool" do
13
- # # TODO add more
14
- # end
4
+ should "have a Slh namespace that will contain all classes contained" do
5
+ assert Slh.class == Module
6
+ end
15
7
 
16
8
  # context "with :dummy1 strategy" do
17
9
  # setup do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 2
9
- version: 1.0.2
8
+ - 3
9
+ version: 1.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joe Goggins
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-11-02 00:00:00 -05:00
17
+ date: 2011-11-08 00:00:00 -06:00
18
18
  default_executable: slh
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency