Skip to content

Commit

Permalink
cifs: Set default Netbios RFC1001 server name to hostname in UNC
Browse files Browse the repository at this point in the history
Windows SMB servers (including SMB2+) which are working over RFC1001
require that Netbios server name specified in RFC1001 Session Request
packet is same as the UNC host name. Netbios server name can be already
specified manually via -o servern= option.

With this change the RFC1001 server name is set automatically by extracting
the hostname from the mount source.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
  • Loading branch information
Pali Rohár authored and Steve French committed Mar 26, 2025
1 parent 4e7f164 commit be786e5
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions fs/smb/client/fs_context.c
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,7 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
int i, opt;
bool is_smb3 = !strcmp(fc->fs_type->name, "smb3");
bool skip_parsing = false;
char *hostname;

cifs_dbg(FYI, "CIFS: parsing cifs mount option '%s'\n", param->key);

Expand Down Expand Up @@ -1443,6 +1444,16 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,
cifs_errorf(fc, "OOM when copying UNC string\n");
goto cifs_parse_mount_err;
}
hostname = extract_hostname(ctx->UNC);
if (IS_ERR(hostname)) {
cifs_errorf(fc, "Cannot extract hostname from UNC string\n");
goto cifs_parse_mount_err;
}
/* last byte, type, is 0x20 for servr type */
memset(ctx->target_rfc1001_name, 0x20, RFC1001_NAME_LEN_WITH_NULL);
for (i = 0; i < RFC1001_NAME_LEN && hostname[i] != 0; i++)
ctx->target_rfc1001_name[i] = toupper(hostname[i]);
kfree(hostname);
break;
case Opt_user:
kfree(ctx->username);
Expand Down

0 comments on commit be786e5

Please sign in to comment.