summaryrefslogtreecommitdiffstats
path: root/isomd5sum
diff options
context:
space:
mode:
authorMike Fulbright <msf@redhat.com>2002-08-23 05:03:34 +0000
committerMike Fulbright <msf@redhat.com>2002-08-23 05:03:34 +0000
commitbce0074449c6f93a706ee77aa132532d2532eed5 (patch)
treebe7dcd8ff9c472cdefe808a4f73abc69c1c79e61 /isomd5sum
parent83e2278f482abf25131b12e9c51aced240ac77db (diff)
downloadanaconda-bce0074449c6f93a706ee77aa132532d2532eed5.tar.gz
anaconda-bce0074449c6f93a706ee77aa132532d2532eed5.tar.xz
anaconda-bce0074449c6f93a706ee77aa132532d2532eed5.zip
add concept of iso status
Diffstat (limited to 'isomd5sum')
-rw-r--r--isomd5sum/checkisomd5.c29
-rw-r--r--isomd5sum/implantisomd5.c60
2 files changed, 69 insertions, 20 deletions
diff --git a/isomd5sum/checkisomd5.c b/isomd5sum/checkisomd5.c
index 539fcfd89..a6794dbf7 100644
--- a/isomd5sum/checkisomd5.c
+++ b/isomd5sum/checkisomd5.c
@@ -20,15 +20,17 @@
/* 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 *supported) {
unsigned char buf[2048];
unsigned char buf2[512];
unsigned char tmpbuf[512];
- int skipfnd, md5fnd;
+ int skipfnd, md5fnd, supportedfnd;
unsigned int loc;
long long offset;
unsigned char *p;
+ *supported = 0;
+
if (lseek(isofd, (off_t)(16L * 2048L), SEEK_SET) == -1)
return ((long long)-1);
@@ -50,6 +52,7 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) {
md5fnd = 0;
skipfnd = 0;
+ supportedfnd = 0;
loc = 0;
while (loc < 512) {
if (!strncmp(buf2 + loc, "ISO MD5SUM = ", 13)) {
@@ -84,11 +87,17 @@ int parsepvd(int isofd, char *mediasum, int *skipsectors, long long *isosize) {
}
for (p=buf2+loc; *p != ';' && loc < 512; p++, loc++);
+ } else if (!strncmp(buf2 + loc, "RHLISOSTATUS=1", 14)) {
+ *supported = 1;
+ supportedfnd = 1;
+ } else if (!strncmp(buf2 + loc, "RHLISOSTATUS=0", 14)) {
+ *supported = 0;
+ supportedfnd = 1;
} else {
- loc += 1;
+ loc++;
}
- if (skipfnd & md5fnd)
+ if ((skipfnd & md5fnd) & supportedfnd)
break;
}
@@ -112,6 +121,7 @@ int checkmd5sum(int isofd, char *mediasum, char *computedsum) {
int appdata_start_offset, appdata_end_offset;
int nattempt;
int skipsectors;
+ int supported;
unsigned int bufsize = 32768;
unsigned char md5sum[16];
unsigned int len;
@@ -119,7 +129,7 @@ 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)
+ if ((pvd_offset = parsepvd(isofd, mediasum, &skipsectors, &isosize, &supported)) < 0)
return -1;
/* printf("Mediasum = %s\n",mediasum); */
@@ -211,12 +221,12 @@ static void readCB(void *co, long long pos) {
}
#endif
-int doMediaCheck(int isofd, char *mediasum, char *computedsum, long long *isosize) {
+int doMediaCheck(int isofd, char *mediasum, char *computedsum, long long *isosize, int *supported) {
int rc;
int llen;
int skipsectors;
- if (parsepvd(isofd, mediasum, &skipsectors, isosize) < 0) {
+ if (parsepvd(isofd, mediasum, &skipsectors, isosize, supported) < 0) {
fprintf(stderr, "Unable to read the disc checksum from the "
"primary volume descriptor. This probably "
"means the disc was created without adding the "
@@ -236,6 +246,7 @@ int mediaCheckFile(char *file) {
unsigned char mediasum[33], computedsum[33];
char tmpstr[256];
long long isosize;
+ int supported;
isofd = open(file, O_RDONLY);
@@ -244,13 +255,15 @@ int mediaCheckFile(char *file) {
return -1;
}
- rc = doMediaCheck(isofd, mediasum, computedsum, &isosize);
+ rc = doMediaCheck(isofd, mediasum, computedsum, &isosize, &supported);
close(isofd);
/* printf("isosize = %lld\n", isosize);
printf("%s\n%s\n", mediasum, computedsum);*/
+ fprintf(stderr, "The supported flag value is %d\n", supported);
+
if ( rc == 0)
result = "FAIL.\n\nIt is not recommended to use this media.";
else if (rc > 0)
diff --git a/isomd5sum/implantisomd5.c b/isomd5sum/implantisomd5.c
index e2f55b497..4b1ec3c53 100644
--- a/isomd5sum/implantisomd5.c
+++ b/isomd5sum/implantisomd5.c
@@ -8,6 +8,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <popt.h>
#include "md5.h"
@@ -76,14 +77,24 @@ unsigned int writeAppData(unsigned char *appdata, char *valstr, unsigned int loc
}
+static void usage(void) {
+ fprintf(stderr, "implantisomd5: implantisomd5 [--force] [--supported] <isofilename>\n");
+ exit(1);
+}
+
+
int main(int argc, char **argv) {
+ int i;
+ int rc;
int isofd;
int nread;
- int i;
int dirty;
int pvd_offset;
- int forceit;
+ int forceit=0;
+ int supported=0;
+ int help=0;
long long isosize;
+ const char **args;
unsigned char md5sum[16];
unsigned int total;
unsigned int loc;
@@ -95,19 +106,33 @@ int main(int argc, char **argv) {
char md5str[40];
MD5_CTX md5ctx;
- if (argc < 2) {
- printf("Usage: implantisomd5 [-f] <isofilename>\n\n");
- exit(1);
- }
+ poptContext optCon;
+ struct poptOption options[] = {
+ { "force", 'f', POPT_ARG_NONE, &forceit, 0 },
+ { "supported-iso", 'S', POPT_ARG_NONE, &supported, 0 },
+ { "help", 'h', POPT_ARG_NONE, &help, 0},
+ { 0, 0, 0, 0, 0}
+ };
- if (!strncmp(argv[1] , "-f", 3)) {
- forceit = 1;
- fname = argv[2];
- } else {
- forceit = 0;
- fname = argv[1];
+
+ optCon = poptGetContext("implantisomd5", argc, (const char **)argv, options, 0);
+
+ if ((rc = poptGetNextOpt(optCon)) < -1) {
+ fprintf(stderr, "bad option %s: %s\n",
+ poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
+ poptStrerror(rc));
+ exit(1);
}
+ if (help)
+ usage();
+
+ args = poptGetArgs(optCon);
+ if (!args || !args[0] || !args[0][0])
+ usage();
+
+ fname = args[0];
+
isofd = open(fname, O_RDWR);
if (isofd < 0) {
@@ -183,6 +208,17 @@ int main(int argc, char **argv) {
snprintf(buf, sizeof(buf), "SKIPSECTORS = %d", SKIPSECTORS);
loc = writeAppData(new_appdata, buf, loc);
loc = writeAppData(new_appdata, ";", loc);
+
+ if (supported) {
+ printf("Setting supported flag to 1\n");
+ loc = writeAppData(new_appdata, "RHLISOSTATUS=1", loc);
+ } else {
+ printf("Setting supported flag to 0\n");
+ loc = writeAppData(new_appdata, "RHLISOSTATUS=0", loc);
+ }
+
+ loc = writeAppData(new_appdata, ";", loc);
+
loc = writeAppData(new_appdata, "THIS IS NOT THE SAME AS RUNNING MD5SUM ON THIS ISO!!", loc);
i = lseek(isofd, pvd_offset + APPDATA_OFFSET, SEEK_SET);