Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Oct 2002 15:22:22 -0700
From:      Brooks Davis <brooks@one-eyed-alien.net>
To:        Brooks Davis <brooks@one-eyed-alien.net>
Cc:        Bakul Shah <bakul@bitblocks.com>, Dave Evans <devans@hclb.demon.co.uk>, freebsd-current@FreeBSD.ORG
Subject:   Re: pppd not working on latest current 2002-10-20
Message-ID:  <20021025152221.A8479@Odin.AC.HMC.Edu>
In-Reply-To: <20021025123522.B23521@Odin.AC.HMC.Edu>; from brooks@one-eyed-alien.net on Fri, Oct 25, 2002 at 12:35:22PM -0700
References:  <20021025113137.A23521@Odin.AC.HMC.Edu> <200210251841.OAA09782@valiant.cnchost.com> <20021025123522.B23521@Odin.AC.HMC.Edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--ZGiS0Q5IWpPtfppv
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Oct 25, 2002 at 12:35:22PM -0700, Brooks Davis wrote:
> If someone who actually uses pppd could test it, perferably in both
> sceneios, I'll see about getting it commited.

Here's a new patch that gives the user more of a hint at how to add PPP
support and only loads the module if they are actully root.  How's this
look?

-- Brooks

Index: sys-bsd.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/cvs/src/usr.sbin/pppd/sys-bsd.c,v
retrieving revision 1.18
diff -u -p -r1.18 sys-bsd.c
--- sys-bsd.c	17 Sep 2002 15:52:35 -0000	1.18
+++ sys-bsd.c	25 Oct 2002 22:21:47 -0000
@@ -44,6 +44,7 @@ static char rcsid[] =3D "$FreeBSD: src/usr
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <sys/param.h>
+#include <sys/module.h>
 #ifdef NetBSD1_2
 #include <util.h>
 #endif
@@ -169,28 +170,29 @@ sys_check_options()
 }
=20
 /*
- * ppp_available - check whether the system has any ppp interfaces
- * (in fact we check whether we can do an ioctl on ppp0).
+ * ppp_available - check whether the system has the ppp module loaded
+ * or compiled in. If it doesn't, and we're actually root (not just SUID
+ * root) try loading it before giving up.
  */
 int
 ppp_available()
 {
-    int s, ok;
-    struct ifreq ifr;
+    const char *modname =3D "if_ppp";
     extern char *no_ppp_msg;
=20
-    if ((s =3D socket(AF_INET, SOCK_DGRAM, 0)) < 0)
-	return 1;		/* can't tell */
+    if (modfind(modname) !=3D -1) {
+	return 1;
+    }
=20
-    strncpy(ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
-    ok =3D ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >=3D 0;
-    close(s);
+    if (getuid() =3D=3D 0 && kldload(modname) !=3D -1)
+	return 1;
=20
     no_ppp_msg =3D "\
 This system lacks kernel support for PPP.  To include PPP support\n\
-in the kernel, please follow the steps detailed in the README.bsd\n\
-file in the ppp-2.2 distribution.\n";
-    return ok;
+in the kernel, please add \"device ppp\" to your kernel config or \n\
+load the if_ppp module.\n";
+
+    return 0;
 }
=20
 /*

--=20
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529  9BF0 5D8E 8BE9 F238 1AD4

--ZGiS0Q5IWpPtfppv
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9ucQdXY6L6fI4GtQRAtL5AJ0R0mWDMiPy/MvJRAHXLDLkVHRuIgCfdkXK
SkDNHicz6ElhzTZw9FDCLDQ=
=30xE
-----END PGP SIGNATURE-----

--ZGiS0Q5IWpPtfppv--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021025152221.A8479>