buby 1.2.0-java → 1.3.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,10 @@
1
+ == 1.2.1 / 2011-01-27
2
+ * Fixed burp -v to print version... somewhat
3
+
4
+ == 1.2.0 / 2010-08-29
5
+ * added menu item support from 1.3
6
+ * added some additional processing constants from 1.3
7
+
1
8
  == 1.1.7 / 2009-12-29
2
9
  * fix evt_proxy_message_raw bridge to modify proxy messages (broken in 1.1.6)
3
10
  * switched from bones to jeweler for project mgmt
@@ -1,6 +1,6 @@
1
1
  buby
2
- by Eric Monti
3
- http://emonti.github.com/buby
2
+ by Eric Monti, Timur Duehr
3
+ http://tduehr.github.com/buby
4
4
 
5
5
  == DESCRIPTION:
6
6
 
@@ -55,7 +55,7 @@ minus ofcourse, Burp itself.
55
55
  Here are manual instructions if you want or need to build things yourself:
56
56
 
57
57
  ==== Step 1. Download buby from github
58
- git clone git://github.com/emonti/buby.git
58
+ git clone git://github.com/tduehr/buby.git
59
59
 
60
60
  ==== Step 2. Compile BurpExtender.java. Include jruby.jar in the classpath:
61
61
 
@@ -253,14 +253,15 @@ And, assuming 'www.example.com' checks for valid request verbs, you should see s
253
253
 
254
254
  == CREDIT:
255
255
  * Burp and Burp Suite are trademarks of PortSwigger(ltd)
256
- Copyright 2008 PortSwigger Ltd. All rights reserved.
256
+ Copyright 2011 PortSwigger Ltd. All rights reserved.
257
257
  See http://portswigger.net for license terms.
258
258
 
259
- * This ruby library and the accompanying BurpExtender.java implementation are
260
- written by Eric Monti @ Matasano Security. Matasano Security claims no
259
+ * This ruby library and the accompanying BurpExtender.java implementation was
260
+ originally written by Eric Monti @ Matasano Security. This ruby library is
261
+ currently maintained by Timur Duehr @ Matasano Security.Matasano Security claims no
261
262
  professional or legal affiliation with PortSwigger LTD.
262
263
 
263
- However, the author would like to express his personal and professional
264
+ However, the authors would like to express their personal and professional
264
265
  respect and admiration to Burp's authors and appreciation to PortSwigger for
265
266
  the availability of the IBurpExtender extension API.
266
267
 
@@ -270,7 +271,7 @@ And, assuming 'www.example.com' checks for valid request verbs, you should see s
270
271
  == LICENSE:
271
272
 
272
273
  * Burp and Burp Suite are trademarks of PortSwigger Ltd.
273
- Copyright 2008 PortSwigger Ltd. All rights reserved.
274
+ Copyright 2011 PortSwigger Ltd. All rights reserved.
274
275
  See http://portswigger.net for license terms.
275
276
 
276
277
  * The Buby Ruby library and its accompanying BurpExtender implementation are
@@ -279,6 +280,7 @@ And, assuming 'www.example.com' checks for valid request verbs, you should see s
279
280
  (The MIT License)
280
281
 
281
282
  Copyright (C) 2009 Eric Monti, Matasano Security
283
+ Copyright (C) 2010-2011 Timur Duehr, Matasano Security
282
284
 
283
285
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
284
286
 
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ begin
9
9
  gem.summary = %q{Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger}
10
10
  gem.description = %q{Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger. Burp is driven from and tied to JRuby with a Java extension using the BurpExtender API. This extension aims to add Ruby scriptability to Burp Suite with an interface comparable to the Burp's pure Java extension interface.}
11
11
  gem.email = "emonti@matasano.com, td@matasano.com"
12
- gem.homepage = "http://emonti.github.com/buby"
12
+ gem.homepage = "http://tduehr.github.com/buby"
13
13
  gem.authors = ["Eric Monti, tduehr"]
14
14
  gem.platform = "java"
15
15
  gem.test_files = ["test/buby_test.rb"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.3.0
@@ -1,69 +1,65 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{buby}
8
- s.version = "1.2.0"
8
+ s.version = "1.3.0"
9
9
  s.platform = %q{java}
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Eric Monti, tduehr"]
13
- s.date = %q{2010-08-29}
13
+ s.date = %q{2011-06-14}
14
14
  s.default_executable = %q{buby}
15
15
  s.description = %q{Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger. Burp is driven from and tied to JRuby with a Java extension using the BurpExtender API. This extension aims to add Ruby scriptability to Burp Suite with an interface comparable to the Burp's pure Java extension interface.}
16
16
  s.email = %q{emonti@matasano.com, td@matasano.com}
17
17
  s.executables = ["buby"]
18
18
  s.extra_rdoc_files = [
19
19
  "History.txt",
20
- "README.rdoc",
21
- "bin/buby"
20
+ "README.rdoc",
21
+ "bin/buby"
22
22
  ]
23
23
  s.files = [
24
- ".gitignore",
25
- "History.txt",
26
- "README.rdoc",
27
- "Rakefile",
28
- "VERSION",
29
- "bin/buby",
30
- "buby.gemspec",
31
- "java/buby.jar",
32
- "java/src/BurpExtender.java",
33
- "java/src/burp/IBurpExtender.java",
34
- "java/src/burp/IBurpExtenderCallbacks.java",
35
- "java/src/burp/IHttpRequestResponse.java",
36
- "java/src/burp/IMenuItemHandler.java",
37
- "java/src/burp/IScanIssue.java",
38
- "java/src/burp/IScanQueueItem.java",
39
- "lib/buby.rb",
40
- "lib/buby/extends.rb",
41
- "lib/buby/extends/buby_array_wrapper.rb",
42
- "lib/buby/extends/http_request_response.rb",
43
- "lib/buby/extends/scan_issue.rb",
44
- "samples/drb_buby.rb",
45
- "samples/drb_sample_cli.rb",
46
- "samples/mechanize_burp.rb",
47
- "samples/menu_copy_req.rb",
48
- "samples/poc_generator.rb",
49
- "samples/verb_tamperer.rb",
50
- "samples/watch_scan.rb",
51
- "test/buby_test.rb"
24
+ "History.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/buby",
29
+ "buby.gemspec",
30
+ "java/buby.jar",
31
+ "java/src/BurpExtender.java",
32
+ "java/src/burp/IBurpExtender.java",
33
+ "java/src/burp/IBurpExtenderCallbacks.java",
34
+ "java/src/burp/IHttpRequestResponse.java",
35
+ "java/src/burp/IMenuItemHandler.java",
36
+ "java/src/burp/IScanIssue.java",
37
+ "java/src/burp/IScanQueueItem.java",
38
+ "lib/buby.rb",
39
+ "lib/buby/extends.rb",
40
+ "lib/buby/extends/buby_array_wrapper.rb",
41
+ "lib/buby/extends/http_request_response.rb",
42
+ "lib/buby/extends/scan_issue.rb",
43
+ "samples/drb_buby.rb",
44
+ "samples/drb_sample_cli.rb",
45
+ "samples/mechanize_burp.rb",
46
+ "samples/menu_copy_req.rb",
47
+ "samples/poc_generator.rb",
48
+ "samples/verb_tamperer.rb",
49
+ "samples/watch_scan.rb",
50
+ "test/buby_test.rb"
52
51
  ]
53
- s.homepage = %q{http://emonti.github.com/buby}
52
+ s.homepage = %q{http://tduehr.github.com/buby}
54
53
  s.rdoc_options = ["--main", "README.rdoc"]
55
54
  s.require_paths = ["lib", "java", "java"]
56
- s.rubygems_version = %q{1.3.6}
55
+ s.rubygems_version = %q{1.5.1}
57
56
  s.summary = %q{Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger}
58
- s.test_files = [
59
- "test/buby_test.rb"
60
- ]
57
+ s.test_files = ["test/buby_test.rb"]
61
58
 
62
59
  if s.respond_to? :specification_version then
63
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
64
60
  s.specification_version = 3
65
61
 
66
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
62
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
63
  else
68
64
  end
69
65
  else
Binary file
@@ -15,7 +15,7 @@ import org.jruby.runtime.builtin.IRubyObject;
15
15
  * for Burp Suite which provides glue between a Ruby runtime and Burp.
16
16
  *
17
17
  * This is a complete implementation of the Burp Extender interfaces available
18
- * as of Burp Suite 1.2/1.2.05
18
+ * as of Burp Suite 1.4
19
19
  */
20
20
  public class BurpExtender implements IBurpExtender {
21
21
  public final static String INIT_METH = "evt_extender_init";
@@ -185,11 +185,11 @@ public class BurpExtender implements IBurpExtender {
185
185
  };
186
186
 
187
187
  // slurp back in the action value in-case it's been changed
188
- action[0] = ((int[]) JavaUtil.convertRubyToJava(r_action))[0];
188
+ action[0] = ((int[])r_action.toJava(int[].class))[0];
189
189
 
190
190
  IRubyObject ret = r_obj.callMethod(ctx(r_obj), PROXYMSG_METH, pxy_msg);
191
191
  if(ret != r_msg) {
192
- return (byte[]) JavaUtil.convertRubyToJava(ret);
192
+ return (byte []) ret.toJava(byte[].class);
193
193
  }
194
194
  }
195
195
 
@@ -1,5 +1,8 @@
1
1
  package burp;
2
2
 
3
+ import java.util.List;
4
+ import java.util.Map;
5
+
3
6
  /*
4
7
  * @(#)IBurpExtenderCallbacks.java
5
8
  *
@@ -95,9 +98,9 @@ public interface IBurpExtenderCallbacks
95
98
  java.net.URL url) throws Exception;
96
99
 
97
100
  /**
98
- * This method can be used to send an HTTP request to the Burp Scanner
99
- * tool to perform an active vulnerability scan. If the request is not
100
- * within the current active scanning scope, the user will be asked if
101
+ * This method can be used to send an HTTP request to the Burp Scanner
102
+ * tool to perform an active vulnerability scan. If the request is not
103
+ * within the current active scanning scope, the user will be asked if
101
104
  * they wish to proceed with the scan.
102
105
  *
103
106
  * @param host The hostname of the remote HTTP server.
@@ -112,7 +115,32 @@ public interface IBurpExtenderCallbacks
112
115
  int port,
113
116
  boolean useHttps,
114
117
  byte[] request) throws Exception;
115
-
118
+
119
+ /**
120
+ * This method can be used to send an HTTP request to the Burp Scanner
121
+ * tool to perform an active vulnerability scan, based on a custom list
122
+ * of insertion points that are to be scanned. If the request is not
123
+ * within the current active scanning scope, the user will be asked if
124
+ * they wish to proceed with the scan.
125
+ *
126
+ * @param host The hostname of the remote HTTP server.
127
+ * @param port The port of the remote HTTP server.
128
+ * @param useHttps Flags whether the protocol is HTTPS or HTTP.
129
+ * @param request The full HTTP request.
130
+ * @param insertionPointOffsets A list of index pairs representing the
131
+ * positions of the insertion points that should be scanned. Each item in
132
+ * the list must be an int[2] array containing the start and end offsets
133
+ * for the insertion point.
134
+ * @return The resulting scan queue item.
135
+ * @throws java.lang.Exception
136
+ */
137
+ public IScanQueueItem doActiveScan(
138
+ String host,
139
+ int port,
140
+ boolean useHttps,
141
+ byte[] request,
142
+ List<int[]> insertionPointOffsets) throws Exception;
143
+
116
144
  /**
117
145
  * This method can be used to send an HTTP request to the Burp Scanner
118
146
  * tool to perform a passive vulnerability scan.
@@ -186,7 +214,17 @@ public interface IBurpExtenderCallbacks
186
214
  * @return Details of items in the site map.
187
215
  */
188
216
  public IHttpRequestResponse[] getSiteMap(String urlPrefix);
189
-
217
+
218
+
219
+ /**
220
+ * This method can be used to add an item to Burp's site map with the
221
+ * specified request/response details. This will overwrite the details
222
+ * of any existing matching item in the site map.
223
+ *
224
+ * @param item Details of the item to be added to the site map
225
+ */
226
+ public void addToSiteMap(IHttpRequestResponse item);
227
+
190
228
  /**
191
229
  * This method can be used to restore Burp's state from a specified
192
230
  * saved state file. This method blocks until the restore operation is
@@ -256,6 +294,42 @@ public interface IBurpExtenderCallbacks
256
294
  String menuItemCaption,
257
295
  IMenuItemHandler menuItemHandler);
258
296
 
297
+ /**
298
+ *
299
+ * This method causes Burp to save all of its current configuration as a
300
+ * Map of name/value Strings.
301
+ *
302
+ * @return A Map of name/value Strings reflecting Burp's current
303
+ * configuration.
304
+ */
305
+ public Map saveConfig();
306
+
307
+ /**
308
+ *
309
+ * This method causes Burp to load a new configuration from the Map of
310
+ * name/value Strings provided. Any settings not specified in the Map will
311
+ * be restored to their default values. To selectively update only some
312
+ * settings and leave the rest unchanged, you should first call
313
+ * <code>saveConfig</code> to obtain Burp's current configuration, modify
314
+ * the relevant items in the Map, and then call <code>loadConfig</code>
315
+ * with the same Map.
316
+ *
317
+ * @param config A map of name/value Strings to use as Burp's new
318
+ * configuration.
319
+ */
320
+ public void loadConfig(Map config);
321
+
322
+
323
+ /**
324
+ *
325
+ * This method sets the interception mode for Burp Proxy.
326
+ *
327
+ * @param enabled Indicates whether interception of proxy messages should
328
+ * be enabled.
329
+ */
330
+ public void setProxyInterceptionEnabled(boolean enabled);
331
+
332
+
259
333
  /**
260
334
  * This method can be used to shut down Burp programmatically, with an
261
335
  * optional prompt to the user. If the method returns, the user cancelled
@@ -265,4 +339,12 @@ public interface IBurpExtenderCallbacks
265
339
  * shutdown.
266
340
  */
267
341
  public void exitSuite(boolean promptUser);
342
+
343
+ /**
344
+ * This method can be used to determine the version of the loaded burp at runtime.
345
+ * This is included in the Javadoc for the extension interfaces but not the supplied interface files.
346
+ * @return String array containing the product name, major version, and minor version.
347
+ */
348
+ public String[] getBurpVersion();
349
+
268
350
  }
@@ -122,4 +122,20 @@ public interface IHttpRequestResponse
122
122
  * @throws java.lang.Exception
123
123
  */
124
124
  short getStatusCode() throws Exception;
125
+
126
+ /**
127
+ * Returns the user-annotated comment for this item, if applicable.
128
+ *
129
+ * @return The user-annotated comment for this item, or null if none is set.
130
+ */
131
+ String getComment() throws Exception;
132
+
133
+ /**
134
+ * Sets the user-annotated comment for this item.
135
+ *
136
+ * @param comment The comment to be associated with this item.
137
+ * @throws Exception
138
+ */
139
+ void setComment(String comment) throws Exception;
140
+
125
141
  }
@@ -61,7 +61,7 @@ include_class 'BurpExtender'
61
61
  #
62
62
  # Credit:
63
63
  # * Burp and Burp Suite are trade-marks of PortSwigger Ltd.
64
- # Copyright 2008 PortSwigger Ltd. All rights reserved.
64
+ # Copyright 2011 PortSwigger Ltd. All rights reserved.
65
65
  # See http://portswigger.net for license terms.
66
66
  #
67
67
  # * This ruby library and the accompanying BurpExtender.java implementation
@@ -81,6 +81,11 @@ include_class 'BurpExtender'
81
81
  #
82
82
  class Buby
83
83
 
84
+ VERSION =
85
+ if File.file?(f=::File.expand_path(File.join(::File.dirname(__FILE__), "../VERSION")))
86
+ File.read(f).chomp
87
+ end
88
+
84
89
  # :stopdoc:
85
90
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
86
91
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
@@ -122,9 +127,14 @@ class Buby
122
127
  # * port = The port of the remote HTTP server.
123
128
  # * https = Flags whether the protocol is HTTPS or HTTP.
124
129
  # * req = The full HTTP request. (String or Java bytes[])
125
- def doActiveScan(host, port, https, req)
130
+ # * insertionPointOffsets = A list of index pairs representing the
131
+ # * positions of the insertion points that should be scanned. Each item in
132
+ # * the list must be an int[2] array containing the start and end offsets
133
+ # * for the insertion point. *1.4+* only
134
+
135
+ def doActiveScan(host, port, https, req, ip_off)
126
136
  req = req.to_java_bytes if req.is_a? String
127
- _check_cb.doActiveScan(host, port, https, req)
137
+ getBurpVersion ? _check_cb.doActiveScan(host, port, https, req, ip_off) : _check_cb.doActiveScan(host, port, https, req)
128
138
  end
129
139
  alias do_active_scan doActiveScan
130
140
  alias active_scan doActiveScan
@@ -224,7 +234,7 @@ class Buby
224
234
  # * url = The new seed URL to begin spidering from.
225
235
  def sendToSpider(url)
226
236
  url = java.net.URL.new(url) if url.is_a? String
227
- _check_cb.includeInScope(url)
237
+ _check_cb.sendToSpider(url)
228
238
  end
229
239
  alias send_to_spider sendToSpider
230
240
  alias spider sendToSpider
@@ -342,10 +352,81 @@ class Buby
342
352
  # @param menuItemHandler The handler to be invoked when the user clicks
343
353
  # on the menu item.
344
354
  #
355
+ # This method is only available with Burp 1.3.07 and higher.
345
356
  def registerMenuItem(menuItemCaption, menuItemHandler)
346
357
  _check_and_callback(:registerMenuItem, menuItemCaption, menuItemHandler)
347
358
  issueAlert("Handler #{menuItemHandler} registered for \"#{menuItemCaption}\"")
348
359
  end
360
+ alias register_menu_item registerMenuItem
361
+
362
+ ### 1.3.09 methods ###
363
+
364
+ # This method can be used to add an item to Burp's site map with the
365
+ # specified request/response details. This will overwrite the details
366
+ # of any existing matching item in the site map.
367
+ #
368
+ # @param item Details of the item to be added to the site map
369
+ #
370
+ # This method is only available with Burp 1.3.09+
371
+ def addToSiteMap(item)
372
+ _check_and_callback(:addToSiteMap, item)
373
+ end
374
+ alias add_to_site_map addToSiteMap
375
+
376
+ # This method causes Burp to save all of its current configuration as a
377
+ # Map of name/value Strings.
378
+ #
379
+ # @return A Map of name/value Strings reflecting Burp's current
380
+ # configuration.
381
+ #
382
+ # This method is only available with Burp 1.3.09+
383
+ def saveConfig
384
+ _check_and_callback(:saveConfig).to_hash
385
+ end
386
+ alias save_config saveConfig
387
+ alias config saveConfig
388
+
389
+ # This method causes Burp to load a new configuration from the Map of
390
+ # name/value Strings provided. Any settings not specified in the Map will
391
+ # be restored to their default values. To selectively update only some
392
+ # settings and leave the rest unchanged, you should first call
393
+ # <code>saveConfig</code> to obtain Burp's current configuration, modify
394
+ # the relevant items in the Map, and then call <code>loadConfig</code>
395
+ # with the same Map.
396
+ #
397
+ # @param config A map of name/value Strings to use as Burp's new
398
+ # configuration.
399
+ #
400
+ # This method is only available with Burp 1.3.09+
401
+ def loadConfig(conf)
402
+ _check_and_callback(:loadConfig, conf)
403
+ end
404
+ alias load_config loadConfig
405
+ alias config= loadConfig
406
+
407
+ ## 1.4 methods ##
408
+
409
+ # This method sets the interception mode for Burp Proxy.
410
+ #
411
+ # @param enabled Indicates whether interception of proxy messages should
412
+ # be enabled.
413
+ #
414
+ def setProxyInterceptionEnabled(enabled)
415
+ _check_and_callback(:setProxyInterceptionEnabled, enabled)
416
+ end
417
+ alias proxy_interception_enabled setProxyInterceptionEnabled
418
+
419
+ # This method can be used to determine the version of the loaded burp at runtime.
420
+ # This is included in the Javadoc for the extension interfaces but not the supplied interface files.
421
+ # @return String array containing the product name, major version, and minor version.
422
+ def getBurpVersion
423
+ begin
424
+ _check_and_callback(:getBurpVersion)
425
+ rescue
426
+ nil
427
+ end
428
+ end
429
+ alias burp_version getBurpVersion
349
430
 
350
431
  ### Event Handlers ###
351
432
 
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buby
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 2
8
- - 0
9
- version: 1.2.0
4
+ prerelease:
5
+ version: 1.3.0
10
6
  platform: java
11
7
  authors:
12
8
  - Eric Monti, tduehr
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-08-29 00:00:00 -05:00
13
+ date: 2011-06-14 00:00:00 -05:00
18
14
  default_executable: buby
19
15
  dependencies: []
20
16
 
@@ -29,7 +25,6 @@ extra_rdoc_files:
29
25
  - README.rdoc
30
26
  - bin/buby
31
27
  files:
32
- - .gitignore
33
28
  - History.txt
34
29
  - README.rdoc
35
30
  - Rakefile
@@ -58,7 +53,7 @@ files:
58
53
  - samples/watch_scan.rb
59
54
  - test/buby_test.rb
60
55
  has_rdoc: true
61
- homepage: http://emonti.github.com/buby
56
+ homepage: http://tduehr.github.com/buby
62
57
  licenses: []
63
58
 
64
59
  post_install_message:
@@ -70,23 +65,21 @@ require_paths:
70
65
  - java
71
66
  - java
72
67
  required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
73
69
  requirements:
74
70
  - - ">="
75
71
  - !ruby/object:Gem::Version
76
- segments:
77
- - 0
78
72
  version: "0"
79
73
  required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
80
75
  requirements:
81
76
  - - ">="
82
77
  - !ruby/object:Gem::Version
83
- segments:
84
- - 0
85
78
  version: "0"
86
79
  requirements: []
87
80
 
88
81
  rubyforge_project:
89
- rubygems_version: 1.3.6
82
+ rubygems_version: 1.5.1
90
83
  signing_key:
91
84
  specification_version: 3
92
85
  summary: Buby is a mashup of JRuby with the popular commercial web security testing tool Burp Suite from PortSwigger
data/.gitignore DELETED
@@ -1,7 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- pkg
6
- *.gem
7
- *.class