static int CompareResult(char *filename, char *prev_file) { int i; unsigned char digest1[EVP_MAX_MD_SIZE + 1]; unsigned char digest2[EVP_MAX_MD_SIZE + 1]; int md_len1, md_len2; FILE *fp; int rtn = 0; CfOut(cf_verbose, "", "Comparing files %s with %s\n", prev_file, filename); if ((fp = fopen(prev_file, "r")) != NULL) { fclose(fp); md_len1 = FileChecksum(prev_file, digest1); md_len2 = FileChecksum(filename, digest2); if (md_len1 != md_len2) { rtn = 1; } else { for (i = 0; i < md_len1; i++) { if (digest1[i] != digest2[i]) { rtn = 1; break; } } } } else { /* no previous file */ rtn = 1; } if (!ThreadLock(cft_count)) { CfOut(cf_error, "", "!! Severe lock error when mailing in exec"); return 1; } /* replace old file with new*/ unlink(prev_file); if (!LinkOrCopy(filename, prev_file, true)) { CfOut(cf_inform, "", "Could not symlink or copy %s to %s", filename, prev_file); rtn = 1; } ThreadUnlock(cft_count); return (rtn); }
static int CompareResult(const char *filename, const char *prev_file) { Log(LOG_LEVEL_VERBOSE, "Comparing files %s with %s", prev_file, filename); int rtn = 0; FILE *fp = fopen(prev_file, "r"); if (fp) { fclose(fp); unsigned char digest1[EVP_MAX_MD_SIZE + 1]; int md_len1 = FileChecksum(prev_file, digest1); unsigned char digest2[EVP_MAX_MD_SIZE + 1]; int md_len2 = FileChecksum(filename, digest2); if (md_len1 != md_len2) { rtn = 1; } else { for (int i = 0; i < md_len1; i++) { if (digest1[i] != digest2[i]) { rtn = 1; break; } } } } else { /* no previous file */ rtn = 1; } if (!ThreadLock(cft_count)) { Log(LOG_LEVEL_ERR, "Severe lock error when mailing in exec"); return 1; } /* replace old file with new*/ unlink(prev_file); if (!LinkOrCopy(filename, prev_file, true)) { Log(LOG_LEVEL_INFO, "Could not symlink or copy %s to %s", filename, prev_file); rtn = 1; } ThreadUnlock(cft_count); return rtn; }
static void ComputeProgramCHECKSUM() { unsigned char checksum[16]; FileChecksum(GetProgramName(), checksum); for (size_t i = 0, j = 0; i < 16; ++i, j+=2) { s_program_checksum[j] = s_alphabet[checksum[i] >> 4]; s_program_checksum[j+1] = s_alphabet[checksum[i] & 0xF]; } s_program_checksum[32] = '\0'; }
int MakeJedecBuff(struct ActBuffer buff, int galtype, struct Config *cfg) { UBYTE mystrng[16]; struct ActBuffer buff2; int n, m, bitnum, bitnum2, flag; int MaxFuseAdr = 0, RowSize = 0, XORSize = 0; switch (galtype) { case GAL16V8: MaxFuseAdr = MAX_FUSE_ADR16; /* This variables are defined */ RowSize = ROW_SIZE_16V8; /* both globally AND locally! */ XORSize = 8; /* All assignments concern to */ break; /* the locale variables!!!! */ case GAL20V8: MaxFuseAdr = MAX_FUSE_ADR20; RowSize = ROW_SIZE_20V8; XORSize = 8; break; case GAL22V10: MaxFuseAdr = MAX_FUSE_ADR22V10; RowSize = ROW_SIZE_22V10; XORSize = 10; break; case GAL20RA10: MaxFuseAdr = MAX_FUSE_ADR20RA10; RowSize = ROW_SIZE_20RA10; XORSize = 10; break; } buff2 = buff; if (!cfg->JedecFuseChk) if (AddString(&buff, (UBYTE *)"\2\n")) /* <STX> */ return(-1); /*** make header of JEDEC file ***/ if (AddString(&buff, (UBYTE *)"Used Program: GALasm 2.1\n")) return(-1); if (AddString(&buff, (UBYTE *)"GAL-Assembler: GALasm 2.1\n")) return(-1); if (galtype == GAL16V8) { if (AddString(&buff, (UBYTE *)"Device: GAL16V8\n\n")) return(-1); } if (galtype == GAL20V8) { if (AddString(&buff, (UBYTE *)"Device: GAL20V8\n\n")) return(-1); } if (galtype == GAL20RA10) { if (AddString(&buff, (UBYTE *)"Device: GAL20RA10\n\n")) return(-1); } if (galtype == GAL22V10) { if (AddString(&buff, (UBYTE *)"Device: GAL22V10\n\n")) return(-1); } if (AddString(&buff, (UBYTE *)"*F0\n")) /* default value of fuses */ return(-1); if (cfg->JedecSecBit) { /* Security-Bit */ if (AddString(&buff, (UBYTE *)"*G1\n")) return(-1); } else if (AddString(&buff, (UBYTE *)"*G0\n")) return(-1); if (galtype == GAL16V8) /* number of fuses */ if (AddString(&buff, (UBYTE *)"*QF2194\n")) return(-1); if (galtype == GAL20V8) if (AddString(&buff, (UBYTE *)"*QF2706\n")) return(-1); if (galtype == GAL20RA10) if (AddString(&buff, (UBYTE *)"*QF3274\n")) return(-1); if (galtype == GAL22V10) if (AddString(&buff, (UBYTE *)"*QF5892\n")) return(-1); /*** make fuse-matrix ***/ bitnum = bitnum2 = flag = 0; for (m = 0; m < RowSize; m++) { flag = 0; bitnum2 = bitnum; for (n = 0; n <= MaxFuseAdr; n++) { if (Jedec.GALLogic[bitnum2]) { flag = 1; break; } bitnum2++; } if (flag) { sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); for (n=0; n<=MaxFuseAdr; n++) { if (AddByte(&buff, (UBYTE)(Jedec.GALLogic[bitnum] + '0'))) return(-1); bitnum++; } if (AddByte(&buff, (UBYTE)'\n')) return(-1); } else bitnum = bitnum2; } if (!flag) bitnum = bitnum2; /*** XOR-Bits ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); /* add fuse adr. */ if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); for (n = 0; n < XORSize; n++) { if (AddByte(&buff, (UBYTE)(Jedec.GALXOR[n] + '0'))) return(-1); bitnum++; if (galtype == GAL22V10) { /*** S1 of 22V10 ***/ if (AddByte(&buff, (UBYTE)(Jedec.GALS1[n] + '0'))) return(-1); bitnum++; } } if (AddByte(&buff, (UBYTE)'\n')) return(-1); /*** Signature ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); for (n = 0; n < SIG_SIZE; n++) { if (AddByte(&buff, (UBYTE)(Jedec.GALSig[n] + '0'))) return(-1); bitnum++; } if (AddByte(&buff, (UBYTE)'\n')) return(-1); if ((galtype == GAL16V8) || (galtype == GAL20V8)) { /*** AC1-Bits ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); for (n = 0; n < AC1_SIZE; n++) { if (AddByte(&buff, (UBYTE)(Jedec.GALAC1[n] + '0'))) return(-1); bitnum++; } if (AddByte(&buff, (UBYTE)'\n')) return(-1); /*** PT-Bits ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); for (n = 0; n < PT_SIZE; n++) { if (AddByte(&buff, (UBYTE)(Jedec.GALPT[n] + '0'))) return(-1); bitnum++; } if (AddByte(&buff, (UBYTE)'\n')) return(-1); /*** SYN-Bit ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); if (AddByte(&buff, (UBYTE)(Jedec.GALSYN + '0'))) return(-1); if (AddByte(&buff, (UBYTE)'\n')) return(-1); bitnum++; /*** AC0-Bit ***/ sprintf((char *)&mystrng[0], "*L%04d ", bitnum); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); if (AddByte(&buff, (UBYTE)(Jedec.GALAC0 + '0'))) return(-1); if (AddByte(&buff, (UBYTE)'\n')) return(-1); } /* if (cfg->JedecFuseChk) {*/ /* add fuse-checksum */ sprintf((char *)&mystrng[0], "*C%04x\n", FuseChecksum(galtype)); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); /* }*/ if (AddString(&buff, (UBYTE *)"*\n")) /* closing '*' */ return(-1); if(!cfg->JedecFuseChk) { if (AddByte(&buff, (UBYTE)0x3)) /* <ETX> */ return(-1); sprintf((char *)&mystrng[0], "%04x\n", FileChecksum(buff2)); if (AddString(&buff, (UBYTE *)&mystrng[0])) return(-1); } return(0); }
int CompareResult(char *filename,char *prev_file) { int i; char digest1[EVP_MAX_MD_SIZE+1]; char digest2[EVP_MAX_MD_SIZE+1]; int md_len1, md_len2; FILE *fp; int rtn = 0; Verbose("Comparing files %s with %s\n", prev_file, filename); if ((fp=fopen(prev_file,"r")) != NULL) { fclose(fp); md_len1 = FileChecksum(prev_file, digest1, 'm'); md_len2 = FileChecksum(filename, digest2, 'm'); if (md_len1 != md_len2) { rtn = 1; } else { for (i = 0; i < md_len1; i++) if (digest1[i] != digest2[i]) { rtn = 1; break; } } } else { /* no previous file */ rtn = 1; } #if defined HAVE_PTHREAD_H && (defined HAVE_LIBPTHREAD || defined BUILDTIN_GCC_THREAD) if (pthread_mutex_lock(&MUTEX_COUNT) != 0) { CfLog(cferror,"pthread_mutex_lock failed","pthread_mutex_lock"); exit(1); } #endif unlink(prev_file); if (symlink(filename, prev_file) == -1) { snprintf(OUTPUT,CF_BUFSIZE,"Could not link %s and %s",filename,prev_file); CfLog(cfinform,OUTPUT,"symlink"); rtn = 1; } #if defined HAVE_PTHREAD_H && (defined HAVE_LIBPTHREAD || defined BUILDTIN_GCC_THREAD) if (pthread_mutex_unlock(&MUTEX_COUNT) != 0) { CfLog(cferror,"pthread_mutex_unlock failed","pthread_mutex_unlock"); exit(1); } #endif return(rtn); }