[prev in list] [next in list] [prev in thread] [next in thread] 

List:       proftpd-committers
Subject:    [ProFTPD-committers] CVS: proftpd/contrib/mod_sftp fxp.c, 1.94, 1.95
From:       "TJ Saunders" <castaglia () users ! sourceforge ! net>
Date:       2010-04-27 23:27:13
Message-ID: E1O6uBN-0004Ee-Cy () sfp-cvsdas-2 ! v30 ! ch3 ! sourceforge ! com
[Download RAW message or body]

Update of /cvsroot/proftp/proftpd/contrib/mod_sftp
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv16219/contrib/mod_sftp

Modified Files:
	fxp.c 
Log Message:

Add trace logging, at trace level 15 and higher, of the OPEN flags as
strings.  Hopefully this can be used to figure out why WinSCP, when requesting
SFTP protocol version 5, doesn't like how mod_sftp handles an OPEN request.


Index: fxp.c
===================================================================
RCS file: /cvsroot/proftp/proftpd/contrib/mod_sftp/fxp.c,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -r1.94 -r1.95
--- fxp.c	27 Apr 2010 18:46:34 -0000	1.94
+++ fxp.c	27 Apr 2010 23:27:11 -0000	1.95
@@ -604,6 +604,51 @@
   return status_code;
 }
 
+static void fxp_trace_v3_open_flags(pool *p, uint32_t flags) {
+  char *flags_str = "";
+  int trace_level = 15;
+
+  if (pr_trace_get_level(trace_channel) < trace_level) {
+    return;
+  }
+
+  if (flags & SSH2_FXF_READ) {
+    flags_str = pstrcat(p, flags_str, "FXF_READ", NULL);
+  }
+
+  if (flags & SSH2_FXF_WRITE) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_WRITE", NULL);
+  }
+
+  if (flags & SSH2_FXF_APPEND) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_APPEND", NULL);
+  }
+
+  if (flags & SSH2_FXF_CREAT) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_CREAT", NULL);
+  }
+
+  if (flags & SSH2_FXF_TRUNC) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_TRUNC", NULL);
+  }
+
+  if (flags & SSH2_FXF_EXCL) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_EXCL", NULL);
+  }
+
+  if (flags & SSH2_FXF_TEXT) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_TEXT", NULL);
+  }
+
+  pr_trace_msg(trace_channel, trace_level, "OPEN flags = %s", flags_str);
+}
+
 /* Map the FXP_OPEN flags to POSIX flags. */
 static int fxp_get_v3_open_flags(uint32_t flags) {
   int res = 0;
@@ -651,6 +696,110 @@
   return res;
 }
 
+static void fxp_trace_v5_open_flags(pool *p, uint32_t desired_access,
+    uint32_t flags) {
+  uint32_t base_flag;
+  char *access_str = "", *flags_str = "";
+  int trace_level = 15;
+
+  if (pr_trace_get_level(trace_channel) < trace_level) {
+    return;
+  }
+
+  /* The flags value, in the case of v5 (and later) OPEN requests, has
+   * a "base" value, along with some modifying bits masked in.
+   */
+
+  base_flag = (flags &~ \
(SSH2_FXF_ACCESS_APPEND_DATA|SSH2_FXF_ACCESS_APPEND_DATA_ATOMIC|SSH2_FXF_ACCESS_TEXT_MODE));
 +
+  switch (base_flag) {
+    case SSH2_FXF_CREATE_NEW:
+      flags_str = pstrcat(p, flags_str, "FXF_CREATE_NEW", NULL);
+      break;
+
+    case SSH2_FXF_CREATE_TRUNCATE:
+      flags_str = pstrcat(p, flags_str, "FXF_CREATE_TRUNCATE", NULL);
+      break;
+
+    case SSH2_FXF_OPEN_EXISTING:
+      flags_str = pstrcat(p, flags_str, "FXF_OPEN_EXISTING", NULL);
+      break;
+
+    case SSH2_FXF_OPEN_OR_CREATE:
+      flags_str = pstrcat(p, flags_str, "FXF_OPEN_OR_CREATE", NULL);
+      break;
+
+    case SSH2_FXF_TRUNCATE_EXISTING:
+      flags_str = pstrcat(p, flags_str, "FXF_TRUNCATE_EXISTING", NULL);
+      break;
+
+    default:
+      flags_str = pstrcat(p, flags_str, "<unknown>", NULL);
+  }
+
+  if (flags & SSH2_FXF_ACCESS_APPEND_DATA) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_ACCESS_APPEND_DATA", NULL);
+  }
+
+  if (flags & SSH2_FXF_ACCESS_APPEND_DATA_ATOMIC) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_ACCESS_APPEND_DATA_ATOMIC", NULL);
+  }
+
+  if (flags & SSH2_FXF_ACCESS_TEXT_MODE) {
+    flags_str = pstrcat(p, flags_str, *flags_str ? "|" : "",
+      "FXF_ACCESS_TEXT_MODE", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_READ_DATA) {
+    access_str = pstrcat(p, access_str, "FXF_WANT_READ_DATA", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_WRITE_DATA) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_WRITE_DATA", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_APPEND_DATA) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_APPEND_DATA", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_READ_NAMED_ATTRS) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_READ_NAMED_ATTRS", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_WRITE_NAMED_ATTRS) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_WRITE_NAMED_ATTRS", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_WRITE_ATTRIBUTES) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_WRITE_ATTRS", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_READ_ACL) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_READ_ACL", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_WRITE_ACL) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_WRITE_ACL", NULL);
+  }
+
+  if (desired_access & SSH2_FXF_WANT_WRITE_OWNER) {
+    access_str = pstrcat(p, access_str, *access_str ? "|" : "",
+      "FXF_WANT_WRITE_OWNER", NULL);
+  }
+
+  pr_trace_msg(trace_channel, trace_level,
+    "OPEN flags = %s, desired access = %s", flags_str, access_str);
+}
+
 static int fxp_get_v5_open_flags(uint32_t desired_access, uint32_t flags) {
 
   /* Assume that the desired flag is read-only by default. */
@@ -5691,9 +5840,11 @@
   }
 
   if (fxp_session->client_version < 5) {
+    fxp_trace_v3_open_flags(fxp->pool, flags);
     open_flags = fxp_get_v3_open_flags(flags);
 
   } else {
+    fxp_trace_v5_open_flags(fxp->pool, desired_access, flags);
     open_flags = fxp_get_v5_open_flags(desired_access, flags);
   }
 


------------------------------------------------------------------------------
_______________________________________________
ProFTPD Committers Mailing List
proftpd-committers@proftpd.org
https://lists.sourceforge.net/lists/listinfo/proftp-committers


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic