|
/*
|
|
* Copyright (c) 2003-2007 Andrea Luzzardi <scox@sig11.org>
|
|
*
|
|
* This file is part of the pam_usb project. pam_usb is free software;
|
|
* you can redistribute it and/or modify it under the terms of the GNU General
|
|
* Public License version 2, as published by the Free Software Foundation.
|
|
*
|
|
* pam_usb is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
* Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <utmp.h>
|
|
#include "log.h"
|
|
#include "conf.h"
|
|
|
|
int pusb_local_login(t_pusb_options *opts, const char *user)
|
|
{
|
|
struct utmp utsearch;
|
|
struct utmp *utent;
|
|
const char *from;
|
|
int i;
|
|
|
|
log_debug("Checking whether the caller is local or not...\n");
|
|
from = ttyname(STDIN_FILENO);
|
|
if (!from || !(*from))
|
|
{
|
|
log_debug("Couldn't retrieve the tty name, aborting.\n");
|
|
return (1);
|
|
}
|
|
if (!strncmp(from, "/dev/", strlen("/dev/")))
|
|
from += strlen("/dev/");
|
|
log_debug("Authentication request from tty %s\n", from);
|
|
strncpy(utsearch.ut_line, from, sizeof(utsearch.ut_line));
|
|
setutent();
|
|
utent = getutline(&utsearch);
|
|
endutent();
|
|
if (!utent)
|
|
{
|
|
log_debug("No utmp entry found for tty \"%s\"\n",
|
|
from);
|
|
return (1);
|
|
}
|
|
for (i = 0; i < 4; ++i)
|
|
{
|
|
if (utent->ut_addr_v6[i] != 0)
|
|
{
|
|
log_error("Remote authentication request: %s\n", utent->ut_host);
|
|
return (0);
|
|
}
|
|
}
|
|
log_debug("Caller is local (good)\n");
|
|
return (1);
|
|
}
|