ronin-sql 0.1.0

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 (46) hide show
  1. data/COPYING.txt +339 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +45 -0
  4. data/README.txt +66 -0
  5. data/Rakefile +14 -0
  6. data/lib/ronin/code/sql.rb +24 -0
  7. data/lib/ronin/code/sql/between.rb +62 -0
  8. data/lib/ronin/code/sql/binary_expr.rb +46 -0
  9. data/lib/ronin/code/sql/builder.rb +61 -0
  10. data/lib/ronin/code/sql/code.rb +35 -0
  11. data/lib/ronin/code/sql/common_dialect.rb +62 -0
  12. data/lib/ronin/code/sql/create_index.rb +76 -0
  13. data/lib/ronin/code/sql/create_table.rb +93 -0
  14. data/lib/ronin/code/sql/create_view.rb +65 -0
  15. data/lib/ronin/code/sql/delete.rb +64 -0
  16. data/lib/ronin/code/sql/dialect.rb +162 -0
  17. data/lib/ronin/code/sql/drop_table.rb +51 -0
  18. data/lib/ronin/code/sql/exceptions.rb +24 -0
  19. data/lib/ronin/code/sql/exceptions/unknown_dialect.rb +31 -0
  20. data/lib/ronin/code/sql/expr.rb +193 -0
  21. data/lib/ronin/code/sql/field.rb +86 -0
  22. data/lib/ronin/code/sql/function.rb +52 -0
  23. data/lib/ronin/code/sql/in.rb +49 -0
  24. data/lib/ronin/code/sql/injection.rb +39 -0
  25. data/lib/ronin/code/sql/injection_builder.rb +137 -0
  26. data/lib/ronin/code/sql/injection_style.rb +79 -0
  27. data/lib/ronin/code/sql/insert.rb +86 -0
  28. data/lib/ronin/code/sql/keyword.rb +48 -0
  29. data/lib/ronin/code/sql/like_expr.rb +87 -0
  30. data/lib/ronin/code/sql/program.rb +79 -0
  31. data/lib/ronin/code/sql/replace.rb +58 -0
  32. data/lib/ronin/code/sql/select.rb +187 -0
  33. data/lib/ronin/code/sql/statement.rb +112 -0
  34. data/lib/ronin/code/sql/style.rb +170 -0
  35. data/lib/ronin/code/sql/unary_expr.rb +45 -0
  36. data/lib/ronin/code/sql/update.rb +75 -0
  37. data/lib/ronin/sql.rb +28 -0
  38. data/lib/ronin/sql/error.rb +52 -0
  39. data/lib/ronin/sql/extensions.rb +24 -0
  40. data/lib/ronin/sql/extensions/uri.rb +24 -0
  41. data/lib/ronin/sql/extensions/uri/http.rb +69 -0
  42. data/lib/ronin/sql/sql.rb +83 -0
  43. data/lib/ronin/sql/version.rb +29 -0
  44. data/spec/spec_helper.rb +5 -0
  45. data/tasks/spec.rb +7 -0
  46. metadata +121 -0
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './tasks/spec.rb'
6
+ require './lib/ronin/sql/version.rb'
7
+
8
+ Hoe.new('ronin-sql', Ronin::SQL::VERSION) do |p|
9
+ p.rubyforge_name = 'ronin'
10
+ p.developer('Postmodern Modulus III','postmodern.mod3@gmail.com')
11
+ p.extra_deps = [['ronin', '>=0.0.9']]
12
+ end
13
+
14
+ # vim: syntax=Ruby
@@ -0,0 +1,24 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/code'
@@ -0,0 +1,62 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/expr'
25
+
26
+ module Ronin
27
+ module Code
28
+ module SQL
29
+ class Between < Expr
30
+
31
+ def initialize(expr,lower,higher)
32
+ super(expr.style)
33
+
34
+ @expr = expr
35
+ @lower = lower
36
+ @higher = higher
37
+ @negated = false
38
+ end
39
+
40
+ def not!
41
+ @negated = true
42
+ return self
43
+ end
44
+
45
+ def compile
46
+ compile_expr(@expr,negated?,keyword_between,@lower,keyword_and,@higher)
47
+ end
48
+
49
+ protected
50
+
51
+ keyword :between
52
+ keyword :and
53
+ keyword :not
54
+
55
+ def negated?
56
+ keyword_not if @negated
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,46 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/expr'
25
+
26
+ module Ronin
27
+ module Code
28
+ module SQL
29
+ class BinaryExpr < Expr
30
+
31
+ def initialize(style,op,left,right)
32
+ super(style)
33
+
34
+ @op = op
35
+ @left = left
36
+ @right = right
37
+ end
38
+
39
+ def compile
40
+ compile_expr(compile_data(@left),compile_keyword(@op),compile_data(@right))
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,61 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/statement'
25
+ require 'ronin/code/sql/dialect'
26
+ require 'ronin/code/sql/common_dialect'
27
+ require 'ronin/code/sql/style'
28
+
29
+ module Ronin
30
+ module Code
31
+ module SQL
32
+ class Builder < Statement
33
+
34
+ def initialize(style,options={},&block)
35
+ @commands = []
36
+
37
+ super(style,&block)
38
+ end
39
+
40
+ def compile
41
+ @style.compile_statements(@commands)
42
+ end
43
+
44
+ protected
45
+
46
+ def command(cmd)
47
+ @commands << cmd
48
+ return self
49
+ end
50
+
51
+ def method_missing(sym,*args,&block)
52
+ result = super(sym,*args,&block)
53
+
54
+ @commands << result if result.kind_of?(Statement)
55
+ return result
56
+ end
57
+
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,35 @@
1
+ #
2
+ # Ronin SQL - A Ronin library providing support for SQL related security
3
+ # tasks.
4
+ #
5
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/code/sql/program'
23
+ require 'ronin/code/sql/injection'
24
+
25
+ module Ronin
26
+ module Code
27
+ def Code.sql(options={},&block)
28
+ SQL::Program.new(options,&block)
29
+ end
30
+
31
+ def Code.sql_injection(options={},&block)
32
+ SQL::Injection.new(options,&block)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/dialect'
25
+ require 'ronin/code/sql/create_table'
26
+ require 'ronin/code/sql/create_index'
27
+ require 'ronin/code/sql/create_view'
28
+ require 'ronin/code/sql/insert'
29
+ require 'ronin/code/sql/select'
30
+ require 'ronin/code/sql/update'
31
+ require 'ronin/code/sql/delete'
32
+ require 'ronin/code/sql/drop_table'
33
+
34
+ module Ronin
35
+ module Code
36
+ module SQL
37
+ class CommonDialect < Dialect
38
+
39
+ dialect :common
40
+
41
+ primitives :yes, :no, :on, :off, :null
42
+
43
+ data_type :int
44
+ data_type :varchar, :length => true
45
+ data_type :text
46
+ data_type :record
47
+
48
+ aggregators :count, :min, :max, :sum, :avg
49
+
50
+ command :create_type, CreateTable
51
+ command :create_index, CreateIndex
52
+ command :create_view, CreateView
53
+ command :insert, Insert
54
+ command :select_from, Select
55
+ command :update, Update
56
+ command :delete, Delete
57
+ command :drop_table, DropTable
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,76 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/statement'
25
+
26
+ module Ronin
27
+ module Code
28
+ module SQL
29
+ class CreateIndex < Statement
30
+
31
+ option :unqiue, "UNIQUE"
32
+ option :if_not_exists, "IF NOT EXISTS"
33
+
34
+ def initialize(style,index=nil,table=nil,columns={},&block)
35
+ @index = index
36
+ @table = table
37
+ @columns = columns
38
+
39
+ super(style,&block)
40
+ end
41
+
42
+ def index(field)
43
+ @index = field
44
+ return self
45
+ end
46
+
47
+ def table(field)
48
+ @table = field
49
+ return self
50
+ end
51
+
52
+ def column(name,type)
53
+ @columns[name.to_s] = type.to_s
54
+ return self
55
+ end
56
+
57
+ def compile(dialect=nil,multiline=false)
58
+ format_columns = lambda {
59
+ @columns.map { |name,type|
60
+ "#{name} #{type}"
61
+ }
62
+ }
63
+
64
+ return compile_expr(keyword_create,unique?,keyword_index,if_not_exists?,@index,keyword_on,@table,compile_row(format_columns.call))
65
+ end
66
+
67
+ protected
68
+
69
+ keyword :create
70
+ keyword :index
71
+ keyword :on
72
+
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,93 @@
1
+ #
2
+ #--
3
+ # Ronin SQL - A Ronin library providing support for SQL related security
4
+ # tasks.
5
+ #
6
+ # Copyright (c) 2007-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/code/sql/statement'
25
+ require 'ronin/code/sql/select'
26
+
27
+ module Ronin
28
+ module Code
29
+ module SQL
30
+ class CreateTable < Statement
31
+
32
+ option :temp, "TEMP"
33
+ option :if_not_exists, "IF NOT EXISTS"
34
+
35
+ def initialize(style,table=nil,opts={:columns => {}, :not_null => {}, :as => nil},&block)
36
+ @table = table
37
+ @columns = opts[:columns]
38
+ @not_null = opts[:not_null]
39
+ @as = opts[:as]
40
+
41
+ super(style,&block)
42
+ end
43
+
44
+ def table(field)
45
+ @table = field
46
+ return self
47
+ end
48
+
49
+ def as(table=nil,opts={:fields => nil, :where => nil},&block)
50
+ @as = Select.new(@style,table,opts,&block)
51
+ return self
52
+ end
53
+
54
+ def column(name,type,null=false)
55
+ name = name.to_s
56
+ @columns[name] = type.to_s
57
+ @not_null[name] = null
58
+ return self
59
+ end
60
+
61
+ def primary_key(field)
62
+ @primary_key = field
63
+ return self
64
+ end
65
+
66
+ def compile
67
+ format_columns = lambda {
68
+ @columns.map { |name,type|
69
+ if @not_null[name]
70
+ "#{name} #{type} NOT NULL"
71
+ else
72
+ "#{name} #{type}"
73
+ end
74
+ }
75
+ }
76
+
77
+ return compile_expr(keyword_create,temp?,keyword_table,if_not_exists?,@table,compile_row(format_columns.call))
78
+ end
79
+
80
+ protected
81
+
82
+ keyword :create
83
+ keyword :table
84
+ keyword :primary_key
85
+
86
+ def primary_key?
87
+ compile_expr(keyword_primary_key,@primary_key) if @primary_key
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+ end