~ubuntu-branches/ubuntu/breezy/pam/breezy

« back to all changes in this revision

Viewing changes to Linux-PAM/modules/pam_unix/pam_unix_sess.c

  • Committer: Bazaar Package Importer
  • Author(s): Sam Hartman
  • Date: 2004-06-28 14:28:08 UTC
  • mfrom: (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20040628142808-adikk7vtfg3pzcjw
Tags: 0.76-22
* Add uploaders
* Document location of repository
* Fix options containing arguments in pam_unix, Closes: #254904

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * $Id: pam_unix_sess.c,v 1.1 2001/04/29 04:17:39 hartmans Exp $
 
3
 *
 
4
 * Copyright Alexander O. Yuriev, 1996.  All rights reserved.
 
5
 * Copyright Jan R�korajski, 1999.  All rights reserved.
 
6
 *
 
7
 * Redistribution and use in source and binary forms, with or without
 
8
 * modification, are permitted provided that the following conditions
 
9
 * are met:
 
10
 * 1. Redistributions of source code must retain the above copyright
 
11
 *    notice, and the entire permission notice in its entirety,
 
12
 *    including the disclaimer of warranties.
 
13
 * 2. Redistributions in binary form must reproduce the above copyright
 
14
 *    notice, this list of conditions and the following disclaimer in the
 
15
 *    documentation and/or other materials provided with the distribution.
 
16
 * 3. The name of the author may not be used to endorse or promote
 
17
 *    products derived from this software without specific prior
 
18
 *    written permission.
 
19
 * 
 
20
 * ALTERNATIVELY, this product may be distributed under the terms of
 
21
 * the GNU Public License, in which case the provisions of the GPL are
 
22
 * required INSTEAD OF the above restrictions.  (This clause is
 
23
 * necessary due to a potential bad interaction between the GPL and
 
24
 * the restrictions contained in a BSD-style copyright.)
 
25
 * 
 
26
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
 
27
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 
28
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
29
 * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 
30
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
31
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
32
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
33
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 
34
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 
35
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 
36
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 
37
 */
 
38
 
 
39
#include <security/_pam_aconf.h>
 
40
 
 
41
#include <stdio.h>
 
42
#include <stdlib.h>
 
43
#include <stdarg.h>
 
44
#include <unistd.h>
 
45
#include <syslog.h>
 
46
#include <fcntl.h>
 
47
#include <sys/types.h>
 
48
#include <sys/stat.h>
 
49
 
 
50
/* indicate the following groups are defined */
 
51
 
 
52
#define PAM_SM_SESSION
 
53
 
 
54
#include <security/_pam_macros.h>
 
55
#include <security/pam_modules.h>
 
56
 
 
57
#ifndef LINUX_PAM
 
58
#include <security/pam_appl.h>
 
59
#endif                          /* LINUX_PAM */
 
60
 
 
61
#include "support.h"
 
62
 
 
63
/*
 
64
 * PAM framework looks for these entry-points to pass control to the
 
65
 * session module.
 
66
 */
 
67
 
 
68
PAM_EXTERN int pam_sm_open_session(pam_handle_t * pamh, int flags,
 
69
                                   int argc, const char **argv)
 
70
{
 
71
        char *user_name, *service;
 
72
        unsigned int ctrl;
 
73
        int retval;
 
74
 
 
75
        D(("called."));
 
76
 
 
77
        ctrl = _set_ctrl(pamh, flags, NULL, argc, argv);
 
78
 
 
79
        retval = pam_get_item(pamh, PAM_USER, (void *) &user_name);
 
80
        if (user_name == NULL || retval != PAM_SUCCESS) {
 
81
                _log_err(LOG_CRIT, pamh,
 
82
                         "open_session - error recovering username");
 
83
                return PAM_SESSION_ERR;         /* How did we get authenticated with
 
84
                                                   no username?! */
 
85
        }
 
86
        retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service);
 
87
        if (service == NULL || retval != PAM_SUCCESS) {
 
88
                _log_err(LOG_CRIT, pamh,
 
89
                         "open_session - error recovering service");
 
90
                return PAM_SESSION_ERR;
 
91
        }
 
92
        _log_err(LOG_INFO, pamh, "session opened for user %s by %s(uid=%d)"
 
93
                 ,user_name
 
94
                 ,PAM_getlogin() == NULL ? "" : PAM_getlogin(), getuid());
 
95
 
 
96
        return PAM_SUCCESS;
 
97
}
 
98
 
 
99
PAM_EXTERN int pam_sm_close_session(pam_handle_t * pamh, int flags,
 
100
                                    int argc, const char **argv)
 
101
{
 
102
        char *user_name, *service;
 
103
        unsigned int ctrl;
 
104
        int retval;
 
105
 
 
106
        D(("called."));
 
107
 
 
108
        ctrl = _set_ctrl(pamh, flags, NULL, argc, argv);
 
109
 
 
110
        retval = pam_get_item(pamh, PAM_USER, (void *) &user_name);
 
111
        if (user_name == NULL || retval != PAM_SUCCESS) {
 
112
                _log_err(LOG_CRIT, pamh,
 
113
                         "close_session - error recovering username");
 
114
                return PAM_SESSION_ERR;         /* How did we get authenticated with
 
115
                                                   no username?! */
 
116
        }
 
117
        retval = pam_get_item(pamh, PAM_SERVICE, (void *) &service);
 
118
        if (service == NULL || retval != PAM_SUCCESS) {
 
119
                _log_err(LOG_CRIT, pamh,
 
120
                         "close_session - error recovering service");
 
121
                return PAM_SESSION_ERR;
 
122
        }
 
123
        _log_err(LOG_INFO, pamh, "session closed for user %s"
 
124
                 ,user_name);
 
125
 
 
126
        return PAM_SUCCESS;
 
127
}
 
128
 
 
129
/* static module data */
 
130
#ifdef PAM_STATIC
 
131
struct pam_module _pam_unix_session_modstruct = {
 
132
    "pam_unix_session",
 
133
    NULL,
 
134
    NULL,
 
135
    NULL,
 
136
    pam_sm_open_session,
 
137
    pam_sm_close_session,
 
138
    NULL,
 
139
};
 
140
#endif
 
141