]> git.neil.brown.name Git - portmap.git/blobdiff - portmap.c
Only fail an 'unregister' attempt if nothing can be unregistered.
[portmap.git] / portmap.c
index 89416ebe765e92342e042300e7a5ca1d98b36c05..6a7586fe9eb3646386a16a9dec25a539f8ae53b0 100644 (file)
--- a/portmap.c
+++ b/portmap.c
@@ -422,12 +422,14 @@ main(int argc, char **argv)
        abort();
 }
 
+#ifndef NO_PERROR
 /* need to override perror calls in rpc library */
 void perror(const char *what)
 {
 
        syslog(LOG_ERR, "%s: %m", what);
 }
+#endif
 
 static struct pmaplist *
 find_service(u_long prog, u_long vers, u_long prot)
@@ -566,17 +568,14 @@ static void reg_service(struct svc_req *rqstp, SVCXPRT *xprt)
                                if (!check_privileged_port(svc_getcaller(xprt), 
                                    rqstp->rq_proc, 
                                    reg.pm_prog, 
-                                   pml->pml_map.pm_port)) {
-                                       ans = 0;
-                                       break;
-                               }
+                                   pml->pml_map.pm_port))
+                                       continue;
+
                                fpml = (struct flagged_pml*)pml;
                                if (fpml->priv &&
                                    (ntohs(svc_getcaller(xprt)->sin_port)
-                                    >= IPPORT_RESERVED)) {
-                                       ans = 0;
-                                       break;
-                               }
+                                    >= IPPORT_RESERVED))
+                                       continue;
 
                                ans = 1;
                                t = (caddr_t)pml;
@@ -869,7 +868,7 @@ static void load_table(void)
        struct flagged_pml fpml, *fpmlp;
 
        ep = &pmaplist;
-       while ((*ep)->pml_next)
+       while (*ep)
                ep = & (*ep)->pml_next;
 
        if (store_fd < 0)