DRb DNS Problems

DRb server trying to yield data to the fully qualified domain name of
the client?

Today, I ran into an issue with a host(windows client) that had an
improperly configured domain name suffix.

Its typical fqdn would be client1.ruby-lang.org but because of poor
network administration, it was changed to client1.doesentexist.com.

Although client1 and server1 can still communicate fine because of Net
BIOS and arp (on the same subnet), the DRb server tries to yield the
objects back to the client's fully qualified name... If it fails, it
bombs out with a drbconnerr. I guess I'm just wondering why it doesn't
attempt alternate methods?

If I don't use the yield / callback it connects and returns results
fine.. The issue only presents itself when using yields and bombs out
when the server tries to return the object to the clients FQDN..

Is this a security feature or what? I realize I cant blame drb for my
network but I can say that other applications were unaffected (at
least in an obvious way).

thx for any input.

==== clnt.rb ====
require 'drb'

DRb.start_service()
obj = DRbObject.new_with_uri('druby://:22337')

obj.foo do |i|
p i
end

···

========

Hello,

DRb server trying to yield data to the fully qualified domain name of
the client?

Today, I ran into an issue with a host(windows client) that had an
improperly configured domain name suffix.

Its typical fqdn would be client1.ruby-lang.org but because of poor
network administration, it was changed to client1.doesentexist.com.

Although client1 and server1 can still communicate fine because of Net
BIOS and arp (on the same subnet), the DRb server tries to yield the
objects back to the client's fully qualified name... If it fails, it
bombs out with a drbconnerr. I guess I'm just wondering why it doesn't
attempt alternate methods?

  [Snip more details]

==== clnt.rb ====
require 'drb'

DRb.start_service()
obj = DRbObject.new_with_uri('druby://:22337')

obj.foo do |i|
p i
end

I agree that it would be nice if DRb had some more methods for
providing a host address. Although, I am not sure easy this would be.
For example what if you have multiple network interfaces? Luckily, you
can control what is provided by setting a full URI in the
DRbObject.new_with_uri method.

Such as:

DRbObject.new_with_uri('druby://myhardcoded.domain.com:22337')

or by IP

DRbObject.new_with_uri('druby://192.168.0.1:22337')

Granted this requires you to configure your URI for each machine that
you run clnt.rb on. So if you have lots of clients it might be better
to fix your network and continue using the 'druby://:22337' URI.

Cheers,
Zev

···

On Sat, 24 Sep 2005 13:16:59 +0900, x1 <caldridge@gmail.com> wrote:

Thanks for the reply. --Glad to see I'm not going crazy.

Kind regards.

···

On 9/26/05, Zev Blut <rubyzbibd@ubit.com> wrote:

Hello,

On Sat, 24 Sep 2005 13:16:59 +0900, x1 <caldridge@gmail.com> wrote:

> DRb server trying to yield data to the fully qualified domain name of
> the client?
>
> Today, I ran into an issue with a host(windows client) that had an
> improperly configured domain name suffix.
>
> Its typical fqdn would be client1.ruby-lang.org but because of poor
> network administration, it was changed to client1.doesentexist.com.
>
> Although client1 and server1 can still communicate fine because of Net
> BIOS and arp (on the same subnet), the DRb server tries to yield the
> objects back to the client's fully qualified name... If it fails, it
> bombs out with a drbconnerr. I guess I'm just wondering why it doesn't
> attempt alternate methods?

  [Snip more details]

> ==== clnt.rb ====
> require 'drb'
>
> DRb.start_service()
> obj = DRbObject.new_with_uri('druby://:22337')
>
> obj.foo do |i|
> p i
> end
> ========

I agree that it would be nice if DRb had some more methods for
providing a host address. Although, I am not sure easy this would be.
For example what if you have multiple network interfaces? Luckily, you
can control what is provided by setting a full URI in the
DRbObject.new_with_uri method.

Such as:

DRbObject.new_with_uri('druby://myhardcoded.domain.com:22337')

or by IP

DRbObject.new_with_uri('druby://192.168.0.1:22337')

Granted this requires you to configure your URI for each machine that
you run clnt.rb on. So if you have lots of clients it might be better
to fix your network and continue using the 'druby://:22337' URI.

Cheers,
Zev