summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/mount/nfs4mount.c18
-rw-r--r--utils/mount/nfsmount.c2
2 files changed, 16 insertions, 4 deletions
diff --git a/utils/mount/nfs4mount.c b/utils/mount/nfs4mount.c
index b59c27c..717ad56 100644
--- a/utils/mount/nfs4mount.c
+++ b/utils/mount/nfs4mount.c
@@ -189,9 +189,10 @@ int nfs4mount(const char *spec, const char *node, int *flags,
static struct nfs4_mount_data data;
static char hostdir[1024];
static char ip_addr[16] = "127.0.0.1";
- static struct sockaddr_in server_addr;
+ static struct sockaddr_in server_addr, client_addr;
static int pseudoflavour[MAX_USER_FLAVOUR];
int num_flavour = 0;
+ int ip_addr_in_opts = 0;
char *hostname, *dirname, *old_opts;
char new_opts[1024];
@@ -302,6 +303,7 @@ int nfs4mount(const char *spec, const char *node, int *flags,
opteq+1);
strncpy(ip_addr,opteq+1, sizeof(ip_addr));
ip_addr[sizeof(ip_addr)-1] = '\0';
+ ip_addr_in_opts = 1;
} else if (!strcmp(opt, "sec")) {
num_flavour = parse_sec(opteq+1, pseudoflavour);
if (!num_flavour)
@@ -412,9 +414,19 @@ int nfs4mount(const char *spec, const char *node, int *flags,
NFS_PROGRAM, 4, data.proto == IPPROTO_UDP ? "udp" : "tcp",
ntohs(server_addr.sin_port));
}
- clnt_ping(&server_addr, NFS_PROGRAM, 4, data.proto);
- if (rpc_createerr.cf_stat == RPC_SUCCESS)
+ client_addr.sin_family = 0;
+ client_addr.sin_addr.s_addr = 0;
+ clnt_ping(&server_addr, NFS_PROGRAM, 4, data.proto, &client_addr);
+ if (rpc_createerr.cf_stat == RPC_SUCCESS) {
+ if (!ip_addr_in_opts &&
+ client_addr.sin_family != 0 &&
+ client_addr.sin_addr.s_addr != 0) {
+ snprintf(ip_addr, sizeof(ip_addr), "%s",
+ inet_ntoa(client_addr.sin_addr));
+ data.client_addr.len = strlen(ip_addr);
+ }
break;
+ }
switch(rpc_createerr.cf_stat){
case RPC_TIMEDOUT:
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
index 1266660..2b1eb8c 100644
--- a/utils/mount/nfsmount.c
+++ b/utils/mount/nfsmount.c
@@ -376,7 +376,7 @@ probe_port(clnt_addr_t *server,
inet_ntoa(saddr->sin_addr), prog, *p_vers,
*p_prot == IPPROTO_UDP ? "udp" : "tcp", p_port);
}
- if (clnt_ping(saddr, prog, *p_vers, *p_prot))
+ if (clnt_ping(saddr, prog, *p_vers, *p_prot, NULL))
goto out_ok;
if (rpc_createerr.cf_stat == RPC_TIMEDOUT)
goto out_bad;