From 9996836d239601b18496caebb3d8f46b530a596c Mon Sep 17 00:00:00 2001
From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Fri, 17 Aug 2007 14:59:49 -0700
Subject: [PATCH] command-line: fix ticket #111 by requiring input to be a
 local file and sending Content-Length header

---
 src/allmydata/scripts/cli.py       |  4 ++--
 src/allmydata/scripts/tahoe_put.py | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py
index ee70055f..3487e752 100644
--- a/src/allmydata/scripts/cli.py
+++ b/src/allmydata/scripts/cli.py
@@ -45,8 +45,8 @@ class PutOptions(VDriveOptions):
         return "%s put LOCAL_FILE VDRIVE_FILE" % (os.path.basename(sys.argv[0]),)
 
     longdesc = """Put a file into the virtual drive (copying the file's
-    contents from the local filesystem). If LOCAL_FILE is omitted or '-', the
-    contents of the file will be read from stdin."""
+    contents from the local filesystem). LOCAL_FILE is required to be a
+    local file (it can't be stdin)."""
 
 class RmOptions(VDriveOptions):
     def parseArgs(self, vdrive_pathname):
diff --git a/src/allmydata/scripts/tahoe_put.py b/src/allmydata/scripts/tahoe_put.py
index 4b548004..df58229c 100644
--- a/src/allmydata/scripts/tahoe_put.py
+++ b/src/allmydata/scripts/tahoe_put.py
@@ -18,16 +18,16 @@ def put(nodeurl, vdrive, local_fname, vdrive_fname, verbosity):
     if vdrive_fname:
         url += vdrive_fname
 
-    if local_fname is None or local_fname == "-":
-        infileobj = sys.stdin
-    else:
-        infileobj = open(local_fname, "rb")
+    infileobj = open(local_fname, "rb")
+    infileobj.seek(0, 2)
+    infilelen = infileobj.tell()
+    infileobj.seek(0, 0)
 
     so = socket.socket()
     so.connect((host, port,))
 
     CHUNKSIZE=2**16
-    data = "PUT %s HTTP/1.1\r\nConnection: close\r\nHostname: %s\r\n\r\n" % (url, host,)
+    data = "PUT %s HTTP/1.1\r\nConnection: close\r\nContent-Length: %s\r\nHostname: %s\r\n\r\n" % (url, infilelen, host,)
     while data:
         try:
             sent = so.send(data)
-- 
2.45.2