rfc931.c 2.09 KB
Newer Older
1
/*
2
 * $Id: rfc931.c,v 1.4 1992/08/12 04:44:34 ceder Exp $
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 * Copyright (C) 1991  Lysator Academic Computer Association.
 *
 * This file is part of the LysKOM server.
 * 
 * LysKOM is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 1, or (at your option) 
 * any later version.
 * 
 * LysKOM 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 LysKOM; see the file COPYING.  If not, write to
 * Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
 * or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
 * MA 02139, USA.
 *
 * Please mail bug reports to bug-lyskom@lysator.liu.se. 
 */

/*
 * This function retrieves the real user that owns the TCP/IP link
 * that is connecting via the IscSession "scb". The returned string
 * points to static data which is overwritten on the next call.
 *
 * Link with "-lauthuser".
 */

#include <stddef.h>
#include "isc-interface.h"
#include <m-config.h>
#include "rfc931.h"
#include <authuser.h>
39
40
#include <errno.h>
#include "log.h"
41
42
43
44

#ifdef RFC_931

char *
45
46
get_real_username(IscSession *scb,
		  char *hostname)
47
48
49
50
51
{
    unsigned long inlocal;
    unsigned long inremote;
    unsigned short local;
    unsigned short remote;
52
53
    char *result;
    time_t before, after;
54
55
56
57
58

    if (auth_fd2(scb->fd, &inlocal, &inremote,
		 &local, &remote) == -1)
 	return NULL;

59
60
61
62
63
64
65
66
    time(&before);
    result = auth_tcpuser3(inlocal, inremote, local, remote, 20);
    if (result == NULL && errno == ETIMEDOUT)
	log ("Identd request to %s timed out.\n", hostname);
    else
    {
	time(&after);
	if (difftime(after, before) > 3)
67
	    log ("Identd at %s said %s after %d seconds.\n",
68
		 hostname,
69
		 result == NULL ? "(error)" :  result,
70
71
72
73
		 (int)difftime(after, before));
    }

    return result;
74
75
}
#endif