~ubuntu-branches/ubuntu/lucid/openssh/lucid

« back to all changes in this revision

Viewing changes to monitor.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2005-10-10 20:10:01 UTC
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20051010201001-rno2f5bno6e6wo6t
Tags: upstream-4.1p1
ImportĀ upstreamĀ versionĀ 4.1p1

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 */
26
26
 
27
27
#include "includes.h"
28
 
RCSID("$OpenBSD: monitor.c,v 1.61 2004/07/17 05:31:41 dtucker Exp $");
 
28
RCSID("$OpenBSD: monitor.c,v 1.63 2005/03/10 22:01:05 deraadt Exp $");
29
29
 
30
30
#include <openssl/dh.h>
31
31
 
143
143
int mm_answer_gss_checkmic(int, Buffer *);
144
144
#endif
145
145
 
 
146
#ifdef SSH_AUDIT_EVENTS
 
147
int mm_answer_audit_event(int, Buffer *);
 
148
int mm_answer_audit_command(int, Buffer *);
 
149
#endif
 
150
 
146
151
static Authctxt *authctxt;
147
152
static BIGNUM *ssh1_challenge = NULL;   /* used for ssh1 rsa auth */
148
153
 
186
191
    {MONITOR_REQ_PAM_RESPOND, MON_ISAUTH, mm_answer_pam_respond},
187
192
    {MONITOR_REQ_PAM_FREE_CTX, MON_ONCE|MON_AUTHDECIDE, mm_answer_pam_free_ctx},
188
193
#endif
 
194
#ifdef SSH_AUDIT_EVENTS
 
195
    {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event},
 
196
#endif
189
197
#ifdef BSD_AUTH
190
198
    {MONITOR_REQ_BSDAUTHQUERY, MON_ISAUTH, mm_answer_bsdauthquery},
191
199
    {MONITOR_REQ_BSDAUTHRESPOND, MON_AUTH,mm_answer_bsdauthrespond},
211
219
    {MONITOR_REQ_PTY, 0, mm_answer_pty},
212
220
    {MONITOR_REQ_PTYCLEANUP, 0, mm_answer_pty_cleanup},
213
221
    {MONITOR_REQ_TERM, 0, mm_answer_term},
 
222
#ifdef SSH_AUDIT_EVENTS
 
223
    {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event},
 
224
    {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT, mm_answer_audit_command},
 
225
#endif
214
226
    {0, 0, NULL}
215
227
};
216
228
 
239
251
    {MONITOR_REQ_PAM_RESPOND, MON_ISAUTH, mm_answer_pam_respond},
240
252
    {MONITOR_REQ_PAM_FREE_CTX, MON_ONCE|MON_AUTHDECIDE, mm_answer_pam_free_ctx},
241
253
#endif
 
254
#ifdef SSH_AUDIT_EVENTS
 
255
    {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event},
 
256
#endif
242
257
    {0, 0, NULL}
243
258
};
244
259
 
246
261
    {MONITOR_REQ_PTY, MON_ONCE, mm_answer_pty},
247
262
    {MONITOR_REQ_PTYCLEANUP, MON_ONCE, mm_answer_pty_cleanup},
248
263
    {MONITOR_REQ_TERM, 0, mm_answer_term},
 
264
#ifdef SSH_AUDIT_EVENTS
 
265
    {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event},
 
266
    {MONITOR_REQ_AUDIT_COMMAND, MON_ONCE, mm_answer_audit_command},
 
267
#endif
249
268
    {0, 0, NULL}
250
269
};
251
270
 
291
310
        authctxt = _authctxt;
292
311
        memset(authctxt, 0, sizeof(*authctxt));
293
312
 
 
313
        authctxt->loginmsg = &loginmsg;
 
314
 
294
315
        if (compat20) {
295
316
                mon_dispatch = mon_dispatch_proto20;
296
317
 
609
630
        if (options.use_pam)
610
631
                monitor_permit(mon_dispatch, MONITOR_REQ_PAM_START, 1);
611
632
#endif
 
633
#ifdef SSH_AUDIT_EVENTS
 
634
        monitor_permit(mon_dispatch, MONITOR_REQ_AUDIT_COMMAND, 1);
 
635
#endif
612
636
 
613
637
        return (0);
614
638
}
810
834
        ret = do_pam_account();
811
835
 
812
836
        buffer_put_int(m, ret);
 
837
        buffer_append(&loginmsg, "\0", 1);
 
838
        buffer_put_cstring(m, buffer_ptr(&loginmsg));
 
839
        buffer_clear(&loginmsg);
813
840
 
814
841
        mm_request_send(sock, MONITOR_ANS_PAM_ACCOUNT, m);
815
842
 
951
978
        debug3("%s: key_from_blob: %p", __func__, key);
952
979
 
953
980
        if (key != NULL && authctxt->valid) {
954
 
                switch(type) {
 
981
                switch (type) {
955
982
                case MM_USERKEY:
956
983
                        allowed = options.pubkey_authentication &&
957
984
                            user_key_allowed(authctxt->pw, key);
1297
1324
        int rsafail;
1298
1325
 
1299
1326
        /* Turn off permissions */
1300
 
        monitor_permit(mon_dispatch, MONITOR_REQ_SESSKEY, 1);
 
1327
        monitor_permit(mon_dispatch, MONITOR_REQ_SESSKEY, 0);
1301
1328
 
1302
1329
        if ((p = BN_new()) == NULL)
1303
1330
                fatal("%s: BN_new", __func__);
1488
1515
        exit(res);
1489
1516
}
1490
1517
 
 
1518
#ifdef SSH_AUDIT_EVENTS
 
1519
/* Report that an audit event occurred */
 
1520
int
 
1521
mm_answer_audit_event(int socket, Buffer *m)
 
1522
{
 
1523
        ssh_audit_event_t event;
 
1524
 
 
1525
        debug3("%s entering", __func__);
 
1526
 
 
1527
        event = buffer_get_int(m);
 
1528
        switch(event) {
 
1529
        case SSH_AUTH_FAIL_PUBKEY:
 
1530
        case SSH_AUTH_FAIL_HOSTBASED:
 
1531
        case SSH_AUTH_FAIL_GSSAPI:
 
1532
        case SSH_LOGIN_EXCEED_MAXTRIES:
 
1533
        case SSH_LOGIN_ROOT_DENIED:
 
1534
        case SSH_CONNECTION_CLOSE:
 
1535
        case SSH_INVALID_USER:
 
1536
                audit_event(event);
 
1537
                break;
 
1538
        default:
 
1539
                fatal("Audit event type %d not permitted", event);
 
1540
        }
 
1541
 
 
1542
        return (0);
 
1543
}
 
1544
 
 
1545
int
 
1546
mm_answer_audit_command(int socket, Buffer *m)
 
1547
{
 
1548
        u_int len;
 
1549
        char *cmd;
 
1550
 
 
1551
        debug3("%s entering", __func__);
 
1552
        cmd = buffer_get_string(m, &len);
 
1553
        /* sanity check command, if so how? */
 
1554
        audit_run_command(cmd);
 
1555
        xfree(cmd);
 
1556
        return (0);
 
1557
}
 
1558
#endif /* SSH_AUDIT_EVENTS */
 
1559
 
1491
1560
void
1492
1561
monitor_apply_keystate(struct monitor *pmonitor)
1493
1562
{