summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1997-06-11 03:57:51 +0000
committerbrian <brian@FreeBSD.org>1997-06-11 03:57:51 +0000
commit5d18065463d00e184ff9bd1aaa17936d5da8ca32 (patch)
treeda1efc12c48d41a835081e367271110485404a69 /usr.sbin
parent0aa80b0c2ec66ef679d1d850cf3e6217b1748f66 (diff)
downloadFreeBSD-src-5d18065463d00e184ff9bd1aaa17936d5da8ca32.zip
FreeBSD-src-5d18065463d00e184ff9bd1aaa17936d5da8ca32.tar.gz
Sort out ppp over tcp:
o Allow "set var" with no args to blank var (don't req ""). o Zero VarTerm ASAP if not in interactive mode. o Never print anything to stdout in -direct mode. o Count redial when failing to open modem. o Increase device size to 40 characters (for host:port). o Remove missed "if (fd == 0) fd = 1;". o Don't give up on incoming non-terminal connections.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/ppp/command.c26
-rw-r--r--usr.sbin/ppp/main.c44
-rw-r--r--usr.sbin/ppp/modem.c16
-rw-r--r--usr.sbin/ppp/vars.h4
4 files changed, 58 insertions, 32 deletions
diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c
index e314d57..2d3b623 100644
--- a/usr.sbin/ppp/command.c
+++ b/usr.sbin/ppp/command.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: command.c,v 1.53 1997/06/01 01:13:00 brian Exp $
+ * $Id: command.c,v 1.54 1997/06/09 03:27:16 brian Exp $
*
*/
#include <sys/types.h>
@@ -1128,43 +1128,47 @@ char **argv;
int param;
{
u_long map;
+ char *arg;
- if (argc > 0) {
- switch (param) {
+ if (argc > 0)
+ arg = *argv;
+ else
+ arg = "";
+
+ switch (param) {
case VAR_AUTHKEY:
- strncpy(VarAuthKey, *argv, sizeof(VarAuthKey)-1);
+ strncpy(VarAuthKey, arg, sizeof(VarAuthKey)-1);
VarAuthKey[sizeof(VarAuthKey)-1] = '\0';
break;
case VAR_AUTHNAME:
- strncpy(VarAuthName, *argv, sizeof(VarAuthName)-1);
+ strncpy(VarAuthName, arg, sizeof(VarAuthName)-1);
VarAuthName[sizeof(VarAuthName)-1] = '\0';
break;
case VAR_DIAL:
- strncpy(VarDialScript, *argv, sizeof(VarDialScript)-1);
+ strncpy(VarDialScript, arg, sizeof(VarDialScript)-1);
VarDialScript[sizeof(VarDialScript)-1] = '\0';
break;
case VAR_LOGIN:
- strncpy(VarLoginScript, *argv, sizeof(VarLoginScript)-1);
+ strncpy(VarLoginScript, arg, sizeof(VarLoginScript)-1);
VarLoginScript[sizeof(VarLoginScript)-1] = '\0';
break;
case VAR_DEVICE:
CloseModem();
- strncpy(VarDevice, *argv, sizeof(VarDevice)-1);
+ strncpy(VarDevice, arg, sizeof(VarDevice)-1);
VarDevice[sizeof(VarDevice)-1] = '\0';
VarBaseDevice = rindex(VarDevice, '/');
VarBaseDevice = VarBaseDevice ? VarBaseDevice + 1 : "";
break;
case VAR_ACCMAP:
- sscanf(*argv, "%lx", &map);
+ sscanf(arg, "%lx", &map);
VarAccmap = map;
break;
case VAR_PHONE:
- strncpy(VarPhoneList, *argv, sizeof(VarPhoneList)-1);
+ strncpy(VarPhoneList, arg, sizeof(VarPhoneList)-1);
VarPhoneList[sizeof(VarPhoneList)-1] = '\0';
strcpy(VarPhoneCopy, VarPhoneList);
VarNextPhone = VarPhoneCopy;
break;
- }
}
return 0;
}
diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c
index ad423a5..e557ddd 100644
--- a/usr.sbin/ppp/main.c
+++ b/usr.sbin/ppp/main.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: main.c,v 1.59 1997/06/01 03:43:25 brian Exp $
+ * $Id: main.c,v 1.60 1997/06/09 03:27:28 brian Exp $
*
* TODO:
* o Add commands for traffic summary, version display, etc.
@@ -329,7 +329,7 @@ char **argv;
FILE *lockfile;
char *name;
- VarTerm = stdout;
+ VarTerm = 0;
name = rindex(argv[0], '/');
LogOpen(name ? name+1 : argv[0]);
@@ -338,7 +338,8 @@ char **argv;
netfd = server = modem = tun_in = -1;
ProcessArgs(argc, argv);
if (!(mode & MODE_DIRECT))
- Greetings();
+ VarTerm = stdout;
+ Greetings();
GetUid();
IpcpDefAddress();
@@ -350,6 +351,7 @@ char **argv;
if (VarTerm) {
fprintf(VarTerm,LAUTH_M1);
fprintf(VarTerm,LAUTH_M2);
+ fflush(VarTerm);
}
/* Fall down */
case VALID:
@@ -409,19 +411,15 @@ char **argv;
if (dstsystem) {
if (SelectSystem(dstsystem, CONFFILE) < 0) {
- if (VarTerm)
- fprintf(VarTerm, "Destination system not found in conf file.\n");
+ LogPrintf(LogWARN, "Destination system not found in conf file.\n");
Cleanup(EX_START);
}
if ((mode & MODE_AUTO) && DefHisAddress.ipaddr.s_addr == INADDR_ANY) {
- if (VarTerm)
- fprintf(VarTerm, "Must specify dstaddr with"
+ LogPrintf(LogWARN, "Must specify dstaddr with"
" auto, background or ddial mode.\n");
Cleanup(EX_START);
}
}
- if (mode & MODE_DIRECT)
- fprintf(VarTerm, "Packet mode enabled.\n");
if (!(mode & MODE_INTER)) {
int port = SERVER_PORT + tunno;
@@ -511,13 +509,17 @@ char **argv;
if (server >= 0)
LogPrintf(LogPHASE, "Listening at %d.\n", port);
+
+ VarTerm = 0; /* We know it's currently stdin */
+
#ifdef DOTTYINIT
- if (mode & (MODE_DIRECT|MODE_DEDICATED))
+ if (mode & (MODE_DIRECT|MODE_DEDICATED)) { /* } */
#else
- if (mode & MODE_DIRECT)
+ if (mode & MODE_DIRECT) {
#endif
+ chdir("/"); /* Be consistent with daemon() */
TtyInit();
- else
+ } else
daemon(0,0);
} else {
TtyInit();
@@ -743,6 +745,7 @@ DoLoop()
pgroup = getpgrp();
if (mode & MODE_DIRECT) {
+ LogPrintf(LogDEBUG, "Opening modem\n");
modem = OpenModem(mode);
LogPrintf(LogPHASE, "Packet mode enabled\n");
PacketMode();
@@ -805,7 +808,22 @@ DoLoop()
LogPrintf(LogDEBUG, "going to dial: modem = %d\n", modem);
modem = OpenModem(mode);
if (modem < 0) {
- StartRedialTimer(VarRedialTimeout);
+ tries++;
+ if (VarDialTries)
+ LogPrintf(LogCHAT, "Failed to open modem (attempt %u of %d)\n",
+ tries, VarDialTries);
+ else
+ LogPrintf(LogCHAT, "Failed to open modem (attempt %u)\n", tries);
+
+ if (VarDialTries && tries >= VarDialTries) {
+ if (mode & MODE_BACKGROUND)
+ Cleanup(EX_DIAL); /* Can't get the modem */
+ dial_up = FALSE;
+ reconnectState = RECON_UNKNOWN;
+ reconnectCount = 0;
+ tries = 0;
+ } else
+ StartRedialTimer(VarRedialTimeout);
} else {
tries++; /* Tries are per number, not per list of numbers. */
if (VarDialTries)
diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c
index d5dc70f..b34545e 100644
--- a/usr.sbin/ppp/modem.c
+++ b/usr.sbin/ppp/modem.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: modem.c,v 1.41 1997/05/29 02:29:13 brian Exp $
+ * $Id: modem.c,v 1.42 1997/06/09 03:27:30 brian Exp $
*
* TODO:
*/
@@ -359,6 +359,7 @@ char *host, *port;
LogPrintf(LogWARN, "OpenConnection: connection failed.\n");
return(-1);
}
+ LogPrintf(LogDEBUG, "OpenConnection: modem fd is %d.\n", sock);
return(sock);
}
@@ -381,8 +382,9 @@ int mode;
LogPrintf(LogPHASE, "Open Failed %s\n", ctermid(NULL));
return(modem);
}
- } else if (modem < 0)
- return(modem);
+ } else
+ /* must be a tcp connection */
+ return modem = dup(1);
} else if (modem < 0) {
if (strncmp(VarDevice, "/dev/", 5) == 0) {
if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) {
@@ -680,7 +682,6 @@ int fd;
if (modemout) {
nb = modemout->cnt;
if (nb > 1600) nb = 1600;
- if (fd == 0) fd = 1; /* XXX WTFO! This is bogus */
nw = write(fd, MBUF_CTOP(modemout), nb);
LogPrintf(LogDEBUG, "ModemStartOutput: wrote: %d(%d)\n", nw, nb);
LogDumpBuff(LogDEBUG, "ModemStartOutput: modem write",
@@ -693,8 +694,11 @@ int fd;
LogPrintf(LogDEBUG, "ModemStartOutput: mbfree\n");
}
} else if (nw < 0) {
- if (errno != EAGAIN)
- LogPrintf(LogERROR, "modem write: %s", strerror(errno));
+ if (errno != EAGAIN) {
+ LogPrintf(LogERROR, "modem write (%d): %s", modem, strerror(errno));
+ reconnect(RECON_TRUE);
+ DownConnection();
+ }
}
}
}
diff --git a/usr.sbin/ppp/vars.h b/usr.sbin/ppp/vars.h
index 2f5b87a..64f9b81 100644
--- a/usr.sbin/ppp/vars.h
+++ b/usr.sbin/ppp/vars.h
@@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: vars.h,v 1.17 1997/06/01 01:13:04 brian Exp $
+ * $Id: vars.h,v 1.18 1997/06/09 03:27:42 brian Exp $
*
* TODO:
*/
@@ -68,7 +68,7 @@ struct pppvars {
int redial_timeout; /* Redial timeout value */
int redial_next_timeout; /* Redial next timeout value */
int dial_tries; /* Dial attempts before giving up, 0 == inf */
- char modem_dev[20]; /* Name of device */
+ char modem_dev[40]; /* Name of device / host:port */
char *base_modem_dev; /* Pointer to base of modem_dev */
int open_mode; /* LCP open mode */
#define LOCAL_AUTH 0x01
OpenPOWER on IntegriCloud