Hi, Please can anybody review and commit this patch. Thanks.
Ranier Vilela --- \dll\postgresql-12.0\a\backend\libpq\auth.c Mon Sep 30 17:06:55 2019 +++ auth.c Fri Nov 08 14:27:17 2019 @@ -1815,6 +1815,7 @@ char ident_user[IDENT_USERNAME_MAX + 1]; pgsocket sock_fd = PGINVALID_SOCKET; /* for talking to Ident server */ int rc; /* Return code from a locally called function */ + int ident_query_len; bool ident_return; char remote_addr_s[NI_MAXHOST]; char remote_port[NI_MAXSERV]; @@ -1913,7 +1914,7 @@ } /* The query we send to the Ident server */ - snprintf(ident_query, sizeof(ident_query), "%s,%s\r\n", + ident_query_len = snprintf(ident_query, sizeof(ident_query), "%s,%s\r\n", remote_port, local_port); /* loop in case send is interrupted */ @@ -1921,7 +1922,7 @@ { CHECK_FOR_INTERRUPTS(); - rc = send(sock_fd, ident_query, strlen(ident_query), 0); + rc = send(sock_fd, ident_query, ident_query_len, 0); } while (rc < 0 && errno == EINTR); if (rc < 0) @@ -3053,6 +3054,8 @@ char *receive_buffer = (char *) &radius_recv_pack; int32 service = pg_hton32(RADIUS_AUTHENTICATE_ONLY); uint8 *cryptvector; + int secretlen; + int passwdlen; int encryptedpasswordlen; uint8 encryptedpassword[RADIUS_MAX_PASSWORD_LENGTH]; uint8 *md5trailer; @@ -3125,10 +3128,12 @@ memcpy(cryptvector, secret, strlen(secret)); /* for the first iteration, we use the Request Authenticator vector */ + secretlen = strlen(secret); + passwdlen = strlen(passwd); md5trailer = packet->vector; for (i = 0; i < encryptedpasswordlen; i += RADIUS_VECTOR_LENGTH) { - memcpy(cryptvector + strlen(secret), md5trailer, RADIUS_VECTOR_LENGTH); + memcpy(cryptvector + secretlen, md5trailer, RADIUS_VECTOR_LENGTH); /* * .. and for subsequent iterations the result of the previous XOR @@ -3136,7 +3141,7 @@ */ md5trailer = encryptedpassword + i; - if (!pg_md5_binary(cryptvector, strlen(secret) + RADIUS_VECTOR_LENGTH, encryptedpassword + i)) + if (!pg_md5_binary(cryptvector, secretlen + RADIUS_VECTOR_LENGTH, encryptedpassword + i)) { ereport(LOG, (errmsg("could not perform MD5 encryption of password"))); @@ -3147,7 +3152,7 @@ for (j = i; j < i + RADIUS_VECTOR_LENGTH; j++) { - if (j < strlen(passwd)) + if (j < passwdlen) encryptedpassword[j] = passwd[j] ^ encryptedpassword[j]; else encryptedpassword[j] = '\0' ^ encryptedpassword[j]; @@ -3329,7 +3334,7 @@ * Verify the response authenticator, which is calculated as * MD5(Code+ID+Length+RequestAuthenticator+Attributes+Secret) */ - cryptvector = palloc(packetlength + strlen(secret)); + cryptvector = palloc(packetlength + secretlen); memcpy(cryptvector, receivepacket, 4); /* code+id+length */ memcpy(cryptvector + 4, packet->vector, RADIUS_VECTOR_LENGTH); /* request @@ -3338,10 +3343,10 @@ if (packetlength > RADIUS_HEADER_LENGTH) /* there may be no * attributes at all */ memcpy(cryptvector + RADIUS_HEADER_LENGTH, receive_buffer + RADIUS_HEADER_LENGTH, packetlength - RADIUS_HEADER_LENGTH); - memcpy(cryptvector + packetlength, secret, strlen(secret)); + memcpy(cryptvector + packetlength, secret, secretlen); if (!pg_md5_binary(cryptvector, - packetlength + strlen(secret), + packetlength + secretlen, encryptedpassword)) { ereport(LOG,
auth.c.patch
Description: auth.c.patch