Teraz tak testowałem i wyszło na to ze jak kilka razy wysyłam jedne i te same dane to są różnie interpretowane... Raz dobrze raz źle... Jak sie tam programowi chce ;/ Normalnie brak mi już sił ;/
Oto jest kod który analizuje odebrane dane, bo może jednak faktycznie coś tu jest źle:
bool LoginUser(int loger_socket, char * recived_login, struct connected_sock * user_list, int user_nr)
{
regex_t preg;
if(!regcomp(&preg, "^LOGIN( )+`username`='.*'( )+`password`='.*'( )*;$", REG_UTF8))
{
// Poprawność zapytania
if(!regexec(&preg, recived_login, 0, NULL, 0))
{
regex_t username;
regex_t password;
regmatch_t username_match;
regmatch_t password_match;
if(!regcomp(&username, "`username`='.*?'", 0) && !regcomp(&password, "`password`='.*?'", 0))
{
if(!regexec(&username, recived_login, 1, &username_match, 0) && !regexec(&password, recived_login, 1, &password_match, 0))
{
char * login = NULL;
login = (char *) realloc(login, username_match.rm_eo-username_match.rm_so-12);
memcpy(login, recived_login+username_match.rm_so+12, username_match.rm_eo-username_match.rm_so-13);
login[username_match.rm_eo-username_match.rm_so-13] = '\0';
char * pass = NULL;
pass = (char *) realloc(pass, password_match.rm_eo-password_match.rm_so-12);
memcpy(pass, recived_login+password_match.rm_so+12, password_match.rm_eo-password_match.rm_so-13);
pass[password_match.rm_eo-password_match.rm_so-13] = '\0';
// Przekonwertowane uprawnienia
int right_int;
// Skompletowane zapytanie
char * get_rights = NULL;
int get_rights_len = 0;
// Składowe zapytania
char * part1 = "SELECT `query_rights` FROM `"; int part1_len = 28;
char * part2 = "user` WHERE `username`='"; int part2_len = 24;
char * part3 = "' AND `password`='"; int part3_len = 18;
char * part4 = "';"; int part4_len = 2;
/* char * mysql_prefix */ int prefix_len = strlen(mysql_prefix);
/* char * login = "root"; */ int login_len = strlen(login);
/* char * pass = "kompdomowy1"; */ int pass_len = strlen(pass);
// Realokacja zapytania w pamięci
get_rights = (char *) realloc(get_rights, part1_len+prefix_len+part2_len+login_len+part3_len+pass_len+part4_len+1);
//############### SKLEJANIE ZAPYTANIA ###############
// Częsć pierwsza
memcpy(get_rights, part1, part1_len);
get_rights_len += part1_len;
// Prefix tabel
memcpy(get_rights+get_rights_len, mysql_prefix, prefix_len);
get_rights_len += prefix_len;
// Część druga
memcpy(get_rights+get_rights_len, part2, part2_len);
get_rights_len += part2_len;
// Login
memcpy(get_rights+get_rights_len, login, login_len);
get_rights_len += login_len;
// Część trzecia
memcpy(get_rights+get_rights_len, part3, part3_len);
get_rights_len += part3_len;
// Hasło
memcpy(get_rights+get_rights_len, pass, pass_len);
get_rights_len += pass_len;
// Część czwarta
memcpy(get_rights+get_rights_len, part4, part4_len);
get_rights_len += part4_len;
//###################################################
// Wysłanie zapytania
if(!mysql_real_query(mysql_handle, get_rights, strlen(get_rights)))
{
// Zwrócenie wyniku
MYSQL_RES * params = mysql_use_result(mysql_handle);
// Zapisanie uprawnień to zmiennej
MYSQL_ROW right = mysql_fetch_row(params);
// Sprawdzenie czy jest taki user
if(right)
{
// Sprawdzanie uprawnień do korzystania z programu
if((right_int = atoi(right[0])) && user_list[user_nr].socket == loger_socket)
{
// Zalogowanie usera
user_list[user_nr].rights = right_int;
user_list[user_nr].login = login;
SEND_DATA(right[0],loger_socket);
// Czyszczenie pamięci po wykorzystaniu wyniku
mysql_free_result(params);
return true;
}
else
{
// Uprawnienia wynosiły 0
SEND_ERROR("@~E:002",loger_socket);
// Czyszczenie pamięci po wykorzystaniu wyniku
mysql_free_result(params);
return false;
}
}
else
{
// Nie było takiego usera
SEND_ERROR("@~E:001",loger_socket);
// Czyszczenie pamięci po wykorzystaniu wyniku
mysql_free_result(params);
return false;
}
}
else
{
// Problem z serwerem (powiadom administratora)
SEND_ERROR("@~E:555",loger_socket);
return false;
}
}
else
{
// Błędna treśc zapytania hasła
SEND_ERROR("@~E:665",loger_socket);
return false;
}
}
else
{
// Problem z kompilacją zapytania
SEND_ERROR("@~E:777",loger_socket);
return false;
}
}
else
{
// Błędna treśc zapytania
SEND_ERROR("@~E:667",loger_socket);
return false;
}
}
else
{
// Problem z kompilacją zapytania
SEND_ERROR("@~E:777",loger_socket);
return false;
}
}