Jelajahi Sumber

automatische speicherabbild erstellung bei server crashes

Kolja Strohm 6 tahun lalu
induk
melakukan
929195d019

+ 7 - 107
RegisterServer/Datenbank.cpp

@@ -88,7 +88,7 @@ bool RSDatenbank::adminHatRecht( int id, int recht )
 
 bool RSDatenbank::proveKlient( int num, int sNum )
 {
-    Text *befehl = new Text( "SELECT * FROM server_client WHERE server_register_id = " );
+    Text *befehl = new Text( "SELECT * FROM server_client WHERE server_id = " );
     befehl->append( sNum );
     befehl->append( " AND client_id = " );
     befehl->append( num );
@@ -282,38 +282,19 @@ bool RSDatenbank::neuAccount( const char *name, const char *pass, const char *ge
     if( datenbank->befehl( befehl->getText() ) )
     {
         unlock();
-        befehl->setText( "SELECT schluessel FROM account_neu WHERE name = '" );
+        befehl->setText( "SELECT schluessel, id FROM account_neu WHERE name = '" );
         befehl->append( (char*)n );
         befehl->append( "'" );
         lock();
         datenbank->befehl( befehl->getText() );
         Result res = datenbank->getResult();
         unlock();
-        Datei md;
         if( res.zeilenAnzahl )
         {
-            md.setDatei( res.values[ 0 ].getText() );
-            if( md.open( Datei::Style::schreiben ) )
-            {
-                md.schreibe( (char*)eMail, textLength( eMail ) );
-                md.schreibe( ( char* )"\nAccount freischalten\n", 22 );
-                md.schreibe( ( char* )"Dein Account Daten:\n", 20 );
-                md.schreibe( ( char* )"name: ", 6 );
-                md.schreibe( (char*)name, textLength( name ) );
-                md.schreibe( ( char* )"\npasswort: ", 11 );
-                md.schreibe( (char*)pass, textLength( pass ) );
-                md.schreibe( ( char* )"\ngeheimnis: ", 12 );
-                md.schreibe( (char*)geheim, textLength( geheim ) );
-                md.schreibe( ( char* )"\ngeburtsdatum: ", 15 );
-                md.schreibe( (char*)gebDatum, textLength( gebDatum ) );
-                md.schreibe( ( char* )"\naktivierungs key: ", 25 );
-                md.schreibe( res.values[ 0 ].getText(), res.values[ 0 ].getLength() );
-                md.close();
-                // e_mail senden
-                pid_t pid;
-                char *pargs[] = { zIni->zWert( "Java" )->getText(), zIni->zWert( "Mailer" )->getText(), res.values[ 0 ].getText(), (char*)0 };
-                posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 );
-            }
+            // e_mail senden
+            pid_t pid;
+            char *pargs[] = { zIni->zWert( "PHP" )->getText(), zIni->zWert( "AccountActivationMail" )->getText(), (char*)name, (char*)geheim, (char*)gebDatum, res.values[ 0 ].getText(), (char*)eMail, res.values[ 1 ].getText(), (char*)0 };
+            posix_spawn( &pid, zIni->zWert( "PHP" )->getText(), 0, 0, pargs, 0 );
         }
         res.destroy();
         befehl->release();
@@ -324,48 +305,6 @@ bool RSDatenbank::neuAccount( const char *name, const char *pass, const char *ge
     return 0;
 }
 
-void RSDatenbank::neuAccountAbbruch( const char *name )
-{
-    Text *befehl = new Text( "DELETE FROM account_neu WHERE name = '" );
-    Text n( name );
-    n.ersetzen( "'", "''" );
-    befehl->append( (char*)n );
-    befehl->append( "'" );
-    lock();
-    datenbank->befehl( befehl->getText() );
-    unlock();
-    befehl->release();
-}
-
-bool RSDatenbank::aktiviereAccount( const char *name, const char *key )
-{
-    Text *befehl = new Text( "SELECT account_aktivieren( '" );
-    Text n( name );
-    n.ersetzen( "'", "''" );
-    befehl->append( (char*)n );
-    befehl->append( "', '" );
-    Text s( key );
-    s.ersetzen( "'", "''" );
-    befehl->append( (char*)s );
-    befehl->append( "' )" );
-    lock();
-    if( datenbank->befehl( befehl->getText() ) )
-    {
-        befehl->release();
-        Result res = datenbank->getResult();
-        unlock();
-        if( res.values[ 0 ].istGleich( "f" ) )
-        {
-            res.destroy();
-            return 0;
-        }
-        return 1;
-    }
-    unlock();
-    befehl->release();
-    return 0;
-}
-
 int RSDatenbank::removeAccount( const char *name, const char *pass, const char *geheim, InitDatei *zIni )
 {
     Text *befehl = new Text( "SELECT account_loeschen( '" );
@@ -667,7 +606,7 @@ bool RSDatenbank::passwortVergessen( const char *name, const char *geheim, InitD
     befehl->append( "' RETURNING e_mail" );
     lock();
     datenbank->befehl( befehl->getText() );
-    Result res = datenbank->getResult();
+    res = datenbank->getResult();
     unlock();
     befehl->release();
     if( res.zeilenAnzahl != 1 )
@@ -795,45 +734,6 @@ char RSDatenbank::suchConfirmation( const char *name, const char *pass )
     return ret;
 }
 
-void RSDatenbank::sendeErstellEMail( const char *name, InitDatei *zIni )
-{
-    Text *befehl = new Text( "SELECT geheimnis, e_mail, geb_datum, schluessel FROM account_neu WHERE name = '" );
-    Text n( name );
-    n.ersetzen( "'", "''" );
-    befehl->append( (char*)n );
-    befehl->append( "'" );
-    lock();
-    datenbank->befehl( befehl->getText() );
-    Result res = datenbank->getResult();
-    unlock();
-    befehl->release();
-    Datei md;
-    if( res.zeilenAnzahl )
-    {
-        md.setDatei( res.values[ 3 ].getText() );
-        if( md.open( Datei::Style::schreiben ) )
-        {
-            Text txt = res.values[ 1 ].getText();
-            txt += "\nAccount freischalten\nDeine Account Daten:\n";
-            txt += "\r\nname: ";
-            txt += name;
-            txt += "\r\ngeheimnis: ";
-            txt += res.values[ 0 ].getText();
-            txt += "\r\ngeburtsdatum: ";
-            txt += res.values[ 2 ].getText();
-            txt += "\r\naktivierungs key: ";
-            txt += res.values[ 3 ].getText();
-            md.schreibe( txt, txt.getLength() );
-            md.close();
-            // e_mail senden
-            pid_t pid;
-            char *pargs[] = { zIni->zWert( "Java" )->getText(), zIni->zWert( "Mailer" )->getText(), res.values[ 4 ].getText(), (char*)0 };
-            posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 );
-        }
-    }
-    res.destroy();
-}
-
 void RSDatenbank::sendeRemoveEMail( const char *name, InitDatei *zIni )
 {
     Text *befehl = new Text( "SELECT account_loeschen.schluessel, account.e_mail FROM account, account_loeschen WHERE account.id = account_loeschen.account_id AND account.name = '" );

+ 0 - 3
RegisterServer/Datenbank.h

@@ -41,8 +41,6 @@ public:
 	bool serverIstNichtPausiert( int id );
 	int proveNeuAccount( const char *name, const char *eMail );
 	bool neuAccount( const char *name, const char *pass, const char *geheim, const char *eMail, const char *gebDatum, InitDatei *zIni );
-	void neuAccountAbbruch( const char *name );
-	bool aktiviereAccount( const char *name, const char *key );
 	int removeAccount( const char *name, const char *pass, const char *geheim, InitDatei *zIni );
 	void removeAccountAbbruch( const char *name );
 	bool removeConfirmation( const char *name, const char *key );
@@ -54,7 +52,6 @@ public:
 	bool geheimnisVergessen( const char *name, const char *pass, InitDatei *zIni );
 	Text *eMailVergessen( const char *name, const char *pass, const char *geheim );
 	char suchConfirmation( const char *name, const char *pass );
-	void sendeErstellEMail( const char *name, InitDatei *zIni );
 	void sendeRemoveEMail( const char *name, InitDatei *zIni );
 	// constant
 	Text *getLetzterFehler() const;

+ 0 - 107
RegisterServer/RegisterServer.cpp

@@ -743,33 +743,7 @@ void RSKlient::thread()
 							err->release();
 						}
 						else
-						{
 							klient->sendeEncrypted( "\1", 1 );
-							while( 1 )
-							{
-								char len = 0;
-								klient->getNachrichtEncrypted( &len, 1 );
-								if( !len ) // abbruch
-								{
-									rs->zDB()->neuAccountAbbruch( acc_name );
-									break;
-								}
-								if( len == -1 )
-									break;
-								char *key = new char[ len + 1 ];
-								key[ (int)len ] = 0;
-								klient->getNachrichtEncrypted( key, len );
-								if( rs->zDB()->aktiviereAccount( acc_name, key ) )
-								{
-									klient->sendeEncrypted( "\1", 1 );
-									delete[]key;
-									break;
-								}
-								else
-									klient->sendeEncrypted( "\0", 1 );
-								delete[]key;
-							}
-						}
 						gebDatum->release();
 					}
 					else
@@ -1072,87 +1046,6 @@ void RSKlient::thread()
 					delete[]accGeheimnis;
 				}
 				break;
-			case 0xE: // Account bestätigen
-				if( 1 )
-				{
-					if( !klientNummer )
-					{
-						errorZuKlient( "Du bist nicht Identifiziert." );
-						break;
-					}
-					klient->sendeEncrypted( "\1", 1 );
-					unsigned char len[ 2 ];
-					klient->getNachrichtEncrypted( (char*)len, 2 );
-					char *accName = new char[ len[ 0 ] + 1 ];
-					accName[ len[ 0 ] ] = 0;
-					klient->getNachrichtEncrypted( accName, len[ 0 ] );
-					char *accPasswort = new char[ len[ 1 ] + 1 ];
-					accPasswort[ len[ 1 ] ] = 0;
-					klient->getNachrichtEncrypted( accPasswort, len[ 1 ] );
-					char byte = rs->zDB()->suchConfirmation( accName, accPasswort );
-					if( !byte )
-						errorZuKlient( "Bei diesem Account ist keine Bestätigung notwendig." );
-					else if( byte == -1 )
-						errorZuKlient( "Falsche Kombination von Name und Passwort." );
-					else if( byte > 0 )
-					{
-						klient->sendeEncrypted( &byte, 1 );
-						char befehl = 0;
-						while( 1 )
-						{
-							klient->getNachrichtEncrypted( &befehl, 1 );
-							if( !befehl )
-							{
-								if( byte == 1 )
-									rs->zDB()->neuAccountAbbruch( accName );
-								if( byte == 2 )
-									rs->zDB()->removeAccountAbbruch( accName );
-								break;
-							}
-							if( befehl == -1 )
-								break;
-							if( befehl == -2 )
-							{
-								if( byte == 1 )
-									rs->zDB()->sendeErstellEMail( accName, rs->zIni() );
-								if( byte == 2 )
-									rs->zDB()->sendeRemoveEMail( accName, rs->zIni() );
-							}
-							if( befehl > 0 )
-							{
-								char *key = new char[ befehl + 1 ];
-								key[ (int)befehl ] = 0;
-								klient->getNachrichtEncrypted( key, befehl );
-								if( byte == 1 )
-								{
-									if( !rs->zDB()->aktiviereAccount( accName, key ) )
-										klient->sendeEncrypted( "\0", 1 );
-									else
-									{
-										klient->sendeEncrypted( "\1", 1 );
-										delete[]key;
-										break;
-									}
-								}
-								if( byte == 2 )
-								{
-									if( !rs->zDB()->removeConfirmation( accName, key ) )
-										klient->sendeEncrypted( "\0", 1 );
-									else
-									{
-										klient->sendeEncrypted( "\1", 1 );
-										delete[]key;
-										break;
-									}
-								}
-								delete[]key;
-							}
-						}
-					}
-					delete[]accName;
-					delete[]accPasswort;
-				}
-				break;
 			case 0xF: // ping
 				if( 1 )
 				{

+ 10 - 6
RegisterServer/RegisterServer.vcxproj

@@ -36,13 +36,17 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <TargetExt />
-    <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/Debug</RemoteProjectDir>
-    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/Debug;..\..\..\..\Allgemein\Network\Network;../../../Network/Debug;..\..\..\..\Allgemein\sql\sql;../../../sql/Debug;$(IncludePath)</IncludePath>
+    <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/debug</RemoteProjectDir>
+    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/debug;..\..\..\..\Allgemein\Network\Network;../../../Network/debug;..\..\..\..\Allgemein\sql\sql;../../../sql/debug;$(IncludePath)</IncludePath>
+    <OutDir>$(ProjectDir)bin\$(Platform)\debug\</OutDir>
+    <IntDir>$(ProjectDir)obj\$(Platform)\debug\</IntDir>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <TargetExt />
-    <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/Release</RemoteProjectDir>
-    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/Release;..\..\..\..\Allgemein\Network\Network;../../../Network/Release;..\..\..\..\Allgemein\sql\sql;../../../sql/Release;$(IncludePath)</IncludePath>
+    <RemoteProjectDir>$(RemoteRootDir)/Server/$(ProjectName)/release</RemoteProjectDir>
+    <IncludePath>..\..\..\..\Allgemein\Framework;../../../Framework/release;..\..\..\..\Allgemein\Network\Network;../../../Network/release;..\..\..\..\Allgemein\sql\sql;../../../sql/release;$(IncludePath)</IncludePath>
+    <OutDir>$(ProjectDir)bin\$(Platform)\release\</OutDir>
+    <IntDir>$(ProjectDir)obj\$(Platform)\release\</IntDir>
   </PropertyGroup>
   <ItemGroup>
     <ClCompile Include="Datenbank.cpp" />
@@ -55,14 +59,14 @@
   </ItemGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <Link>
-      <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/Debug/bin/x64/debug;$(RemoteRootDir)/Network/Debug/bin/x64/debug;$(RemoteRootDir)/Framework/Debug/bin/x64/debug;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/debug/bin/x64/debug;$(RemoteRootDir)/Network/debug/bin/x64/debug;$(RemoteRootDir)/Framework/debug/bin/x64/debug;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LibraryDependencies>dbgFramework;dbgNetwork;dbgSQL;pq;pthread</LibraryDependencies>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <Link>
-      <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/Release/bin/x64/release;$(RemoteRootDir)/Network/Release/bin/x64/release;$(RemoteRootDir)/Framework/Release/bin/x64/release;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>$(RemoteRootDir)/sql/release/bin/x64/release;$(RemoteRootDir)/Network/release/bin/x64/release;$(RemoteRootDir)/Framework/release/bin/x64/release;/usr/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <LibraryDependencies>Framework;Network;SQL;pq;pthread</LibraryDependencies>
       <AdditionalOptions>-Wl,-rpath,../lib %(AdditionalOptions)</AdditionalOptions>
     </Link>

+ 6 - 1
RegisterServer/main.cpp

@@ -3,9 +3,14 @@
 #include <iostream>
 #include <fstream>
 #include <Globals.h>
+#include <sys/resource.h>
 
 int main()
 {
+	struct rlimit core_limits;
+	core_limits.rlim_cur = core_limits.rlim_max = RLIM_INFINITY;
+	setrlimit(RLIMIT_CORE, &core_limits);
+
     Framework::initFramework();
 	Zeit *z = getZeit();
 	Text *pfad = new Text( "../log/register/" );
@@ -27,7 +32,7 @@ int main()
 		dat->release();
 		exit( 1 );
 	}
-    const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "Aktiv", "Java", "Mailer" };
+    const char *wichtig[] = { "ServerId", "DBBenutzer", "DBPasswort", "DBName", "DBIP", "DBPort", "Aktiv", "Java", "Mailer", "PHP", "AccountActivationMail" };
     for( const char *w : wichtig )
     {
         if( !dat->wertExistiert( w ) )