Changeset 11517
- Timestamp:
- 04/21/19 16:15:33 (4 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-cacheex.c
r11508 r11517 664 664 } 665 665 666 uint8_t selectedForIgnChecksum = chk_if_ignore_checksum(er, cfg.disablecrccws, &cfg.disablecrccws_only_for);667 if (cl->typ == 'c'){668 selectedForIgnChecksum += chk_if_ignore_checksum (er, cl->account->disablecrccacheex, &cl->account->disablecrccacheex_only_for);669 }670 if (cl->typ == 'p'){671 selectedForIgnChecksum += chk_if_ignore_checksum (er, cl->reader->disablecrccws, &cl->reader->disablecrccws_only_for);672 673 674 uint8_t i, c;675 if(cfg.disablecrccws == 0 || (cl->typ == 'c' && cl->account->disablecrccacheex == 0) || ( cl->typ == 'p' && cl->reader->disablecrccws == 0))676 {677 for(i = 0; i < 16; i += 4)678 { 679 c = ((er->cw[i] + er->cw[i + 1] + er->cw[i + 2]) & 0xff);680 681 if((i!=12) && selectedForIgnChecksum && (er->cw[i + 3] != c)){682 break;683 } 684 685 if(er->cw[i + 3] != c)686 {687 cs_log_dump_dbg(D_CACHEEX, er->cw, 16, "push received cw with chksum error from %s", csp ? "csp" : username(cl));688 cl->cwcacheexerr++;689 if(cl->account)690 { cl->account->cwcacheexerr++; }691 return 0;666 if(!cfg.disablecrccws && ((cl->typ == 'c' && !cl->account->disablecrccacheex) || ( cl->typ == 'p' && !cl->reader->disablecrccws))) 667 { 668 uint8_t selectedForIgnChecksum = chk_if_ignore_checksum(er, &cfg.disablecrccws_only_for); 669 if(cl->typ == 'c') 670 { 671 selectedForIgnChecksum += chk_if_ignore_checksum(er, &cl->account->disablecrccacheex_only_for); 672 } 673 if(cl->typ == 'p') 674 { 675 selectedForIgnChecksum += chk_if_ignore_checksum(er, &cl->reader->disablecrccws_only_for); 676 } 677 if(!selectedForIgnChecksum) 678 { 679 uint8_t i, c; 680 for(i = 0; i < 16; i += 4) 681 { 682 c = ((er->cw[i] + er->cw[i + 1] + er->cw[i + 2]) & 0xff); 683 684 if(er->cw[i + 3] != c) 685 { 686 cs_log_dump_dbg(D_CACHEEX, er->cw, 16, "push received cw with chksum error from %s", csp ? "csp" : username(cl)); 687 cl->cwcacheexerr++; 688 if(cl->account) 689 { cl->account->cwcacheexerr++; } 690 return 0; 691 } 692 692 } 693 693 } -
trunk/oscam-chk.c
r11503 r11517 725 725 } 726 726 727 uint8_t chk_if_ignore_checksum(ECM_REQUEST *er, int8_t disablecrc,FTAB *disablecrc_only_for)728 { 729 if(!disablecrc && !disablecrc_only_for->nfilts) { return 0; }727 uint8_t chk_if_ignore_checksum(ECM_REQUEST *er, FTAB *disablecrc_only_for) 728 { 729 if(!disablecrc_only_for->nfilts) { return 0; } 730 730 731 731 int32_t i, k; -
trunk/oscam-chk.h
r11480 r11517 9 9 int32_t ecm_ratelimit_check(struct s_reader *reader, ECM_REQUEST *er, int32_t reader_mode); 10 10 int32_t matching_reader(ECM_REQUEST *er, struct s_reader *rdr); 11 uint8_t chk_if_ignore_checksum(ECM_REQUEST *er, int8_t disablecrc,FTAB *disablecrc_only_for);11 uint8_t chk_if_ignore_checksum(ECM_REQUEST *er, FTAB *disablecrc_only_for); 12 12 13 13 uint8_t is_localreader(struct s_reader *rdr, ECM_REQUEST *er); -
trunk/oscam-ecm.c
r11516 r11517 1593 1593 { return 0; } 1594 1594 1595 int32_t i;1596 uint8_t c;1597 1595 struct timeb now; 1598 1596 cs_ftime(&now); … … 1640 1638 if(reader && cw && rc < E_NOTFOUND) 1641 1639 { 1642 if(cfg.disablecrccws == 0 && reader->disablecrccws == 0) 1643 { 1644 uint8_t selectedForIgnChecksum = chk_if_ignore_checksum(er, cfg.disablecrccws, &cfg.disablecrccws_only_for) 1645 + chk_if_ignore_checksum(er, reader->disablecrccws, &reader->disablecrccws_only_for); 1646 1647 for(i = 0; i < 16; i += 4) 1648 { 1649 c = ((cw[i] + cw[i + 1] + cw[i + 2]) & 0xff); 1650 1651 if(selectedForIgnChecksum && (cw[i + 3] != c)) 1640 if(!cfg.disablecrccws && !reader->disablecrccws) 1641 { 1642 if(!(chk_if_ignore_checksum(er, &cfg.disablecrccws_only_for) + chk_if_ignore_checksum(er, &reader->disablecrccws_only_for))) 1643 { 1644 uint8_t i, c; 1645 for(i = 0; i < 16; i += 4) 1652 1646 { 1653 cs_log_dbg(D_TRACE, "notice: CW checksum check disabled for %04X:%06X", er->caid, er->prid); 1654 break; 1655 } 1656 1657 if(cw[i + 3] != c) 1658 { 1659 uint8_t nano = 0x00; 1660 if(er->caid == 0x100 && er->ecm[5] > 0x00) 1647 c = ((cw[i] + cw[i + 1] + cw[i + 2]) & 0xff); 1648 1649 if(cw[i + 3] != c) 1661 1650 { 1662 nano = er->ecm[5]; // seca nano protection 1663 } 1664 1665 if(reader->dropbadcws && !nano) // only drop controlword if no cw encryption is applied 1666 { 1667 rc = E_NOTFOUND; 1668 rcEx = E2_WRONG_CHKSUM; 1669 break; 1670 } 1671 else 1672 { 1673 if(!nano) // only fix checksum if no cw encryption is applied (nano = 0) 1651 uint8_t nano = 0x00; 1652 if(er->caid == 0x100 && er->ecm[5] > 0x00) 1674 1653 { 1675 cs_log_dbg(D_TRACE, "notice: changed dcw checksum byte cw[%i] from %02x to %02x", i + 3, cw[i + 3], c); 1676 cw[i + 3] = c; 1654 nano = er->ecm[5]; // seca nano protection 1655 } 1656 1657 if(reader->dropbadcws && !nano) // only drop controlword if no cw encryption is applied 1658 { 1659 rc = E_NOTFOUND; 1660 rcEx = E2_WRONG_CHKSUM; 1661 break; 1677 1662 } 1678 1663 else 1679 1664 { 1680 if( i == 12) // there are servers delivering correct controlwords but with failing last cw checksum (on purpose?!)1665 if(!nano) // only fix checksum if no cw encryption is applied (nano = 0) 1681 1666 { 1682 cs_log_dbg(D_TRACE, "NANO%02d: BAD PEER DETECTED, oscam has fixed the last cw crc that wasn't matching!", nano);1683 cw[i + 3] = c; // fix the last controlword1667 cs_log_dbg(D_TRACE, "notice: changed dcw checksum byte cw[%i] from %02x to %02x", i + 3, cw[i + 3], c); 1668 cw[i + 3] = c; 1684 1669 } 1685 1670 else 1686 1671 { 1687 cs_log_dbg(D_TRACE,"NANO%02d: not fixing the crc of this cw since its still encrypted!", nano); 1688 break; // crc failed so stop! 1672 if(i == 12) // there are servers delivering correct controlwords but with failing last cw checksum (on purpose?!) 1673 { 1674 cs_log_dbg(D_TRACE,"NANO%02d: BAD PEER DETECTED, oscam has fixed the last cw crc that wasn't matching!", nano); 1675 cw[i + 3] = c; // fix the last controlword 1676 } 1677 else 1678 { 1679 cs_log_dbg(D_TRACE,"NANO%02d: not fixing the crc of this cw since its still encrypted!", nano); 1680 break; // crc failed so stop! 1681 } 1689 1682 } 1690 1683 } 1691 1684 } 1692 1685 } 1686 } 1687 else 1688 { 1689 cs_log_dbg(D_TRACE, "notice: CW checksum check disabled for %04X:%06X", er->caid, er->prid); 1693 1690 } 1694 1691 }
Note:
See TracChangeset
for help on using the changeset viewer.