Updates for mblogin FreeBSD port
This commit is contained in:
parent
1e6a95c4b8
commit
aaae44dbd9
@ -65,6 +65,8 @@
|
||||
/* Defined if it includes *Pw functions. */
|
||||
#undef HAVE_LIBCRACK_PW
|
||||
|
||||
/* Defined if you have libutil.h */
|
||||
#undef HAVE_LIBUTIL_H
|
||||
|
||||
/* Defined if it includes *Pw functions. */
|
||||
#undef HAVE_LIBCRACK_PW
|
||||
|
@ -114,6 +114,12 @@ if test "$result" = "yes"; then
|
||||
AC_CHECK_HEADERS(crypt.h)
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB(util,login,result=yes,result=no)
|
||||
if test "$result" = "yes"; then
|
||||
LIBS="$LIBS -lutil"
|
||||
AC_CHECK_HEADERS(libutil.h)
|
||||
fi
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_DIRENT
|
||||
|
@ -7,17 +7,17 @@ include ../Makefile.global
|
||||
SRCS = commonio.c putpwent.c salt.c sgetpwent.c xmalloc.c myname.c encrypt.c \
|
||||
pwio.c shadowio.c mbpasswd.c mbuseradd.c rad64.c getdef.c pw_util.c \
|
||||
mblogin.c env.c chowntty.c shell.c basename.c pwdcheck.c pwauth.c \
|
||||
loginprompt.c utmp.c limits.c setupenv.c sub.c log.c setugid.c utent.c
|
||||
loginprompt.c utmp.c limits.c setupenv.c sub.c log.c setugid.c
|
||||
HDRS = commonio.h putpwent.h salt.h sgetpwent.h xmalloc.h myname.h encrypt.h \
|
||||
pwio.h shadowio.h mbpasswd.h mbuseradd.h rad64.h getdef.h pw_util.h \
|
||||
mblogin.h env.h chowntty.h shell.h basename.h pwdcheck.h pwauth.h \
|
||||
loginprompt.h utmp.h limits.h setupenv.h sub.h log.h setugid.h utent.h
|
||||
loginprompt.h utmp.h limits.h setupenv.h sub.h log.h setugid.h
|
||||
MBUSERADD_OBJS = mbuseradd.o
|
||||
MBPASSWD_OBJS = mbpasswd.o commonio.o pwio.o shadowio.o sgetpwent.o \
|
||||
xmalloc.o myname.o rad64.o salt.o getdef.o encrypt.o putpwent.o pw_util.o
|
||||
MBLOGIN_OBJS = getdef.o env.o chowntty.o shell.o basename.o pwdcheck.o pwauth.o encrypt.o \
|
||||
loginprompt.o utmp.o limits.o setupenv.o sub.o xmalloc.o log.o setugid.o \
|
||||
utent.o mblogin.o
|
||||
mblogin.o
|
||||
OTHER = Makefile login.defs.in
|
||||
TARGET = mbuseradd mbpasswd mblogin
|
||||
|
||||
@ -112,5 +112,4 @@ setupenv.o: ../config.h mblogin.h getdef.h xmalloc.h env.h setupenv.h
|
||||
sub.o: ../config.h mblogin.h sub.h
|
||||
log.o: ../config.h mblogin.h log.h
|
||||
setugid.o: ../config.h mblogin.h getdef.h setugid.h
|
||||
utent.o: ../config.h mblogin.h
|
||||
# End of generated dependencies
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* $Id$ */
|
||||
|
||||
#ifndef _LIMITS_H_
|
||||
#define _LIMITS_H_
|
||||
#ifndef _LIMITS_H_H
|
||||
#define _LIMITS_H_H
|
||||
|
||||
|
||||
void setup_limits(const struct passwd *);
|
||||
|
@ -12,7 +12,8 @@
|
||||
#
|
||||
|
||||
#
|
||||
# Allow user "mbse" to login and get a shell.
|
||||
# Allow user "mbse" to login and get a shell. You better leave this to "no"
|
||||
# and install ssh if you want to login using a shell.
|
||||
#
|
||||
ALLOW_MBSE no
|
||||
|
||||
@ -47,7 +48,7 @@ LOG_UNKFAIL_ENAB no
|
||||
LOG_OK_LOGINS no
|
||||
|
||||
#
|
||||
# Enable logging and display of /var/log/lastlog login time info.
|
||||
# Enable logging of lastlog login time info.
|
||||
#
|
||||
LASTLOG_ENAB yes
|
||||
|
||||
|
@ -42,12 +42,11 @@
|
||||
#endif
|
||||
#if HAVE_UTMPX_H
|
||||
#include <utmpx.h>
|
||||
#else
|
||||
#include <utmp.h>
|
||||
#endif
|
||||
#include <utmp.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <utmp.h>
|
||||
#include <ctype.h>
|
||||
#include "getdef.h"
|
||||
|
||||
#ifdef SVR4_SI86_EUA
|
||||
@ -377,8 +376,6 @@ int main(int argc, char **argv)
|
||||
*/
|
||||
wipe_clear_pass = 0;
|
||||
#endif
|
||||
printf("\nMBSE BBS v%s\n", VERSION);
|
||||
printf("%s\n\n", COPYRIGHT);
|
||||
|
||||
/*
|
||||
* Some quick initialization.
|
||||
@ -427,6 +424,14 @@ int main(int argc, char **argv)
|
||||
if (!isatty(0) || !isatty(1) || !isatty(2))
|
||||
exit(1); /* must be a terminal */
|
||||
|
||||
if (hflg) {
|
||||
/*
|
||||
* Only show this before a prompt from telnetd
|
||||
*/
|
||||
printf("\nMBSE BBS v%s\n", VERSION);
|
||||
printf("%s\n\n", COPYRIGHT);
|
||||
}
|
||||
|
||||
/*
|
||||
* Be picky if run by normal users (possible if installed setuid
|
||||
* root), but not if run by root. This way it still allows logins
|
||||
@ -586,11 +591,16 @@ top:
|
||||
* Here we try usernames on unix names and Fidonet style
|
||||
* names that are stored in the bbs userdatabase.
|
||||
* The name "bbs" is for new users, don't check the bbs userfile.
|
||||
* If allowed from login.defs accept the name "mbse".
|
||||
*/
|
||||
if (strcmp(username, "bbs") == 0) {
|
||||
FoundName = 1;
|
||||
} else {
|
||||
FoundName = 0;
|
||||
if (strcmp(username, getdef_str("NEWUSER_ACCOUNT")) == 0) {
|
||||
FoundName = 1;
|
||||
}
|
||||
if ((getdef_bool("ALLOW_MBSE") != 0) && (strcmp(username, "mbse") == 0)) {
|
||||
FoundName = 1;
|
||||
}
|
||||
if (! FoundName) {
|
||||
if ((ufp = fopen(userfile, "r"))) {
|
||||
fread(&usrconfighdr, sizeof(usrconfighdr), 1, ufp);
|
||||
while (fread(&usrconfig, usrconfighdr.recsize, 1, ufp) == 1) {
|
||||
@ -606,6 +616,22 @@ top:
|
||||
}
|
||||
}
|
||||
|
||||
if (!FoundName) {
|
||||
if (getdef_bool("ASK_NEWUSER") != 0) {
|
||||
/*
|
||||
* User entered none excisting name, offer him/her the choice
|
||||
* to register as a new user.
|
||||
*/
|
||||
login_prompt(_("Do you want to register as new user? [y/N]: "), username, sizeof username);
|
||||
if ((username[0] && (toupper(username[0]) == 'Y'))) {
|
||||
FoundName = 1;
|
||||
preauth_flag = 0;
|
||||
STRFCPY(username, getdef_str("NEWUSER_ACCOUNT"));
|
||||
syslog(LOG_WARNING, "unknown user wants to register");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((! (pwd = getpwnam(username))) || (FoundName == 0)) {
|
||||
pwent.pw_name = username;
|
||||
strcpy(temp_pw, "!");
|
||||
@ -714,11 +740,8 @@ auth_ok:
|
||||
if (getenv("IFS")) /* don't export user IFS ... */
|
||||
addenv("IFS= \t\n", NULL); /* ... instead, set a safe IFS */
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
setutmp(username, tty); /* make entry in utmp & wtmp files */
|
||||
#else
|
||||
setutmp(username, tty, hostname); /* make entry in utmp & wtmp files */
|
||||
#endif
|
||||
|
||||
if (pwent.pw_shell[0] == '*') { /* subsystem root */
|
||||
subsystem (&pwent); /* figure out what to execute */
|
||||
subroot++; /* say i was here again */
|
||||
@ -816,7 +839,6 @@ auth_ok:
|
||||
syslog(LOG_INFO, REG_LOGIN, username, fromhost);
|
||||
closelog();
|
||||
|
||||
sleep(3);
|
||||
shell (pwent.pw_shell, (char *) 0); /* exec the shell finally. */
|
||||
/*NOTREACHED*/
|
||||
return 0;
|
||||
|
@ -61,6 +61,8 @@ int pw_auth(const char *cipher, const char *user, int reason, const char *input)
|
||||
const char *cp;
|
||||
int retval;
|
||||
|
||||
printf("\n%s %s %d %s\n", cipher, user, reason, input);
|
||||
|
||||
/*
|
||||
* There are programs for adding and deleting authentication data.
|
||||
*/
|
||||
|
54
unix/utmp.c
54
unix/utmp.c
@ -38,6 +38,11 @@
|
||||
#include <utmpx.h>
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <sys/types.h>
|
||||
#include <libutil.h>
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include "utmp.h"
|
||||
@ -70,8 +75,7 @@ extern struct utmp utent;
|
||||
|
||||
#if defined(__linux__) /* XXX */
|
||||
|
||||
void
|
||||
checkutmp(int picky)
|
||||
void checkutmp(int picky)
|
||||
{
|
||||
char *line;
|
||||
struct utmp *ut;
|
||||
@ -113,14 +117,14 @@ checkutmp(int picky)
|
||||
|
||||
#elif defined(LOGIN_PROCESS)
|
||||
|
||||
void
|
||||
checkutmp(int picky)
|
||||
void checkutmp(int picky)
|
||||
{
|
||||
char *line;
|
||||
struct utmp *ut;
|
||||
#if HAVE_UTMPX_H
|
||||
struct utmpx *utx;
|
||||
#endif
|
||||
|
||||
pid_t pid = getpid();
|
||||
|
||||
#if HAVE_UTMPX_H
|
||||
@ -208,8 +212,10 @@ checkutmp(int picky)
|
||||
|
||||
#else /* !USG */
|
||||
|
||||
void
|
||||
checkutmp(int picky)
|
||||
/*
|
||||
* Also used for FreeBSD
|
||||
*/
|
||||
void checkutmp(int picky)
|
||||
{
|
||||
char *line;
|
||||
|
||||
@ -252,8 +258,7 @@ void updwtmp(const char *filename, const struct utmp *ut)
|
||||
|
||||
#ifdef HAVE_UTMPX_H
|
||||
#ifndef HAVE_UPDWTMPX
|
||||
static void
|
||||
updwtmpx(const char *filename, const struct utmpx *utx)
|
||||
static void updwtmpx(const char *filename, const struct utmpx *utx)
|
||||
{
|
||||
int fd;
|
||||
|
||||
@ -276,8 +281,7 @@ updwtmpx(const char *filename, const struct utmpx *utx)
|
||||
|
||||
#if defined(__linux__) /* XXX */
|
||||
|
||||
void
|
||||
setutmp(const char *name, const char *line, const char *host)
|
||||
void setutmp(const char *name, const char *line, const char *host)
|
||||
{
|
||||
utent.ut_type = USER_PROCESS;
|
||||
strncpy(utent.ut_user, name, sizeof utent.ut_user);
|
||||
@ -291,14 +295,14 @@ setutmp(const char *name, const char *line, const char *host)
|
||||
|
||||
#elif HAVE_UTMPX_H
|
||||
|
||||
void
|
||||
setutmp(const char *name, const char *line, const char *host)
|
||||
void setutmp(const char *name, const char *line, const char *host)
|
||||
{
|
||||
struct utmp *utmp, utline;
|
||||
struct utmpx *utmpx, utxline;
|
||||
pid_t pid = getpid ();
|
||||
int found_utmpx = 0, found_utmp = 0;
|
||||
|
||||
printf("setutmp HAVE_UTMP_H\n");
|
||||
/*
|
||||
* The canonical device name doesn't include "/dev/"; skip it
|
||||
* if it is already there.
|
||||
@ -385,10 +389,30 @@ setutmp(const char *name, const char *line, const char *host)
|
||||
utent = utline;
|
||||
}
|
||||
|
||||
#elif __FreeBSD__
|
||||
|
||||
/*
|
||||
* FreeBSD version, simple and mean.
|
||||
*/
|
||||
void setutmp(const char *name, const char *line, const char *host)
|
||||
{
|
||||
struct utmp utmp;
|
||||
|
||||
memset(&utmp, 0, sizeof(utmp));
|
||||
|
||||
strncpy(utmp.ut_line, line, (int) sizeof utmp.ut_line);
|
||||
strncpy(utmp.ut_name, name, sizeof utent.ut_name);
|
||||
strncpy(utmp.ut_host, host, sizeof utent.ut_host);
|
||||
(void) time (&utmp.ut_time);
|
||||
|
||||
login(&utmp);
|
||||
utent = utmp;
|
||||
}
|
||||
|
||||
|
||||
#else /* !SVR4 */
|
||||
|
||||
void
|
||||
setutmp(const char *name, const char *line)
|
||||
void setutmp(const char *name, const char *line)
|
||||
{
|
||||
struct utmp utmp;
|
||||
int fd;
|
||||
@ -420,9 +444,7 @@ setutmp(const char *name, const char *line)
|
||||
* while System V has the name, PID and a type.
|
||||
*/
|
||||
|
||||
#ifndef __FreeBSD__
|
||||
strncpy(utmp.ut_user, name, sizeof utent.ut_user);
|
||||
#endif
|
||||
#ifdef USER_PROCESS
|
||||
utmp.ut_type = USER_PROCESS;
|
||||
utmp.ut_pid = getpid ();
|
||||
|
@ -20,6 +20,8 @@ static void updwtmpx(const char *, const struct utmpx *);
|
||||
void setutmp(const char *, const char *, const char *);
|
||||
#elif HAVE_UTMPX_H
|
||||
void setutmp(const char *, const char *, const char *);
|
||||
#elif __FreeBSD__
|
||||
void setutmp(const char *, const char *, const char *);
|
||||
#else /* !SVR4 */
|
||||
void setutmp(const char *, const char *);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user