Added support for autoconf.

Removed some *really* crufty code in addarg that would have needed
some major pounding to work on machines with sizeof(int) != sizeof(char*).

Yuck!


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@55 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Unknown User d91-jda
1995-07-19 23:10:39 +00:00
parent 29077c19ea
commit 5946bb7d89

View File

@@ -35,6 +35,8 @@
static char sccsid[] = "@(#)sys_term.c 8.4 (Berkeley) 5/30/95";
#endif /* not lint */
#include <config.h>
#include "telnetd.h"
#include "pathnames.h"
@@ -1544,6 +1546,14 @@ init_env()
* function will turn us into the login process.
*/
struct arg_val {
int size;
int argc;
char **argv;
};
int addarg(struct arg_val*, char*);
void
start_login(host, autologin, name)
char *host;
@@ -1551,8 +1561,7 @@ start_login(host, autologin, name)
char *name;
{
register char *cp;
register char **argv;
char **addarg();
struct arg_val argv;
extern char *getenv();
#ifdef UTMPX
register int pid = getpid();
@@ -1590,7 +1599,13 @@ start_login(host, autologin, name)
*
* -f : force this login, he has already been authenticated
*/
argv = addarg(0, "login");
/* init argv structure */
argv.size=0;
argv.argc=0;
argv.argv=(char**)malloc(0); /*so we can call realloc later */
addarg(&argv, "login");
#if !defined(NO_LOGIN_H)
@@ -1602,8 +1617,8 @@ start_login(host, autologin, name)
if ((auth_level < 0) || (autologin != AUTH_VALID))
# endif
{
argv = addarg(argv, "-h");
argv = addarg(argv, host);
addarg(&argv, "-h");
addarg(&argv, host);
#ifdef SOLARIS
/*
* SVR4 version of -h takes TERM= as second arg, or -
@@ -1616,12 +1631,12 @@ start_login(host, autologin, name)
strncat(termbuf, term, sizeof(termbuf) - 6);
term = termbuf;
}
argv = addarg(argv, term);
addarg(&argv, term);
#endif
}
#endif
#if !defined(NO_LOGIN_P)
argv = addarg(argv, "-p");
addarg(&argv, "-p");
#endif
#ifdef LINEMODE
/*
@@ -1642,8 +1657,8 @@ start_login(host, autologin, name)
* to start bftp instead of shell.
*/
if (bftpd) {
argv = addarg(argv, "-e");
argv = addarg(argv, BFTPPATH);
addarg(&argv, "-e");
addarg(&argv, BFTPPATH);
} else
#endif
#if defined (SecurID)
@@ -1652,7 +1667,7 @@ start_login(host, autologin, name)
* A -s is supposed to override it anyhow.
*/
if (require_SecurID)
argv = addarg(argv, "-s");
addarg(&argv, "-s");
#endif
#if defined (AUTHENTICATION)
if (auth_level < 0 || autologin != AUTH_VALID) {
@@ -1661,8 +1676,8 @@ start_login(host, autologin, name)
}
if (auth_level >= 0 && autologin == AUTH_VALID) {
# if !defined(NO_LOGIN_F)
argv = addarg(argv, "-f");
argv = addarg(argv, name);
addarg(&argv, "-f");
addarg(&argv, name);
# else
# if defined(LOGIN_R)
/*
@@ -1692,8 +1707,8 @@ start_login(host, autologin, name)
*/
# define LOGIN_HOST "localhost"
# endif
argv = addarg(argv, "-r");
argv = addarg(argv, LOGIN_HOST);
addarg(&argv, "-r");
addarg(&argv, LOGIN_HOST);
xpty = pty;
# ifndef STREAMSPTY
@@ -1736,18 +1751,18 @@ start_login(host, autologin, name)
pty = xpty;
}
# else
argv = addarg(argv, name);
addarg(&argv, name);
# endif
# endif
} /* else */ /* esc@magic.fi; removed stupid else */
#endif
if (getenv("USER")) {
argv = addarg(argv, getenv("USER"));
addarg(&argv, getenv("USER"));
#if defined(LOGIN_ARGS) && defined(NO_LOGIN_P)
{
register char **cpp;
for (cpp = environ; *cpp; cpp++) {
argv = addarg(argv, *cpp);
addarg(&argv, *cpp);
}
}
#endif
@@ -1767,9 +1782,9 @@ start_login(host, autologin, name)
else {
char **p;
argv = addarg(argv, ""); /* no login name */
addarg(&argv, ""); /* no login name */
for (p = environ; *p; p++) {
argv = addarg(argv, *p);
addarg(&argv, *p);
}
}
#endif /* SOLARIS */
@@ -1786,14 +1801,31 @@ start_login(host, autologin, name)
sleep(1);
if (k_hasafs())
k_setpag(); /* Put users process in an new pag */
execv(_PATH_LOGIN, argv);
execv(_PATH_LOGIN, argv.argv);
syslog(LOG_ERR, "%s: %m\n", _PATH_LOGIN);
fatalperror(net, _PATH_LOGIN);
/*NOTREACHED*/
}
char **
int addarg(struct arg_val *argv, char *val)
{
if(argv->size <= argv->argc+1){
argv->argv = (char**)realloc(argv->argv, sizeof(char*) * (argv->size + 10));
if(argv->argv == NULL)
return 1; /* this should probably be handled better */
argv->size+=10;
}
argv->argv[argv->argc++]=val;
argv->argv[argv->argc]=NULL;
return 0;
}
#if 0 /* Ick!! */
char **
addarg(argv, val)
register char **argv;
register char *val;
@@ -1825,6 +1857,8 @@ addarg(argv, val)
*cpp = 0;
return(argv);
}
#endif /* 0 */
#endif /* NEWINIT */
/*