Skip to content

Commit cb7fb3c

Browse files
committed
First phase of FE/BE protocol modifications: new StartupPacket layout
with variable-width fields. No more truncation of long user names. Also, libpq can now send its environment-variable-driven SET commands as part of the startup packet, saving round trips to server.
1 parent 76fd678 commit cb7fb3c

File tree

16 files changed

+436
-300
lines changed

16 files changed

+436
-300
lines changed

doc/src/sgml/libpq.sgml

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.117 2003/03/25 16:15:37 petere Exp $
2+
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.118 2003/04/17 22:26:00 tgl Exp $
33
-->
44

55
<chapter id="libpq">
@@ -193,7 +193,7 @@ PGconn *PQconnectdb(const char *conninfo);
193193
<term><literal>tty</literal></term>
194194
<listitem>
195195
<para>
196-
A file or <acronym>TTY</acronym> for optional debug output from the server.
196+
Ignored (formerly, this specified where to send server debug output).
197197
</para>
198198
</listitem>
199199
</varlistentry>
@@ -669,6 +669,9 @@ char *PQport(const PGconn *conn);
669669
<listitem>
670670
<para>
671671
Returns the debug <acronym>TTY</acronym> of the connection.
672+
(This is obsolete, since the server no longer pays attention
673+
to the <acronym>TTY</acronym> setting, but the function remains
674+
for backwards compatibility.)
672675
<synopsis>
673676
char *PQtty(const PGconn *conn);
674677
</synopsis>
@@ -2365,12 +2368,6 @@ the <productname>PostgreSQL</productname> server.
23652368
</listitem>
23662369
<listitem>
23672370
<para>
2368-
<envar>PGTTY</envar> sets the file or <acronym>TTY</> on which debugging
2369-
messages from the server are displayed.
2370-
</para>
2371-
</listitem>
2372-
<listitem>
2373-
<para>
23742371
<envar>PGREQUIRESSL</envar> sets whether or not the connection must be
23752372
made over <acronym>SSL</acronym>. If set to
23762373
<quote>1</quote>, <application>libpq</>
@@ -2678,7 +2675,7 @@ main()
26782675
pgport = NULL; /* port of the backend server */
26792676
pgoptions = NULL; /* special options to start up the backend
26802677
* server */
2681-
pgtty = NULL; /* debugging tty for the backend server */
2678+
pgtty = NULL; /* unused */
26822679
dbName = "template1";
26832680

26842681
/* make a connection to the database */
@@ -2826,7 +2823,7 @@ main()
28262823
pgport = NULL; /* port of the backend server */
28272824
pgoptions = NULL; /* special options to start up the backend
28282825
* server */
2829-
pgtty = NULL; /* debugging tty for the backend server */
2826+
pgtty = NULL; /* unused */
28302827
dbName = getenv("USER"); /* change this to the name of your test
28312828
* database */
28322829

@@ -2950,7 +2947,7 @@ main()
29502947
pgport = NULL; /* port of the backend server */
29512948
pgoptions = NULL; /* special options to start up the backend
29522949
* server */
2953-
pgtty = NULL; /* debugging tty for the backend server */
2950+
pgtty = NULL; /* unused */
29542951

29552952
dbName = getenv("USER"); /* change this to the name of your test
29562953
* database */

src/backend/libpq/auth.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.97 2003/02/14 14:05:00 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.98 2003/04/17 22:26:01 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -29,7 +29,6 @@
2929
#include "libpq/crypt.h"
3030
#include "libpq/hba.h"
3131
#include "libpq/libpq.h"
32-
#include "libpq/password.h"
3332
#include "libpq/pqcomm.h"
3433
#include "libpq/pqformat.h"
3534
#include "miscadmin.h"
@@ -378,7 +377,7 @@ auth_failed(Port *port, int status)
378377
}
379378

380379
elog(FATAL, "%s authentication failed for user \"%s\"",
381-
authmethod, port->user);
380+
authmethod, port->user_name);
382381
/* doesn't return */
383382
}
384383

@@ -427,7 +426,7 @@ ClientAuthentication(Port *port)
427426

428427
elog(FATAL,
429428
"No pg_hba.conf entry for host %s, user %s, database %s",
430-
hostinfo, port->user, port->database);
429+
hostinfo, port->user_name, port->database_name);
431430
break;
432431
}
433432

@@ -638,10 +637,12 @@ CheckPAMAuth(Port *port, char *user, char *password)
638637
* not allocated */
639638

640639
/* Optionally, one can set the service name in pg_hba.conf */
641-
if (port->auth_arg[0] == '\0')
642-
retval = pam_start(PGSQL_PAM_SERVICE, "pgsql@", &pam_passw_conv, &pamh);
640+
if (port->auth_arg && port->auth_arg[0] != '\0')
641+
retval = pam_start(port->auth_arg, "pgsql@",
642+
&pam_passw_conv, &pamh);
643643
else
644-
retval = pam_start(port->auth_arg, "pgsql@", &pam_passw_conv, &pamh);
644+
retval = pam_start(PGSQL_PAM_SERVICE, "pgsql@",
645+
&pam_passw_conv, &pamh);
645646

646647
if (retval != PAM_SUCCESS)
647648
{
@@ -741,7 +742,7 @@ recv_and_check_password_packet(Port *port)
741742
/* Do not echo password to logs, for security. */
742743
elog(DEBUG5, "received password packet");
743744

744-
result = md5_crypt_verify(port, port->user, buf.data);
745+
result = md5_crypt_verify(port, port->user_name, buf.data);
745746

746747
pfree(buf.data);
747748
return result;

src/backend/libpq/crypt.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
1010
* Portions Copyright (c) 1994, Regents of the University of California
1111
*
12-
* $Header: /cvsroot/pgsql/src/backend/libpq/crypt.c,v 1.51 2002/12/05 18:52:42 momjian Exp $
12+
* $Header: /cvsroot/pgsql/src/backend/libpq/crypt.c,v 1.52 2003/04/17 22:26:01 tgl Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -87,15 +87,19 @@ md5_crypt_verify(const Port *port, const char *user, char *client_pass)
8787
/* pg_shadow plain, double-encrypt */
8888
char *crypt_pwd2 = palloc(MD5_PASSWD_LEN + 1);
8989

90-
if (!EncryptMD5(shadow_pass, port->user, strlen(port->user),
90+
if (!EncryptMD5(shadow_pass,
91+
port->user_name,
92+
strlen(port->user_name),
9193
crypt_pwd2))
9294
{
9395
pfree(crypt_pwd);
9496
pfree(crypt_pwd2);
9597
return STATUS_ERROR;
9698
}
97-
if (!EncryptMD5(crypt_pwd2 + strlen("md5"), port->md5Salt,
98-
sizeof(port->md5Salt), crypt_pwd))
99+
if (!EncryptMD5(crypt_pwd2 + strlen("md5"),
100+
port->md5Salt,
101+
sizeof(port->md5Salt),
102+
crypt_pwd))
99103
{
100104
pfree(crypt_pwd);
101105
pfree(crypt_pwd2);
@@ -117,7 +121,9 @@ md5_crypt_verify(const Port *port, const char *user, char *client_pass)
117121
{
118122
/* Encrypt user-supplied password to match MD5 in pg_shadow */
119123
crypt_client_pass = palloc(MD5_PASSWD_LEN + 1);
120-
if (!EncryptMD5(client_pass, port->user, strlen(port->user),
124+
if (!EncryptMD5(client_pass,
125+
port->user_name,
126+
strlen(port->user_name),
121127
crypt_client_pass))
122128
{
123129
pfree(crypt_client_pass);

src/backend/libpq/hba.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.98 2003/04/13 04:07:17 tgl Exp $
13+
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.99 2003/04/17 22:26:01 tgl Exp $
1414
*
1515
*-------------------------------------------------------------------------
1616
*/
@@ -471,15 +471,17 @@ check_db(char *dbname, char *user, char *param_str)
471471

472472
/*
473473
* Scan the rest of a host record (after the mask field)
474-
* and return the interpretation of it as *userauth_p, auth_arg, and
474+
* and return the interpretation of it as *userauth_p, *auth_arg_p, and
475475
* *error_p. line points to the next token of the line.
476476
*/
477477
static void
478-
parse_hba_auth(List *line, UserAuth *userauth_p, char *auth_arg,
478+
parse_hba_auth(List *line, UserAuth *userauth_p, char **auth_arg_p,
479479
bool *error_p)
480480
{
481481
char *token;
482482

483+
*auth_arg_p = NULL;
484+
483485
if (!line)
484486
*error_p = true;
485487
else
@@ -514,11 +516,10 @@ parse_hba_auth(List *line, UserAuth *userauth_p, char *auth_arg,
514516
if (!*error_p)
515517
{
516518
/* Get the authentication argument token, if any */
517-
if (!line)
518-
auth_arg[0] = '\0';
519-
else
519+
if (line)
520520
{
521-
StrNCpy(auth_arg, lfirst(line), MAX_AUTH_ARG - 1);
521+
token = lfirst(line);
522+
*auth_arg_p = pstrdup(token);
522523
/* If there is more on the line, it is an error */
523524
if (lnext(line))
524525
*error_p = true;
@@ -570,7 +571,7 @@ parse_hba(List *line, hbaPort *port, bool *found_p, bool *error_p)
570571
goto hba_syntax;
571572

572573
/* Read the rest of the line. */
573-
parse_hba_auth(line, &port->auth_method, port->auth_arg, error_p);
574+
parse_hba_auth(line, &port->auth_method, &port->auth_arg, error_p);
574575
if (*error_p)
575576
goto hba_syntax;
576577

@@ -642,7 +643,7 @@ parse_hba(List *line, hbaPort *port, bool *found_p, bool *error_p)
642643
line = lnext(line);
643644
if (!line)
644645
goto hba_syntax;
645-
parse_hba_auth(line, &port->auth_method, port->auth_arg, error_p);
646+
parse_hba_auth(line, &port->auth_method, &port->auth_arg, error_p);
646647
if (*error_p)
647648
goto hba_syntax;
648649

@@ -654,9 +655,9 @@ parse_hba(List *line, hbaPort *port, bool *found_p, bool *error_p)
654655
else
655656
goto hba_syntax;
656657

657-
if (!check_db(port->database, port->user, db))
658+
if (!check_db(port->database_name, port->user_name, db))
658659
return;
659-
if (!check_user(port->user, user))
660+
if (!check_user(port->user_name, user))
660661
return;
661662

662663
/* Success */
@@ -946,7 +947,7 @@ check_ident_usermap(const char *usermap_name,
946947
bool found_entry = false,
947948
error = false;
948949

949-
if (usermap_name[0] == '\0')
950+
if (usermap_name == NULL || usermap_name[0] == '\0')
950951
{
951952
elog(LOG, "check_ident_usermap: hba configuration file does not "
952953
"have the usermap field filled in in the entry that pertains "
@@ -1387,7 +1388,7 @@ authident(hbaPort *port)
13871388
return STATUS_ERROR;
13881389
}
13891390

1390-
if (check_ident_usermap(port->auth_arg, port->user, ident_user))
1391+
if (check_ident_usermap(port->auth_arg, port->user_name, ident_user))
13911392
return STATUS_OK;
13921393
else
13931394
return STATUS_ERROR;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy