From 8aecee51588291b6046d31ad2e17f8a9a65f60bf Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Sat, 22 Apr 2006 22:21:56 +0000 Subject: [PATCH] * cl_guid for semi-reliable server authentication (from tjw) --- Makefile | 2 ++ code/client/cl_main.c | 25 +++++++++++++++++++++++++ code/client/client.h | 3 +++ code/qcommon/qcommon.h | 1 + 4 files changed, 31 insertions(+) diff --git a/Makefile b/Makefile index 8fa30aaf..b8aa4a59 100644 --- a/Makefile +++ b/Makefile @@ -779,6 +779,7 @@ Q3OBJ = \ $(B)/client/cvar.o \ $(B)/client/files.o \ $(B)/client/md4.o \ + $(B)/client/md5.o \ $(B)/client/msg.o \ $(B)/client/net_chan.o \ $(B)/client/huffman.o \ @@ -1029,6 +1030,7 @@ $(B)/client/common.o : $(CMDIR)/common.c; $(DO_CC) $(B)/client/cvar.o : $(CMDIR)/cvar.c; $(DO_CC) $(B)/client/files.o : $(CMDIR)/files.c; $(DO_CC) $(B)/client/md4.o : $(CMDIR)/md4.c; $(DO_CC) +$(B)/client/md5.o : $(CMDIR)/md5.c; $(DO_CC) $(B)/client/msg.o : $(CMDIR)/msg.c; $(DO_CC) $(B)/client/net_chan.o : $(CMDIR)/net_chan.c; $(DO_CC) $(B)/client/huffman.o : $(CMDIR)/huffman.c; $(DO_CC) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 9d896799..8f9cbae9 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -2378,6 +2378,28 @@ void CL_StopVideo_f( void ) CL_CloseAVI( ); } +static void CL_GenerateQKey(void) +{ + int len = 0; + unsigned char buff[2048]; + + len = FS_ReadFile(QKEY_FILE, NULL); + if(len >= (int)sizeof(buff)) { + Com_Printf("QKEY found.\n"); + return; + } + else { + int i; + srand(time(0)); + for(i = 0; i < sizeof(buff) - 1; i++) { + buff[i] = (unsigned char)(rand() % 255); + } + buff[i] = 0; + Com_Printf("QKEY generated\n"); + FS_WriteFile(QKEY_FILE, buff, sizeof(buff)); + } +} + /* ==================== CL_Init @@ -2526,6 +2548,9 @@ void CL_Init( void ) { Cvar_Set( "cl_running", "1" ); + CL_GenerateQKey(); + Cvar_Get("cl_guid", Com_MD5File(QKEY_FILE, 0), CVAR_USERINFO | CVAR_ROM); + Com_Printf( "----- Client Initialization Complete -----\n" ); } diff --git a/code/client/client.h b/code/client/client.h index 73106f8c..a9d0006f 100644 --- a/code/client/client.h +++ b/code/client/client.h @@ -30,6 +30,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../cgame/cg_public.h" #include "../game/bg_public.h" +// tjw: file full of random crap that gets used to create cl_guid +#define QKEY_FILE "qkey" + #define RETRANSMIT_TIMEOUT 3000 // time between connection packet retransmits diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 5de428ff..65cc7be8 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -729,6 +729,7 @@ void Com_Quit_f( void ); int Com_EventLoop( void ); int Com_Milliseconds( void ); // will be journaled properly unsigned Com_BlockChecksum( const void *buffer, int length ); +char *Com_MD5File(const char *filename, int length); int Com_HashKey(char *string, int maxlen); int Com_Filter(char *filter, char *name, int casesensitive); int Com_FilterPath(char *filter, char *name, int casesensitive);