Correct the way the uucp lock file and the ttyXX.if lock
file get created. We don't create lock files over non-tty connections, but we *do* create lock files in -direct mode. This leaves us capable of adding utmp/wtmp support for successful pap & chap logins (coming soon).
This commit is contained in:
parent
cec9e91f19
commit
35495bec8d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=29696
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: command.c,v 1.82 1997/09/17 23:17:52 brian Exp $
|
* $Id: command.c,v 1.83 1997/09/21 13:07:57 brian Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -1192,17 +1192,7 @@ SetNBNS(struct cmdtab const * list, int argc, char **argv)
|
|||||||
|
|
||||||
#endif /* MS_EXT */
|
#endif /* MS_EXT */
|
||||||
|
|
||||||
#define VAR_AUTHKEY 0
|
int
|
||||||
#define VAR_DIAL 1
|
|
||||||
#define VAR_LOGIN 2
|
|
||||||
#define VAR_AUTHNAME 3
|
|
||||||
#define VAR_DEVICE 4
|
|
||||||
#define VAR_ACCMAP 5
|
|
||||||
#define VAR_PHONE 6
|
|
||||||
#define VAR_HANGUP 7
|
|
||||||
#define VAR_ENC 8
|
|
||||||
|
|
||||||
static int
|
|
||||||
SetVariable(struct cmdtab const * list, int argc, char **argv, int param)
|
SetVariable(struct cmdtab const * list, int argc, char **argv, int param)
|
||||||
{
|
{
|
||||||
u_long map;
|
u_long map;
|
||||||
@ -1231,11 +1221,15 @@ SetVariable(struct cmdtab const * list, int argc, char **argv, int param)
|
|||||||
VarLoginScript[sizeof(VarLoginScript) - 1] = '\0';
|
VarLoginScript[sizeof(VarLoginScript) - 1] = '\0';
|
||||||
break;
|
break;
|
||||||
case VAR_DEVICE:
|
case VAR_DEVICE:
|
||||||
CloseModem();
|
if (modem != -1)
|
||||||
strncpy(VarDevice, arg, sizeof(VarDevice) - 1);
|
LogPrintf(LogWARN, "Cannot change device to \"%s\" when \"%s\" is open\n",
|
||||||
VarDevice[sizeof(VarDevice) - 1] = '\0';
|
arg, VarDevice);
|
||||||
VarBaseDevice = rindex(VarDevice, '/');
|
else {
|
||||||
VarBaseDevice = VarBaseDevice ? VarBaseDevice + 1 : "";
|
strncpy(VarDevice, arg, sizeof(VarDevice) - 1);
|
||||||
|
VarDevice[sizeof(VarDevice) - 1] = '\0';
|
||||||
|
VarBaseDevice = rindex(VarDevice, '/');
|
||||||
|
VarBaseDevice = VarBaseDevice ? VarBaseDevice + 1 : "";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case VAR_ACCMAP:
|
case VAR_ACCMAP:
|
||||||
sscanf(arg, "%lx", &map);
|
sscanf(arg, "%lx", &map);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: command.h,v 1.4 1997/02/22 16:10:09 peter Exp $
|
* $Id: command.h,v 1.5 1997/08/25 00:29:09 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
*/
|
*/
|
||||||
@ -29,3 +29,15 @@ struct cmdtab {
|
|||||||
char *syntax;
|
char *syntax;
|
||||||
void *args;
|
void *args;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define VAR_AUTHKEY 0
|
||||||
|
#define VAR_DIAL 1
|
||||||
|
#define VAR_LOGIN 2
|
||||||
|
#define VAR_AUTHNAME 3
|
||||||
|
#define VAR_DEVICE 4
|
||||||
|
#define VAR_ACCMAP 5
|
||||||
|
#define VAR_PHONE 6
|
||||||
|
#define VAR_HANGUP 7
|
||||||
|
#define VAR_ENC 8
|
||||||
|
|
||||||
|
extern int SetVariable(struct cmdtab const *, int, char **, int var_param);
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: main.c,v 1.79 1997/09/18 00:15:25 brian Exp $
|
* $Id: main.c,v 1.80 1997/09/21 20:26:46 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* o Add commands for traffic summary, version display, etc.
|
* o Add commands for traffic summary, version display, etc.
|
||||||
@ -448,27 +448,6 @@ main(int argc, char **argv)
|
|||||||
} else if (mode & MODE_BACKGROUND)
|
} else if (mode & MODE_BACKGROUND)
|
||||||
close(BGFiledes[0]);
|
close(BGFiledes[0]);
|
||||||
}
|
}
|
||||||
snprintf(pid_filename, sizeof(pid_filename), "%stun%d.pid",
|
|
||||||
_PATH_VARRUN, tunno);
|
|
||||||
(void) unlink(pid_filename);
|
|
||||||
|
|
||||||
if ((lockfile = fopen(pid_filename, "w")) != NULL) {
|
|
||||||
fprintf(lockfile, "%d\n", (int) getpid());
|
|
||||||
fclose(lockfile);
|
|
||||||
} else
|
|
||||||
LogPrintf(LogALERT, "Warning: Can't create %s: %s\n",
|
|
||||||
pid_filename, strerror(errno));
|
|
||||||
|
|
||||||
snprintf(if_filename, sizeof if_filename, "%s%s.if",
|
|
||||||
_PATH_VARRUN, VarBaseDevice);
|
|
||||||
(void) unlink(if_filename);
|
|
||||||
|
|
||||||
if ((lockfile = fopen(if_filename, "w")) != NULL) {
|
|
||||||
fprintf(lockfile, "tun%d\n", tunno);
|
|
||||||
fclose(lockfile);
|
|
||||||
} else
|
|
||||||
LogPrintf(LogALERT, "Warning: Can't create %s: %s\n",
|
|
||||||
if_filename, strerror(errno));
|
|
||||||
|
|
||||||
VarTerm = 0; /* We know it's currently stdout */
|
VarTerm = 0; /* We know it's currently stdout */
|
||||||
close(1);
|
close(1);
|
||||||
@ -488,6 +467,18 @@ main(int argc, char **argv)
|
|||||||
TtyInit(0);
|
TtyInit(0);
|
||||||
TtyCommandMode(1);
|
TtyCommandMode(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snprintf(pid_filename, sizeof(pid_filename), "%stun%d.pid",
|
||||||
|
_PATH_VARRUN, tunno);
|
||||||
|
(void) unlink(pid_filename);
|
||||||
|
|
||||||
|
if ((lockfile = fopen(pid_filename, "w")) != NULL) {
|
||||||
|
fprintf(lockfile, "%d\n", (int) getpid());
|
||||||
|
fclose(lockfile);
|
||||||
|
} else
|
||||||
|
LogPrintf(LogALERT, "Warning: Can't create %s: %s\n",
|
||||||
|
pid_filename, strerror(errno));
|
||||||
|
|
||||||
LogPrintf(LogPHASE, "PPP Started.\n");
|
LogPrintf(LogPHASE, "PPP Started.\n");
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: modem.c,v 1.53 1997/09/18 00:15:25 brian Exp $
|
* $Id: modem.c,v 1.54 1997/09/21 20:26:47 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
*/
|
*/
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <paths.h>
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
#include <util.h>
|
#include <util.h>
|
||||||
#else
|
#else
|
||||||
@ -42,6 +43,7 @@
|
|||||||
#include "modem.h"
|
#include "modem.h"
|
||||||
#include "loadalias.h"
|
#include "loadalias.h"
|
||||||
#include "vars.h"
|
#include "vars.h"
|
||||||
|
#include "command.h"
|
||||||
|
|
||||||
#ifndef O_NONBLOCK
|
#ifndef O_NONBLOCK
|
||||||
#ifdef O_NDELAY
|
#ifdef O_NDELAY
|
||||||
@ -428,6 +430,53 @@ OpenConnection(char *host, char *port)
|
|||||||
return (sock);
|
return (sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int tunno;
|
||||||
|
static char fn[MAXPATHLEN];
|
||||||
|
|
||||||
|
int
|
||||||
|
LockModem()
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
FILE *lockfile;
|
||||||
|
|
||||||
|
if (*VarDevice != '/')
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) {
|
||||||
|
if (res == UU_LOCK_INUSE)
|
||||||
|
LogPrintf(LogPHASE, "Modem %s is in use\n", VarDevice);
|
||||||
|
else
|
||||||
|
LogPrintf(LogPHASE, "Modem %s is in use: uu_lock: %s\n",
|
||||||
|
VarDevice, uu_lockerr(res));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(fn, sizeof fn, "%s%s.if", _PATH_VARRUN, VarBaseDevice);
|
||||||
|
(void) unlink(fn);
|
||||||
|
|
||||||
|
if ((lockfile = fopen(fn, "w")) != NULL) {
|
||||||
|
fprintf(lockfile, "tun%d\n", tunno);
|
||||||
|
fclose(lockfile);
|
||||||
|
} else
|
||||||
|
LogPrintf(LogALERT, "Warning: Can't create %s: %s\n", fn, strerror(errno));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
UnlockModem()
|
||||||
|
{
|
||||||
|
if (*VarDevice != '/')
|
||||||
|
return;
|
||||||
|
|
||||||
|
snprintf(fn, sizeof fn, "%s%s.if", _PATH_VARRUN, VarBaseDevice);
|
||||||
|
if (unlink(fn) == -1)
|
||||||
|
LogPrintf(LogALERT, "Warning: Can't remove %s: %s\n", fn, strerror(errno));
|
||||||
|
|
||||||
|
if (uu_unlock(VarBaseDevice) == -1)
|
||||||
|
LogPrintf(LogALERT, "Warning: Can't uu_unlock %s\n", fn);
|
||||||
|
}
|
||||||
|
|
||||||
static struct termios modemios;
|
static struct termios modemios;
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -436,30 +485,33 @@ OpenModem(int mode)
|
|||||||
struct termios rstio;
|
struct termios rstio;
|
||||||
int oldflag;
|
int oldflag;
|
||||||
char *host, *cp, *port;
|
char *host, *cp, *port;
|
||||||
int res;
|
|
||||||
|
|
||||||
if (modem >= 0)
|
if (modem >= 0)
|
||||||
LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n");
|
LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n");
|
||||||
/* We're going back into "term" mode */
|
/* We're going back into "term" mode */
|
||||||
else if (mode & MODE_DIRECT) {
|
else if (mode & MODE_DIRECT) {
|
||||||
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is %sa tty\n",
|
if (isatty(0)) {
|
||||||
isatty(0) ? "" : "not ");
|
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is a tty\n");
|
||||||
|
cp = ttyname(0);
|
||||||
|
SetVariable(0, 1, &cp, VAR_DEVICE);
|
||||||
|
if (LockModem() == -1) {
|
||||||
|
close(0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is not a tty\n");
|
||||||
|
SetVariable(0, 0, 0, VAR_DEVICE);
|
||||||
|
}
|
||||||
return modem = 0;
|
return modem = 0;
|
||||||
} else {
|
} else {
|
||||||
if (strncmp(VarDevice, "/dev/", 5) == 0) {
|
if (strncmp(VarDevice, "/dev/", 5) == 0) {
|
||||||
if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) {
|
if (LockModem() == -1)
|
||||||
if (res == UU_LOCK_INUSE)
|
return (-1);
|
||||||
LogPrintf(LogPHASE, "Modem %s is in use\n", VarDevice);
|
|
||||||
else
|
|
||||||
LogPrintf(LogPHASE, "Modem %s is in use: uu_lock: %s\n",
|
|
||||||
VarDevice, uu_lockerr(res));
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
modem = open(VarDevice, O_RDWR | O_NONBLOCK);
|
modem = open(VarDevice, O_RDWR | O_NONBLOCK);
|
||||||
if (modem < 0) {
|
if (modem < 0) {
|
||||||
LogPrintf(LogERROR, "OpenModem failed: %s: %s\n", VarDevice,
|
LogPrintf(LogERROR, "OpenModem failed: %s: %s\n", VarDevice,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
(void) uu_unlock(VarBaseDevice);
|
UnlockModem();
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
LogPrintf(LogDEBUG, "OpenModem: Modem is %s\n", VarDevice);
|
LogPrintf(LogDEBUG, "OpenModem: Modem is %s\n", VarDevice);
|
||||||
@ -535,8 +587,8 @@ OpenModem(int mode)
|
|||||||
if (ioctl(modem, TIOCMGET, &mbits)) {
|
if (ioctl(modem, TIOCMGET, &mbits)) {
|
||||||
LogPrintf(LogERROR, "OpenModem: Cannot get modem status: %s\n",
|
LogPrintf(LogERROR, "OpenModem: Cannot get modem status: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
close(modem);
|
CloseModem();
|
||||||
return (modem = -1);
|
return (-1);
|
||||||
}
|
}
|
||||||
LogPrintf(LogDEBUG, "OpenModem: modem control = %o\n", mbits);
|
LogPrintf(LogDEBUG, "OpenModem: modem control = %o\n", mbits);
|
||||||
|
|
||||||
@ -544,8 +596,8 @@ OpenModem(int mode)
|
|||||||
if (oldflag < 0) {
|
if (oldflag < 0) {
|
||||||
LogPrintf(LogERROR, "OpenModem: Cannot get modem flags: %s\n",
|
LogPrintf(LogERROR, "OpenModem: Cannot get modem flags: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
close(modem);
|
CloseModem();
|
||||||
return (modem = -1);
|
return (-1);
|
||||||
}
|
}
|
||||||
(void) fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
|
(void) fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
|
||||||
}
|
}
|
||||||
@ -653,10 +705,8 @@ HangupModem(int flag)
|
|||||||
DoChat(ScriptBuffer);
|
DoChat(ScriptBuffer);
|
||||||
tcflush(modem, TCIOFLUSH);
|
tcflush(modem, TCIOFLUSH);
|
||||||
UnrawModem(modem);
|
UnrawModem(modem);
|
||||||
close(modem);
|
CloseModem();
|
||||||
}
|
}
|
||||||
modem = -1; /* Mark as modem has closed */
|
|
||||||
(void) uu_unlock(VarBaseDevice);
|
|
||||||
} else if (modem >= 0) {
|
} else if (modem >= 0) {
|
||||||
char ScriptBuffer[200];
|
char ScriptBuffer[200];
|
||||||
|
|
||||||
@ -678,9 +728,9 @@ CloseModem()
|
|||||||
{
|
{
|
||||||
if (modem >= 0) {
|
if (modem >= 0) {
|
||||||
close(modem);
|
close(modem);
|
||||||
|
UnlockModem();
|
||||||
modem = -1;
|
modem = -1;
|
||||||
}
|
}
|
||||||
(void) uu_unlock(VarBaseDevice);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user