- * XXX: This should really use the technique neil recently added
- * to get the address off the local end of a socket connected to
- * the server -- to get the right address to use on multi-homed
- * clients
- */
-static int get_my_ipv4addr(char *ip_addr, int len)
-{
- char myname[1024];
- struct sockaddr_in myaddr;
-
- if (gethostname(myname, sizeof(myname))) {
- nfs_error(_("%s: can't determine client address\n"),
- progname);
- return 0;
- }
- if (!fill_ipv4_sockaddr(myname, &myaddr))
- return 0;
-
- snprintf(ip_addr, len, "%s", inet_ntoa(myaddr.sin_addr));
- ip_addr[len - 1] = '\0';
-
- return 1;
-}
-
-/*
- * Walk through our mount options string, and indicate the presence
- * of 'bg', 'retry=', 'addr=', and 'clientaddr='.
- */
-static void extract_interesting_options(char *opts)
-{
- char *opt, *opteq;
- int val;
-
- opts = xstrdup(opts);
-
- for (opt = strtok(opts, ","); opt; opt = strtok(NULL, ",")) {
- if ((opteq = strchr(opt, '='))) {
- val = atoi(opteq + 1);
- *opteq = '\0';
- if (strcmp(opt, "bg") == 0)
- bg_opt++;
- else if (strcmp(opt, "retry") == 0)
- retry_opt = val;
- else if (strcmp(opt, "addr") == 0)
- addr_opt++;
- else if (strcmp(opt, "clientaddr") == 0)
- ca_opt++;
- } else {
- if (strcmp(opt, "bg") == 0)
- bg_opt++;
- }
- }
-
- free(opts);
-}
-
-/*
- * Append the 'addr=' option to the options string. The server
- * address is added to /etc/mtab for use when unmounting.
+ * Append the 'addr=' option to the options string to pass a resolved
+ * server address to the kernel. After a successful mount, this address
+ * is also added to /etc/mtab for use when unmounting.
+ *
+ * If 'addr=' is already present, we strip it out. This prevents users
+ * from setting a bogus 'addr=' option themselves, and also allows bg
+ * retries to recompute the server's address, in case it has changed.