diff options
| author | Paulo Alcantara <pc@manguebit.com> | 2025-01-07 12:22:50 -0300 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2025-01-19 19:34:00 -0600 |
| commit | 4b1b4c8be9dee9aa1a751cfa3954b2fcfdfe9c3d (patch) | |
| tree | 0c230c8c7abcf70e6aac040138fa4d54e0de67a6 /fs/smb/client/misc.c | |
| parent | 489d1523105e14e7a2c6e68205e05397e3b714fb (diff) | |
| download | linux-next-4b1b4c8be9dee9aa1a751cfa3954b2fcfdfe9c3d.tar.gz linux-next-4b1b4c8be9dee9aa1a751cfa3954b2fcfdfe9c3d.zip | |
smb: client: provide dns_resolve_{unc,name} helpers
Some places pass hostnames rather than UNC paths to resolve them to ip
addresses, so provide helpers to handle both cases and then stop
converting hostnames to UNC paths by inserting path delimiters into
them. Also kill @expiry parameter as it's not used anywhere.
Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/smb/client/misc.c')
| -rw-r--r-- | fs/smb/client/misc.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/fs/smb/client/misc.c b/fs/smb/client/misc.c index 0d483cd08354..a6efd3644e6a 100644 --- a/fs/smb/client/misc.c +++ b/fs/smb/client/misc.c @@ -1172,34 +1172,25 @@ void cifs_put_tcp_super(struct super_block *sb) #ifdef CONFIG_CIFS_DFS_UPCALL int match_target_ip(struct TCP_Server_Info *server, - const char *share, size_t share_len, + const char *host, size_t hostlen, bool *result) { - int rc; - char *target; struct sockaddr_storage ss; + int rc; - *result = false; - - target = kzalloc(share_len + 3, GFP_KERNEL); - if (!target) - return -ENOMEM; - - scnprintf(target, share_len + 3, "\\\\%.*s", (int)share_len, share); - - cifs_dbg(FYI, "%s: target name: %s\n", __func__, target + 2); + cifs_dbg(FYI, "%s: hostname=%.*s\n", __func__, (int)hostlen, host); - rc = dns_resolve_server_name_to_ip(server->dns_dom, target, - (struct sockaddr *)&ss, NULL); - kfree(target); + *result = false; + rc = dns_resolve_name(server->dns_dom, host, hostlen, + (struct sockaddr *)&ss); if (rc < 0) return rc; spin_lock(&server->srv_lock); *result = cifs_match_ipaddr((struct sockaddr *)&server->dstaddr, (struct sockaddr *)&ss); spin_unlock(&server->srv_lock); - cifs_dbg(FYI, "%s: ip addresses match: %u\n", __func__, *result); + cifs_dbg(FYI, "%s: ip addresses matched: %s\n", __func__, str_yes_no(*result)); return 0; } |
