- (bal) UseLogin patch for Solaris/UNICOS. Patch by Wayne Davison
<wayne@blorf.net>
This commit is contained in:
parent
387c472660
commit
97c677d4f0
|
@ -11,6 +11,8 @@
|
||||||
- mouring@cvs.openbsd.org 2001/05/08 19:45:25
|
- mouring@cvs.openbsd.org 2001/05/08 19:45:25
|
||||||
[misc.c misc.h scp.c sftp.c]
|
[misc.c misc.h scp.c sftp.c]
|
||||||
Use addargs() in sftp plus some clean up of addargs(). OK Markus
|
Use addargs() in sftp plus some clean up of addargs(). OK Markus
|
||||||
|
- (bal) UseLogin patch for Solaris/UNICOS. Patch by Wayne Davison
|
||||||
|
<wayne@blorf.net>
|
||||||
|
|
||||||
20010508
|
20010508
|
||||||
- (bal) Fixed configure test for USE_SIA.
|
- (bal) Fixed configure test for USE_SIA.
|
||||||
|
@ -5371,4 +5373,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- Released 1.0pre1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.1208 2001/05/08 20:27:25 mouring Exp $
|
$Id: ChangeLog,v 1.1209 2001/05/08 20:33:05 mouring Exp $
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: acconfig.h,v 1.110 2001/04/05 17:15:08 stevesk Exp $ */
|
/* $Id: acconfig.h,v 1.111 2001/05/08 20:33:06 mouring Exp $ */
|
||||||
|
|
||||||
#ifndef _CONFIG_H
|
#ifndef _CONFIG_H
|
||||||
#define _CONFIG_H
|
#define _CONFIG_H
|
||||||
|
@ -154,6 +154,12 @@
|
||||||
/* Define if you don't want to use wtmpx */
|
/* Define if you don't want to use wtmpx */
|
||||||
#undef DISABLE_WTMPX
|
#undef DISABLE_WTMPX
|
||||||
|
|
||||||
|
/* Some systems need a utmpx entry for /bin/login to work */
|
||||||
|
#undef LOGIN_NEEDS_UTMPX
|
||||||
|
|
||||||
|
/* Some versions of /bin/login need the TERM supplied on the commandline */
|
||||||
|
#undef LOGIN_NEEDS_TERM
|
||||||
|
|
||||||
/* Define if you want to specify the path to your lastlog file */
|
/* Define if you want to specify the path to your lastlog file */
|
||||||
#undef CONF_LASTLOG_FILE
|
#undef CONF_LASTLOG_FILE
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $Id: configure.in,v 1.283 2001/05/07 12:54:26 mouring Exp $
|
# $Id: configure.in,v 1.284 2001/05/08 20:33:06 mouring Exp $
|
||||||
|
|
||||||
AC_INIT(ssh.c)
|
AC_INIT(ssh.c)
|
||||||
|
|
||||||
|
@ -153,6 +153,8 @@ mips-sony-bsd|mips-sony-newsos4)
|
||||||
LDFLAGS="$LDFLAGS -L/usr/local/lib -R/usr/local/lib"
|
LDFLAGS="$LDFLAGS -L/usr/local/lib -R/usr/local/lib"
|
||||||
need_dash_r=1
|
need_dash_r=1
|
||||||
AC_DEFINE(PAM_SUN_CODEBASE)
|
AC_DEFINE(PAM_SUN_CODEBASE)
|
||||||
|
AC_DEFINE(LOGIN_NEEDS_UTMPX)
|
||||||
|
AC_DEFINE(LOGIN_NEEDS_TERM)
|
||||||
# hardwire lastlog location (can't detect it on some versions)
|
# hardwire lastlog location (can't detect it on some versions)
|
||||||
conf_lastlog_location="/var/adm/lastlog"
|
conf_lastlog_location="/var/adm/lastlog"
|
||||||
AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
|
AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
|
||||||
|
|
23
loginrec.c
23
loginrec.c
|
@ -163,7 +163,7 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "atomicio.h"
|
#include "atomicio.h"
|
||||||
|
|
||||||
RCSID("$Id: loginrec.c,v 1.32 2001/02/22 21:23:21 stevesk Exp $");
|
RCSID("$Id: loginrec.c,v 1.33 2001/05/08 20:33:06 mouring Exp $");
|
||||||
|
|
||||||
#ifdef HAVE_UTIL_H
|
#ifdef HAVE_UTIL_H
|
||||||
# include <util.h>
|
# include <util.h>
|
||||||
|
@ -443,6 +443,27 @@ login_write (struct logininfo *li)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
int
|
||||||
|
login_utmp_only(struct logininfo *li)
|
||||||
|
{
|
||||||
|
li->type = LTYPE_LOGIN;
|
||||||
|
# ifdef USE_UTMP
|
||||||
|
utmp_write_entry(li);
|
||||||
|
# endif
|
||||||
|
# ifdef USE_WTMP
|
||||||
|
wtmp_write_entry(li);
|
||||||
|
# endif
|
||||||
|
# ifdef USE_UTMPX
|
||||||
|
utmpx_write_entry(li);
|
||||||
|
# endif
|
||||||
|
# ifdef USE_WTMPX
|
||||||
|
wtmpx_write_entry(li);
|
||||||
|
# endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** getlast_entry: Call low-level functions to retrieve the last login
|
** getlast_entry: Call low-level functions to retrieve the last login
|
||||||
** time.
|
** time.
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
/* RCSID("$Id: loginrec.h,v 1.5 2001/02/05 12:42:18 stevesk Exp $"); */
|
/* RCSID("$Id: loginrec.h,v 1.6 2001/05/08 20:33:06 mouring Exp $"); */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
** you should use the login_* calls to work around platform dependencies
|
** you should use the login_* calls to work around platform dependencies
|
||||||
|
@ -110,6 +110,9 @@ void login_set_current_time(struct logininfo *li);
|
||||||
/* record the entry */
|
/* record the entry */
|
||||||
int login_login (struct logininfo *li);
|
int login_login (struct logininfo *li);
|
||||||
int login_logout(struct logininfo *li);
|
int login_logout(struct logininfo *li);
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
int login_utmp_only(struct logininfo *li);
|
||||||
|
#endif
|
||||||
|
|
||||||
/** End of public functions */
|
/** End of public functions */
|
||||||
|
|
||||||
|
|
38
session.c
38
session.c
|
@ -127,6 +127,9 @@ void session_proctitle(Session *s);
|
||||||
void do_exec_pty(Session *s, const char *command);
|
void do_exec_pty(Session *s, const char *command);
|
||||||
void do_exec_no_pty(Session *s, const char *command);
|
void do_exec_no_pty(Session *s, const char *command);
|
||||||
void do_login(Session *s, const char *command);
|
void do_login(Session *s, const char *command);
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
void do_pre_login(Session *s);
|
||||||
|
#endif
|
||||||
void do_child(Session *s, const char *command);
|
void do_child(Session *s, const char *command);
|
||||||
void do_motd(void);
|
void do_motd(void);
|
||||||
int check_quietlogin(Session *s, const char *command);
|
int check_quietlogin(Session *s, const char *command);
|
||||||
|
@ -644,6 +647,10 @@ do_exec_pty(Session *s, const char *command)
|
||||||
#ifndef HAVE_OSF_SIA
|
#ifndef HAVE_OSF_SIA
|
||||||
if (!(options.use_login && command == NULL))
|
if (!(options.use_login && command == NULL))
|
||||||
do_login(s, command);
|
do_login(s, command);
|
||||||
|
# ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
else
|
||||||
|
do_pre_login(s);
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Do common processing for the child, such as execing the command. */
|
/* Do common processing for the child, such as execing the command. */
|
||||||
|
@ -687,6 +694,34 @@ do_exec_pty(Session *s, const char *command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
void
|
||||||
|
do_pre_login(Session *s)
|
||||||
|
{
|
||||||
|
socklen_t fromlen;
|
||||||
|
struct sockaddr_storage from;
|
||||||
|
pid_t pid = getpid();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get IP address of client. If the connection is not a socket, let
|
||||||
|
* the address be 0.0.0.0.
|
||||||
|
*/
|
||||||
|
memset(&from, 0, sizeof(from));
|
||||||
|
if (packet_connection_is_on_socket()) {
|
||||||
|
fromlen = sizeof(from);
|
||||||
|
if (getpeername(packet_get_connection_in(),
|
||||||
|
(struct sockaddr *) & from, &fromlen) < 0) {
|
||||||
|
debug("getpeername: %.100s", strerror(errno));
|
||||||
|
fatal_cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
record_utmp_only(pid, s->tty, s->pw->pw_name,
|
||||||
|
get_remote_name_or_ip(utmp_len, options.reverse_mapping_check),
|
||||||
|
(struct sockaddr *)&from);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* administrative, login(1)-like work */
|
/* administrative, login(1)-like work */
|
||||||
void
|
void
|
||||||
do_login(Session *s, const char *command)
|
do_login(Session *s, const char *command)
|
||||||
|
@ -1511,6 +1546,9 @@ do_child(Session *s, const char *command)
|
||||||
/* Launch login(1). */
|
/* Launch login(1). */
|
||||||
|
|
||||||
execl(LOGIN_PROGRAM, "login", "-h", hostname,
|
execl(LOGIN_PROGRAM, "login", "-h", hostname,
|
||||||
|
#ifdef LOGIN_NEEDS_TERM
|
||||||
|
s->term? s->term : "unknown",
|
||||||
|
#endif
|
||||||
"-p", "-f", "--", pw->pw_name, NULL);
|
"-p", "-f", "--", pw->pw_name, NULL);
|
||||||
|
|
||||||
/* Login couldn't be executed, die. */
|
/* Login couldn't be executed, die. */
|
||||||
|
|
14
sshlogin.c
14
sshlogin.c
|
@ -77,6 +77,20 @@ record_login(pid_t pid, const char *ttyname, const char *user, uid_t uid,
|
||||||
login_free_entry(li);
|
login_free_entry(li);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
void
|
||||||
|
record_utmp_only(pid_t pid, const char *ttyname, const char *user,
|
||||||
|
const char *host, struct sockaddr * addr)
|
||||||
|
{
|
||||||
|
struct logininfo *li;
|
||||||
|
|
||||||
|
li = login_alloc_entry(pid, user, host, ttyname);
|
||||||
|
login_set_addr(li, addr, sizeof(struct sockaddr));
|
||||||
|
login_utmp_only(li);
|
||||||
|
login_free_entry(li);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Records that the user has logged out. */
|
/* Records that the user has logged out. */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -31,6 +31,15 @@ void
|
||||||
record_login(pid_t pid, const char *ttyname, const char *user, uid_t uid,
|
record_login(pid_t pid, const char *ttyname, const char *user, uid_t uid,
|
||||||
const char *host, struct sockaddr *addr);
|
const char *host, struct sockaddr *addr);
|
||||||
|
|
||||||
|
#ifdef LOGIN_NEEDS_UTMPX
|
||||||
|
/*
|
||||||
|
* Record just the utmp info for /bin/login.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
record_utmp_only(pid_t pid, const char *ttyname, const char *user,
|
||||||
|
const char *host, struct sockaddr * addr);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Records that the user has logged out. This does many thigs normally done
|
* Records that the user has logged out. This does many thigs normally done
|
||||||
* by login(1) or init.
|
* by login(1) or init.
|
||||||
|
|
Loading…
Reference in New Issue