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;