Fixed bug in ipppd: MPdiscr is now random

added option deldefaultroute
This commit is contained in:
Kai Germaschewski 2000-04-29 08:57:24 +00:00
parent 92aa0a9b01
commit 72c0b1a299
6 changed files with 46 additions and 16 deletions

View File

@ -179,6 +179,7 @@ extern char sys_rcsid[];
extern int maxconnect;
extern int usefirstip,useifip,useifmtu;
extern int deldefaultroute;/* delete default gw, if it exists */
extern int numdev; /* number of handled devices */
extern int debug; /* Debug flag */
extern int kdebugflag; /* Tell kernel to print debug messages */

View File

@ -163,6 +163,11 @@ Disable the \fBdefaultroute\fR option. The system administrator who
wishes to prevent users from creating default routes with \fIipppd\fR
can do so by placing this option in the /etc/ppp/ioptions file.
.TP
.B deldefaultroute
Replace default route if it already exists. Together with the option
\fBdefaultroute\fR, this will replace any existing default route by a new
one through this ipppd's interface when it comes up.
.TP
.B -detach
Don't fork to become a background process (otherwise
.I ipppd

View File

@ -190,6 +190,7 @@ static void lcp_init(int unit)
{
*(u_int32_t *) (&our_discr_addr[0]) = magic();
*(u_int32_t *) (&our_discr_addr[4]) = magic();
first_call = 0;
}

View File

@ -165,6 +165,11 @@ int main(int argc,char **argv)
exit(1);
}
/*
* Initialize magic number package.
*/
magic_init();
for(i=0;i<NUM_PPP;i++) {
lns[i].openfails = 0;
lns[i].initfdflags = -1;
@ -246,11 +251,6 @@ int main(int argc,char **argv)
syslog(LOG_NOTICE,devstr);
}
/*
* Initialize magic number package.
*/
magic_init();
/*
* Detach ourselves from the terminal, if required,
* and identify who is running us.

View File

@ -114,6 +114,7 @@ int disable_defaultip = 0; /* Don't use hostname for default IP adrs */
char *ipparam = NULL; /* Extra parameter for ip up/down scripts */
int cryptpap; /* Passwords in pap-secrets are encrypted */
int useifip=0; /* try to get IP addresses from interface */
int deldefaultroute=0; /* delete default route, if it exists */
int usefirstip=0;
int useifmtu=0; /* get MTU value from network device */
@ -247,6 +248,7 @@ static int setwinsaddr __P((int,char **));
static int setgetwinsaddr __P((int,char **));
static int resetipxproto __P((int));
static int setuseifip __P((int));
static int setdeldefaultroute __P((int));
static int setusefirstip __P((int));
static int setmp __P((int));
static int setpwlog __P((int));
@ -413,6 +415,7 @@ static struct cmd {
{"-ipx", 0, resetipxproto}, /* Disable IPXCP (and IPX) */
{"useifip",0,setuseifip}, /* call setifip() for IP addrs */
{"deldefaultroute",0, setdeldefaultroute}, /* call setdeldefaultroute for defaultroute */
{"usefirstip",0,setusefirstip}, /* use first IP from auth file for remote */
{"+mp",0,setmp},
{"+pwlog",0,setpwlog},
@ -1316,6 +1319,12 @@ static int setuseifip(int slot)
return 1;
}
static int setdeldefaultroute(int slot)
{
deldefaultroute = 1;
return 1;
}
static int setifmtu(int slot)
{
useifmtu = 1;

View File

@ -35,6 +35,7 @@ char sys_rcsid[] = "$Id$";
#include <sys/stat.h>
#include <sys/file.h>
#include <sys/utsname.h>
#include <sys/sysmacros.h>
#include <stdio.h>
#include <stdlib.h>
@ -92,6 +93,10 @@ static void decode_version (char *buf, int *version,
int sockfd; /* socket for doing interface ioctls */
static char *lock_file;
static int kernel_version;
#define SIN_ADDR(x) (((struct sockaddr_in *) (&(x)))->sin_addr.s_addr)
#define KVERSION(j,n,p) ((j)*1000000 + (n)*1000 + (p))
#define MAX_IFS 4096
@ -857,26 +862,35 @@ static int defaultroute_exists (void)
int result = 0;
if (!open_route_table())
{
return 0;
}
return 0;
while (read_route_table(&rt) != 0)
{
if (kernel_version > KVERSION(2,1,0) && SIN_ADDR(rt.rt_genmask) != 0)
continue;
if ((rt.rt_flags & RTF_UP) == 0)
{
continue;
}
continue;
if (((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr == 0L)
{
struct in_addr ina;
ina.s_addr = ((struct sockaddr_in *) &rt.rt_gateway)->sin_addr.s_addr;
syslog (LOG_ERR,
"ppp not replacing existing default route to %s[%s]",
rt.rt_dev, inet_ntoa (ina) );
result = 1;
break;
if (!deldefaultroute)
{
syslog (LOG_ERR,
"ppp not replacing existing default route to %s[%s]",
rt.rt_dev, inet_ntoa (ina) );
result = 1;
break;
}
else
{
SET_SA_FAMILY (rt.rt_dst, AF_INET);
SET_SA_FAMILY (rt.rt_gateway, AF_INET);
rt.rt_flags = RTF_UP | RTF_GATEWAY;
ioctl(sockfd, SIOCDELRT, &rt);
}
}
}