Ignore:
Timestamp:
Dec 4, 2016, 4:28:39 PM (3 years ago)
Author:
theparasol
Message:

VIACCESS:

  • Entitle providers present on card that dont have any classes
  • Some code cosmetics

Tnx Pr2 for signaling this bug and necessary card details to get it fixed properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/reader-viaccess.c

    r11200 r11282  
    126126                parse_via_date(b - 4, &vd, 1);
    127127                cls = (l - (j + 1)) * 8 + i;
    128                 if(p)
     128               
     129                if(p) // just show class info, dont add entitlement!
    129130                {
    130131                    rdr_log(reader, "%sclass: %02X, expiry date: %04d/%02d/%02d - %04d/%02d/%02d", p, cls,
     
    137138                            vd.year_s + 1980, vd.month_s, vd.day_s,
    138139                            vd.year_e + 1980, vd.month_e, vd.day_e);
    139 
    140                     time_t start_t, end_t;
     140                            time_t start_t, end_t;
     141                   
     142                    //convert time:
    141143                    struct tm tm;
    142                     //convert time:
    143144                    memset(&tm, 0, sizeof(tm));
    144145                    tm.tm_year = vd.year_s + 80; //via year starts in 1980, tm_year starts in 1900
     
    151152                    tm.tm_mday = vd.day_e;
    152153                    end_t = cs_timegm(&tm);
    153 
    154154                    cs_add_entitlement(reader, reader->caid, provid, cls, cls, start_t, end_t, 5, 1);
    155155                }
     
    222222    switch(emm[0])
    223223    {
    224     case 0xA9:
    225         show_class(reader, "nano A9: ", 0, emm + 2, emm[1]);
    226         break;
    227         /*
    228         {
    229         int32_t i, j, byts;
    230         const uchar *oemm;
    231 
    232         oemm = emm;
    233         byts = emm[1]-4;
    234         emm+=6;
    235 
    236         j=byts-1;
    237         for( ; j>=0; j-- )
    238         for( i=0; i<8; i++ )
    239         if( emm[j] & (1 << (i&7)) )
    240         {
    241         uchar cls;
    242         struct via_date vd;
    243         parse_via_date(emm-4, &vd, 1);
    244         cls=(byts-(j+1))*8+i;
    245         rdr_log(reader, "%sclass %02X: expiry date: %02d/%02d/%04d - %02d/%02d/%04d",
    246         fnano?"nano A9: ":"", cls,
    247         vd.day_s, vd.month_s, vd.year_s+1980,
    248         vd.day_e, vd.month_e, vd.year_e+1980);
    249         }
    250         break;
    251         }
    252         */
    253     case 0xA6:
    254     {
    255         char szGeo[256];
    256 
    257         memset(szGeo, 0, 256);
    258         strncpy(szGeo, (char *)emm + 2, emm[1]);
    259         rdr_log(reader, "nano A6: geo %s", szGeo);
    260         break;
    261     }
    262     case 0xB6:
    263     {
    264         uchar m; // modexp
    265         struct via_date vd;
    266 
    267         m = emm[emm[1] + 1];
    268         parse_via_date(emm + 2, &vd, 0);
    269         rdr_log(reader, "nano B6: modexp %d%d%d%d%d%d: %02d/%02d/%04d", (m & 0x20) ? 1 : 0,
     224        case 0xA9:
     225        {
     226            show_class(reader, "nano A9: ", 1, emm + 2, emm[1]);
     227            break;
     228        }
     229       
     230        case 0xA6:
     231        {
     232            char szGeo[256];
     233
     234            memset(szGeo, 0, 256);
     235            strncpy(szGeo, (char *)emm + 2, emm[1]);
     236            rdr_log(reader, "nano A6: geo %s", szGeo);
     237            break;
     238        }
     239       
     240        case 0xB6:
     241        {
     242            uchar m; // modexp
     243            struct via_date vd;
     244
     245            m = emm[emm[1] + 1];
     246            parse_via_date(emm + 2, &vd, 0);
     247            rdr_log(reader, "nano B6: modexp %d%d%d%d%d%d: %02d/%02d/%04d", (m & 0x20) ? 1 : 0,
    270248                (m & 0x10) ? 1 : 0, (m & 0x08) ? 1 : 0, (m & 0x04) ? 1 : 0, (m & 0x02) ? 1 : 0, (m & 0x01) ? 1 : 0,
    271249                vd.day_s, vd.month_s, vd.year_s + 1980);
    272         break;
    273     }
     250            break;
     251        }
    274252    }
    275253}
     
    19971975        rdr_log_sensitive(reader, "provider: %d, id: {%06X%s}, sa: {%08X}, geo: %s",
    19981976                          i, l_provid, l_name, l_sa, (l < 4) ? "empty" : cs_hexdump(1, cta_res, l, tmp, sizeof(tmp)));
     1977       
     1978        // add entitlement info for provid without class
     1979        cs_add_entitlement(reader, reader->caid, l_provid, 0, 0, 0, 0, 5, 1);
    19991980
    20001981        // read classes subscription
Note: See TracChangeset for help on using the changeset viewer.