aboutsummaryrefslogtreecommitdiff
path: root/src/backend/libpq/hba.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/libpq/hba.c')
-rw-r--r--src/backend/libpq/hba.c396
1 files changed, 206 insertions, 190 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 872601293c7..97045ff012c 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.28 1998/02/24 15:18:41 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.29 1998/02/26 04:31:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -97,8 +97,8 @@ read_through_eol(FILE *file)
static void
-read_hba_entry2(FILE *file, UserAuth * userauth_p, char auth_arg[],
- bool *error_p)
+read_hba_entry2(FILE *file, UserAuth *userauth_p, char auth_arg[],
+ bool *error_p)
{
/*--------------------------------------------------------------------------
Read from file FILE the rest of a host record, after the mask field,
@@ -156,7 +156,7 @@ read_hba_entry2(FILE *file, UserAuth * userauth_p, char auth_arg[],
static void
process_hba_record(FILE *file, SockAddr *raddr, const char database[],
bool *matches_p, bool *error_p,
- UserAuth * userauth_p, char auth_arg[])
+ UserAuth *userauth_p, char auth_arg[])
{
/*---------------------------------------------------------------------------
Process the non-comment record in the config file that is next on the file.
@@ -167,7 +167,8 @@ process_hba_record(FILE *file, SockAddr *raddr, const char database[],
return *error_p true, after issuing a message to stderr. If no error,
leave *error_p as it was.
---------------------------------------------------------------------------*/
- char db[MAX_TOKEN], buf[MAX_TOKEN];
+ char db[MAX_TOKEN],
+ buf[MAX_TOKEN];
/* Read the record type field. */
@@ -196,9 +197,9 @@ process_hba_record(FILE *file, SockAddr *raddr, const char database[],
*/
if (!*error_p &&
- (*userauth_p == uaIdent ||
- *userauth_p == uaKrb4 ||
- *userauth_p == uaKrb5))
+ (*userauth_p == uaIdent ||
+ *userauth_p == uaKrb4 ||
+ *userauth_p == uaKrb5))
*error_p = true;
if (*error_p)
@@ -210,12 +211,13 @@ process_hba_record(FILE *file, SockAddr *raddr, const char database[],
*/
if ((strcmp(db, database) != 0 && strcmp(db, "all") != 0) ||
- raddr->sa.sa_family != AF_UNIX)
+ raddr->sa.sa_family != AF_UNIX)
return;
}
else if (strcmp(buf, "host") == 0)
{
- struct in_addr file_ip_addr, mask;
+ struct in_addr file_ip_addr,
+ mask;
/* Get the database. */
@@ -284,7 +286,7 @@ process_hba_record(FILE *file, SockAddr *raddr, const char database[],
syntax:
sprintf(PQerrormsg,
- "process_hba_record: invalid syntax in pg_hba.conf file\n");
+ "process_hba_record: invalid syntax in pg_hba.conf file\n");
fputs(PQerrormsg, stderr);
pqdebug("%s", PQerrormsg);
@@ -296,8 +298,8 @@ syntax:
static void
process_open_config_file(FILE *file, SockAddr *raddr, const char database[],
- bool *host_ok_p, UserAuth * userauth_p,
- char auth_arg[])
+ bool *host_ok_p, UserAuth *userauth_p,
+ char auth_arg[])
{
/*---------------------------------------------------------------------------
This function does the same thing as find_hba_entry, only with
@@ -332,7 +334,7 @@ process_open_config_file(FILE *file, SockAddr *raddr, const char database[],
else
{
process_hba_record(file, raddr, database,
- &found_entry, &error, userauth_p, auth_arg);
+ &found_entry, &error, userauth_p, auth_arg);
}
}
}
@@ -352,7 +354,7 @@ process_open_config_file(FILE *file, SockAddr *raddr, const char database[],
static void
find_hba_entry(SockAddr *raddr, const char database[], bool *host_ok_p,
- UserAuth * userauth_p, char auth_arg[])
+ UserAuth *userauth_p, char auth_arg[])
{
/*--------------------------------------------------------------------------
Read the config file and find an entry that allows connection from
@@ -812,7 +814,7 @@ verify_against_usermap(const char pguser[],
int
-authident(struct sockaddr_in *raddr, struct sockaddr_in *laddr,
+authident(struct sockaddr_in * raddr, struct sockaddr_in * laddr,
const char postgres_username[],
const char auth_arg[])
{
@@ -840,7 +842,7 @@ authident(struct sockaddr_in *raddr, struct sockaddr_in *laddr,
return STATUS_ERROR;
verify_against_usermap(postgres_username, ident_username, auth_arg,
- &checks_out);
+ &checks_out);
return (checks_out ? STATUS_OK : STATUS_ERROR);
}
@@ -849,193 +851,207 @@ authident(struct sockaddr_in *raddr, struct sockaddr_in *laddr,
#ifdef CYR_RECODE
#define CHARSET_FILE "charset.conf"
#define MAX_CHARSETS 10
-#define KEY_HOST 1
-#define KEY_BASE 2
-#define KEY_TABLE 3
+#define KEY_HOST 1
+#define KEY_BASE 2
+#define KEY_TABLE 3
struct CharsetItem
{
- char Orig[MAX_TOKEN];
- char Dest[MAX_TOKEN];
- char Table[MAX_TOKEN];
+ char Orig[MAX_TOKEN];
+ char Dest[MAX_TOKEN];
+ char Table[MAX_TOKEN];
};
-int InRange(char *buf,int host)
+int
+InRange(char *buf, int host)
{
- int valid,i,FromAddr,ToAddr,tmp;
- struct in_addr file_ip_addr;
- char *p;
- unsigned int one=0x80000000,NetMask=0;
- unsigned char mask;
- p = strchr(buf,'/');
- if(p)
- {
- *p++ = '\0';
- valid = inet_aton(buf, &file_ip_addr);
- if(valid)
- {
- mask = strtoul(p,0,0);
- FromAddr = ntohl(file_ip_addr.s_addr);
- ToAddr = ntohl(file_ip_addr.s_addr);
- for(i=0;i<mask;i++)
- {
- NetMask |= one;
- one >>= 1;
- }
- FromAddr &= NetMask;
- ToAddr = ToAddr | ~NetMask;
- tmp = ntohl(host);
- return ((unsigned)tmp>=(unsigned)FromAddr &&
- (unsigned)tmp<=(unsigned)ToAddr);
- }
- }
- else
- {
- p = strchr(buf,'-');
- if(p)
- {
- *p++ = '\0';
- valid = inet_aton(buf, &file_ip_addr);
- if(valid)
- {
- FromAddr = ntohl(file_ip_addr.s_addr);
- valid = inet_aton(p, &file_ip_addr);
- if(valid)
- {
- ToAddr = ntohl(file_ip_addr.s_addr);
- tmp = ntohl(host);
- return ((unsigned)tmp>=(unsigned)FromAddr &&
- (unsigned)tmp<=(unsigned)ToAddr);
- }
- }
- }
- else
- {
- valid = inet_aton(buf, &file_ip_addr);
- if(valid)
- {
- FromAddr = file_ip_addr.s_addr;
- return ((unsigned)FromAddr == (unsigned)host);
- }
- }
- }
- return false;
+ int valid,
+ i,
+ FromAddr,
+ ToAddr,
+ tmp;
+ struct in_addr file_ip_addr;
+ char *p;
+ unsigned int one = 0x80000000,
+ NetMask = 0;
+ unsigned char mask;
+
+ p = strchr(buf, '/');
+ if (p)
+ {
+ *p++ = '\0';
+ valid = inet_aton(buf, &file_ip_addr);
+ if (valid)
+ {
+ mask = strtoul(p, 0, 0);
+ FromAddr = ntohl(file_ip_addr.s_addr);
+ ToAddr = ntohl(file_ip_addr.s_addr);
+ for (i = 0; i < mask; i++)
+ {
+ NetMask |= one;
+ one >>= 1;
+ }
+ FromAddr &= NetMask;
+ ToAddr = ToAddr | ~NetMask;
+ tmp = ntohl(host);
+ return ((unsigned) tmp >= (unsigned) FromAddr &&
+ (unsigned) tmp <= (unsigned) ToAddr);
+ }
+ }
+ else
+ {
+ p = strchr(buf, '-');
+ if (p)
+ {
+ *p++ = '\0';
+ valid = inet_aton(buf, &file_ip_addr);
+ if (valid)
+ {
+ FromAddr = ntohl(file_ip_addr.s_addr);
+ valid = inet_aton(p, &file_ip_addr);
+ if (valid)
+ {
+ ToAddr = ntohl(file_ip_addr.s_addr);
+ tmp = ntohl(host);
+ return ((unsigned) tmp >= (unsigned) FromAddr &&
+ (unsigned) tmp <= (unsigned) ToAddr);
+ }
+ }
+ }
+ else
+ {
+ valid = inet_aton(buf, &file_ip_addr);
+ if (valid)
+ {
+ FromAddr = file_ip_addr.s_addr;
+ return ((unsigned) FromAddr == (unsigned) host);
+ }
+ }
+ }
+ return false;
}
-void GetCharSetByHost(char TableName[],int host, const char DataDir[])
+void
+GetCharSetByHost(char TableName[], int host, const char DataDir[])
{
- FILE *file;
- char buf[MAX_TOKEN],BaseCharset[MAX_TOKEN],
- OrigCharset[MAX_TOKEN],DestCharset[MAX_TOKEN],HostCharset[MAX_TOKEN];
- char c,eof=false;
- char *map_file;
- int key=0,i;
- struct CharsetItem* ChArray[MAX_CHARSETS];
- int ChIndex=0;
-
- *TableName = '\0';
- map_file = (char *) malloc((strlen(DataDir) +
- strlen(CHARSET_FILE)+2)*sizeof(char));
- sprintf(map_file, "%s/%s", DataDir, CHARSET_FILE);
- file = fopen(map_file, "r");
- if (file == NULL)
- return;
- while (!eof)
- {
- c = getc(file);
- ungetc(c, file);
- if (c == EOF)
- eof = true;
- else
- {
- if (c == '#')
- read_through_eol(file);
- else
- {
- /* Read the key */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- if (strcasecmp(buf, "HostCharset") == 0)
- key = KEY_HOST;
- if (strcasecmp(buf, "BaseCharset") == 0)
- key = KEY_BASE;
- if (strcasecmp(buf, "RecodeTable") == 0)
- key = KEY_TABLE;
- switch(key)
- {
- case KEY_HOST:
- /* Read the host */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- if (InRange(buf,host))
- {
- /* Read the charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- strcpy(HostCharset,buf);
- }
- }
- }
- break;
- case KEY_BASE:
- /* Read the base charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- strcpy(BaseCharset,buf);
- }
- break;
- case KEY_TABLE:
- /* Read the original charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- strcpy(OrigCharset,buf);
- /* Read the destination charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- strcpy(DestCharset,buf);
- /* Read the table filename */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- ChArray[ChIndex] = (struct CharsetItem *) malloc(sizeof(struct CharsetItem));
- strcpy(ChArray[ChIndex]->Orig,OrigCharset);
- strcpy(ChArray[ChIndex]->Dest,DestCharset);
- strcpy(ChArray[ChIndex]->Table,buf);
- ChIndex++;
- }
- }
- }
- break;
- }
- read_through_eol(file);
- }
- }
- }
- }
- fclose(file);
- free(map_file);
-
- for(i=0; i<ChIndex; i++)
- {
- if(!strcasecmp(BaseCharset,ChArray[i]->Orig) &&
- !strcasecmp(HostCharset,ChArray[i]->Dest))
- {
- strncpy(TableName,ChArray[i]->Table,79);
- }
- free((struct CharsetItem *) ChArray[i]);
- }
+ FILE *file;
+ char buf[MAX_TOKEN],
+ BaseCharset[MAX_TOKEN],
+ OrigCharset[MAX_TOKEN],
+ DestCharset[MAX_TOKEN],
+ HostCharset[MAX_TOKEN];
+ char c,
+ eof = false;
+ char *map_file;
+ int key = 0,
+ i;
+ struct CharsetItem *ChArray[MAX_CHARSETS];
+ int ChIndex = 0;
+
+ *TableName = '\0';
+ map_file = (char *) malloc((strlen(DataDir) +
+ strlen(CHARSET_FILE) + 2) * sizeof(char));
+ sprintf(map_file, "%s/%s", DataDir, CHARSET_FILE);
+ file = fopen(map_file, "r");
+ if (file == NULL)
+ return;
+ while (!eof)
+ {
+ c = getc(file);
+ ungetc(c, file);
+ if (c == EOF)
+ eof = true;
+ else
+ {
+ if (c == '#')
+ read_through_eol(file);
+ else
+ {
+ /* Read the key */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ if (strcasecmp(buf, "HostCharset") == 0)
+ key = KEY_HOST;
+ if (strcasecmp(buf, "BaseCharset") == 0)
+ key = KEY_BASE;
+ if (strcasecmp(buf, "RecodeTable") == 0)
+ key = KEY_TABLE;
+ switch (key)
+ {
+ case KEY_HOST:
+ /* Read the host */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ if (InRange(buf, host))
+ {
+ /* Read the charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ strcpy(HostCharset, buf);
+ }
+ }
+ }
+ break;
+ case KEY_BASE:
+ /* Read the base charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ strcpy(BaseCharset, buf);
+ }
+ break;
+ case KEY_TABLE:
+ /* Read the original charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ strcpy(OrigCharset, buf);
+ /* Read the destination charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ strcpy(DestCharset, buf);
+ /* Read the table filename */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ ChArray[ChIndex] = (struct CharsetItem *) malloc(sizeof(struct CharsetItem));
+ strcpy(ChArray[ChIndex]->Orig, OrigCharset);
+ strcpy(ChArray[ChIndex]->Dest, DestCharset);
+ strcpy(ChArray[ChIndex]->Table, buf);
+ ChIndex++;
+ }
+ }
+ }
+ break;
+ }
+ read_through_eol(file);
+ }
+ }
+ }
+ }
+ fclose(file);
+ free(map_file);
+
+ for (i = 0; i < ChIndex; i++)
+ {
+ if (!strcasecmp(BaseCharset, ChArray[i]->Orig) &&
+ !strcasecmp(HostCharset, ChArray[i]->Dest))
+ {
+ strncpy(TableName, ChArray[i]->Table, 79);
+ }
+ free((struct CharsetItem *) ChArray[i]);
+ }
}
+
#endif
extern int
hba_getauthmethod(SockAddr *raddr, char *database, char *auth_arg,
- UserAuth *auth_method)
+ UserAuth *auth_method)
{
/*---------------------------------------------------------------------------
Determine what authentication method should be used when accessing database