jerbil 1.2.2

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.
Files changed (86) hide show
  1. data/Bugs.rdoc +66 -0
  2. data/Gemfile +12 -0
  3. data/History.txt +359 -0
  4. data/Intro.txt +5 -0
  5. data/LICENCE.rdoc +159 -0
  6. data/README.md +335 -0
  7. data/README_SERVICES.md +410 -0
  8. data/README_TESTING.md +47 -0
  9. data/bin/jerbil +62 -0
  10. data/bin/jerbil-install +56 -0
  11. data/etc/conf.d/jerbild +15 -0
  12. data/etc/conf.d/jserviced +39 -0
  13. data/etc/init.d/jerbild +55 -0
  14. data/etc/init.d/jserviced +59 -0
  15. data/etc/jerbil/jerbil-client.rb +2 -0
  16. data/etc/jerbil/jerbil.rb +83 -0
  17. data/lib/jerbil.rb +636 -0
  18. data/lib/jerbil/config.md +49 -0
  19. data/lib/jerbil/config.rb +67 -0
  20. data/lib/jerbil/errors.rb +74 -0
  21. data/lib/jerbil/jerbil_service/base.rb +191 -0
  22. data/lib/jerbil/jerbil_service/client.rb +325 -0
  23. data/lib/jerbil/jerbil_service/config.md +119 -0
  24. data/lib/jerbil/jerbil_service/config.rb +72 -0
  25. data/lib/jerbil/jerbil_service/sclient.rb +343 -0
  26. data/lib/jerbil/jerbil_service/support.rb +58 -0
  27. data/lib/jerbil/jerbil_service/utils.rb +35 -0
  28. data/lib/jerbil/servers.rb +230 -0
  29. data/lib/jerbil/service.rb +216 -0
  30. data/lib/jerbil/support.rb +160 -0
  31. data/lib/jerbil/thor/server.rb +76 -0
  32. data/lib/jerbil/thor/service.rb +74 -0
  33. data/lib/jerbil/version.rb +13 -0
  34. data/sbin/jerbil-status +120 -0
  35. data/sbin/jerbil-stop +139 -0
  36. data/sbin/jerbild +186 -0
  37. data/sbin/jservice-status +107 -0
  38. data/sbin/jservice-stop +94 -0
  39. data/sbin/jserviced +111 -0
  40. data/spec/jerbil_2_jerbil_spec.rb +87 -0
  41. data/spec/jerbil_client1_spec.rb +80 -0
  42. data/spec/jerbil_client_spec.rb +114 -0
  43. data/spec/jerbil_client_stop_spec.rb +24 -0
  44. data/spec/jerbil_daemonised/jerbil_local_spec.rb +81 -0
  45. data/spec/jerbil_daemonised/jerbil_remote_spec.rb +116 -0
  46. data/spec/jerbil_load.rb +48 -0
  47. data/spec/jerbil_local_spec.rb +91 -0
  48. data/spec/jerbil_missing_spec.rb +98 -0
  49. data/spec/jerbil_remote_spec.rb +117 -0
  50. data/spec/jerbil_remote_spec_bup.rb +168 -0
  51. data/spec/jerbil_service_error_spec.rb +56 -0
  52. data/spec/jerbil_service_spec.rb +41 -0
  53. data/spec/jerbil_support_spec.rb +69 -0
  54. data/spec/jservice_utils_spec.rb +38 -0
  55. data/spec/server_spec.rb +69 -0
  56. data/spec/server_update_spec.rb +28 -0
  57. data/spec/service_spec.rb +72 -0
  58. data/spec/spec_helper.rb +12 -0
  59. data/spec/test_env_spec.rb +53 -0
  60. data/test/bad_test_service.rb +31 -0
  61. data/test/conf.d/jerbil +36 -0
  62. data/test/conf.d/jerbil.conf +39 -0
  63. data/test/conf.d/jerbil.rb +55 -0
  64. data/test/conf.d/jerbil_local.rb +33 -0
  65. data/test/conf.d/jerbil_no_local.conf +39 -0
  66. data/test/conf.d/jerbil_old.rb +47 -0
  67. data/test/conf.d/jerbil_test.rb +35 -0
  68. data/test/conf.d/malformed +1 -0
  69. data/test/conf.d/missing_services +39 -0
  70. data/test/conf.d/ruby_test.rb +8 -0
  71. data/test/init.d/jerbild +14 -0
  72. data/test/jerbil.rb +51 -0
  73. data/test/jerbil_config.rb +8 -0
  74. data/test/jstop.rb +36 -0
  75. data/test/key.asc +1 -0
  76. data/test/lib/ruby_test.rb +37 -0
  77. data/test/lib/ruby_test/config.rb +56 -0
  78. data/test/lib/ruby_test/version.rb +13 -0
  79. data/test/pids/jerbil-prod.asc +1 -0
  80. data/test/pids/jerbil-prod.pid +1 -0
  81. data/test/pids/jerbil.pid +1 -0
  82. data/test/private_key_file.asc +3 -0
  83. data/test/service-stop.rb +86 -0
  84. data/test/service_mock.rb +94 -0
  85. data/test/test_service_client.rb +25 -0
  86. metadata +265 -0
@@ -0,0 +1,66 @@
1
+ == Bugs
2
+
3
+ ====31-Jan-2012
4
+
5
+ * a client that does not respond to a verify can hang jerbil! Is it possible
6
+ put a timeout on?
7
+
8
+ 10-01-2012
9
+
10
+ sclient will strip out log options when getting its own! Need to change this or add
11
+ an option in Jellog to not strip them.
12
+
13
+ 01-Dec-2011
14
+
15
+ JerbilService::Client should be relaxed about config options!
16
+
17
+ Nov-2011
18
+
19
+ Nasty race condition where remote server deletes registering service from its local
20
+ server, so everyone knows about a service except the local server! (Should be fixed in 0.2.12)
21
+
22
+ 09-Sep-2011
23
+
24
+ There is no checking that services registered locally have the same hostname as the
25
+ server. Should not be an issue, but did cause problems during testing.
26
+
27
+ There is no way of directing a client or service to a particular jerbil server. Should
28
+ only be relevant to testing, could add a :jerbil_config key to the options hash when calling
29
+ get_server, which would always return nil if it had not been set anyway. (Addressed)
30
+
31
+ 05-Sep-2011
32
+
33
+ When a server assumes control of a missing service because the server is not there, it fails
34
+ to delete its own copy! And when the missing server resumes, it cannot delete the un-deleted
35
+ service because it does not have the right key for that service anymore.
36
+
37
+ Colored success response for jerbl -v would be a big benefit
38
+
39
+ 01-Aug-2011
40
+
41
+ 1. service-missing is not working as expected. Needs to be tested to see what happens
42
+ when a server is ungracefully removed. May need to change logic from removing services
43
+ to removing servers. - See above
44
+
45
+ 2. Need to add client config file for jerbil to avoid having readable files everywhere.
46
+
47
+ 23-June-2011
48
+
49
+ jerbil -V reports the number of times a service has been accessed through the local server.
50
+ Would be good to share all counts across all servers somehow?
51
+
52
+ 17-Apr-2011
53
+
54
+ If you run jerbil -v on a remote server it appears to remove a service but the removal fails.
55
+ This is because it tries to remove the service locally. Also, if a server disappears then
56
+ the other servers still think the service is available. They need to remove the service manually if
57
+ that is the case!
58
+
59
+ Fixed in 0.1.0
60
+ ------
61
+ 17-May-2011
62
+
63
+ Would be good to hide the key check in a private function: check_key(key) rather than
64
+ expose the underlying mechanism
65
+
66
+ Also change key to pkey for private key parameters
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ # @markup ruby
2
+ #
3
+ # general utilities
4
+ gem 'netaddr'
5
+ gem 'term-ansicolor'
6
+ gem 'thor'
7
+ gem 'daemons'
8
+
9
+ # jerbil-related utilities
10
+ gem 'jellog', '>=1.0.14' # for logging
11
+ gem 'jeckyl', '>=0.2.7' # for config files
12
+ gem 'jeni', '>=0.2.3' # for installation
@@ -0,0 +1,359 @@
1
+ # @markup rdoc
2
+ # @title Change Log
3
+ # @author Robert Sharp
4
+
5
+ ==History
6
+
7
+ [jerbil-1.2.2 21-Nov-2012]
8
+
9
+ Add proper home for jerbil user in jerbil-install. Add guidance on logging to READMEs.
10
+
11
+ [jerbil-1.2.1 13-Nov-2012]
12
+
13
+ Minor bugs fixed in sbin/jerbild and runscript updated to su to jerbil user
14
+
15
+ [jerbil-1.2.0 12-Nov-2012]
16
+
17
+ Housekeeping release with unwanted modules/code removed and documentation tidied for
18
+ release into wild (evenutally).
19
+
20
+ [jerbil-1.1.3 22-Sep-2012]
21
+
22
+ Add some instrumentation to jserviced to help troubleshoot the numbat runscript.
23
+
24
+ [jerbil-1.1.2 06-Sep-2012]
25
+
26
+ Update runscript to create /var/run/jermine if not already there. 3.0+ kernels
27
+ appear to use /run on tmpfs
28
+
29
+ [jerbil-1.1.1 24-Aug-2012]
30
+
31
+ Take out the -m option from the su command - no need to preserve any environment
32
+
33
+ [jerbil-1.1.0 24-Aug-2012]
34
+
35
+ Change jservice to use su again as this seems more reliable than changing the user
36
+ internally. Also add logging to verify calls.
37
+
38
+ [jerbil-1.0.19 22-Aug-2012]
39
+
40
+ add log_daemon to stop and status services
41
+
42
+ [jerbil-1.0.18 22-Aug-2012]
43
+
44
+ Daemons expects STDOUT to be open, so ensure it is!
45
+
46
+ [jerbil-1.0.17 22-Aug-2012]
47
+
48
+ Fix daemon opts that depended on starting a logger
49
+
50
+ [jerbil-1.0.16 22-Aug-2012]
51
+
52
+ Fix problem with log-opts being deleted and not there a second time round
53
+
54
+ [jerbil-1.0.15 22-Aug-2012]
55
+
56
+ Tweaks to sclient.rb to fix daemon problems or help uncover them at least
57
+
58
+ [jerbil-1.0.14 22-Aug-2012]
59
+
60
+ Set log_daemon to true in sbin/jserviced
61
+
62
+ [jerbil-1.0.13 22-Aug-2012]
63
+
64
+ Add log_daemon capability to init files
65
+
66
+ [jerbil-1.0.12 22-Aug-2012]
67
+
68
+ Add log_daemon capability to sbin/jserviced
69
+
70
+ [jerbil-1.0.11 20-Aug-2012]
71
+
72
+ added defaults to key and pid directories in jerbil_service/config
73
+
74
+ [jerbil-1.0.10 20-Aug-2012]
75
+
76
+ fixed cut-and-paste errors in changing group
77
+
78
+ [jerbil-1.0.9 20-Aug-2012]
79
+
80
+ fixed Chuser calls in sbin/jerbild
81
+
82
+ [jerbil-1.0.8 17-Aug-2012]
83
+
84
+ fix another typo in config
85
+
86
+ [jerbil-1.0.7 17-Aug-2012]
87
+
88
+ add require 'etc' to config
89
+
90
+ [jerbil-1.0.6 17-Aug-2012]
91
+
92
+ Fix bug in change_group
93
+
94
+ [jerbil-1.0.5 17-Aug-2012]
95
+
96
+ Provide a separate group parameter cos changing user does not do all the groups
97
+
98
+ [jerbil-1.0.4 17-Aug-2012]
99
+
100
+ Silently ignore register remote and remove remote if the key is invalid to allow
101
+ co-existence with pre-1.0 versions
102
+
103
+ [jerbil-1.0.3 15-Aug-2012]
104
+
105
+ Ensure only valid servers are remembered during start-up.
106
+
107
+ [jerbil-1.0.2 15-Aug-2012]
108
+
109
+ Add a catchall for connecting to older servers
110
+
111
+ [jerbil-1.0.1 15-Aug-2012]
112
+
113
+ Add NoMethodError as a reason why calls tp older servers may fail.
114
+
115
+ [jerbil-1.0.0 15-Aug-2012]
116
+
117
+ Release of new version, featuring server discovery, the new jservice scripts to start
118
+ any service, increased reliability, improved jerbil command and other minor changes.
119
+
120
+ [jerbil-0.99.13 26-Jul-2012]
121
+
122
+ Reworked remote server logic to ensure duplicate servers and services are purged
123
+
124
+ [jerbil-0.99.12 25-Jul-2012]
125
+
126
+ further annotations
127
+
128
+ [jerbil-0.99.11 25-Jul-2012]
129
+
130
+ Annotated to help debug key issues
131
+
132
+ [jerbil-0.99.10 25-Jul-2012]
133
+
134
+ jerbil/jerbil_service/client requires server instead of servers
135
+
136
+ [jerbil-0.99.09 25-Jul-2012]
137
+
138
+ Fix typo when adding services from remote server
139
+
140
+ [jerbil-0.99.08 25-Jul-2012]
141
+
142
+ Fix error in thor services verify
143
+
144
+ [jerbil-0.99.07 24-Jul-2012]
145
+
146
+ another release candidate with tweaks to sbin scripts.
147
+
148
+ [jerbil-0.99.06 23-Jul-2012]
149
+
150
+ minor tweaks to config files for installation
151
+
152
+ [jerbil-0.99.05 23-Jul-2012]
153
+
154
+ fixed Etc.getpwnam.name
155
+
156
+ [jerbil-0.99.04 23-Jul-2012]
157
+
158
+ fixed Jerbil::Config to inherit JerbilService::Config
159
+
160
+ [jerbil-0.99.03 23-Jul-2012]
161
+
162
+ Release candidate for testing
163
+
164
+ [jerbil-0.99.02 12-June-2012]
165
+
166
+ Fix mistaken call to get_key, now gone
167
+
168
+ [jerbil-0.99.01 08-June-2012]
169
+
170
+ First pre-release of Jerbil 1.0.0, offering flexible server configuration and a single
171
+ script for controlling services.
172
+
173
+ * reconfigured options to use Jeckyl::Service and to add net address and mask details
174
+ * renamed Jerbil::ServerRecord to Jerbil::Servers to reflect the role of the class
175
+
176
+ [jerbil-0.2.21 19-May-2012]
177
+
178
+ Added Aurelius to the default files and rename jers to jerbil
179
+
180
+ [jerbil-0.2.20 28-Apr-2012]
181
+
182
+ Annotate the client calls to try to understand the NoMethod errors raised
183
+
184
+ [jerbil-0.2.19 22-Mar-2012]
185
+
186
+ Fix a bug where 1.9 was failing cos instance_methods returns symbols instead of
187
+ strings.
188
+
189
+ jerbil-0.2.18 23-Dec-2011
190
+
191
+ Some refactoring and ensuring exception backtraces have newlines and not \n between
192
+ them!
193
+
194
+ jerbil-0.2.17 19-Dec-2011
195
+
196
+ Attempt to fix error when stopping services: cannot read symbol as string. Assume that
197
+ it is caused by :jerbil_config option. It Worked!
198
+
199
+ jerbil-0.2.16 19-Dec-2011
200
+
201
+ Restart logging after daemon is called
202
+
203
+ jerbil-0.2.15 19-Dec-2011
204
+
205
+ Change supervisor to catch StandardError and let SystemExit fall through untouched.
206
+ Add opts to log output from daemonize
207
+
208
+ jerbil-0.2.14 19-Dec-2011
209
+
210
+ improvements to supervisor class to add daemon log and catch errors more often
211
+
212
+ jerbil-0.2.12 27-Nov-2011
213
+
214
+ Attempt to fix bug where restarting service with old records on other servers
215
+ removes new service's record on own server!
216
+
217
+ jerbil-0.2.11 25-Sep-2011
218
+
219
+ Set default config file to be module.rb rather than module.conf
220
+
221
+ jerbil-0.2.10 24-Sep-2011
222
+
223
+ thor actions: check that a link exists before testing it is equal
224
+
225
+ jerbil-0.2.9 24-Sep-2011
226
+
227
+ Add separate re-useable thor module for common install actions
228
+
229
+ jerbil-0.2.8 21-Sep-2011
230
+
231
+ Update jerbs install to ensure files are moved to the correct place
232
+
233
+ jerbil-0.2.7 21-Sep-2011
234
+
235
+ Add 'etc' to gemspec
236
+
237
+ jerbil-0.2.6 21-Sep-2011
238
+
239
+ Include new jerbs command based on thor, and change Jerbil.remove so that it
240
+ attempts to remove a service from remote servers even if it is not registered
241
+ locally.
242
+
243
+ jerbil-0.2.5 17-Sep-2011
244
+
245
+ Adjust RUBYOPT etc in runscript
246
+
247
+ jerbil-0.2.4 17-Sep-2011
248
+
249
+ Add chmod to install
250
+
251
+ jerbil-0.2.3 17-Sep-2011
252
+
253
+ Correct runscript!
254
+
255
+ jerbil-0.2.2 17-Sep-2011
256
+
257
+ Correct uid in jerbs install
258
+
259
+ jerbil-0.2.1 17-Sep-2011
260
+
261
+ Adds in the jerbs executable, being a prospective replacement for bin/jerbil using thor
262
+ and including an install command
263
+
264
+ jerbil-0.2.0 08-Sep-2011
265
+
266
+ Migrate to Jellog 1.0
267
+ Add colour to jerbil listings
268
+ Fix bug in missing_service that failed to remove from local server
269
+ Add test to see if prior registered service is responding and kick it if it is not
270
+
271
+ jerbil-0.1.12 04-Aug-2011
272
+
273
+ ensure that jerbild daemon creates things in a defined directory.
274
+ delete pid and key files before trying to open them in case of permissions problems.
275
+
276
+ jerbil-0.1.11 02-Aug-2011
277
+
278
+ Included logging in jerbild to avoid whatever caused the daemonised version to fail.
279
+ Change default config file for jerbil to jerbil-client.conf.
280
+
281
+ jerbil-0.1.10 09-June-2011
282
+
283
+ Minor fix for incorrect exception names in jerbil/support
284
+
285
+ jerbil-0.1.9 01-June-2011
286
+
287
+ correct version method to respond with Jerbil::Version and add to output of bin/jerbil -S
288
+
289
+ jerbil-0.1.8 01-June-2011
290
+
291
+ Added back the verify method to JerbilService::Client!
292
+
293
+ jerbil-0.1.7 31-May-2011
294
+
295
+ Update to JerbilService::Client to refactor and redesign the interface to remove use of
296
+ evals that would otherwise compromise security
297
+
298
+ jerbil-0.1.6 30-May-2011
299
+
300
+ Add option to JerbilService::Base to not set $SAFE > 0 where subclass needs to set it later
301
+
302
+ jerbil-0.1.5 17-May-2011
303
+
304
+ Added a backtrace to Supervisor to help debug!
305
+
306
+ jerbil-0.1.4 17-May-2011
307
+
308
+ Added the service_key method to Client to make it easier to get the key for the service
309
+
310
+ jerbil-0.1.3 17-May-2011
311
+
312
+ Added a log entry for invalid service keys
313
+
314
+ jerbil-0.1.2 17-May-2011
315
+
316
+ Added a check_key method to JerbilService::Base to hide key checking.
317
+ Cleaned up some unnecessary system logging in jerbil.
318
+
319
+ jerbil-0.1.1 02-May-2011
320
+
321
+ Minor changes to Client
322
+
323
+ jerbil-0.1.0 2-May-2011
324
+
325
+ Second release with a substantial number of changes and tweaks.
326
+
327
+ jerbil-0.0.8 17-Apr-2011
328
+
329
+ Further tweaks to initscript install option
330
+
331
+ jerbil-0.0.7 17-Apr-2011
332
+
333
+ Tweak to init script for install option
334
+
335
+ jerbil-0.0.6 17-Apr-2011
336
+
337
+ Fixed a few more typos and added install to init script
338
+
339
+ jerbil-0.0.5 16-Apr-2011
340
+
341
+ Fixed mess up in sbin/jerbild to get real local host server record
342
+
343
+ jerbil-0.0.4 16-Apr-2011
344
+
345
+ Minor changes to init scripts and correct spelling mistake on daemonize
346
+
347
+ jerbil-0.0.3a 16-Apr-2011
348
+
349
+ Initial release for system level testing only.
350
+
351
+
352
+ jerbil-0.0.2 1-Apr-2011
353
+
354
+ Made a few insignificant changes today
355
+ and that is all
356
+
357
+ jerbil-0.0.1 1-Apr-2011
358
+
359
+ Initial create, but never tagged!
@@ -0,0 +1,5 @@
1
+ Provides an Object Request Broker and service framework for ruby-based services.
2
+ Jerbil servers run on each machine in the system and share information on registering
3
+ services. A parent class for services hides all of the jerbil interactions and client
4
+ and supervisor modules hide interactions from scripts or applications interacting
5
+ with these services.
@@ -0,0 +1,159 @@
1
+ Copyright (c) 2011 Robert Sharp
2
+
3
+ This software is licensed for use under the Open Software Licence v. 3.0
4
+ The terms of this licence can be found at http://www.opensource.org/licenses/osl-3.0.php
5
+ and below. Under the terms of this licence, all derivative works
6
+ must themselves be licensed under the Open Software Licence v. 3.0
7
+
8
+ Open Source Initiative OSI - The Open Software Licence 3.0:Licensing
9
+ [OSI Approved Licence]
10
+ Open Software Licence ("OSL") v. 3.0
11
+
12
+ This Open Software Licence (the "Licence") applies to any original work of authorship
13
+ (the "Original Work") whose owner (the "Licensor") has placed the following licensing
14
+ notice adjacent to the copyright notice for the Original Work:
15
+
16
+ Licensed under the Open Software Licence version 3.0
17
+
18
+ 1) Grant of Copyright Licence. Licensor grants You a worldwide, royalty-free, non-exclusive,
19
+ sublicensable license, for the duration of the copyright, to do the following:
20
+
21
+ a) to reproduce the Original Work in copies, either alone or as part of a collective work;
22
+
23
+ b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby
24
+ creating derivative works ("Derivative Works") based upon the Original Work;
25
+
26
+ c) to distribute or communicate copies of the Original Work and Derivative Works to
27
+ the public, with the proviso that copies of Original Work or Derivative Works that
28
+ You distribute or communicate shall be licensed under this Open Software Licence;
29
+
30
+ d) to perform the Original Work publicly; and
31
+
32
+ e) to display the Original Work publicly.
33
+
34
+ 2) Grant of Patent Licence. Licensor grants You a worldwide, royalty-free, non-exclusive,
35
+ sublicensable license, under patent claims owned or controlled by the Licensor that are
36
+ embodied in the Original Work as furnished by the Licensor, for the duration of the
37
+ patents, to make, use, sell, offer for sale, have made, and import the Original Work
38
+ and Derivative Works.
39
+
40
+ 3) Grant of Source Code Licence. The term "Source Code" means the preferred form of
41
+ the Original Work for making modifications to it and all available documentation
42
+ describing how to modify the Original Work. Licensor agrees to provide a machine-readable
43
+ copy of the Source Code of the Original Work along with each copy of the Original Work
44
+ that Licensor distributes. Licensor reserves the right to satisfy this obligation by
45
+ placing a machine-readable copy of the Source Code in an information repository reasonably
46
+ calculated to permit inexpensive and convenient access by You for as long as Licensor
47
+ continues to distribute the Original Work.
48
+
49
+ 4) Exclusions From Licence Grant. Neither the names of Licensor, nor the names of
50
+ any contributors to the Original Work, nor any of their trademarks or service marks,
51
+ may be used to endorse or promote products derived from this Original Work without
52
+ express prior permission of the Licensor. Except as expressly stated herein, nothing
53
+ in this Licence grants any license to Licensor's trademarks, copyrights, patents,
54
+ trade secrets or any other intellectual property. No patent license is granted to
55
+ make, use, sell, offer for sale, have made, or import embodiments of any patent claims
56
+ other than the licensed claims defined in Section 2. No license is granted to the
57
+ trademarks of Licensor even if such marks are included in the Original Work. Nothing
58
+ in this Licence shall be interpreted to prohibit Licensor from licensing under terms
59
+ different from this Licence any Original Work that Licensor otherwise would have a
60
+ right to license.
61
+
62
+ 5) External Deployment. The term "External Deployment" means the use, distribution,
63
+ or communication of the Original Work or Derivative Works in any way such that the
64
+ Original Work or Derivative Works may be used by anyone other than You, whether those
65
+ works are distributed or communicated to those persons or made available as an application
66
+ intended for use over a network. As an express condition for the grants of license hereunder,
67
+ You must treat any External Deployment by You of the Original Work or a Derivative Work
68
+ as a distribution under section 1(c).
69
+
70
+ 6) Attribution Rights. You must retain, in the Source Code of any Derivative Works
71
+ that You create, all copyright, patent, or trademark notices from the Source Code of
72
+ the Original Work, as well as any notices of licensing and any descriptive text identified
73
+ therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works
74
+ that You create to carry a prominent Attribution Notice reasonably calculated to inform
75
+ recipients that You have modified the Original Work.
76
+
77
+ 7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright
78
+ in and to the Original Work and the patent rights granted herein by Licensor are owned by
79
+ the Licensor or are sublicensed to You under the terms of this Licence with the permission
80
+ of the contributor(s) of those copyrights and patent rights. Except as expressly stated in
81
+ the immediately preceding sentence, the Original Work is provided under this Licence on an
82
+ "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation,
83
+ the warranties of non-infringement, merchantability or fitness for a particular purpose.
84
+ THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY
85
+ constitutes an essential part of this Licence. No license to the Original Work is granted
86
+ by this Licence except under this disclaimer.
87
+
88
+ 8) Limitation of Liability. Under no circumstances and under no legal theory, whether
89
+ in tort (including negligence), contract, or otherwise, shall the Licensor be liable
90
+ to anyone for any indirect, special, incidental, or consequential damages of any character
91
+ arising as a result of this Licence or the use of the Original Work including, without
92
+ limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction,
93
+ or any and all other commercial damages or losses. This limitation of liability shall not
94
+ apply to the extent applicable law prohibits such limitation.
95
+
96
+ 9) Acceptance and Termination. If, at any time, You expressly assented to this Licence,
97
+ that assent indicates your clear and irrevocable acceptance of this Licence and all of its
98
+ terms and conditions. If You distribute or communicate copies of the Original Work or a
99
+ Derivative Work, You must make a reasonable effort under the circumstances to obtain the
100
+ express assent of recipients to the terms of this Licence. This Licence conditions your
101
+ rights to undertake the activities listed in Section 1, including your right to create
102
+ Derivative Works based upon the Original Work, and doing so without honoring these
103
+ terms and conditions is prohibited by copyright law and international treaty. Nothing
104
+ in this Licence is intended to affect copyright exceptions and limitations (including
105
+ "fair use" or "fair dealing"). This Licence shall terminate immediately and You may no
106
+ longer exercise any of the rights granted to You by this Licence upon your failure to
107
+ honor the conditions in Section 1(c).
108
+
109
+ 10) Termination for Patent Action. This Licence shall terminate automatically and
110
+ You may no longer exercise any of the rights granted to You by this Licence as of
111
+ the date You commence an action, including a cross-claim or counterclaim, against
112
+ Licensor or any licensee alleging that the Original Work infringes a patent. This
113
+ termination provision shall not apply for an action alleging patent infringement
114
+ by combinations of the Original Work with other software or hardware.
115
+
116
+ 11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this Licence
117
+ may be brought only in the courts of a jurisdiction wherein the Licensor resides or
118
+ in which Licensor conducts its primary business, and under the laws of that jurisdiction
119
+ excluding its conflict-of-law provisions. The application of the United Nations Convention
120
+ on Contracts for the International Sale of Goods is expressly excluded. Any use of
121
+ the Original Work outside the scope of this Licence or after its termination shall be
122
+ subject to the requirements and penalties of copyright or patent law in the appropriate
123
+ jurisdiction. This section shall survive the termination of this Licence.
124
+
125
+ 12) Attorneys' Fees. In any action to enforce the terms of this Licence or seeking
126
+ damages relating thereto, the prevailing party shall be entitled to recover its costs
127
+ and expenses, including, without limitation, reasonable attorneys' fees and costs
128
+ incurred in connection with such action, including any appeal of such action. This
129
+ section shall survive the termination of this Licence.
130
+
131
+ 13) Miscellaneous. If any provision of this Licence is held to be unenforceable,
132
+ such provision shall be reformed only to the extent necessary to make it enforceable.
133
+
134
+ 14) Definition of "You" in This Licence. "You" throughout this Licence, whether in
135
+ upper or lower case, means an individual or a legal entity exercising rights under,
136
+ and complying with all of the terms of, this Licence. For legal entities, "You" includes
137
+ any entity that controls, is controlled by, or is under common control with you. For
138
+ purposes of this definition, "control" means (i) the power, direct or indirect, to cause
139
+ the direction or management of such entity, whether by contract or otherwise, or (ii)
140
+ ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
141
+ ownership of such entity.
142
+
143
+ 15) Right to Use. You may use the Original Work in all ways not otherwise restricted or
144
+ conditioned by this Licence or by law, and Licensor promises not to interfere with or be
145
+ responsible for such uses by You.
146
+
147
+ 16) Modification of This Licence. This Licence is Copyright © 2005 Lawrence Rosen.
148
+ Permission is granted to copy, distribute, or communicate this Licence without modification.
149
+ Nothing in this Licence permits You to modify this Licence as applied to the Original Work
150
+ or to Derivative Works. However, You may modify the text of this Licence and copy, distribute
151
+ or communicate your modified version (the "Modified Licence") and apply it to other original
152
+ works of authorship subject to the following conditions: (i) You may not indicate in any way
153
+ that your Modified Licence is the "Open Software Licence" or "OSL" and you may not use those
154
+ names in the name of your Modified Licence; (ii) You must replace the notice specified in the
155
+ first paragraph above with the notice "Licensed under <insert your license name here>" or
156
+ with a notice of your own that is not confusingly similar to the notice in this Licence;
157
+ and (iii) You may not claim that your original works are open source software unless your
158
+ Modified Licence has been approved by Open Source Initiative (OSI) and You comply with
159
+ its license review and certification process.