예제 #1
0
/*
 * Mark an acceptor context as ready for cryptographic operations
 */
static OM_uint32
acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
{
    OM_uint32 major, tmpMinor;
    VALUE_PAIR *vp;
    gss_buffer_desc nameBuf = GSS_C_EMPTY_BUFFER;

    gssEapReleaseName(&tmpMinor, &ctx->initiatorName);

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_USER_NAME, 0, &vp);
    if (major == GSS_S_COMPLETE && vp->length) {
        nameBuf.length = vp->length;
        nameBuf.value = vp->vp_strvalue;
    } else {
        ctx->gssFlags |= GSS_C_ANON_FLAG;
    }

    major = gssEapImportName(minor, &nameBuf,
                             (ctx->gssFlags & GSS_C_ANON_FLAG) ?
                                GSS_C_NT_ANONYMOUS : GSS_C_NT_USER_NAME,
                             ctx->mechanismUsed,
                             &ctx->initiatorName);
    if (GSS_ERROR(major))
        return major;

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_MS_MPPE_SEND_KEY, VENDORPEC_MS, &vp);
    if (GSS_ERROR(major)) {
        *minor = GSSEAP_KEY_UNAVAILABLE;
        return GSS_S_UNAVAILABLE;
    }

    major = sequenceInit(minor,
                         &ctx->seqState, ctx->recvSeq,
                         ((ctx->gssFlags & GSS_C_REPLAY_FLAG) != 0),
                         ((ctx->gssFlags & GSS_C_SEQUENCE_FLAG) != 0),
                         TRUE);
    if (GSS_ERROR(major))
        return major;

    major = gssEapCreateAttrContext(minor, cred, ctx,
                                    &ctx->initiatorName->attrCtx,
                                    &ctx->expiryTime);
    if (GSS_ERROR(major))
        return major;

    if (ctx->expiryTime != 0 && ctx->expiryTime < time(NULL)) {
        *minor = GSSEAP_CRED_EXPIRED;
        return GSS_S_CREDENTIALS_EXPIRED;
    }

    *minor = 0;
    return GSS_S_COMPLETE;
}
예제 #2
0
/*
 * Mark an acceptor context as ready for cryptographic operations
 */
static OM_uint32
acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
{
    OM_uint32 major, tmpMinor;
    rs_const_avp *vp;
    gss_buffer_desc nameBuf = GSS_C_EMPTY_BUFFER;

    /* Cache encryption type derived from selected mechanism OID */
    major = gssEapOidToEnctype(minor, ctx->mechanismUsed,
                               &ctx->encryptionType);
    if (GSS_ERROR(major))
        return major;

    gssEapReleaseName(&tmpMinor, &ctx->initiatorName);

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_USER_NAME, 0, &vp);
    if (major == GSS_S_COMPLETE && rs_avp_length(vp) != 0) {
        rs_avp_octets_value_byref((rs_avp *)vp,
                                  (unsigned char **)&nameBuf.value,
                                  &nameBuf.length);
    } else {
        ctx->gssFlags |= GSS_C_ANON_FLAG;
    }

    major = gssEapImportName(minor, &nameBuf,
                             (ctx->gssFlags & GSS_C_ANON_FLAG) ?
                                GSS_C_NT_ANONYMOUS : GSS_C_NT_USER_NAME,
                             ctx->mechanismUsed,
                             &ctx->initiatorName);
    if (GSS_ERROR(major))
        return major;

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_MS_MPPE_SEND_KEY, VENDORPEC_MICROSOFT, &vp);
    if (GSS_ERROR(major)) {
        *minor = GSSEAP_KEY_UNAVAILABLE;
        return GSS_S_UNAVAILABLE;
    }

    major = gssEapDeriveRfc3961Key(minor,
                                   rs_avp_octets_value_const_ptr(vp),
                                   rs_avp_length(vp),
                                   ctx->encryptionType,
                                   &ctx->rfc3961Key);
    if (GSS_ERROR(major))
        return major;

    major = rfc3961ChecksumTypeForKey(minor, &ctx->rfc3961Key,
                                       &ctx->checksumType);
    if (GSS_ERROR(major))
        return major;

    major = sequenceInit(minor,
                         &ctx->seqState, ctx->recvSeq,
                         ((ctx->gssFlags & GSS_C_REPLAY_FLAG) != 0),
                         ((ctx->gssFlags & GSS_C_SEQUENCE_FLAG) != 0),
                         TRUE);
    if (GSS_ERROR(major))
        return major;

    major = gssEapCreateAttrContext(minor, cred, ctx,
                                    &ctx->initiatorName->attrCtx,
                                    &ctx->expiryTime);
    if (GSS_ERROR(major))
        return major;

    if (ctx->expiryTime != 0 && ctx->expiryTime < time(NULL)) {
        *minor = GSSEAP_CRED_EXPIRED;
        return GSS_S_CREDENTIALS_EXPIRED;
    }

    *minor = 0;
    return GSS_S_COMPLETE;
}
int
eztrace_convert_coreblas_init()
{
    addVarType( COREBLAS_TASK_ALIAS,   COREBLAS_TASK_NAME,   "CT_Process" );
    addVarType( COREBLAS_TASKR_ALIAS,  COREBLAS_TASKR_NAME,  "CT_Process" );
    addVarType( COREBLAS_TASKWR_ALIAS, COREBLAS_TASKWR_NAME, "CT_Thread"  );

    /* Level 3 Blas */
    addEntityValue("gemm" , COREBLAS_STATE, "gemm" , GTG_YELLOW );
    addEntityValue("herk" , COREBLAS_STATE, "herk" , GTG_WHITE  );
    addEntityValue("syrk" , COREBLAS_STATE, "syrk" , GTG_WHITE  );
    addEntityValue("hemm" , COREBLAS_STATE, "hemm" , GTG_DARKPINK);
    addEntityValue("symm" , COREBLAS_STATE, "symm" , GTG_DARKPINK);
    addEntityValue("trmm" , COREBLAS_STATE, "trmm" , GTG_PURPLE );
    addEntityValue("trsm" , COREBLAS_STATE, "trsm" , GTG_RED    );
    addEntityValue("her2k", COREBLAS_STATE, "her2k", GTG_PINK   );
    addEntityValue("syr2k", COREBLAS_STATE, "syr2k", GTG_PINK   );

    /* Level 2 Blas */
    addEntityValue("gemv" , COREBLAS_STATE, "gemv" , GTG_TEAL   );
    addEntityValue("gbmv" , COREBLAS_STATE, "gbmv" , GTG_TEAL   );
    addEntityValue("hemv" , COREBLAS_STATE, "hemv" , GTG_TEAL   );
    addEntityValue("hbmv" , COREBLAS_STATE, "hbmv" , GTG_TEAL   );
    addEntityValue("hpmv" , COREBLAS_STATE, "hpmv" , GTG_TEAL   );
    addEntityValue("symv" , COREBLAS_STATE, "symv" , GTG_TEAL   );
    addEntityValue("sbmv" , COREBLAS_STATE, "sbmv" , GTG_TEAL   );
    addEntityValue("spmv" , COREBLAS_STATE, "spmv" , GTG_TEAL   );
    addEntityValue("trmv" , COREBLAS_STATE, "trmv" , GTG_TEAL   );
    addEntityValue("tbmv" , COREBLAS_STATE, "tbmv" , GTG_TEAL   );
    addEntityValue("tpmv" , COREBLAS_STATE, "tpmv" , GTG_TEAL   );
    addEntityValue("trsv" , COREBLAS_STATE, "trsv" , GTG_ORANGE );
    addEntityValue("tbsv" , COREBLAS_STATE, "tbsv" , GTG_ORANGE );
    addEntityValue("tpsv" , COREBLAS_STATE, "tpsv" , GTG_ORANGE );
    addEntityValue("ger"  , COREBLAS_STATE, "ger"  , GTG_SEABLUE   );
    addEntityValue("geru" , COREBLAS_STATE, "geru" , GTG_SEABLUE   );
    addEntityValue("gerc" , COREBLAS_STATE, "gerc" , GTG_SEABLUE   );
    addEntityValue("her"  , COREBLAS_STATE, "her"  , GTG_SEABLUE   );
    addEntityValue("hpr"  , COREBLAS_STATE, "hpr"  , GTG_SEABLUE   );
    addEntityValue("her2" , COREBLAS_STATE, "her2" , GTG_SEABLUE   );
    addEntityValue("hpr2" , COREBLAS_STATE, "hpr2" , GTG_SEABLUE   );
    addEntityValue("syr"  , COREBLAS_STATE, "syr"  , GTG_SEABLUE   );
    addEntityValue("spr"  , COREBLAS_STATE, "spr"  , GTG_SEABLUE   );
    addEntityValue("syr2" , COREBLAS_STATE, "syr2" , GTG_SEABLUE   );
    addEntityValue("spr2" , COREBLAS_STATE, "spr2" , GTG_SEABLUE   );

    /* Level 1 BLAS */
    addEntityValue("rotg" , COREBLAS_STATE, "rotg" , GTG_PURPLE   );
    addEntityValue("rotmg", COREBLAS_STATE, "rotmg", GTG_PURPLE   );
    addEntityValue("rot"  , COREBLAS_STATE, "rot"  , GTG_PURPLE   );
    addEntityValue("rotm" , COREBLAS_STATE, "rotm" , GTG_PURPLE   );
    addEntityValue("swap" , COREBLAS_STATE, "swap" , GTG_ORANGE   );
    addEntityValue("scal" , COREBLAS_STATE, "scal" , GTG_ORANGE   );
    addEntityValue("copy" , COREBLAS_STATE, "copy" , GTG_ORANGE   );
    addEntityValue("axpy" , COREBLAS_STATE, "axpy" , GTG_ORANGE   );
    addEntityValue("dot"  , COREBLAS_STATE, "dot"  , GTG_LIGHTPINK);
    addEntityValue("dotu" , COREBLAS_STATE, "dotu" , GTG_LIGHTPINK);
    addEntityValue("dotc" , COREBLAS_STATE, "dotc" , GTG_LIGHTPINK);
    addEntityValue("xdot" , COREBLAS_STATE, "xdot" , GTG_LIGHTPINK);
    addEntityValue("nrm2" , COREBLAS_STATE, "nrm2" , GTG_LIGHTPINK);
    addEntityValue("asum" , COREBLAS_STATE, "asum" , GTG_LIGHTPINK);
    addEntityValue("amax" , COREBLAS_STATE, "amax" , GTG_LIGHTPINK);

    /* Lapack */
    addEntityValue("lacpy", COREBLAS_STATE, "lacpy", GTG_LIGHTPINK );
    addEntityValue("lange", COREBLAS_STATE, "lange", GTG_LIGHTPINK );
    addEntityValue("lanhe", COREBLAS_STATE, "lanhe", GTG_LIGHTPINK );
    addEntityValue("lansy", COREBLAS_STATE, "lansy", GTG_LIGHTPINK );
    addEntityValue("larfb", COREBLAS_STATE, "larfb", GTG_YELLOW    );
    addEntityValue("larft", COREBLAS_STATE, "larft", GTG_RED       );
    addEntityValue("laswp", COREBLAS_STATE, "laswp", GTG_ORANGE    );
    addEntityValue("lauum", COREBLAS_STATE, "lauum", GTG_LIGHTPINK );
    addEntityValue("potrf", COREBLAS_STATE, "potrf", GTG_GREEN     );
    addEntityValue("trtri", COREBLAS_STATE, "trtri", GTG_LIGHTPINK );
    addEntityValue("laset", COREBLAS_STATE, "laset", GTG_LIGHTPINK );

    /* PLASMA coreblas */
    addEntityValue("gelqt", COREBLAS_STATE, "gelqt", GTG_GREEN     );
    addEntityValue("geqrt", COREBLAS_STATE, "geqrt", GTG_GREEN     );
    addEntityValue("gessm", COREBLAS_STATE, "gessm", GTG_BLUE      );
    addEntityValue("getrf", COREBLAS_STATE, "getrf", GTG_GREEN     );
    addEntityValue("getro", COREBLAS_STATE, "getro", GTG_ORANGE    );
    addEntityValue("ssssm", COREBLAS_STATE, "ssssm", GTG_YELLOW    );
    addEntityValue("titro", COREBLAS_STATE, "titro", GTG_LIGHTPINK );
    addEntityValue("trbmm", COREBLAS_STATE, "trbmm", GTG_BLUE      );
    addEntityValue("trgmm", COREBLAS_STATE, "trgmm", GTG_BLUE      );
    addEntityValue("tslqt", COREBLAS_STATE, "tslqt", GTG_RED       );
    addEntityValue("tsmlq", COREBLAS_STATE, "tsmlq", GTG_YELLOW    );
    addEntityValue("tsmqr", COREBLAS_STATE, "tsmqr", GTG_YELLOW    );
    addEntityValue("tsqrt", COREBLAS_STATE, "tsqrt", GTG_RED       );
    addEntityValue("tsrfb", COREBLAS_STATE, "tsrfb", GTG_BLUE      );
    addEntityValue("tstrf", COREBLAS_STATE, "tstrf", GTG_BLUE      );
    addEntityValue("ttlqt", COREBLAS_STATE, "ttlqt", GTG_REDBLOOD  );
    addEntityValue("ttmlq", COREBLAS_STATE, "ttmlq", GTG_ORANGE    );
    addEntityValue("ttmqr", COREBLAS_STATE, "ttmqr", GTG_ORANGE    );
    addEntityValue("ttqrt", COREBLAS_STATE, "ttqrt", GTG_REDBLOOD  );
    addEntityValue("ttrfb", COREBLAS_STATE, "ttrfb", GTG_SEABLUE   );
    addEntityValue("unmlq", COREBLAS_STATE, "unmlq", GTG_YELLOW    );
    addEntityValue("unmqr", COREBLAS_STATE, "unmqr", GTG_YELLOW    );
    addEntityValue("getrip",COREBLAS_STATE, "getrip",GTG_LIGHTPINK );
    addEntityValue("plghe", COREBLAS_STATE, "plghe", GTG_LIGHTPINK );
    addEntityValue("plgsy", COREBLAS_STATE, "plgsy", GTG_LIGHTPINK );
    addEntityValue("shift", COREBLAS_STATE, "shift", GTG_LIGHTPINK );
    addEntityValue("shiftw",COREBLAS_STATE, "shiftw",GTG_LIGHTPINK );
    addEntityValue("swpab", COREBLAS_STATE, "swpab", GTG_LIGHTPINK );
    addEntityValue("plrnt", COREBLAS_STATE, "plrnt", GTG_LIGHTPINK );

    addEntityValue("brdalg", COREBLAS_STATE, "brdalg", GTG_LIGHTPINK );
    addEntityValue("trdalg", COREBLAS_STATE, "trdalg", GTG_LIGHTPINK );
    addEntityValue("hegst",  COREBLAS_STATE, "hegst",  GTG_LIGHTPINK );
    addEntityValue("sygst",  COREBLAS_STATE, "sygst",  GTG_LIGHTPINK );
    addEntityValue("herfb",  COREBLAS_STATE, "herfb",  GTG_LIGHTPINK );
    addEntityValue("syrfb",  COREBLAS_STATE, "syrfb",  GTG_LIGHTPINK );

    /* plasma coreblas */
    addEntityValue ("wait", COREBLAS_STATE, "wait", GTG_BLACK );

#ifdef TRACE_BY_SEQUENCE
    sequenceInit();
#endif
    return 0;
}
예제 #4
0
/*
 * Mark an acceptor context as ready for cryptographic operations
 */
static OM_uint32
acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
{
    OM_uint32 major, tmpMinor;
#ifdef MECH_EAP
    VALUE_PAIR *vp;
    gss_buffer_desc nameBuf = GSS_C_EMPTY_BUFFER;


    /* Cache encryption type derived from selected mechanism OID */
    major = gssEapOidToEnctype(minor, ctx->mechanismUsed,
                               &ctx->encryptionType);
#else
    /* Cache encryption type specified by IdP */
    major = krbStringToEnctype(gl_encryption_type, &ctx->encryptionType);
#endif
    if (GSS_ERROR(major))
        return major;

#ifdef MECH_EAP
    gssEapReleaseName(&tmpMinor, &ctx->initiatorName);

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_USER_NAME, 0, &vp);
    if (major == GSS_S_COMPLETE && vp->length) {
        nameBuf.length = vp->length;
        nameBuf.value = vp->vp_strvalue;
    } else {
        ctx->gssFlags |= GSS_C_ANON_FLAG;
    }

    major = gssEapImportName(minor, &nameBuf,
                             (ctx->gssFlags & GSS_C_ANON_FLAG) ?
                             GSS_C_NT_ANONYMOUS : GSS_C_NT_USER_NAME,
                             ctx->mechanismUsed,
                             &ctx->initiatorName);
    if (GSS_ERROR(major))
        return major;

    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
                                  PW_MS_MPPE_SEND_KEY, VENDORPEC_MS, &vp);
    if (GSS_ERROR(major)) {
        *minor = GSSEAP_KEY_UNAVAILABLE;
        return GSS_S_UNAVAILABLE;
    }

    major = gssEapDeriveRfc3961Key(minor,
                                   rs_avp_octets_value_const_ptr(vp),
                                   rs_avp_length(vp),
                                   ctx->encryptionType,
                                   &ctx->rfc3961Key);
#else
    major = gssEapDeriveRfc3961Key(minor,
                                   gl_generated_key,
                                   strlen(gl_generated_key),
                                   ctx->encryptionType,
                                   &ctx->rfc3961Key);
#endif
    if (GSS_ERROR(major))
        return major;

    major = rfc3961ChecksumTypeForKey(minor, &ctx->rfc3961Key,
                                      &ctx->checksumType);
    if (GSS_ERROR(major))
        return major;

    major = sequenceInit(minor,
                         &ctx->seqState, ctx->recvSeq,
                         ((ctx->gssFlags & GSS_C_REPLAY_FLAG) != 0),
                         ((ctx->gssFlags & GSS_C_SEQUENCE_FLAG) != 0),
                         TRUE);
    if (GSS_ERROR(major))
        return major;

#ifdef MECH_EAP

    major = gssEapCreateAttrContext(minor, cred, ctx,
                                    &ctx->initiatorName->attrCtx,
                                    &ctx->expiryTime);
    if (GSS_ERROR(major))
        return major;
#else
    ctx->expiryTime = 0; /* indefinite */
#endif

    if (ctx->expiryTime != 0 && ctx->expiryTime < time(NULL)) {
        *minor = GSSEAP_CRED_EXPIRED;
        return GSS_S_CREDENTIALS_EXPIRED;
    }

#ifndef MECH_EAP
    ctx->gssFlags |= GSS_C_PROT_READY_FLAG;
#endif

    *minor = 0;
    return GSS_S_COMPLETE;
}