[PATCH cifs-utils 1/2] smbinfo: add filealternatenameinfo subcommand
ChenXiaoSong
chenxiaosong at chenxiaosong.com
Tue Sep 15 06:34:28 UTC 2026
From: ChenXiaoSong <chenxiaosong at kylinos.cn>
Example:
1. Mount on Windows 11 Server
2. touch /mnt/dir/long-file-name
3. ./smbinfo filealternatenameinfo /mnt/long-file-name
Alternate Name: LONG-F~1
Signed-off-by: ChenXiaoSong <chenxiaosong at kylinos.cn>
---
bash-completion/smbinfo | 6 ++++--
smbinfo | 27 +++++++++++++++++++++++++++
smbinfo.rst | 2 ++
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/bash-completion/smbinfo b/bash-completion/smbinfo
index 3f1f9f6..54e2ff5 100644
--- a/bash-completion/smbinfo
+++ b/bash-completion/smbinfo
@@ -8,6 +8,7 @@ smb_info()
OPTS="fileaccessinfo
filealigninfo
fileallinfo
+ filealternatenameinfo
filebasicinfo
fileeainfo
filefsfullsizeinfo
@@ -30,8 +31,9 @@ smb_info()
'-v'|'-h')
return 0
;;
- 'fileaccessinfo'|'filealigninfo'|'fileallinfo'|'filebasicinfo'|'fileeainfo'|\
- 'filefsfullsizeinfo'|'fileinternalinfo'|'filemodeinfo'|'filepositioninfo'|\
+ 'fileaccessinfo'|'filealigninfo'|'fileallinfo'|'filealternatenameinfo'|\
+ 'filebasicinfo'|'fileeainfo'|'filefsfullsizeinfo'|'fileinternalinfo'|\
+ 'filemodeinfo'|'filepositioninfo'|\
'filestandardinfo'|'filestreaminfo'|'filecompressioninfo'|'fsctl-getobjid'|\
'getcompression'|'setcompression'|'list-snapshots'|'quota'|'secdesc'|'keys'|\
'gettconinfo'|'notify')
diff --git a/smbinfo b/smbinfo
index 5c1a812..1f1f3c4 100755
--- a/smbinfo
+++ b/smbinfo
@@ -35,6 +35,7 @@ VERBOSE = False
SMB2_O_INFO_FILE = 0x01
# QUERY INFO levels
+FILE_ALTERNATE_NAME_INFORMATION = 21
FILE_COMPRESSION_INFORMATION = 28
# ioctl ctl codes
@@ -237,6 +238,10 @@ def main():
sap.add_argument("file")
sap.set_defaults(func=cmd_fileallinfo)
+ sap = subp.add_parser("filealternatenameinfo", help="Prints FileAlternateNameInfo for a cifs file")
+ sap.add_argument("file")
+ sap.set_defaults(func=cmd_filealternatenameinfo)
+
sap = subp.add_parser("filebasicinfo", help="Prints FileBasicInfo for a cifs file")
sap.add_argument("file")
sap.set_defaults(func=cmd_filebasicinfo)
@@ -435,6 +440,28 @@ def cmd_fileallinfo(args):
print_filemodeinfo(buf[88:])
print_filealigninfo(buf[92:])
+def cmd_filenameinfo(args, file_info_class, label):
+ qi = QueryInfoStruct(info_type=SMB2_O_INFO_FILE,
+ file_info_class=file_info_class,
+ input_buffer_length=INPUT_BUFFER_LENGTH)
+ try:
+ fd = os.open(args.file, os.O_RDONLY)
+ buf = qi.ioctl(fd)
+ except Exception as e:
+ print("syscall failed: %s"%e)
+ return False
+
+ print_filenameinfo(buf, label)
+
+def cmd_filealternatenameinfo(args):
+ return cmd_filenameinfo(args, FILE_ALTERNATE_NAME_INFORMATION,
+ "Alternate Name")
+
+def print_filenameinfo(buf, label):
+ name_length = struct.unpack_from('<I', buf, 0)[0]
+ name = buf[4:4 + name_length].decode("utf-16le")
+ print("%s: %s"%(label, name))
+
def win_to_datetime(smb2_time):
usec = (smb2_time / 10) % 1000000
sec = (smb2_time - 116444736000000000) // 10000000
diff --git a/smbinfo.rst b/smbinfo.rst
index 7f5bb4d..8356617 100644
--- a/smbinfo.rst
+++ b/smbinfo.rst
@@ -51,6 +51,8 @@ COMMAND
`fileallinfo`: Prints the FileAllInformation class
+`filealternatenameinfo`: Prints the FileAlternateNameInformation class
+
`filebasicinfo`: Prints the FileBasicInformation class
`fileeainfo`: Prints the FileEaInformation class
--
2.55.0
More information about the samba-technical
mailing list