#! /bin/sh /usr/share/dpatch/dpatch-run ## 06_fix_shaper_buffer.dpatch by Daniel Kahn Gillmor ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: properly allocate copyloop buffer @DPATCH@ diff -urNad redir-2.2.1~/redir.c redir-2.2.1/redir.c --- redir-2.2.1~/redir.c 2005-10-22 23:20:05.235901424 -0400 +++ redir-2.2.1/redir.c 2005-10-22 23:22:20.198384008 -0400 @@ -260,7 +260,7 @@ #endif int *transproxy, #ifndef NO_SHAPER - unsigned int * bufsize, + unsigned int * bufsizeout, int * max_bandwidth, int * random_wait, int * wait_in_out, @@ -367,7 +367,7 @@ #ifndef NO_SHAPER case 'z': - *bufsize = (unsigned int)atol(optarg); + *bufsizeout = (unsigned int)atol(optarg); break; case 'm': @@ -594,7 +594,7 @@ unsigned long bytes_in = 0; unsigned long bytes_out = 0; unsigned int start_time, end_time; - char buf[bufsize]; + char* buf = malloc(bufsize); /* Record start time */ start_time = (unsigned int) time(NULL); @@ -637,7 +637,7 @@ } if(FD_ISSET(insock, &c_iofds)) { - if((bytes = read(insock, buf, sizeof(buf))) <= 0) + if((bytes = read(insock, buf, bufsize)) <= 0) break; #ifndef NO_FTP if (ftp & FTP_PORT) @@ -652,7 +652,7 @@ bytes_out += bytes; } if(FD_ISSET(outsock, &c_iofds)) { - if((bytes = read(outsock, buf, sizeof(buf))) <= 0) + if((bytes = read(outsock, buf, bufsize)) <= 0) break; /* if we're correcting for PASV on ftp redirections, then fix buf and bytes to have the new address, among other @@ -689,6 +689,7 @@ syslog(LOG_NOTICE, "disconnect %d secs, %ld in %ld out", (end_time - start_time), bytes_in, bytes_out); } + free(buf); return; }