mysql c api --> bad handshake wenn passwort gesetzt



  • Hi,

    wenn ich in meinem c programm ein passwort für die datenbank setze bekomme ich den fehler "bad handshake", ohne funktionierts.

    ich nehme an es liegt daran das ich mit der mysql 5.1 library kompiliere und der mysql server bei dem das programm läuft aber nur version 4.1.1alpha ist??

    verstehe dann aber trotzdem nicht wieso er mir ohne passwort eine verbindung aufbaut...

    anbei ein ausschnitt des codes...

    ich hätte auch versucht das ganze mit der 4.1.1alpha zu kompilieren.. jedoch habe ich die include dateien nicht mit dabei.. (woher bekomme ich also noch die komplette 4.1.1 alpha version? problem: ich kann den mysql server nicht updaten da sonst unser hauptskript nicht mehr läuft....)

    oder leigt das problem ganz woanders? wie gesagt ohne passwort -> kein problem..

    if(!mysql_real_connect (
                    conn,           // pointer to connection handler
                    host,    // host to connect to
                    username,    // user name
                    password,     // password
                    database,         // database to use
                    0,              // port (default 3306)
                    NULL,           // socket or /var/lib/mysql.sock
                    0               // flags (none)
                    )) {
    


  • ok.. es liegt nicht an den unterschiedlichen versionen...
    hab gerade das ganze nochmal mit der 4.1.1alpha api kompiliert... keine besserung

    EDIT: lokal auf meinem server funktioniert es....

    welche einstellungen sollte ich denn prüfen? wodurch kommt ein handshake zustande? google war nicht wirklich hilfreich ://



  • local funktoniert es?

    idee:
    loggst du dich als root ein? root darf nur lokal, lege einen user an.



  • taurus schrieb:

    problem: ich kann den mysql server nicht updaten da sonst unser hauptskript nicht mehr läuft....)

    Ihr nehmt ne Alpha als Workbase 😕 aua...

    Vielleicht liegt es auch an der Passwort-Verschlüsselung, oder daran dass das Passwort an falscher Stelle eingetragen wurde?!

    LG



  • mhh ich weiß alpha.. 😉 muss mal ausprobieren ich ich da nicht ne finale draufmachen kann.. ne 4.1 müsste eigentlich laufen.. nur ne 5er läuft glaub nicht...

    passwort verschlüsselung? d.h. der unterschied ob ich das passwort als set password = old_password('dingsda') (4.1) oder als password('dingsda') setzte ??
    das hatte ich schon ausprobiert...

    das password ist definitv an der richtigen stelle eingetragen...
    es muss irgendwo einen unterschied geben was die mysql installation angeht.. lokal bei mir funktionierts nämlich...

    ich werde jetzt erstmal zum großhandel gehn und später die mysql isntallation neu aufsetzten 🙂

    EDIT:

    local funktoniert es?

    idee:
    loggst du dich als root ein? root darf nur lokal, lege einen user an.

    mit lokal meine ich auf meinem testserver.. mysql läuft auf dem hauptserver auch lokal... und selbst wenn ich den nutzer nehen den wir normalerweise ntuezn (also nicht root) klappt das nicht und es gibt ein bad handshake...

    ich seh grad.. die mysqld-nt aus 4.1.1a entspricht nicht der die auf dem hauptserver liegt.. seltsamerweise heißt der ordner aber 4.1.1 ... wie kann ich am einfachsten die version erhausfinden die aktuelll als dienst läuft??



  • mhh das ist mal richtig seltsam...

    ich hab jetzt beide server auf mysql 5.1.46 upgedatet.. auch das programm hab ich mit dieser version kompiliert.

    auf dem testserver ist alles i.O.
    auf dem hauptserver nicht 😉 die php scripte funktionieren zwar alle(muss ich noch genauer prüfen wegen update von 4.1 auf 5.1) auch mit nem gesetzten passwort...

    das script allerdings gibt jetzt zwar kein bad handshake mehr aus sondern
    nur diese zeile:

    Access denied for user ''@'localhost' to database '@root'

    seltsam ist... ein user ist angegeben aber hier ist keiner angegeben...
    und als database wird nicht die genutzt die im script angegeben habe sondern der benutzername mit einem @ davor.. ???

    wie gesagt selbe version auf dem testerver und hier ist alles einwandfrei.

    was ist den das?
    my.ini ist auf beiden servern gleich...



  • Hallo,

    wie schaut denn der Code im Script aus?

    VlG



  • *nochmal rauskram*

    auch mit ner neuen mysql version, keine chance

    der code sieht wie folgt aus:

    die funktions deklarationen am anfang hab ich rausgelassen...
    nach dem unten stehendem code kommt das mysql query und alles andere.. aber das dürfte ja nicht relevant sein

    hab ja auch direkt mal die zugangsdaten in die mysql funktion eingetragen..

    #include <windows.h>
    #include <vector>
    #include <mysql.h>
    
    #include <iostream>
    #include <sstream>
    #include <fstream>
    
    #include <cstdio>
    #include <ctime>
    #include <cmath>
    #include "timesupport.h"
    #include <stdexcept>
    
    #include <Psapi.h>
    
    int main() {
    
    //*********
    //SET ALLOWED WORDS FOR LOGTIME FROM SERVER
    //********
    
        std::vector<std::string> allowed_words;
        allowed_words.push_back("no Tel charges");
        allowed_words.push_back("no HSIA charges");
        allowed_words.push_back("no glog database available");
        allowed_words.push_back("no chlog tel database available");
        allowed_words.push_back("no chlog hsia database available");
    
    //********
    //READ INI DATA
    //********
    
        char filename[500];
        char webpath[500];
        char host[500];
        char username[500];
        char password[500];
        char database[500];
    ........
    
        char tmp[500];
        char inipathtmp[_MAX_PATH];
        DWORD destSize;
        destSize = 500;
    
        //GET INI PATH
        GetModuleFileNameA(NULL, inipathtmp, _MAX_PATH);
    
        std::string inipath(inipathtmp);
        size_t szPos = inipath.rfind("\\");
    
        if(std::string::npos != szPos) {
            inipath = inipath.substr(0, szPos);
            inipath += "\\statwriter.ini";
        }
    
        //GENERAL
        GetPrivateProfileStringA("general", "sleeptime" ,"NULL", sleeptime_ms, destSize, inipath.c_str());
        GetPrivateProfileStringA("general", "send_intervall" ,"NULL", intervall_from_ini_tmp, destSize, inipath.c_str());
        GetPrivateProfileStringA("general", "glog_exception" ,"NULL", glog_exception_tmp, destSize, inipath.c_str());
        GetPrivateProfileStringA("general", "chlog_hsia_exception" ,"NULL", chlog_hsia_exception_tmp, destSize, inipath.c_str());
        GetPrivateProfileStringA("file_def", "filename" ,"NULL", filename, destSize, inipath.c_str());
        GetPrivateProfileStringA("file_def", "webpath" ,"NULL", webpath, destSize, inipath.c_str());
    
        //MYSQL SETTINGS
        GetPrivateProfileStringA("mysql", "host" ,"NULL", host, destSize, inipath.c_str());
        GetPrivateProfileStringA("mysql", "username" ,"NULL", username, destSize, inipath.c_str());
        GetPrivateProfileStringA("mysql", "password" ,"NULL", password, destSize, inipath.c_str());
        GetPrivateProfileStringA("mysql", "database" ,"NULL", database, destSize, inipath.c_str());
    
       .................
    
        //intervall conversion ( char to string )
        std::string intervall_from_ini;
        std::stringstream ivtmp;
        ivtmp << intervall_from_ini_tmp;
        ivtmp >> intervall_from_ini;
    
        std::string glog_exception;
        std::stringstream getmp;
        getmp << glog_exception_tmp;
        getmp >> glog_exception;
    
        std::string chlog_hsia_exception;
        std::stringstream chtmp;
        chtmp << chlog_hsia_exception_tmp;
        chtmp >> chlog_hsia_exception;
    
    //**********************
    // GET SERVERS & CONFIG
    //**********************
    
        MYSQL *conn, mysql;
        MYSQL_RES *mysql_result;
        MYSQL_ROW  row;
    
        int server_query_result;
        std::string server_query;
    
        //INITIALIZE
        conn = mysql_init(&mysql);
    
        //CONNECT
        if(!mysql_real_connect (
                    conn,           // pointer to connection handler
                    host,    // host to connect to
                    username,    // user name
                    password,     // password
                    database,         // database to use
                    0,              // port (default 3306)
                    NULL,           // socket or /var/lib/mysql.sock
                    0               // flags (none)
                    )) {
    
            std::cout << " GET SEVERS & CONFIG: " << mysql_error(&mysql) << std::endl;
            logfile << time_now() << " [Initalization] Error: Couldn't establish MySql Connection (" << mysql_error(&mysql) << ") [" << __LINE__ << "]" << std::endl;
            return 1;
        } else {
            //std::cout << "\nGET SERVERS & CONFIG: MySQL-Verbindung hergestellt!\n";
        }
    

Anmelden zum Antworten