#include "Datenbank.h" #include #include #include // Inhalt der RSDatenbank Klasse aus Datenbank.h // Konstruktor RSDatenbank::RSDatenbank( InitDatei *zIni ) { datenbank = new Datenbank( zIni->zWert( "DBBenutzer" )->getText(), zIni->zWert( "DBPasswort" )->getText(), zIni->zWert( "DBName" )->getText(), zIni->zWert( "DBIP" )->getText(), (unsigned short)TextZuInt( zIni->zWert( "DBPort" )->getText(), 10 ) ); if( !datenbank->istOk() ) { std::cout << "AS: Die Verbindung zur Datenbank konnte nicht hergestellt werden.\nDas Programm wird beendet."; exit( 1 ); } InitializeCriticalSection( &cs ); ref = 1; Text befehl = "SELECT port, admin_port FROM server WHERE id = "; befehl += zIni->zWert( "ServerId" )->getText(); lock(); datenbank->befehl( befehl ); Result res = datenbank->getResult(); unlock(); if( res.zeilenAnzahl == 1 ) { zIni->addWert( "ServerPort", res.values[ 0 ] ); zIni->addWert( "AdminServerPort", res.values[ 1 ] ); } res.destroy(); } // Destruktor RSDatenbank::~RSDatenbank() { datenbank->release(); DeleteCriticalSection( &cs ); } // nicht constant void RSDatenbank::lock() { EnterCriticalSection( &cs ); } void RSDatenbank::unlock() { LeaveCriticalSection( &cs ); } int RSDatenbank::istAdministrator( const char *name, const char *passwort ) { Text *befehl = new Text( "SELECT id FROM benutzer WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "' AND passwort = md5( '" ); Text p( passwort ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); int ret = 0; if( res.zeilenAnzahl > 0 ) ret = TextZuInt( res.values[ 0 ].getText(), 10 ); res.destroy(); return ret; } bool RSDatenbank::adminHatRecht( int id, int recht ) { Text *befehl = new Text( "SELECT * FROM benutzer_rechte WHERE benutzer_id = " ); befehl->append( id ); befehl->append( " AND rechte_id = " ); befehl->append( recht ); lock(); datenbank->befehl( befehl->getText() ); int ret = datenbank->getZeilenAnzahl(); unlock(); befehl->release(); return ret != 0; } bool RSDatenbank::proveKlient( int num, int sNum ) { Text *befehl = new Text( "SELECT * FROM server_client WHERE server_register_id = " ); befehl->append( sNum ); befehl->append( " AND client_id = " ); befehl->append( num ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); bool ret = 0; if( res.zeilenAnzahl == 1 ) ret = 1; res.destroy(); return ret; } Text *RSDatenbank::getKlientKey( int cId ) { lock(); if( !datenbank->befehl( Text( "SELECT schluessel FROM client WHERE id = " ) += cId ) ) { unlock(); return 0; } Result res = datenbank->getResult(); unlock(); if( !res.zeilenAnzahl ) { res.destroy(); return 0; } Text *ret = new Text( res.values[ 0 ].getText() ); res.destroy(); return ret; } void RSDatenbank::unregisterKlient( int num, int sNum ) { Text *befehl = new Text( "DELETE FROM server_client WHERE client_id = " ); befehl->append( num ); befehl->append( " AND server_id = " ); befehl->append( sNum ); lock(); datenbank->befehl( befehl->getText() ); int za = datenbank->getZeilenAnzahl(); unlock(); if( za == 1 ) { befehl->setText( "UPDATE server SET tasks = tasks - 1 WHERE id = " ); befehl->append( sNum ); lock(); datenbank->befehl( befehl->getText() ); unlock(); } befehl->release(); } bool RSDatenbank::setServerStatus( int id, int status ) { Text *befehl = new Text( "UPDATE server SET server_status_id = " ); *befehl += status; *befehl += "WHERE id = "; *befehl += id; lock(); if( !datenbank->befehl( befehl->getText() ) ) { unlock(); befehl->release(); return 0; } bool ret = datenbank->getZeilenAnzahl() != 0; unlock(); befehl->release(); return ret; } bool RSDatenbank::setMaxClients( int id, int maxC ) { Text *befehl = new Text( "UPDATE server SET max_tasks = " ); befehl->append( maxC ); befehl->append( " WHERE id = " ); befehl->append( id ); lock(); if( !datenbank->befehl( befehl->getText() ) ) { unlock(); befehl->release(); return 0; } bool ret = datenbank->getZeilenAnzahl() > 0; unlock(); befehl->release(); return ret; } bool RSDatenbank::serverIstNichtPausiert( int id ) { Text *befehl = new Text( "SELECT server_status_id FROM server WHERE id = " ); befehl->append( id ); lock(); if( !datenbank->befehl( befehl->getText() ) ) { unlock(); befehl->release(); return 0; } Result res = datenbank->getResult(); unlock(); befehl->release(); if( !res.zeilenAnzahl ) { res.destroy(); return 0; } bool ret = (int)res.values[ 0 ] == 3; res.destroy(); return ret; } int RSDatenbank::proveNeuAccount( const char *name, const char *eMail ) { Text *befehl = new Text( "SELECT account_neu_alt_check( '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "', '" ); Text m( eMail ); m.ersetzen( "'", "''" ); befehl->append( (char*)m ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); if( res.values[ 0 ].istGleich( "t" ) ) { befehl->release(); res.destroy(); return 0; } else { res.destroy(); befehl->setText( "SELECT account.id FROM account, account_neu WHERE account.name = '" ); befehl->append( (char*)n ); befehl->append( "' OR account_neu.name = '" ); befehl->append( (char*)n ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); res = datenbank->getResult(); unlock(); if( res.zeilenAnzahl > 0 ) { befehl->release(); res.destroy(); return 1; } else { res.destroy(); befehl->release(); return 2; } } } bool RSDatenbank::neuAccount( const char *name, const char *pass, const char *geheim, const char *eMail, const char *gebDatum, InitDatei *zIni ) { Text *befehl = new Text( "INSERT INTO account_neu( name, passwort, geheimnis, e_mail, geb_datum ) VALUES ( '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "', md5( '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ), '" ); Text g( geheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "', '" ); Text m( eMail ); m.ersetzen( "'", "''" ); befehl->append( (char*)m ); befehl->append( "', '" ); Text d( gebDatum ); d.ersetzen( "'", "''" ); befehl->append( (char*)d ); befehl->append( "' )" ); lock(); if( datenbank->befehl( befehl->getText() ) ) { unlock(); befehl->setText( "SELECT schluessel 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 ); } } res.destroy(); befehl->release(); return 1; } unlock(); befehl->release(); 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( '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "', md5( '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ), '" ); Text g( geheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); int ret = TextZuInt( res.values[ 0 ].getText(), 10 ); res.destroy(); if( !ret ) { befehl->setText( "SELECT account_loeschen.schluessel, account.e_mail FROM account, account_loeschen WHERE account.id = account_loeschen.account_id AND account.name = '" ); befehl->append( (char*)n ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); res = datenbank->getResult(); unlock(); Datei md; if( res.zeilenAnzahl ) { md.setDatei( res.values[ 0 ].getText() ); if( md.open( Datei::Style::schreiben ) ) { Text txt = res.values[ 1 ].getText(); txt += "\nAccount löschen\nSchade, dass du deinen Account löschen möchtest.\nBestätigungscode: "; txt += res.values[ 0 ].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[ 0 ].getText(), (char*)0 }; posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 ); } } res.destroy(); } befehl->release(); return ret; } void RSDatenbank::removeAccountAbbruch( const char *name ) { Text *befehl = new Text( "DELETE FROM account_loeschen WHERE account_id = ( SELECT id FROM account where name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); unlock(); befehl->release(); } bool RSDatenbank::removeConfirmation( const char *name, const char *key ) { Text *befehl = new Text( "SELECT account_loeschen_bestaetigen( '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "', '" ); Text s( key ); s.ersetzen( "'", "''" ); befehl->append( (char*)s ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); if( res.values[ 0 ].istGleich( "t" ) ) { res.destroy(); return 1; } res.destroy(); return 0; } int RSDatenbank::passwortChange( const char *name, const char *pass, const char *nPass, const char *geheim ) { Text * befehl = new Text( "SELECT id, passwort, geheimnis, md5( '" ); Text p( name ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) FROM account WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); if( res.zeilenAnzahl != 1 ) { res.destroy(); befehl->release(); return 1; } if( !res.values[ 1 ].istGleich( res.values[ 3 ] ) ) { res.destroy(); befehl->release(); return 2; } if( !res.values[ 2 ].istGleich( geheim ) ) { res.destroy(); befehl->release(); return 3; } befehl->setText( "UPDATE account SET passwort = md5( '" ); p = Text( nPass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) WHERE id = " ); befehl->append( res.values[ 0 ].getText() ); res.destroy(); lock(); datenbank->befehl( befehl->getText() ); unlock(); befehl->release(); return 0; } int RSDatenbank::eMailChange( const char *name, const char *pass, const char *geheim, const char *eMail ) { Text *befehl = new Text( "SELECT id, passwort, geheimnis, md5( '" ); Text p( name ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) FROM account WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); if( res.zeilenAnzahl != 1 ) { res.destroy(); befehl->release(); return 1; } if( !res.values[ 1 ].istGleich( res.values[ 3 ] ) ) { res.destroy(); befehl->release(); return 2; } if( !res.values[ 2 ].istGleich( geheim ) ) { res.destroy(); befehl->release(); return 3; } befehl->setText( "Update account SET e_mail = '" ); Text m( eMail ); m.ersetzen( "'", "''" ); befehl->append( (char*)m ); befehl->append( "' WHERE id = " ); befehl->append( res.values[ 0 ].getText() ); res.destroy(); int ret = 0; lock(); if( !datenbank->befehl( befehl->getText() ) ) ret = 4; unlock(); befehl->release(); return ret; } int RSDatenbank::geheimnisChange( const char *name, const char *pass, const char *geheim, const char *nGeheim ) { Text * befehl = new Text( "SELECT id, passwort, geheimnis, md5( '" ); Text p( name ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) FROM account WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); if( res.zeilenAnzahl != 1 ) { res.destroy(); befehl->release(); return 1; } if( !res.values[ 1 ].istGleich( res.values[ 3 ] ) ) { res.destroy(); befehl->release(); return 2; } if( !res.values[ 2 ].istGleich( geheim ) ) { res.destroy(); befehl->release(); return 3; } befehl->setText( "UPDATE account SET geheimnis = '" ); Text g( nGeheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "' WHERE id = " ); befehl->append( res.values[ 0 ].getText() ); res.destroy(); lock(); datenbank->befehl( befehl->getText() ); unlock(); befehl->release(); return 0; } bool RSDatenbank::nameVergessen( const char *pass, const char *geheim, InitDatei *zIni ) { Text *befehl = new Text( "SELECT name, e_mail FROM account WHERE passwort = md5( '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) AND geheimnis = '" ); Text g( geheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); if( res.zeilenAnzahl != 1 ) { res.destroy(); return 0; } Datei md; if( res.zeilenAnzahl ) { Text pfad = res.values[ 0 ].getText(); pfad.ersetzen( " ", "_" ); pfad.insert( 0, "mail." ); md.setDatei( pfad ); if( md.open( Datei::Style::schreiben ) ) { Text txt = res.values[ 1 ].getText(); txt += "\nAccount Name\nDein Account Name lautet: "; txt += res.values[ 0 ].getText(); md.schreibe( txt, txt.getLength() ); md.close(); // e_mail senden pid_t pid; char *pargs[] = { zIni->zWert( "Java" )->getText(), zIni->zWert( "Mailer" )->getText(), pfad, (char*)0 }; posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 ); } } res.destroy(); return 1; } bool RSDatenbank::passwortVergessen( const char *name, const char *geheim, InitDatei *zIni ) { Text *befehl = new Text( "SELECT get_next_schluessel()" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->setText( "UPDATE account SET passwort = md5( '" ); Text pass( (char*)res.values[ 0 ] ); res.destroy(); befehl->append( (char*)pass ); befehl->append( "' ) WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "' AND geheimnis = '" ); Text g( geheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "' RETURNING e_mail" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); if( res.zeilenAnzahl != 1 ) { res.destroy(); return 0; } Datei md; if( res.zeilenAnzahl ) { Text pfad = res.values[ 0 ].getText(); pfad.ersetzen( " ", "_" ); pfad.insert( 0, "mail." ); md.setDatei( pfad ); if( md.open( Datei::Style::schreiben ) ) { Text txt = res.values[ 1 ].getText(); txt += "\nAccount Passwort\nDein Account Passwort wurde zurückgesetzt und lautet jetzt: "; txt += pass.getText(); md.schreibe( txt, txt.getLength() ); md.close(); // e_mail senden pid_t pid; char *pargs[] = { zIni->zWert( "Java" )->getText(), zIni->zWert( "Mailer" )->getText(), pfad, (char*)0 }; posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 ); } } res.destroy(); return 1; } bool RSDatenbank::geheimnisVergessen( const char *name, const char *pass, InitDatei *zIni ) { Text *befehl = new Text( "SELECT geheimnis, e_mail FROM account WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "' AND passwort = md5( '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); if( res.zeilenAnzahl != 1 ) { res.destroy(); return 0; } Datei md; if( res.zeilenAnzahl ) { Text pfad = res.values[ 0 ].getText(); pfad.ersetzen( " ", "_" ); pfad.insert( 0, "mail." ); md.setDatei( pfad ); if( md.open( Datei::Style::schreiben ) ) { Text txt = res.values[ 1 ].getText(); txt += "\nAccount Geheimnis\nDein Account Geheimnis lautet: "; txt += res.values[ 0 ].getText(); md.schreibe( txt, txt.getLength() ); md.close(); // e_mail senden pid_t pid; char *pargs[] = { zIni->zWert( "Java" )->getText(), zIni->zWert( "Mailer" )->getText(), pfad, (char*)0 }; posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 ); } } res.destroy(); return 1; } Text *RSDatenbank::eMailVergessen( const char *name, const char *pass, const char *geheim ) { Text *befehl = new Text( "SELECT e_mail FROM account WHERE name = '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "' AND passwort = md5( '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' ) AND geheimnis = '" ); Text g( geheim ); g.ersetzen( "'", "''" ); befehl->append( (char*)g ); befehl->append( "'" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); if( res.zeilenAnzahl != 1 ) { res.destroy(); return 0; } Text *ret = new Text( res.values[ 0 ].getText() ); res.destroy(); return ret; } char RSDatenbank::suchConfirmation( const char *name, const char *pass ) { Text *befehl = new Text( "select such_account_bestaetigung( '" ); Text n( name ); n.ersetzen( "'", "''" ); befehl->append( (char*)n ); befehl->append( "', '" ); Text p( pass ); p.ersetzen( "'", "''" ); befehl->append( (char*)p ); befehl->append( "' )" ); lock(); datenbank->befehl( befehl->getText() ); Result res = datenbank->getResult(); unlock(); befehl->release(); char ret = (char)TextZuInt( res.values[ 0 ].getText(), 10 ); res.destroy(); 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 = '" ); 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[ 0 ].getText() ); if( md.open( Datei::Style::schreiben ) ) { Text txt = res.values[ 1 ].getText(); txt += "\nAccount löschen\nSchade, dass du deinen Account löschen möchtest.\nBestätigungscode: "; txt += res.values[ 0 ].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[ 0 ].getText(), (char*)0 }; posix_spawn( &pid, zIni->zWert( "Java" )->getText(), 0, 0, pargs, 0 ); } } res.destroy(); } // constant Text *RSDatenbank::getLetzterFehler() const { return datenbank->getLetzterFehler(); } // Reference Counting RSDatenbank *RSDatenbank::getThis() { ref++; return this; } RSDatenbank *RSDatenbank::release() { ref--; if( !ref ) delete this; return 0; }