View | Details | Raw Unified | Return to bug 251055
Collapse All | Expand All

(-)b/src/backend/libpq/hba.c (-10 / +21 lines)
Lines 1188-1195 parse_hba_line(TokenizedLine *tok_line, int elevel) Link Here
1188
1188
1189
			ret = pg_getaddrinfo_all(str, NULL, &hints, &gai_result);
1189
			ret = pg_getaddrinfo_all(str, NULL, &hints, &gai_result);
1190
			if (ret == 0 && gai_result)
1190
			if (ret == 0 && gai_result)
1191
			{
1191
				memcpy(&parsedline->addr, gai_result->ai_addr,
1192
				memcpy(&parsedline->addr, gai_result->ai_addr,
1192
					   gai_result->ai_addrlen);
1193
					   gai_result->ai_addrlen);
1194
				parsedline->addrlen = gai_result->ai_addrlen;
1195
			}
1193
			else if (ret == EAI_NONAME)
1196
			else if (ret == EAI_NONAME)
1194
				parsedline->hostname = str;
1197
				parsedline->hostname = str;
1195
			else
1198
			else
Lines 1238-1243 parse_hba_line(TokenizedLine *tok_line, int elevel) Link Here
1238
										token->string);
1241
										token->string);
1239
					return NULL;
1242
					return NULL;
1240
				}
1243
				}
1244
				parsedline->masklen = parsedline->addrlen;
1241
				pfree(str);
1245
				pfree(str);
1242
			}
1246
			}
1243
			else if (!parsedline->hostname)
1247
			else if (!parsedline->hostname)
Lines 1288-1293 parse_hba_line(TokenizedLine *tok_line, int elevel) Link Here
1288
1292
1289
				memcpy(&parsedline->mask, gai_result->ai_addr,
1293
				memcpy(&parsedline->mask, gai_result->ai_addr,
1290
					   gai_result->ai_addrlen);
1294
					   gai_result->ai_addrlen);
1295
				parsedline->masklen = gai_result->ai_addrlen;
1291
				pg_freeaddrinfo_all(hints.ai_family, gai_result);
1296
				pg_freeaddrinfo_all(hints.ai_family, gai_result);
1292
1297
1293
				if (parsedline->addr.ss_family != parsedline->mask.ss_family)
1298
				if (parsedline->addr.ss_family != parsedline->mask.ss_family)
Lines 2538-2557 fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc, Link Here
2538
				}
2543
				}
2539
				else
2544
				else
2540
				{
2545
				{
2541
					if (pg_getnameinfo_all(&hba->addr, sizeof(hba->addr),
2546
					/*
2542
										   buffer, sizeof(buffer),
2547
					 * Note: if pg_getnameinfo_all fails, it'll set buffer to
2543
										   NULL, 0,
2548
					 * "???", which we want to return.
2544
										   NI_NUMERICHOST) == 0)
2549
					 */
2550
					if (hba->addrlen > 0)
2545
					{
2551
					{
2546
						clean_ipv6_addr(hba->addr.ss_family, buffer);
2552
						if (pg_getnameinfo_all(&hba->addr, hba->addrlen,
2553
											   buffer, sizeof(buffer),
2554
											   NULL, 0,
2555
											   NI_NUMERICHOST) == 0)
2556
							clean_ipv6_addr(hba->addr.ss_family, buffer);
2547
						addrstr = pstrdup(buffer);
2557
						addrstr = pstrdup(buffer);
2548
					}
2558
					}
2549
					if (pg_getnameinfo_all(&hba->mask, sizeof(hba->mask),
2559
					if (hba->masklen > 0)
2550
										   buffer, sizeof(buffer),
2551
										   NULL, 0,
2552
										   NI_NUMERICHOST) == 0)
2553
					{
2560
					{
2554
						clean_ipv6_addr(hba->mask.ss_family, buffer);
2561
						if (pg_getnameinfo_all(&hba->mask, hba->masklen,
2562
											   buffer, sizeof(buffer),
2563
											   NULL, 0,
2564
											   NI_NUMERICHOST) == 0)
2565
							clean_ipv6_addr(hba->mask.ss_family, buffer);
2555
						maskstr = pstrdup(buffer);
2566
						maskstr = pstrdup(buffer);
2556
					}
2567
					}
2557
				}
2568
				}
(-)b/src/include/libpq/hba.h (-1 / +6 lines)
Lines 42-47 typedef enum UserAuth Link Here
42
#define USER_AUTH_LAST uaPeer	/* Must be last value of this enum */
42
#define USER_AUTH_LAST uaPeer	/* Must be last value of this enum */
43
} UserAuth;
43
} UserAuth;
44
44
45
/*
46
 * Data structures representing pg_hba.conf entries
47
 */
48
45
typedef enum IPCompareMethod
49
typedef enum IPCompareMethod
46
{
50
{
47
	ipCmpMask,
51
	ipCmpMask,
Lines 75-85 typedef struct HbaLine Link Here
75
	List	   *databases;
79
	List	   *databases;
76
	List	   *roles;
80
	List	   *roles;
77
	struct sockaddr_storage addr;
81
	struct sockaddr_storage addr;
82
	int			addrlen;		/* zero if we don't have a valid addr */
78
	struct sockaddr_storage mask;
83
	struct sockaddr_storage mask;
84
	int			masklen;		/* zero if we don't have a valid mask */
79
	IPCompareMethod ip_cmp_method;
85
	IPCompareMethod ip_cmp_method;
80
	char	   *hostname;
86
	char	   *hostname;
81
	UserAuth	auth_method;
87
	UserAuth	auth_method;
82
83
	char	   *usermap;
88
	char	   *usermap;
84
	char	   *pamservice;
89
	char	   *pamservice;
85
	bool		pam_use_hostname;
90
	bool		pam_use_hostname;

Return to bug 251055