~ubuntu-branches/ubuntu/karmic/nss/karmic-updates

« back to all changes in this revision

Viewing changes to mozilla/security/nss/lib/softoken/fipstokn.c

  • Committer: Bazaar Package Importer
  • Author(s): Alexander Sack
  • Date: 2009-06-16 13:23:47 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20090616132347-311ysb8oep74b98y
Tags: 3.12.3-0ubuntu1
* new upstream release 3.12.3 RTM (NSS_3_12_3_RTM) (LP: #387751)
* adjust patches to changed upstream code base
  - update debian/patches/38_kbsd.patch
* needs nspr >= 4.7.4
  - update debian/control
* update 85_security_load.patch to latest debian version
  - update debian/patches/85_security_load.patch
* add new symbols for 3.12.3
  - update debian/libnss3-1d.symbols

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
#include <pthread.h>
75
75
#include <dlfcn.h>
76
76
#define LIBAUDIT_NAME "libaudit.so.0"
77
 
#ifndef AUDIT_USER
78
 
#define AUDIT_USER 1005  /* message type: message from userspace */
 
77
#ifndef AUDIT_CRYPTO_TEST_USER
 
78
#define AUDIT_CRYPTO_TEST_USER          2400 /* Crypto test results */
 
79
#define AUDIT_CRYPTO_PARAM_CHANGE_USER  2401 /* Crypto attribute change */
 
80
#define AUDIT_CRYPTO_LOGIN              2402 /* Logged in as crypto officer */
 
81
#define AUDIT_CRYPTO_LOGOUT             2403 /* Logged out from crypto */
 
82
#define AUDIT_CRYPTO_KEY_USER           2404 /* Create,delete,negotiate */
 
83
#define AUDIT_CRYPTO_FAILURE_USER       2405 /* Fail decrypt,encrypt,randomize */
79
84
#endif
80
85
static void *libaudit_handle;
81
86
static int (*audit_open_func)(void);
321
326
    return rv;
322
327
}
323
328
 
 
329
#ifdef LINUX
 
330
 
 
331
int
 
332
sftk_mapLinuxAuditType(NSSAuditSeverity severity, NSSAuditType auditType)
 
333
{
 
334
    switch (auditType) {
 
335
    case NSS_AUDIT_ACCESS_KEY:
 
336
    case NSS_AUDIT_CHANGE_KEY: 
 
337
    case NSS_AUDIT_COPY_KEY:
 
338
    case NSS_AUDIT_DERIVE_KEY:
 
339
    case NSS_AUDIT_DESTROY_KEY:
 
340
    case NSS_AUDIT_DIGEST_KEY:
 
341
    case NSS_AUDIT_GENERATE_KEY: 
 
342
    case NSS_AUDIT_LOAD_KEY:
 
343
    case NSS_AUDIT_UNWRAP_KEY:
 
344
    case NSS_AUDIT_WRAP_KEY:
 
345
        return AUDIT_CRYPTO_KEY_USER;
 
346
    case NSS_AUDIT_CRYPT:
 
347
        return (severity == NSS_AUDIT_ERROR) ? AUDIT_CRYPTO_FAILURE_USER : 
 
348
                                         AUDIT_CRYPTO_KEY_USER;
 
349
    case NSS_AUDIT_FIPS_STATE:
 
350
    case NSS_AUDIT_INIT_PIN:
 
351
    case NSS_AUDIT_INIT_TOKEN:
 
352
    case NSS_AUDIT_SET_PIN:
 
353
        return AUDIT_CRYPTO_PARAM_CHANGE_USER;
 
354
    case NSS_AUDIT_SELF_TEST: 
 
355
        return AUDIT_CRYPTO_TEST_USER;
 
356
    case NSS_AUDIT_LOGIN:
 
357
        return AUDIT_CRYPTO_LOGIN;
 
358
    case NSS_AUDIT_LOGOUT:
 
359
        return AUDIT_CRYPTO_LOGOUT;
 
360
    /* we skip the fault case here so we can get compiler 
 
361
     * warnings if new 'NSSAuditType's are added without
 
362
     * added them to this list, defaults fall through */
 
363
    }
 
364
    /* default */
 
365
    return AUDIT_CRYPTO_PARAM_CHANGE_USER;
 
366
 
367
#endif
 
368
 
 
369
 
324
370
/**********************************************************************
325
371
 *
326
372
 *     FIPS 140 auditable event logging
344
390
 * - for assuming a role, the type of role, and the location of the request
345
391
 */
346
392
void
347
 
sftk_LogAuditMessage(NSSAuditSeverity severity, const char *msg)
 
393
sftk_LogAuditMessage(NSSAuditSeverity severity, NSSAuditType auditType,
 
394
                     const char *msg)
348
395
{
349
396
#ifdef NSS_AUDIT_WITH_SYSLOG
350
397
    int level;
370
417
    }
371
418
    if (libaudit_handle) {
372
419
        int audit_fd;
 
420
        int linuxAuditType;
373
421
        int result = (severity != NSS_AUDIT_ERROR); /* 1=success; 0=failed */
374
422
        char *message = PR_smprintf("NSS " SOFTOKEN_LIB_NAME ": %s", msg);
375
423
        if (!message) {
380
428
            PR_smprintf_free(message);
381
429
            return;
382
430
        }
 
431
        linuxAuditType = sftk_mapLinuxAuditType(severity, auditType);
383
432
        if (audit_log_user_message_func) {
384
 
            audit_log_user_message_func(audit_fd, AUDIT_USER, message,
 
433
            audit_log_user_message_func(audit_fd, linuxAuditType, message,
385
434
                                        NULL, NULL, NULL, result);
386
435
        } else {
387
 
            audit_send_user_message_func(audit_fd, AUDIT_USER, message);
 
436
            audit_send_user_message_func(audit_fd, linuxAuditType, message);
388
437
        }
389
438
        audit_close_func(audit_fd);
390
439
        PR_smprintf_free(message);
446
495
    const char *envp;
447
496
    CK_RV crv;
448
497
 
449
 
    CHECK_FORK();
 
498
    sftk_ForkReset(pReserved, &crv);
450
499
 
451
500
    if (nsf_init) {
452
501
        return CKR_CRYPTOKI_ALREADY_INITIALIZED;
476
525
                        "C_Initialize()=0x%08lX "
477
526
                        "power-up self-tests failed",
478
527
                        (PRUint32)crv);
479
 
            sftk_LogAuditMessage(NSS_AUDIT_ERROR, msg);
 
528
            sftk_LogAuditMessage(NSS_AUDIT_ERROR, NSS_AUDIT_SELF_TEST, msg);
480
529
        }
481
530
        return crv;
482
531
    }
489
538
CK_RV FC_Finalize (CK_VOID_PTR pReserved) {
490
539
   CK_RV crv;
491
540
 
492
 
   CHECK_FORK();
 
541
   if (sftk_ForkReset(pReserved, &crv)) {
 
542
       return crv;
 
543
   }
493
544
 
494
545
   if (!nsf_init) {
495
546
      return CKR_OK;
496
547
   }
 
548
 
497
549
   crv = nsc_CommonFinalize (pReserved, PR_TRUE);
 
550
 
498
551
   nsf_init = (PRBool) !(crv == CKR_OK);
499
552
   return crv;
500
553
}
580
633
        PR_snprintf(msg,sizeof msg,
581
634
                "C_InitToken(slotID=%lu, pLabel=\"%.32s\")=0x%08lX",
582
635
                (PRUint32)slotID,pLabel,(PRUint32)crv);
583
 
        sftk_LogAuditMessage(severity, msg);
 
636
        sftk_LogAuditMessage(severity, NSS_AUDIT_INIT_TOKEN, msg);
584
637
    }
585
638
    return crv;
586
639
}
604
657
        PR_snprintf(msg,sizeof msg,
605
658
                "C_InitPIN(hSession=0x%08lX)=0x%08lX",
606
659
                (PRUint32)hSession,(PRUint32)rv);
607
 
        sftk_LogAuditMessage(severity, msg);
 
660
        sftk_LogAuditMessage(severity, NSS_AUDIT_INIT_PIN, msg);
608
661
    }
609
662
    return rv;
610
663
}
629
682
        PR_snprintf(msg,sizeof msg,
630
683
                "C_SetPIN(hSession=0x%08lX)=0x%08lX",
631
684
                (PRUint32)hSession,(PRUint32)rv);
632
 
        sftk_LogAuditMessage(severity, msg);
 
685
        sftk_LogAuditMessage(severity, NSS_AUDIT_SET_PIN, msg);
633
686
    }
634
687
    return rv;
635
688
}
699
752
        PR_snprintf(msg,sizeof msg,
700
753
                    "C_Login(hSession=0x%08lX, userType=%lu)=0x%08lX",
701
754
                    (PRUint32)hSession,(PRUint32)userType,(PRUint32)rv);
702
 
        sftk_LogAuditMessage(severity, msg);
 
755
        sftk_LogAuditMessage(severity, NSS_AUDIT_LOGIN, msg);
703
756
    }
704
757
    return rv;
705
758
}
721
774
        PR_snprintf(msg,sizeof msg,
722
775
                    "C_Logout(hSession=0x%08lX)=0x%08lX",
723
776
                    (PRUint32)hSession,(PRUint32)rv);
724
 
        sftk_LogAuditMessage(severity, msg);
 
777
        sftk_LogAuditMessage(severity, NSS_AUDIT_LOGOUT, msg);
725
778
    }
726
779
    return rv;
727
780
}
1416
1469
                        "self-test: continuous RNG test failed",
1417
1470
                        (PRUint32)hSession,pRandomData,
1418
1471
                        (PRUint32)ulRandomLen,(PRUint32)crv);
1419
 
            sftk_LogAuditMessage(NSS_AUDIT_ERROR, msg);
 
1472
            sftk_LogAuditMessage(NSS_AUDIT_ERROR, NSS_AUDIT_SELF_TEST, msg);
1420
1473
        }
1421
1474
    }
1422
1475
    return crv;