xlock hack

The below patch adds code to check an attached usb memory stick for a matching random key (matching against a copy of the key stored in a user's home dir).

requirements

xlockpatch

--- xlock.c     2008-07-08 04:08:11.000000000 +0100
+++ xlockhack.c 2009-04-04 12:35:23.000000000 +0100
@@ -2641,6 +2641,47 @@
                XFlush(dsp);

                done = checkPasswd(buffer);
+
+               /* added security hack */
+               /* only do additional security check if password is correct */
+               int iLocalCode = 0;
+               int iUsbCode = 0;
+               int iUsbChk = 0;
+               int iNewCode = 0;
+               iUsbChk = 0;
+               if (done) {
+                       /* open .xlockcode file on usb memory for rw,
+                          read in code */
+                       FILE *usbFile;
+                               if ((usbFile = (FILE *) fopen("/usb/.xlockcode", "r+"))) {
+                               int nRead = fread(&iUsbCode, sizeof(int), 1, usbFile);
+
+                               /* open .xlockcode file in user dir for rw,
+                                  read in code */
+                               FILE *userFile;
+                               if ((userFile = (FILE *) fopen("/home/mduller/.xlockcode", "r+"))) {
+                                       int nRead = fread(&iLocalCode, sizeof(int), 1, userFile);
+                                       if (iLocalCode == iUsbCode)
+                                               iUsbChk = 1;
+
+                                       /* usb security passed, generate new random
+                                          code for next time */
+
+                                       srandomdev();
+                                       iNewCode = random();
+
+                                       rewind(userFile);
+                                       rewind(usbFile);
+                                       int nwrite1 = fwrite(&iNewCode, sizeof(int), 1, userFile);
+                                       int nwrite2 = fwrite(&iNewCode, sizeof(int), 1, usbFile);
+
+                                      (void) fclose(userFile);
+                                      (void) fclose(usbFile);
+                               }
+                        }
+
+               }
+               /* !added security hack */

                if (!done && !*buffer) {
                        /* just hit return, and it was not his password */
@@ -2680,7 +2721,7 @@
                   /dev/kmem */
                (void) memset((char *) buffer, 0, sizeof (buffer));

-               if (done) {
+               if (done && iUsbChk == 1) {
 #ifdef USE_SOUND
                        if (sound)
                                playSound(validsound, verbose);


back to main page

xlockhack (last edited 2009-04-07 02:54:45 by MarkDuller)

Site Meter