]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/network.c
mount.nfs: fix more nits with error messages
[nfs-utils.git] / utils / mount / network.c
index c11fa3ea2dd72eb33b3e9c3c02d2fa507314dcc5..ab8cfb751a021989721074486f8c87791415e280 100644 (file)
@@ -106,12 +106,13 @@ int nfs_gethostbyname(const char *hostname, struct sockaddr_in *saddr)
        saddr->sin_family = AF_INET;
        if (!inet_aton(hostname, &saddr->sin_addr)) {
                if ((hp = gethostbyname(hostname)) == NULL) {
-                       nfs_error(_("mount: can't get address for %s\n"),
-                               hostname);
+                       nfs_error(_("%s: can't get address for %s\n"),
+                                       progname, hostname);
                        return 0;
                } else {
                        if (hp->h_length > sizeof(*saddr)) {
-                               nfs_error(_("mount: got bad hp->h_length\n"));
+                               nfs_error(_("%s: got bad hp->h_length\n"),
+                                               progname);
                                hp->h_length = sizeof(*saddr);
                        }
                        memcpy(&saddr->sin_addr, hp->h_addr, hp->h_length);
@@ -316,3 +317,48 @@ version_fixed:
                goto out_bad;
        return probe_mntport(mnt_server);
 }
+
+static int probe_statd(void)
+{
+       struct sockaddr_in addr;
+       unsigned short port;
+
+       memset(&addr, 0, sizeof(addr));
+       addr.sin_family = AF_INET;
+       addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+       port = getport(&addr, 100024, 1, IPPROTO_UDP);
+
+       if (port == 0)
+               return 0;
+       addr.sin_port = htons(port);
+
+       if (clnt_ping(&addr, 100024, 1, IPPROTO_UDP, NULL) <= 0)
+               return 0;
+
+       return 1;
+}
+
+/*
+ * Attempt to start rpc.statd
+ */
+int start_statd(void)
+{
+#ifdef START_STATD
+       struct stat stb;
+#endif
+
+       if (probe_statd())
+               return 1;
+
+#ifdef START_STATD
+       if (stat(START_STATD, &stb) == 0) {
+               if (S_ISREG(stb.st_mode) && (stb.st_mode & S_IXUSR)) {
+                       system(START_STATD);
+                       if (probe_statd())
+                               return 1;
+               }
+       }
+#endif
+
+       return 0;
+}