]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mountd/mountd.c
mountd: Replace "struct hostent" with "struct addrinfo"
[nfs-utils.git] / utils / mountd / mountd.c
index a0a1f2d03a7c61c5b339bd72498abbe8fac9bde3..6571454f6dd61e7fc22f929a3c61405456f1a71e 100644 (file)
@@ -80,10 +80,10 @@ static int nfs_version = -1;
 static void
 unregister_services (void)
 {
-       if (nfs_version & 0x1)
+       if (nfs_version & (0x1 << 1)) {
                pmap_unset (MOUNTPROG, MOUNTVERS);
-       if (nfs_version & (0x1 << 1))
                pmap_unset (MOUNTPROG, MOUNTVERS_POSIX);
+       }
        if (nfs_version & (0x1 << 2))
                pmap_unset (MOUNTPROG, MOUNTVERS_NFSV3);
 }
@@ -536,22 +536,21 @@ static void free_exportlist(exports *elist)
 
 static void prune_clients(nfs_export *exp, struct exportnode *e)
 {
-       struct hostent  *hp;
+       struct addrinfo *ai = NULL;
        struct groupnode *c, **cp;
 
        cp = &e->ex_groups;
        while ((c = *cp) != NULL) {
                if (client_gettype(c->gr_name) == MCL_FQDN
-                               && (hp = gethostbyname(c->gr_name))) {
-                       hp = hostent_dup(hp);
-                       if (client_check(exp->m_client, hp)) {
+                   && (ai = host_addrinfo(c->gr_name))) {
+                       if (client_check(exp->m_client, ai)) {
                                *cp = c->gr_next;
                                xfree(c->gr_name);
                                xfree(c);
-                               xfree (hp);
+                               freeaddrinfo(ai);
                                continue;
                        }
-                       xfree (hp);
+                       freeaddrinfo(ai);
                }
                cp = &(c->gr_next);
        }
@@ -712,8 +711,10 @@ main(int argc, char **argv)
                        usage(argv [0], 1);
                }
 
-       /* No more arguments allowed. */
-       if (optind != argc || !(nfs_version & 0x7))
+       /* No more arguments allowed.
+        * Require at least one valid version (2, 3, or 4)
+        */
+       if (optind != argc || !(nfs_version & 0xE))
                usage(argv [0], 1);
 
        if (chdir(state_dir)) {
@@ -761,12 +762,12 @@ main(int argc, char **argv)
        if (new_cache)
                cache_open();
 
-       if (nfs_version & 0x1)
+       if (nfs_version & (0x1 << 1)) {
                rpc_init("mountd", MOUNTPROG, MOUNTVERS,
                         mount_dispatch, port);
-       if (nfs_version & (0x1 << 1))
                rpc_init("mountd", MOUNTPROG, MOUNTVERS_POSIX,
                         mount_dispatch, port);
+       }
        if (nfs_version & (0x1 << 2))
                rpc_init("mountd", MOUNTPROG, MOUNTVERS_NFSV3,
                         mount_dispatch, port);