Ken's Thoughts...
Recent Pictures

 
Sat, 23 Nov 2002

Bond, James Bond
Last night we went to go see the new Bond flick,
Die another Day. It was *REALLY* pretty good. Finally, the plot of a Brosnan era bond was interesting and entertaining -- Brosnan finally got the opportunity to be in a good Bond film, which he deserved since he's probably the best Bond since Sean Connery. The movie was up there with Goldfinger, On Her Majesty's Secret Service, and License to Kill, as far as having an interesting plot while making James Bond seem like a real person. Thankfully they didn't try to do another "A View to a Kill" (unlike the last 3 bond films, peyuck).

There were also the 'homages to previous bonds' in this one, including the jet pack from Goldfinger, the shoe from From Russia with Love, an Astin Martin, but what I thought was the best homage to James Bond was the scene in Cuba where Brosnan picks up the book A Field Guide to the Birds of the West Indies and goes outside to a bar. If you're a real fan of the series, you'll understand why this is funny, and if you're not sure, follow the link and find out why.

Posted at: 23:03 on 23/11/2002   [ /diary ] #


Fri, 15 Nov 2002

More Honey!!! New Shoes!!!
So, I finished another
HoneyNet Challenge Scan of the Month today. I started this one Tuesday night, and worked on it until 1am or so. I didn't get around to finishing it until this afternoon.

Sandy and I went to Panama City Beach and Tallahassee last weekend. It was Veterens Day, so we piled onto the Beemer and headed up 27/98. We spent Saturday in PCB, then Sunday we hit a bunch of the state parks in the Redneck Riveria off of Hwy 90 -- Vortex Springs, Ponce De Leon Springs, Falling Waters, and Florida Caverns.

By far, my favorite was Falling Waters. If you're ever in Chipley, Florida (why???), you should go there. It's VERY peaceful.

We spent Sunday night in Tallahassee, then rode back in a tornado warning.

After the trip to Panama City Beach that Sandy and I took last weekend, I needed to get new shoes for the beemer. Streits actually came through with the lowest price ($315), so they're ordered and should be here Friday. I got 9600 miles on the old shoes. I think that's pretty good..

Posted at: 22:41 on 15/11/2002   [ /diary ] #


Mon, 04 Nov 2002

What have I been doing for the past week or so?
Jeesh, it's been awhile since I've updated the blog.. I'm bad.

Last Friday night I went to the Gainesville 2600 meeting. It was pretty lame, but there was a small discussion about the Honeynet Project Scan of the Month for October. Some of the guys at the meeting had spent several weeks working on it, and had come up with some interesting results, so that got me thinking..

When I got home, I went ahead and downloaded the image file and did my own forensics on it. Although my results were a week too late to submit for any sort of valid score, I went ahead and submitted them anyway and was told they won't be accepted into the challenge, but that they would go ahead and score me.

I was pretty happy, my forensic results were done in 2 hours. I'll include the results at the end of todays blog..

Saturday I spent the day re-installing my laptop. I went ahead and put RedHat 8.0 on it so that I could be consistent with what I was rolling out at work. I also bought a Linksys WAP11 and WCP11 wireless hub and card, which was nuts simple to setup under RH8. I mean it really couldn't get any easier to setup..

A big part of the day was spent downloading the iso's, it would have been easier just to drive to work and pick them up. After that, it took about 4 hours to get everything the way I wanted it Ogle with some code which makes me a violator of the DMCA but allows me to watch dvd's that I own, adding the MP3 plugin to xmms, StarOffice 6 instead of OpenOffice -- more fonts good, Netscape 4 so I can use the Dell Premium support site, Flash 5, Real Player One, and Acrobat Reader rather than xpdf. Unfortunately, the version of Xfree86 that ships with RH8 *STILL* doesn't support my video card properly ****ARGH****

I spent most of Sunday with Geoff and his hottie. We went to check out her new house it's got a big garage so she'll be able to put chains and racks and stuff in there and call Geoff 'The Gimp' and make him do her bidding.. After that, we went to Cedar Key for lunch, then took the long way home.

Well, that's it. Here's the forensics report which I submitted. I got a note back from a guy in the air force about it, interesting..

HoneyNet Forensic Challenge 24
------------------------------

Answers to the questions:

1.  Who is Joe Jacob's supplier of marijuana and what is the address listed for
    the supplier?

    Jimmy Jungle
    626 Jungle Ave Apt 2
    Jungle, NY 11111

2. What crucial data is available within the coverpage.jpg file, and why is
   this data crucial?

   "pw=goodtimes" at offset 0x3D20.  The password 'goodtimes' is important for
    unzipping the encrypted excel spreadsheet.

3. What, if any, other high schools besides Smith Hill does Joe Jacobs 
   frequent?

   Key High School, Leetch High School, Birard High School, Richter High 
   School, Hull High School.

4. For each file, what processes were taken by the suspect to mask them from 
   others?

   A.  'cover page.jpg' -- file was overwritten (recreated) and renamed.
   B.  'jimmyj~1.doc' -- file was overwritten (recreated) and deleted.
   C.  'schedu~1.exe' -- file was renamed (.zip file) and truncated at 1k.

5. What proceses did you (the investigator) use to successfully examine
   the contents of each file?

   Steps used for forensics study listed below.

6.  What Microsoft program was used to create the Cover Page file?  What
    is your proof?
    
    Undetermined, hey I did this in 2 hours and don't have access to Windows
    from here.. :-)

Steps used for forensic study:

1.  Unpacked the original archive.  Using file 3.37 determined the image file
    was an image of an MS-DOS diskette:

       [ken@dali honey]$ file image
       image: x86 boot sector, system MSDOS5.0, FAT (12 bit)

2.  Mounted the image via the loopback device, found the files:
       "cover page.jpgc" and "schedu~1.exe".

3.  Looked at the disk image with hexedit 1.2.2.  Found a deleted file in the
    FAT table at offset 0x2640. File named "?IMMYJ~1DOC" 

00002630   4A 00 75 00  6E 00 67 00  6C 00 00 00  65 00 2E 00  J.u.n.g.l...e...
00002640   E5 49 4D 4D  59 4A 7E 31  44 4F 43 20  00 68 38 46  .IMMYJ~1DOC .h8F
00002650   2B 2D 2B 2D  00 00 4F 75  8F 2C 02 00  00 50 00 00  +-+-..Ou.,...P..

4.  Unmounted the loopback device, edited the FAT entry byte at offset
    0x2640, changed 0xE5 (ms-dos deleted file special marker flag) to
    0x4A (J).

00002630   4A 00 75 00  6E 00 67 00  6C 00 00 00  65 00 2E 00  J.u.n.g.l...e...
00002640   4A 49 4D 4D  59 4A 7E 31  44 4F 43 20  00 68 38 46  JIMMYJ~1DOC .h8F
00002650   2B 2D 2B 2D  00 00 4F 75  8F 2C 02 00  00 50 00 00  +-+-..Ou.,...P..

5.  Remounted image via loopback device.  Tried to access the files, failure.
    The zip file was short, and the jpg & doc were empty.

6.  MS-Word documents start with the HEX code: D0 CF 11 E0 A1 B1 1A E1.
    Using hexedit, found the start of a word document at offset 0x4200 that
    is 18889 bytes long.  The file was recovered by issuing the command:  
      dd ibs=1 if=image skip=16896 count=18889 of=blah.doc

    The file was viewed with Star Office 6.0.  The contents of the letter
    follow:

Jimmy Jungle
626 Jungle Ave Apt 2
Jungle, NY 11111

Jimmy:

Dude, your pot must be the best - it made the cover of High Times Magazine! 
Thanks for sending me the Cover Page. What do you put in your soil when you 
plant the marijuana seeds? At least I know your growing it and not some guy 
in Columbia.
 
These kids, they tell me marijuana isn't addictive, but they don't stop buying
from me. Man, I'm sure glad you told me about targeting the high school 
students. You must have some experience. It's like a guaranteed paycheck. 
Their parents give them money for lunch and they spend it on my stuff. I'm 
an entrepreneur. Am I only one you sell to? Maybe I can become distributor 
of the year!


6.  The 7-10th characters in JPG files spell out "JFIF".  Searching the disk 
    image, I found the start of a JPG file at offset 0x9200.
    Using dd I was able to recover the file.  

    [ken@dali honey]$ dd ibs=1 if=image skip=37376 count=15800 of=blah.jpg

    The image was an ad for 'Pot Smokers Monthly' which discussed this months
    featured pot grower, smoker, and seller, Jimmy Jungle.  Additionally,
    the phrase "pw=goodtimes" was found at offset 0x3D20 within the jpg file.

00003D10   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00003D20   70 77 3D 67  6F 6F 64 74  69 6D 65 73  00 00 00 00  pw=goodtimes....
00003D30   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................


7.  Continuing the search of the disk, at offset 0xCF20, found the ascii 
    phrase "pw=goodtimes".  This was within the jpg file above:

0000CF10   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
0000CF20   70 77 3D 67  6F 6F 64 74  69 6D 65 73  00 00 00 00  pw=goodtimes....
0000CF30   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................

9.  Searching the disk found the start of a PKZIP file at offset 0xD0000
    that ended at 0xD96F.

0000CFF0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
0000D000   50 4B 03 04  14 00 01 00  08 00 98 5A  B7 2C C7 55  PK.........Z.,.U
0000D010   60 8D EA 08  00 00 00 42  00 00 14 00  00 00 53 63  `......B......Sc

    Using dd, the file was recovered:
    dd ibs=1 if=image skip=53248 count=2420 of=blah.zip

10. Unzipping the file, blah.zip, was asked for a password for 'Visits.xls'.
    Used the same as found at 0xCF20.  The password 'goodtimes' was valid
    and allowed me to access the excel file.  The file was viewed with Star
    Office 6.0, the contents are here:

Month	DAY	HIGH SCHOOLS
2002		
April	Monday (1)	Smith Hill High School (A)
	Tuesday (2)	Key High School (B)
	Wednesday (3)	Leetch High School (C) 
	Thursday (4)	Birard High School (D)
	Friday (5)	Richter High School (E)
	Monday (1)	Hull High School (F)
	Tuesday (2)	Smith Hill High School (A)
	Wednesday (3)	Key High School (B)
	Thursday (4)	Leetch High School (C) 
	Friday (5)	Birard High School (D)
	Monday (1)	Richter High School (E)
	Tuesday (2)	Hull High School (F)
	Wednesday (3)	Smith Hill High School (A)
	Thursday (4)	Key High School (B)
	Friday (5)	Leetch High School (C) 
	Monday (1)	Birard High School (D)
	Tuesday (2)	Richter High School (E)
	Wednesday (3)	Hull High School (F)
	Thursday (4)	Smith Hill High School (A)
	Friday (5)	Key High School (B)
	Monday (1)	Leetch High School (C) 
	Tuesday (2)	Birard High School (D)
May		
	Wednesday (3)	Richter High School (E)
	Thursday (4)	Hull High School (F)
	Friday (5)	Smith Hill High School (A)
	Monday (1)	Key High School (B)
	Tuesday (2)	Leetch High School (C) 
	Wednesday (3)	Birard High School (D)
	Thursday (4)	Richter High School (E)
	Friday (5)	Hull High School (F)
	Monday (1)	Smith Hill High School (A)
	Tuesday (2)	Key High School (B)
	Wednesday (3)	Leetch High School (C) 
	Thursday (4)	Birard High School (D)
	Friday (5)	Richter High School (E)
	Monday (1)	Hull High School (F)
	Tuesday (2)	Smith Hill High School (A)
	Wednesday (3)	Key High School (B)
	Thursday (4)	Leetch High School (C) 
	Friday (5)	Birard High School (D)
	Monday (1)	Richter High School (E)
	Tuesday (2)	Hull High School (F)
	Wednesday (3)	Smith Hill High School (A)
	Thursday (4)	Key High School (B)
	Friday (5)	Leetch High School (C) 
June		
	Monday (1)	Birard High School (D)
	Tuesday (2)	Richter High School (E)
	Wednesday (3)	Hull High School (F)
	Thursday (4)	Smith Hill High School (A)
	Friday (5)	Key High School (B)
	Monday (1)	Leetch High School (C) 
	Tuesday (2)	Birard High School (D)
	Wednesday (3)	Richter High School (E)
	Thursday (4)	Hull High School (F)
	Friday (5)	Smith Hill High School (A)
	Monday (1)	Key High School (B)
	Tuesday (2)	Leetch High School (C) 
	Wednesday (3)	Birard High School (D)
	Thursday (4)	Richter High School (E)
	Friday (5)	Hull High School (F)
	Monday (1)	Smith Hill High School (A)
	Tuesday (2)	Key High School (B)
	Wednesday (3)	Leetch High School (C) 
	Thursday (4)	Birard High School (D)
	Friday (5)	Richter High School (E)

Posted at: 23:26 on 04/11/2002   [ /diary ] #


Wed, 23 Oct 2002

Bad Day
Today was a bad day at work. I didn't get much sleep because I was up late finishing up the st driver patch, and then it was just radically hectic at work. Blech.

Patch is done. I've submitted a note to Theo offering it. We'll see if he bites. Here it is:

--- /usr/src/sys/scsi/t/st.c	Sun Oct 20 16:24:21 2002
+++ /usr/src/sys/scsi/st.c	Wed Oct 23 14:52:40 2002
@@ -1,4 +1,4 @@
-/*	$OpenBSD: st.c,v 1.29 2001/06/22 14:35:43 deraadt Exp $	*/
+/*	$OpenBSD: st.c,v 1.29 2002/23/10 sallot Exp $	        */
 /*	$NetBSD: st.c,v 1.71 1997/02/21 23:03:49 thorpej Exp $	*/
 
 /*
@@ -54,6 +54,12 @@
  * to be depending on whether we expect to retension or not.
  */
 
+/* 
+ * filenumber/block support added for fsf/bsf, open, close, write, read, and eom.
+ *
+ */
+
+
 #include 
 #include 
 #include 
@@ -81,6 +87,11 @@
 #define STUNIT(z)	((minor(z) >> 4)       )
 #define CTLMODE	3
 
+#define NORMAL_MODE     0
+#define NOREW_MODE      1
+#define EJECT_MODE      2
+#define CTRL_MODE       3
+
 #define	ST_IO_TIME	(3 * 60 * 1000)		/* 3 minutes */
 #define	ST_CTL_TIME	(30 * 1000)		/* 30 seconds */
 #define	ST_SPC_TIME	(4 * 60 * 60 * 1000)	/* 4 hours */
@@ -107,6 +118,9 @@
 #define	ST_Q_IGNORE_LOADS	0x0004
 #define	ST_Q_BLKSIZE		0x0008	/* variable-block media_blksize > 0 */
 #define	ST_Q_UNIMODAL		0x0010	/* unimode drive rejects mode select */
+#define ST_Q_NOPREVENT          0x0020  /* does not support PREVENT */
+#define ST_Q_ERASE_NOIMM        0x0040  /* drive rejects ERASE/w Immed bit */
+#define ST_Q_NOFILEMARKS        0x0080  /* can only write 0 filemarks */
 	u_int page_0_size;
 #define	MAX_PAGE_0_SIZE	64
 	struct modes modes[4];
@@ -259,6 +273,12 @@
 	u_int last_dsty;	/* last density opened                */
 	short mt_resid;		/* last (short) resid                 */
 	short mt_erreg;		/* last error (sense key) seen        */
+        /* relative to beginning of tape */
+        daddr_t fileno;         /* current file number */
+	daddr_t blkno;
+        int32_t last_io_resid;
+        int32_t last_ctl_resid;
+
 /*--------------------device/scsi parameters----------------------------------*/
 	struct scsi_link *sc_link;	/* our link to the adpter etc.        */
 /*--------------------parameters reported by the device ----------------------*/
@@ -340,11 +360,15 @@
 #define	ST_2FM_AT_EOD	0x0400	/* write 2 file marks at EOD */
 #define	ST_MOUNTED	0x0800	/* Device is presently mounted */
 #define	ST_DONTBUFFER	0x1000	/* Disable buffering/caching */
+#define ST_EARLYWARN    0x2000  /* Do (deferred) EOM for variable mode */
+
+#define ST_POSUPDATED   0x8000  /* tape position has been updated */
 
 #define	ST_PER_ACTION	(ST_AT_FILEMARK | ST_EIO_PENDING | ST_BLANK_READ)
 #define	ST_PER_MOUNT	(ST_INFO_VALID | ST_BLOCK_SET | ST_WRITTEN | \
 			 ST_FIXEDBLOCKS | ST_READONLY | ST_FM_WRITTEN | \
-			 ST_2FM_AT_EOD | ST_PER_ACTION)
+			 ST_2FM_AT_EOD | ST_PER_ACTION | ST_EARLYWARN)
+#define ST_INIT_FLAGS    ST_EARLYWARN
 
 struct scsi_inquiry_pattern st_patterns[] = {
 	{T_SEQUENTIAL, T_REMOV,
@@ -388,6 +412,8 @@
 	sc_link->device_softc = st;
 	sc_link->openings = 1;
 
+	st->flags = ST_INIT_FLAGS;
+
 	/*
 	 * Check if the drive is a known criminal and take
 	 * Any steps needed to bring it into line
@@ -558,7 +584,8 @@
 	 * mount session.
 	 */
 	if (!(st->flags & ST_MOUNTED)) {
-		st_mount_tape(dev, flags);
+		if ((error = st_mount_tape(dev, flags)) !=0 )
+                        goto bad;
 		st->last_dsty = dsty;
 	}
 
@@ -590,30 +617,80 @@
 	int mode;
 	struct proc *p;
 {
+        int stxx, error=0;
 	struct st_softc *st = st_cd.cd_devs[STUNIT(dev)];
+	struct scsi_link *sclink = st->sc_link;
+	
+	
+	/*
+	 * Make sure that a tape opened in write-only mode will have
+	 * file marks written on it when closed, even if not written to.
+	 *
+	 * This is for SUN compatibility. Actually, the Sun way of
+	 * things is to:
+	 *
+	 *	only write filemarks if there are fmks to be written and
+	 *   		- open for write (possibly read/write)
+	 *		- the last operation was a write
+	 * 	or:
+	 *		- opened for wronly
+	 *		- no data was written (including filemarks)
+	 */
+
+	stxx = st->flags & (ST_WRITTEN | ST_FM_WRITTEN);
+	if (((flags & FWRITE) && stxx == ST_WRITTEN) ||
+	    ((flags & O_ACCMODE) == FWRITE && stxx == 0)) {
+		int nm;
+		error = st_check_eod(st, FALSE, &nm, 0);
+	}
 
-	SC_DEBUG(st->sc_link, SDEV_DB1, ("closing\n"));
-	if ((st->flags & (ST_WRITTEN | ST_FM_WRITTEN)) == ST_WRITTEN)
-		st_write_filemarks(st, 1, 0);
 	switch (STMODE(dev)) {
-	case 0:		/* normal */
+	case NORMAL_MODE:
 		st_unmount(st, NOEJECT, DOREWIND);
 		break;
-	case 3:		/* eject, no rewind */
-		st_unmount(st, EJECT, NOREWIND);
-		break;
-	case 1:		/* no rewind */
-		/* leave mounted unless media seems to have been removed */
-		if (!(st->sc_link->flags & SDEV_MEDIA_LOADED))
-			st_unmount(st, NOEJECT, NOREWIND);
+	case NOREW_MODE:
+	case CTRL_MODE:
+		/*
+		 * Leave mounted unless media seems to have been removed.
+		 *
+		 * Otherwise, if we're to terminate a tape with more than one
+		 * filemark [ and because we're not rewinding here ], backspace
+		 * one filemark so that later appends will see an unbroken
+		 * sequence of:
+		 *
+		 *	file - FMK - file - FMK ... file - FMK FMK (EOM)
+		 */
+		if ((sclink->flags & SDEV_MEDIA_LOADED) == 0) {
+			st_unmount(st, NOEJECT,DOREWIND);
+		} else if (error == 0) {
+			/*
+			 * ST_WRITTEN was preserved from above.
+			 *
+			 * All we need to know here is:
+			 *
+			 *	Were we writing this tape and was the last
+			 *	operation a write?
+			 *
+			 *	Are there supposed to be 2FM at EOD?
+			 *
+			 * If both statements are true, then we backspace
+			 * one filemark.
+			 */
+			stxx |= (st->flags & ST_2FM_AT_EOD);
+			if ((flags & FWRITE) != 0 &&
+			    (stxx == (ST_2FM_AT_EOD|ST_WRITTEN))) {
+				error = st_space(st, -1, SP_FILEMARKS, 0);
+			}
+		}
 		break;
-	case 2:		/* rewind, eject */
-		st_unmount(st, EJECT, DOREWIND);
+	case EJECT_MODE:
+		st_unmount(st, EJECT,DOREWIND);
 		break;
 	}
-	st->sc_link->flags &= ~SDEV_OPEN;
 
-	return 0;
+	sclink->flags &= ~SDEV_OPEN;
+
+	return (error);
 }
 
 /*
@@ -715,6 +792,7 @@
 	st->flags &= ~ST_NEW_MOUNT;
 	st->flags |= ST_MOUNTED;
 	sc_link->flags |= SDEV_MEDIA_LOADED;	/* move earlier? */
+        st->blkno = st->fileno = (daddr_t) 0;
 
 	return 0;
 }
@@ -741,8 +819,12 @@
 		st_rewind(st, 0, SCSI_IGNORE_NOT_READY);
 	scsi_prevent(sc_link, PR_ALLOW,
 	    SCSI_IGNORE_ILLEGAL_REQUEST | SCSI_IGNORE_NOT_READY);
-	if (eject)
+	if (eject) {
 		st_load(st, LD_UNLOAD, SCSI_IGNORE_NOT_READY);
+                st->blkno = st->fileno = (daddr_t) -1;
+	} else {
+	  st->blkno = st->fileno = (daddr_t) 0;
+        }
 	st->flags &= ~(ST_MOUNTED | ST_NEW_MOUNT);
 	sc_link->flags &= ~SDEV_MEDIA_LOADED;
 }
@@ -1065,6 +1147,8 @@
 			_lto3b(bp->b_bcount / st->blksize, cmd.len);
 		} else
 			_lto3b(bp->b_bcount, cmd.len);
+                /* clear position updated indicator */
+                st->flags &= ~ST_POSUPDATED;
 
 		/*
 		 * go ask the adapter to do all this for us
@@ -1113,7 +1197,7 @@
 	struct proc *p;
 {
 	int error = 0;
-	int unit;
+	int unit,count;
 	int number, nmarks, dsty;
 	int flags;
 	struct st_softc *st;
@@ -1156,6 +1240,8 @@
 		g->mt_mdensity[1] = st->modes[1].density;
 		g->mt_mdensity[2] = st->modes[2].density;
 		g->mt_mdensity[3] = st->modes[3].density;
+		g->mt_fileno = st->fileno;
+		g->mt_blkno = st->blkno;
 		if (st->flags & ST_READONLY)
 			g->mt_dsreg |= MT_DS_RDONLY;
 		if (st->flags & ST_MOUNTED)
@@ -1183,11 +1269,11 @@
 		case MTBSF:	/* backward space file */
 			number = -number;
 		case MTFSF:	/* forward space file */
-			error = st_check_eod(st, FALSE, &nmarks, flags);
-			if (!error)
-				error = st_space(st, number - nmarks,
-				    SP_FILEMARKS, flags);
-			break;
+                       error = st_check_eod(st, FALSE, &nmarks, flags);
+                        if (!error)
+                                error = st_space(st, number - nmarks,
+                                    SP_FILEMARKS, flags);
+                        break;
 		case MTBSR:	/* backward space record */
 			number = -number;
 		case MTFSR:	/* forward space record */
@@ -1208,10 +1294,27 @@
 			if (!error)
 				error = st_load(st, LD_LOAD, flags);
 			break;
-		case MTEOM:	/* forward space to end of media */
-			error = st_check_eod(st, FALSE, &nmarks, flags);
-			if (!error)
-				error = st_space(st, 1, SP_EOM, flags);
+		case MTEOM:   /* rather than call SP_EOM and lose
+			       * the file count, we'll just FSF once
+			       * per file until we reach the end of the
+			       * tape.  
+			       */ 
+		        error=0;
+			count=0;
+			while ( (error==0) && (count<2000) ) { 
+			   /* do we think there'll be more than 2k filesets on a tape??  god I hope not */ 
+		  	   error = st_check_eod(st, FALSE, &nmarks, flags);
+			   if (!error)
+				error = st_space(st, 1, SP_FILEMARKS, flags);
+			   count++;
+			}
+			if (error==EIO)   /* 
+					   * good, we hit the end of the tape, BUT
+					   * we don't want to produce an error output
+					   * just for doing what we're supposed to..
+					   *
+					   */
+			  error=0;
 			break;
 		case MTCACHE:	/* enable controller cache */
 			st->flags &= ~ST_DONTBUFFER;
@@ -1575,7 +1678,7 @@
 {
 	struct scsi_space cmd;
 	int error;
-
+	
 	switch (what) {
 	case SP_BLKS:
 		if (st->flags & ST_PER_ACTION) {
@@ -1603,7 +1706,7 @@
 		}
 		break;
 	case SP_FILEMARKS:
-		if (st->flags & ST_EIO_PENDING) {
+	  if (st->flags & ST_EIO_PENDING) { /* check scsi_base */
 			if (number > 0) {
 				/* pretend we just discovered the error */
 				st->flags &= ~ST_EIO_PENDING;
@@ -1641,8 +1744,47 @@
 	cmd.byte2 = what;
 	_lto3b(number, cmd.number);
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	st->flags &= ~ST_POSUPDATED;
+	st->last_ctl_resid = 0;
+
+        error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, 0, ST_SPC_TIME, NULL, flags);
+
+         if ( (error == 0) || ((error==EIO) && (number<0)) ) {
+	       /* requests still in command queue */
+               if (number>0) { /* we're counting forward */
+                   number = number - st->last_ctl_resid; 
+		} else if (number<0) {  /* we're counting down sir! */
+		  number = number + st->last_ctl_resid;
+		}
+		if (what == SP_BLKS) {
+			if (st->blkno != -1) {
+				st->blkno += number;
+			}
+		} else if (what == SP_FILEMARKS) {  /* was != -1 */
+			if (st->fileno > -1) {
+                                st->fileno += number;
+				if (number > 0) {
+	  				st->blkno = 0;
+				} else if (number < 0) {
+					st->blkno = -1;
+				}
+			}
+		} else if (what == SP_EOM) { 
+			/*
+			 * This loses us relative position. 
+			 * But, we should never be here.
+			 */
+		  	      	st->fileno = st->blkno = -1;  
+		}
+		if (st->flags & ST_POSUPDATED) { /* if we're here, there's an error.  most likely end of tape data */
+		  error=EIO;
+		}
+
+	 }
+
+	return (error);
+
 }
 
 /*
@@ -1654,6 +1796,7 @@
 	int flags;
 	int number;
 {
+        int error;
 	struct scsi_write_filemarks cmd;
 
 	/*
@@ -1680,8 +1823,13 @@
 	cmd.opcode = WRITE_FILEMARKS;
 	_lto3b(number, cmd.number);
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, 0, ST_IO_TIME * 4, NULL, flags);
+        if (error == 0 && st->fileno != -1) {
+		st->fileno += number;
+	}
+	return (error);
+
 }
 
 /*
@@ -1778,9 +1926,20 @@
 	cmd.opcode = REWIND;
 	cmd.byte2 = immediate;
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, ST_RETRIES,
 	    immediate ? ST_CTL_TIME: ST_SPC_TIME, NULL, flags);
+        if (error) {
+		printf("%s: error %d trying to rewind\n",
+		    st->sc_dev.dv_xname, error);
+		/* lost position */
+		st->fileno = st->blkno = -1;
+	} else {
+		st->fileno = st->blkno = 0;
+	}
+	return (error);
+
+
 }
 
 /*
@@ -1806,19 +1965,39 @@
 		info = _4btol(sense->info);
 	else
 		info = xs->datalen;	/* bad choice if fixed blocks */
-	if ((sense->error_code & SSD_ERRCODE) != 0x70)
-		return SCSIRET_CONTINUE; /* let the generic code handle it */
+
+	if ((sense->error_code & SSD_ERRCODE) != 0x70) {
+
+	  return SCSIRET_CONTINUE; /* let the generic code handle it */
+	}
+
+        xs->resid = info;
+
 	if (st->flags & ST_FIXEDBLOCKS) {
-		xs->resid = info * st->blksize;
+	  if (bp) {
+		     xs->resid *=  st->blksize;
+                     st->last_io_resid = xs->resid;
+	  } else {
+	             st->last_ctl_resid = xs->resid;
+	  }
+
 		if (sense->flags & SSD_EOM) {
-			st->flags |= ST_EIO_PENDING;
-			if (bp)
+	  	        st->flags |= ST_EIO_PENDING;
+ 			if (bp) {
 				bp->b_resid = xs->resid;
+                                st->last_io_resid = xs->resid;
+                        } else {
+			        st->last_ctl_resid = xs->resid;
+                        }
 		}
 		if (sense->flags & SSD_FILEMARK) {
 			st->flags |= ST_AT_FILEMARK;
-			if (bp)
+			if (bp) {
 				bp->b_resid = xs->resid;
+				st->last_io_resid = xs->resid;
+                        } else {
+			        st->last_ctl_resid = xs->resid;
+                        }
 		}
 		if (sense->flags & SSD_ILI) {
 			st->flags |= ST_EIO_PENDING;
@@ -1840,6 +2019,19 @@
 			    !(sc_link->flags & SDEV_MEDIA_LOADED))
 				st->blksize -= 512;
 		}
+		if (sense->flags & SSD_EOM) {
+		  st->flags |= ST_EIO_PENDING;
+		  if (bp) {
+				/*
+				 * Grotesque as it seems, the few times
+				 * I've actually seen a non-zero resid,
+				 * the tape drive actually lied and had
+				 * written all the data!
+				 */
+	
+		    bp->b_resid = 0;
+		  }
+		}
 		/*
 		 * If no data was tranfered, do it immediatly
 		 */
@@ -1853,20 +2045,36 @@
 			}
 		}
 	} else {		/* must be variable mode */
-		xs->resid = xs->datalen;	/* to be sure */
-		if (sense->flags & SSD_EOM)
+
+		if (bp) {
+		  st->last_io_resid = xs->resid;
+		} else {
+		  st->last_ctl_resid = xs->resid;
+		}
+
+		if (sense->flags & SSD_EOM) {
 			return EIO;
+		}
+
+		/* xs->resid = xs->datalen; */	/* to be sure we've lost our mind.. */
+
 		if (sense->flags & SSD_FILEMARK) {
 			if (bp)
 				bp->b_resid = bp->b_bcount;
+			if (st->fileno != (daddr_t) -1) {
+			  st->fileno++;
+			  st->blkno=0;
+			  st->flags |= ST_POSUPDATED;
+			}
 			return 0;
 		}
+
 		if (sense->flags & SSD_ILI) {
 			if (info < 0) {
 				/*
 				 * the record was bigger than the read
 				 */
-				if ((xs->flags & SCSI_SILENT) == 0)
+				if ((xs->flags & SCSI_SILENT) == 0) 
 					printf("%s: %d-byte record too big\n",
 					    st->sc_dev.dv_xname,
 					    xs->datalen - info);
@@ -1882,8 +2090,15 @@
 					    xs->datalen);
 					return (EIO);
 				}
+			} else {
+			  if (st->blkno != (daddr_t) -1) {
+			    st->blkno++;
+			    st->flags |= ST_POSUPDATED;
+			  }
 			}
-			xs->resid = info;
+			/* let's go ahead and corrupt the results why don't we?? */
+			/*			xs->resid=info; */
+
 			if (bp)
 				bp->b_resid = info;
 			return 0;
@@ -1892,6 +2107,7 @@
 	key = sense->flags & SSD_KEY;
 
 	if (key == 0x8) {
+	  printf("key = 0x8\n");
 		/*
 		 * This quirk code helps the drive read the
 		 * first tape block, regardless of format.  That
@@ -1905,13 +2121,28 @@
 		} else if (!(st->flags & (ST_2FM_AT_EOD | ST_BLANK_READ))) {
 			st->flags |= ST_BLANK_READ;
 			xs->resid = xs->datalen;
+			if (st->blkno != (daddr_t) -1) {
+			  if (st->blksize>0) {
+			    st->blkno += (xs->datalen / st->blksize);
+			    st->flags |= ST_POSUPDATED;
+			  }
+                        }
 			if (bp) {
 				bp->b_resid = xs->resid;
 				/* return an EOF */
 			}
+			/* lost position */
+			st->fileno = st->blkno = -1;
 			return 0;
 		}
 	}
+
+	  /* trap this before it gets ugly. */
+      	if (sense->error_code & SSD_EOM) {
+  	     st->flags &= ~ST_EIO_PENDING;
+	     st->flags |= ST_POSUPDATED;
+	}
+
 	return SCSIRET_CONTINUE;
 }
 
@@ -1981,3 +2212,4 @@
 	/* Not implemented. */
 	return ENXIO;
 }
+

Well, Jim Greenlee's in town. I'm supposed to grab dinner with him, so I better call it a night..

Posted at: 22:49 on 23/10/2002   [ /code ] #


Mon, 21 Oct 2002

She sells C Shells by the C Shore
So, I dropped the scsi card into urchin a few days ago. Dropped the tape drive on it. Thought I had backups working perfectly. I was wrong...

The openbsd mt utility doesn't return an error code when you reach the end of the tape. Whoops.

Also, the OpenBSD scsi-tape driver does not implement file number counting and block counting. Personally, I don't care about block counting, but I do really want file counting..

So, I've spent some time hacking on the openbsd scsi tape driver today. The hacking is slow because it requires a recompile of the kernel for any change, ugh. I'm integrating the file number code from the netbsd scsi-tape driver and putting in the openbsd scsi tape driver. It's still VERY beta, but I have a preliminary version working (mt fsf correctly counts numbers until you hit eom).

If you care, here's the current patches. The first patch is for the mt utility to provide displaying of the file number. The second is for the 3.0_stable kernel st driver. It's funny, it looks like back in 1997 someone thought about adding this support since the "mt_fileno" construct was added to the scsi tape driver..

I'll continue working on them until I'm happy with the change, then I'll go ahead and submit the patches to theo and company..

Patch for the mt utility

--- /usr/src/bin/mt/t/mt.c	Sun Oct 20 16:59:04 2002
+++ /usr/src/bin/mt/mt.c	Sun Oct 20 17:01:35 2002
@@ -261,6 +261,7 @@
 	printreg("ds", bp->mt_dsreg, mt->t_dsbits);
 	printreg("\ner", bp->mt_erreg, mt->t_erbits);
 	(void)putchar('\n');
+	(void)printf("file number=%d\n",bp->mt_fileno);
 	(void)printf("blocksize: %d (%d, %d, %d, %d)\n",
 		bp->mt_blksiz, bp->mt_mblksiz[0], bp->mt_mblksiz[1],
 		bp->mt_mblksiz[2], bp->mt_mblksiz[3]);

Patch for the OpenBSD 3.0_stable scsi-tape kernel driver
--- /usr/src/sys/scsi/t/st.c	Sun Oct 20 16:24:21 2002
+++ /usr/src/sys/scsi/st.c	Sun Oct 20 19:34:44 2002
@@ -1,3 +1,6 @@
+/* to still do -- fsf rewinding past eom switches fileno to a negative
+   #..  Should be in the st_space function */
+
 /*	$OpenBSD: st.c,v 1.29 2001/06/22 14:35:43 deraadt Exp $	*/
 /*	$NetBSD: st.c,v 1.71 1997/02/21 23:03:49 thorpej Exp $	*/
 
@@ -259,6 +262,12 @@
 	u_int last_dsty;	/* last density opened                */
 	short mt_resid;		/* last (short) resid                 */
 	short mt_erreg;		/* last error (sense key) seen        */
+        /* relative to beginning of tape */
+        daddr_t fileno;         /* current file number */
+	daddr_t blkno;
+        int32_t last_io_resid;
+        int32_t last_ctl_resid;
+
 /*--------------------device/scsi parameters----------------------------------*/
 	struct scsi_link *sc_link;	/* our link to the adpter etc.        */
 /*--------------------parameters reported by the device ----------------------*/
@@ -340,6 +349,7 @@
 #define	ST_2FM_AT_EOD	0x0400	/* write 2 file marks at EOD */
 #define	ST_MOUNTED	0x0800	/* Device is presently mounted */
 #define	ST_DONTBUFFER	0x1000	/* Disable buffering/caching */
+#define ST_POSUPDATED   0x8000  /* tape position has been updated */
 
 #define	ST_PER_ACTION	(ST_AT_FILEMARK | ST_EIO_PENDING | ST_BLANK_READ)
 #define	ST_PER_MOUNT	(ST_INFO_VALID | ST_BLOCK_SET | ST_WRITTEN | \
@@ -715,6 +725,7 @@
 	st->flags &= ~ST_NEW_MOUNT;
 	st->flags |= ST_MOUNTED;
 	sc_link->flags |= SDEV_MEDIA_LOADED;	/* move earlier? */
+        st->blkno = st->fileno = (daddr_t) 0;
 
 	return 0;
 }
@@ -741,8 +752,12 @@
 		st_rewind(st, 0, SCSI_IGNORE_NOT_READY);
 	scsi_prevent(sc_link, PR_ALLOW,
 	    SCSI_IGNORE_ILLEGAL_REQUEST | SCSI_IGNORE_NOT_READY);
-	if (eject)
+	if (eject) {
 		st_load(st, LD_UNLOAD, SCSI_IGNORE_NOT_READY);
+                st->blkno = st->fileno = (daddr_t) -1;
+	} else {
+	  st->blkno = st->fileno = (daddr_t) 0;
+        }
 	st->flags &= ~(ST_MOUNTED | ST_NEW_MOUNT);
 	sc_link->flags &= ~SDEV_MEDIA_LOADED;
 }
@@ -1065,6 +1080,8 @@
 			_lto3b(bp->b_bcount / st->blksize, cmd.len);
 		} else
 			_lto3b(bp->b_bcount, cmd.len);
+                /* clear position updated indicator */
+                st->flags &= ~ST_POSUPDATED;
 
 		/*
 		 * go ask the adapter to do all this for us
@@ -1156,6 +1173,8 @@
 		g->mt_mdensity[1] = st->modes[1].density;
 		g->mt_mdensity[2] = st->modes[2].density;
 		g->mt_mdensity[3] = st->modes[3].density;
+		g->mt_fileno = st->fileno;
+		g->mt_blkno = st->blkno;
 		if (st->flags & ST_READONLY)
 			g->mt_dsreg |= MT_DS_RDONLY;
 		if (st->flags & ST_MOUNTED)
@@ -1641,8 +1660,37 @@
 	cmd.byte2 = what;
 	_lto3b(number, cmd.number);
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	st->flags &= ~ST_POSUPDATED;
+	st->last_ctl_resid = 0;
+
+        error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, 0, ST_SPC_TIME, NULL, flags);
+
+         if (error == 0 && (st->flags & ST_POSUPDATED) == 0) {
+		number = number - st->last_ctl_resid;
+		if (what == SP_BLKS) {
+			if (st->blkno != -1) {
+				st->blkno += number;
+			}
+		} else if (what == SP_FILEMARKS) {
+			if (st->fileno != -1) {
+				if (number > 0) {
+				  /* ks */
+	  			        st->fileno += number;
+					st->blkno = 0;
+				} else if (number < 0) {
+					st->blkno = -1;
+				}
+			}
+		} else if (what == SP_EOM) {
+			/*
+			 * This loses us relative position.
+			 */
+		  			st->fileno = st->blkno = -1; 
+		}
+	}
+	return (error);
+
 }
 
 /*
@@ -1654,6 +1702,7 @@
 	int flags;
 	int number;
 {
+        int error;
 	struct scsi_write_filemarks cmd;
 
 	/*
@@ -1680,8 +1729,13 @@
 	cmd.opcode = WRITE_FILEMARKS;
 	_lto3b(number, cmd.number);
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, 0, ST_IO_TIME * 4, NULL, flags);
+        if (error == 0 && st->fileno != -1) {
+		st->fileno += number;
+	}
+	return (error);
+
 }
 
 /*
@@ -1778,9 +1832,20 @@
 	cmd.opcode = REWIND;
 	cmd.byte2 = immediate;
 
-	return scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
+	error=scsi_scsi_cmd(st->sc_link, (struct scsi_generic *) &cmd,
 	    sizeof(cmd), 0, 0, ST_RETRIES,
 	    immediate ? ST_CTL_TIME: ST_SPC_TIME, NULL, flags);
+        if (error) {
+		printf("%s: error %d trying to rewind\n",
+		    st->sc_dev.dv_xname, error);
+		/* lost position */
+		st->fileno = st->blkno = -1;
+	} else {
+		st->fileno = st->blkno = 0;
+	}
+	return (error);
+
+
 }
 
 /*
@@ -1810,15 +1875,23 @@
 		return SCSIRET_CONTINUE; /* let the generic code handle it */
 	if (st->flags & ST_FIXEDBLOCKS) {
 		xs->resid = info * st->blksize;
+		st->last_io_resid = xs->resid;
 		if (sense->flags & SSD_EOM) {
 			st->flags |= ST_EIO_PENDING;
 			if (bp)
 				bp->b_resid = xs->resid;
+		} else {
+		                st->last_ctl_resid = xs->resid;
 		}
 		if (sense->flags & SSD_FILEMARK) {
 			st->flags |= ST_AT_FILEMARK;
 			if (bp)
 				bp->b_resid = xs->resid;
+                        if (st->fileno != (daddr_t) -1) {
+       			        st->fileno++;
+				st->blkno=0;
+				st->flags |= ST_POSUPDATED;
+			}
 		}
 		if (sense->flags & SSD_ILI) {
 			st->flags |= ST_EIO_PENDING;
@@ -1853,10 +1926,20 @@
 			}
 		}
 	} else {		/* must be variable mode */
+	       if (bp) {
+		 st->last_io_resid = xs->resid;
+	       } else {
+		 st->last_ctl_resid = xs->resid;
+	       }
 		xs->resid = xs->datalen;	/* to be sure */
 		if (sense->flags & SSD_EOM)
 			return EIO;
 		if (sense->flags & SSD_FILEMARK) {
+		        if (st->fileno != (daddr_t) -1) {
+        	        	st->fileno++;
+				st->blkno=0;
+				st->flags |= ST_POSUPDATED;
+			}
 			if (bp)
 				bp->b_resid = bp->b_bcount;
 			return 0;
@@ -1909,6 +1992,8 @@
 				bp->b_resid = xs->resid;
 				/* return an EOF */
 			}
+			/* lost position */
+			st->fileno = st->blkno = (daddr_t) -1;
 			return 0;
 		}
 	}

Posted at: 00:51 on 21/10/2002   [ /code ] #


Sat, 19 Oct 2002

Backing up...
I scavanged a DDS2 drive a few weeks back. It wasn't working properly, but I fixed it. Yesterday I bought an Adaptec 2940 from Dog-Bytes computers for $55, and this morning I got the DDS drive online. I'm now backing up the system, but man I had forgotten how slow DAT drives are..

Last night I took Sandy to the public observation night at the UF Teaching Observatory. Because the moon was so bright it obscurred almost everything else; you could only barely see Andromeda and this other nebula. There was a binary system though which you could see pretty clearly, and Sandy thought that was cool. We're going to try to go out again the first or second Friday in November when Eric says we'll be able to see Saturn and Jupiter. Maybe I should tell Larry?

Posted at: 15:26 on 19/10/2002   [ /diary ] #


Sun, 06 Oct 2002

Picnics and rain
Yesterday we went to the Astronomy picnic. I think Sandy had a pretty good time, but I think I may have gotten food poisoning since I've had a pretty rough case of, err, problems today. No offense David, but your grilling needs work.

It's raining. That's fine, it fits my mood. I spent most of the day studying, gee, big surprise. I also ripped a few older cd's and downloaded them to the nomad. Maybe I'll go catch that Rush concert this week..

Posted at: 23:16 on 06/10/2002   [ /diary ] #


Thu, 03 Oct 2002

Stuff
Yesterday, after work I bought a homeless guy dinner. He was begging for some money on University. I told him I wouldn't give him any cash, but I would buy his dinner at BK if he really wanted food, and so he took me up on it. I don't like giving money away, because I don't think that helps (and more often than not someone might use it to buy drugs or booze), but buying a person dinner is OK.

Sandy and I don't know what we're going to do this weekend. We're going to go to dinner with Gowan and his woman on Friday, but that's it. This huge hurricane is hitting Louisiana tomorrow, so it'll probably rain.

Posted at: 03:05 on 03/10/2002   [ /diary ] #


Sun, 29 Sep 2002

Deutschland, movies, cd's, and papers..
I slept in this morning. It felt good. Yeah, I blew off Gelnaw on the breakfast ride this morning, but he's been acting like enough of a twit lately that I'm happier not hanging out with him right now.

I stayed up late last night watching the idiot box. I caught a pretty good German indy flick on Bravo last night, Lola Rennt which was a pretty good take on the "What If/Alternate paths" theme. I won't ruin the plot for you, but I will say I recognized some of the places in Berlin (Sandy and I stayed at a pension right around the corner from one of the locations). Although I understand a little German, I was really happy to have the subtitles. It's a movie I'd recommend if you like low-budget indy flix, and besides Franka Potente's a hottie.

After sleeping in, I went and bought some new CD's. I picked up Rammstein's Mutter (is there a recurring theme??), 18 by Moby, and Duran Duran's Greatest Hits. Yeah, so Sirhan Sirhan may be seriously old school, but I happen to like many of the tracks and I haven't been able to get a copy of 1981's Duran Duran, which was their debut album, on CD..

This afternoon, after dutifully ripping the CD's into mp3's and downloading them onto my nomad, I caught the first half of the gator game. I did some coding to write a little tool to update ID3 tags while watching the game because the Nomad ripper screwed up the ID3 tags.. Sandy came home from studying around 5:30pm and said she wanted to dinner early, so we went ahead and left during half-time to go to La Fiesta. By the time we arrived, the Gators who had been up 19-0 when we left, were down 28-25. What the fuck??? Well, they won anyway.

After dinner, we went to Borders. I had a paper to write on Buddhism, and Sandy wanted to study a little bit more for her Sadistics [sic] class. I finished the paper up while at the store, then started working on some of my readings for the week. I wasn't done when Sandy announced she wanted to go home, but we left anyway.

When we got home Sandy wanted to walk stinky dog. After the walk I went ahead and finally watched From Hell, which I had rented a week ago, oops. It was OK, but a bit gory in some scenes; then again what do you expect given the subject matter??

While watching the film I also did a little bit of work for work. I'm trying to figure out how to get the linux yppasswd utility to use md5 instead of crypt for password encryption, but it's not working. As they'd say in Miami, "con yo".

Well, thats it for today.

Posted at: 04:27 on 29/09/2002   [ /diary ] #


Sat, 28 Sep 2002

Philosophy, Religion, and get the fucking war on!
I had dinner with Gowan tonight. We went to Conestogas, he got the raw pork chop and I got the 20lbs hamburger. He wound up trading in the pork chop for a burger, something about raw pork affecting him. I guess he didn't want worms. I don't see what the big deal is, everyone could stand to live with a small intestinal parasite or two.

He tells me he read my blog recently, cool. He thinks I'm wrong about the whole universe being a part of my imagination bit. Maybe he's right, maybe we're all just the imagination of another uber-being, but because it's such an uber-being we actually think (or think we do), so cogito ergo sum is really just a crock. Heh.

I went out to RHO today with Dr. Oliver. We got to chatting about the current political climate and he mentioned he had been fairly active in the anti-war protests during 'Nam. We talked about it a bit, and I told him about the Mica Wright 'Shut your face!' web-site. I also talked a little bit about my parents involvement at Kent State, but having been 2 at the time it really didn't have that much of an impact on me.

Before going to RHO, jfh and I went for a run. Damn it was humid and hot.

I also found the get your war on site today.. Pretty sad, but true..

Posted at: 03:21 on 28/09/2002   [ /diary ] #


Wed, 25 Sep 2002

Buddhism, Islam, and the world
I'm tired. Class ran late this evening and I didn't get out until 10:15pm. Considering I was at work at 7:30am, that was close to 15 hours on campus today -- ouch. Class was held up by some girl who couldn't understand some of the concepts in Mahavida Buddhism - namely the concept of reality being an illusion, and the way we (society/culture groups/whatever) have a shared group of experiences to allow us to perceive the same illusory object in the same way.

I don't really believe this, of course. I believe instead that my reality is really the only reality. Everyone I perceive is a manifestation of my own ego, and everything is illusory. Of course, everyone that is capable of independent thought has their own reality as well, and if our realities cross-pass, so be it but we'd never really know. We'd really never know simply because of the fact that we can't perceive the illusion of our own creation(s); the self-created illusion is convincing enough that we can't comprehend that other 'sentient beings' are really just our own illusions.

My 'project group' for Religion is going to be doing a report on Islamic stereotypes. It should be interesting, but I'll put $0.02 that Sandy thinks I picked the topic on purpose.

At any rate, after talking with Chris last week (well, email), we decided to send a note to the cavers list to see if anyone cared. Boom, traffic has swelled. Shows you what I get :-). A side note, the chief called last week to ask some questions about the list. When I get done with school I'd really like to go diving again, well after the trip to Tierra del Fuego...

Posted at: 03:48 on 25/09/2002   [ /diary ] #


Sun, 22 Sep 2002

What do you call a person from Knoxville? Looooozah!
Wow, the gators won! I had just hoped they wouldn't lose too bad, but I never thought they'd pull off the W! Poor ole' vol fans.. *snicker*

Rode around the county with Josh last night. Wheelee was tired and didn't go with us. Went to breakfast this morning with Gelnaw, Rick, Josh, and Geoff. We went to the gator cafe, I had the 'Denver Omelette'.

I spent the morning studying, then went to the "Indian Cultural Exchange" with Sandy to grab some lunch. We spent about an hour and a half there, there wasn't as much to see as last year. I spent the rest of the afternoon studying, until Josh called to tell me the gators were up 21 zip. I watched the rest of the game.

Well, Sandy and I are off to dinner with the Moores. I don't think the evening ride around the tri-county area will happen tonight since Lee wants to spend some time with Josh before she heads off to bootcamp.

Posted at: 00:17 on 22/09/2002   [ /diary ] #


Fri, 20 Sep 2002

It's Friday!!!!!!!
I took today off from work. What the heck, I had my 40 hours by yesterday so why not. Today I read the book Broken Spears for school, washed the stinky dog, fixed a bug (and submitted a fix) for the bloxsom blogger, and had lunch with Gelnaw. The book was a pretty easy read, and a little interesting, beats the textbook I had for latin american history last year... The coding was a fun diversion.

The dog was really filthy; Thor sat in the window of the sliding glass door watching and laughing at poor Dali, that bastard.

Josh just called. I'm going to go out to dinner with him and Lee, and then we'll go riding tonight since it's a full moon. Sandy's off to some play with Margaret for her humanities class.

ob - Here's a Tennessee joke:
Q. Why is Orange the color of choice for Vol fans?
A. So they can go to a football game on Saturday, go hunting on Sunday, and go to work picking up trash by the side of the road on Monday.

Q. What has 100,000 fans and 40,000 teeth?
A. Neeland Stadium.

Posted at: 23:13 on 20/09/2002   [ /diary ] #


It's Thursday night..
I've been meaning to setup a blog for sometime now, but have always come up with some lame excuse or another to put it off.
Jack has inspired me to go ahead, get off my ass, and setup blosxom.

It's been a long week; stupid linux NFS problems on terra kept me at work until close to 11pm on Tuesday. I need to get more disks and ram for the E450 and move our NFS services away from linux... (* sigh *) I really wonder how people can think Linux makes a "mission critical" server operating system when things like NFS are just broken.

I really need to get in the habit of leaving work in a timely fashion.. Oh well, at least I really love the place.

Today Francisco took David, Wes, and I out to the radio observatory. We tried to bring up the WAN link between Rosemary Hill and the radio observatory. Unfortunately while I was at the top of the 300' tall tower in Chiefland, one of the power transformers blew up on me. We did get the link between the fire tower and radio up, but the link between RHO and the fire tower is down until someone installs a new transformer. Matt Grover was kind enough to loan us a transformer, and I went ahead and ordered two replacements (one and a spare).

I worked with John (Oliver) a little this evening on the plan to shoot 802.11b over to the 30" dome @ RHO from the 18" dome. I think we can do it for about $500. I fired off the ideas to Matt to see what he thought about it, but the 802.11b stuff sure has gotten cheaper.

Well, I'm taking tomorrow off from work. I may head up to North Georgia to go camping, which should be nice since there's a full moon Saturday night. Of course, it may rain, so maybe I'll stay at home another week.

Posted at: 03:11 on 20/09/2002   [ /diary ] #


Older articles (2024): [ 2002 ]  [ 2003 ]  [ 2004 ]  [ 2005 ]  [ 2006 ]  [ 2007 ]  [ 2008 ]  [ 2009 ]  [ 2010 ]  [ 2011 ]  [ 2012 ]  [ 2013 ]  [ 2014 ]  [ 2015 ]  [ 2016 ]  [ 2017 ]  [ 2018 ]  [ 2019 ]  [ 2020 ]  [ 2021 ]  [ 2022 ]  [ 2023 ]  [ 2024 ]  


 
Articles
diary
eassays
travel
code

My photo album
My resume

Presentations and Papers

SAP Filtering 1998
Border Manager 1999
Astronomy Status 2002
Astronomy Update 2003
Linux on a CTX FC2A300
Honeynet Challenge entry