From owner-FreeBSD-net-jp@jp.freebsd.org  Sun Mar 19 15:25:53 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id PAA82798;
	Sun, 19 Mar 2000 15:25:53 +0900 (JST)
	(envelope-from owner-FreeBSD-net-jp@jp.FreeBSD.org)
Received: from edge.sky.yamashina.kyoto.jp (edge.sky.yamashina.kyoto.jp [210.235.106.86])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id PAA82793
	for <FreeBSD-net-jp@jp.freebsd.org>; Sun, 19 Mar 2000 15:25:52 +0900 (JST)
	(envelope-from taca@sky.yamashina.kyoto.jp)
Received: from localhost
	by edge.sky.yamashina.kyoto.jp (8.9.3/3.7W-1.11) with ESMTP
	id PAA12979
	for <FreeBSD-net-jp@jp.freebsd.org>; Sun, 19 Mar 2000 15:25:51 +0900 (JST)
	(envelope-from taca)
Message-Id: <200003190625.PAA12979@edge.sky.yamashina.kyoto.jp>
To: FreeBSD-net-jp@jp.freebsd.org
In-Reply-To: <20000319.14550940kattyo@abk.nu>
References: <20000319.03171032kattyo@abk.nu>
	<200003190232.LAA05037@edge.sky.yamashina.kyoto.jp>
	<20000319.14550940kattyo@abk.nu>
X-Mailer: Mew version 1.94.2pre11 on Emacs 20.5 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date: Sun, 19 Mar 2000 15:25:51 +0900
From: Takahiro Kambe <taca@sky.yamashina.kyoto.jp>
X-Dispatcher: imput version 20000221(IM139)
Reply-To: FreeBSD-net-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-net-jp 2367
Subject: [FreeBSD-net-jp 2367] Re: FTP data retrieve failure in
 passivemode
Errors-To: owner-FreeBSD-net-jp@jp.freebsd.org
Sender: owner-FreeBSD-net-jp@jp.freebsd.org
X-Originator: taca@sky.yamashina.kyoto.jp

In message <20000319.14550940kattyo@abk.nu>
	on Sun, 19 Mar 2000 14:55:09 +0900,
	Kattyo <kattyo@abk.nu> wrote:
> $B;n$7$F$_$?$H$3$m!"(BSTOR, STOU, APPE $B$G$bF1MM$NLdBj$,$*$-$^$9!#(B
> 
> >Index: ftpd.c
> 
> $B$3$l$r;29M$K<!$N$h$&$J%Q%C%A$r$7$^$7$?!#(B
> $B$?$@$7!"3JG<7O%3%^%s%I$G$O(B LISTEN $B$,A}$($^$;$s$,;D$C$?$^$^$G$9!#(B
$B$3$NLdBj$O!"$3$l$G$I$&$G$7$g$&!#(B

> # $B$I$&$b(B ftpd $B$N%=!<%9$O$"$^$je:No$8$c$J$$$G$9$M!D(B
$B%W%m%H%3%k<+BN!"7h$7$FC1=c$G$O$J$$$G$9$+$i(B...

--
$B?@8M(B $BN4Gn(B($B$+$s$Y(B $B$?$+$R$m(B) at home


Index: ftpd.c
===================================================================
RCS file: /usr/local/libdata/cvs/netbsd/libexec/ftpd/ftpd.c,v
retrieving revision 1.1.1.16
diff -u -r1.1.1.16 ftpd.c
--- ftpd.c	2000/03/05 16:17:02	1.1.1.16
+++ ftpd.c	2000/03/19 06:21:21
@@ -1087,7 +1087,6 @@
 	timersub(&finish, &start, &td);
 	tdp = &td;
 	data = -1;
-	pdata = -1;
 done:
 	if (log)
 		logcmd("get", byte_count, name, NULL, tdp, NULL);
@@ -1124,6 +1123,10 @@
 		reply(226, "Transfer complete.");
 	}
  cleanupretrieve:
+	if (pdata >= 0) {
+		(void) close(pdata);
+	}
+	pdata = -1;
 	if (stderrfd != -1)
 		(void)close(stderrfd);
 	if (isconversion)
@@ -1145,7 +1148,7 @@
 	if (unique && stat(name, &st) == 0 &&
 	    (name = gunique(name)) == NULL) {
 		logcmd(desc, -1, name, NULL, NULL, "cannot create unique file");
-		return;
+		goto cleanup;
 	}
 
 	if (restart_point)
@@ -1156,7 +1159,7 @@
 	if (fout == NULL) {
 		perror_reply(553, name);
 		logcmd(desc, -1, name, NULL, NULL, strerror(errno));
-		return;
+		goto cleanup;
 	}
 	byte_count = -1;
 	if (restart_point) {
@@ -1202,10 +1205,14 @@
 	timersub(&finish, &start, &td);
 	tdp = &td;
 	data = -1;
-	pdata = -1;
 done:
 	logcmd(desc, byte_count, name, NULL, tdp, NULL);
 	(*closefunc)(fout);
+cleanup:
+	if (pdata >= 0) {
+		(void) close(pdata);
+	}
+	pdata = -1;
 }
 
 static FILE *
@@ -2588,6 +2595,10 @@
 	transflag = 0;
 	if (dout != NULL)
 		(void) fclose(dout);
+	else {
+		if (pdata >= 0)
+			(void) close(pdata);
+	}
 	data = -1;
 	pdata = -1;
 out:

