Hi!
I have server with Active Directory.
I wanted to do somethink like thet:
def changelogonhours(name,ldap)
filtr = Net::LDAP::Filter.eq("cn",name)
ldap.search(:base => "dc=example,dc=local", :filter => filtr){|ut|
p ut[:dn]
p ut[:logonhours]
ut1,ut2 = Marshal.dump(ut[:logonhours]).split("\032")
ut1 = ut1 + "\032"
ut2, ut3 = ut2.split("\006:")
ut3 = "\006:" + ut3
ut2a=[]
(0..6).each{|g|
ut2a[g] = ut2[g*3..g*3+2]
}
tmp=ut2a[1]
(2..6).each{|g|
ut2a[g-1]=ut2a[g]
}
ut2a[6]=tmp
ut_new = ut1 + ut2a.join + ut3
# here begins my problem
ldap.replace_attribute ut[:dn], :logonhours, Marshal.load(ut_new)
p ut[:logonhours]
}
end
Ruby responds:
["CN=Tom Bombadil,OU=Users,DC=exmple,DC=local"]
["\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"]
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1502:in `modify':
response missing or invalid (Net::LDAP::LdapError)
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:912:in `modify'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:962:in
`replace_attribute'
from or.rb:24:in `trova_orari'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:630:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1426:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1385:in `loop'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1385:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:628:in `search'
from or.rb:6:in `trova_orari'
from or.rb:38
from or.rb:37:in `each'
from or.rb:37
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:534:in `open'
from or.rb:36
If you have some idea how to fix it i will be grateful.
Piotr
P.S. of course this code run after authentication where i use user that
can change logon howers through "Active Directory Users and Computers"
ldap = Net::LDAP.new
ldap.host = "192.168.0.2"
ldap.port = 389
ldap.auth "CN=User for Maintenance,OU=Other Users,DC=example,DC=local",
"pass"
if ldap.bind
ldap.open{|ldap|
changelogonhours("Tom Bombadil",ldap)
}
else
puts "nooooooo"
end
···
--
Posted via http://www.ruby-forum.com/.
Is u2 getting set?
irb(main):124:0> u1,u2 = "\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000".split("\032")
=> ["\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"]
irb(main):125:0> u1
=> "\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"
irb(main):126:0> u2
=> nil
irb(main):127:0>
···
________________________________
From: Piotr Talarczyk <don.piotr@yahoo.it>
Reply-To: <ruby-talk@ruby-lang.org>
Date: Tue, 31 Aug 2010 11:47:57 -0500
To: ruby-talk ML <ruby-talk@ruby-lang.org>
Subject: net ldap problem?
Hi!
I have server with Active Directory.
I wanted to do somethink like thet:
def changelogonhours(name,ldap)
filtr = Net::LDAP::Filter.eq("cn",name)
ldap.search(:base => "dc=example,dc=local", :filter => filtr){|ut|
p ut[:dn]
p ut[:logonhours]
ut1,ut2 = Marshal.dump(ut[:logonhours]).split("\032")
ut1 = ut1 + "\032"
ut2, ut3 = ut2.split("\006:")
ut3 = "\006:" + ut3
ut2a=[]
(0..6).each{|g|
ut2a[g] = ut2[g*3..g*3+2]
}
tmp=ut2a[1]
(2..6).each{|g|
ut2a[g-1]=ut2a[g]
}
ut2a[6]=tmp
ut_new = ut1 + ut2a.join + ut3
# here begins my problem
ldap.replace_attribute ut[:dn], :logonhours, Marshal.load(ut_new)
p ut[:logonhours]
}
end
Ruby responds:
["CN=Tom Bombadil,OU=Users,DC=exmple,DC=local"]
["\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"]
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1502:in `modify':
response missing or invalid (Net::LDAP::LdapError)
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:912:in `modify'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:962:in
`replace_attribute'
from or.rb:24:in `trova_orari'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:630:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1426:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1385:in `loop'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:1385:in `search'
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:628:in `search'
from or.rb:6:in `trova_orari'
from or.rb:38
from or.rb:37:in `each'
from or.rb:37
from
/var/lib/gems/1.8/gems/net-ldap-0.1.1/lib/net/ldap.rb:534:in `open'
from or.rb:36
If you have some idea how to fix it i will be grateful.
Piotr
P.S. of course this code run after authentication where i use user that
can change logon howers through "Active Directory Users and Computers"
ldap = Net::LDAP.new
ldap.host = "192.168.0.2"
ldap.port = 389
ldap.auth "CN=User for Maintenance,OU=Other Users,DC=example,DC=local",
"pass"
if ldap.bind
ldap.open{|ldap|
changelogonhours("Tom Bombadil",ldap)
}
else
puts "nooooooo"
end
--
Posted via http://www.ruby-forum.com/.
Savard, Joseph wrote:
Is u2 getting set?
irb(main):124:0> u1,u2 =
"\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000".split("\032")
=>
["\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"]
irb(main):125:0> u1
=>
"\300\377\017\000\000\000\000\000\000\000\000\b\000\000\004\000\000\001\000\000\000"
irb(main):126:0> u2
=> nil
irb(main):127:0>
________________________________
From: Piotr Talarczyk <don.piotr@yahoo.it>
Reply-To: <ruby-talk@ruby-lang.org>
Date: Tue, 31 Aug 2010 11:47:57 -0500
To: ruby-talk ML <ruby-talk@ruby-lang.org>
Subject: net ldap problem?
....
ut1,ut2 = Marshal.dump(ut[:logonhours]).split("\032")
ut1 = ut1 + "\032"
ut2, ut3 = ut2.split("\006:")
ut3 = "\006:" + ut3
ut2a=
...
I didn't see that i can convert ut[:logonhours]
(Net::BER::BerIdentifiedArray) to string. Cuting it with "\032" make
sense only with Marshal.dump.
Now my code is more simple:
p ut[:logonhours]
utstr = ut[:logonhours].to_s
utarr=
(0..6).each{|g|
utarr[g] = utstr[g*3..g*3+2]
} # divide by day
tmp=utarr[1]
(2..6).each{|g|
utarr[g-1]=utarr[g]
}
utarr[6]=tmp
ldap.replace_attribute ut[:dn], :logonhours, utarr.join.to_ber
p ut[:logonhours]
But i still have problem with replace_attribute that give me the same
error as written above
···
--
Posted via http://www.ruby-forum.com/\.