summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1997-09-16 23:15:16 +0000
committerbrian <brian@FreeBSD.org>1997-09-16 23:15:16 +0000
commitaaae64c991c822b762ac56ba2cc8a23cb4def67e (patch)
tree485c667968466c02da5c8fac3b08a01c169004d7 /usr.sbin/ppp
parente4a215054b550bf515c4bb8281f95caed9584733 (diff)
downloadFreeBSD-src-aaae64c991c822b762ac56ba2cc8a23cb4def67e.zip
FreeBSD-src-aaae64c991c822b762ac56ba2cc8a23cb4def67e.tar.gz
o Fix two unlikely descriptor leaks.
o Output the correct device for "show modem" while in -direct mode. o Cosmetic: Moan a bit more when we can't open the [modem] device. o Call OpenModem() in a more "natural" way. o Add some LogDEBUG in OpenModem().
Diffstat (limited to 'usr.sbin/ppp')
-rw-r--r--usr.sbin/ppp/command.c10
-rw-r--r--usr.sbin/ppp/main.c11
-rw-r--r--usr.sbin/ppp/modem.c87
-rw-r--r--usr.sbin/ppp/vars.c6
4 files changed, 73 insertions, 41 deletions
diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c
index 7a68992..e606505 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.79 1997/09/09 23:23:24 brian Exp $
+ * $Id: command.c,v 1.80 1997/09/09 23:56:29 brian Exp $
*
*/
#include <sys/types.h>
@@ -161,8 +161,7 @@ DialCommand(struct cmdtab const * cmdlist, int argc, char **argv)
do {
if (VarTerm)
fprintf(VarTerm, "Dial attempt %u of %d\n", ++tries, VarDialTries);
- modem = OpenModem(mode);
- if (modem < 0) {
+ if (OpenModem(mode) < 0) {
if (VarTerm)
fprintf(VarTerm, "Failed to open modem.\n");
break;
@@ -747,8 +746,7 @@ TerminalCommand(struct cmdtab const * list, int argc, char **argv)
}
if (!IsInteractive())
return (1);
- modem = OpenModem(mode);
- if (modem < 0) {
+ if (OpenModem(mode) < 0) {
if (VarTerm)
fprintf(VarTerm, "Failed to open modem.\n");
return (1);
@@ -814,7 +812,7 @@ SetModemSpeed(struct cmdtab const * list, int argc, char **argv)
int speed;
if (argc > 0) {
- if (strcmp(*argv, "sync") == 0) {
+ if (strcasecmp(*argv, "sync") == 0) {
VarSpeed = 0;
return 0;
}
diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c
index 8ee2978..2faedcf 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.76 1997/08/31 22:59:39 brian Exp $
+ * $Id: main.c,v 1.77 1997/09/04 00:38:19 brian Exp $
*
* TODO:
* o Add commands for traffic summary, version display, etc.
@@ -708,12 +708,14 @@ DoLoop()
if (mode & MODE_DIRECT) {
LogPrintf(LogDEBUG, "Opening modem\n");
- modem = OpenModem(mode);
+ if (OpenModem(mode) < 0)
+ return;
LogPrintf(LogPHASE, "Packet mode enabled\n");
PacketMode();
} else if (mode & MODE_DEDICATED) {
if (modem < 0)
- modem = OpenModem(mode);
+ while (OpenModem(mode) < 0)
+ sleep(VarReconnectTimer);
}
fflush(VarTerm);
@@ -766,8 +768,7 @@ DoLoop()
*/
if (dial_up && RedialTimer.state != TIMER_RUNNING) {
LogPrintf(LogDEBUG, "going to dial: modem = %d\n", modem);
- modem = OpenModem(mode);
- if (modem < 0) {
+ if (OpenModem(mode) < 0) {
tries++;
if (!(mode & MODE_DDIAL) && VarDialTries)
LogPrintf(LogCHAT, "Failed to open modem (attempt %u of %d)\n",
diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c
index 72d5484..61248ae 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.50 1997/08/31 22:59:41 brian Exp $
+ * $Id: modem.c,v 1.51 1997/09/10 02:20:30 brian Exp $
*
* TODO:
*/
@@ -312,15 +312,14 @@ ModemTimeout()
DownConnection();
}
}
- } else {
- if (!Online) {
- time(&uptime);
- LogPrintf(LogPHASE, "Connected!\n");
- mbits = TIOCM_CD;
- connect_count++;
- } else if (uptime == 0) {
- time(&uptime);
- }
+ } else if (!Online) {
+ /* mbits was set to zero in OpenModem() */
+ time(&uptime);
+ LogPrintf(LogPHASE, "Connected!\n");
+ mbits = TIOCM_CD;
+ connect_count++;
+ } else if (uptime == 0) {
+ time(&uptime);
}
}
@@ -331,6 +330,7 @@ StartModemTimer()
ModemTimer.state = TIMER_STOPPED;
ModemTimer.load = SECTICKS;
ModemTimer.func = ModemTimeout;
+ LogPrintf(LogDEBUG, "ModemTimer using ModemTimeout() - %p\n", ModemTimeout);
StartTimer(&ModemTimer);
}
@@ -438,18 +438,25 @@ OpenModem(int mode)
char *host, *cp, *port;
int res;
- mbits = 0;
- if (mode & MODE_DIRECT) {
+ if (modem >= 0)
+ LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n");
+ /* We're going back into "term" mode */
+ else if (mode & MODE_DIRECT) {
if (isatty(0)) {
- modem = open(ctermid(NULL), O_RDWR | O_NONBLOCK);
+ char *dev;
+ modem = open(dev = ctermid(NULL), O_RDWR | O_NONBLOCK);
if (modem < 0) {
- LogPrintf(LogPHASE, "Open Failed %s\n", ctermid(NULL));
- return (modem);
+ LogPrintf(LogERROR, "OpenModem(direct) failed: %s: %s\n",
+ dev, strerror(errno));
+ return (-1);
}
- } else
+ LogPrintf(LogDEBUG, "OpenModem(direct): Modem is a tty\n");
+ } else {
/* must be a tcp connection */
+ LogPrintf(LogDEBUG, "OpenModem(direct): Modem is not a tty\n");
return modem = dup(1);
- } else if (modem < 0) {
+ }
+ } else {
if (strncmp(VarDevice, "/dev/", 5) == 0) {
if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) {
if (res == UU_LOCK_INUSE)
@@ -461,10 +468,12 @@ OpenModem(int mode)
}
modem = open(VarDevice, O_RDWR | O_NONBLOCK);
if (modem < 0) {
- LogPrintf(LogPHASE, "Open Failed %s\n", VarDevice);
+ LogPrintf(LogERROR, "OpenModem failed: %s: %s\n", VarDevice,
+ strerror(errno));
(void) uu_unlock(VarBaseDevice);
- return (modem);
+ return (-1);
}
+ LogPrintf(LogDEBUG, "OpenModem: Modem is %s\n", VarDevice);
} else {
/* XXX: PPP over TCP */
cp = index(VarDevice, ':');
@@ -477,12 +486,18 @@ OpenModem(int mode)
*cp = ':'; /* Don't destroy VarDevice */
if (modem < 0)
return (-1);
+ LogPrintf(LogDEBUG, "OpenModem: Modem is socket %s\n", VarDevice);
} else {
*cp = ':'; /* Don't destroy VarDevice */
+ LogPrintf(LogERROR, "Invalid host:port: \"%s\"\n", VarDevice);
return (-1);
}
- } else
+ } else {
+ LogPrintf(LogERROR,
+ "Device (%s) must be in /dev or be a host:port pair\n",
+ VarDevice);
return (-1);
+ }
}
}
@@ -491,6 +506,7 @@ OpenModem(int mode)
* for further operation. In this implementation, we assume that modem is
* configuted to use CTS/RTS flow control.
*/
+ mbits = 0;
dev_is_modem = isatty(modem) || DEV_IS_SYNC;
if (DEV_IS_SYNC)
sleep(1);
@@ -527,13 +543,21 @@ OpenModem(int mode)
rstio.c_iflag, rstio.c_oflag, rstio.c_cflag);
if (!(mode & MODE_DIRECT))
- if (ioctl(modem, TIOCMGET, &mbits))
- return (-1);
+ if (ioctl(modem, TIOCMGET, &mbits)) {
+ LogPrintf(LogERROR, "OpenModem: Cannot get modem status: %s\n",
+ strerror(errno));
+ close(modem);
+ return (modem = -1);
+ }
LogPrintf(LogDEBUG, "OpenModem: modem control = %o\n", mbits);
oldflag = fcntl(modem, F_GETFL, 0);
- if (oldflag < 0)
- return (-1);
+ if (oldflag < 0) {
+ LogPrintf(LogERROR, "OpenModem: Cannot get modem flags: %s\n",
+ strerror(errno));
+ close(modem);
+ return (modem = -1);
+ }
(void) fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
}
StartModemTimer();
@@ -606,6 +630,7 @@ HangupModem(int flag)
modem = -1; /* Mark as modem has closed */
return;
}
+
if (modem >= 0 && Online) {
mbits &= ~TIOCM_DTR;
#ifdef __bsdi__ /* not a POSIX way */
@@ -630,7 +655,7 @@ HangupModem(int flag)
/*
* ModemTimeout() may call DownConection() to close the modem resulting
- * in modem == 0.
+ * in modem == -1.
*/
if (modem >= 0) {
char ScriptBuffer[200];
@@ -806,15 +831,23 @@ DialModem()
int
ShowModemStatus()
{
+ char *dev;
#ifdef TIOCOUTQ
int nb;
-
#endif
if (!VarTerm)
return 1;
- fprintf(VarTerm, "device: %s speed: ", VarDevice);
+ if (mode & MODE_DIRECT)
+ if (isatty(0))
+ dev = ctermid(NULL);
+ else
+ dev = "network";
+ else
+ dev = VarDevice;
+
+ fprintf(VarTerm, "device: %s speed: ", dev);
if (DEV_IS_SYNC)
fprintf(VarTerm, "sync\n");
else
diff --git a/usr.sbin/ppp/vars.c b/usr.sbin/ppp/vars.c
index 60bfeeb..cd1def5 100644
--- a/usr.sbin/ppp/vars.c
+++ b/usr.sbin/ppp/vars.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: vars.c,v 1.26 1997/09/04 00:38:21 brian Exp $
+ * $Id: vars.c,v 1.27 1997/09/07 01:00:06 brian Exp $
*
*/
#include "fsm.h"
@@ -29,8 +29,8 @@
#include "auth.h"
#include "defs.h"
-char VarVersion[] = "PPP Version 1.1";
-char VarLocalVersion[] = "$Date: 1997/09/04 00:38:21 $";
+char VarVersion[] = "PPP Version 1.2";
+char VarLocalVersion[] = "$Date: 1997/09/07 01:00:06 $";
/*
* Order of conf option is important. See vars.h.
OpenPOWER on IntegriCloud