mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-17 16:10:46 +01:00
1. Do not log the password itself to ppp.log ( Mr. Rich Murphey )
2. Add ability to execute shell commands and suspend back into invoking shell (Mr. J Wunsch) Reviewed by: amurai@spec.co.jp Submitted by: joerg_wunsch@uriah.heep.sax.de (Joerg Wunsch) Rich Murphey <rich@lamprey.utmb.edu>
This commit is contained in:
parent
3c09ce5dca
commit
c3899f8d3c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=10528
@ -1,10 +1,11 @@
|
||||
# $Id: Makefile,v 1.1.1.1 1995/01/31 06:29:55 amurai Exp $
|
||||
# $Id: Makefile,v 1.2 1995/02/26 12:17:08 amurai Exp $
|
||||
|
||||
PROG= ppp
|
||||
SRCS= async.c auth.c ccp.c chap.c chat.c command.c filter.c fsm.c hdlc.c \
|
||||
ip.c ipcp.c lcp.c lqr.c log.c main.c mbuf.c md5c.c modem.c os.c \
|
||||
pap.c pred.c route.c slcompress.c timer.c systems.c uucplock.c vars.c \
|
||||
vjcomp.c arp.c
|
||||
#CFLAGS+= -DHAVE_SHELL_CMD_WITH_ANY_MODE
|
||||
MAN8= ppp.8
|
||||
BINMODE=4555
|
||||
BINOWN= root
|
||||
|
@ -17,10 +17,10 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id: auth.c,v 1.3 1995/02/27 10:57:38 amurai Exp $
|
||||
* $Id: auth.c,v 1.4 1995/05/30 03:50:25 rgrimes Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o Imprement check against with registerd IP addresses.
|
||||
* o Implement check against with registered IP addresses.
|
||||
*/
|
||||
#include "fsm.h"
|
||||
#include "lcpproto.h"
|
||||
|
@ -18,7 +18,7 @@
|
||||
* Columbus, OH 43221
|
||||
* (614)451-1883
|
||||
*
|
||||
* $Id: chat.c,v 1.3 1995/03/11 15:18:37 amurai Exp $
|
||||
* $Id: chat.c,v 1.4 1995/05/30 03:50:29 rgrimes Exp $
|
||||
*
|
||||
* TODO:
|
||||
* o Support more UUCP compatible control sequences.
|
||||
@ -373,7 +373,11 @@ char *str;
|
||||
} else {
|
||||
(void) ExpandString(str, buff+2, 1);
|
||||
}
|
||||
LogPrintf(LOG_CHAT, "sending: %s\n", buff+2);
|
||||
if (strstr(str, "\\P")) { /* Do not log the password itself. */
|
||||
LogPrintf(LOG_CHAT, "sending: %s\n", str);
|
||||
} else {
|
||||
LogPrintf(LOG_CHAT, "sending: %s\n", buff+2);
|
||||
}
|
||||
cp = buff;
|
||||
if (DEV_IS_SYNC)
|
||||
bcopy("\377\003", buff, 2); /* Prepend HDLC header */
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <net/route.h>
|
||||
#include "os.h"
|
||||
#include <paths.h>
|
||||
|
||||
extern int MakeArgs();
|
||||
extern void Cleanup(), TtyTermMode(), PacketMode();
|
||||
@ -46,6 +47,7 @@ extern int LoadCommand(), SaveCommand();
|
||||
extern int ChangeParity(char *);
|
||||
extern int SelectSystem();
|
||||
extern int ShowRoute();
|
||||
extern void TtyOldMode(), TtyCommandMode();
|
||||
extern struct pppvars pppVars;
|
||||
|
||||
struct in_addr ifnetmask;
|
||||
@ -53,6 +55,7 @@ struct in_addr ifnetmask;
|
||||
static int ShowCommand(), TerminalCommand(), QuitCommand();
|
||||
static int CloseCommand(), DialCommand(), DownCommand();
|
||||
static int SetCommand(), AddCommand(), DeleteCommand();
|
||||
static int ShellCommand();
|
||||
|
||||
static int
|
||||
HelpCommand(list, argc, argv, plist)
|
||||
@ -93,11 +96,11 @@ IsInteractive()
|
||||
char *mes = NULL;
|
||||
|
||||
if (mode & MODE_AUTO)
|
||||
mes = "Working as auto mode.";
|
||||
mes = "Working in auto mode.";
|
||||
else if (mode & MODE_DIRECT)
|
||||
mes = "Working as direct mode.";
|
||||
mes = "Working in direct mode.";
|
||||
else if (mode & MODE_DEDICATED)
|
||||
mes = "Workring as dedicated mode.";
|
||||
mes = "Working in dedicated mode.";
|
||||
if (mes) {
|
||||
printf("%s\n", mes);
|
||||
return(0);
|
||||
@ -137,6 +140,66 @@ char **argv;
|
||||
return(1);
|
||||
}
|
||||
|
||||
static int
|
||||
ShellCommand(cmdlist, argc, argv)
|
||||
struct cmdtab *cmdlist;
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
const char *shell;
|
||||
pid_t shpid;
|
||||
|
||||
if((shell = getenv("SHELL")) == 0) {
|
||||
shell = _PATH_BSHELL;
|
||||
}
|
||||
|
||||
#ifndef HAVE_SHELL_CMD_WITH_ANY_MODE
|
||||
if( mode != MODE_INTER) {
|
||||
fprintf(stdout,
|
||||
"Can start an shell only in interactive mode\n");
|
||||
return(1);
|
||||
}
|
||||
#else
|
||||
if(argc == 0 && !(mode & MODE_INTER)) {
|
||||
fprintf(stderr,
|
||||
"Can start an interactive shell only in interactive mode\n");
|
||||
return(1);
|
||||
}
|
||||
#endif /* HAVE_SHELL_CMD_WITH_ANY_MODE */
|
||||
|
||||
if((shpid = fork()) == 0) {
|
||||
int i;
|
||||
for(i = 3; i < getdtablesize(); i++)
|
||||
(void)close(i);
|
||||
|
||||
/*
|
||||
* We are running setuid, we should change to
|
||||
* real user for avoiding security problems.
|
||||
*/
|
||||
setgid( getgid() );
|
||||
setuid( getuid() );
|
||||
|
||||
TtyOldMode();
|
||||
if(argc > 0)
|
||||
execvp(argv[0], argv);
|
||||
else
|
||||
execl(shell, shell, NULL);
|
||||
|
||||
fprintf(stdout, "exec() of %s failed\n", argc > 0? argv[0]: shell);
|
||||
exit(255);
|
||||
}
|
||||
if( shpid == (pid_t)-1 ) {
|
||||
fprintf(stdout, "Fork failed\n");
|
||||
} else {
|
||||
int status;
|
||||
(void)waitpid(shpid, &status, 0);
|
||||
}
|
||||
|
||||
TtyCommandMode(1);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static char StrOption[] = "option ..";
|
||||
static char StrRemote[] = "[remote]";
|
||||
char StrNull[] = "";
|
||||
@ -168,6 +231,8 @@ struct cmdtab Commands[] = {
|
||||
"Save settings", StrNull},
|
||||
{ "set", "setup", SetCommand, LOCAL_AUTH,
|
||||
"Set parameters", "var value"},
|
||||
{ "shell", "!", ShellCommand, LOCAL_AUTH,
|
||||
"Run a subshell", "[sh command]"},
|
||||
{ "show", NULL, ShowCommand, LOCAL_AUTH,
|
||||
"Show status and statictics", "var"},
|
||||
{ "term", NULL, TerminalCommand,LOCAL_AUTH,
|
||||
|
@ -15,7 +15,7 @@
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $Id:$
|
||||
* $Id: defs.h,v 1.2 1995/02/26 12:17:25 amurai Exp $
|
||||
*
|
||||
* TODO:
|
||||
*/
|
||||
@ -38,7 +38,7 @@
|
||||
*/
|
||||
#define LOGFILE "/var/log/ppp.log" /* Name of log file */
|
||||
#ifdef __FreeBSD__
|
||||
#define MODEM_DEV "/dev/cua01" /* name of tty device */
|
||||
#define MODEM_DEV "/dev/cuaa1" /* name of tty device */
|
||||
#else
|
||||
#define MODEM_DEV "/dev/tty01" /* name of tty device */
|
||||
#endif
|
||||
|
@ -59,6 +59,7 @@ extern void DecodeCommand(), Prompt();
|
||||
extern int IsInteractive();
|
||||
extern struct in_addr ifnetmask;
|
||||
static void DoLoop(void);
|
||||
static void TerminalStop();
|
||||
|
||||
static struct termios oldtio; /* Original tty mode */
|
||||
static struct termios comtio; /* Command level tty mode */
|
||||
@ -91,8 +92,9 @@ TtyInit()
|
||||
/*
|
||||
* Set tty into command mode. We allow canonical input and echo processing.
|
||||
*/
|
||||
static void
|
||||
TtyCommandMode()
|
||||
void
|
||||
TtyCommandMode(prompt)
|
||||
int prompt;
|
||||
{
|
||||
struct termios newtio;
|
||||
int stat;
|
||||
@ -100,7 +102,7 @@ TtyCommandMode()
|
||||
if (!(mode & MODE_INTER))
|
||||
return;
|
||||
tcgetattr(0, &newtio);
|
||||
newtio.c_lflag |= (ECHO|ICANON);
|
||||
newtio.c_lflag |= (ECHO|ISIG|ICANON);
|
||||
newtio.c_iflag = oldtio.c_iflag;
|
||||
newtio.c_oflag |= OPOST;
|
||||
tcsetattr(0, TCSADRAIN, &newtio);
|
||||
@ -108,7 +110,7 @@ TtyCommandMode()
|
||||
stat |= O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
TermMode = 0;
|
||||
Prompt(0);
|
||||
if(prompt) Prompt(0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -126,6 +128,17 @@ TtyTermMode()
|
||||
TermMode = 1;
|
||||
}
|
||||
|
||||
void
|
||||
TtyOldMode()
|
||||
{
|
||||
int stat;
|
||||
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
tcsetattr(0, TCSANOW, &oldtio);
|
||||
}
|
||||
|
||||
void
|
||||
Cleanup(excode)
|
||||
int excode;
|
||||
@ -133,12 +146,6 @@ int excode;
|
||||
int stat;
|
||||
|
||||
OsLinkdown();
|
||||
#ifdef notdef
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
tcsetattr(0, TCSANOW, &oldtio);
|
||||
#endif
|
||||
OsCloseLink(1);
|
||||
sleep(1);
|
||||
if (mode & MODE_AUTO)
|
||||
@ -148,12 +155,7 @@ int excode;
|
||||
LogClose();
|
||||
if (server > 0)
|
||||
close(server);
|
||||
#ifndef notdef
|
||||
stat = fcntl(0, F_GETFL, 0);
|
||||
stat &= ~O_NONBLOCK;
|
||||
fcntl(0, F_SETFL, stat);
|
||||
tcsetattr(0, TCSANOW, &oldtio);
|
||||
#endif
|
||||
TtyOldMode();
|
||||
|
||||
exit(excode);
|
||||
}
|
||||
@ -162,7 +164,6 @@ static void
|
||||
Hangup()
|
||||
{
|
||||
LogPrintf(LOG_PHASE, "SIGHUP\n");
|
||||
signal(SIGHUP, Hangup);
|
||||
Cleanup(EX_HANGUP);
|
||||
}
|
||||
|
||||
@ -174,10 +175,30 @@ CloseSession()
|
||||
Cleanup(EX_TERM);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
TerminalCont()
|
||||
{
|
||||
(void)signal(SIGCONT, SIG_DFL);
|
||||
(void)signal(SIGTSTP, TerminalStop);
|
||||
TtyCommandMode(getpgrp() == tcgetpgrp(0));
|
||||
}
|
||||
|
||||
static void
|
||||
TerminalStop(signo)
|
||||
int signo;
|
||||
{
|
||||
(void)signal(SIGCONT, TerminalCont);
|
||||
TtyOldMode();
|
||||
signal(SIGTSTP, SIG_DFL);
|
||||
kill(getpid(), signo);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Usage()
|
||||
{
|
||||
fprintf(stderr, "Usage: ppp [-auto | -direct -dedicated] [system]\n");
|
||||
fprintf(stderr, "Usage: ppp [-auto | -direct | -dedicated] [system]\n");
|
||||
exit(EX_START);
|
||||
}
|
||||
|
||||
@ -280,6 +301,7 @@ char **argv;
|
||||
signal(SIGHUP, Hangup);
|
||||
signal(SIGTERM, CloseSession);
|
||||
signal(SIGINT, CloseSession);
|
||||
signal(SIGQUIT, CloseSession);
|
||||
#ifdef SIGSEGV
|
||||
signal(SIGSEGV, Hangup);
|
||||
#endif
|
||||
@ -289,6 +311,18 @@ char **argv;
|
||||
#ifdef SIGALRM
|
||||
signal(SIGALRM, SIG_IGN);
|
||||
#endif
|
||||
if(mode & MODE_INTER)
|
||||
{
|
||||
#ifdef SIGTSTP
|
||||
signal(SIGTSTP, TerminalStop);
|
||||
#endif
|
||||
#ifdef SIGTTIN
|
||||
signal(SIGTTIN, TerminalStop);
|
||||
#endif
|
||||
#ifdef SIGTTOU
|
||||
signal(SIGTTOU, SIG_IGN);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (dstsystem) {
|
||||
if (SelectSystem(dstsystem, CONFFILE) < 0) {
|
||||
@ -348,7 +382,7 @@ char **argv;
|
||||
} else {
|
||||
server = -1;
|
||||
TtyInit();
|
||||
TtyCommandMode();
|
||||
TtyCommandMode(1);
|
||||
}
|
||||
LogPrintf(LOG_PHASE, "PPP Started.\n");
|
||||
|
||||
@ -383,7 +417,7 @@ PacketMode()
|
||||
else
|
||||
LcpOpen(VarOpenMode);
|
||||
if ((mode & (MODE_INTER|MODE_AUTO)) == MODE_INTER) {
|
||||
TtyCommandMode();
|
||||
TtyCommandMode(1);
|
||||
fprintf(stderr, "Packet mode.\r\n");
|
||||
}
|
||||
}
|
||||
@ -391,7 +425,7 @@ PacketMode()
|
||||
static void
|
||||
ShowHelp()
|
||||
{
|
||||
fprintf(stderr, "Following commands are available\r\n");
|
||||
fprintf(stderr, "The following commands are available:\r\n");
|
||||
fprintf(stderr, " ~p\tEnter to Packet mode\r\n");
|
||||
fprintf(stderr, " ~.\tTerminate program\r\n");
|
||||
}
|
||||
@ -475,7 +509,7 @@ ReadTty()
|
||||
#endif
|
||||
case '.':
|
||||
TermMode = 1;
|
||||
TtyCommandMode();
|
||||
TtyCommandMode(1);
|
||||
break;
|
||||
default:
|
||||
if (write(modem, &ch, n) < 0)
|
||||
@ -554,6 +588,9 @@ DoLoop()
|
||||
u_char rbuff[MAX_MRU];
|
||||
int dial_up;
|
||||
int qlen;
|
||||
pid_t pgroup;
|
||||
|
||||
pgroup = getpgrp();
|
||||
|
||||
if (mode & MODE_DIRECT) {
|
||||
modem = OpenModem(mode);
|
||||
@ -699,7 +736,8 @@ DoLoop()
|
||||
Prompt(0);
|
||||
}
|
||||
|
||||
if ((mode & MODE_INTER) && FD_ISSET(netfd, &rfds)) {
|
||||
if ((mode & MODE_INTER) && FD_ISSET(netfd, &rfds) &&
|
||||
pgroup == tcgetpgrp(0)) {
|
||||
/* something to read from tty */
|
||||
ReadTty();
|
||||
}
|
||||
|
@ -767,6 +767,7 @@ ShowModemStatus()
|
||||
ioctl(modem, TIOCOUTQ, &nb);
|
||||
printf("outq: %d\n", nb);
|
||||
#endif
|
||||
printf("outqlen: %d\n", ModemQlen());
|
||||
printf("DialScript = %s\n", VarDialScript);
|
||||
printf("LoginScript = %s\n", VarLoginScript);
|
||||
printf("PhoneNumber = %s\n", VarPhone);
|
||||
|
Loading…
Reference in New Issue
Block a user