Thread: 7.4devel auth failed
Trying to connect from pgadmin2, I get the message "no pg_hba.conf entry for ..." I found that the ip address matching with rangeSockAdr in line 651 in hba.c fails. I get access if I set ipaddr/mask to 0.0.0.0/0.0.0.0 in pg_hba.conf.
That's strange. I just tested it here, and it worked. I have IPv6 code enabled. but no IPv6 in my kernel, so there are just IPv4 connections. Can you peek in this funciton and see where it is failing:intrangeSockAddrAF_INET(const SockAddr *addr, const SockAddr *netaddr, const SockAddr *netmask){ if (addr->sa.sa_family != AF_INET || netaddr->sa.sa_family!= AF_INET || netmask->sa.sa_family != AF_INET) return 0; if (((addr->in.sin_addr.s_addr^ netaddr->in.sin_addr.s_addr) & netmask->in.sin_addr.s_addr) == 0) return 1; else return 0;} That is the IPv4 function. --------------------------------------------------------------------------- Andreas Pflug wrote: > Trying to connect from pgadmin2, I get the message > "no pg_hba.conf entry for ..." > > I found that the ip address matching with rangeSockAdr in line 651 in > hba.c fails. > > I get access if I set ipaddr/mask to 0.0.0.0/0.0.0.0 in pg_hba.conf. > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
Ok Bruce, I found out what's happening. I'm running a Suse 8.1 2.4.19 standard kernel which has IPV6 enabled by default. When connecting locally over IP (pgaccess), hba is checked against IPV6 patterns in pg_hba.conf. My pgadmin2 machine will connect with an IP4-to-6 mapped address of 0:ffff:c0a80002 (192.168.0.2), which convSockAddr6to4 will convert to dst->in.sin_addr.s_addr=0xc0a80002. On the other side, SockAddr_pton will convert my 192.168.0.0/255.255.255.0 entry to a8c0/ffffff, and consequently rangeSockAddr will fail. If your kernel isn't V6 enabled, the incoming socket will be AF_INET, and no conversion is done, that's why you don't get the problem. To fix this, the [12]..[15] indices need to be reversed (for Intel). This might be machine specific... Maybe for all big-endian machines the current code is ok, and needs reversal for little-endian processors. I wonder if the following is completely portable, could be: dst->in.sin_addr.s_addr = *(in_addr_t*)(src->in4.sin6_addr.s6_addr+12); Regards, Andreas PS Your mail host candle.pha.pa.us rejected this mail as spam?!? Bruce Momjian wrote: >That's strange. I just tested it here, and it worked. I have IPv6 code >enabled. but no IPv6 in my kernel, so there are just IPv4 connections. > >Can you peek in this funciton and see where it is failing: > > int > rangeSockAddrAF_INET(const SockAddr *addr, const SockAddr *netaddr, > const SockAddr *netmask) > { > if (addr->sa.sa_family != AF_INET || > netaddr->sa.sa_family != AF_INET || > netmask->sa.sa_family != AF_INET) > return 0; > if (((addr->in.sin_addr.s_addr ^ netaddr->in.sin_addr.s_addr) & > netmask->in.sin_addr.s_addr) == 0) > return 1; > else > return 0; > } > >That is the IPv4 function. > > > >
I am confused about using only the last few bytes. Does this adjustment of IP addresses help:voidconvSockAddr6to4(const SockAddr *src, SockAddr *dst){ char addr_str[INET6_ADDRSTRLEN]; dst->in.sin_family = AF_INET; dst->in.sin_port = src->in6.sin6_port; dst->in.sin_addr.s_addr= (src->in6.sin6_addr.s6_addr[15]) + (src->in6.sin6_addr.s6_addr[14] << 8) +(src->in6.sin6_addr.s6_addr[13] << 16) + (src->in6.sin6_addr.s6_addr[12] << 24); SockAddr_ntop(src, addr_str,INET6_ADDRSTRLEN, 0);} Can you supply a patch? FYI, I do have IPv6 enabled libraries, but not in my kernel. > PS Your mail host candle.pha.pa.us rejected this mail as spam?!? I have whitelisted web.de. I received spam from them last month, and didn't know if they were legit or just a spamhouse. Unfortunately, I don't check each one I blacklist. --------------------------------------------------------------------------- Andreas Pflug wrote: > Ok Bruce, > > I found out what's happening. > I'm running a Suse 8.1 2.4.19 standard kernel which has IPV6 enabled by > default. When connecting locally over IP (pgaccess), hba is checked > against IPV6 patterns in pg_hba.conf. > My pgadmin2 machine will connect with an IP4-to-6 mapped address of > 0:ffff:c0a80002 (192.168.0.2), which convSockAddr6to4 will convert to > dst->in.sin_addr.s_addr=0xc0a80002. On the other side, SockAddr_pton > will convert my 192.168.0.0/255.255.255.0 entry to a8c0/ffffff, and > consequently rangeSockAddr will fail. > > If your kernel isn't V6 enabled, the incoming socket will be AF_INET, > and no conversion is done, that's why you don't get the problem. > To fix this, the [12]..[15] indices need to be reversed (for Intel). > This might be machine specific... Maybe for all big-endian machines the > current code is ok, and needs reversal for little-endian processors. > I wonder if the following is completely portable, could be: > dst->in.sin_addr.s_addr = *(in_addr_t*)(src->in4.sin6_addr.s6_addr+12); > > Regards, > Andreas > > PS Your mail host candle.pha.pa.us rejected this mail as spam?!? > > > > Bruce Momjian wrote: > > >That's strange. I just tested it here, and it worked. I have IPv6 code > >enabled. but no IPv6 in my kernel, so there are just IPv4 connections. > > > >Can you peek in this funciton and see where it is failing: > > > > int > > rangeSockAddrAF_INET(const SockAddr *addr, const SockAddr *netaddr, > > const SockAddr *netmask) > > { > > if (addr->sa.sa_family != AF_INET || > > netaddr->sa.sa_family != AF_INET || > > netmask->sa.sa_family != AF_INET) > > return 0; > > if (((addr->in.sin_addr.s_addr ^ netaddr->in.sin_addr.s_addr) & > > netmask->in.sin_addr.s_addr) == 0) > > return 1; > > else > > return 0; > > } > > > >That is the IPv4 function. > > > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
On Tue, Mar 25, 2003 at 12:28:43PM +0100, Andreas Pflug wrote: > Ok Bruce, > > I found out what's happening. > I'm running a Suse 8.1 2.4.19 standard kernel which has IPV6 enabled by > default. When connecting locally over IP (pgaccess), hba is checked > against IPV6 patterns in pg_hba.conf. > My pgadmin2 machine will connect with an IP4-to-6 mapped address of > 0:ffff:c0a80002 (192.168.0.2), which convSockAddr6to4 will convert to You mean ::ffff:c0a8:0002 or ::ffff:192.168.0.2? (::ffff:c0a80002 is not valid.) > dst->in.sin_addr.s_addr=0xc0a80002. Which is the right value for it. > On the other side, SockAddr_pton > will convert my 192.168.0.0/255.255.255.0 entry to a8c0/ffffff, and > consequently rangeSockAddr will fail. Something is wrong here. It somehow converted them to host byte order where it shouldn't. SockAddr_pton() basicly does: return inet_pton(AF_INET, src, &sa->in.sin_addr); Which should return the data in network byte order. > If your kernel isn't V6 enabled, the incoming socket will be AF_INET, > and no conversion is done, that's why you don't get the problem. > To fix this, the [12]..[15] indices need to be reversed (for Intel). > This might be machine specific... Maybe for all big-endian machines the > current code is ok, and needs reversal for little-endian processors. > I wonder if the following is completely portable, could be: > dst->in.sin_addr.s_addr = *(in_addr_t*)(src->in4.sin6_addr.s6_addr+12); Where should you place that? I can't see anything wrong with the code as it is now. I think I even tested it for ipv4 and it worked for me, so I have no idea what's wrong. I've made alot of changes to the current code but it's not finnished yet, and really have no time atm. It currently only compiles on a host that has ipv6 in libc. It shouldn't be too much work to get it to compile on a host without ipv4. Kurt
Shouldn't the fix involve an appropriate use of ntohl or htonl, instead of ad-hoc shifting? regards, tom lane
On Wed, Mar 26, 2003 at 12:36:00AM +0100, Andreas Pflug wrote: > Kurt, > > for my opinion, ConvSockAddr6to4 works wrong. The resulting ip address > looks good for the eye, but only if printed as an integer which will > interpret it little-endian (host byte order). Oops, I didn't see that one. convSockAddr6to4() is obviously wrong. There is where it gets converted to host order where it shouldn't. What is that SockAddr_ntop() doing there anyway? Maybe the inteded code was a combination for SockAddr_ntop() and SockAddr_pton()? Kurt
Bruce Momjian writes: > I have whitelisted web.de. I received spam from them last month, and > didn't know if they were legit or just a spamhouse. Unfortunately, I > don't check each one I blacklist. Maybe you should. You've blacklisted me, too. -- Peter Eisentraut peter_e@gmx.net
Peter Eisentraut wrote: > Bruce Momjian writes: > > > I have whitelisted web.de. I received spam from them last month, and > > didn't know if they were legit or just a spamhouse. Unfortunately, I > > don't check each one I blacklist. > > Maybe you should. You've blacklisted me, too. OK, fixed. You know, I started getting email that is clearly grabbing from our web page, titled "dpage, ...". Seems that might be how your address got in. I will look at the next one and see if they appear to be coming from the original hosts. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
Andreas Pflug <Andreas.Pflug@web.de> writes: > If your kernel isn't V6 enabled, the incoming socket will be AF_INET, > and no conversion is done, that's why you don't get the problem. > To fix this, the [12]..[15] indices need to be reversed (for Intel). I've applied a patch to fix this, but can't try it out here for lack of any IPv6 infrastructure ... please check it. regards, tom lane
Looks like Tom just checked a fix into CVS for your reported problem. Would you please test it? --------------------------------------------------------------------------- Andreas Pflug wrote: > Ok Bruce, > > I found out what's happening. > I'm running a Suse 8.1 2.4.19 standard kernel which has IPV6 enabled by > default. When connecting locally over IP (pgaccess), hba is checked > against IPV6 patterns in pg_hba.conf. > My pgadmin2 machine will connect with an IP4-to-6 mapped address of > 0:ffff:c0a80002 (192.168.0.2), which convSockAddr6to4 will convert to > dst->in.sin_addr.s_addr=0xc0a80002. On the other side, SockAddr_pton > will convert my 192.168.0.0/255.255.255.0 entry to a8c0/ffffff, and > consequently rangeSockAddr will fail. > > If your kernel isn't V6 enabled, the incoming socket will be AF_INET, > and no conversion is done, that's why you don't get the problem. > To fix this, the [12]..[15] indices need to be reversed (for Intel). > This might be machine specific... Maybe for all big-endian machines the > current code is ok, and needs reversal for little-endian processors. > I wonder if the following is completely portable, could be: > dst->in.sin_addr.s_addr = *(in_addr_t*)(src->in4.sin6_addr.s6_addr+12); > > Regards, > Andreas > > PS Your mail host candle.pha.pa.us rejected this mail as spam?!? > > > > Bruce Momjian wrote: > > >That's strange. I just tested it here, and it worked. I have IPv6 code > >enabled. but no IPv6 in my kernel, so there are just IPv4 connections. > > > >Can you peek in this funciton and see where it is failing: > > > > int > > rangeSockAddrAF_INET(const SockAddr *addr, const SockAddr *netaddr, > > const SockAddr *netmask) > > { > > if (addr->sa.sa_family != AF_INET || > > netaddr->sa.sa_family != AF_INET || > > netmask->sa.sa_family != AF_INET) > > return 0; > > if (((addr->in.sin_addr.s_addr ^ netaddr->in.sin_addr.s_addr) & > > netmask->in.sin_addr.s_addr) == 0) > > return 1; > > else > > return 0; > > } > > > >That is the IPv4 function. > > > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
Tom Lane wrote: >I've applied a patch to fix this, but can't try it out here for lack of >any IPv6 infrastructure ... please check it. > > regards, tom lane > > > I tried it, and it works. Regards, Andreas