diff options
| author | Cara Salter <cara@devcara.com> | 2022-10-24 13:21:37 -0400 | 
|---|---|---|
| committer | Cara Salter <cara@devcara.com> | 2022-10-24 13:21:37 -0400 | 
| commit | f0f0efcafeec83850add53712eb463c8ff5ee9be (patch) | |
| tree | 709ad1678f10788c57c713e6683f5be2b780479b | |
| parent | 338c3d50f45598418e0ed29fed542e76cf071e0f (diff) | |
| download | cmud-f0f0efcafeec83850add53712eb463c8ff5ee9be.tar.gz cmud-f0f0efcafeec83850add53712eb463c8ff5ee9be.zip | |
login: Login complete!
segfaults... so many segfaults
but i'm learning so that's what matters!
| -rw-r--r-- | src/data.c | 7 | ||||
| -rw-r--r-- | src/login.c | 20 | ||||
| -rw-r--r-- | src/main.c | 2 | ||||
| -rw-r--r-- | src/server.c | 3 | ||||
| -rw-r--r-- | src/server.h | 2 | 
5 files changed, 28 insertions, 6 deletions
| @@ -101,7 +101,7 @@ int serialize_player(player_t *plr, FILE* fp) {      printf("%s\n", plr->pw_hash); -    err = fprintf(fp, "%d:%d:%d:%d:%d:%s:%s", plr->xp, plr->hp, plr->max_hp, plr->level, plr->location_id, plr->pw_hash, plr->name);  +    err = fprintf(fp, "%d:%d:%d:%d:%d:%s %s", plr->xp, plr->hp, plr->max_hp, plr->level, plr->location_id, plr->pw_hash, plr->name);       return err;  } @@ -127,7 +127,10 @@ int deserialize_player(FILE* fp, player_t* plr) {      enum ParsePlayerState state = ReadingData;      enum ParsePlayerType type = Xp; -    err = fscanf(fp, "%d:%d:%d:%d:%d:%s:%s", &(plr->xp), &(plr->hp), &(plr->max_hp), &(plr->level), &(plr->location_id), plr->pw_hash, plr->name); +    plr->pw_hash = (char*) malloc(512); +    plr->name = (char*) malloc(32); + +    err = fscanf(fp, "%d:%d:%d:%d:%d:%s %s", &(plr->xp), &(plr->hp), &(plr->max_hp), &(plr->level), &(plr->location_id), plr->pw_hash, plr->name);     return err; diff --git a/src/login.c b/src/login.c index 6ccebc7..8214234 100644 --- a/src/login.c +++ b/src/login.c @@ -72,19 +72,33 @@ int step_login(playerc_t *player, int conn_fd) {      case EnterPassword: ;        asprintf(&buf, "Welcome back %s! Please enter your password, so we can confirm it.\n", player->plr.name);        send_to_fd(player->conn, buf); -      recv(player->conn, buf, sizeof(buf), 0); -      printf("%s\n", player->plr.pw_hash); +      memset(buf, '\0', 1 << 9); +      recv(player->conn, buf, sizeof(buf), 0);  +      char* pw = trimwhitespace(buf); +      int res = argon2i_verify(player->plr.pw_hash, pw, strlen(pw));  +      printf("%d\n", res); +      if (res == ARGON2_OK) { +        // The password is good! +        send_to_fd(player->conn, "That looks good to me! Let's get you loaded in\n"); +        player->state = Complete; +      } else { +          // Password is incorrect +          send_to_fd(player->conn, "Password incorrect, please try again\n"); +          break; +      }        break;      case WantMakeAccount:        asprintf(&buf, "Welcome aboard %s! Why don't you start us off by giving me a password.\n", player->plr.name);        send_to_fd(player->conn, buf); +      memset(buf, '\0', 1 << 9);        recv(player->conn, buf, sizeof(buf), 0);          if (strlen(buf) <= 5) {              send_to_fd(player->conn, "We're sorry, but passwords need to be at least 5 characters");          } else {              player->plr.pw_hash = (char *)malloc(512);              char* hashbuf = (char *)malloc (1 << 5); -            err = argon2i_hash_encoded(32, 512, 1, buf, strlen(buf), "adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I=", strlen("adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I="), 32, player->plr.pw_hash, 512); +            char* pw = trimwhitespace(buf); +            err = argon2i_hash_encoded(32, 512, 1, pw, strlen(pw), "adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I=", strlen("adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I="), 32, player->plr.pw_hash, 512);              if (err != ARGON2_OK) {                  send_to_fd(player->conn, "Uhhh, something happened. Try again."); @@ -27,5 +27,7 @@ int main() {      }    } +  closeServer(0); +    return 0;  } diff --git a/src/server.c b/src/server.c index 632cb28..87cf6b7 100644 --- a/src/server.c +++ b/src/server.c @@ -11,7 +11,8 @@  static int socket_fd;  void closeServer(int dummy) { -    shutdown(socket_fd, 2); +    close(socket_fd); +    printf("Caught SIGINT\n");  }  int server_listen(server_t *server) { diff --git a/src/server.h b/src/server.h index 5392f56..aacc88e 100644 --- a/src/server.h +++ b/src/server.h @@ -14,4 +14,6 @@ int server_accept(server_t *server);  int send_to_fd(int fd, char *msg); +void closeServer(int dummy); +  #endif // SERVER_H_ | 
