From 0843ade8180116b274756b048d9d3857c1545261 Mon Sep 17 00:00:00 2001 From: Andrew McNab Date: Thu, 24 Feb 2005 09:20:55 +0000 Subject: [PATCH] More VOMS sanity checking --- org.gridsite.core/CHANGES | 3 + org.gridsite.core/interface/gridsite.h | 6 +- org.gridsite.core/src/grst_asn1.c | 145 ++++++--- org.gridsite.core/src/grst_x509.c | 419 ++++++++++---------------- org.gridsite.core/src/real-gridsite-admin.cgi | Bin 106538 -> 110342 bytes org.gridsite.core/src/showx509exts.c | 39 +++ 6 files changed, 304 insertions(+), 308 deletions(-) diff --git a/org.gridsite.core/CHANGES b/org.gridsite.core/CHANGES index 237c9f4..d806a41 100644 --- a/org.gridsite.core/CHANGES +++ b/org.gridsite.core/CHANGES @@ -1,3 +1,6 @@ +* Thu Feb 24 2005 Andrew McNab +- Add more sanity checking (signatures, dates, issuer,) + holder) to VOMS attribute parser. * Mon Feb 21 2005 Andrew McNab - Add bugfix for Bug #6357 from Fabrizio Pacini to fix delegation proxy diff --git a/org.gridsite.core/interface/gridsite.h b/org.gridsite.core/interface/gridsite.h index a88a316..3d00717 100644 --- a/org.gridsite.core/interface/gridsite.h +++ b/org.gridsite.core/interface/gridsite.h @@ -280,7 +280,9 @@ void GRSThttpWriteOut(GRSThttpBody *); int GRSThttpPrintHeaderFooter(GRSThttpBody *, char *, char *); char *GRSThttpGetCGI(char *); -time_t GRSTasn1TimeToTimeT(char *); -int GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], int *, char *); +time_t GRSTasn1TimeToTimeT(char *, size_t); +int GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], int, char *); int GRSTasn1ParseDump(BIO *, unsigned char *, long, struct GRSTasn1TagList taglist[], int, int *); +int GRSTasn1GetX509Name(char *, int, char *, char *, + struct GRSTasn1TagList taglist[], int); diff --git a/org.gridsite.core/src/grst_asn1.c b/org.gridsite.core/src/grst_asn1.c index 7634c14..2d4c657 100644 --- a/org.gridsite.core/src/grst_asn1.c +++ b/org.gridsite.core/src/grst_asn1.c @@ -1,5 +1,8 @@ +#define _GNU_SOURCE #include +#include + #include #include #include @@ -16,19 +19,34 @@ * necessary) */ -time_t GRSTasn1TimeToTimeT(char *asn1time) +time_t GRSTasn1TimeToTimeT(char *asn1time, size_t len) { char zone; struct tm time_tm; + + if (len == 0) len = strlen(asn1time); + + if ((len != 13) && (len != 15)) return 0; /* dont understand */ + + if ((len == 13) && + ((sscanf(asn1time, "%02d%02d%02d%02d%02d%02d%c", + &(time_tm.tm_year), + &(time_tm.tm_mon), + &(time_tm.tm_mday), + &(time_tm.tm_hour), + &(time_tm.tm_min), + &(time_tm.tm_sec), + &zone) != 7) || (zone != 'Z'))) return 0; /* dont understand */ - if ((sscanf(asn1time, "%02d%02d%02d%02d%02d%02d%c", + if ((len == 15) && + ((sscanf(asn1time, "20%02d%02d%02d%02d%02d%02d%c", &(time_tm.tm_year), &(time_tm.tm_mon), &(time_tm.tm_mday), &(time_tm.tm_hour), &(time_tm.tm_min), &(time_tm.tm_sec), - &zone) != 7) || (zone != 'Z')) return 0; /* dont understand */ + &zone) != 7) || (zone != 'Z'))) return 0; /* dont understand */ /* time format fixups */ @@ -95,11 +113,11 @@ static void GRSTasn1AddToTaglist(struct GRSTasn1TagList taglist[], } int GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], - int *lasttag, char *treecoords) + int lasttag, char *treecoords) { int i; - for (i=0; i <= *lasttag; ++i) + for (i=0; i <= lasttag; ++i) { if (strcmp(treecoords, taglist[i].treecoords) == 0) return i; } @@ -107,6 +125,22 @@ int GRSTasn1SearchTaglist(struct GRSTasn1TagList taglist[], return -1; } +static int GRSTasn1PrintPrintable(BIO *bp, char *str, int length) +{ + int ret = 0; + char *dup, *p; + + dup = strndup(str, length); + + for (p=dup; *p != '\0'; ++p) if ((*p < ' ') || (*p > '~')) *p = '.'; + + if (bp != NULL) ret = BIO_write(bp, dup, strlen(dup)); + + free(dup); + + return ret; +} + static int GRSTasn1Parse2(BIO *bp, unsigned char **pp, long length, int offset, int depth, int indent, int dump, char *treecoords, struct GRSTasn1TagList taglist[], int maxtag, int *lasttag) @@ -149,11 +183,19 @@ static int GRSTasn1Parse2(BIO *bp, unsigned char **pp, long length, int offset, GRSTasn1AddToTaglist(taglist, maxtag, lasttag, sibtreecoords, (int)offset+(int)(op - *pp), (int) hl, len, tag); - + if (bp != NULL) - BIO_printf(bp, " %s %ld %ld %d %d\n", sibtreecoords, + { + BIO_printf(bp, " %s %ld %ld %d %d ", sibtreecoords, (long)offset+(long)(op - *pp), hl, len, tag); + GRSTasn1PrintPrintable(bp, p, +// &((*pp)[(long)offset+(long)(op - *pp)+hl]), + (len > 30) ? 30 : len); + + BIO_printf(bp, "\n"); + } + /* if j == 0x21 it is a constructed indefinite length object */ if ((bp != NULL) && @@ -272,51 +314,26 @@ static int GRSTasn1Parse2(BIO *bp, unsigned char **pp, long length, int offset, } else if (tag == V_ASN1_OCTET_STRING) { - int i,printable=1; + int i; opp=op; os=d2i_ASN1_OCTET_STRING(NULL,&opp,len+hl); if (os != NULL) { opp=os->data; - for (i=0; ilength; i++) - { - if (( (opp[i] < ' ') && - (opp[i] != '\n') && - (opp[i] != '\r') && - (opp[i] != '\t')) || - (opp[i] > '~')) - { - printable=0; - break; - } - } - if (printable && (os->length > 0)) - { - if ((bp != NULL) && + + if (os->length > 0) + { + if ((bp != NULL) && (BIO_write(bp,":",1) <= 0)) goto end; - if ((bp != NULL) && - (BIO_write(bp,(char *)opp, + if ((bp != NULL) && + (GRSTasn1PrintPrintable(bp, + opp, os->length) <= 0)) goto end; - } - if (!printable && (os->length > 0) - && dump) - { - if (!nl) - { - if ((bp != NULL) && - (BIO_write(bp,"\n",1) <= 0)) - goto end; - } - if ((bp != NULL) && - (BIO_dump_indent(bp,(char *)opp, - ((dump == -1 || dump > os->length)?os->length:dump), - dump_indent) <= 0)) - goto end; - nl=1; - } + } + M_ASN1_OCTET_STRING_free(os); os=NULL; } @@ -441,3 +458,47 @@ int GRSTasn1ParseDump(BIO *bp, unsigned char *pp, long len, return(GRSTasn1Parse2(bp,&pp,len,0,0,0,0,"", taglist, maxtag, lasttag)); } + +int GRSTasn1GetX509Name(char *x509name, int maxlength, char *coords, + char *asn1string, + struct GRSTasn1TagList taglist[], int lasttag) +{ + int i, iobj, istr, n, len = 0; + ASN1_OBJECT *obj = NULL; + unsigned char coordstmp[81], *q; + const unsigned char *shortname; + + for (i=1; ; ++i) + { + sprintf(coordstmp, coords, i, 1); + iobj = GRSTasn1SearchTaglist(taglist, lasttag, coordstmp); + if (iobj < 0) break; + + sprintf(coordstmp, coords, i, 2); + istr = GRSTasn1SearchTaglist(taglist, lasttag, coordstmp); + if (istr < 0) break; + + q = &asn1string[taglist[iobj].start]; + d2i_ASN1_OBJECT(&obj, &q, taglist[iobj].length + + taglist[iobj].headerlength); + + n = OBJ_obj2nid(obj); +// free obj now? + shortname = OBJ_nid2sn(n); + + if (len + 2 + strlen(shortname) + taglist[istr].length >= maxlength) + { + x509name[0] = '\0'; + return GRST_RET_FAILED; + } + + sprintf(&x509name[len], "/%s=%.*s", shortname, + taglist[istr].length, + &asn1string[taglist[istr].start+taglist[istr].headerlength]); + len += 2 + strlen(shortname) + taglist[istr].length; + } + + x509name[len] = '\0'; + + return GRST_RET_OK; +} diff --git a/org.gridsite.core/src/grst_x509.c b/org.gridsite.core/src/grst_x509.c index 773d36f..37cb8a9 100644 --- a/org.gridsite.core/src/grst_x509.c +++ b/org.gridsite.core/src/grst_x509.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2002-4, Andrew McNab, University of Manchester + Copyright (c) 2002-5, Andrew McNab, University of Manchester All rights reserved. Redistribution and use in source and binary forms, with or @@ -141,36 +141,6 @@ int GRSTx509KnownCriticalExts(X509 *cert) #endif } -#if 0 -/// ASN1 time string (in a char *) to time_t -/** - * (Use ASN1_STRING_data() to convert ASN1_GENERALIZEDTIME to char * if - * necessary) - */ - -time_t GRSTasn1TimeToTimeT(char *asn1time) -{ - char zone; - struct tm time_tm; - - if ((sscanf(asn1time, "%02d%02d%02d%02d%02d%02d%c", - &(time_tm.tm_year), - &(time_tm.tm_mon), - &(time_tm.tm_mday), - &(time_tm.tm_hour), - &(time_tm.tm_min), - &(time_tm.tm_sec), - &zone) != 7) || (zone != 'Z')) return 0; /* dont understand */ - - /* time format fixups */ - - if (time_tm.tm_year < 90) time_tm.tm_year += 100; - --(time_tm.tm_mon); - - return timegm(&time_tm); -} -#endif - /// Check if certificate can be used as a CA to sign standard X509 certs /* * Return GRST_RET_OK if true; GRST_RET_FAILED if not. @@ -255,11 +225,11 @@ int GRSTx509CheckChain(int *first_non_ca, X509_STORE_CTX *ctx) /* we check times and reject immediately if invalid */ if (now < - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)))) + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0)) return X509_V_ERR_INVALID_CA; if (now > - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)))) + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0)) return X509_V_ERR_INVALID_CA; /* If any forebear certificate is not allowed to sign we must @@ -395,6 +365,113 @@ int GRSTx509VerifyCallback (int ok, X509_STORE_CTX *ctx) // else return GRST_RET_FAILED; } +/// Check the signature of the VOMS attributes +/* + * Returns GRST_RET_OK if signature is ok, other values if not. + */ + +static int GRSTx509VerifyVomsSig(time_t *time1_time, time_t *time2_time, + unsigned char *asn1string, + struct GRSTasn1TagList taglist[], + int lasttag, + char *vomsdir) +{ +#define GRST_ASN1_COORDS_VOMS_DN "-1-1-1-1-3-1-1-1-%d-1-%d" +#define GRST_ASN1_COORDS_VOMS_INFO "-1-1-1-1" +#define GRST_ASN1_COORDS_VOMS_SIG "-1-1-1-3" + int ret, isig, iinfo; + char *certpath, acvomsdn[200]; + unsigned char *q; + DIR *vomsDIR; + struct dirent *vomsdirent; + X509 *cert; + EVP_PKEY *prvkey; + FILE *fp; + EVP_MD_CTX ctx; + time_t voms_service_time1, voms_service_time2; + + if ((vomsdir == NULL) || (vomsdir[0] == '\0')) return GRST_RET_FAILED; + + if (GRSTasn1GetX509Name(acvomsdn, sizeof(acvomsdn), + GRST_ASN1_COORDS_VOMS_DN, + asn1string, taglist, lasttag) != GRST_RET_OK) return GRST_RET_FAILED; + + iinfo = GRSTasn1SearchTaglist(taglist, lasttag, GRST_ASN1_COORDS_VOMS_INFO); + isig = GRSTasn1SearchTaglist(taglist, lasttag, GRST_ASN1_COORDS_VOMS_SIG); + + if ((iinfo < 0) || (isig < 0)) return GRST_RET_FAILED; + + vomsDIR = opendir(vomsdir); + if (vomsDIR == NULL) return GRST_RET_FAILED; + + while ((vomsdirent = readdir(vomsDIR)) != NULL) + { + asprintf(&certpath, "%s/%s", vomsdir, vomsdirent->d_name); + fp = fopen(certpath, "r"); + free(certpath); + if (fp == NULL) continue; + + cert = PEM_read_X509(fp, NULL, NULL, NULL); + fclose(fp); + if (cert == NULL) continue; + + if (GRSTx509NameCmp(acvomsdn, + X509_NAME_oneline(X509_get_subject_name(cert),NULL,0)) != 0) + { + X509_free(cert); + continue; + } + + prvkey = X509_extract_key(cert); + if (prvkey == NULL) + { + X509_free(cert); + continue; + } + + OpenSSL_add_all_digests(); + EVP_MD_CTX_init(&ctx); + EVP_VerifyInit_ex(&ctx, EVP_md5(), NULL); + + EVP_VerifyUpdate(&ctx, + &asn1string[taglist[iinfo].start+ + 0*taglist[iinfo].headerlength], + taglist[iinfo].length+taglist[iinfo].headerlength); + + ret = EVP_VerifyFinal(&ctx, + &asn1string[taglist[isig].start+ + taglist[isig].headerlength]+1, + taglist[isig].length - 1, + prvkey); + + EVP_MD_CTX_cleanup(&ctx); + EVP_PKEY_free(prvkey); + + if (ret != 1) /* signature doesnt match, look for more */ + { + continue; + X509_free(cert); + } + + voms_service_time1 = + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0); + if (voms_service_time1 > *time1_time) + *time1_time = voms_service_time1; + + voms_service_time2 = + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0); + if (voms_service_time2 < *time1_time) + *time2_time = voms_service_time2; + + X509_free(cert); + closedir(vomsDIR); + return GRST_RET_OK ; /* verified */ + } + + closedir(vomsDIR); + return GRST_RET_FAILED; +} + /// Get the VOMS attributes in the given extension /* * Puts any VOMS credentials found into the Compact Creds string array @@ -402,16 +479,20 @@ int GRSTx509VerifyCallback (int ok, X509_STORE_CTX *ctx) */ int GRSTx509ParseVomsExt(int *lastcred, int maxcreds, size_t credlen, - char *creds, time_t *time1_time, time_t *time2_time, - X509_EXTENSION *ex, char *ucuser, char *vomsdir) + char *creds, time_t time1_time, time_t time2_time, + X509_EXTENSION *ex, char *ucuserdn, char *vomsdir) { #define MAXTAG 500 -#define FQAN_COORDS "-1-1-1-1-7-1-2-1-2-%d" +#define GRST_ASN1_COORDS_FQAN "-1-1-1-1-7-1-2-1-2-%d" +#define GRST_ASN1_COORDS_USER_DN "-1-1-1-1-2-1-1-1-1-%d-1-%d" +#define GRST_ASN1_COORDS_TIME1 "-1-1-1-1-6-1" +#define GRST_ASN1_COORDS_TIME2 "-1-1-1-1-6-2" ASN1_OCTET_STRING *asn1data; - char *asn1string, s[81]; + char *asn1string, s[81], acuserdn[200], acvomsdn[200]; long asn1length; int lasttag=-1, itag, i; struct GRSTasn1TagList taglist[MAXTAG+1]; + time_t actime1, actime2, time_now; asn1data = X509_EXTENSION_get_data(ex); asn1string = ASN1_STRING_data(asn1data); @@ -419,12 +500,34 @@ int GRSTx509ParseVomsExt(int *lastcred, int maxcreds, size_t credlen, GRSTasn1ParseDump(NULL, asn1string, asn1length, taglist, MAXTAG, &lasttag); + GRSTasn1GetX509Name(acuserdn, sizeof(acuserdn), GRST_ASN1_COORDS_USER_DN, + asn1string, taglist, lasttag); + if (GRSTx509NameCmp(ucuserdn, acuserdn) != 0) return GRST_RET_FAILED; + + if (GRSTx509VerifyVomsSig(&time1_time, &time2_time, + asn1string, taglist, lasttag, vomsdir) + != GRST_RET_OK) return GRST_RET_FAILED; + + itag = GRSTasn1SearchTaglist(taglist, lasttag, GRST_ASN1_COORDS_TIME1); + actime1 = GRSTasn1TimeToTimeT(&asn1string[taglist[itag].start+ + taglist[itag].headerlength], + taglist[itag].length); + if (actime1 > time1_time) time1_time = actime1; + + itag = GRSTasn1SearchTaglist(taglist, lasttag, GRST_ASN1_COORDS_TIME2); + actime2 = GRSTasn1TimeToTimeT(&asn1string[taglist[itag].start+ + taglist[itag].headerlength], + taglist[itag].length); + if (actime2 < time2_time) time2_time = actime2; + + time(&time_now); + if ((time1_time > time_now) || (time2_time < time_now)) + return GRST_RET_OK; /* expiration isnt invalidity ...? */ + for (i=1; ; ++i) - { -// should find signature and check it here, first - - sprintf(s, FQAN_COORDS, i); - itag = GRSTasn1SearchTaglist(taglist, &lasttag, s); + { + sprintf(s, GRST_ASN1_COORDS_FQAN, i); + itag = GRSTasn1SearchTaglist(taglist, lasttag, s); if (itag > -1) { @@ -434,7 +537,7 @@ int GRSTx509ParseVomsExt(int *lastcred, int maxcreds, size_t credlen, snprintf(&creds[*lastcred * (credlen + 1)], credlen+1, "VOMS %010lu %010lu 0 %.*s", - *time1_time, *time2_time, + time1_time, time2_time, taglist[itag].length, &asn1string[taglist[itag].start+ taglist[itag].headerlength]); @@ -465,9 +568,9 @@ int GRSTx509GetVomsCreds(int *lastcred, int maxcreds, size_t credlen, time_t time1_time = 0, time2_time = 0, uctime1_time, uctime2_time; uctime1_time = - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert))); + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert)),0); uctime2_time = - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert))); + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert)),0); ucuser = X509_NAME_oneline(X509_get_subject_name(usercert), NULL, 0); @@ -476,11 +579,11 @@ int GRSTx509GetVomsCreds(int *lastcred, int maxcreds, size_t credlen, cert = sk_X509_value(certstack, j); time1_time = - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert))); + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(cert)),0); uctime1_time = (time1_time > uctime1_time) ? time1_time:uctime1_time; time2_time = - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert))); + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(cert)),0); uctime2_time = (time2_time < uctime2_time) ? time2_time:uctime2_time; for (i=0; i < X509_get_ext_count(cert); ++i) @@ -492,7 +595,7 @@ int GRSTx509GetVomsCreds(int *lastcred, int maxcreds, size_t credlen, { vomsfound=1; GRSTx509ParseVomsExt(lastcred, maxcreds, credlen, creds, - &uctime1_time, &uctime2_time, + uctime1_time, uctime2_time, ex, ucuser, vomsdir); } } @@ -502,218 +605,6 @@ int GRSTx509GetVomsCreds(int *lastcred, int maxcreds, size_t credlen, return GRST_RET_OK; } -#if 0 - charstr = (char *) malloc(ASN1_STRING_length(asn1str) + 1); - memcpy(charstr, ASN1_STRING_data(asn1str), - ASN1_STRING_length(asn1str)); - charstr[ASN1_STRING_length(asn1str)] = '\0'; - - siglen = -1; - - if ((sscanf(charstr, "SIGLEN:%u", &siglen) != 1) || - (siglen == -1) || - ((p = index(charstr, '\n')) == NULL)) - { - free(charstr); - continue; - } - - ++p; - - if (strncmp(p, "SIGNATURE:", sizeof("SIGNATURE:") - 1) != 0) - { - free(charstr); - continue; - } - - signature = &p[sizeof("SIGNATURE:") - 1]; - - p = &p[siglen + sizeof("SIGNATURE:") - 1]; - data = p; - - /* nasty pointer arithmetic! */ - dataoffset = (unsigned int) ((long) data - (long) charstr); - datalength = (unsigned int) - (ASN1_STRING_length(asn1str) - dataoffset); - - if (datalength <= 0) - { - free(charstr); - continue; - } - - while (1) - { - if (strncmp(p, "USER:", sizeof("USER:") - 1) == 0) - { - p = &p[sizeof("USER:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - user = p; - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - else if (strncmp(p, "TIME1:", sizeof("TIME1:") - 1) == 0) - { - p = &p[sizeof("TIME1:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - time1 = p; - p = index(p, '\n'); - if (p != NULL) *p = '\0'; - - time1_time = GRSTasn1TimeToTimeT(time1); - if (time1_time < uctime1_time) time1_time = uctime1_time; - if (p == NULL) break; - ++p; - } - else if (strncmp(p, "TIME2:", sizeof("TIME2:") - 1) == 0) - { - p = &p[sizeof("TIME2:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - time2 = p; - p = index(p, '\n'); - if (p != NULL) *p = '\0'; - - time2_time = GRSTasn1TimeToTimeT(time2); - if (time2_time > uctime2_time) time2_time = uctime2_time; - if (p == NULL) break; - ++p; - } - else if (strncmp(p, "VO:", sizeof("VO:") - 1) == 0) - { - p = &p[sizeof("VO:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - vo = p; - - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - else if (strncmp(p, "SERVER:", sizeof("SERVER:") - 1) == 0) - { - p = &p[sizeof("SERVER:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - server = p; - - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - else if (strncmp(p, "DATALEN:", sizeof("DATALEN:") - 1) == 0) - { - p = &p[sizeof("DATALEN:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - datalen = p; - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - break; - } - else /* not something we use */ - { - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - } -/* - if ((now >= time1_time) && - (now <= time2_time) && - (signature != NULL) && - (data != NULL) && - (siglen > 0) && - (user != NULL) && - (ucuser != NULL) && - (strcmp(user, ucuser) == 0) && - (GRSTx509CheckVomsSig(signature, siglen, - &((ASN1_STRING_data(asn1str))[dataoffset]), - datalength, vomsdir, vo, - server) == GRST_RET_OK)) - while (1) -*/ - { - if (strncmp(p, "GROUP:", sizeof("GROUP:") - 1) == 0) - { - p = &p[sizeof("GROUP:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - group = p; - role = "NULL"; - cap = "NULL"; - - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - else if (strncmp(p, "ROLE:", sizeof("ROLE:") - 1) == 0) - { - p = &p[sizeof("ROLE:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - role = p; - - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - else if (strncmp(p, "CAP:", sizeof("CAP:") - 1) == 0) - { - p = &p[sizeof("CAP:") - 1]; - while ((*p != '\n') && (*p != '\0') && (*p <= ' ')) ++p; - cap = p; - - p = index(p, '\n'); - if (p != NULL) *p = '\0'; - - if (*lastcred < maxcreds - 1) - { - ++(*lastcred); - - if ((strcmp(role, "NULL") == 0) && - (strcmp(cap , "NULL") == 0)) - snprintf(&creds[*lastcred * (credlen + 1)], credlen+1, - "VOMS %010lu %010lu 0 /%s%s", - time1_time, time2_time, vo, group); - else if ((strcmp(role, "NULL") != 0) && - (strcmp(cap , "NULL") == 0)) - snprintf(&creds[*lastcred * (credlen + 1)], credlen+1, - "VOMS %010lu %010lu 0 /%s%s/Role=%s", - time1_time, time2_time, vo, group, role); - else if ((strcmp(role, "NULL") == 0) && - (strcmp(cap , "NULL") != 0)) - snprintf(&creds[*lastcred * (credlen + 1)], credlen+1, - "VOMS %010lu %010lu 0 /%s%s/Capability=%s", - time1_time, time2_time, vo, group, cap); - else - snprintf(&creds[*lastcred * (credlen + 1)], credlen+1, - "VOMS %010lu %010lu 0 /%s%s/Role=%s/Capability=%s", - time1_time, time2_time, vo, group, role, cap); - } - - if (p == NULL) break; - ++p; - } - else /* not something we use */ - { - p = index(p, '\n'); - if (p == NULL) break; - *p = '\0'; - ++p; - } - } - - free(charstr); - } - } - - return GRST_RET_OK; -} -#endif /// Turn a Compact Cred line into a GRSTgaclCred object /** @@ -812,8 +703,8 @@ int GRSTx509CompactCreds(int *lastcred, int maxcreds, size_t credlen, if ((usercert == NULL) /* if no usercert ("EEC"), we're not interested */ || (snprintf(credtemp, credlen+1, "X509USER %010lu %010lu %d %s", - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert))), - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert))), + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(usercert)),0), + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(usercert)),0), delegation, X509_NAME_oneline(X509_get_subject_name(usercert), NULL, 0)) >= credlen+1) || @@ -829,8 +720,8 @@ int GRSTx509CompactCreds(int *lastcred, int maxcreds, size_t credlen, if ((gsiproxycert != NULL) && (snprintf(credtemp, credlen+1, "GSIPROXY %010lu %010lu %d %s", - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(gsiproxycert))), - GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(gsiproxycert))), + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notBefore(gsiproxycert)),0), + GRSTasn1TimeToTimeT(ASN1_STRING_data(X509_get_notAfter(gsiproxycert)),0), delegation, X509_NAME_oneline(X509_get_subject_name(gsiproxycert), NULL, 0)) < credlen+1) && diff --git a/org.gridsite.core/src/real-gridsite-admin.cgi b/org.gridsite.core/src/real-gridsite-admin.cgi index 6bb96f2f34250fd8fe57d0463e7ca2469732d6c3..55ff3d620bdbb6c135f9265f9aea039382e0c211 100644 GIT binary patch literal 110342 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 literal 106538 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 tf#AuFm6^M<9c?y)bPu2hGjvtl-*~f=(Yz?mb diff --git a/org.gridsite.core/src/showx509exts.c b/org.gridsite.core/src/showx509exts.c index 23c3560..d37dff4 100644 --- a/org.gridsite.core/src/showx509exts.c +++ b/org.gridsite.core/src/showx509exts.c @@ -65,6 +65,45 @@ main() length1 = ASN1_STRING_length(asndata); GRSTasn1ParseDump(out, p1, length1, taglist, MAXTAG, &lasttag); + +{ + int n, tag, xclass; + unsigned char *q, buf[100]; + const unsigned char *dn, hash[EVP_MAX_MD_SIZE]; + ASN1_OBJECT *obj = NULL; + const EVP_MD *m; + EVP_MD_CTX ctx; + + itag = GRSTasn1SearchTaglist(taglist, &lasttag, + "-1-1-1-1-2-1-1-1-1-1-1-1"); + + X509_NAME *xname; + + q = &p[taglist[itag].start]; + + d2i_ASN1_OBJECT(&obj, &q, taglist[itag].length + + taglist[itag].headerlength); + + n = OBJ_obj2nid(obj); + dn = OBJ_nid2sn(n); + +// dn = X509_NAME_oneline(xname,NULL,0); + + printf("n=%d dn=%s obj2txt=%s\n", n, dn, OBJ_obj2txt(NULL,0,obj,1)); + + GRSTasn1GetX509Name(buf, 99, "-1-1-1-1-2-1-1-1-1-%d-1-%d", p1, taglist, &lasttag); + printf("%s\n", buf); + GRSTasn1GetX509Name(buf, 99, "-1-1-1-1-3-1-1-1-%d-1-%d", p1, taglist, &lasttag); + printf("%s\n", buf); + +/* + m = EVP_md5(); + EVP_DigestInit(&ctx, m); + EVP_DigestUpdate(&ctx, delegation_id, strlen(delegation_id)); + EVP_DigestFinal(&ctx, hash, &delegation_id_len); + */ +} + /* itag = GRSTasn1SearchTaglist(taglist, &lasttag, "1-1-1-1-1-7-1-2-1-2-1"); -- 1.8.2.3