diff --git a/README.md b/README.md index cab65e5..6c5b0f1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# dogcom [![travis-ci](https://travis-ci.org/mchome/dogcom.svg "Build status")](https://travis-ci.org/mchome/dogcom) [![badge](https://img.shields.io/badge/%20built%20with-%20%E2%9D%A4-ff69b4.svg "build with love")](https://github.com/mchome/dogcom) [![version](https://img.shields.io/badge/stable%20-%20v1.4.0-4dc71f.svg "stable version")](https://github.com/mchome/dogcom/tree/v1.4.0) +# dogcom [![travis-ci](https://travis-ci.org/mchome/dogcom.svg "Build status")](https://travis-ci.org/mchome/dogcom) [![badge](https://img.shields.io/badge/%20built%20with-%20%E2%9D%A4-ff69b4.svg "build with love")](https://github.com/mchome/dogcom) [![version](https://img.shields.io/badge/stable%20-%20v1.4.1-4dc71f.svg "stable version")](https://github.com/mchome/dogcom/tree/v1.4.1) [Drcom-generic](https://github.com/drcoms/drcom-generic) implementation in C. diff --git a/auth.c b/auth.c index ba12226..eff9d99 100644 --- a/auth.c +++ b/auth.c @@ -53,10 +53,6 @@ int challenge(int sockfd, struct sockaddr_in addr, unsigned char seed[]) { perror("Failed to recv data"); return 1; } - if (recv_packet[0] != 0x02) { - printf("Bad challenge response received.\n"); - return 1; - } if (verbose_flag) { print_packet("[Challenge recv] ", recv_packet, 76); @@ -65,6 +61,11 @@ int challenge(int sockfd, struct sockaddr_in addr, unsigned char seed[]) { logging("[Challenge recv] ", recv_packet, 76); } + if (recv_packet[0] != 0x02) { + printf("Bad challenge response received.\n"); + return 1; + } + memcpy(seed, &recv_packet[4], 4 * sizeof(*recv_packet)); #ifdef DEBUG print_packet(" ", seed, 4); @@ -226,10 +227,6 @@ int login(int sockfd, struct sockaddr_in addr, unsigned char seed[], unsigned ch perror("Failed to recv data"); return 1; } - if (recv_packet[0] != 0x04) { - printf("<<< login failed >>>\n"); - return 1; - } if (verbose_flag) { print_packet("[login recv] ", recv_packet, 100); @@ -240,6 +237,11 @@ int login(int sockfd, struct sockaddr_in addr, unsigned char seed[], unsigned ch logging("<<< Logged in >>>", NULL, 0); } + if (recv_packet[0] != 0x04) { + printf("<<< login failed >>>\n"); + return 1; + } + memcpy(auth_information, &recv_packet[23], 16); #ifdef DEBUG print_packet(" ", auth_information, 16); @@ -285,6 +287,14 @@ int pppoe_challenge(int sockfd, struct sockaddr_in addr, int *pppoe_counter, uns perror("Failed to recv data"); return 1; } + + if (verbose_flag) { + print_packet("[Challenge recv] ", recv_packet, 32); + } + if (logging_flag) { + logging("[Challenge recv] ", recv_packet, 32); + } + if (recv_packet[0] != 0x07) { printf("Bad challenge response received.\n"); return 1; @@ -299,13 +309,6 @@ int pppoe_challenge(int sockfd, struct sockaddr_in addr, int *pppoe_counter, uns *encrypt_mode = 1; #endif - if (verbose_flag) { - print_packet("[Challenge recv] ", recv_packet, 32); - } - if (logging_flag) { - logging("[Challenge recv] ", recv_packet, 32); - } - memcpy(seed, &recv_packet[8], 4); memcpy(sip, &recv_packet[12], 4); memcpy(drcom_config.KEEP_ALIVE_VERSION, &recv_packet[28], 2); @@ -385,10 +388,6 @@ int pppoe_login(int sockfd, struct sockaddr_in addr, int *pppoe_counter, unsigne perror("Failed to recv data"); return 1; } - if (recv_packet[0] != 0x07) { - printf("Bad pppoe_login response received.\n"); - return 1; - } if (verbose_flag) { print_packet("[PPPoE_login recv] ", recv_packet, 48); @@ -397,6 +396,11 @@ int pppoe_login(int sockfd, struct sockaddr_in addr, int *pppoe_counter, unsigne logging("[PPPoE_login recv] ", recv_packet, 48); } + if (recv_packet[0] != 0x07) { + printf("Bad pppoe_login response received.\n"); + return 1; + } + if(recvfrom(sockfd, recv_packet, 1024, 0, (struct sockaddr *)&addr, &addrlen) >= 0) { DEBUG_PRINT(("Get notice packet.")); } diff --git a/configparse.h b/configparse.h index 2ac06e0..e36bbbb 100644 --- a/configparse.h +++ b/configparse.h @@ -3,7 +3,7 @@ struct config { char server[20]; - char username[20]; + char username[36]; char password[20]; unsigned char CONTROLCHECKSTATUS; unsigned char ADAPTERNUM; diff --git a/keepalive.c b/keepalive.c index 388e289..2b6de2e 100644 --- a/keepalive.c +++ b/keepalive.c @@ -54,6 +54,13 @@ int keepalive_1(int sockfd, struct sockaddr_in addr, unsigned char seed[], unsig perror("Failed to recv data"); return 1; } else { + if (verbose_flag) { + print_packet("[Keepalive1 recv] ", recv_packet, 100); + } + if (logging_flag) { + logging("[Keepalive1 recv] ", recv_packet, 100); + } + if (recv_packet[0] == 0x07) { break; } else if (recv_packet[0] == 0x4d) { @@ -66,13 +73,6 @@ int keepalive_1(int sockfd, struct sockaddr_in addr, unsigned char seed[], unsig } } - if (verbose_flag) { - print_packet("[Keepalive1 recv] ", recv_packet, 100); - } - if (logging_flag) { - logging("[Keepalive1 recv] ", recv_packet, 100); - } - return 0; } @@ -204,7 +204,7 @@ int keepalive_2(int sockfd, struct sockaddr_in addr, int *keepalive_counter, int } #endif - // send the first pacekt + // send the first packet *first = 0; memset(keepalive_2_packet, 0, 40); if (strcmp(mode, "pppoe") == 0) { diff --git a/main.c b/main.c index dc6dbb8..4df519a 100644 --- a/main.c +++ b/main.c @@ -12,7 +12,7 @@ #include "libs/common.h" #endif -#define VERSION "1.4.0" +#define VERSION "1.4.1" void print_help(int exval); int try_smart_eaplogin(void);