bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#55855: "Invalid file name" error with tramp-smb filename check


From: Evan MacTaggart
Subject: bug#55855: "Invalid file name" error with tramp-smb filename check
Date: Wed, 8 Jun 2022 11:55:21 -0600

So after tramping into an SMB file server, I'm trying to find-file into a directory whose name is as so: "/smb:username%DOMAIN@fsname:/my path/1234. Some Name".  The problem with this filename is that the filename contains a ". ", which throws a tramp-error. And as per the code comment is "not supported", however it seems as though, at least for the server I'm connected to, this is supported.

I'm certainly not the most well versed on the samba protocol, but perhaps look into this and see if the once invalid file names are now valid. Or perhaps describe specifically what is not supported about this filename. I'd imagine/assume this is due to a newer SMB version than what the following code was initially written for.

The following is where the check happens,
```
;; /28.1/lisp/net/tramp-smb.el.gz ;;
(defun tramp-smb-get-localname (vec)
  "Return the file name of LOCALNAME.
If VEC has no cifs capabilities, exchange \"/\" by \"\\\\\"."
  (save-match-data
    (let ((localname (tramp-file-name-unquote-localname vec)))
      (setq
       localname
       (if (string-match "^/?[^/]+\\(/.*\\)" localname)
  ;; There is a share, separated by "/".
  (if (not (tramp-smb-get-cifs-capabilities vec))
      (mapconcat
(lambda (x) (if (equal x ?/) "\\" (char-to-string x)))
(match-string 1 localname) "")
    (match-string 1 localname))
;; There is just a share.
(if (string-match "^/?\\([^/]+\\)$" localname)
    (match-string 1 localname)
  "")))

      ;; Sometimes we have discarded `substitute-in-file-name'.
      (when (string-match "\\(\\$\\$\\)\\(/\\|$\\)" localname)
(setq localname (replace-match "$" nil nil localname 1)))

      ;; A period followed by a space, or trailing periods and spaces,
      ;; are not supported.
      (when (string-match-p "\\. \\|\\.$\\| $" localname) ;; <<<< THIS CHECK HERE <<<<<
(tramp-error
vec 'file-error
"Invalid file name %s" (tramp-make-tramp-file-name vec localname)))

      localname)))
```

My work around for this was to redefine tramp-smb-get-localname with looser filename checking.

Thanks in advance, and let me know if there's anything else you need from me.

Cheers,
Evan MacTaggart

reply via email to

[Prev in Thread] Current Thread [Next in Thread]