struct mount_options *options; /* parsed mount options */
char **extra_opts; /* string for /etc/mtab */
+ unsigned long version; /* NFS version */
int flags, /* MS_ flags */
fake, /* actually do the mount? */
child; /* forked bg child? */
{
char address[NI_MAXHOST];
char new_option[512];
+ int len;
if (!nfs_present_sockaddr(sap, salen, address, sizeof(address)))
goto out_err;
- if (snprintf(new_option, sizeof(new_option), "%s=%s",
- keyword, address) >= sizeof(new_option))
+ len = snprintf(new_option, sizeof(new_option), "%s=%s",
+ keyword, address);
+ if (len < 0 || (size_t)len >= sizeof(new_option))
goto out_err;
if (po_append(options, new_option) != PO_SUCCEEDED)
if (!nfs_name_to_address(mi->hostname, sap, &salen))
return 0;
- if (strncmp(mi->type, "nfs4", 4) == 0) {
+ if (!nfs_nfs_version(mi->options, &mi->version))
+ return 0;
+ if (strncmp(mi->type, "nfs4", 4) == 0)
+ mi->version = 4;
+
+ if (mi->version == 4) {
if (!nfs_append_clientaddr_option(sap, salen, mi->options))
return 0;
} else {
option = po_get(options, "addr");
if (option == NULL)
return 0;
- if (!nfs_string_to_sockaddr(option, strlen(option),
- nfs_saddr, nfs_salen))
+ if (!nfs_string_to_sockaddr(option, nfs_saddr, nfs_salen))
return 0;
option = po_get(options, "mountaddr");
if (option == NULL) {
memcpy(mnt_saddr, nfs_saddr, *nfs_salen);
*mnt_salen = *nfs_salen;
- } else if (!nfs_string_to_sockaddr(option, strlen(option),
- mnt_saddr, mnt_salen))
+ } else if (!nfs_string_to_sockaddr(option, mnt_saddr, mnt_salen))
return 0;
return 1;
{
struct sockaddr_storage nfs_address;
struct sockaddr *nfs_saddr = (struct sockaddr *)&nfs_address;
- socklen_t nfs_salen;
+ socklen_t nfs_salen = sizeof(nfs_address);
struct pmap nfs_pmap;
struct sockaddr_storage mnt_address;
struct sockaddr *mnt_saddr = (struct sockaddr *)&mnt_address;
- socklen_t mnt_salen;
+ socklen_t mnt_salen = sizeof(mnt_address);
struct pmap mnt_pmap;
char *option;
char *options = NULL;
int result;
- if (strncmp(mi->type, "nfs4", 4) != 0) {
+ if (mi->version != 4) {
if (!nfs_rewrite_pmap_mount_options(mi->options))
return 0;
}