Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit44ab596

Browse files
committed
Allow 'password' encryption even when pg_shadow has MD5 passwords, per
report from Terry Yapt and Hiroshi.Backpatch to 7.3.
1 parent1fd0c59 commit44ab596

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

‎src/backend/libpq/crypt.c

Lines changed: 22 additions & 6 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.49 2002/09/04 20:31:19 momjian Exp $
12+
* $Header: /cvsroot/pgsql/src/backend/libpq/crypt.c,v 1.50 2002/12/05 18:39:43 momjian Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -29,14 +29,15 @@
2929

3030

3131
int
32-
md5_crypt_verify(constPort*port,constchar*user,constchar*pgpass)
32+
md5_crypt_verify(constPort*port,constchar*user,char*pgpass)
3333
{
3434
char*passwd=NULL,
3535
*valuntil=NULL,
3636
*crypt_pwd;
3737
intretval=STATUS_ERROR;
3838
List**line;
3939
List*token;
40+
char*crypt_pgpass=pgpass;
4041

4142
if ((line=get_user_line(user))==NULL)
4243
returnSTATUS_ERROR;
@@ -54,11 +55,11 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
5455
if (passwd==NULL||*passwd=='\0')
5556
returnSTATUS_ERROR;
5657

57-
/*If they encrypt their password, force MD5 */
58-
if (isMD5(passwd)&&port->auth_method!=uaMD5)
58+
/*We can't do crypt with pg_shadow MD5 passwords */
59+
if (isMD5(passwd)&&port->auth_method==uaCrypt)
5960
{
6061
elog(LOG,"Password is stored MD5 encrypted. "
61-
"'password' and 'crypt' authmethods cannot be used.");
62+
"'crypt' authmethod cannot be used.");
6263
returnSTATUS_ERROR;
6364
}
6465

@@ -72,6 +73,7 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
7273
crypt_pwd=palloc(MD5_PASSWD_LEN+1);
7374
if (isMD5(passwd))
7475
{
76+
/* pg_shadow already encrypted, only do salt */
7577
if (!EncryptMD5(passwd+strlen("md5"),
7678
(char*)port->md5Salt,
7779
sizeof(port->md5Salt),crypt_pwd))
@@ -82,6 +84,7 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
8284
}
8385
else
8486
{
87+
/* pg_shadow plain, double-encrypt */
8588
char*crypt_pwd2=palloc(MD5_PASSWD_LEN+1);
8689

8790
if (!EncryptMD5(passwd,port->user,strlen(port->user),
@@ -110,11 +113,22 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
110113
break;
111114
}
112115
default:
116+
if (isMD5(passwd))
117+
{
118+
/* Encrypt user-supplied password to match MD5 in pg_shadow */
119+
crypt_pgpass=palloc(MD5_PASSWD_LEN+1);
120+
if (!EncryptMD5(pgpass,port->user,strlen(port->user),
121+
crypt_pgpass))
122+
{
123+
pfree(crypt_pgpass);
124+
returnSTATUS_ERROR;
125+
}
126+
}
113127
crypt_pwd=passwd;
114128
break;
115129
}
116130

117-
if (strcmp(pgpass,crypt_pwd)==0)
131+
if (strcmp(crypt_pgpass,crypt_pwd)==0)
118132
{
119133
/*
120134
* Password OK, now check to be sure we are not past valuntil
@@ -136,6 +150,8 @@ md5_crypt_verify(const Port *port, const char *user, const char *pgpass)
136150

137151
if (port->auth_method==uaMD5)
138152
pfree(crypt_pwd);
153+
if (crypt_pgpass!=pgpass)
154+
pfree(crypt_pgpass);
139155

140156
returnretval;
141157
}

‎src/include/libpq/crypt.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: crypt.h,v 1.22 2002/09/04 20:31:42 momjian Exp $
9+
* $Id: crypt.h,v 1.23 2002/12/05 18:39:43 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -23,7 +23,7 @@
2323

2424

2525
externintmd5_crypt_verify(constPort*port,constchar*user,
26-
constchar*pgpass);
26+
char*pgpass);
2727
externboolmd5_hash(constvoid*buff,size_tlen,char*hexsum);
2828
externboolCheckMD5Pwd(char*passwd,char*storedpwd,char*seed);
2929

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp