[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

grouping and split

barjunk

7/4/2007 12:55:00 AM

I'm trying to do validation on a firewall rule. The rule looks like
this:

-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT


I know I can use split(' ') to break up the above entry into small
parts, but what I really want is every other one.

So '-A eth0' should be one then '-i eth0' should be the next....etc.

I guess I could use split then step through the resultant array and
make another, but I thought there might be a better ruby style answer.

Thanks for any guidance.

Mike B.

7 Answers

Gavin Kistner

7/4/2007 2:03:00 AM

0

On Jul 3, 6:54 pm, barjunk <barj...@attglobal.net> wrote:
> I'm trying to do validation on a firewall rule. The rule looks like
> this:
>
> -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT
>
> I know I can use split(' ') to break up the above entry into small
> parts, but what I really want is every other one.
>
> So '-A eth0' should be one then '-i eth0' should be the next....etc.

irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
tcp --dport 22 -j ACCEPT"
=> "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"

irb(main):002:0> s.scan /[^ ]+ [^ ]+/
=> ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
"--dport 22", "-j ACCEPT"]

barjunk

7/5/2007 6:31:00 PM

0

On Jul 3, 6:03 pm, Phrogz <g...@refinery.com> wrote:
> On Jul 3, 6:54 pm, barjunk <barj...@attglobal.net> wrote:
>
> > I'm trying to do validation on a firewall rule. The rule looks like
> > this:
>
> > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT
>
> > I know I can use split(' ') to break up the above entry into small
> > parts, but what I really want is every other one.
>
> > So '-A eth0' should be one then '-i eth0' should be the next....etc.
>
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
>
> irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> "--dport 22", "-j ACCEPT"]

Thanks tons for that...maybe it would be good practice to keep re-
reading the chapter on the String class and a few other key ones, like
maybe Enumerable?

Any others folks would recommend?

Mike B.

barjunk

7/5/2007 6:39:00 PM

0

On Jul 3, 6:03 pm, Phrogz <g...@refinery.com> wrote:
> On Jul 3, 6:54 pm, barjunk <barj...@attglobal.net> wrote:
>
> > I'm trying to do validation on a firewall rule. The rule looks like
> > this:
>
> > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT
>
> > I know I can use split(' ') to break up the above entry into small
> > parts, but what I really want is every other one.
>
> > So '-A eth0' should be one then '-i eth0' should be the next....etc.
>
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
>
> irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> "--dport 22", "-j ACCEPT"]


I had to modify this just a bit to work with allowable multispace
situations. An example is a rule that might look like this:

-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport
22 -j ACCEPT

it looks like this: s.scan /[^ ]+ +[^ ]+/

I suppose another solution would be to trim all the extra spaces first
with some sort of gsub, then use the scan.

Thanks again.

Mike B.

Sam Smoot

7/6/2007 2:59:00 AM

0

On Jul 5, 1:39 pm, barjunk <barj...@attglobal.net> wrote:
> On Jul 3, 6:03 pm, Phrogz <g...@refinery.com> wrote:
>
>
>
> > On Jul 3, 6:54 pm, barjunk <barj...@attglobal.net> wrote:
>
> > > I'm trying to do validation on a firewall rule. The rule looks like
> > > this:
>
> > > -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > > ACCEPT
>
> > > I know I can use split(' ') to break up the above entry into small
> > > parts, but what I really want is every other one.
>
> > > So '-A eth0' should be one then '-i eth0' should be the next....etc.
>
> > irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> > tcp --dport 22 -j ACCEPT"
> > => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"
>
> > irb(main):002:0> s.scan /[^ ]+ [^ ]+/
> > => ["-A eth0-IN", "-i eth0", "-s 192.168.0.0/24", "-p tcp", "-m tcp",
> > "--dport 22", "-j ACCEPT"]
>
> I had to modify this just a bit to work with allowable multispace
> situations. An example is a rule that might look like this:
>
> -A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport
> 22 -j ACCEPT
>
> it looks like this: s.scan /[^ ]+ +[^ ]+/
>
> I suppose another solution would be to trim all the extra spaces first
> with some sort of gsub, then use the scan.
>
> Thanks again.
>
> Mike B.

Another nice way to do it would be to split it up into a Hash since
that would give you distinct option/value pairs.

# s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
j ACCEPT"
# => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"
# Hash[s.split]
# => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
"-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

Chris Shea

7/6/2007 3:28:00 AM

0

On Jul 5, 8:59 pm, Sam Smoot <ssm...@gmail.com> wrote:
>
> Another nice way to do it would be to split it up into a Hash since
> that would give you distinct option/value pairs.
>
> # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> j ACCEPT"
> # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
> # Hash[s.split]
> # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

Don't you need to splat the split?

mvb:~ cms$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
mvb:~ cms$ irb
irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
tcp --dport 22 -j ACCEPT"
=> "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT"
irb(main):002:0> Hash[s.split]
ArgumentError: odd number of arguments for Hash
from (irb):2:in `[]'
from (irb):2
from :0
irb(main):003:0> Hash[*s.split]
=> {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

Sam Smoot

7/6/2007 3:42:00 AM

0

On Jul 5, 10:28 pm, Chris Shea <cms...@gmail.com> wrote:
> On Jul 5, 8:59 pm, SamSmoot<ssm...@gmail.com> wrote:
>
>
>
> > Another nice way to do it would be to split it up into a Hash since
> > that would give you distinct option/value pairs.
>
> > # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> > j ACCEPT"
> > # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"
> > # Hash[s.split]
> > # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> > "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}
>
> Don't you need to splat the split?
>
> mvb:~ cms$ ruby -v
> ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
> mvb:~ cms$ irb
> irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> tcp --dport 22 -j ACCEPT"
> => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> ACCEPT"
> irb(main):002:0> Hash[s.split]
> ArgumentError: odd number of arguments for Hash
> from (irb):2:in `[]'
> from (irb):2
> from :0
> irb(main):003:0> Hash[*s.split]
> => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
> j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}

Yeah, I'm sorry. Got sloppy with my copy & paste and figured I could
just write it faster I guess. :)

barjunk

7/11/2007 7:30:00 PM

0

On Jul 5, 7:42 pm, Sam Smoot <ssm...@gmail.com> wrote:
> On Jul 5, 10:28 pm, Chris Shea <cms...@gmail.com> wrote:
>
>
>
> > On Jul 5, 8:59 pm, SamSmoot<ssm...@gmail.com> wrote:
>
> > > Another nice way to do it would be to split it up into a Hash since
> > > that would give you distinct option/value pairs.
>
> > > # s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -
> > > j ACCEPT"
> > > # => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > > ACCEPT"
> > > # Hash[s.split]
> > > # => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0",
> > > "-j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}
>
> > Don't you need to splat the split?
>
> > mvb:~ cms$ ruby -v
> > ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
> > mvb:~ cms$ irb
> > irb(main):001:0> s = "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m
> > tcp --dport 22 -j ACCEPT"
> > => "-A eth0-IN -i eth0 -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j
> > ACCEPT"
> > irb(main):002:0> Hash[s.split]
> > ArgumentError: odd number of arguments for Hash
> > from (irb):2:in `[]'
> > from (irb):2
> > from :0
> > irb(main):003:0> Hash[*s.split]
> > => {"-m"=>"tcp", "-p"=>"tcp", "-s"=>"192.168.0.0/24", "-i"=>"eth0", "-
> > j"=>"ACCEPT", "--dport"=>"22", "-A"=>"eth0-IN"}
>
> Yeah, I'm sorry. Got sloppy with my copy & paste and figured I could
> just write it faster I guess. :)


Although this doesn't account for a typo like leaving off some part of
the pairs...could rescue for that situation.

Thanks for all the feeback.