brian 98/05/18 14:49:28
Modified: src CHANGES rfc1413.c Log: See Message-ID: <[EMAIL PROTECTED]> Revision Changes Path 1.309 +2 -0 apache-1.2/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.2/src/CHANGES,v retrieving revision 1.308 retrieving revision 1.309 diff -u -r1.308 -r1.309 --- CHANGES 1998/05/11 19:56:04 1.308 +++ CHANGES 1998/05/18 21:49:26 1.309 @@ -1,5 +1,7 @@ Changes with Apache 1.2.7 + *) Improve RFC1413 support. [Bob Beck <[EMAIL PROTECTED]>] + *) Support for NCR MP/RAS 3.0 [John Withers <[EMAIL PROTECTED]>] *) Correct a protocol issue - always send the "Accept-ranges: bytes" 1.13 +31 -17 apache-1.2/src/rfc1413.c Index: rfc1413.c =================================================================== RCS file: /export/home/cvs/apache-1.2/src/rfc1413.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- rfc1413.c 1998/04/13 11:45:48 1.12 +++ rfc1413.c 1998/05/18 21:49:27 1.13 @@ -108,7 +108,8 @@ static int get_rfc1413(int sock, const struct sockaddr_in *our_sin, - const struct sockaddr_in *rmt_sin, char user[256], server_rec *srv) + const struct sockaddr_in *rmt_sin, char user[RFC1413_USERLEN+1], + server_rec *srv) { struct sockaddr_in rmt_query_sin, our_query_sin; unsigned int rmt_port, our_port; @@ -148,29 +149,42 @@ /* send the data */ ap_snprintf(buffer, sizeof(buffer), "%u,%u\r\n", ntohs(rmt_sin->sin_port), ntohs(our_sin->sin_port)); - do i = write(sock, buffer, strlen(buffer)); - while (i == -1 && errno == EINTR); - if (i == -1) - { - log_unixerr("write", NULL, "rfc1413: error sending request", srv); - return -1; + + /* send query to server. Handle short write. */ + i = 0; + while(i < strlen(buffer)) { + int j; + j = write(sock, buffer+i, (strlen(buffer+i))); + if (j < 0 && errno != EINTR) { + log_unixerr("write", NULL, "rfc1413: error sending request", srv); + return -1; + } + else if (j > 0) { + i+=j; + } } /* - * Read response from server. We assume that all the data - * comes in a single packet. + * Read response from server. - the response should be newline + * terminated according to rfc - make sure it doesn't stomp it's + * way out of the buffer. */ - do i = read(sock, buffer, RFC1413_MAXDATA); - while (i == -1 && errno == EINTR); - if (i == -1) - { - log_unixerr("read", NULL, "rfc1413: error reading response", srv); - return -1; + i = 0; + memset(buffer, 0, sizeof(buffer)); + while((cp = strchr(buffer, '\n')) == NULL && i < sizeof(buffer) - 1) { + int j; + j = read(sock, buffer+i, (sizeof(buffer) - 1) - i); + if (j < 0 && errno != EINTR) { + log_unixerr("read", NULL, "rfc1413: error reading response", srv); + return -1; + } + else if (j > 0) { + i+=j; + } } - buffer[i] = '\0'; -/* RFC1413_USERLEN = 512 */ + /* RFC1413_USERLEN = 512 */ if (sscanf(buffer, "%u , %u : USERID :%*[^:]:%512s", &rmt_port, &our_port, user) != 3 || ntohs(rmt_sin->sin_port) != rmt_port || ntohs(our_sin->sin_port) != our_port) return -1;