]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/auth.c
Check the result of seteuid(), just to be paranoid.
[ppp.git] / pppd / auth.c
index a6f7d1cb09ad1348f504f6eb476c75bd60a6bde3..e78773ef90e3c7b8f6706aed07a66cde99bac88a 100644 (file)
@@ -68,7 +68,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define RCSID  "$Id: auth.c,v 1.108 2005/08/28 05:22:48 paulus Exp $"
+#define RCSID  "$Id: auth.c,v 1.110 2006/06/04 07:04:57 paulus Exp $"
 
 #include <stdio.h>
 #include <stddef.h>
@@ -418,9 +418,13 @@ setupapfile(argv)
     fname = strdup(*argv);
     if (fname == NULL)
        novm("+ua file name");
-    seteuid(getuid());
+    if (seteuid(getuid()) == -1) {
+       option_error("unable to reset uid before opening %s: %m", fname);
+       return ;
+    }
     ufile = fopen(fname, "r");
-    seteuid(0);
+    if (seteuid(0) == -1)
+       fatal("unable to regain privileges: %m");
     if (ufile == NULL) {
        option_error("unable to open user login data file %s", fname);
        return 0;
@@ -746,8 +750,8 @@ link_established(unit)
            set_allowed_addrs(unit, NULL, NULL);
        } else if (!wo->neg_upap || uselogin || !null_login(unit)) {
            warn("peer refused to authenticate: terminating link");
-           lcp_close(unit, "peer refused to authenticate");
            status = EXIT_PEER_AUTH_FAILED;
+           lcp_close(unit, "peer refused to authenticate");
            return;
        }
     }
@@ -906,8 +910,8 @@ auth_peer_fail(unit, protocol)
     /*
      * Authentication failure: take the link down
      */
-    lcp_close(unit, "Authentication failed");
     status = EXIT_PEER_AUTH_FAILED;
+    lcp_close(unit, "Authentication failed");
 }
 
 /*
@@ -984,8 +988,8 @@ auth_withpeer_fail(unit, protocol)
      * is no point in persisting without any way to get updated
      * authentication secrets.
      */
-    lcp_close(unit, "Failed to authenticate ourselves to peer");
     status = EXIT_AUTH_TOPEER_FAILED;
+    lcp_close(unit, "Failed to authenticate ourselves to peer");
 }
 
 /*
@@ -1149,9 +1153,9 @@ check_maxoctets(arg)
     diff = maxoctets - used;
     if(diff < 0) {
        notice("Traffic limit reached. Limit: %u Used: %u", maxoctets, used);
+       status = EXIT_TRAFFIC_LIMIT;
        lcp_close(0, "Traffic limit");
        need_holdoff = 0;
-       status = EXIT_TRAFFIC_LIMIT;
     } else {
         TIMEOUT(check_maxoctets, NULL, maxoctets_timeout);
     }
@@ -1181,9 +1185,9 @@ check_idle(arg)
     if (tlim <= 0) {
        /* link is idle: shut it down. */
        notice("Terminating connection due to lack of activity.");
+       status = EXIT_IDLE_TIMEOUT;
        lcp_close(0, "Link inactive");
        need_holdoff = 0;
-       status = EXIT_IDLE_TIMEOUT;
     } else {
        TIMEOUT(check_idle, NULL, tlim);
     }