diff -u /Users/vincent/Downloads/curl-7.18.0/lib/ssh.c /Users/vincent/Downloads/curl-7.18.0+sshstat/lib/ssh.c
--- /Users/vincent/Downloads/curl-7.18.0/lib/ssh.c	2008-01-23 23:20:22.000000000 +0100
+++ /Users/vincent/Downloads/curl-7.18.0+sshstat/lib/ssh.c	2008-03-20 15:47:07.000000000 +0100
@@ -873,7 +873,8 @@
        */
       if(curl_strnequal(sshc->quote_item->data, "chgrp ", 6) ||
          curl_strnequal(sshc->quote_item->data, "chmod ", 6) ||
-         curl_strnequal(sshc->quote_item->data, "chown ", 6) ) {
+         curl_strnequal(sshc->quote_item->data, "chown ", 6) ||
+		 curl_strnequal(sshc->quote_item->data, "touch ", 6)) {
         /* attribute change */
 
         /* sshc->quote_path1 contains the mode to set */
@@ -883,7 +884,7 @@
           if(err == CURLE_OUT_OF_MEMORY)
             failf(data, "Out of memory");
           else
-            failf(data, "Syntax error in chgrp/chmod/chown: "
+            failf(data, "Syntax error in chgrp/chmod/chown/touch: "
                   "Bad second parameter");
           Curl_safefree(sshc->quote_path1);
           sshc->quote_path1 = NULL;
@@ -1052,6 +1053,20 @@
         break;
       }
     }
+	else if(curl_strnequal(sshc->quote_item->data, "touch", 5)) {
+		sshc->quote_attrs.mtime = curl_getdate(sshc->quote_path1, NULL);
+		sshc->quote_attrs.atime = sshc->quote_attrs.mtime;
+		if(sshc->quote_attrs.mtime == 0) {
+			Curl_safefree(sshc->quote_path1);
+			sshc->quote_path1 = NULL;
+			Curl_safefree(sshc->quote_path2);
+			sshc->quote_path2 = NULL;
+			failf(data, "Syntax error: touch time not a time");
+			state(conn, SSH_SFTP_CLOSE);
+			sshc->actualcode = CURLE_QUOTE_ERROR;
+			break;
+		}
+    }
 
     /* Now send the completed structure... */
     state(conn, SSH_SFTP_QUOTE_SETSTAT);

