diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-04 23:31:35 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-09-04 23:31:35 +0000 |
commit | 3f63787cbfe0f1e837c92cd8ac35fd7ab811c18b (patch) | |
tree | 8fed7ef5dcf0af783bda9301eb664883e8c8eb83 /src/backend/libpq/auth.c | |
parent | c5214b9f6cf7b0a998c96c9be9c828aec3bc18cf (diff) |
Guard against send-lots-and-lots-of-data DoS attack from unauthenticated
users, by limiting the length of string we will accept for a password.
Patch by Serguei Mokhov, some editorializing by Tom Lane.
Diffstat (limited to 'src/backend/libpq/auth.c')
-rw-r--r-- | src/backend/libpq/auth.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 7be74c58a78..d036a22f6e5 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.90 2002/09/04 20:31:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.91 2002/09/04 23:31:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -563,12 +563,11 @@ pam_passwd_conv_proc(int num_msg, const struct pam_message ** msg, struct pam_re { sendAuthRequest(pam_port_cludge, AUTH_REQ_PASSWORD); if (pq_eof() == EOF || pq_getint(&len, 4) == EOF) - { return PAM_CONV_ERR; /* client didn't want to send password */ - } initStringInfo(&buf); - pq_getstr(&buf); + if (pq_getstr_bounded(&buf, 1000) == EOF) + return PAM_CONV_ERR; /* EOF while reading password */ /* Do not echo failed password to logs, for security. */ elog(DEBUG5, "received PAM packet"); @@ -707,7 +706,7 @@ recv_and_check_password_packet(Port *port) return STATUS_EOF; /* client didn't want to send password */ initStringInfo(&buf); - if (pq_getstr(&buf) == EOF) /* receive password */ + if (pq_getstr_bounded(&buf, 1000) == EOF) /* receive password */ { pfree(buf.data); return STATUS_EOF; |