diff options
author | Mike Fulbright <msf@redhat.com> | 2002-08-23 04:56:47 +0000 |
---|---|---|
committer | Mike Fulbright <msf@redhat.com> | 2002-08-23 04:56:47 +0000 |
commit | 5ff9bee31f7d9f69b333412c13a1b245847b6b77 (patch) | |
tree | be51036f5a8f22cc5e30cbc0d0494b23e2dd96df /loader | |
parent | 82e4209020dc94cd8d281a7b7f5769dd10c2a4eb (diff) | |
download | anaconda-5ff9bee31f7d9f69b333412c13a1b245847b6b77.tar.gz anaconda-5ff9bee31f7d9f69b333412c13a1b245847b6b77.tar.xz anaconda-5ff9bee31f7d9f69b333412c13a1b245847b6b77.zip |
add concept of iso status bit
Diffstat (limited to 'loader')
-rw-r--r-- | loader/mediacheck.c | 50 | ||||
-rw-r--r-- | loader/mediacheck.h | 1 |
2 files changed, 30 insertions, 21 deletions
diff --git a/loader/mediacheck.c b/loader/mediacheck.c index e32efd15b..02f92c0b3 100644 --- a/loader/mediacheck.c +++ b/loader/mediacheck.c @@ -36,11 +36,11 @@ struct progressCBdata { /* finds primary volume descriptor and returns info from it */ /* mediasum must be a preallocated buffer at least 33 bytes long */ -int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) { +int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize, int *isostatus) { unsigned char buf[2048]; unsigned char buf2[512]; unsigned char tmpbuf[512]; - int skipfnd, md5fnd; + int skipfnd, md5fnd, isostatusfnd; unsigned int loc; long long offset; unsigned char *p; @@ -64,13 +64,17 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) { memcpy(buf2, buf + APPDATA_OFFSET, 512); buf2[511] = '\0'; + *isostatus = 0; + md5fnd = 0; skipfnd = 0; + isostatusfnd = 0; loc = 0; while (loc < 512) { if (!strncmp(buf2 + loc, "ISO MD5SUM = ", 13)) { - logMessage("Found ISO MD5SUM"); + /* logMessage("Found ISO MD5SUM"); */ + /* make sure we dont walk off end */ if ((loc + 32) > 511) return -1; @@ -90,14 +94,14 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) { if ((loc + 14) > 511) return -1; - logMessage("Found SKIPSECTORS"); + /* logMessage("Found SKIPSECTORS"); */ loc = loc + 14; for (p=tmpbuf; loc < 512 && buf2[loc] != ';'; p++, loc++) *p = buf2[loc]; *p = '\0'; - logMessage("SKIPSECTORS -> |%s|", tmpbuf); + /* logMessage("SKIPSECTORS -> |%s|", tmpbuf); */ *skipsectors = strtol(tmpbuf, &errptr, 10); if (errptr && *errptr) { @@ -109,15 +113,22 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) { } for (p=buf2+loc; loc < 512 && *p != ';'; p++, loc++); + } else if (!strncmp(buf2 + loc, "RHLISOSTATUS=1", 14)) { + *isostatus = 1; + isostatusfnd = 1; + logMessage("isostatus = 1"); + } else if (!strncmp(buf2 + loc, "RHLISOSTATUS=0", 14)) { + *isostatus = 0; + isostatusfnd = 1; + logMessage("isostatus = 0"); } else { - loc += 1; + loc++; } - if (skipfnd & md5fnd) + if ((skipfnd & md5fnd) & isostatusfnd) break; } - if (!(skipfnd & md5fnd)) return -1; @@ -125,7 +136,6 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) { *isosize = (buf[SIZE_OFFSET]*0x1000000+buf[SIZE_OFFSET+1]*0x10000 + buf[SIZE_OFFSET+2]*0x100 + buf[SIZE_OFFSET+3]) * 2048LL; - return offset; } @@ -139,6 +149,7 @@ int checkmd5sum(int isofd, char *mediasum, char *computedsum, int appdata_start_offset, appdata_end_offset; int nattempt; int skipsectors; + int isostatus; unsigned int bufsize = 32768; unsigned char md5sum[16]; unsigned int len; @@ -146,11 +157,10 @@ int checkmd5sum(int isofd, char *mediasum, char *computedsum, long long isosize, offset, pvd_offset, apoff; MD5_CTX md5ctx; - if ((pvd_offset = parsepvd(isofd, mediasum, &skipsectors, &isosize)) < 0) + isostatus = 0; + if ((pvd_offset = parsepvd(isofd, mediasum, &skipsectors, &isosize, &isostatus)) < 0) return -1; - /* printf("Mediasum = %s\n",mediasum); */ - /* rewind, compute md5sum */ lseek(isofd, 0L, SEEK_SET); @@ -208,8 +218,6 @@ int checkmd5sum(int isofd, char *mediasum, char *computedsum, strcat(computedsum, tmpstr); } - /* printf("mediasum, computedsum = %s %s\n", mediasum, computedsum); */ - if (strcmp(mediasum, computedsum)) return 0; else @@ -232,7 +240,7 @@ static void readCB(void *co, long long pos) { newtRefresh(); } -int doMediaCheck(int isofd, char *descr, char *mediasum, char *computedsum, long long *isosize) { +int doMediaCheck(int isofd, char *descr, char *mediasum, char *computedsum, long long *isosize, int *isostatus) { struct progressCBdata data; newtComponent t, f, scale, label; int rc; @@ -241,7 +249,7 @@ int doMediaCheck(int isofd, char *descr, char *mediasum, char *computedsum, long int skipsectors; char tmpstr[1024]; - if (parsepvd(isofd, mediasum, &skipsectors, isosize) < 0) { + if (parsepvd(isofd, mediasum, &skipsectors, isosize, isostatus) < 0) { newtWinMessage(_("Error"), _("OK"), _("Unable to read the disc checksum from the " "primary volume descriptor. This probably " @@ -288,6 +296,7 @@ int doMediaCheck(int isofd, char *descr, char *mediasum, char *computedsum, long int mediaCheckFile(char *file, char *descr) { int isofd; int rc; + int isostatus; char *result; unsigned char mediasum[33], computedsum[33]; char tmpstr[256]; @@ -303,19 +312,18 @@ int mediaCheckFile(char *file, char *descr) { return -1; } - rc = doMediaCheck(isofd, descr, mediasum, computedsum, &isosize); - + isostatus = 0; + rc = doMediaCheck(isofd, descr, mediasum, computedsum, &isosize, &isostatus); close(isofd); - /* printf("isosize = %lld\n", isosize); - printf("%s\n%s\n", mediasum, computedsum);*/ - if (rc == 0) { result = _("FAIL.\n\nIt is not recommended to use this media."); logMessage("mediacheck: %s (%s) FAILED", file, descr); + logMessage("value of isostatus iso flag is %d", isostatus); } else if (rc > 0) { result = _("PASS.\n\nIt is OK to install from this media."); logMessage("mediacheck: %s (%s) PASSED", file, descr); + logMessage("value of isostatus iso flag is %d", isostatus); } else { result = _("NA.\n\nNo checksum information available, unable to verify media."); logMessage("mediacheck: %s (%s) has no checksum info", file, descr); diff --git a/loader/mediacheck.h b/loader/mediacheck.h index b2d63b83c..5570cffb1 100644 --- a/loader/mediacheck.h +++ b/loader/mediacheck.h @@ -3,3 +3,4 @@ /* Michael Fulbright msf@redhat.com */ int mediaCheckFile(char *file, char *descr); +int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize, int *isostatus); |