Merge
BitKeeper/etc/logging_ok: auto-union Makefile.am: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/information_schema_db.result: Auto merged sql/field.cc: Auto merged sql/field.h: Auto merged sql/ha_federated.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/ha_myisammrg.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/handler.cc: Auto merged sql/item.cc: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/opt_range.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_load.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_table.cc: Auto merged sql/sql_udf.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/unireg.cc: Auto merged storage/innobase/row/row0mysql.c: Auto merged storage/innobase/srv/srv0start.c: Auto merged storage/innobase/trx/trx0trx.c: Auto merged storage/myisam/rt_split.c: Auto merged storage/myisammrg/myrg_open.c: Auto merged storage/ndb/src/common/debugger/SignalLoggerManager.cpp: Auto merged storage/ndb/src/common/util/File.cpp: Auto merged storage/ndb/src/cw/cpcd/Process.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp: Auto merged storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp: Auto merged sql/sql_delete.cc: merge sql/sql_update.cc: merge sql/table.cc: SCCS merged support-files/mysql.spec.sh: merge
|
@ -72,6 +72,7 @@ case "$cpu_family--$model_name" in
|
|||
;;
|
||||
*ppc)
|
||||
cpu_flag="powerpc";
|
||||
no_march=1;
|
||||
;;
|
||||
*)
|
||||
cpu_flag="";
|
||||
|
@ -106,6 +107,9 @@ case "$cc_ver--$cc_verno" in
|
|||
cpu_flag="$cpu_flag_old"
|
||||
fi
|
||||
check_cpu_cflags="-mcpu=$cpu_flag -march=$cpu_flag"
|
||||
if test -n "$no_march"; then
|
||||
check_cpu_cflags="-mcpu=$cpu_flag"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
check_cpu_cflags=""
|
||||
|
|
|
@ -1187,20 +1187,32 @@ mwagner@work.mysql.com|mysql-test/r/3.23/sel000002.result|20001010091454|29230|d
|
|||
ndb/src/client/Makefile
|
||||
nick@nick.leippe.com|mysql-test/r/rpl_empty_master_crash.result|20020531235552|47718|615f521be2132141
|
||||
nick@nick.leippe.com|mysql-test/t/rpl_empty_master_crash.test|20020531235552|52328|99464e737639ccc6
|
||||
reggie@mdk10.(none)|mysql-test/t/reserved_win_names-master.opt|20050520210356|14878|e56da049a7ce9a5b
|
||||
sasha@mysql.sashanet.com|BitKeeper/etc/logging_ok|20000801000905|12967|5b7d847a2158554
|
||||
sasha@mysql.sashanet.com|build-tags|20011125054855|05181|7afb7e785b80f97
|
||||
sasha@mysql.sashanet.com|build-tags|20011201050944|25384|b6f6fff142121618
|
||||
sasha@mysql.sashanet.com|libmysql_r/acconfig.h|20001128060846|51084|65f1202b3b5c345f
|
||||
sasha@mysql.sashanet.com|mysql-test/README.gcov|20001012045950|28177|5a6da067a30780ce
|
||||
sasha@mysql.sashanet.com|mysql-test/README.gcov|20001214012355|41825|2de7575ca81155e5
|
||||
sasha@mysql.sashanet.com|mysql-test/README|20001010001022|12739|108667adaeabe3f5
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/alt000001.result|20001122072330|24729|393103dbf15f35c9
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/ins000001.result|20001018175743|49824|f45c599efdf8352b
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000001.a.result|20001118063528|39426|2987b17db06808c3
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000001.b.result|20001118063528|44057|62e1fa91167cacc3
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000002.result|20001118063528|46039|109f5ceed1e0d64
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000003.result|20001118063528|48148|68d6ee00beaa011
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.a.result|20001118063528|50132|3415f066cb91c460
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000004.b.result|20001118063528|52094|352b35351551485
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000005.result|20001118063528|54071|a50962bc2340ab9a
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000006.result|20001118063528|56081|5653051e8ce6b4aa
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000007.result|20001121063807|21606|e0c3b6134e0884da
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000008.result|20001121063807|23636|c5cfee19ca5a7da9
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000009.result|20001121063807|25633|ed8042446ab97926
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000010.result|20001122072330|29430|3228109b8965b0f8
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000011.result|20001125024912|48851|c29dce30aa97f265
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000012.result|20001126062901|05938|35d6596da7b90fc5
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000012.status.result|20001126062901|09395|bbbd650b5beea32f
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000013.result|20001202171150|03876|ac5024e6cf6daac6
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/rpl000013.status.result|20001202171150|06069|6bee190c298cc9fd
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/sel000003.result|20001011230020|64653|d7b657b1e3a286a7
|
||||
sasha@mysql.sashanet.com|mysql-test/r/3.23/sel000100.res|20001205131218|23520|84ed46856cb3a69f
|
||||
|
@ -1209,6 +1221,7 @@ sasha@mysql.sashanet.com|mysql-test/r/binlog-backup-restore.result|2001042423392
|
|||
sasha@mysql.sashanet.com|mysql-test/r/df_crash.result|20010406010433|59989|4a3dbee64843953d
|
||||
sasha@mysql.sashanet.com|mysql-test/r/identity.result|20010910233028|16331|e41453a364242503
|
||||
sasha@mysql.sashanet.com|mysql-test/r/mrg000002.result|20001212152450|11492|745be0854aaaaf5e
|
||||
sasha@mysql.sashanet.com|mysql-test/r/slave-running.result|20001208141122|24303|f73e49462cf59e1f
|
||||
sasha@mysql.sashanet.com|mysql-test/r/slave-stopped.result|20001208141122|28916|25c134b1a4f1993a
|
||||
sasha@mysql.sashanet.com|mysql-test/std_data/m.MRG|20001212152450|17736|3f5632c37af00f18
|
||||
sasha@mysql.sashanet.com|mysql-test/std_data/m.frm|20001212152450|13897|e351dfe0b6824c0c
|
||||
|
|
|
@ -55,6 +55,7 @@ dlenev@mysql.com
|
|||
ejonore@mc03.ndb.mysql.com
|
||||
evgen@moonbone.(none)
|
||||
evgen@moonbone.local
|
||||
gbichot@bk-internal.mysql.com
|
||||
gbichot@production.mysql.com
|
||||
gbichot@quadita2.mysql.com
|
||||
gbichot@quadxeon.mysql.com
|
||||
|
@ -207,6 +208,7 @@ patg@krsna.patg.net
|
|||
patg@patrick-galbraiths-computer.local
|
||||
patg@patrick.local
|
||||
patg@pc248.lfp.kcls.org
|
||||
patg@radha.local
|
||||
paul@central.snake.net
|
||||
paul@frost.snake.net
|
||||
paul@ice.local
|
||||
|
|
|
@ -106,8 +106,8 @@ test:
|
|||
|
||||
test-force:
|
||||
cd mysql-test; \
|
||||
mysql-test-run --force ;\
|
||||
mysql-test-run --ps-protocol --force
|
||||
./mysql-test-run --force ;\
|
||||
./mysql-test-run --ps-protocol --force
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
|
|
@ -219,6 +219,10 @@ SOURCE=..\mysys\default.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\mysys\default_modify.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\dll.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -180,6 +180,10 @@ SOURCE=..\mysys\default.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\mysys\default_modify.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\sql\derror.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -537,30 +537,6 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "mysqlshutdown"=".\mysqlshutdown\mysqlshutdown.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "mysqlwatch"=".\mysqlwatch\mysqlwatch.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "mysys"=".\mysys\mysys.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
|
|
|
@ -640,30 +640,6 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "mysqlshutdown"=".\mysqlshutdown\mysqlshutdown_ia64.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "mysqlwatch"=".\mysqlwatch\mysqlwatch_ia64.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "pack_isam"=".\pack_isam\pack_isam_ia64.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="myshutdown" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=myshutdown - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "myshutdown.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "myshutdown.mak" CFG="myshutdown - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "myshutdown - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "myshutdown - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "myshutdown - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
|
||||
!ELSEIF "$(CFG)" == "myshutdown - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "myshutdown - Win32 Release"
|
||||
# Name "myshutdown - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,101 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="myshutdown" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=myshutdown - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "myshutdown.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "myshutdown.mak" CFG="myshutdown - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "myshutdown - WinIA64 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "myshutdown - WinIA64 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "myshutdown - WinIA64 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /D"WIN64" /D"NDEBUG" /D"_WINDOWS" /D"_MBCS" /YX /FD /c /O2 /G2 /EHsc /D"_IA64_" /Zi /D"WIN64" /D"WIN32" /D"_AFX_NO_DAO_SUPPORT" /Wp64 /Zm600
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:IA64
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:IA64 /incremental:no
|
||||
|
||||
!ELSEIF "$(CFG)" == "myshutdown - WinIA64 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN64" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /D"WIN64" /D"_DEBUG" /D"_WINDOWS" /D"_MBCS" /YX /FD /GZ /c /Od /G2 /EHsc /D"_IA64_" /Zi /D"WIN64" /D"WIN32" /D"_AFX_NO_DAO_SUPPORT" /Wp64 /Zm600
|
||||
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win64
|
||||
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win64
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:IA64
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:IA64 /incremental:no
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "myshutdown - WinIA64 Release"
|
||||
# Name "myshutdown - WinIA64 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
Before Width: | Height: | Size: 318 B |
|
@ -1,198 +0,0 @@
|
|||
/****************************************************************************
|
||||
MySqlShutdown - shutdown MySQL on system shutdown (Win95/98)
|
||||
----------------------------------------------------------------------------
|
||||
Revision History :
|
||||
Version Author Date Description
|
||||
001.00 Irena 21-12-99
|
||||
*****************************************************************************/
|
||||
#include <windows.h>
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Local data
|
||||
//-----------------------------------------------------------------------
|
||||
static char szAppName[] = "MySqlShutdown";
|
||||
static HINSTANCE hInstance;
|
||||
|
||||
#define MYWM_NOTIFYICON (WM_APP+100)
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//-----------------------------------------------------------------------
|
||||
LRESULT CALLBACK MainWindowProc (HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Local functions
|
||||
//-----------------------------------------------------------------------
|
||||
static BOOL InitAppClass (HINSTANCE hInstance);
|
||||
|
||||
BOOL TrayMessageAdd(HWND hWnd, DWORD dwMessage)
|
||||
{
|
||||
BOOL res;
|
||||
HICON hIcon =LoadIcon (hInstance, "MySql");
|
||||
char *szTip="MySql Shutdown";
|
||||
NOTIFYICONDATA tnd;
|
||||
|
||||
tnd.cbSize = sizeof(NOTIFYICONDATA);
|
||||
tnd.hWnd = hWnd;
|
||||
tnd.uID = 101;
|
||||
|
||||
tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
|
||||
tnd.uCallbackMessage = MYWM_NOTIFYICON;
|
||||
tnd.hIcon = hIcon;
|
||||
strcpy(tnd.szTip, szTip);
|
||||
res = Shell_NotifyIcon(dwMessage, &tnd);
|
||||
|
||||
if (hIcon) DestroyIcon(hIcon);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Name: WinMain
|
||||
// Purpose: Main application entry point
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
|
||||
{ HWND hWnd;
|
||||
MSG Msg;
|
||||
|
||||
hInstance=hInst;
|
||||
// Register application class if needed
|
||||
if (InitAppClass (hInstance) == FALSE) return (0);
|
||||
|
||||
|
||||
hWnd = CreateWindow (szAppName, "MySql",
|
||||
WS_OVERLAPPEDWINDOW|WS_MINIMIZE,
|
||||
0, 0,
|
||||
GetSystemMetrics(SM_CXSCREEN)/4,
|
||||
GetSystemMetrics(SM_CYSCREEN)/4,
|
||||
0, 0, hInstance, NULL);
|
||||
|
||||
if(!hWnd)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
ShowWindow (hWnd, SW_HIDE);
|
||||
UpdateWindow (hWnd);
|
||||
while (GetMessage (&Msg, 0, 0, 0))
|
||||
{ TranslateMessage (&Msg);
|
||||
DispatchMessage (&Msg);
|
||||
}
|
||||
return ((int) (Msg.wParam));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// Name: InitAppClass
|
||||
// Purpose: Register the main application window class
|
||||
//-----------------------------------------------------------------------
|
||||
static BOOL InitAppClass (HINSTANCE hInstance)
|
||||
{
|
||||
WNDCLASS cls;
|
||||
|
||||
if (GetClassInfo (hInstance, szAppName, &cls) == 0)
|
||||
{
|
||||
cls.style = CS_HREDRAW | CS_VREDRAW ;;
|
||||
cls.lpfnWndProc = (WNDPROC) MainWindowProc;
|
||||
cls.cbClsExtra = 0;
|
||||
cls.cbWndExtra = sizeof(HWND);
|
||||
cls.hInstance = hInstance;
|
||||
cls.hIcon = LoadIcon (hInstance, "MySql");
|
||||
cls.hCursor = LoadCursor (NULL, IDC_ARROW);
|
||||
cls.hbrBackground = GetStockObject (WHITE_BRUSH) ;
|
||||
cls.lpszMenuName = 0; //szAppName;
|
||||
cls.lpszClassName = szAppName;
|
||||
return RegisterClass (&cls);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
//-----------------------------------------------------------------------
|
||||
// Name: MainWindowProc
|
||||
// Purpose: Window procedure for main application window.
|
||||
//-----------------------------------------------------------------------
|
||||
LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT Msg,WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static RECT rect ;
|
||||
HDC hdc ;
|
||||
PAINTSTRUCT ps ;
|
||||
static BOOL bShutdown=FALSE;
|
||||
|
||||
switch (Msg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
TrayMessageAdd(hWnd, NIM_ADD);
|
||||
return TRUE;
|
||||
/***************
|
||||
case WM_SYSCOMMAND:
|
||||
if(wParam==SC_CLOSE)
|
||||
{ HANDLE hEventShutdown;
|
||||
|
||||
bShutdown=TRUE;
|
||||
InvalidateRect(hWnd,NULL,TRUE);
|
||||
ShowWindow (hWnd, SW_NORMAL);
|
||||
UpdateWindow(hWnd);
|
||||
hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown");
|
||||
if(hEventShutdown)
|
||||
{
|
||||
SetEvent(hEventShutdown);
|
||||
CloseHandle(hEventShutdown);
|
||||
Sleep(1000);
|
||||
MessageBox(hWnd,"Shutdown", "MySql", MB_OK);
|
||||
}
|
||||
TrayMessageAdd(hWnd, NIM_DELETE);
|
||||
}
|
||||
break;
|
||||
**************/
|
||||
case WM_DESTROY:
|
||||
TrayMessageAdd(hWnd, NIM_DELETE);
|
||||
PostQuitMessage (0);
|
||||
return 0;
|
||||
case WM_SIZE:
|
||||
GetClientRect (hWnd, &rect) ;
|
||||
return 0 ;
|
||||
|
||||
case WM_PAINT:
|
||||
hdc = BeginPaint (hWnd, &ps) ;
|
||||
if(bShutdown)
|
||||
DrawText (hdc, "MySql shutdown in progress...",
|
||||
-1, &rect, DT_WORDBREAK) ;
|
||||
EndPaint (hWnd, &ps) ;
|
||||
return 0 ;
|
||||
case WM_QUERYENDSESSION: //Shutdown MySql
|
||||
{ HANDLE hEventShutdown;
|
||||
|
||||
bShutdown=TRUE;
|
||||
InvalidateRect(hWnd,NULL,TRUE);
|
||||
ShowWindow (hWnd, SW_NORMAL);
|
||||
UpdateWindow(hWnd);
|
||||
hEventShutdown=OpenEvent(EVENT_MODIFY_STATE, 0, "MySqlShutdown");
|
||||
if(hEventShutdown)
|
||||
{
|
||||
SetEvent(hEventShutdown);
|
||||
CloseHandle(hEventShutdown);
|
||||
Sleep(1000);
|
||||
MessageBox(hWnd,"Shutdown", "MySql", MB_OK);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
case MYWM_NOTIFYICON:
|
||||
switch (lParam)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hWnd); // make us come to the front
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return DefWindowProc (hWnd, Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
// ----------------------- The end ------------------------------------------
|
||||
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="mysqlshutdown" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=mysqlshutdown - Win32 Release
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlshutdown.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlshutdown.mak" CFG="mysqlshutdown - Win32 Release"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "mysqlshutdown - Win32 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "mysqlshutdown - Win32 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=xicl6.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "mysqlshutdown - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "release"
|
||||
# PROP Intermediate_Dir "release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /W3 /O2 /D "_WINDOWS" /D "_MBCS" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"../client_release/mysqlshutdown.exe"
|
||||
|
||||
!ELSEIF "$(CFG)" == "mysqlshutdown - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "mysqlshutdown___Win32_Debug"
|
||||
# PROP BASE Intermediate_Dir "mysqlshutdown___Win32_Debug"
|
||||
# PROP BASE Ignore_Export_Lib 0
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "debug"
|
||||
# PROP Intermediate_Dir "debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /W3 /Z7 /Od /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"../client_release/mysqlshutdown.exe"
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /out:"../client_debug/mysqlshutdown.exe"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "mysqlshutdown - Win32 Release"
|
||||
# Name "mysqlshutdown - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlshutdown.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlshutdown.rc
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysql.ico
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,2 +0,0 @@
|
|||
MySql ICON DISCARDABLE "MYSQL.ICO"
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="mysqlshutdown" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Application" 0x0101
|
||||
|
||||
CFG=mysqlshutdown - WinIA64 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlshutdown_ia64.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlshutdown_ia64.mak" CFG="mysqlshutdown - WinIA64 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "mysqlshutdown - WinIA64 Release" (based on "Win32 (x86) Application")
|
||||
!MESSAGE "mysqlshutdown - WinIA64 Debug" (based on "Win32 (x86) Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
MTL=midl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "mysqlshutdown - WinIA64 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "release"
|
||||
# PROP Intermediate_Dir "release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /Zi /O2 /D "_WINDOWS" /D "_MBCS" /D "NDEBUG" /D "_IA64_" /D "WIN64" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /G2 /EHsc /Wp64 /Zm600 /c
|
||||
# SUBTRACT CPP /WX /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:IA64
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib bufferoverflowU.lib /nologo /subsystem:windows /out:"../client_release/mysqlshutdown.exe" /machine:IA64
|
||||
|
||||
!ELSEIF "$(CFG)" == "mysqlshutdown - WinIA64 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "mysqlshutdown___Win64_Debug"
|
||||
# PROP BASE Intermediate_Dir "mysqlshutdown___Win64_Debug"
|
||||
# PROP BASE Ignore_Export_Lib 0
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "debug"
|
||||
# PROP Intermediate_Dir "debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /W3 /Zi /Od /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_IA64_" /D "WIN64" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /G2 /EHsc /Wp64 /Zm600 /c
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win64
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /out:"../client_release/mysqlshutdown.exe" /machine:IA64
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib bufferoverflowU.lib /nologo /subsystem:windows /out:"../client_debug/mysqlshutdown.exe" /machine:IA64
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "mysqlshutdown - WinIA64 Release"
|
||||
# Name "mysqlshutdown - WinIA64 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlshutdown.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlshutdown.rc
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysql.ico
|
||||
# End Source File
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,745 +0,0 @@
|
|||
/****************************************************************************
|
||||
MySqlWatch - WinNT service program MySQL
|
||||
- Re-start MySql server in case of failure
|
||||
*****************************************************************************/
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <process.h>
|
||||
#include <tchar.h>
|
||||
|
||||
|
||||
// name of the executable
|
||||
#define SZAPPNAME "mysqlwatch"
|
||||
// internal name of the service
|
||||
#define SZSERVICENAME "MySqlWatch"
|
||||
// displayed name of the service
|
||||
#define SZSERVICEDISPLAYNAME "MySqlWatch"
|
||||
// list of service dependencies - "dep1\0dep2\0\0"
|
||||
#define SZDEPENDENCIES ""
|
||||
|
||||
|
||||
|
||||
VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv);
|
||||
VOID ServiceStop(void);
|
||||
BOOL ReportStatusToSCMgr(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint);
|
||||
void AddToMessageLog(LPTSTR lpszMsg);
|
||||
|
||||
// internal variables
|
||||
SERVICE_STATUS ssStatus; // current status of the service
|
||||
SERVICE_STATUS_HANDLE sshStatusHandle;
|
||||
DWORD dwErr = 0;
|
||||
BOOL bDebug = FALSE;
|
||||
TCHAR szErr[256];
|
||||
|
||||
// internal function prototypes
|
||||
void WINAPI service_ctrl(DWORD dwCtrlCode);
|
||||
void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv);
|
||||
void CmdInstallService(void);
|
||||
void CmdRemoveService(void);
|
||||
void CmdDebugService(int argc, char **argv);
|
||||
BOOL WINAPI ControlHandler ( DWORD dwCtrlType );
|
||||
LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
|
||||
|
||||
//
|
||||
// FUNCTION: main
|
||||
//
|
||||
// PURPOSE: entrypoint for service
|
||||
//
|
||||
// PARAMETERS:
|
||||
// argc - number of command line arguments
|
||||
// argv - array of command line arguments
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
// main() either performs the command line task, or
|
||||
// call StartServiceCtrlDispatcher to register the
|
||||
// main service thread. When the this call returns,
|
||||
// the service has stopped, so exit.
|
||||
//
|
||||
void main(int argc, char **argv)
|
||||
{
|
||||
SERVICE_TABLE_ENTRY dispatchTable[] =
|
||||
{
|
||||
{ TEXT(SZSERVICENAME), (LPSERVICE_MAIN_FUNCTION)service_main },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
if ( (argc > 1) &&
|
||||
((*argv[1] == '-') || (*argv[1] == '/')) )
|
||||
{
|
||||
if ( stricmp( "install", argv[1]+1 ) == 0 )
|
||||
{
|
||||
CmdInstallService();
|
||||
}
|
||||
else if ( stricmp( "remove", argv[1]+1 ) == 0 )
|
||||
{
|
||||
CmdRemoveService();
|
||||
}
|
||||
else if ( stricmp( "debug", argv[1]+1 ) == 0 )
|
||||
{
|
||||
bDebug = TRUE;
|
||||
CmdDebugService(argc, argv);
|
||||
}
|
||||
else
|
||||
{
|
||||
goto dispatch;
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// if it doesn't match any of the above parameters
|
||||
// the service control manager may be starting the service
|
||||
// so we must call StartServiceCtrlDispatcher
|
||||
dispatch:
|
||||
// this is just to be friendly
|
||||
printf( "%s -install to install the service\n", SZAPPNAME );
|
||||
printf( "%s -remove to remove the service\n", SZAPPNAME );
|
||||
printf( "%s -debug <params> to run as a console app for debugging\n", SZAPPNAME );
|
||||
printf( "\nStartServiceCtrlDispatcher being called.\n" );
|
||||
printf( "This may take several seconds. Please wait.\n" );
|
||||
|
||||
if (!StartServiceCtrlDispatcher(dispatchTable))
|
||||
AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed."));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: service_main
|
||||
//
|
||||
// PURPOSE: To perform actual initialization of the service
|
||||
//
|
||||
// PARAMETERS:
|
||||
// dwArgc - number of command line arguments
|
||||
// lpszArgv - array of command line arguments
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
// This routine performs the service initialization and then calls
|
||||
// the user defined ServiceStart() routine to perform majority
|
||||
// of the work.
|
||||
//
|
||||
void WINAPI service_main(DWORD dwArgc, LPTSTR *lpszArgv)
|
||||
{
|
||||
|
||||
// register our service control handler:
|
||||
//
|
||||
sshStatusHandle = RegisterServiceCtrlHandler( TEXT(SZSERVICENAME), service_ctrl);
|
||||
|
||||
if (!sshStatusHandle)
|
||||
goto cleanup;
|
||||
|
||||
// SERVICE_STATUS members that don't change in example
|
||||
//
|
||||
ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
|
||||
ssStatus.dwServiceSpecificExitCode = 0;
|
||||
|
||||
|
||||
// report the status to the service control manager.
|
||||
//
|
||||
if (!ReportStatusToSCMgr(
|
||||
SERVICE_START_PENDING, // service state
|
||||
NO_ERROR, // exit code
|
||||
3000)) // wait hint
|
||||
goto cleanup;
|
||||
|
||||
|
||||
ServiceStart( dwArgc, lpszArgv );
|
||||
|
||||
cleanup:
|
||||
|
||||
// try to report the stopped status to the service control manager.
|
||||
//
|
||||
if (sshStatusHandle)
|
||||
ReportStatusToSCMgr(
|
||||
SERVICE_STOPPED,
|
||||
dwErr,
|
||||
0);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: service_ctrl
|
||||
//
|
||||
// PURPOSE: This function is called by the SCM whenever
|
||||
// ControlService() is called on this service.
|
||||
//
|
||||
// PARAMETERS:
|
||||
// dwCtrlCode - type of control requested
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void WINAPI service_ctrl(DWORD dwCtrlCode)
|
||||
{
|
||||
// Handle the requested control code.
|
||||
//
|
||||
switch(dwCtrlCode)
|
||||
{
|
||||
// Stop the service.
|
||||
//
|
||||
case SERVICE_CONTROL_STOP:
|
||||
ssStatus.dwCurrentState = SERVICE_STOP_PENDING;
|
||||
ServiceStop();
|
||||
break;
|
||||
|
||||
// Update the service status.
|
||||
//
|
||||
case SERVICE_CONTROL_INTERROGATE:
|
||||
break;
|
||||
|
||||
// invalid control code
|
||||
//
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
ReportStatusToSCMgr(ssStatus.dwCurrentState, NO_ERROR, 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: ReportStatusToSCMgr()
|
||||
//
|
||||
// PURPOSE: Sets the current status of the service and
|
||||
// reports it to the Service Control Manager
|
||||
//
|
||||
// PARAMETERS:
|
||||
// dwCurrentState - the state of the service
|
||||
// dwWin32ExitCode - error code to report
|
||||
// dwWaitHint - worst case estimate to next checkpoint
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// TRUE - success
|
||||
// FALSE - failure
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
BOOL ReportStatusToSCMgr(DWORD dwCurrentState,
|
||||
DWORD dwWin32ExitCode,
|
||||
DWORD dwWaitHint)
|
||||
{
|
||||
static DWORD dwCheckPoint = 1;
|
||||
BOOL fResult = TRUE;
|
||||
|
||||
|
||||
if ( !bDebug ) // when debugging we don't report to the SCM
|
||||
{
|
||||
if (dwCurrentState == SERVICE_START_PENDING)
|
||||
ssStatus.dwControlsAccepted = 0;
|
||||
else
|
||||
ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
|
||||
|
||||
ssStatus.dwCurrentState = dwCurrentState;
|
||||
ssStatus.dwWin32ExitCode = dwWin32ExitCode;
|
||||
ssStatus.dwWaitHint = dwWaitHint;
|
||||
|
||||
if ( ( dwCurrentState == SERVICE_RUNNING ) ||
|
||||
( dwCurrentState == SERVICE_STOPPED ) )
|
||||
ssStatus.dwCheckPoint = 0;
|
||||
else
|
||||
ssStatus.dwCheckPoint = dwCheckPoint++;
|
||||
|
||||
|
||||
// Report the status of the service to the service control manager.
|
||||
//
|
||||
if (!(fResult = SetServiceStatus( sshStatusHandle, &ssStatus))) {
|
||||
AddToMessageLog(TEXT("SetServiceStatus"));
|
||||
}
|
||||
}
|
||||
return fResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: AddToMessageLog(LPTSTR lpszMsg)
|
||||
//
|
||||
// PURPOSE: Allows any thread to log an error message
|
||||
//
|
||||
// PARAMETERS:
|
||||
// lpszMsg - text for message
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void AddToMessageLog(LPTSTR lpszMsg)
|
||||
{
|
||||
TCHAR szMsg[256];
|
||||
HANDLE hEventSource;
|
||||
LPTSTR lpszStrings[2];
|
||||
|
||||
|
||||
if ( !bDebug )
|
||||
{
|
||||
dwErr = GetLastError();
|
||||
|
||||
// Use event logging to log the error.
|
||||
//
|
||||
hEventSource = RegisterEventSource(NULL, TEXT(SZSERVICENAME));
|
||||
|
||||
_stprintf(szMsg, TEXT("%s error: %d"), TEXT(SZSERVICENAME), dwErr);
|
||||
lpszStrings[0] = szMsg;
|
||||
lpszStrings[1] = lpszMsg;
|
||||
|
||||
if (hEventSource != NULL) {
|
||||
ReportEvent(hEventSource, // handle of event source
|
||||
EVENTLOG_ERROR_TYPE, // event type
|
||||
0, // event category
|
||||
0, // event ID
|
||||
NULL, // current user's SID
|
||||
2, // strings in lpszStrings
|
||||
0, // no bytes of raw data
|
||||
lpszStrings, // array of error strings
|
||||
NULL); // no raw data
|
||||
|
||||
DeregisterEventSource(hEventSource);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// The following code handles service installation and removal
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: CmdInstallService()
|
||||
//
|
||||
// PURPOSE: Installs the service
|
||||
//
|
||||
// PARAMETERS:
|
||||
// none
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void CmdInstallService()
|
||||
{
|
||||
SC_HANDLE schService;
|
||||
SC_HANDLE schSCManager;
|
||||
|
||||
TCHAR szPath[512];
|
||||
|
||||
if ( GetModuleFileName( NULL, szPath, 512 ) == 0 )
|
||||
{
|
||||
_tprintf(TEXT("Unable to install %s - %s\n"), TEXT(SZSERVICEDISPLAYNAME), GetLastErrorText(szErr, 256));
|
||||
return;
|
||||
}
|
||||
|
||||
schSCManager = OpenSCManager(
|
||||
NULL, // machine (NULL == local)
|
||||
NULL, // database (NULL == default)
|
||||
SC_MANAGER_ALL_ACCESS // access required
|
||||
);
|
||||
if ( schSCManager )
|
||||
{
|
||||
schService = CreateService(
|
||||
schSCManager, // SCManager database
|
||||
TEXT(SZSERVICENAME), // name of service
|
||||
TEXT(SZSERVICEDISPLAYNAME), // name to display
|
||||
SERVICE_ALL_ACCESS, // desired access
|
||||
SERVICE_WIN32_OWN_PROCESS, // service type
|
||||
SERVICE_DEMAND_START, // start type
|
||||
SERVICE_ERROR_NORMAL, // error control type
|
||||
szPath, // service's binary
|
||||
NULL, // no load ordering group
|
||||
NULL, // no tag identifier
|
||||
TEXT(SZDEPENDENCIES), // dependencies
|
||||
NULL, // LocalSystem account
|
||||
NULL); // no password
|
||||
|
||||
if ( schService )
|
||||
{
|
||||
_tprintf(TEXT("%s installed.\n"), TEXT(SZSERVICEDISPLAYNAME) );
|
||||
CloseServiceHandle(schService);
|
||||
}
|
||||
else
|
||||
{
|
||||
_tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(szErr, 256));
|
||||
}
|
||||
|
||||
CloseServiceHandle(schSCManager);
|
||||
}
|
||||
else
|
||||
_tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: CmdRemoveService()
|
||||
//
|
||||
// PURPOSE: Stops and removes the service
|
||||
//
|
||||
// PARAMETERS:
|
||||
// none
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void CmdRemoveService()
|
||||
{
|
||||
SC_HANDLE schService;
|
||||
SC_HANDLE schSCManager;
|
||||
|
||||
schSCManager = OpenSCManager(
|
||||
NULL, // machine (NULL == local)
|
||||
NULL, // database (NULL == default)
|
||||
SC_MANAGER_ALL_ACCESS // access required
|
||||
);
|
||||
if ( schSCManager )
|
||||
{
|
||||
schService = OpenService(schSCManager, TEXT(SZSERVICENAME), SERVICE_ALL_ACCESS);
|
||||
|
||||
if (schService)
|
||||
{
|
||||
// try to stop the service
|
||||
if ( ControlService( schService, SERVICE_CONTROL_STOP, &ssStatus ) )
|
||||
{
|
||||
_tprintf(TEXT("Stopping %s."), TEXT(SZSERVICEDISPLAYNAME));
|
||||
Sleep( 1000 );
|
||||
|
||||
while( QueryServiceStatus( schService, &ssStatus ) )
|
||||
{
|
||||
if ( ssStatus.dwCurrentState == SERVICE_STOP_PENDING )
|
||||
{
|
||||
_tprintf(TEXT("."));
|
||||
Sleep( 1000 );
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ssStatus.dwCurrentState == SERVICE_STOPPED )
|
||||
_tprintf(TEXT("\n%s stopped.\n"), TEXT(SZSERVICEDISPLAYNAME) );
|
||||
else
|
||||
_tprintf(TEXT("\n%s failed to stop.\n"), TEXT(SZSERVICEDISPLAYNAME) );
|
||||
|
||||
}
|
||||
|
||||
// now remove the service
|
||||
if( DeleteService(schService) )
|
||||
_tprintf(TEXT("%s removed.\n"), TEXT(SZSERVICEDISPLAYNAME) );
|
||||
else
|
||||
_tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
|
||||
|
||||
CloseServiceHandle(schService);
|
||||
}
|
||||
else
|
||||
_tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
|
||||
CloseServiceHandle(schSCManager);
|
||||
}
|
||||
else
|
||||
_tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: CmdRestartService()
|
||||
//
|
||||
// PURPOSE: Stops and removes the service
|
||||
//
|
||||
// PARAMETERS:
|
||||
// none
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void CmdRestartService(char *szServiceName)
|
||||
{
|
||||
SC_HANDLE schService;
|
||||
SC_HANDLE schSCManager;
|
||||
|
||||
schSCManager = OpenSCManager(
|
||||
NULL, // machine (NULL == local)
|
||||
NULL, // database (NULL == default)
|
||||
SC_MANAGER_ALL_ACCESS // access required
|
||||
);
|
||||
if ( schSCManager )
|
||||
{
|
||||
schService = OpenService(schSCManager, TEXT(szServiceName), SERVICE_ALL_ACCESS);
|
||||
if (schService)
|
||||
{
|
||||
if(! ControlService( schService, SERVICE_CONTROL_INTERROGATE, &ssStatus ) )
|
||||
//if(QueryServiceStatus( schService, &ssStatus )==0)
|
||||
{
|
||||
if(GetLastError()==ERROR_SERVICE_NOT_ACTIVE)
|
||||
{
|
||||
|
||||
//AddToMessageLog(TEXT("Start service..."));
|
||||
StartService( schService, 0,NULL);
|
||||
}
|
||||
else
|
||||
{ ;
|
||||
//AddToMessageLog(TEXT("QueryService..."));
|
||||
//AddToMessageLog(TEXT(GetLastErrorText(szErr,256)));
|
||||
}
|
||||
}
|
||||
CloseServiceHandle(schService);
|
||||
}
|
||||
else
|
||||
{ _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
AddToMessageLog(TEXT("OpenService..."));
|
||||
AddToMessageLog(TEXT(GetLastErrorText(szErr,256)));
|
||||
|
||||
}
|
||||
CloseServiceHandle(schSCManager);
|
||||
}
|
||||
else
|
||||
{ _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(szErr,256));
|
||||
AddToMessageLog(TEXT("OpenSCMManager.."));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// The following code is for running the service as a console app
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: CmdDebugService(int argc, char ** argv)
|
||||
//
|
||||
// PURPOSE: Runs the service as a console application
|
||||
//
|
||||
// PARAMETERS:
|
||||
// argc - number of command line arguments
|
||||
// argv - array of command line arguments
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// none
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
void CmdDebugService(int argc, char ** argv)
|
||||
{
|
||||
DWORD dwArgc;
|
||||
LPTSTR *lpszArgv;
|
||||
|
||||
#ifdef UNICODE
|
||||
lpszArgv = CommandLineToArgvW(GetCommandLineW(), &(dwArgc) );
|
||||
#else
|
||||
dwArgc = (DWORD) argc;
|
||||
lpszArgv = argv;
|
||||
#endif
|
||||
|
||||
_tprintf(TEXT("Debugging %s.\n"), TEXT(SZSERVICEDISPLAYNAME));
|
||||
|
||||
SetConsoleCtrlHandler( ControlHandler, TRUE );
|
||||
|
||||
ServiceStart( dwArgc, lpszArgv );
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// FUNCTION: ControlHandler ( DWORD dwCtrlType )
|
||||
//
|
||||
// PURPOSE: Handled console control events
|
||||
//
|
||||
// PARAMETERS:
|
||||
// dwCtrlType - type of control event
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// True - handled
|
||||
// False - unhandled
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
BOOL WINAPI ControlHandler ( DWORD dwCtrlType )
|
||||
{
|
||||
switch( dwCtrlType )
|
||||
{
|
||||
case CTRL_BREAK_EVENT: // use Ctrl+C or Ctrl+Break to simulate
|
||||
case CTRL_C_EVENT: // SERVICE_CONTROL_STOP in debug mode
|
||||
_tprintf(TEXT("Stopping %s.\n"), TEXT(SZSERVICEDISPLAYNAME));
|
||||
ServiceStop();
|
||||
return TRUE;
|
||||
break;
|
||||
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// FUNCTION: GetLastErrorText
|
||||
//
|
||||
// PURPOSE: copies error message text to string
|
||||
//
|
||||
// PARAMETERS:
|
||||
// lpszBuf - destination buffer
|
||||
// dwSize - size of buffer
|
||||
//
|
||||
// RETURN VALUE:
|
||||
// destination buffer
|
||||
//
|
||||
// COMMENTS:
|
||||
//
|
||||
LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize )
|
||||
{
|
||||
DWORD dwRet;
|
||||
LPTSTR lpszTemp = NULL;
|
||||
|
||||
dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
LANG_NEUTRAL,
|
||||
(LPTSTR)&lpszTemp,
|
||||
0,
|
||||
NULL );
|
||||
|
||||
// supplied buffer is not long enough
|
||||
if ( !dwRet || ( (long)dwSize < (long)dwRet+14 ) )
|
||||
lpszBuf[0] = TEXT('\0');
|
||||
else
|
||||
{
|
||||
lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); //remove cr and newline character
|
||||
_stprintf( lpszBuf, TEXT("%s (0x%x)"), lpszTemp, GetLastError() );
|
||||
}
|
||||
|
||||
if ( lpszTemp )
|
||||
LocalFree((HLOCAL) lpszTemp );
|
||||
|
||||
return lpszBuf;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// this event is signalled when the
|
||||
// service should end
|
||||
//-------------------------------------------------
|
||||
HANDLE hServerStopEvent = NULL;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// FUNCTION: ServiceStart
|
||||
//
|
||||
// PURPOSE: Actual code of the service
|
||||
// that does the work.
|
||||
//-------------------------------------------------
|
||||
void ServiceStart (DWORD dwArgc, LPTSTR *lpszArgv)
|
||||
{
|
||||
DWORD dwWait,dwTimeout=1000*60*1;
|
||||
|
||||
if (!ReportStatusToSCMgr(
|
||||
SERVICE_START_PENDING, // service state
|
||||
NO_ERROR, // exit code
|
||||
3000)) // wait hint
|
||||
goto cleanup;
|
||||
|
||||
// create the event object. The control handler function signals
|
||||
// this event when it receives the "stop" control code.
|
||||
//
|
||||
hServerStopEvent = CreateEvent(
|
||||
NULL, // no security attributes
|
||||
TRUE, // manual reset event
|
||||
FALSE, // not-signalled
|
||||
NULL); // no name
|
||||
|
||||
if ( hServerStopEvent == NULL) goto cleanup;
|
||||
|
||||
|
||||
// report the status to the service control manager.
|
||||
//
|
||||
if (!ReportStatusToSCMgr(
|
||||
SERVICE_START_PENDING, // service state
|
||||
NO_ERROR, // exit code
|
||||
3000)) // wait hint
|
||||
goto cleanup;
|
||||
|
||||
|
||||
|
||||
// report the status to the service control manager.
|
||||
//
|
||||
if (!ReportStatusToSCMgr(
|
||||
SERVICE_START_PENDING, // service state
|
||||
NO_ERROR, // exit code
|
||||
3000)) // wait hint
|
||||
goto cleanup;
|
||||
|
||||
|
||||
|
||||
// report the status to the service control manager.
|
||||
//
|
||||
if (!ReportStatusToSCMgr(
|
||||
SERVICE_RUNNING, // service state
|
||||
NO_ERROR, // exit code
|
||||
0)) // wait hint
|
||||
goto cleanup;
|
||||
|
||||
//
|
||||
// End of initialization
|
||||
// Service is now running, perform work until shutdown
|
||||
//
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
|
||||
dwWait = WaitForSingleObject( hServerStopEvent, dwTimeout);
|
||||
if(dwWait==WAIT_FAILED)
|
||||
{
|
||||
AddToMessageLog(TEXT("Error in WaitForSingleObject"));
|
||||
break;
|
||||
}
|
||||
else if(dwWait==WAIT_TIMEOUT)
|
||||
{
|
||||
CmdRestartService("MySql");
|
||||
}
|
||||
else
|
||||
{ break; //shutdown
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
||||
if (hServerStopEvent)
|
||||
CloseHandle(hServerStopEvent);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// FUNCTION: ServiceStop
|
||||
//
|
||||
// PURPOSE: Stops the service
|
||||
//-------------------------------------------------
|
||||
void ServiceStop()
|
||||
{
|
||||
if ( hServerStopEvent )
|
||||
SetEvent(hServerStopEvent);
|
||||
}
|
||||
//-the end ----------------------------------------
|
|
@ -1,70 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="mysqlwatch" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=mysqlwatch - Win32 Release
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlwatch.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlwatch.mak" CFG="mysqlwatch - Win32 Release"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "mysqlwatch - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=xicl6.exe
|
||||
RSC=rc.exe
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "release"
|
||||
# PROP Intermediate_Dir "release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /W3 /O2 /D "_WINDOWS" /D "_MBCS" /D "NDEBUG" /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=xilink6.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"../client_release/mysqlwatch.exe"
|
||||
# Begin Target
|
||||
|
||||
# Name "mysqlwatch - Win32 Release"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlwatch.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
|
@ -1,71 +0,0 @@
|
|||
# Microsoft Developer Studio Project File - Name="mysqlwatch" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=mysqlwatch - WinIA64 Release
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlwatch_ia64.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "mysqlwatch_ia64.mak" CFG="mysqlwatch - WinIA64 Release"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "mysqlwatch - WinIA64 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "release"
|
||||
# PROP Intermediate_Dir "release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
MTL=midl.exe
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /Zi /O2 /D "_WINDOWS" /D "_MBCS" /D "NDEBUG" /D "_IA64_" /D "WIN64" /D "WIN32" /D "_AFX_NO_DAO_SUPPORT" /FD /G2 /EHsc /Wp64 /Zm600 /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IA64
|
||||
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib bufferoverflowU.lib /nologo /subsystem:console /out:"../client_release/mysqlwatch.exe" /machine:IA64
|
||||
# Begin Target
|
||||
|
||||
# Name "mysqlwatch - WinIA64 Release"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\mysqlwatch.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
|
@ -209,6 +209,10 @@ SOURCE=.\default.c
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\default_modify.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\errors.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -49,7 +49,7 @@ RSC=rc.exe
|
|||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../zlib" /I "../include" /I "../regex" /D "NDEBUG" /D "DBUG_OFF" /D "HAVE_INNOBASE_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../zlib" /I "../include" /I "../regex" /I "../extra/yassl/include" /D "NDEBUG" /D "DBUG_OFF" /D "HAVE_INNOBASE_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x410 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
|
@ -75,7 +75,7 @@ LINK32=xilink6.exe
|
|||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../zlib" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /c
|
||||
# ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../extra/yassl/include" /I "../zlib" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "HAVE_ARCHIVE_DB" /D "HAVE_BLACKHOLE_DB" /D "HAVE_FEDERATED_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /c
|
||||
# SUBTRACT CPP /Fr /YX
|
||||
# ADD BASE RSC /l 0x410 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
|
@ -102,7 +102,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G5 /MT /W3 /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__WIN32__" /D "DBUG_OFF" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "NDEBUG" /D "__NT__" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "HAVE_INNOBASE_DB" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-nt /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /I "../extra/yassl/include" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "HAVE_INNOBASE_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-nt /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x410 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
|
@ -130,7 +130,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /D "NDEBUG" /D "__NT__" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../zlib" /D "NDEBUG" /D "__NT__" /D "DBUG_OFF" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-nt-max /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../extra/yassl/include" /I "../zlib" /D "NDEBUG" /D "__NT__" /D "DBUG_OFF" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "HAVE_ARCHIVE_DB" /D "HAVE_BLACKHOLE_DB" /D "HAVE_FEDERATED_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-nt-max /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
|
@ -159,7 +159,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /D "NDEBUG" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../zlib" /D "NDEBUG" /D "DBUG_OFF" /D "USE_SYMDIR" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-max /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../bdb/build_win32" /I "../include" /I "../regex" /I "../extra/yassl/include" /I "../zlib" /D "NDEBUG" /D "DBUG_OFF" /D "USE_SYMDIR" /D "HAVE_INNOBASE_DB" /D "HAVE_BERKELEY_DB" /D "HAVE_ARCHIVE_DB" /D "HAVE_BLACKHOLE_DB" /D "HAVE_FEDERATED_DB" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-max /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
|
@ -187,7 +187,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D LICENSE=Commercial /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "HAVE_DLOPEN" /D "DBUG_OFF" /D "_MBCS" /D "NDEBUG" /FD /D MYSQL_SERVER_SUFFIX=-classic /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /I "../extra/yassl/include" /D LICENSE=Commercial /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "HAVE_DLOPEN" /D "DBUG_OFF" /D "_MBCS" /D "NDEBUG" /FD /D MYSQL_SERVER_SUFFIX=-classic /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@ -215,7 +215,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "MYSQL_SERVER" /D LICENSE=Commercial /D "_MBCS" /D "HAVE_DLOPEN" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "NDEBUG" /D "_WINDOWS" /D "_CONSOLE" /D MYSQL_SERVER_SUFFIX=-pro /FD /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /I "../extra/yassl/include" /D "MYSQL_SERVER" /D LICENSE=Commercial /D "_MBCS" /D "HAVE_DLOPEN" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "NDEBUG" /D "_WINDOWS" /D "_CONSOLE" /D MYSQL_SERVER_SUFFIX=-pro /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@ -243,7 +243,7 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /D LICENSE=Commercial /D MYSQL_SERVER_SUFFIX=-classic-nt /c
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /I "../extra/yassl/include" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /FD /D LICENSE=Commercial /D MYSQL_SERVER_SUFFIX=-classic-nt /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
|
@ -272,7 +272,8 @@ LINK32=xilink6.exe
|
|||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "DBUG_OFF" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "USE_SYMDIR" /D "HAVE_DLOPEN" /D "NDEBUG" /FD /c
|
||||
# SUBTRACT BASE CPP /YX
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /D "__NT__" /D "DBUG_OFF" /D "HAVE_INNOBASE_DB" /D LICENSE=Commercial /D "NDEBUG" /D "MYSQL_SERVER" /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-pro-nt" /FD
|
||||
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../zlib" /I "../extra/yassl/include" /D "__NT__" /D "DBUG_OFF" /D "NDEBUG" /D "HAVE_INNOBASE_DB" /D "MYSQL_SERVER" /D LICENSE=Commercial /D "_WINDOWS" /D "_CONSOLE" /D "_MBCS" /D "HAVE_DLOPEN" /D MYSQL_SERVER_SUFFIX=-pro-nt" /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@ -451,6 +452,18 @@ SOURCE=.\gstream.cpp
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\examples\ha_archive.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ha_blackhole.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ha_federated.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ha_berkeley.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "db.h"
|
||||
#include "main.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma resource "*.dfm"
|
||||
Tdbfrm *dbfrm;
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall Tdbfrm::Tdbfrm(TComponent* Owner)
|
||||
: TForm(Owner)
|
||||
{
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall Tdbfrm::SpeedButton2Click(TObject *Sender)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall Tdbfrm::SpeedButton1Click(TObject *Sender)
|
||||
{
|
||||
if (VerDBName())
|
||||
{
|
||||
if (!Form1->CreatingDB())
|
||||
{
|
||||
Form1->OutRefresh();
|
||||
Edit1->Text = "";
|
||||
Application->MessageBox("The database was created", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
bool __fastcall Tdbfrm::VerDBName()
|
||||
{
|
||||
String temp = Edit1->Text;
|
||||
if (Edit1->Text.IsEmpty())
|
||||
{
|
||||
Application->MessageBox("The name of the Database is Empty", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (temp.Length() > 64)
|
||||
{
|
||||
Application->MessageBox("The name of the Database can't have more than 64 characters ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int j = 1; j <= temp.Length(); j++)
|
||||
{
|
||||
if (temp[j] == ' ')
|
||||
{
|
||||
Application->MessageBox("The name of the Database can't have blank spaces ", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
else if (temp[j] == '/')
|
||||
{
|
||||
Application->MessageBox("The name of the Database can't have frontslash (/)", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
else if (temp[j] == '\\')
|
||||
{
|
||||
Application->MessageBox("The name of the Database can't have backslash (\\)", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
else if (temp[j] == '.')
|
||||
{
|
||||
Application->MessageBox("The name of the Database can't have periods", "WinMySQLadmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
|
@ -1,32 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#ifndef dbH
|
||||
#define dbH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
#include <Controls.hpp>
|
||||
#include <StdCtrls.hpp>
|
||||
#include <Forms.hpp>
|
||||
#include <ExtCtrls.hpp>
|
||||
#include <Graphics.hpp>
|
||||
#include <Buttons.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class Tdbfrm : public TForm
|
||||
{
|
||||
__published: // IDE-managed Components
|
||||
TImage *Image1;
|
||||
TLabel *Label1;
|
||||
TLabel *Label2;
|
||||
TEdit *Edit1;
|
||||
TSpeedButton *SpeedButton1;
|
||||
TSpeedButton *SpeedButton2;
|
||||
void __fastcall SpeedButton2Click(TObject *Sender);
|
||||
void __fastcall SpeedButton1Click(TObject *Sender);
|
||||
private: // User declarations
|
||||
bool __fastcall VerDBName();
|
||||
public: // User declarations
|
||||
__fastcall Tdbfrm(TComponent* Owner);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern PACKAGE Tdbfrm *dbfrm;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 644 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 644 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 644 B |
|
@ -1,42 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "initsetup.h"
|
||||
#include "main.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma resource "*.dfm"
|
||||
TForm2 *Form2;
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TForm2::TForm2(TComponent* Owner)
|
||||
: TForm(Owner)
|
||||
{
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
|
||||
{
|
||||
if ((Edit1->Text).IsEmpty() || (Edit2->Text).IsEmpty())
|
||||
Application->MessageBox("Fill the User name and Password text boxs ", "Winmysqladmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
else
|
||||
{
|
||||
if(Form1->ForceConnection())
|
||||
if(Form1->ForceMySQLInit())
|
||||
{
|
||||
Form1->CreateMyIniFile();
|
||||
Form1->CreatingShortCut();
|
||||
}
|
||||
Close();
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::SpeedButton1Click(TObject *Sender)
|
||||
{
|
||||
Application->HelpCommand(HELP_FINDER,0);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 766 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 644 B |
|
@ -1,40 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "initsetup.h"
|
||||
#include "main.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma resource "*.dfm"
|
||||
TForm2 *Form2;
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TForm2::TForm2(TComponent* Owner)
|
||||
: TForm(Owner)
|
||||
{
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
|
||||
{
|
||||
if ((Edit1->Text).IsEmpty() || (Edit2->Text).IsEmpty())
|
||||
Application->MessageBox("Fill the User name and Password text boxs ", "Winmysqladmin 1.0", MB_OK |MB_ICONINFORMATION);
|
||||
else
|
||||
{
|
||||
Form1->GetServerFile();
|
||||
Form1->CreateMyIniFile();
|
||||
Form1->CreatingShortCut();
|
||||
|
||||
Close();
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm2::SpeedButton1Click(TObject *Sender)
|
||||
{
|
||||
Application->HelpCommand(HELP_FINDER,0);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
|
@ -1,38 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#ifndef initsetupH
|
||||
#define initsetupH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
#include <Controls.hpp>
|
||||
#include <StdCtrls.hpp>
|
||||
#include <Forms.hpp>
|
||||
#include <Buttons.hpp>
|
||||
#include <ExtCtrls.hpp>
|
||||
#include <Graphics.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class TForm2 : public TForm
|
||||
{
|
||||
__published: // IDE-managed Components
|
||||
TImage *Image1;
|
||||
TLabel *Label1;
|
||||
TLabel *Label4;
|
||||
TPanel *Panel1;
|
||||
TLabel *Label5;
|
||||
TLabel *Label6;
|
||||
TLabel *Label2;
|
||||
TEdit *Edit1;
|
||||
TEdit *Edit2;
|
||||
TBitBtn *BitBtn1;
|
||||
TSpeedButton *SpeedButton1;
|
||||
TBitBtn *BitBtn2;
|
||||
void __fastcall BitBtn1Click(TObject *Sender);
|
||||
void __fastcall BitBtn2Click(TObject *Sender);
|
||||
void __fastcall SpeedButton1Click(TObject *Sender);
|
||||
private: // User declarations
|
||||
public: // User declarations
|
||||
__fastcall TForm2(TComponent* Owner);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern PACKAGE TForm2 *Form2;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
|
@ -1,314 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#ifndef mainH
|
||||
#define mainH
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
#include <Controls.hpp>
|
||||
#include <StdCtrls.hpp>
|
||||
#include <Forms.hpp>
|
||||
#include <Buttons.hpp>
|
||||
#include <ComCtrls.hpp>
|
||||
#include <ExtCtrls.hpp>
|
||||
#include <Graphics.hpp>
|
||||
#include <Grids.hpp>
|
||||
#include <ImgList.hpp>
|
||||
#include <Menus.hpp>
|
||||
#include <Dialogs.hpp>
|
||||
#include <string.h>
|
||||
|
||||
#define MYWM_NOTIFY (WM_APP+100)
|
||||
#define IDC_MYICON 1006
|
||||
extern HINSTANCE g_hinst;
|
||||
LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi);
|
||||
//---------------------------------------------------------------------------
|
||||
class TForm1 : public TForm
|
||||
{
|
||||
__published: // IDE-managed Components
|
||||
TStatusBar *StatusLine;
|
||||
TPanel *Panel1;
|
||||
TImage *Image1;
|
||||
TLabel *Label1;
|
||||
TLabel *Label2;
|
||||
TLabel *Label3;
|
||||
TLabel *Label8;
|
||||
TImage *Image3;
|
||||
TImage *Image2;
|
||||
TPageControl *PageControl1;
|
||||
TTabSheet *TabSheet1;
|
||||
TSpeedButton *SpeedButton1;
|
||||
TGroupBox *GroupBox1;
|
||||
TLabel *Label4;
|
||||
TLabel *Label5;
|
||||
TLabel *Label6;
|
||||
TLabel *Label14;
|
||||
TLabel *Label17;
|
||||
TEdit *Localhost;
|
||||
TEdit *Localuser;
|
||||
TEdit *OS;
|
||||
TMemo *Memo2;
|
||||
TEdit *Edit2;
|
||||
TGroupBox *GroupBox2;
|
||||
TMemo *Memo3;
|
||||
TGroupBox *GroupBox3;
|
||||
TLabel *Label13;
|
||||
TLabel *Label15;
|
||||
TLabel *Label16;
|
||||
TLabel *Label7;
|
||||
TLabel *Label47;
|
||||
TLabel *Label44;
|
||||
TLabel *Label42;
|
||||
TLabel *Label45;
|
||||
TEdit *Edit3;
|
||||
TEdit *Edit4;
|
||||
TEdit *Edit5;
|
||||
TEdit *Edit6;
|
||||
TEdit *st29;
|
||||
TEdit *st27;
|
||||
TEdit *st25;
|
||||
TEdit *st28;
|
||||
TTabSheet *TabSheet2;
|
||||
TTabSheet *TabSheet3;
|
||||
TLabel *Label18;
|
||||
TSpeedButton *SpeedButton2;
|
||||
TEdit *BaseDir;
|
||||
TMemo *Memo1;
|
||||
TRadioGroup *RadioGroup1;
|
||||
TRadioButton *ShareVer;
|
||||
TRadioButton *MysqldVer;
|
||||
TRadioButton *OptVer;
|
||||
TRadioButton *NtVer;
|
||||
TButton *Button2;
|
||||
TButton *Button3;
|
||||
TButton *Button1;
|
||||
TTabSheet *TabSheet4;
|
||||
TMemo *Memo4;
|
||||
TButton *Button5;
|
||||
TTabSheet *TabSheet5;
|
||||
TStringGrid *StringGrid1;
|
||||
TButton *Button11;
|
||||
TTabSheet *TabSheet6;
|
||||
TStringGrid *StringGrid2;
|
||||
TButton *Button10;
|
||||
TPopupMenu *PopupMenu1;
|
||||
TMenuItem *Showme1;
|
||||
TMenuItem *N1;
|
||||
TMenuItem *Win9;
|
||||
TMenuItem *Swin9;
|
||||
TMenuItem *N3;
|
||||
TMenuItem *SSW9;
|
||||
TMenuItem *N4;
|
||||
TMenuItem *ShutDownBoth1;
|
||||
TMenuItem *N2;
|
||||
TMenuItem *WinNT;
|
||||
TMenuItem *ShutDownthisTool1;
|
||||
TMenuItem *N5;
|
||||
TMenuItem *StopS;
|
||||
TMenuItem *N6;
|
||||
TMenuItem *RService;
|
||||
TMenuItem *N7;
|
||||
TMenuItem *Standa;
|
||||
TImageList *ImageList1;
|
||||
TTimer *Timer1;
|
||||
TTimer *Timer2;
|
||||
TTimer *Timer3;
|
||||
TSpeedButton *SpeedButton3;
|
||||
TSpeedButton *Extended;
|
||||
TLabel *Label9;
|
||||
TEdit *st26;
|
||||
TLabel *Label43;
|
||||
TEdit *st24;
|
||||
TLabel *Label41;
|
||||
TEdit *st23;
|
||||
TLabel *Label40;
|
||||
TEdit *st22;
|
||||
TLabel *Label39;
|
||||
TTabSheet *TabSheet8;
|
||||
TSaveDialog *SaveFileDialog;
|
||||
TPrinterSetupDialog *PrinterSetupDialog1;
|
||||
TPrintDialog *PrintDialog1;
|
||||
TRichEdit *Memo5;
|
||||
TGroupBox *GroupBox5;
|
||||
TSpeedButton *SpeedButton4;
|
||||
TSpeedButton *SpeedButton5;
|
||||
TSpeedButton *SpeedButton7;
|
||||
TSpeedButton *SpeedButton6;
|
||||
TGroupBox *GroupBox6;
|
||||
TSpeedButton *SpeedButton8;
|
||||
TSpeedButton *SpeedButton9;
|
||||
TSpeedButton *SpeedButton10;
|
||||
TSpeedButton *SpeedButton11;
|
||||
TSpeedButton *SpeedButton12;
|
||||
TTabSheet *TabSheet9;
|
||||
TImageList *ImageList2;
|
||||
TPopupMenu *PopupMenu2;
|
||||
TMenuItem *CreateDatabaseS;
|
||||
TMenuItem *DeleteDatabaseS;
|
||||
TMenuItem *RefreshS;
|
||||
TMenuItem *N8;
|
||||
TMenuItem *N9;
|
||||
TMenuItem *N10;
|
||||
TGroupBox *GroupBox7;
|
||||
TTreeView *DBView;
|
||||
TGroupBox *GroupBox8;
|
||||
TTreeView *TableView;
|
||||
TGroupBox *GroupBox9;
|
||||
TStringGrid *StringGrid4;
|
||||
TMenuItem *FlushHosts1;
|
||||
TMenuItem *N11;
|
||||
TMenuItem *FlushLogs1;
|
||||
TMenuItem *N12;
|
||||
TMenuItem *FlushTables1;
|
||||
TGroupBox *GroupBox10;
|
||||
TStringGrid *StringGrid3;
|
||||
TImage *Image5;
|
||||
TStringGrid *StringGrid5;
|
||||
TSpeedButton *SpeedButton13;
|
||||
TPopupMenu *PopupMenu4;
|
||||
TMenuItem *KillProcess1;
|
||||
TMenuItem *N13;
|
||||
TMenuItem *FlushThreads1;
|
||||
void __fastcall FormCreate(TObject *Sender);
|
||||
void __fastcall Showme1Click(TObject *Sender);
|
||||
void __fastcall Timer1Timer(TObject *Sender);
|
||||
void __fastcall SpeedButton1Click(TObject *Sender);
|
||||
void __fastcall Timer2Timer(TObject *Sender);
|
||||
void __fastcall Swin9Click(TObject *Sender);
|
||||
void __fastcall SSW9Click(TObject *Sender);
|
||||
void __fastcall ShutDownBoth1Click(TObject *Sender);
|
||||
void __fastcall ShutDownthisTool1Click(TObject *Sender);
|
||||
void __fastcall StopSClick(TObject *Sender);
|
||||
void __fastcall RServiceClick(TObject *Sender);
|
||||
void __fastcall StandaClick(TObject *Sender);
|
||||
void __fastcall Button5Click(TObject *Sender);
|
||||
void __fastcall Timer3Timer(TObject *Sender);
|
||||
void __fastcall Button11Click(TObject *Sender);
|
||||
void __fastcall Button10Click(TObject *Sender);
|
||||
void __fastcall Button6Click(TObject *Sender);
|
||||
void __fastcall Button7Click(TObject *Sender);
|
||||
void __fastcall Button8Click(TObject *Sender);
|
||||
|
||||
void __fastcall Button2Click(TObject *Sender);
|
||||
void __fastcall Button3Click(TObject *Sender);
|
||||
void __fastcall Button1Click(TObject *Sender);
|
||||
void __fastcall SpeedButton2Click(TObject *Sender);
|
||||
void __fastcall Button4Click(TObject *Sender);
|
||||
void __fastcall SpeedButton3Click(TObject *Sender);
|
||||
void __fastcall ExtendedClick(TObject *Sender);
|
||||
void __fastcall SpeedButton4Click(TObject *Sender);
|
||||
void __fastcall SpeedButton5Click(TObject *Sender);
|
||||
void __fastcall SpeedButton6Click(TObject *Sender);
|
||||
void __fastcall SpeedButton7Click(TObject *Sender);
|
||||
void __fastcall SpeedButton8Click(TObject *Sender);
|
||||
void __fastcall SpeedButton9Click(TObject *Sender);
|
||||
void __fastcall SpeedButton10Click(TObject *Sender);
|
||||
void __fastcall SpeedButton11Click(TObject *Sender);
|
||||
void __fastcall SpeedButton12Click(TObject *Sender);
|
||||
void __fastcall DeleteDatabaseSClick(TObject *Sender);
|
||||
void __fastcall DBViewClick(TObject *Sender);
|
||||
void __fastcall TableViewClick(TObject *Sender);
|
||||
void __fastcall TableViewChange(TObject *Sender, TTreeNode *Node);
|
||||
void __fastcall DBViewChange(TObject *Sender, TTreeNode *Node);
|
||||
|
||||
void __fastcall RefreshSClick(TObject *Sender);
|
||||
void __fastcall CreateDatabaseSClick(TObject *Sender);
|
||||
void __fastcall FlushHosts1Click(TObject *Sender);
|
||||
void __fastcall FlushLogs1Click(TObject *Sender);
|
||||
void __fastcall FlushTables1Click(TObject *Sender);
|
||||
void __fastcall SpeedButton13Click(TObject *Sender);
|
||||
void __fastcall KillProcess1Click(TObject *Sender);
|
||||
void __fastcall FlushThreads1Click(TObject *Sender);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private: // User declarations
|
||||
void __fastcall DrawItem(TMessage& Msg);
|
||||
void __fastcall MyNotify(TMessage& Msg);
|
||||
bool __fastcall TrayMessage(DWORD dwMessage);
|
||||
HANDLE __fastcall IconHandle(void);
|
||||
void __fastcall ToggleState(void);
|
||||
PSTR __fastcall TipText(void);
|
||||
void __fastcall WMQueryEndSession(TWMQueryEndSession &msg);
|
||||
AnsiString __fastcall TheComputer();
|
||||
AnsiString __fastcall TheUser();
|
||||
AnsiString __fastcall TheOS();
|
||||
void __fastcall TakeIP(void);
|
||||
void __fastcall GetmemStatus(void);
|
||||
void __fastcall ShowHelp(void);
|
||||
void __fastcall ContinueLoad(void);
|
||||
void __fastcall MyODBC(void);
|
||||
void __fastcall IsMyIniUp(void);
|
||||
void __fastcall QuickSearch(void);
|
||||
AnsiString __fastcall TheWinDir();
|
||||
void __fastcall FillMyIni(void);
|
||||
void __fastcall GetBaseDir(void);
|
||||
bool __fastcall MySQLSignal();
|
||||
bool __fastcall mysqldstart();
|
||||
bool __fastcall SeekErrFile();
|
||||
AnsiString __fastcall TheDir();
|
||||
bool __fastcall TheServiceStart();
|
||||
bool __fastcall TheServicePause();
|
||||
bool __fastcall TheServiceResume();
|
||||
bool __fastcall TheServiceStatus();
|
||||
bool __fastcall TheServiceCreate();
|
||||
bool __fastcall TheServiceRemove();
|
||||
bool __fastcall Shutd();
|
||||
void __fastcall ClearBox(void);
|
||||
bool __fastcall TheServerPath();
|
||||
void __fastcall GetServerOptions(void);
|
||||
void __fastcall GetReportServer(void);
|
||||
|
||||
|
||||
TFileStream *MyFile;
|
||||
String FName;
|
||||
|
||||
void __fastcall IsMySQLInit(void);
|
||||
void __fastcall GetServerStatus(void);
|
||||
bool __fastcall GetExtendedStatus();
|
||||
bool __fastcall GetProcess();
|
||||
bool __fastcall GetVariables();
|
||||
bool __fastcall nice_time(AnsiString buff);
|
||||
String __fastcall GetString(String k);
|
||||
String __fastcall GetNumberServer();
|
||||
// pointers for database screen
|
||||
TTreeNode *MySQLNode, *MySQLDbs, *MySQLNodeT, *MySQLTbs;
|
||||
|
||||
bool __fastcall GetMainRoot();
|
||||
bool __fastcall IsDatabase(String Name);
|
||||
bool __fastcall IsTable(String Name);
|
||||
void __fastcall CleanTree(void);
|
||||
void __fastcall CleanGrid(void);
|
||||
bool __fastcall IsIndex(String Name);
|
||||
void __fastcall CleanGridI(void);
|
||||
bool __fastcall KillPID();
|
||||
|
||||
|
||||
|
||||
public: // User declarations
|
||||
__fastcall TForm1(TComponent* Owner);
|
||||
void __fastcall GetServerFile(void);
|
||||
void __fastcall CreateMyIniFile(void);
|
||||
bool __fastcall CreatingShortCut();
|
||||
bool __fastcall CreatingDB();
|
||||
void __fastcall OutRefresh(void);
|
||||
bool __fastcall CreatingTable(String TheTable);
|
||||
|
||||
bool IsConnect ;
|
||||
|
||||
|
||||
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
BEGIN_MESSAGE_MAP
|
||||
MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem)
|
||||
MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify)
|
||||
MESSAGE_HANDLER(WM_QUERYENDSESSION,TWMQueryEndSession,WMQueryEndSession)
|
||||
END_MESSAGE_MAP(TForm)
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern PACKAGE TForm1 *Form1;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
|
@ -1,295 +0,0 @@
|
|||
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
MA 02111-1307, USA */
|
||||
|
||||
/* defines for the libmysql library */
|
||||
|
||||
#ifndef _mysql_h
|
||||
#define _mysql_h
|
||||
|
||||
#ifndef MYSQL_SERVER
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _global_h /* If not standard header */
|
||||
#include <sys/types.h>
|
||||
typedef char my_bool;
|
||||
#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__)
|
||||
#define __WIN__
|
||||
#endif
|
||||
#if !defined(__WIN__)
|
||||
#define STDCALL
|
||||
#else
|
||||
#define STDCALL __stdcall
|
||||
#endif
|
||||
typedef char * gptr;
|
||||
|
||||
#ifndef ST_USED_MEM_DEFINED
|
||||
#define ST_USED_MEM_DEFINED
|
||||
typedef struct st_used_mem { /* struct for once_alloc */
|
||||
struct st_used_mem *next; /* Next block in use */
|
||||
unsigned int left; /* memory left in block */
|
||||
unsigned int size; /* size of block */
|
||||
} USED_MEM;
|
||||
typedef struct st_mem_root {
|
||||
USED_MEM *free;
|
||||
USED_MEM *used;
|
||||
unsigned int min_malloc;
|
||||
unsigned int block_size;
|
||||
void (*error_handler)(void);
|
||||
} MEM_ROOT;
|
||||
#endif
|
||||
|
||||
#ifndef my_socket_defined
|
||||
#ifdef __WIN__
|
||||
#define my_socket SOCKET
|
||||
#else
|
||||
typedef int my_socket;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#include "mysql_com.h"
|
||||
#include "mysql_version.h"
|
||||
|
||||
extern unsigned int mysql_port;
|
||||
extern char *mysql_unix_port;
|
||||
|
||||
#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
|
||||
#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
|
||||
#define IS_BLOB(n) ((n) & BLOB_FLAG)
|
||||
#define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR)
|
||||
|
||||
typedef struct st_mysql_field {
|
||||
char *name; /* Name of column */
|
||||
char *table; /* Table of column if column was a field */
|
||||
char *def; /* Default value (set by mysql_list_fields) */
|
||||
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
|
||||
unsigned int length; /* Width of column */
|
||||
unsigned int max_length; /* Max width of selected set */
|
||||
unsigned int flags; /* Div flags */
|
||||
unsigned int decimals; /* Number of decimals in field */
|
||||
} MYSQL_FIELD;
|
||||
|
||||
typedef char **MYSQL_ROW; /* return data as array of strings */
|
||||
typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
|
||||
|
||||
#if defined(NO_CLIENT_LONG_LONG)
|
||||
typedef unsigned long my_ulonglong;
|
||||
#elif defined (__WIN__)
|
||||
typedef unsigned __int64 my_ulonglong;
|
||||
#else
|
||||
typedef unsigned long long my_ulonglong;
|
||||
#endif
|
||||
|
||||
#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
|
||||
|
||||
typedef struct st_mysql_rows {
|
||||
struct st_mysql_rows *next; /* list of rows */
|
||||
MYSQL_ROW data;
|
||||
} MYSQL_ROWS;
|
||||
|
||||
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
|
||||
|
||||
typedef struct st_mysql_data {
|
||||
my_ulonglong rows;
|
||||
unsigned int fields;
|
||||
MYSQL_ROWS *data;
|
||||
MEM_ROOT alloc;
|
||||
} MYSQL_DATA;
|
||||
|
||||
struct st_mysql_options {
|
||||
unsigned int connect_timeout,client_flag;
|
||||
my_bool compress,named_pipe;
|
||||
unsigned int port;
|
||||
char *host,*init_command,*user,*password,*unix_socket,*db;
|
||||
char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
|
||||
my_bool use_ssl; /* if to use SSL or not */
|
||||
char *ssl_key; /* PEM key file */
|
||||
char *ssl_cert; /* PEM cert file */
|
||||
char *ssl_ca; /* PEM CA file */
|
||||
char *ssl_capath; /* PEM directory of CA-s? */
|
||||
};
|
||||
|
||||
enum mysql_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS,
|
||||
MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND,
|
||||
MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
|
||||
MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME};
|
||||
|
||||
enum mysql_status { MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,
|
||||
MYSQL_STATUS_USE_RESULT};
|
||||
|
||||
typedef struct st_mysql {
|
||||
NET net; /* Communication parameters */
|
||||
gptr connector_fd; /* ConnectorFd for SSL */
|
||||
char *host,*user,*passwd,*unix_socket,*server_version,*host_info,
|
||||
*info,*db;
|
||||
unsigned int port,client_flag,server_capabilities;
|
||||
unsigned int protocol_version;
|
||||
unsigned int field_count;
|
||||
unsigned int server_status;
|
||||
unsigned long thread_id; /* Id for connection in server */
|
||||
my_ulonglong affected_rows;
|
||||
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
|
||||
my_ulonglong extra_info; /* Not used */
|
||||
unsigned long packet_length;
|
||||
enum mysql_status status;
|
||||
MYSQL_FIELD *fields;
|
||||
MEM_ROOT field_alloc;
|
||||
my_bool free_me; /* If free in mysql_close */
|
||||
my_bool reconnect; /* set to 1 if automatic reconnect */
|
||||
struct st_mysql_options options;
|
||||
char scramble_buff[9];
|
||||
struct charset_info_st *charset;
|
||||
unsigned int server_language;
|
||||
} MYSQL;
|
||||
|
||||
|
||||
typedef struct st_mysql_res {
|
||||
my_ulonglong row_count;
|
||||
unsigned int field_count, current_field;
|
||||
MYSQL_FIELD *fields;
|
||||
MYSQL_DATA *data;
|
||||
MYSQL_ROWS *data_cursor;
|
||||
MEM_ROOT field_alloc;
|
||||
MYSQL_ROW row; /* If unbuffered read */
|
||||
MYSQL_ROW current_row; /* buffer to current row */
|
||||
unsigned long *lengths; /* column lengths of current row */
|
||||
MYSQL *handle; /* for unbuffered reads */
|
||||
my_bool eof; /* Used my mysql_fetch_row */
|
||||
} MYSQL_RES;
|
||||
|
||||
/* Functions to get information from the MYSQL and MYSQL_RES structures */
|
||||
/* Should definitely be used if one uses shared libraries */
|
||||
|
||||
my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
|
||||
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
|
||||
my_bool STDCALL mysql_eof(MYSQL_RES *res);
|
||||
MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res,
|
||||
unsigned int fieldnr);
|
||||
MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
|
||||
MYSQL_ROWS * STDCALL mysql_row_tell(MYSQL_RES *res);
|
||||
unsigned int STDCALL mysql_field_tell(MYSQL_RES *res);
|
||||
|
||||
unsigned int STDCALL mysql_field_count(MYSQL *mysql);
|
||||
my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
|
||||
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
|
||||
unsigned int STDCALL mysql_errno(MYSQL *mysql);
|
||||
char * STDCALL mysql_error(MYSQL *mysql);
|
||||
char * STDCALL mysql_info(MYSQL *mysql);
|
||||
unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
|
||||
const char * STDCALL mysql_character_set_name(MYSQL *mysql);
|
||||
|
||||
MYSQL * STDCALL mysql_init(MYSQL *mysql);
|
||||
#ifdef HAVE_OPENSSL
|
||||
int STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
|
||||
const char *cert, const char *ca,
|
||||
const char *capath);
|
||||
char * STDCALL mysql_ssl_cipher(MYSQL *mysql);
|
||||
int STDCALL mysql_ssl_clear(MYSQL *mysql);
|
||||
#endif /* HAVE_OPENSSL */
|
||||
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
|
||||
const char *user, const char *passwd);
|
||||
my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
||||
const char *passwd, const char *db);
|
||||
#if MYSQL_VERSION_ID >= 32200
|
||||
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
|
||||
const char *user,
|
||||
const char *passwd,
|
||||
const char *db,
|
||||
unsigned int port,
|
||||
const char *unix_socket,
|
||||
unsigned int clientflag);
|
||||
#else
|
||||
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
|
||||
const char *user,
|
||||
const char *passwd,
|
||||
unsigned int port,
|
||||
const char *unix_socket,
|
||||
unsigned int clientflag);
|
||||
#endif
|
||||
void STDCALL mysql_close(MYSQL *sock);
|
||||
int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
|
||||
int STDCALL mysql_query(MYSQL *mysql, const char *q);
|
||||
int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
|
||||
unsigned int length);
|
||||
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
|
||||
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
|
||||
int STDCALL mysql_shutdown(MYSQL *mysql,
|
||||
enum enum_shutdown_level
|
||||
shutdown_level);
|
||||
int STDCALL mysql_dump_debug_info(MYSQL *mysql);
|
||||
int STDCALL mysql_refresh(MYSQL *mysql,
|
||||
unsigned int refresh_options);
|
||||
int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid);
|
||||
int STDCALL mysql_ping(MYSQL *mysql);
|
||||
char * STDCALL mysql_stat(MYSQL *mysql);
|
||||
char * STDCALL mysql_get_server_info(MYSQL *mysql);
|
||||
char * STDCALL mysql_get_client_info(void);
|
||||
char * STDCALL mysql_get_host_info(MYSQL *mysql);
|
||||
unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
|
||||
MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild);
|
||||
MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
|
||||
MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
|
||||
const char *wild);
|
||||
MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
|
||||
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
|
||||
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
|
||||
int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
|
||||
const char *arg);
|
||||
void STDCALL mysql_free_result(MYSQL_RES *result);
|
||||
void STDCALL mysql_data_seek(MYSQL_RES *result,
|
||||
my_ulonglong offset);
|
||||
MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET);
|
||||
MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
|
||||
MYSQL_FIELD_OFFSET offset);
|
||||
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
|
||||
unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
|
||||
MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
|
||||
unsigned long STDCALL mysql_escape_string(char *to,const char *from,
|
||||
unsigned long from_length);
|
||||
unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
|
||||
char *to,const char *from,
|
||||
unsigned long length);
|
||||
void STDCALL mysql_debug(const char *debug);
|
||||
char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
|
||||
char *to,
|
||||
unsigned long to_length,
|
||||
const char *from,
|
||||
unsigned long from_length,
|
||||
void *param,
|
||||
char *
|
||||
(*extend_buffer)
|
||||
(void *, char *to,
|
||||
unsigned long *length));
|
||||
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
|
||||
unsigned int STDCALL mysql_thread_safe(void);
|
||||
|
||||
|
||||
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
|
||||
|
||||
/* new api functions */
|
||||
|
||||
#define HAVE_MYSQL_REAL_CONNECT
|
||||
|
||||
#ifndef MYSQL_SERVER
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,275 +0,0 @@
|
|||
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
MA 02111-1307, USA */
|
||||
|
||||
/*
|
||||
** Common definition between mysql server & client
|
||||
*/
|
||||
|
||||
#ifndef _mysql_com_h
|
||||
#define _mysql_com_h
|
||||
|
||||
|
||||
#define NAME_LEN 64 /* Field/table name length */
|
||||
#define HOSTNAME_LENGTH 60
|
||||
#define USERNAME_LENGTH 16
|
||||
|
||||
#define LOCAL_HOST "localhost"
|
||||
#define LOCAL_HOST_NAMEDPIPE "."
|
||||
|
||||
#if defined(__EMX__) || defined(__OS2__)
|
||||
#undef MYSQL_UNIX_ADDR
|
||||
#define MYSQL_OS2_ADDR "\\socket\\MySQL"
|
||||
#define MYSQL_UNIX_ADDR MYSQL_OS2_ADDR
|
||||
#endif
|
||||
#if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
|
||||
#define MYSQL_NAMEDPIPE "MySQL"
|
||||
#define MYSQL_SERVICENAME "MySql"
|
||||
#endif /* __WIN__ */
|
||||
|
||||
enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
|
||||
COM_FIELD_LIST,COM_CREATE_DB,COM_DROP_DB,COM_REFRESH,
|
||||
COM_SHUTDOWN,COM_STATISTICS,
|
||||
COM_PROCESS_INFO,COM_CONNECT,COM_PROCESS_KILL,
|
||||
COM_DEBUG,COM_PING,COM_TIME,COM_DELAYED_INSERT,
|
||||
COM_CHANGE_USER, COM_BINLOG_DUMP,
|
||||
COM_TABLE_DUMP};
|
||||
|
||||
#define NOT_NULL_FLAG 1 /* Field can't be NULL */
|
||||
#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
|
||||
#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
|
||||
#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
|
||||
#define BLOB_FLAG 16 /* Field is a blob */
|
||||
#define UNSIGNED_FLAG 32 /* Field is unsigned */
|
||||
#define ZEROFILL_FLAG 64 /* Field is zerofill */
|
||||
#define BINARY_FLAG 128
|
||||
/* The following are only sent to new clients */
|
||||
#define ENUM_FLAG 256 /* field is an enum */
|
||||
#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
|
||||
#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
|
||||
#define SET_FLAG 2048 /* field is a set */
|
||||
#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
|
||||
#define GROUP_FLAG 32768 /* Intern: Group field */
|
||||
#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
|
||||
|
||||
#define REFRESH_GRANT 1 /* Refresh grant tables */
|
||||
#define REFRESH_LOG 2 /* Start on new log file */
|
||||
#define REFRESH_TABLES 4 /* close all tables */
|
||||
#define REFRESH_HOSTS 8 /* Flush host cache */
|
||||
#define REFRESH_STATUS 16 /* Flush status variables */
|
||||
#define REFRESH_THREADS 32 /* Flush status variables */
|
||||
#define REFRESH_SLAVE 64 /* Reset master info and restart slave
|
||||
thread */
|
||||
#define REFRESH_MASTER 128 /* Remove all bin logs in the index
|
||||
and truncate the index */
|
||||
|
||||
/* The following can't be set with mysql_refresh() */
|
||||
#define REFRESH_READ_LOCK 16384 /* Lock tables for read */
|
||||
#define REFRESH_FAST 32768 /* Intern flag */
|
||||
|
||||
#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
|
||||
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
|
||||
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
|
||||
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
|
||||
#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
|
||||
#define CLIENT_COMPRESS 32 /* Can use compression protocol */
|
||||
#define CLIENT_ODBC 64 /* Odbc client */
|
||||
#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
|
||||
#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
|
||||
#define CLIENT_CHANGE_USER 512 /* Support the mysql_change_user() */
|
||||
#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
|
||||
#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
|
||||
#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
|
||||
#define CLIENT_TRANSACTIONS 8196 /* Client knows about transactions */
|
||||
|
||||
#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */
|
||||
#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
|
||||
|
||||
#define MYSQL_ERRMSG_SIZE 200
|
||||
#define NET_READ_TIMEOUT 30 /* Timeout on read */
|
||||
#define NET_WRITE_TIMEOUT 60 /* Timeout on write */
|
||||
#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
|
||||
|
||||
#ifndef Vio_defined
|
||||
#define Vio_defined
|
||||
#ifdef HAVE_VIO
|
||||
class Vio; /* Fill Vio class in C++ */
|
||||
#else
|
||||
struct st_vio; /* Only C */
|
||||
typedef struct st_vio Vio;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct st_net {
|
||||
Vio* vio;
|
||||
my_socket fd; /* For Perl DBI/dbd */
|
||||
int fcntl;
|
||||
unsigned char *buff,*buff_end,*write_pos,*read_pos;
|
||||
char last_error[MYSQL_ERRMSG_SIZE];
|
||||
unsigned int last_errno,max_packet,timeout,pkt_nr;
|
||||
unsigned char error;
|
||||
my_bool return_errno,compress;
|
||||
my_bool no_send_ok; /* needed if we are doing several
|
||||
queries in one command ( as in LOAD TABLE ... FROM MASTER ),
|
||||
and do not want to confuse the client with OK at the wrong time
|
||||
*/
|
||||
unsigned long remain_in_buf,length, buf_length, where_b;
|
||||
unsigned int *return_status;
|
||||
unsigned char reading_or_writing;
|
||||
char save_char;
|
||||
} NET;
|
||||
|
||||
#define packet_error ((unsigned int) -1)
|
||||
|
||||
enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
|
||||
FIELD_TYPE_SHORT, FIELD_TYPE_LONG,
|
||||
FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE,
|
||||
FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP,
|
||||
FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24,
|
||||
FIELD_TYPE_DATE, FIELD_TYPE_TIME,
|
||||
FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR,
|
||||
FIELD_TYPE_NEWDATE,
|
||||
FIELD_TYPE_ENUM=247,
|
||||
FIELD_TYPE_SET=248,
|
||||
FIELD_TYPE_TINY_BLOB=249,
|
||||
FIELD_TYPE_MEDIUM_BLOB=250,
|
||||
FIELD_TYPE_LONG_BLOB=251,
|
||||
FIELD_TYPE_BLOB=252,
|
||||
FIELD_TYPE_VAR_STRING=253,
|
||||
FIELD_TYPE_STRING=254
|
||||
};
|
||||
|
||||
#define FIELD_TYPE_CHAR FIELD_TYPE_TINY /* For compability */
|
||||
#define FIELD_TYPE_INTERVAL FIELD_TYPE_ENUM /* For compability */
|
||||
|
||||
|
||||
/* Shutdown/kill enums and constants */
|
||||
|
||||
/* Bits for THD::killable. */
|
||||
#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0)
|
||||
#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1)
|
||||
#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
|
||||
#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3)
|
||||
|
||||
enum mysql_enum_shutdown_level {
|
||||
/*
|
||||
We want levels to be in growing order of hardness (because we use number
|
||||
comparisons). Note that DEFAULT does not respect the growing property, but
|
||||
it's ok.
|
||||
*/
|
||||
DEFAULT= 0,
|
||||
/* wait for existing connections to finish */
|
||||
WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT,
|
||||
/* wait for existing trans to finish */
|
||||
WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS,
|
||||
/* wait for existing updates to finish (=> no partial MyISAM update) */
|
||||
WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE,
|
||||
/* flush InnoDB buffers and other storage engines' buffers*/
|
||||
WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1),
|
||||
/* don't flush InnoDB buffers, flush other storage engines' buffers*/
|
||||
WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
|
||||
/* Now the 2 levels of the KILL command */
|
||||
#if MYSQL_VERSION_ID >= 50000
|
||||
KILL_QUERY= 254,
|
||||
#endif
|
||||
KILL_CONNECTION= 255
|
||||
};
|
||||
|
||||
extern unsigned long max_allowed_packet;
|
||||
extern unsigned long net_buffer_length;
|
||||
|
||||
#define net_new_transaction(net) ((net)->pkt_nr=0)
|
||||
|
||||
int my_net_init(NET *net, Vio* vio);
|
||||
void net_end(NET *net);
|
||||
void net_clear(NET *net);
|
||||
int net_flush(NET *net);
|
||||
int my_net_write(NET *net,const char *packet,unsigned long len);
|
||||
int net_write_command(NET *net,unsigned char command,const char *packet,
|
||||
unsigned long len);
|
||||
int net_real_write(NET *net,const char *packet,unsigned long len);
|
||||
unsigned int my_net_read(NET *net);
|
||||
|
||||
struct rand_struct {
|
||||
unsigned long seed1,seed2,max_value;
|
||||
double max_value_dbl;
|
||||
};
|
||||
|
||||
/* The following is for user defined functions */
|
||||
|
||||
enum Item_result {STRING_RESULT,REAL_RESULT,INT_RESULT};
|
||||
|
||||
typedef struct st_udf_args
|
||||
{
|
||||
unsigned int arg_count; /* Number of arguments */
|
||||
enum Item_result *arg_type; /* Pointer to item_results */
|
||||
char **args; /* Pointer to argument */
|
||||
unsigned long *lengths; /* Length of string arguments */
|
||||
char *maybe_null; /* Set to 1 for all maybe_null args */
|
||||
} UDF_ARGS;
|
||||
|
||||
/* This holds information about the result */
|
||||
|
||||
typedef struct st_udf_init
|
||||
{
|
||||
my_bool maybe_null; /* 1 if function can return NULL */
|
||||
unsigned int decimals; /* for real functions */
|
||||
unsigned int max_length; /* For string functions */
|
||||
char *ptr; /* free pointer for function data */
|
||||
my_bool const_item; /* 0 if result is independent of arguments */
|
||||
} UDF_INIT;
|
||||
|
||||
/* Constants when using compression */
|
||||
#define NET_HEADER_SIZE 4 /* standard header size */
|
||||
#define COMP_HEADER_SIZE 3 /* compression header extra size */
|
||||
|
||||
/* Prototypes to password functions */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void randominit(struct rand_struct *,unsigned long seed1,
|
||||
unsigned long seed2);
|
||||
double rnd(struct rand_struct *);
|
||||
void make_scrambled_password(char *to,const char *password);
|
||||
void get_salt_from_password(unsigned long *res,const char *password);
|
||||
void make_password_from_salt(char *to, unsigned long *hash_res);
|
||||
char *scramble(char *to,const char *message,const char *password,
|
||||
my_bool old_ver);
|
||||
my_bool check_scramble(const char *, const char *message,
|
||||
unsigned long *salt,my_bool old_ver);
|
||||
char *get_tty_password(char *opt_message);
|
||||
void hash_password(unsigned long *result, const char *password);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Some other useful functions */
|
||||
|
||||
void my_init(void);
|
||||
void load_defaults(const char *conf_file, const char **groups,
|
||||
int *argc, char ***argv);
|
||||
|
||||
#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
|
||||
|
||||
#ifdef __WIN__
|
||||
#define socket_errno WSAGetLastError()
|
||||
#else
|
||||
#define socket_errno errno
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,20 +0,0 @@
|
|||
/* Copyright Abandoned 1996,1999 TCX DataKonsult AB & Monty Program KB & Detron HB
|
||||
This file is public domain and comes with NO WARRANTY of any kind */
|
||||
|
||||
/* Version numbers for protocol & mysqld */
|
||||
|
||||
#ifdef _CUSTOMCONFIG_
|
||||
#include <custom_conf.h>
|
||||
#else
|
||||
#define PROTOCOL_VERSION 10
|
||||
#define MYSQL_SERVER_VERSION "3.23.22-beta"
|
||||
#define FRM_VER 6
|
||||
#define MYSQL_VERSION_ID 32322
|
||||
#define MYSQL_PORT 3306
|
||||
#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
|
||||
|
||||
/* mysqld compile time options */
|
||||
#ifndef MYSQL_CHARSET
|
||||
#define MYSQL_CHARSET "latin1"
|
||||
#endif
|
||||
#endif
|
|
@ -1,36 +0,0 @@
|
|||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
HINSTANCE g_hinst;
|
||||
USERES("winmysqladmin.res");
|
||||
USEFORM("main.cpp", Form1);
|
||||
USEFORM("initsetup.cpp", Form2);
|
||||
USEFORM("db.cpp", dbfrm);
|
||||
USELIB("lib\mysqlclient.lib");
|
||||
USELIB("lib\myisammrg.lib");
|
||||
USELIB("lib\heap.lib");
|
||||
USELIB("lib\myisam.lib");
|
||||
USELIB("lib\mysys.lib");
|
||||
USELIB("lib\regex.lib");
|
||||
USELIB("lib\strings.lib");
|
||||
USELIB("lib\zlib.lib");
|
||||
//---------------------------------------------------------------------------
|
||||
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
try
|
||||
{
|
||||
Application->Initialize();
|
||||
Application->HelpFile = "C:\\mysql\\bin\\WINMYSQLADMIN.HLP";
|
||||
Application->Title = "WinMySQLadmin 1.0";
|
||||
Application->CreateForm(__classid(TForm1), &Form1);
|
||||
Application->CreateForm(__classid(TForm2), &Form2);
|
||||
Application->CreateForm(__classid(Tdbfrm), &dbfrm);
|
||||
Application->Run();
|
||||
}
|
||||
catch (Exception &exception)
|
||||
{
|
||||
Application->ShowException(&exception);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
|
@ -49,5 +49,5 @@ enum options_client
|
|||
#ifdef HAVE_NDBCLUSTER_DB
|
||||
OPT_NDBCLUSTER, OPT_NDB_CONNECTSTRING,
|
||||
#endif
|
||||
OPT_IGNORE_TABLE,OPT_INSERT_IGNORE,OPT_SHOW_WARNINGS
|
||||
OPT_IGNORE_TABLE,OPT_INSERT_IGNORE,OPT_SHOW_WARNINGS,OPT_DROP_DATABASE
|
||||
};
|
||||
|
|
|
@ -85,7 +85,7 @@ static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1,
|
|||
opt_delete_master_logs=0, tty_password=0,
|
||||
opt_single_transaction=0, opt_comments= 0, opt_compact= 0,
|
||||
opt_hex_blob=0, opt_order_by_primary=0, opt_ignore=0,
|
||||
opt_complete_insert= 0;
|
||||
opt_complete_insert= 0, opt_drop_database= 0;
|
||||
static ulong opt_max_allowed_packet, opt_net_buffer_length;
|
||||
static MYSQL mysql_connection,*sock=0;
|
||||
static my_bool insert_pat_inited=0;
|
||||
|
@ -161,6 +161,9 @@ static struct my_option my_long_options[] =
|
|||
"Dump all the databases. This will be same as --databases with all databases selected.",
|
||||
(gptr*) &opt_alldbs, (gptr*) &opt_alldbs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"add-drop-database", OPT_DROP_DATABASE, "Add a 'DROP DATABASE' before each create.",
|
||||
(gptr*) &opt_drop_database, (gptr*) &opt_drop_database, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
|
||||
0},
|
||||
{"add-drop-table", OPT_DROP, "Add a 'drop table' before each create.",
|
||||
(gptr*) &opt_drop, (gptr*) &opt_drop, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0,
|
||||
0},
|
||||
|
@ -1144,9 +1147,9 @@ static uint get_table_structure(char *table, char *db)
|
|||
else
|
||||
dynstr_set(&insert_pat, "");
|
||||
|
||||
insert_option= (opt_delayed && opt_ignore) ? " DELAYED IGNORE " :
|
||||
opt_delayed ? " DELAYED " :
|
||||
opt_ignore ? " IGNORE " : "";
|
||||
insert_option= ((opt_delayed && opt_ignore) ? " DELAYED IGNORE " :
|
||||
opt_delayed ? " DELAYED " :
|
||||
opt_ignore ? " IGNORE " : "");
|
||||
|
||||
if (verbose)
|
||||
fprintf(stderr, "-- Retrieving table structure for table %s...\n", table);
|
||||
|
@ -2116,12 +2119,20 @@ static int init_dumping(char *database)
|
|||
if (mysql_query(sock, qbuf) || !(dbinfo = mysql_store_result(sock)))
|
||||
{
|
||||
/* Old server version, dump generic CREATE DATABASE */
|
||||
if (opt_drop_database)
|
||||
fprintf(md_result_file,
|
||||
"\n/*!40000 DROP DATABASE IF EXISTS %s;*/\n",
|
||||
qdatabase);
|
||||
fprintf(md_result_file,
|
||||
"\nCREATE DATABASE /*!32312 IF NOT EXISTS*/ %s;\n",
|
||||
qdatabase);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (opt_drop_database)
|
||||
fprintf(md_result_file,
|
||||
"\n/*!40000 DROP DATABASE IF EXISTS %s*/;\n",
|
||||
qdatabase);
|
||||
row = mysql_fetch_row(dbinfo);
|
||||
if (row[1])
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
/* This file is originally from the mysql distribution. Coded by monty */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#ifdef USE_PRAGMA_IMPLEMENTATION
|
||||
#pragma implementation // gcc: Class implementation
|
||||
#endif
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
/* This file is originally from the mysql distribution. Coded by monty */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#ifdef USE_PRAGMA_INTERFACE
|
||||
#pragma interface /* gcc class implementation */
|
||||
#endif
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ public:
|
|||
init(*this);
|
||||
}
|
||||
|
||||
// reservce place in vector before registering, used by init funcion
|
||||
// reserve place in vector before registering, used by init funcion
|
||||
void Reserve(size_t sz)
|
||||
{
|
||||
callbacks_.reserve(sz);
|
||||
|
|
|
@ -149,7 +149,7 @@ enum { /* X509 Constants */
|
|||
X509_V_ERR_CRL_SIGNATURE_FAILURE = 10,
|
||||
X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 11,
|
||||
X509_V_ERR_CRL_HAS_EXPIRED = 12,
|
||||
X509_V_ERR_CERT_REVOKED = 13,
|
||||
X509_V_ERR_CERT_REVOKED = 13
|
||||
|
||||
};
|
||||
|
||||
|
@ -166,7 +166,7 @@ int ERR_GET_REASON(int);
|
|||
|
||||
enum { /* ERR Constants */
|
||||
ERR_TXT_STRING = 1,
|
||||
EVP_R_BAD_DECRYPT = 2,
|
||||
EVP_R_BAD_DECRYPT = 2
|
||||
};
|
||||
|
||||
|
||||
|
@ -263,8 +263,8 @@ enum { /* ssl Constants */
|
|||
SSL_UNKNOWN = -2,
|
||||
SSL_FATAL_ERROR = -1,
|
||||
SSL_NORMAL_SHUTDOWN = 0,
|
||||
SSL_ERROR_NONE = 0, // for most functions
|
||||
SSL_FAILURE = 0, // for some functions
|
||||
SSL_ERROR_NONE = 0, /* for most functions */
|
||||
SSL_FAILURE = 0, /* for some functions */
|
||||
SSL_SUCCESS = 1,
|
||||
|
||||
SSL_FILETYPE_ASN1 = 10,
|
||||
|
@ -320,7 +320,7 @@ enum { /* ssl Constants */
|
|||
SSL_ST_ACCEPT = 94,
|
||||
SSL_CB_ALERT = 95,
|
||||
SSL_CB_READ = 96,
|
||||
SSL_CB_HANDSHAKE_DONE = 97,
|
||||
SSL_CB_HANDSHAKE_DONE = 97
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ enum YasslError {
|
|||
verify_error = 112,
|
||||
send_error = 113,
|
||||
receive_error = 114,
|
||||
certificate_error = 115,
|
||||
certificate_error = 115
|
||||
|
||||
// 1000+ from TaoCrypt error.hpp
|
||||
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
#include "yassl_imp.hpp"
|
||||
#include "crypto_wrapper.hpp"
|
||||
#include "cert_wrapper.hpp"
|
||||
#include "lock.hpp"
|
||||
#include "log.hpp"
|
||||
#include "lock.hpp"
|
||||
|
||||
|
||||
namespace yaSSL {
|
||||
|
@ -122,7 +122,8 @@ public:
|
|||
|
||||
friend sslFactory& GetSSL_Factory(); // singleton creator
|
||||
private:
|
||||
static sslFactory instance;
|
||||
static sslFactory instance_;
|
||||
|
||||
sslFactory(const sslFactory&); // hide copy
|
||||
sslFactory& operator=(const sslFactory&); // and assign
|
||||
};
|
||||
|
@ -207,9 +208,10 @@ public:
|
|||
|
||||
friend Sessions& GetSessions(); // singleton creator
|
||||
private:
|
||||
static Sessions instance_;
|
||||
|
||||
Sessions(const Sessions&); // hide copy
|
||||
Sessions& operator=(const Sessions&); // and assign
|
||||
static Sessions instance;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -27,18 +27,8 @@
|
|||
#ifndef yaSSL_TYPES_HPP
|
||||
#define yaSSL_TYPES_HPP
|
||||
|
||||
#include<cstddef>
|
||||
#include <stddef.h>
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
// library allocation
|
||||
struct new_t {}; // yaSSL New type
|
||||
extern new_t ys; // pass in parameter
|
||||
|
||||
} // namespace yaSSL
|
||||
|
||||
void* operator new (size_t, yaSSL::new_t);
|
||||
void* operator new[](size_t, yaSSL::new_t);
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
|
@ -129,7 +119,7 @@ enum PublicValueEncoding { implicit_encoding, explicit_encoding };
|
|||
|
||||
enum ConnectionEnd { server_end, client_end };
|
||||
|
||||
enum AlertLevel { warning = 1, fatal = 2, };
|
||||
enum AlertLevel { warning = 1, fatal = 2 };
|
||||
|
||||
|
||||
|
||||
|
@ -381,7 +371,7 @@ const char* const cipher_names[128] =
|
|||
"DES-CBC3-RMD", // TLS_RSA_WITH_3DES_EDE_CBC_RMD160 = 124
|
||||
"AES128-RMD", // TLS_RSA_WITH_AES_128_CBC_RMD160 = 125
|
||||
"AES256-RMD", // TLS_RSA_WITH_AES_256_CBC_RMD160 = 126
|
||||
null_str, // 127
|
||||
null_str // 127
|
||||
};
|
||||
|
||||
// fill with MD5 pad size since biggest required
|
||||
|
|
|
@ -30,13 +30,25 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
|
||||
#ifdef __IBMCPP__
|
||||
/*
|
||||
Workaround for the lack of operator new(size_t, void*)
|
||||
in IBM VA C++ 6.0
|
||||
*/
|
||||
struct Dummy {};
|
||||
inline void *operator new(size_t size, Dummy *d) { return (void*) d; }
|
||||
typedef Dummy *yassl_pointer;
|
||||
#else
|
||||
typedef void *yassl_pointer;
|
||||
#endif
|
||||
|
||||
namespace mySTL {
|
||||
|
||||
|
||||
template <typename T, typename T2>
|
||||
inline void construct(T* p, const T2& value)
|
||||
{
|
||||
new (static_cast<void*>(p)) T(value);
|
||||
new ((yassl_pointer) p) T(value);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -38,6 +38,13 @@ namespace mySTL {
|
|||
|
||||
template<typename T>
|
||||
class list {
|
||||
#ifdef __SUNPRO_CC
|
||||
/*
|
||||
Sun Forte 7 C++ v. 5.4 needs class 'node' be public to be visible to
|
||||
the nested class 'iterator' (a non-standard behaviour).
|
||||
*/
|
||||
public:
|
||||
#endif
|
||||
struct node {
|
||||
node(T t) : prev_(0), next_(0), value_(t) {}
|
||||
|
||||
|
|
|
@ -62,13 +62,13 @@ input_buffer::input_buffer()
|
|||
|
||||
|
||||
input_buffer::input_buffer(uint s)
|
||||
: size_(0), current_(0), buffer_(new (ys) byte[s]), end_(buffer_ + s)
|
||||
: size_(0), current_(0), buffer_(new byte[s]), end_(buffer_ + s)
|
||||
{}
|
||||
|
||||
|
||||
// with assign
|
||||
input_buffer::input_buffer(uint s, const byte* t, uint len)
|
||||
: size_(0), current_(0), buffer_(new (ys) byte[s]), end_(buffer_ + s)
|
||||
: size_(0), current_(0), buffer_(new byte[s]), end_(buffer_ + s)
|
||||
{
|
||||
assign(t, len);
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ input_buffer::~input_buffer()
|
|||
void input_buffer::allocate(uint s)
|
||||
{
|
||||
assert(!buffer_); // find realloc error
|
||||
buffer_ = new (ys) byte[s];
|
||||
buffer_ = new byte[s];
|
||||
end_ = buffer_ + s;
|
||||
}
|
||||
|
||||
|
@ -198,13 +198,13 @@ output_buffer::output_buffer()
|
|||
|
||||
// with allocate
|
||||
output_buffer::output_buffer(uint s)
|
||||
: current_(0), buffer_(new (ys) byte[s]), end_(buffer_ + s)
|
||||
: current_(0), buffer_(new byte[s]), end_(buffer_ + s)
|
||||
{}
|
||||
|
||||
|
||||
// with assign
|
||||
output_buffer::output_buffer(uint s, const byte* t, uint len)
|
||||
: current_(0), buffer_(new (ys) byte[s]), end_(buffer_+ s)
|
||||
: current_(0), buffer_(new byte[s]), end_(buffer_+ s)
|
||||
{
|
||||
write(t, len);
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ void output_buffer::set_current(uint c)
|
|||
void output_buffer::allocate(uint s)
|
||||
{
|
||||
assert(!buffer_); // find realloc error
|
||||
buffer_ = new (ys) byte[s]; end_ = buffer_ + s;
|
||||
buffer_ = new byte[s]; end_ = buffer_ + s;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
namespace yaSSL {
|
||||
|
||||
|
||||
x509::x509(uint sz) : length_(sz), buffer_(new (ys) opaque[sz])
|
||||
x509::x509(uint sz) : length_(sz), buffer_(new opaque[sz])
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ x509::~x509()
|
|||
|
||||
|
||||
x509::x509(const x509& that) : length_(that.length_),
|
||||
buffer_(new (ys) opaque[length_])
|
||||
buffer_(new opaque[length_])
|
||||
{
|
||||
memcpy(buffer_, that.buffer_, length_);
|
||||
}
|
||||
|
@ -153,7 +153,7 @@ void CertManager::AddPeerCert(x509* x)
|
|||
void CertManager::CopySelfCert(const x509* x)
|
||||
{
|
||||
if (x)
|
||||
list_.push_back(new (ys) x509(*x));
|
||||
list_.push_back(new x509(*x));
|
||||
}
|
||||
|
||||
|
||||
|
@ -165,7 +165,7 @@ int CertManager::CopyCaCert(const x509* x)
|
|||
|
||||
if (!cert.GetError().What()) {
|
||||
const TaoCrypt::PublicKey& key = cert.GetPublicKey();
|
||||
signers_.push_back(new (ys) TaoCrypt::Signer(key.GetKey(), key.size(),
|
||||
signers_.push_back(new TaoCrypt::Signer(key.GetKey(), key.size(),
|
||||
cert.GetCommonName(), cert.GetHash()));
|
||||
}
|
||||
return cert.GetError().What();
|
||||
|
@ -234,7 +234,7 @@ int CertManager::Validate()
|
|||
return err;
|
||||
|
||||
const TaoCrypt::PublicKey& key = cert.GetPublicKey();
|
||||
signers_.push_back(new (ys) TaoCrypt::Signer(key.GetKey(), key.size(),
|
||||
signers_.push_back(new TaoCrypt::Signer(key.GetKey(), key.size(),
|
||||
cert.GetCommonName(), cert.GetHash()));
|
||||
--last;
|
||||
--count;
|
||||
|
@ -259,7 +259,7 @@ int CertManager::Validate()
|
|||
|
||||
int iSz = cert.GetIssuer() ? strlen(cert.GetIssuer()) + 1 : 0;
|
||||
int sSz = cert.GetCommonName() ? strlen(cert.GetCommonName()) + 1 : 0;
|
||||
peerX509_ = new (ys) X509(cert.GetIssuer(), iSz, cert.GetCommonName(),
|
||||
peerX509_ = new X509(cert.GetIssuer(), iSz, cert.GetCommonName(),
|
||||
sSz);
|
||||
}
|
||||
return 0;
|
||||
|
@ -273,13 +273,13 @@ int CertManager::SetPrivateKey(const x509& key)
|
|||
privateKey_.assign(key.get_buffer(), key.get_length());
|
||||
|
||||
// set key type
|
||||
if (x509* cert509 = list_.front()) {
|
||||
TaoCrypt::Source source(cert509->get_buffer(), cert509->get_length());
|
||||
TaoCrypt::CertDecoder cert(source, false);
|
||||
cert.DecodeToKey();
|
||||
if (int err = cert.GetError().What())
|
||||
if (x509* cert = list_.front()) {
|
||||
TaoCrypt::Source source(cert->get_buffer(), cert->get_length());
|
||||
TaoCrypt::CertDecoder cd(source, false);
|
||||
cd.DecodeToKey();
|
||||
if (int err = cd.GetError().What())
|
||||
return err;
|
||||
if (cert.GetKeyType() == TaoCrypt::RSAk)
|
||||
if (cd.GetKeyType() == TaoCrypt::RSAk)
|
||||
keyType_ = rsa_sa_algo;
|
||||
else
|
||||
keyType_ = dsa_sa_algo;
|
||||
|
|
|
@ -58,13 +58,13 @@ struct MD5::MD5Impl {
|
|||
};
|
||||
|
||||
|
||||
MD5::MD5() : pimpl_(new (ys) MD5Impl) {}
|
||||
MD5::MD5() : pimpl_(new MD5Impl) {}
|
||||
|
||||
|
||||
MD5::~MD5() { delete pimpl_; }
|
||||
|
||||
|
||||
MD5::MD5(const MD5& that) : Digest(), pimpl_(new (ys)
|
||||
MD5::MD5(const MD5& that) : Digest(), pimpl_(new
|
||||
MD5Impl(that.pimpl_->md5_)) {}
|
||||
|
||||
|
||||
|
@ -116,14 +116,13 @@ struct SHA::SHAImpl {
|
|||
};
|
||||
|
||||
|
||||
SHA::SHA() : pimpl_(new (ys) SHAImpl) {}
|
||||
SHA::SHA() : pimpl_(new SHAImpl) {}
|
||||
|
||||
|
||||
SHA::~SHA() { delete pimpl_; }
|
||||
|
||||
|
||||
SHA::SHA(const SHA& that) : Digest(), pimpl_(new (ys)
|
||||
SHAImpl(that.pimpl_->sha_)) {}
|
||||
SHA::SHA(const SHA& that) : Digest(), pimpl_(new SHAImpl(that.pimpl_->sha_)) {}
|
||||
|
||||
SHA& SHA::operator=(const SHA& that)
|
||||
{
|
||||
|
@ -174,14 +173,13 @@ struct RMD::RMDImpl {
|
|||
};
|
||||
|
||||
|
||||
RMD::RMD() : pimpl_(new (ys) RMDImpl) {}
|
||||
RMD::RMD() : pimpl_(new RMDImpl) {}
|
||||
|
||||
|
||||
RMD::~RMD() { delete pimpl_; }
|
||||
|
||||
|
||||
RMD::RMD(const RMD& that) : Digest(), pimpl_(new (ys)
|
||||
RMDImpl(that.pimpl_->rmd_)) {}
|
||||
RMD::RMD(const RMD& that) : Digest(), pimpl_(new RMDImpl(that.pimpl_->rmd_)) {}
|
||||
|
||||
RMD& RMD::operator=(const RMD& that)
|
||||
{
|
||||
|
@ -232,7 +230,7 @@ struct HMAC_MD5::HMAC_MD5Impl {
|
|||
|
||||
|
||||
HMAC_MD5::HMAC_MD5(const byte* secret, unsigned int len)
|
||||
: pimpl_(new (ys) HMAC_MD5Impl)
|
||||
: pimpl_(new HMAC_MD5Impl)
|
||||
{
|
||||
pimpl_->mac_.SetKey(secret, len);
|
||||
}
|
||||
|
@ -282,7 +280,7 @@ struct HMAC_SHA::HMAC_SHAImpl {
|
|||
|
||||
|
||||
HMAC_SHA::HMAC_SHA(const byte* secret, unsigned int len)
|
||||
: pimpl_(new (ys) HMAC_SHAImpl)
|
||||
: pimpl_(new HMAC_SHAImpl)
|
||||
{
|
||||
pimpl_->mac_.SetKey(secret, len);
|
||||
}
|
||||
|
@ -333,7 +331,7 @@ struct HMAC_RMD::HMAC_RMDImpl {
|
|||
|
||||
|
||||
HMAC_RMD::HMAC_RMD(const byte* secret, unsigned int len)
|
||||
: pimpl_(new (ys) HMAC_RMDImpl)
|
||||
: pimpl_(new HMAC_RMDImpl)
|
||||
{
|
||||
pimpl_->mac_.SetKey(secret, len);
|
||||
}
|
||||
|
@ -381,7 +379,7 @@ struct DES::DESImpl {
|
|||
};
|
||||
|
||||
|
||||
DES::DES() : pimpl_(new (ys) DESImpl) {}
|
||||
DES::DES() : pimpl_(new DESImpl) {}
|
||||
|
||||
DES::~DES() { delete pimpl_; }
|
||||
|
||||
|
@ -417,7 +415,7 @@ struct DES_EDE::DES_EDEImpl {
|
|||
};
|
||||
|
||||
|
||||
DES_EDE::DES_EDE() : pimpl_(new (ys) DES_EDEImpl) {}
|
||||
DES_EDE::DES_EDE() : pimpl_(new DES_EDEImpl) {}
|
||||
|
||||
DES_EDE::~DES_EDE() { delete pimpl_; }
|
||||
|
||||
|
@ -455,7 +453,7 @@ struct RC4::RC4Impl {
|
|||
};
|
||||
|
||||
|
||||
RC4::RC4() : pimpl_(new (ys) RC4Impl) {}
|
||||
RC4::RC4() : pimpl_(new RC4Impl) {}
|
||||
|
||||
RC4::~RC4() { delete pimpl_; }
|
||||
|
||||
|
@ -497,7 +495,7 @@ struct AES::AESImpl {
|
|||
};
|
||||
|
||||
|
||||
AES::AES(unsigned int ks) : pimpl_(new (ys) AESImpl(ks)) {}
|
||||
AES::AES(unsigned int ks) : pimpl_(new AESImpl(ks)) {}
|
||||
|
||||
AES::~AES() { delete pimpl_; }
|
||||
|
||||
|
@ -538,7 +536,7 @@ struct RandomPool::RandomImpl {
|
|||
TaoCrypt::RandomNumberGenerator RNG_;
|
||||
};
|
||||
|
||||
RandomPool::RandomPool() : pimpl_(new (ys) RandomImpl) {}
|
||||
RandomPool::RandomPool() : pimpl_(new RandomImpl) {}
|
||||
|
||||
RandomPool::~RandomPool() { delete pimpl_; }
|
||||
|
||||
|
@ -582,7 +580,7 @@ void DSS::DSSImpl::SetPrivate(const byte* key, unsigned int sz)
|
|||
|
||||
// Set public or private key
|
||||
DSS::DSS(const byte* key, unsigned int sz, bool publicKey)
|
||||
: pimpl_(new (ys) DSSImpl)
|
||||
: pimpl_(new DSSImpl)
|
||||
{
|
||||
if (publicKey)
|
||||
pimpl_->SetPublic(key, sz);
|
||||
|
@ -653,7 +651,7 @@ void RSA::RSAImpl::SetPrivate(const byte* key, unsigned int sz)
|
|||
|
||||
// Set public or private key
|
||||
RSA::RSA(const byte* key, unsigned int sz, bool publicKey)
|
||||
: pimpl_(new (ys) RSAImpl)
|
||||
: pimpl_(new RSAImpl)
|
||||
{
|
||||
if (publicKey)
|
||||
pimpl_->SetPublic(key, sz);
|
||||
|
@ -725,13 +723,13 @@ struct Integer::IntegerImpl {
|
|||
explicit IntegerImpl(const TaoCrypt::Integer& i) : int_(i) {}
|
||||
};
|
||||
|
||||
Integer::Integer() : pimpl_(new (ys) IntegerImpl) {}
|
||||
Integer::Integer() : pimpl_(new IntegerImpl) {}
|
||||
|
||||
Integer::~Integer() { delete pimpl_; }
|
||||
|
||||
|
||||
|
||||
Integer::Integer(const Integer& other) : pimpl_(new (ys)
|
||||
Integer::Integer(const Integer& other) : pimpl_(new
|
||||
IntegerImpl(other.pimpl_->int_))
|
||||
{}
|
||||
|
||||
|
@ -770,9 +768,9 @@ struct DiffieHellman::DHImpl {
|
|||
|
||||
void AllocKeys(unsigned int pubSz, unsigned int privSz, unsigned int agrSz)
|
||||
{
|
||||
publicKey_ = new (ys) byte[pubSz];
|
||||
privateKey_ = new (ys) byte[privSz];
|
||||
agreedKey_ = new (ys) byte[agrSz];
|
||||
publicKey_ = new byte[pubSz];
|
||||
privateKey_ = new byte[privSz];
|
||||
agreedKey_ = new byte[agrSz];
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -781,7 +779,7 @@ struct DiffieHellman::DHImpl {
|
|||
/*
|
||||
// server Side DH, server's view
|
||||
DiffieHellman::DiffieHellman(const char* file, const RandomPool& random)
|
||||
: pimpl_(new (ys) DHImpl(random.pimpl_->RNG_))
|
||||
: pimpl_(new DHImpl(random.pimpl_->RNG_))
|
||||
{
|
||||
using namespace TaoCrypt;
|
||||
Source source;
|
||||
|
@ -805,12 +803,12 @@ DiffieHellman::DiffieHellman(const char* file, const RandomPool& random)
|
|||
DiffieHellman::DiffieHellman(const byte* p, unsigned int pSz, const byte* g,
|
||||
unsigned int gSz, const byte* pub,
|
||||
unsigned int pubSz, const RandomPool& random)
|
||||
: pimpl_(new (ys) DHImpl(random.pimpl_->RNG_))
|
||||
: pimpl_(new DHImpl(random.pimpl_->RNG_))
|
||||
{
|
||||
using TaoCrypt::Integer;
|
||||
|
||||
pimpl_->dh_.Initialize(Integer(p, pSz).Ref(), Integer(g, gSz).Ref());
|
||||
pimpl_->publicKey_ = new (ys) opaque[pubSz];
|
||||
pimpl_->publicKey_ = new opaque[pubSz];
|
||||
memcpy(pimpl_->publicKey_, pub, pubSz);
|
||||
}
|
||||
|
||||
|
@ -818,7 +816,7 @@ DiffieHellman::DiffieHellman(const byte* p, unsigned int pSz, const byte* g,
|
|||
// Server Side DH, server's view
|
||||
DiffieHellman::DiffieHellman(const Integer& p, const Integer& g,
|
||||
const RandomPool& random)
|
||||
: pimpl_(new (ys) DHImpl(random.pimpl_->RNG_))
|
||||
: pimpl_(new DHImpl(random.pimpl_->RNG_))
|
||||
{
|
||||
using TaoCrypt::Integer;
|
||||
|
||||
|
@ -836,7 +834,7 @@ DiffieHellman::~DiffieHellman() { delete pimpl_; }
|
|||
|
||||
// Client side and view, use server that for p and g
|
||||
DiffieHellman::DiffieHellman(const DiffieHellman& that)
|
||||
: pimpl_(new (ys) DHImpl(*that.pimpl_))
|
||||
: pimpl_(new DHImpl(*that.pimpl_))
|
||||
{
|
||||
pimpl_->dh_.GenerateKeyPair(pimpl_->ranPool_, pimpl_->privateKey_,
|
||||
pimpl_->publicKey_);
|
||||
|
@ -957,7 +955,7 @@ x509* PemToDer(const char* fname, CertType type)
|
|||
Base64Decoder b64Dec(der);
|
||||
|
||||
uint sz = der.size();
|
||||
mySTL::auto_ptr<x509> x(new (ys) x509(sz));
|
||||
mySTL::auto_ptr<x509> x(new x509(sz));
|
||||
memcpy(x->use_buffer(), der.get_buffer(), sz);
|
||||
|
||||
fclose(file);
|
||||
|
@ -971,8 +969,6 @@ x509* PemToDer(const char* fname, CertType type)
|
|||
template class TaoCrypt::HMAC<TaoCrypt::MD5>;
|
||||
template class TaoCrypt::HMAC<TaoCrypt::SHA>;
|
||||
template class TaoCrypt::HMAC<TaoCrypt::RIPEMD160>;
|
||||
template class TaoCrypt::Mode_BASE<16>;
|
||||
template class TaoCrypt::Mode_BASE<8>;
|
||||
#endif
|
||||
|
||||
#endif // !USE_CRYPTOPP_LIB
|
||||
|
|
4
extra/yassl/src/dummy.cpp
Normal file
|
@ -0,0 +1,4 @@
|
|||
/*
|
||||
To make libtool always use a C++ linker when compiling with yaSSL we need
|
||||
to add a dummy C++ file to the source list.
|
||||
*/
|
|
@ -362,9 +362,9 @@ void p_hash(output_buffer& result, const output_buffer& secret,
|
|||
if (lastLen) times += 1;
|
||||
|
||||
if (hash == md5)
|
||||
hmac.reset(new (ys) HMAC_MD5(secret.get_buffer(), secret.get_size()));
|
||||
hmac.reset(new HMAC_MD5(secret.get_buffer(), secret.get_size()));
|
||||
else
|
||||
hmac.reset(new (ys) HMAC_SHA(secret.get_buffer(), secret.get_size()));
|
||||
hmac.reset(new HMAC_SHA(secret.get_buffer(), secret.get_size()));
|
||||
// A0 = seed
|
||||
hmac->get_digest(previous, seed.get_buffer(), seed.get_size());// A1
|
||||
uint lastTime = times - 1;
|
||||
|
@ -582,11 +582,11 @@ void TLS_hmac(SSL& ssl, byte* digest, const byte* buffer, uint sz,
|
|||
MACAlgorithm algo = ssl.getSecurity().get_parms().mac_algorithm_;
|
||||
|
||||
if (algo == sha)
|
||||
hmac.reset(new (ys) HMAC_SHA(ssl.get_macSecret(verify), SHA_LEN));
|
||||
hmac.reset(new HMAC_SHA(ssl.get_macSecret(verify), SHA_LEN));
|
||||
else if (algo == rmd)
|
||||
hmac.reset(new (ys) HMAC_RMD(ssl.get_macSecret(verify), RMD_LEN));
|
||||
hmac.reset(new HMAC_RMD(ssl.get_macSecret(verify), RMD_LEN));
|
||||
else
|
||||
hmac.reset(new (ys) HMAC_MD5(ssl.get_macSecret(verify), MD5_LEN));
|
||||
hmac.reset(new HMAC_MD5(ssl.get_macSecret(verify), MD5_LEN));
|
||||
|
||||
hmac->update(seq, SEQ_SZ); // seq_num
|
||||
inner[0] = content; // type
|
||||
|
@ -687,7 +687,7 @@ DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered)
|
|||
// make sure we have enough input in buffer to process this record
|
||||
if (hdr.length_ > buffer.get_remaining()) {
|
||||
uint sz = buffer.get_remaining() + RECORD_HEADER;
|
||||
buffered.reset(new (ys) input_buffer(sz, buffer.get_buffer() +
|
||||
buffered.reset(new input_buffer(sz, buffer.get_buffer() +
|
||||
buffer.get_current() - RECORD_HEADER, sz));
|
||||
break;
|
||||
}
|
||||
|
@ -760,7 +760,7 @@ void sendClientKeyExchange(SSL& ssl, BufferOutput buffer)
|
|||
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
buildHeaders(ssl, hsHeader, rlHeader, ck);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, ck);
|
||||
hashHandShake(ssl, *out.get());
|
||||
|
@ -781,7 +781,7 @@ void sendServerKeyExchange(SSL& ssl, BufferOutput buffer)
|
|||
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
buildHeaders(ssl, hsHeader, rlHeader, sk);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, sk);
|
||||
hashHandShake(ssl, *out.get());
|
||||
|
@ -806,7 +806,7 @@ void sendChangeCipher(SSL& ssl, BufferOutput buffer)
|
|||
ChangeCipherSpec ccs;
|
||||
RecordLayerHeader rlHeader;
|
||||
buildHeader(ssl, rlHeader, ccs);
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
buildOutput(*out.get(), rlHeader, ccs);
|
||||
|
||||
if (buffer == buffered)
|
||||
|
@ -823,7 +823,7 @@ void sendFinished(SSL& ssl, ConnectionEnd side, BufferOutput buffer)
|
|||
|
||||
Finished fin;
|
||||
buildFinished(ssl, fin, side == client_end ? client : server);
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
cipherFinished(ssl, fin, *out.get()); // hashes handshake
|
||||
|
||||
if (ssl.getSecurity().get_resuming()) {
|
||||
|
@ -907,7 +907,7 @@ void sendServerHello(SSL& ssl, BufferOutput buffer)
|
|||
ServerHello sh(ssl.getSecurity().get_connection().version_);
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
|
||||
buildServerHello(ssl, sh);
|
||||
ssl.set_random(sh.get_random(), server_end);
|
||||
|
@ -930,7 +930,7 @@ void sendServerHelloDone(SSL& ssl, BufferOutput buffer)
|
|||
ServerHelloDone shd;
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
|
||||
buildHeaders(ssl, hsHeader, rlHeader, shd);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, shd);
|
||||
|
@ -951,7 +951,7 @@ void sendCertificate(SSL& ssl, BufferOutput buffer)
|
|||
Certificate cert(ssl.getCrypto().get_certManager().get_cert());
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
|
||||
buildHeaders(ssl, hsHeader, rlHeader, cert);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, cert);
|
||||
|
@ -973,7 +973,7 @@ void sendCertificateRequest(SSL& ssl, BufferOutput buffer)
|
|||
request.Build();
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
|
||||
buildHeaders(ssl, hsHeader, rlHeader, request);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, request);
|
||||
|
@ -995,7 +995,7 @@ void sendCertificateVerify(SSL& ssl, BufferOutput buffer)
|
|||
verify.Build(ssl);
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(new (ys) output_buffer);
|
||||
mySTL::auto_ptr<output_buffer> out(new output_buffer);
|
||||
|
||||
buildHeaders(ssl, hsHeader, rlHeader, verify);
|
||||
buildOutput(*out.get(), rlHeader, hsHeader, verify);
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
#include "log.hpp"
|
||||
|
||||
#ifdef YASSL_LOG
|
||||
#include <ctime>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -443,7 +443,7 @@ int read_file(SSL_CTX* ctx, const char* file, int format, CertType type)
|
|||
fseek(input, 0, SEEK_END);
|
||||
long sz = ftell(input);
|
||||
rewind(input);
|
||||
x = new (ys) x509(sz); // takes ownership
|
||||
x = new x509(sz); // takes ownership
|
||||
size_t bytes = fread(x->use_buffer(), sz, 1, input);
|
||||
if (bytes != 1) {
|
||||
fclose(input);
|
||||
|
@ -663,7 +663,7 @@ BIGNUM* BN_bin2bn(const unsigned char* num, int sz, BIGNUM* retVal)
|
|||
|
||||
if (!retVal) {
|
||||
created = true;
|
||||
bn.reset(new (ys) BIGNUM);
|
||||
bn.reset(new BIGNUM);
|
||||
retVal = bn.get();
|
||||
}
|
||||
|
||||
|
|
|
@ -134,10 +134,10 @@ void DH_Server::build(SSL& ssl)
|
|||
const CertManager& cert = ssl.getCrypto().get_certManager();
|
||||
|
||||
if (ssl.getSecurity().get_parms().sig_algo_ == rsa_sa_algo)
|
||||
auth.reset(new (ys) RSA(cert.get_privateKey(),
|
||||
auth.reset(new RSA(cert.get_privateKey(),
|
||||
cert.get_privateKeyLength(), false));
|
||||
else {
|
||||
auth.reset(new (ys) DSS(cert.get_privateKey(),
|
||||
auth.reset(new DSS(cert.get_privateKey(),
|
||||
cert.get_privateKeyLength(), false));
|
||||
sigSz += DSS_ENCODED_EXTRA;
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ void DH_Server::build(SSL& ssl)
|
|||
byte hash[FINISHED_SZ];
|
||||
MD5 md5;
|
||||
SHA sha;
|
||||
signature_ = new (ys) byte[sigSz];
|
||||
signature_ = new byte[sigSz];
|
||||
|
||||
const Connection& conn = ssl.getSecurity().get_connection();
|
||||
// md5
|
||||
|
@ -199,7 +199,7 @@ void DH_Server::build(SSL& ssl)
|
|||
tmp.write(signature_, sigSz);
|
||||
|
||||
// key message
|
||||
keyMessage_ = new (ys) opaque[length_];
|
||||
keyMessage_ = new opaque[length_];
|
||||
memcpy(keyMessage_, tmp.get_buffer(), tmp.get_size());
|
||||
}
|
||||
|
||||
|
@ -253,7 +253,7 @@ opaque* EncryptedPreMasterSecret::get_clientKey() const
|
|||
void EncryptedPreMasterSecret::alloc(int sz)
|
||||
{
|
||||
length_ = sz;
|
||||
secret_ = new (ys) opaque[sz];
|
||||
secret_ = new opaque[sz];
|
||||
}
|
||||
|
||||
|
||||
|
@ -303,7 +303,7 @@ opaque* ClientDiffieHellmanPublic::get_clientKey() const
|
|||
void ClientDiffieHellmanPublic::alloc(int sz, bool offset)
|
||||
{
|
||||
length_ = sz + (offset ? KEY_OFFSET : 0);
|
||||
Yc_ = new (ys) opaque[length_];
|
||||
Yc_ = new opaque[length_];
|
||||
}
|
||||
|
||||
|
||||
|
@ -348,7 +348,7 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
|
|||
tmp[1] = input[AUTO];
|
||||
ato16(tmp, length);
|
||||
|
||||
signature_ = new (ys) byte[length];
|
||||
signature_ = new byte[length];
|
||||
input.read(signature_, length);
|
||||
|
||||
// verify signature
|
||||
|
@ -386,7 +386,7 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
|
|||
}
|
||||
|
||||
// save input
|
||||
ssl.useCrypto().SetDH(new (ys) DiffieHellman(parms_.get_p(),
|
||||
ssl.useCrypto().SetDH(new DiffieHellman(parms_.get_p(),
|
||||
parms_.get_pSize(), parms_.get_g(), parms_.get_gSize(),
|
||||
parms_.get_pub(), parms_.get_pubSize(),
|
||||
ssl.getCrypto().get_random()));
|
||||
|
@ -928,7 +928,7 @@ void Data::Process(input_buffer& input, SSL& ssl)
|
|||
// read data
|
||||
if (dataSz) {
|
||||
input_buffer* data;
|
||||
ssl.addData(data = new (ys) input_buffer(dataSz));
|
||||
ssl.addData(data = new input_buffer(dataSz));
|
||||
input.read(data->get_buffer(), dataSz);
|
||||
data->add_size(dataSz);
|
||||
|
||||
|
@ -1025,7 +1025,7 @@ void Certificate::Process(input_buffer& input, SSL& ssl)
|
|||
c24to32(tmp, cert_sz);
|
||||
|
||||
x509* myCert;
|
||||
cm.AddPeerCert(myCert = new (ys) x509(cert_sz));
|
||||
cm.AddPeerCert(myCert = new x509(cert_sz));
|
||||
input.read(myCert->use_buffer(), myCert->get_length());
|
||||
|
||||
list_sz -= cert_sz + CERT_HEADER;
|
||||
|
@ -1111,21 +1111,21 @@ const opaque* ServerDHParams::get_pub() const
|
|||
|
||||
opaque* ServerDHParams::alloc_p(int sz)
|
||||
{
|
||||
p_ = new (ys) opaque[pSz_ = sz];
|
||||
p_ = new opaque[pSz_ = sz];
|
||||
return p_;
|
||||
}
|
||||
|
||||
|
||||
opaque* ServerDHParams::alloc_g(int sz)
|
||||
{
|
||||
g_ = new (ys) opaque[gSz_ = sz];
|
||||
g_ = new opaque[gSz_ = sz];
|
||||
return g_;
|
||||
}
|
||||
|
||||
|
||||
opaque* ServerDHParams::alloc_pub(int sz)
|
||||
{
|
||||
Ys_ = new (ys) opaque[pubSz_ = sz];
|
||||
Ys_ = new opaque[pubSz_ = sz];
|
||||
return Ys_;
|
||||
}
|
||||
|
||||
|
@ -1537,7 +1537,7 @@ void CertificateRequest::Build()
|
|||
for (int j = 0; j < authCount; j++) {
|
||||
int sz = REQUEST_HEADER + MIN_DIS_SIZE;
|
||||
DistinguishedName dn;
|
||||
certificate_authorities_.push_back(dn = new (ys) byte[sz]);
|
||||
certificate_authorities_.push_back(dn = new byte[sz]);
|
||||
|
||||
opaque tmp[REQUEST_HEADER];
|
||||
c16toa(MIN_DIS_SIZE, tmp);
|
||||
|
@ -1584,7 +1584,7 @@ input_buffer& operator>>(input_buffer& input, CertificateRequest& request)
|
|||
ato16(tmp, dnSz);
|
||||
|
||||
DistinguishedName dn;
|
||||
request.certificate_authorities_.push_back(dn = new (ys)
|
||||
request.certificate_authorities_.push_back(dn = new
|
||||
byte[REQUEST_HEADER + dnSz]);
|
||||
memcpy(dn, tmp, REQUEST_HEADER);
|
||||
input.read(&dn[REQUEST_HEADER], dnSz);
|
||||
|
@ -1665,7 +1665,7 @@ void CertificateVerify::Build(SSL& ssl)
|
|||
RSA rsa(cert.get_privateKey(), cert.get_privateKeyLength(), false);
|
||||
|
||||
sz = rsa.get_cipherLength() + VERIFY_HEADER;
|
||||
sig.reset(new (ys) byte[sz]);
|
||||
sig.reset(new byte[sz]);
|
||||
|
||||
c16toa(sz - VERIFY_HEADER, len);
|
||||
memcpy(sig.get(), len, VERIFY_HEADER);
|
||||
|
@ -1676,7 +1676,7 @@ void CertificateVerify::Build(SSL& ssl)
|
|||
DSS dss(cert.get_privateKey(), cert.get_privateKeyLength(), false);
|
||||
|
||||
sz = DSS_SIG_SZ + DSS_ENCODED_EXTRA + VERIFY_HEADER;
|
||||
sig.reset(new (ys) byte[sz]);
|
||||
sig.reset(new byte[sz]);
|
||||
|
||||
c16toa(sz - VERIFY_HEADER, len);
|
||||
memcpy(sig.get(), len, VERIFY_HEADER);
|
||||
|
@ -1714,7 +1714,7 @@ input_buffer& operator>>(input_buffer& input, CertificateVerify& request)
|
|||
ato16(tmp, sz);
|
||||
request.set_length(sz);
|
||||
|
||||
request.signature_ = new (ys) byte[sz];
|
||||
request.signature_ = new byte[sz];
|
||||
input.read(request.signature_, sz);
|
||||
|
||||
return input;
|
||||
|
@ -1975,7 +1975,7 @@ Connection::~Connection()
|
|||
|
||||
void Connection::AllocPreSecret(uint sz)
|
||||
{
|
||||
pre_master_secret_ = new (ys) opaque[pre_secret_len_ = sz];
|
||||
pre_master_secret_ = new opaque[pre_secret_len_ = sz];
|
||||
}
|
||||
|
||||
|
||||
|
@ -2011,35 +2011,35 @@ void Connection::CleanPreMaster()
|
|||
|
||||
|
||||
// Create functions for message factory
|
||||
Message* CreateCipherSpec() { return new (ys) ChangeCipherSpec; }
|
||||
Message* CreateAlert() { return new (ys) Alert; }
|
||||
Message* CreateHandShake() { return new (ys) HandShakeHeader; }
|
||||
Message* CreateData() { return new (ys) Data; }
|
||||
Message* CreateCipherSpec() { return new ChangeCipherSpec; }
|
||||
Message* CreateAlert() { return new Alert; }
|
||||
Message* CreateHandShake() { return new HandShakeHeader; }
|
||||
Message* CreateData() { return new Data; }
|
||||
|
||||
// Create functions for handshake factory
|
||||
HandShakeBase* CreateHelloRequest() { return new (ys) HelloRequest; }
|
||||
HandShakeBase* CreateClientHello() { return new (ys) ClientHello; }
|
||||
HandShakeBase* CreateServerHello() { return new (ys) ServerHello; }
|
||||
HandShakeBase* CreateCertificate() { return new (ys) Certificate; }
|
||||
HandShakeBase* CreateServerKeyExchange() { return new (ys) ServerKeyExchange;}
|
||||
HandShakeBase* CreateCertificateRequest() { return new (ys)
|
||||
HandShakeBase* CreateHelloRequest() { return new HelloRequest; }
|
||||
HandShakeBase* CreateClientHello() { return new ClientHello; }
|
||||
HandShakeBase* CreateServerHello() { return new ServerHello; }
|
||||
HandShakeBase* CreateCertificate() { return new Certificate; }
|
||||
HandShakeBase* CreateServerKeyExchange() { return new ServerKeyExchange;}
|
||||
HandShakeBase* CreateCertificateRequest() { return new
|
||||
CertificateRequest; }
|
||||
HandShakeBase* CreateServerHelloDone() { return new (ys) ServerHelloDone; }
|
||||
HandShakeBase* CreateCertificateVerify() { return new (ys) CertificateVerify;}
|
||||
HandShakeBase* CreateClientKeyExchange() { return new (ys) ClientKeyExchange;}
|
||||
HandShakeBase* CreateFinished() { return new (ys) Finished; }
|
||||
HandShakeBase* CreateServerHelloDone() { return new ServerHelloDone; }
|
||||
HandShakeBase* CreateCertificateVerify() { return new CertificateVerify;}
|
||||
HandShakeBase* CreateClientKeyExchange() { return new ClientKeyExchange;}
|
||||
HandShakeBase* CreateFinished() { return new Finished; }
|
||||
|
||||
// Create functions for server key exchange factory
|
||||
ServerKeyBase* CreateRSAServerKEA() { return new (ys) RSA_Server; }
|
||||
ServerKeyBase* CreateDHServerKEA() { return new (ys) DH_Server; }
|
||||
ServerKeyBase* CreateFortezzaServerKEA() { return new (ys) Fortezza_Server; }
|
||||
ServerKeyBase* CreateRSAServerKEA() { return new RSA_Server; }
|
||||
ServerKeyBase* CreateDHServerKEA() { return new DH_Server; }
|
||||
ServerKeyBase* CreateFortezzaServerKEA() { return new Fortezza_Server; }
|
||||
|
||||
// Create functions for client key exchange factory
|
||||
ClientKeyBase* CreateRSAClient() { return new (ys)
|
||||
ClientKeyBase* CreateRSAClient() { return new
|
||||
EncryptedPreMasterSecret; }
|
||||
ClientKeyBase* CreateDHClient() { return new (ys)
|
||||
ClientKeyBase* CreateDHClient() { return new
|
||||
ClientDiffieHellmanPublic; }
|
||||
ClientKeyBase* CreateFortezzaClient() { return new (ys) FortezzaKeys; }
|
||||
ClientKeyBase* CreateFortezzaClient() { return new FortezzaKeys; }
|
||||
|
||||
|
||||
// Constructor calls this to Register compile time callbacks
|
||||
|
@ -2115,4 +2115,3 @@ template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::output_buffer*>:
|
|||
template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::x509*>::iterator, yaSSL::del_ptr_zero>(mySTL::list<yaSSL::x509*>::iterator, mySTL::list<yaSSL::x509*>::iterator, yaSSL::del_ptr_zero);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -31,28 +31,6 @@
|
|||
#include "openssl/ssl.h" // for DH
|
||||
|
||||
|
||||
void* operator new(size_t sz, yaSSL::new_t)
|
||||
{
|
||||
void* ptr = ::operator new(sz);
|
||||
|
||||
if (!ptr) abort();
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void* operator new[](size_t sz, yaSSL::new_t n)
|
||||
{
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1300)
|
||||
void* ptr = ::operator new(sz); // no ::operator new[]
|
||||
#else
|
||||
void* ptr = ::operator new[](sz);
|
||||
#endif
|
||||
|
||||
if (!ptr) abort();
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
|
@ -60,8 +38,6 @@ namespace yaSSL {
|
|||
using mySTL::min;
|
||||
|
||||
|
||||
new_t ys; // for library new
|
||||
|
||||
|
||||
// convert a 32 bit integer into a 24 bit one
|
||||
void c32to24(uint32 u32, uint24& u24)
|
||||
|
@ -308,8 +284,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = AES_256_KEY_SZ;
|
||||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_, cipher_names[TLS_RSA_WITH_AES_256_CBC_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -322,8 +298,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = AES_128_KEY_SZ;
|
||||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_, cipher_names[TLS_RSA_WITH_AES_128_CBC_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -336,8 +312,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = DES_EDE_KEY_SZ;
|
||||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_RSA_WITH_3DES_EDE_CBC_SHA]
|
||||
, MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -350,8 +326,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = DES_KEY_SZ;
|
||||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_RSA_WITH_DES_CBC_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -364,8 +340,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = RC4_KEY_SZ;
|
||||
parms.iv_size_ = 0;
|
||||
parms.cipher_type_ = stream;
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) RC4);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new RC4);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_RSA_WITH_RC4_128_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -378,8 +354,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = RC4_KEY_SZ;
|
||||
parms.iv_size_ = 0;
|
||||
parms.cipher_type_ = stream;
|
||||
crypto_.setDigest(new (ys) MD5);
|
||||
crypto_.setCipher(new (ys) RC4);
|
||||
crypto_.setDigest(new MD5);
|
||||
crypto_.setCipher(new RC4);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_RSA_WITH_RC4_128_MD5],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -394,8 +370,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_DHE_RSA_WITH_DES_CBC_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -410,8 +386,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -426,8 +402,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_RSA_WITH_AES_256_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -442,8 +418,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_RSA_WITH_AES_128_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -458,8 +434,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES);
|
||||
strncpy(parms.cipher_name_, cipher_names[SSL_DHE_DSS_WITH_DES_CBC_SHA],
|
||||
MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -474,8 +450,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -490,8 +466,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_DSS_WITH_AES_256_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -506,8 +482,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) SHA);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new SHA);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_DSS_WITH_AES_128_CBC_SHA], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -520,8 +496,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = AES_256_KEY_SZ;
|
||||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_RSA_WITH_AES_256_CBC_RMD160], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -534,8 +510,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = AES_128_KEY_SZ;
|
||||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_RSA_WITH_AES_128_CBC_RMD160], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -548,8 +524,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.key_size_ = DES_EDE_KEY_SZ;
|
||||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_RSA_WITH_3DES_EDE_CBC_RMD160], MAX_SUITE_NAME);
|
||||
break;
|
||||
|
@ -564,8 +540,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -581,8 +557,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_RSA_WITH_AES_256_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -598,8 +574,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_RSA_WITH_AES_128_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -615,8 +591,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = DES_IV_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) DES_EDE);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new DES_EDE);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -632,8 +608,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES(AES_256_KEY_SZ));
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES(AES_256_KEY_SZ));
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_DSS_WITH_AES_256_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -649,8 +625,8 @@ void SSL::set_pending(Cipher suite)
|
|||
parms.iv_size_ = AES_BLOCK_SZ;
|
||||
parms.cipher_type_ = block;
|
||||
secure_.use_connection().send_server_key_ = true; // eph
|
||||
crypto_.setDigest(new (ys) RMD);
|
||||
crypto_.setCipher(new (ys) AES);
|
||||
crypto_.setDigest(new RMD);
|
||||
crypto_.setCipher(new AES);
|
||||
strncpy(parms.cipher_name_,
|
||||
cipher_names[TLS_DHE_DSS_WITH_AES_128_CBC_RMD160],
|
||||
MAX_SUITE_NAME);
|
||||
|
@ -936,12 +912,14 @@ struct SumBuffer {
|
|||
} // namespace for locals
|
||||
using namespace yassl_int_cpp_local1;
|
||||
|
||||
|
||||
uint SSL::bufferedData()
|
||||
{
|
||||
return mySTL::for_each(buffers_.getData().begin(),buffers_.getData().end(),
|
||||
SumData()).total_;
|
||||
}
|
||||
|
||||
|
||||
// use input buffer to fill data
|
||||
void SSL::fillData(Data& data)
|
||||
{
|
||||
|
@ -1346,18 +1324,19 @@ SSL_SESSION::~SSL_SESSION()
|
|||
}
|
||||
|
||||
|
||||
Sessions Sessions::instance; // simple singleton
|
||||
Sessions Sessions::instance_; // simple singleton
|
||||
|
||||
Sessions& GetSessions()
|
||||
{
|
||||
return Sessions::instance;
|
||||
return Sessions::instance_;
|
||||
}
|
||||
|
||||
sslFactory sslFactory::instance;
|
||||
|
||||
sslFactory sslFactory::instance_; // simple singleton
|
||||
|
||||
sslFactory& GetSSL_Factory()
|
||||
{
|
||||
return sslFactory::instance;
|
||||
return sslFactory::instance_;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1367,7 +1346,7 @@ typedef Mutex::Lock Lock;
|
|||
void Sessions::add(const SSL& ssl)
|
||||
{
|
||||
Lock guard(mutex_);
|
||||
list_.push_back(new (ys) SSL_SESSION(ssl, random_));
|
||||
list_.push_back(new SSL_SESSION(ssl, random_));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1397,6 +1376,7 @@ struct sess_match {
|
|||
} // local namespace
|
||||
using namespace yassl_int_cpp_local2;
|
||||
|
||||
|
||||
// lookup session by id, return a copy if space provided
|
||||
SSL_SESSION* Sessions::lookup(const opaque* id, SSL_SESSION* copy)
|
||||
{
|
||||
|
@ -1764,7 +1744,7 @@ void Crypto::SetDH(DiffieHellman* dh)
|
|||
void Crypto::SetDH(const DH_Parms& dh)
|
||||
{
|
||||
if (dh.set_)
|
||||
dh_ = new (ys) DiffieHellman(dh.p_, dh.g_, random_);
|
||||
dh_ = new DiffieHellman(dh.p_, dh.g_, random_);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1931,7 +1911,7 @@ X509_NAME::X509_NAME(const char* n, size_t sz)
|
|||
: name_(0)
|
||||
{
|
||||
if (sz) {
|
||||
name_ = new (ys) char[sz];
|
||||
name_ = new char[sz];
|
||||
memcpy(name_, n, sz);
|
||||
}
|
||||
}
|
||||
|
@ -1952,7 +1932,7 @@ char* X509_NAME::GetName()
|
|||
X509::X509(const char* i, size_t iSz, const char* s, size_t sSz)
|
||||
: issuer_(i, iSz), subject_(s, sSz)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
X509_NAME* X509::GetIssuer()
|
||||
{
|
||||
|
|
|
@ -37,11 +37,12 @@ enum { AES_BLOCK_SIZE = 16 };
|
|||
|
||||
|
||||
// AES encryption and decryption, see FIPS-197
|
||||
class AES : public Mode_BASE<AES_BLOCK_SIZE> {
|
||||
class AES : public Mode_BASE {
|
||||
public:
|
||||
enum { BLOCK_SIZE = AES_BLOCK_SIZE };
|
||||
|
||||
AES(CipherDir DIR, Mode MODE) : dir_(DIR), mode_(MODE) {}
|
||||
AES(CipherDir DIR, Mode MODE)
|
||||
: Mode_BASE(BLOCK_SIZE), dir_(DIR), mode_(MODE) {}
|
||||
|
||||
void Process(byte*, const byte*, word32);
|
||||
void SetKey(const byte* iv, word32 sz, CipherDir fake = ENCRYPTION);
|
||||
|
|
|
@ -24,11 +24,10 @@
|
|||
#ifndef TAO_CRYPT_ALGEBRA_HPP
|
||||
#define TAO_CRYPT_ALGEBRA_HPP
|
||||
|
||||
#include "misc.hpp"
|
||||
#include "integer.hpp"
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
class Integer;
|
||||
|
||||
// "const Element&" returned by member functions are references
|
||||
// to internal data members. Since each object may have only
|
||||
|
@ -38,11 +37,11 @@ class Integer;
|
|||
// But this should be fine:
|
||||
// abcd = group.Add(a, group.Add(b, group.Add(c,d));
|
||||
|
||||
//! Abstract Group
|
||||
template <class T> class TAOCRYPT_NO_VTABLE AbstractGroup
|
||||
// Abstract Group
|
||||
class TAOCRYPT_NO_VTABLE AbstractGroup
|
||||
{
|
||||
public:
|
||||
typedef T Element;
|
||||
typedef Integer Element;
|
||||
|
||||
virtual ~AbstractGroup() {}
|
||||
|
||||
|
@ -65,15 +64,14 @@ public:
|
|||
const Integer *exponents, unsigned int exponentsCount) const;
|
||||
};
|
||||
|
||||
//! Abstract Ring
|
||||
template <class T> class TAOCRYPT_NO_VTABLE AbstractRing
|
||||
: public AbstractGroup<T>
|
||||
// Abstract Ring
|
||||
class TAOCRYPT_NO_VTABLE AbstractRing : public AbstractGroup
|
||||
{
|
||||
public:
|
||||
typedef T Element;
|
||||
typedef Integer Element;
|
||||
|
||||
AbstractRing() {m_mg.m_pRing = this;}
|
||||
AbstractRing(const AbstractRing &source) {m_mg.m_pRing = this;}
|
||||
AbstractRing(const AbstractRing &source) : AbstractGroup() {m_mg.m_pRing = this;}
|
||||
AbstractRing& operator=(const AbstractRing &source) {return *this;}
|
||||
|
||||
virtual bool IsUnit(const Element &a) const =0;
|
||||
|
@ -91,14 +89,14 @@ public:
|
|||
virtual void SimultaneousExponentiate(Element *results, const Element&,
|
||||
const Integer *exponents, unsigned int exponentsCount) const;
|
||||
|
||||
virtual const AbstractGroup<T>& MultiplicativeGroup() const
|
||||
virtual const AbstractGroup& MultiplicativeGroup() const
|
||||
{return m_mg;}
|
||||
|
||||
private:
|
||||
class MultiplicativeGroupT : public AbstractGroup<T>
|
||||
class MultiplicativeGroupT : public AbstractGroup
|
||||
{
|
||||
public:
|
||||
const AbstractRing<T>& GetRing() const
|
||||
const AbstractRing& GetRing() const
|
||||
{return *m_pRing;}
|
||||
|
||||
bool Equal(const Element &a, const Element &b) const
|
||||
|
@ -137,44 +135,19 @@ private:
|
|||
{GetRing().SimultaneousExponentiate(results, base, exponents,
|
||||
exponentsCount);}
|
||||
|
||||
const AbstractRing<T> *m_pRing;
|
||||
const AbstractRing* m_pRing;
|
||||
};
|
||||
|
||||
MultiplicativeGroupT m_mg;
|
||||
};
|
||||
|
||||
// ********************************************************
|
||||
|
||||
//! Base and Exponent
|
||||
template <class T, class E = Integer>
|
||||
struct BaseAndExponent
|
||||
// Abstract Euclidean Domain
|
||||
class TAOCRYPT_NO_VTABLE AbstractEuclideanDomain
|
||||
: public AbstractRing
|
||||
{
|
||||
public:
|
||||
BaseAndExponent() {}
|
||||
BaseAndExponent(const T &base, const E &exponent) : base(base),
|
||||
exponent(exponent) {}
|
||||
bool operator<(const BaseAndExponent<T, E> &rhs) const
|
||||
{return exponent < rhs.exponent;}
|
||||
T base;
|
||||
E exponent;
|
||||
};
|
||||
|
||||
// VC60 workaround: incomplete member template support
|
||||
template <class Element, class Iterator>
|
||||
Element GeneralCascadeMultiplication(const AbstractGroup<Element> &group,
|
||||
Iterator begin, Iterator end);
|
||||
template <class Element, class Iterator>
|
||||
Element GeneralCascadeExponentiation(const AbstractRing<Element> &ring,
|
||||
Iterator begin, Iterator end);
|
||||
|
||||
// ********************************************************
|
||||
|
||||
//! Abstract Euclidean Domain
|
||||
template <class T> class TAOCRYPT_NO_VTABLE AbstractEuclideanDomain
|
||||
: public AbstractRing<T>
|
||||
{
|
||||
public:
|
||||
typedef T Element;
|
||||
typedef Integer Element;
|
||||
|
||||
virtual void DivisionAlgorithm(Element &r, Element &q, const Element &a,
|
||||
const Element &d) const =0;
|
||||
|
@ -186,13 +159,12 @@ protected:
|
|||
mutable Element result;
|
||||
};
|
||||
|
||||
// ********************************************************
|
||||
|
||||
//! EuclideanDomainOf
|
||||
template <class T> class EuclideanDomainOf : public AbstractEuclideanDomain<T>
|
||||
// EuclideanDomainOf
|
||||
class EuclideanDomainOf : public AbstractEuclideanDomain
|
||||
{
|
||||
public:
|
||||
typedef T Element;
|
||||
typedef Integer Element;
|
||||
|
||||
EuclideanDomainOf() {}
|
||||
|
||||
|
@ -249,68 +221,8 @@ private:
|
|||
mutable Element result;
|
||||
};
|
||||
|
||||
//! Quotient Ring
|
||||
template<class T> class QuotientRing : public AbstractRing<typename T::Element>
|
||||
{
|
||||
public:
|
||||
typedef T EuclideanDomain;
|
||||
typedef typename T::Element Element;
|
||||
|
||||
QuotientRing(const EuclideanDomain &domain, const Element &modulus)
|
||||
: m_domain(domain), m_modulus(modulus) {}
|
||||
|
||||
const EuclideanDomain & GetDomain() const
|
||||
{return m_domain;}
|
||||
|
||||
const Element& GetModulus() const
|
||||
{return m_modulus;}
|
||||
|
||||
bool Equal(const Element &a, const Element &b) const
|
||||
{return m_domain.Equal(m_domain.Mod(m_domain.Subtract(a, b),
|
||||
m_modulus), m_domain.Identity());}
|
||||
|
||||
const Element& Identity() const
|
||||
{return m_domain.Identity();}
|
||||
|
||||
const Element& Add(const Element &a, const Element &b) const
|
||||
{return m_domain.Add(a, b);}
|
||||
|
||||
Element& Accumulate(Element &a, const Element &b) const
|
||||
{return m_domain.Accumulate(a, b);}
|
||||
|
||||
const Element& Inverse(const Element &a) const
|
||||
{return m_domain.Inverse(a);}
|
||||
|
||||
const Element& Subtract(const Element &a, const Element &b) const
|
||||
{return m_domain.Subtract(a, b);}
|
||||
|
||||
Element& Reduce(Element &a, const Element &b) const
|
||||
{return m_domain.Reduce(a, b);}
|
||||
|
||||
const Element& Double(const Element &a) const
|
||||
{return m_domain.Double(a);}
|
||||
|
||||
bool IsUnit(const Element &a) const
|
||||
{return m_domain.IsUnit(m_domain.Gcd(a, m_modulus));}
|
||||
|
||||
const Element& MultiplicativeIdentity() const
|
||||
{return m_domain.MultiplicativeIdentity();}
|
||||
|
||||
const Element& Multiply(const Element &a, const Element &b) const
|
||||
{return m_domain.Mod(m_domain.Multiply(a, b), m_modulus);}
|
||||
|
||||
const Element& Square(const Element &a) const
|
||||
{return m_domain.Mod(m_domain.Square(a), m_modulus);}
|
||||
|
||||
const Element& MultiplicativeInverse(const Element &a) const;
|
||||
|
||||
protected:
|
||||
EuclideanDomain m_domain;
|
||||
Element m_modulus;
|
||||
};
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
#endif // TAO_CRYPT_ALGEBRA_HPP
|
||||
|
|
|
@ -79,7 +79,7 @@ enum ASNIdFlag
|
|||
|
||||
enum DNTags
|
||||
{
|
||||
COMMON_NAME = 0x03,
|
||||
COMMON_NAME = 0x03
|
||||
};
|
||||
|
||||
|
||||
|
@ -92,7 +92,7 @@ enum Constants
|
|||
MAX_SEQ_SZ = 5, // enum(seq|con) + length(4)
|
||||
MAX_ALGO_SIZE = 9,
|
||||
MAX_DIGEST_SZ = 25, // SHA + enum(Bit or Octet) + length(4)
|
||||
DSA_SIG_SZ = 40,
|
||||
DSA_SIG_SZ = 40
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -34,10 +34,6 @@
|
|||
#include <stddef.h> // ptrdiff_t
|
||||
|
||||
|
||||
#if defined(_MSC_VER) && defined(_CRTAPI1)
|
||||
#define TAOCRYPT_MSVCRT6
|
||||
#endif
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
@ -47,13 +43,13 @@ template<class T>
|
|||
class AllocatorBase
|
||||
{
|
||||
public:
|
||||
typedef T value_type;
|
||||
typedef size_t size_type;
|
||||
typedef ptrdiff_t difference_type;
|
||||
typedef T* pointer;
|
||||
typedef const T* const_pointer;
|
||||
typedef T& reference;
|
||||
typedef const T& const_reference;
|
||||
typedef T value_type;
|
||||
typedef size_t size_type;
|
||||
typedef ptrdiff_t difference_type;
|
||||
typedef T* pointer;
|
||||
typedef const T* const_pointer;
|
||||
typedef T& reference;
|
||||
typedef const T& const_reference;
|
||||
|
||||
pointer address(reference r) const {return (&r);}
|
||||
const_pointer address(const_reference r) const {return (&r); }
|
||||
|
@ -104,7 +100,7 @@ public:
|
|||
CheckSize(n);
|
||||
if (n == 0)
|
||||
return 0;
|
||||
return new (tc) T[n];
|
||||
return new T[n];
|
||||
}
|
||||
|
||||
void deallocate(void* p, size_type n)
|
||||
|
|
|
@ -36,12 +36,13 @@ namespace TaoCrypt {
|
|||
enum { DES_BLOCK_SIZE = 8 };
|
||||
|
||||
// Base for all DES types
|
||||
class DES_BASE : public Mode_BASE<DES_BLOCK_SIZE> {
|
||||
class DES_BASE : public Mode_BASE {
|
||||
public:
|
||||
enum { BLOCK_SIZE = DES_BLOCK_SIZE, KEY_SIZE = 32, BOXES = 8,
|
||||
BOX_SIZE = 64 };
|
||||
|
||||
DES_BASE(CipherDir DIR, Mode MODE) : dir_(DIR), mode_(MODE) {}
|
||||
DES_BASE(CipherDir DIR, Mode MODE)
|
||||
: Mode_BASE(BLOCK_SIZE), dir_(DIR), mode_(MODE) {}
|
||||
|
||||
void Process(byte*, const byte*, word32);
|
||||
protected:
|
||||
|
|
|
@ -65,7 +65,8 @@ UNKOWN_HASH_E = 1034, // "unknown hash OID"
|
|||
DSA_SZ_E = 1035, // "bad DSA r or s size"
|
||||
BEFORE_DATE_E = 1036, // "before date in the future"
|
||||
AFTER_DATE_E = 1037, // "after date in the past"
|
||||
SIG_CONFIRM_E = 1038 // "bad signature confirmation"
|
||||
SIG_CONFIRM_E = 1038, // "bad self signature confirmation"
|
||||
SIG_OTHER_E = 1039 // "bad other signature confirmation"
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
class HASHwithTransform : public HASH {
|
||||
public:
|
||||
HASHwithTransform(word32 digSz, word32 buffSz)
|
||||
: digest_(new (tc) word32[digSz]), buffer_(new (tc) byte[buffSz]) {}
|
||||
: digest_(new word32[digSz]), buffer_(new byte[buffSz]) {}
|
||||
virtual ~HASHwithTransform() { delete[] buffer_; delete[] digest_; }
|
||||
|
||||
virtual ByteOrder getByteOrder() const = 0;
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
#include "block.hpp"
|
||||
#include "random.hpp"
|
||||
#include "file.hpp"
|
||||
#include <string.h>
|
||||
#include "algorithm.hpp" // mySTL::swap
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#ifdef TAOCRYPT_X86ASM_AVAILABLE
|
||||
|
@ -128,9 +128,6 @@ public:
|
|||
Integer(signed long value);
|
||||
Integer(Sign s, word highWord, word lowWord);
|
||||
|
||||
explicit Integer(const char* str);
|
||||
explicit Integer(const wchar_t* str);
|
||||
|
||||
// BER Decode Source
|
||||
explicit Integer(Source&);
|
||||
|
||||
|
@ -254,15 +251,13 @@ public:
|
|||
private:
|
||||
friend class ModularArithmetic;
|
||||
friend class MontgomeryRepresentation;
|
||||
friend class HalfMontgomeryRepresentation;
|
||||
|
||||
Integer(word value, unsigned int length);
|
||||
|
||||
static const Integer zero;
|
||||
static const Integer one;
|
||||
static const Integer two;
|
||||
|
||||
Integer(word value, unsigned int length);
|
||||
int PositiveCompare(const Integer& t) const;
|
||||
|
||||
friend void PositiveAdd(Integer& sum, const Integer& a, const Integer& b);
|
||||
friend void PositiveSubtract(Integer& diff, const Integer& a,
|
||||
const Integer& b);
|
||||
|
@ -308,6 +303,7 @@ inline void swap(Integer &a, Integer &b)
|
|||
|
||||
Integer CRT(const Integer& xp, const Integer& p, const Integer& xq,
|
||||
const Integer& q, const Integer& u);
|
||||
|
||||
inline Integer ModularExponentiation(const Integer& a, const Integer& e,
|
||||
const Integer& m)
|
||||
{
|
||||
|
|
|
@ -28,17 +28,6 @@
|
|||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
// library allocation
|
||||
struct new_t {}; // TaoCrypt New type
|
||||
extern new_t tc; // pass in parameter
|
||||
|
||||
} // namespace TaoCrypt
|
||||
|
||||
void* operator new (size_t, TaoCrypt::new_t);
|
||||
void* operator new[](size_t, TaoCrypt::new_t);
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
@ -59,7 +48,7 @@ typedef unsigned char byte;
|
|||
typedef unsigned short word16;
|
||||
typedef unsigned int word32;
|
||||
|
||||
#if defined(__GNUC__) || defined(__MWERKS__)
|
||||
#if defined(__GNUC__) || defined(__MWERKS__) || defined(_LONGLONG_TYPE)
|
||||
#define WORD64_AVAILABLE
|
||||
typedef unsigned long long word64;
|
||||
#define W64LIT(x) x##LL
|
||||
|
@ -79,8 +68,10 @@ typedef unsigned int word32;
|
|||
typedef word32 lword;
|
||||
#endif
|
||||
|
||||
// FIXME the !defined(__sun) is a temporarely solution until asm for
|
||||
// __x86_64__ and Solaris is written
|
||||
#if defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || \
|
||||
defined(__x86_64__) || defined(__mips64)
|
||||
defined(__mips64) || (defined(__x86_64__) && !defined(__sun))
|
||||
// These platforms have 64-bit CPU registers. Unfortunately most C++ compilers
|
||||
// don't allow any way to access the 64-bit by 64-bit multiply instruction
|
||||
// without using assembly, so in order to use word64 as word, the assembly
|
||||
|
|
|
@ -27,14 +27,13 @@
|
|||
#define TAO_CRYPT_MODARITH_HPP
|
||||
|
||||
#include "misc.hpp"
|
||||
#include "integer.hpp"
|
||||
#include "algebra.hpp"
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
||||
//! ModularArithmetic
|
||||
class ModularArithmetic : public AbstractRing<Integer>
|
||||
// ModularArithmetic
|
||||
class ModularArithmetic : public AbstractRing
|
||||
{
|
||||
public:
|
||||
|
||||
|
@ -45,7 +44,7 @@ public:
|
|||
: modulus(modulus), result((word)0, modulus.reg_.size()) {}
|
||||
|
||||
ModularArithmetic(const ModularArithmetic &ma)
|
||||
: AbstractRing<Integer>(),
|
||||
: AbstractRing(),
|
||||
modulus(ma.modulus), result((word)0, modulus.reg_.size()) {}
|
||||
|
||||
const Integer& GetModulus() const {return modulus;}
|
||||
|
@ -149,12 +148,12 @@ public:
|
|||
|
||||
Integer CascadeExponentiate(const Integer &x, const Integer &e1,
|
||||
const Integer &y, const Integer &e2) const
|
||||
{return AbstractRing<Integer>::CascadeExponentiate(x, e1, y, e2);}
|
||||
{return AbstractRing::CascadeExponentiate(x, e1, y, e2);}
|
||||
|
||||
void SimultaneousExponentiate(Element *results, const Element &base,
|
||||
const Integer *exponents, unsigned int exponentsCount) const
|
||||
{AbstractRing<Integer>::SimultaneousExponentiate(results, base,
|
||||
exponents, exponentsCount);}
|
||||
{AbstractRing::SimultaneousExponentiate(results, base,
|
||||
exponents, exponentsCount);}
|
||||
|
||||
private:
|
||||
Integer u;
|
||||
|
|
|
@ -56,10 +56,11 @@ private:
|
|||
|
||||
|
||||
// Mode Base for block ciphers, static size
|
||||
template<int BLOCK_SIZE>
|
||||
class Mode_BASE {
|
||||
public:
|
||||
Mode_BASE() {}
|
||||
enum { MaxBlockSz = 16 };
|
||||
|
||||
explicit Mode_BASE(int sz) : blockSz_(sz) { assert(sz <= MaxBlockSz); }
|
||||
virtual ~Mode_BASE() {}
|
||||
|
||||
virtual void ProcessAndXorBlock(const byte*, const byte*, byte*) const = 0;
|
||||
|
@ -68,10 +69,11 @@ public:
|
|||
void CBC_Encrypt(byte*, const byte*, word32);
|
||||
void CBC_Decrypt(byte*, const byte*, word32);
|
||||
|
||||
void SetIV(const byte* iv) { memcpy(reg_, iv, BLOCK_SIZE); }
|
||||
void SetIV(const byte* iv) { memcpy(reg_, iv, blockSz_); }
|
||||
private:
|
||||
byte reg_[BLOCK_SIZE];
|
||||
byte tmp_[BLOCK_SIZE];
|
||||
byte reg_[MaxBlockSz];
|
||||
byte tmp_[MaxBlockSz];
|
||||
int blockSz_;
|
||||
|
||||
Mode_BASE(const Mode_BASE&); // hide copy
|
||||
Mode_BASE& operator=(const Mode_BASE&); // and assign
|
||||
|
@ -79,51 +81,48 @@ private:
|
|||
|
||||
|
||||
// ECB Process blocks
|
||||
template<int BLOCK_SIZE>
|
||||
void Mode_BASE<BLOCK_SIZE>::ECB_Process(byte* out, const byte* in, word32 sz)
|
||||
inline void Mode_BASE::ECB_Process(byte* out, const byte* in, word32 sz)
|
||||
{
|
||||
word32 blocks = sz / BLOCK_SIZE;
|
||||
word32 blocks = sz / blockSz_;
|
||||
|
||||
while (blocks--) {
|
||||
ProcessAndXorBlock(in, 0, out);
|
||||
out += BLOCK_SIZE;
|
||||
in += BLOCK_SIZE;
|
||||
out += blockSz_;
|
||||
in += blockSz_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// CBC Encrypt
|
||||
template<int BLOCK_SIZE>
|
||||
void Mode_BASE<BLOCK_SIZE>::CBC_Encrypt(byte* out, const byte* in, word32 sz)
|
||||
inline void Mode_BASE::CBC_Encrypt(byte* out, const byte* in, word32 sz)
|
||||
{
|
||||
word32 blocks = sz / BLOCK_SIZE;
|
||||
word32 blocks = sz / blockSz_;
|
||||
|
||||
while (blocks--) {
|
||||
xorbuf(reg_, in, BLOCK_SIZE);
|
||||
xorbuf(reg_, in, blockSz_);
|
||||
ProcessAndXorBlock(reg_, 0, reg_);
|
||||
memcpy(out, reg_, BLOCK_SIZE);
|
||||
out += BLOCK_SIZE;
|
||||
in += BLOCK_SIZE;
|
||||
memcpy(out, reg_, blockSz_);
|
||||
out += blockSz_;
|
||||
in += blockSz_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// CBC Decrypt
|
||||
template<int BLOCK_SIZE>
|
||||
void Mode_BASE<BLOCK_SIZE>::CBC_Decrypt(byte* out, const byte* in, word32 sz)
|
||||
inline void Mode_BASE::CBC_Decrypt(byte* out, const byte* in, word32 sz)
|
||||
{
|
||||
word32 blocks = sz / BLOCK_SIZE;
|
||||
byte hold[BLOCK_SIZE];
|
||||
word32 blocks = sz / blockSz_;
|
||||
byte hold[MaxBlockSz];
|
||||
|
||||
while (blocks--) {
|
||||
memcpy(tmp_, in, BLOCK_SIZE);
|
||||
memcpy(tmp_, in, blockSz_);
|
||||
ProcessAndXorBlock(tmp_, 0, out);
|
||||
xorbuf(out, reg_, BLOCK_SIZE);
|
||||
memcpy(hold, reg_, BLOCK_SIZE); // swap reg_ and tmp_
|
||||
memcpy(reg_, tmp_, BLOCK_SIZE);
|
||||
memcpy(tmp_, hold, BLOCK_SIZE);
|
||||
out += BLOCK_SIZE;
|
||||
in += BLOCK_SIZE;
|
||||
xorbuf(out, reg_, blockSz_);
|
||||
memcpy(hold, reg_, blockSz_); // swap reg_ and tmp_
|
||||
memcpy(reg_, tmp_, blockSz_);
|
||||
memcpy(tmp_, hold, blockSz_);
|
||||
out += blockSz_;
|
||||
in += blockSz_;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,60 +23,58 @@
|
|||
|
||||
#include "runtime.hpp"
|
||||
#include "algebra.hpp"
|
||||
#include "integer.hpp"
|
||||
#include "vector.hpp" // mySTL::vector (simple)
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
template <class T> const T& AbstractGroup<T>::Double(const Element &a) const
|
||||
|
||||
const Integer& AbstractGroup::Double(const Element &a) const
|
||||
{
|
||||
return Add(a, a);
|
||||
}
|
||||
|
||||
template <class T> const T& AbstractGroup<T>::Subtract(const Element &a,
|
||||
const Element &b) const
|
||||
const Integer& AbstractGroup::Subtract(const Element &a, const Element &b) const
|
||||
{
|
||||
// make copy of a in case Inverse() overwrites it
|
||||
Element a1(a);
|
||||
return Add(a1, Inverse(b));
|
||||
}
|
||||
|
||||
template <class T> T& AbstractGroup<T>::Accumulate(Element &a,
|
||||
const Element &b) const
|
||||
Integer& AbstractGroup::Accumulate(Element &a, const Element &b) const
|
||||
{
|
||||
return a = Add(a, b);
|
||||
}
|
||||
|
||||
template <class T> T& AbstractGroup<T>::Reduce(Element &a,
|
||||
const Element &b) const
|
||||
Integer& AbstractGroup::Reduce(Element &a, const Element &b) const
|
||||
{
|
||||
return a = Subtract(a, b);
|
||||
}
|
||||
|
||||
template <class T> const T& AbstractRing<T>::Square(const Element &a) const
|
||||
const Integer& AbstractRing::Square(const Element &a) const
|
||||
{
|
||||
return Multiply(a, a);
|
||||
}
|
||||
|
||||
template <class T> const T& AbstractRing<T>::Divide(const Element &a,
|
||||
const Element &b) const
|
||||
|
||||
const Integer& AbstractRing::Divide(const Element &a, const Element &b) const
|
||||
{
|
||||
// make copy of a in case MultiplicativeInverse() overwrites it
|
||||
Element a1(a);
|
||||
return Multiply(a1, MultiplicativeInverse(b));
|
||||
}
|
||||
|
||||
template <class T> const T& AbstractEuclideanDomain<T>::Mod(const Element &a,
|
||||
const Element &b) const
|
||||
|
||||
const Integer& AbstractEuclideanDomain::Mod(const Element &a,
|
||||
const Element &b) const
|
||||
{
|
||||
Element q;
|
||||
DivisionAlgorithm(result, q, a, b);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class T> const T& AbstractEuclideanDomain<T>::Gcd(const Element &a,
|
||||
const Element &b) const
|
||||
const Integer& AbstractEuclideanDomain::Gcd(const Element &a,
|
||||
const Element &b) const
|
||||
{
|
||||
Element g[3]={b, a};
|
||||
unsigned int i0=0, i1=1, i2=2;
|
||||
|
@ -90,45 +88,17 @@ template <class T> const T& AbstractEuclideanDomain<T>::Gcd(const Element &a,
|
|||
return result = g[i0];
|
||||
}
|
||||
|
||||
template <class T> const typename
|
||||
QuotientRing<T>::Element& QuotientRing<T>::MultiplicativeInverse(
|
||||
const Element &a) const
|
||||
{
|
||||
Element g[3]={m_modulus, a};
|
||||
#ifdef __BCPLUSPLUS__
|
||||
// BC++50 workaround
|
||||
Element v[3];
|
||||
v[0]=m_domain.Identity();
|
||||
v[1]=m_domain.MultiplicativeIdentity();
|
||||
#else
|
||||
Element v[3]={m_domain.Identity(), m_domain.MultiplicativeIdentity()};
|
||||
#endif
|
||||
Element y;
|
||||
unsigned int i0=0, i1=1, i2=2;
|
||||
|
||||
while (!Equal(g[i1], Identity()))
|
||||
{
|
||||
// y = g[i0] / g[i1];
|
||||
// g[i2] = g[i0] % g[i1];
|
||||
m_domain.DivisionAlgorithm(g[i2], y, g[i0], g[i1]);
|
||||
// v[i2] = v[i0] - (v[i1] * y);
|
||||
v[i2] = m_domain.Subtract(v[i0], m_domain.Multiply(v[i1], y));
|
||||
unsigned int t = i0; i0 = i1; i1 = i2; i2 = t;
|
||||
}
|
||||
|
||||
return m_domain.IsUnit(g[i0]) ? m_domain.Divide(v[i0], g[i0]) :
|
||||
m_domain.Identity();
|
||||
}
|
||||
|
||||
template <class T> T AbstractGroup<T>::ScalarMultiply(const Element &base,
|
||||
const Integer &exponent) const
|
||||
Integer AbstractGroup::ScalarMultiply(const Element &base,
|
||||
const Integer &exponent) const
|
||||
{
|
||||
Element result;
|
||||
SimultaneousMultiply(&result, base, &exponent, 1);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class T> T AbstractGroup<T>::CascadeScalarMultiply(const Element &x,
|
||||
|
||||
Integer AbstractGroup::CascadeScalarMultiply(const Element &x,
|
||||
const Integer &e1, const Element &y, const Integer &e2) const
|
||||
{
|
||||
const unsigned expLen = max(e1.BitCount(), e2.BitCount());
|
||||
|
@ -258,8 +228,8 @@ struct WindowSlider
|
|||
bool fastNegate, negateNext, firstTime, finished;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
void AbstractGroup<T>::SimultaneousMultiply(T *results, const T &base,
|
||||
|
||||
void AbstractGroup::SimultaneousMultiply(Integer *results, const Integer &base,
|
||||
const Integer *expBegin, unsigned int expCount) const
|
||||
{
|
||||
mySTL::vector<mySTL::vector<Element> > buckets(expCount);
|
||||
|
@ -321,34 +291,39 @@ void AbstractGroup<T>::SimultaneousMultiply(T *results, const T &base,
|
|||
}
|
||||
}
|
||||
|
||||
template <class T> T AbstractRing<T>::Exponentiate(const Element &base,
|
||||
const Integer &exponent) const
|
||||
Integer AbstractRing::Exponentiate(const Element &base,
|
||||
const Integer &exponent) const
|
||||
{
|
||||
Element result;
|
||||
SimultaneousExponentiate(&result, base, &exponent, 1);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class T> T AbstractRing<T>::CascadeExponentiate(const Element &x,
|
||||
|
||||
Integer AbstractRing::CascadeExponentiate(const Element &x,
|
||||
const Integer &e1, const Element &y, const Integer &e2) const
|
||||
{
|
||||
return MultiplicativeGroup().AbstractGroup<T>::CascadeScalarMultiply(
|
||||
return MultiplicativeGroup().AbstractGroup::CascadeScalarMultiply(
|
||||
x, e1, y, e2);
|
||||
}
|
||||
|
||||
template <class Element, class Iterator> Element GeneralCascadeExponentiation(
|
||||
const AbstractRing<Element> &ring, Iterator begin, Iterator end)
|
||||
{
|
||||
return GeneralCascadeMultiplication<Element>(ring.MultiplicativeGroup(),
|
||||
begin, end);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void AbstractRing<T>::SimultaneousExponentiate(T *results, const T &base,
|
||||
void AbstractRing::SimultaneousExponentiate(Integer *results,
|
||||
const Integer &base,
|
||||
const Integer *exponents, unsigned int expCount) const
|
||||
{
|
||||
MultiplicativeGroup().AbstractGroup<T>::SimultaneousMultiply(results, base,
|
||||
MultiplicativeGroup().AbstractGroup::SimultaneousMultiply(results, base,
|
||||
exponents, expCount);
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
#ifdef __GNUC__
|
||||
namespace mySTL {
|
||||
template TaoCrypt::WindowSlider* uninit_copy<TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
|
||||
template vector<TaoCrypt::Integer>* uninit_fill_n<vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> >(vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> const&);
|
||||
template void destroy<TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
|
||||
template void destroy<vector<TaoCrypt::Integer>*>(vector<TaoCrypt::Integer>*, vector<TaoCrypt::Integer>*);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -187,7 +187,7 @@ PublicKey::PublicKey(const byte* k, word32 s) : key_(0), sz_(0)
|
|||
void PublicKey::SetSize(word32 s)
|
||||
{
|
||||
sz_ = s;
|
||||
key_ = new (tc) byte[sz_];
|
||||
key_ = new byte[sz_];
|
||||
}
|
||||
|
||||
|
||||
|
@ -199,7 +199,7 @@ void PublicKey::SetKey(const byte* k)
|
|||
|
||||
void PublicKey::AddToEnd(const byte* data, word32 len)
|
||||
{
|
||||
mySTL::auto_ptr<byte> tmp(new (tc) byte[sz_ + len]);
|
||||
mySTL::auto_ptr<byte> tmp(new byte[sz_ + len]);
|
||||
|
||||
memcpy(tmp.get(), key_, sz_);
|
||||
memcpy(tmp.get() + sz_, data, len);
|
||||
|
@ -218,7 +218,7 @@ Signer::Signer(const byte* k, word32 kSz, const char* n, const byte* h)
|
|||
{
|
||||
if (n) {
|
||||
int sz = strlen(n);
|
||||
name_ = new (tc) char[sz + 1];
|
||||
name_ = new char[sz + 1];
|
||||
memcpy(name_, n, sz);
|
||||
name_[sz] = 0;
|
||||
}
|
||||
|
@ -480,7 +480,7 @@ void CertDecoder::Decode(SignerList* signers)
|
|||
}
|
||||
else
|
||||
if (!ValidateSignature(signers))
|
||||
source_.SetError(SIG_CONFIRM_E);
|
||||
source_.SetError(SIG_OTHER_E);
|
||||
}
|
||||
|
||||
|
||||
|
@ -632,7 +632,7 @@ word32 CertDecoder::GetSignature()
|
|||
}
|
||||
sigLength_--;
|
||||
|
||||
signature_ = new (tc) byte[sigLength_];
|
||||
signature_ = new byte[sigLength_];
|
||||
memcpy(signature_, source_.get_current(), sigLength_);
|
||||
source_.advance(sigLength_);
|
||||
|
||||
|
@ -653,7 +653,7 @@ word32 CertDecoder::GetDigest()
|
|||
|
||||
sigLength_ = GetLength(source_);
|
||||
|
||||
signature_ = new (tc) byte[sigLength_];
|
||||
signature_ = new byte[sigLength_];
|
||||
memcpy(signature_, source_.get_current(), sigLength_);
|
||||
source_.advance(sigLength_);
|
||||
|
||||
|
@ -693,7 +693,7 @@ void CertDecoder::GetName(NameType nt)
|
|||
|
||||
if (id == COMMON_NAME) {
|
||||
char*& ptr = (nt == ISSUER) ? issuer_ : subject_;
|
||||
ptr = new (tc) char[strLen + 1];
|
||||
ptr = new char[strLen + 1];
|
||||
memcpy(ptr, source_.get_current(), strLen);
|
||||
ptr[strLen] = 0;
|
||||
}
|
||||
|
@ -810,15 +810,15 @@ bool CertDecoder::ConfirmSignature(Source& pub)
|
|||
mySTL::auto_ptr<HASH> hasher;
|
||||
|
||||
if (signatureOID_ == MD5wRSA) {
|
||||
hasher.reset(new (tc) MD5);
|
||||
hasher.reset(new MD5);
|
||||
ht = MD5h;
|
||||
}
|
||||
else if (signatureOID_ == MD2wRSA) {
|
||||
hasher.reset(new (tc) MD2);
|
||||
hasher.reset(new MD2);
|
||||
ht = MD2h;
|
||||
}
|
||||
else if (signatureOID_ == SHAwRSA || signatureOID_ == SHAwDSA) {
|
||||
hasher.reset(new (tc) SHA);
|
||||
hasher.reset(new SHA);
|
||||
ht = SHAh;
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "runtime.hpp"
|
||||
#include "dh.hpp"
|
||||
#include "asn.hpp"
|
||||
#include <math.h>
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
#include "modarith.hpp"
|
||||
#include "stdexcept.hpp"
|
||||
|
||||
#include "algebra.cpp" // for GCC 3.2 on aix ?
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
|
|
@ -38,11 +38,10 @@
|
|||
#include "asn.hpp"
|
||||
#include "stdexcept.hpp"
|
||||
|
||||
#include "algebra.cpp"
|
||||
|
||||
|
||||
#ifdef __DECCXX
|
||||
#include <c_asm.h> // for asm multiply overflow
|
||||
#include <c_asm.h> // for asm overflow assembly
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -63,7 +62,7 @@
|
|||
#pragma message("You do not seem to have the Visual C++ Processor Pack ")
|
||||
#pragma message("installed, so use of SSE2 intrinsics will be disabled.")
|
||||
#elif defined(__GNUC__) && defined(__i386__)
|
||||
/* #warning You do not have GCC 3.3 or later, or did not specify the -msse2 \
|
||||
/* #warning You do not have GCC 3.3 or later, or did not specify the -msse2 \
|
||||
compiler option. Use of SSE2 intrinsics will be disabled.
|
||||
*/
|
||||
#endif
|
||||
|
@ -109,7 +108,7 @@ CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(
|
|||
assert(IsAlignedOn(p, 16));
|
||||
return (T*)p;
|
||||
}
|
||||
return new (tc) T[n];
|
||||
return new T[n];
|
||||
}
|
||||
|
||||
|
||||
|
@ -178,7 +177,7 @@ DWord() {}
|
|||
#elif defined(__DECCXX)
|
||||
r.halfs_.high = asm("umulh %a0, %a1, %v0", a, b);
|
||||
#else
|
||||
#error unsupported alpha compiler for asm multiply overflow
|
||||
#error can not implement multiply overflow
|
||||
#endif
|
||||
#elif defined(__ia64__)
|
||||
r.halfs_.low = a*b;
|
||||
|
@ -392,6 +391,7 @@ S DivideThreeWordsByTwo(S* A, S B0, S B1, D* dummy_VC6_WorkAround = 0)
|
|||
return Q;
|
||||
}
|
||||
|
||||
|
||||
// do a 4 word by 2 word divide, returns 2 word quotient in Q0 and Q1
|
||||
template <class S, class D>
|
||||
inline D DivideFourWordsByTwo(S *T, const D &Al, const D &Ah, const D &B)
|
||||
|
@ -470,66 +470,6 @@ static inline unsigned int RoundupSize(unsigned int n)
|
|||
}
|
||||
|
||||
|
||||
template <class T>
|
||||
static Integer StringToInteger(const T *str)
|
||||
{
|
||||
word radix;
|
||||
|
||||
unsigned int length;
|
||||
for (length = 0; str[length] != 0; length++) {}
|
||||
|
||||
Integer v;
|
||||
|
||||
if (length == 0)
|
||||
return v;
|
||||
|
||||
switch (str[length-1])
|
||||
{
|
||||
case 'h':
|
||||
case 'H':
|
||||
radix=16;
|
||||
break;
|
||||
case 'o':
|
||||
case 'O':
|
||||
radix=8;
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
radix=2;
|
||||
break;
|
||||
default:
|
||||
radix=10;
|
||||
}
|
||||
|
||||
if (length > 2 && str[0] == '0' && str[1] == 'x')
|
||||
radix = 16;
|
||||
|
||||
for (unsigned i=0; i<length; i++)
|
||||
{
|
||||
word digit;
|
||||
|
||||
if (str[i] >= '0' && str[i] <= '9')
|
||||
digit = str[i] - '0';
|
||||
else if (str[i] >= 'A' && str[i] <= 'F')
|
||||
digit = str[i] - 'A' + 10;
|
||||
else if (str[i] >= 'a' && str[i] <= 'f')
|
||||
digit = str[i] - 'a' + 10;
|
||||
else
|
||||
digit = radix;
|
||||
|
||||
if (digit < radix)
|
||||
{
|
||||
v *= radix;
|
||||
v += digit;
|
||||
}
|
||||
}
|
||||
|
||||
if (str[0] == '-')
|
||||
v.Negate();
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static int Compare(const word *A, const word *B, unsigned int N)
|
||||
{
|
||||
while (N--)
|
||||
|
@ -2308,85 +2248,6 @@ void RecursiveMultiplyBottom(word *R, word *T, const word *A, const word *B,
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
template <class P>
|
||||
void RecursiveMultiplyTop(word *R, word *T, const word *L, const word *A,
|
||||
const word *B, unsigned int N, const P *dummy=0)
|
||||
{
|
||||
assert(N>=2 && N%2==0);
|
||||
|
||||
if (N==4)
|
||||
{
|
||||
P::Multiply4(T, A, B);
|
||||
((dword *)R)[0] = ((dword *)T)[2];
|
||||
((dword *)R)[1] = ((dword *)T)[3];
|
||||
}
|
||||
else if (N==2)
|
||||
{
|
||||
P::Multiply2(T, A, B);
|
||||
((dword *)R)[0] = ((dword *)T)[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned int N2 = N/2;
|
||||
int carry;
|
||||
|
||||
int aComp = Compare(A0, A1, N2);
|
||||
int bComp = Compare(B0, B1, N2);
|
||||
|
||||
switch (2*aComp + aComp + bComp)
|
||||
{
|
||||
case -4:
|
||||
P::Subtract(R0, A1, A0, N2);
|
||||
P::Subtract(R1, B0, B1, N2);
|
||||
RecursiveMultiply<P>(T0, T2, R0, R1, N2);
|
||||
P::Subtract(T1, T1, R0, N2);
|
||||
carry = -1;
|
||||
break;
|
||||
case -2:
|
||||
P::Subtract(R0, A1, A0, N2);
|
||||
P::Subtract(R1, B0, B1, N2);
|
||||
RecursiveMultiply<P>(T0, T2, R0, R1, N2);
|
||||
carry = 0;
|
||||
break;
|
||||
case 2:
|
||||
P::Subtract(R0, A0, A1, N2);
|
||||
P::Subtract(R1, B1, B0, N2);
|
||||
RecursiveMultiply<P>(T0, T2, R0, R1, N2);
|
||||
carry = 0;
|
||||
break;
|
||||
case 4:
|
||||
P::Subtract(R0, A1, A0, N2);
|
||||
P::Subtract(R1, B0, B1, N2);
|
||||
RecursiveMultiply<P>(T0, T2, R0, R1, N2);
|
||||
P::Subtract(T1, T1, R1, N2);
|
||||
carry = -1;
|
||||
break;
|
||||
default:
|
||||
SetWords(T0, 0, N);
|
||||
carry = 0;
|
||||
}
|
||||
|
||||
RecursiveMultiply<P>(T2, R0, A1, B1, N2);
|
||||
|
||||
// now T[01] holds (A1-A0)*(B0-B1), T[23] holds A1*B1
|
||||
|
||||
word c2 = P::Subtract(R0, L+N2, L, N2);
|
||||
c2 += P::Subtract(R0, R0, T0, N2);
|
||||
word t = (Compare(R0, T2, N2) == -1);
|
||||
|
||||
carry += t;
|
||||
carry += Increment(R0, N2, c2+t);
|
||||
carry += P::Add(R0, R0, T1, N2);
|
||||
carry += P::Add(R0, R0, T3, N2);
|
||||
assert (carry >= 0 && carry <= 2);
|
||||
|
||||
CopyWords(R1, T3, N2);
|
||||
Increment(R1, N2, carry);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void RecursiveMultiplyTop(word *R, word *T, const word *L, const word *A,
|
||||
const word *B, unsigned int N)
|
||||
|
@ -2739,20 +2600,6 @@ Integer::Integer(word value, unsigned int length)
|
|||
}
|
||||
|
||||
|
||||
Integer::Integer(const char *str)
|
||||
: reg_(2), sign_(POSITIVE)
|
||||
{
|
||||
*this = StringToInteger(str);
|
||||
}
|
||||
|
||||
|
||||
Integer::Integer(const wchar_t *str)
|
||||
: reg_(2), sign_(POSITIVE)
|
||||
{
|
||||
*this = StringToInteger(str);
|
||||
}
|
||||
|
||||
|
||||
Integer::Integer(const byte *encodedInteger, unsigned int byteCount,
|
||||
Signedness s)
|
||||
{
|
||||
|
@ -3358,76 +3205,6 @@ Integer Integer::Times(const Integer &b) const
|
|||
#undef R2
|
||||
#undef R3
|
||||
|
||||
/*
|
||||
// do a 3 word by 2 word divide, returns quotient and leaves remainder in A
|
||||
static word SubatomicDivide(word *A, word B0, word B1)
|
||||
{
|
||||
// assert {A[2],A[1]} < {B1,B0}, so quotient can fit in a word
|
||||
assert(A[2] < B1 || (A[2]==B1 && A[1] < B0));
|
||||
|
||||
dword p, u;
|
||||
word Q;
|
||||
|
||||
// estimate the quotient: do a 2 word by 1 word divide
|
||||
if (B1+1 == 0)
|
||||
Q = A[2];
|
||||
else
|
||||
Q = word(MAKE_DWORD(A[1], A[2]) / (B1+1));
|
||||
|
||||
// now subtract Q*B from A
|
||||
p = (dword) B0*Q;
|
||||
u = (dword) A[0] - LOW_WORD(p);
|
||||
A[0] = LOW_WORD(u);
|
||||
u = (dword) A[1] - HIGH_WORD(p) - (word)(0-HIGH_WORD(u)) - (dword)B1*Q;
|
||||
A[1] = LOW_WORD(u);
|
||||
A[2] += HIGH_WORD(u);
|
||||
|
||||
// Q <= actual quotient, so fix it
|
||||
while (A[2] || A[1] > B1 || (A[1]==B1 && A[0]>=B0))
|
||||
{
|
||||
u = (dword) A[0] - B0;
|
||||
A[0] = LOW_WORD(u);
|
||||
u = (dword) A[1] - B1 - (word)(0-HIGH_WORD(u));
|
||||
A[1] = LOW_WORD(u);
|
||||
A[2] += HIGH_WORD(u);
|
||||
Q++;
|
||||
assert(Q); // shouldn't overflow
|
||||
}
|
||||
|
||||
return Q;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
// do a 4 word by 2 word divide, returns 2 word quotient in Q0 and Q1
|
||||
static inline void AtomicDivide(word *Q, const word *A, const word *B)
|
||||
{
|
||||
if (!B[0] && !B[1]) // if divisor is 0, we assume divisor==2**(2*WORD_BITS)
|
||||
{
|
||||
Q[0] = A[2];
|
||||
Q[1] = A[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
word T[4];
|
||||
T[0] = A[0]; T[1] = A[1]; T[2] = A[2]; T[3] = A[3];
|
||||
Q[1] = SubatomicDivide(T+1, B[0], B[1]);
|
||||
Q[0] = SubatomicDivide(T, B[0], B[1]);
|
||||
|
||||
#ifndef NDEBUG
|
||||
// multiply quotient and divisor and add remainder
|
||||
// make sure it equals dividend
|
||||
assert(!T[2] && !T[3] && (T[1] < B[1] || (T[1]==B[1] && T[0]<B[0])));
|
||||
word P[4];
|
||||
LowLevel::Multiply2(P, Q, B);
|
||||
Add(P, P, T, 4);
|
||||
assert(memcmp(P, A, 4*WORD_SIZE)==0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
static inline void AtomicDivide(word *Q, const word *A, const word *B)
|
||||
{
|
||||
|
@ -3772,7 +3549,7 @@ Integer a_exp_b_mod_c(const Integer &x, const Integer& e, const Integer& m)
|
|||
|
||||
Integer Integer::Gcd(const Integer &a, const Integer &b)
|
||||
{
|
||||
return EuclideanDomainOf<Integer>().Gcd(a, b);
|
||||
return EuclideanDomainOf().Gcd(a, b);
|
||||
}
|
||||
|
||||
Integer Integer::InverseMod(const Integer &m) const
|
||||
|
@ -3955,7 +3732,7 @@ Integer ModularArithmetic::CascadeExponentiate(const Integer &x,
|
|||
dr.ConvertIn(y), e2));
|
||||
}
|
||||
else
|
||||
return AbstractRing<Integer>::CascadeExponentiate(x, e1, y, e2);
|
||||
return AbstractRing::CascadeExponentiate(x, e1, y, e2);
|
||||
}
|
||||
|
||||
void ModularArithmetic::SimultaneousExponentiate(Integer *results,
|
||||
|
@ -3971,7 +3748,7 @@ void ModularArithmetic::SimultaneousExponentiate(Integer *results,
|
|||
results[i] = dr.ConvertOut(results[i]);
|
||||
}
|
||||
else
|
||||
AbstractRing<Integer>::SimultaneousExponentiate(results, base,
|
||||
AbstractRing::SimultaneousExponentiate(results, base,
|
||||
exponents, exponentsCount);
|
||||
}
|
||||
|
||||
|
@ -4170,11 +3947,10 @@ Integer CRT(const Integer &xp, const Integer &p, const Integer &xq,
|
|||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
template Integer StringToInteger<char>(char const*);
|
||||
template Integer StringToInteger<wchar_t>(wchar_t const*);
|
||||
template class EuclideanDomainOf<Integer>;
|
||||
template class AbstractEuclideanDomain<Integer>;
|
||||
template unsigned int DivideThreeWordsByTwo<unsigned int, DWord>(unsigned int*, unsigned int, unsigned int, DWord*);
|
||||
#if defined(SSE2_INTRINSICS_AVAILABLE)
|
||||
template AlignedAllocator<unsigned int>::pointer StdReallocate<unsigned int, AlignedAllocator<unsigned int> >(AlignedAllocator<unsigned int>&, unsigned int*, AlignedAllocator<unsigned int>::size_type, AlignedAllocator<unsigned int>::size_type, bool);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -27,36 +27,9 @@
|
|||
#include <new> // for NewHandler
|
||||
|
||||
|
||||
void* operator new(size_t sz, TaoCrypt::new_t)
|
||||
{
|
||||
void* ptr = ::operator new(sz);
|
||||
|
||||
if (!ptr) abort();
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void* operator new[](size_t sz, TaoCrypt::new_t tc)
|
||||
{
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1300)
|
||||
void* ptr = ::operator new(sz); // no ::operator new[]
|
||||
#else
|
||||
void* ptr = ::operator new[](sz);
|
||||
#endif
|
||||
|
||||
if (!ptr) abort();
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
|
||||
new_t tc; // for library new
|
||||
|
||||
|
||||
inline void XorWords(word* r, const word* a, unsigned int n)
|
||||
{
|
||||
for (unsigned int i=0; i<n; i++)
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "runtime.hpp"
|
||||
#include "random.hpp"
|
||||
#include "stdexcept.hpp"
|
||||
|
||||
#if defined(WIN32)
|
||||
#define _WIN32_WINNT 0x0400
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include "modarith.hpp"
|
||||
#include "stdexcept.hpp"
|
||||
|
||||
#include "algebra.cpp" // for GCC 3.2 on aix ?
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
@ -214,8 +213,6 @@ word32 SSL_Decrypt(const RSA_PublicKey& key, const byte* sig, byte* plain)
|
|||
#ifdef __GNUC__
|
||||
template AllocatorWithCleanup<unsigned char>::pointer StdReallocate<unsigned char, AllocatorWithCleanup<unsigned char> >(AllocatorWithCleanup<unsigned char>&, unsigned char*, AllocatorWithCleanup<unsigned char>::size_type, AllocatorWithCleanup<unsigned char>::size_type, bool);
|
||||
template AllocatorWithCleanup<unsigned int>::pointer StdReallocate<unsigned int, AllocatorWithCleanup<unsigned int> >(AllocatorWithCleanup<unsigned int>&, unsigned int*, AllocatorWithCleanup<unsigned int>::size_type, AllocatorWithCleanup<unsigned int>::size_type, bool);
|
||||
template class AbstractGroup<Integer>;
|
||||
template class AbstractRing<Integer>;
|
||||
template class RSA_Decryptor<RSA_BlockType2>;
|
||||
template class RSA_Encryptor<RSA_BlockType1>;
|
||||
template class RSA_Encryptor<RSA_BlockType2>;
|
||||
|
@ -227,11 +224,7 @@ template class RSA_Encryptor<RSA_BlockType2>;
|
|||
namespace mySTL {
|
||||
template TaoCrypt::Integer* uninit_copy<TaoCrypt::Integer*, TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*, TaoCrypt::Integer*);
|
||||
template TaoCrypt::Integer* uninit_fill_n<TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer>(TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer const&);
|
||||
template TaoCrypt::WindowSlider* uninit_copy<TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
|
||||
template vector<TaoCrypt::Integer>* uninit_fill_n<vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> >(vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> const&);
|
||||
template void destroy<TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*);
|
||||
template void destroy<TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*);
|
||||
template void destroy<vector<TaoCrypt::Integer>*>(vector<TaoCrypt::Integer>*, vector<TaoCrypt::Integer>*);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -44,10 +44,15 @@
|
|||
#endif /* __CYGWIN__ */
|
||||
|
||||
/* Determine when to use "#pragma interface" */
|
||||
#if !defined(__CYGWIN__) && !defined(__ICC) && defined(__GNUC__) && (__GNUC__ < 3)
|
||||
#if !defined(__CYGWIN__) && !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ < 3)
|
||||
#define USE_PRAGMA_INTERFACE
|
||||
#endif
|
||||
|
||||
/* Determine when to use "#pragma implementation" */
|
||||
#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ < 3)
|
||||
#define USE_PRAGMA_IMPLEMENTATION
|
||||
#endif
|
||||
|
||||
#if defined(i386) && !defined(__i386__)
|
||||
#define __i386__
|
||||
#endif
|
||||
|
@ -310,12 +315,14 @@ C_MODE_END
|
|||
#endif
|
||||
#if defined(__ia64__)
|
||||
#define new my_arg_new
|
||||
#define need_to_restore_new 1
|
||||
#endif
|
||||
C_MODE_START
|
||||
#include <asm/atomic.h>
|
||||
C_MODE_END
|
||||
#if defined(__ia64__)
|
||||
#ifdef need_to_restore_new /* probably safer than #ifdef new */
|
||||
#undef new
|
||||
#undef need_to_restore_new
|
||||
#endif
|
||||
#endif
|
||||
#include <errno.h> /* Recommended by debian */
|
||||
|
|
|
@ -605,6 +605,7 @@ extern int my_access(const char *path, int amode);
|
|||
#else
|
||||
#define my_access access
|
||||
#endif
|
||||
extern int check_if_legal_filename(const char *path);
|
||||
|
||||
#ifndef TERMINATE
|
||||
extern void TERMINATE(FILE *file);
|
||||
|
|
|
@ -50,6 +50,9 @@ CREATE TABLE host (
|
|||
Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
PRIMARY KEY Host (Host,Db)
|
||||
) engine=MyISAM
|
||||
CHARACTER SET utf8 COLLATE utf8_bin
|
||||
|
@ -489,10 +492,11 @@ CREATE TABLE procs_priv (
|
|||
Db char(64) binary DEFAULT '' NOT NULL,
|
||||
User char(16) binary DEFAULT '' NOT NULL,
|
||||
Routine_name char(64) binary DEFAULT '' NOT NULL,
|
||||
Routine_type enum('FUNCTION','PROCEDURE') NOT NULL,
|
||||
Grantor char(77) DEFAULT '' NOT NULL,
|
||||
Timestamp timestamp(14),
|
||||
Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL,
|
||||
PRIMARY KEY (Host,Db,User,Routine_name),
|
||||
Timestamp timestamp(14),
|
||||
PRIMARY KEY (Host,Db,User,Routine_name,Routine_type),
|
||||
KEY Grantor (Grantor)
|
||||
) engine=MyISAM
|
||||
CHARACTER SET utf8 COLLATE utf8_bin
|
||||
|
|
|
@ -1212,8 +1212,8 @@ start_master()
|
|||
$NOT_FIRST_MASTER_EXTRA_OPTS"
|
||||
fi
|
||||
|
||||
CUR_MYERR=$MASTER_MYERR
|
||||
CUR_MYSOCK=$MASTER_MYSOCK
|
||||
CUR_MYERR=$MASTER_MYERR$1
|
||||
CUR_MYSOCK=$MASTER_MYSOCK$1
|
||||
|
||||
# For embedded server we collect the server flags and return
|
||||
if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
|
||||
|
|
138
mysql-test/r/bugs.result
Normal file
|
@ -0,0 +1,138 @@
|
|||
drop table if exists t1,t2,t3,t4,t5,t6;
|
||||
drop database if exists mysqltest;
|
||||
CREATE TABLE t1 (a varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
b varchar(1) binary NOT NULL DEFAULT ' ',
|
||||
c varchar(4) binary NOT NULL DEFAULT '0000',
|
||||
d tinyblob NULL,
|
||||
e tinyblob NULL,
|
||||
f tinyblob NULL,
|
||||
g tinyblob NULL,
|
||||
h tinyblob NULL,
|
||||
i tinyblob NULL,
|
||||
j tinyblob NULL,
|
||||
k tinyblob NULL,
|
||||
l tinyblob NULL,
|
||||
m tinyblob NULL,
|
||||
n tinyblob NULL,
|
||||
o tinyblob NULL,
|
||||
p tinyblob NULL,
|
||||
q varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
r varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
s tinyblob NULL,
|
||||
t varchar(4) binary NOT NULL DEFAULT ' ',
|
||||
u varchar(1) binary NOT NULL DEFAULT ' ',
|
||||
v varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
w varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
x tinyblob NULL,
|
||||
y varchar(5) binary NOT NULL DEFAULT ' ',
|
||||
z varchar(20) binary NOT NULL DEFAULT ' ',
|
||||
a1 varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
b1 tinyblob NULL)
|
||||
ENGINE=InnoDB DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`b` varchar(1) collate latin1_bin NOT NULL default ' ',
|
||||
`c` varchar(4) collate latin1_bin NOT NULL default '0000',
|
||||
`d` tinyblob,
|
||||
`e` tinyblob,
|
||||
`f` tinyblob,
|
||||
`g` tinyblob,
|
||||
`h` tinyblob,
|
||||
`i` tinyblob,
|
||||
`j` tinyblob,
|
||||
`k` tinyblob,
|
||||
`l` tinyblob,
|
||||
`m` tinyblob,
|
||||
`n` tinyblob,
|
||||
`o` tinyblob,
|
||||
`p` tinyblob,
|
||||
`q` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`r` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`s` tinyblob,
|
||||
`t` varchar(4) collate latin1_bin NOT NULL default ' ',
|
||||
`u` varchar(1) collate latin1_bin NOT NULL default ' ',
|
||||
`v` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`w` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`x` tinyblob,
|
||||
`y` varchar(5) collate latin1_bin NOT NULL default ' ',
|
||||
`z` varchar(20) collate latin1_bin NOT NULL default ' ',
|
||||
`a1` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`b1` tinyblob
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin
|
||||
INSERT into t1 (b) values ('1');
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT * from t1;
|
||||
a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1
|
||||
1 0000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
CREATE TABLE t2 (a varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
b varchar(1) binary NOT NULL DEFAULT ' ',
|
||||
c varchar(4) binary NOT NULL DEFAULT '0000',
|
||||
d tinyblob NULL,
|
||||
e tinyblob NULL,
|
||||
f tinyblob NULL,
|
||||
g tinyblob NULL,
|
||||
h tinyblob NULL,
|
||||
i tinyblob NULL,
|
||||
j tinyblob NULL,
|
||||
k tinyblob NULL,
|
||||
l tinyblob NULL,
|
||||
m tinyblob NULL,
|
||||
n tinyblob NULL,
|
||||
o tinyblob NULL,
|
||||
p tinyblob NULL,
|
||||
q varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
r varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
s tinyblob NULL,
|
||||
t varchar(4) binary NOT NULL DEFAULT ' ',
|
||||
u varchar(1) binary NOT NULL DEFAULT ' ',
|
||||
v varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
w varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
x tinyblob NULL,
|
||||
y varchar(5) binary NOT NULL DEFAULT ' ',
|
||||
z varchar(20) binary NOT NULL DEFAULT ' ',
|
||||
a1 varchar(30) binary NOT NULL DEFAULT ' ',
|
||||
b1 tinyblob NULL)
|
||||
ENGINE=MyISAM DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`a` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`b` varchar(1) collate latin1_bin NOT NULL default ' ',
|
||||
`c` varchar(4) collate latin1_bin NOT NULL default '0000',
|
||||
`d` tinyblob,
|
||||
`e` tinyblob,
|
||||
`f` tinyblob,
|
||||
`g` tinyblob,
|
||||
`h` tinyblob,
|
||||
`i` tinyblob,
|
||||
`j` tinyblob,
|
||||
`k` tinyblob,
|
||||
`l` tinyblob,
|
||||
`m` tinyblob,
|
||||
`n` tinyblob,
|
||||
`o` tinyblob,
|
||||
`p` tinyblob,
|
||||
`q` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`r` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`s` tinyblob,
|
||||
`t` varchar(4) collate latin1_bin NOT NULL default ' ',
|
||||
`u` varchar(1) collate latin1_bin NOT NULL default ' ',
|
||||
`v` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`w` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`x` tinyblob,
|
||||
`y` varchar(5) collate latin1_bin NOT NULL default ' ',
|
||||
`z` varchar(20) collate latin1_bin NOT NULL default ' ',
|
||||
`a1` varchar(30) collate latin1_bin NOT NULL default ' ',
|
||||
`b1` tinyblob
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
|
||||
INSERT into t2 (b) values ('1');
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SELECT * from t2;
|
||||
a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1
|
||||
1 0000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
drop table t1;
|
||||
drop table t2;
|
|
@ -60,3 +60,9 @@ count(distinct a)
|
|||
1
|
||||
1
|
||||
drop table t1;
|
||||
create table t1 (f1 int, f2 int);
|
||||
insert into t1 values (0,1),(1,2);
|
||||
select count(distinct if(f1,3,f2)) from t1;
|
||||
count(distinct if(f1,3,f2))
|
||||
2
|
||||
drop table t1;
|
||||
|
|