kpasswd changes password successfully but also complains about kdc not reachable
Tom Yu
tlyu at MIT.EDU
Wed Sep 9 09:48:04 EDT 2009
Jan Sanders <jsanders at TechFak.Uni-Bielefeld.DE> writes:
> Hello List,
>
> on my client machine I can get kerberos tickets for my principal using
> the correct principalname-password combination. I can also use kadmin on
> the client machine providing the correct principalname-password
> combination for an admin principal. Changing the password for a
> principal is no problem using kadmin.
> But then I trzy to use kpasswd on the client machine. I provide kpasswd
> with correct the principalname-password combination and twiche state
> what the new password should be and then I wait for a couple of seconds
> before kpasswd returns.
> On returning it complains: Cannot contact any KDC for requested realm
> But it also changed the password. After invoking kpasswd and observing
> the above stated behaviour I have to provide the new password to obtain
> a ticket.
> Even though kpasswd works as advertised (changes the password) it will
> cause some trouble telling users that the error message can safely be
> ignored (if it can!!).
>
> Using strace I could see some timeouts of select syscalls.
> kpasswd obtained a file descriptor for an IP connection, connects to the
> KDC and successfully sends 490 byte of data.
> Then kpasswd uses the select syscall to monitor the filedescriptor which
> times out twice.
> kpasswd resends the 490 bytes and again waits for two select syscalls to
> time out.
> Then again and finally returns with the "Cannot contact any KDC for
> requested realm" complaint.
>
> strace was invoked like this:
> #strace -o /tmp/kpasswd.strace -s 512 -f kpasswd testprinc
>
> What strikes me is the invocation of the select syscall. According to
> the select specification the first parameter of the syscall is the
> number of monitored file descriptors + 1. The select calls as used here
> only monitor 2 file descriptors (better: one filedescriptor is monitored
> twice). The number of file descriptors is set to 5. I do not know how
> select behaves when invoked like that and it seems not to be specified.
I believe the call to select() is correct. The first parameter should
be an integer that is one greater than the number of the
highest-numbered file descriptor, i.e., the highest-numbered file
descriptor that select() should look at here is file descriptor #4,
which means that select(5, ....) is correct.
What is probably happening is that the UDP reply packet from the KDC's
kpasswd service is not reaching you, which is could be caused by a
firewall or other factors related to network topology. Can you get a
packet trace on UDP port 464, both on the client's network and on the
KDC's network?
> The (slightly sanitized) output of strace starting from the socket
> request for connecting to the KDC:
>
> 8006 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
> 8006 connect(4, {sa_family=AF_INET, sin_port=htons(464),
> sin_addr=inet_addr("[IP of KDC]")}, 16) = 0
> 8006 getsockname(4, {sa_family=AF_INET, sin_port=htons(35498),
> sin_addr=inet_addr("[IP of self, aka client machine]")}, [16]) = 0
> 8006 send(4, "[snipped 490 bytes]"..., 490, 0) = 490
> 8006 gettimeofday({1252498115, 459404}, NULL) = 0
> 8006 gettimeofday({1252498115, 459444}, NULL) = 0
> 8006 select(5, [4], [], [4], {0, 999960}) = 0 (Timeout)
> 8006 gettimeofday({1252498116, 457725}, NULL) = 0
> 8006 gettimeofday({1252498116, 457765}, NULL) = 0
> 8006 select(5, [4], [], [4], {2, 1639}) = 0 (Timeout)
> 8006 send(4, "[snipped 490 bytes]"..., 490, 0) = 490
> 8006 gettimeofday({1252498118, 462172}, NULL) = 0
> 8006 gettimeofday({1252498118, 462214}, NULL) = 0
> 8006 select(5, [4], [], [4], {0, 999958}) = 0 (Timeout)
> 8006 gettimeofday({1252498119, 461724}, NULL) = 0
> 8006 gettimeofday({1252498119, 461763}, NULL) = 0
> 8006 select(5, [4], [], [4], {4, 409}) = 0 (Timeout)
> 8006 send(4, "[snipped 490 bytes]"..., 490, 0) = 490
> 8006 gettimeofday({1252498123, 466171}, NULL) = 0
> 8006 gettimeofday({1252498123, 466213}, NULL) = 0
> 8006 select(5, [4], [], [4], {0, 999958}) = 0 (Timeout)
> 8006 gettimeofday({1252498124, 465728}, NULL) = 0
> 8006 gettimeofday({1252498124, 465767}, NULL) = 0
> 8006 select(5, [4], [], [4], {8, 404}) = 0 (Timeout)
> 8006 close(4) = 0
> 8006 write(2, "kpasswd", 7) = 7
> 8006 write(2, ": ", 2) = 2
> 8006 write(2, "Cannot contact any KDC for requested realm", 42) = 42
> 8006 write(2, " ", 1) = 1
> 8006 write(2, "changing password", 17) = 17
> 8006 write(2, "\r\n", 2) = 2
> 8006 exit_group(1) = ?
>
> End of strace output.
>
>
> I hope all this is helpful for finding the cause of the "Cannot contact
> ..." error.
>
> cheers
>
> Jan Sanders
> ________________________________________________
> Kerberos mailing list Kerberos at mit.edu
> https://mailman.mit.edu/mailman/listinfo/kerberos
More information about the Kerberos
mailing list