I’m writing a function that perform some authentications actions. I have a file with all the user_id:password:flag
couples structured like this:
Users.txt
user_123:a1b2:0 user_124:a2b1:1 user_125:a2b2:2
This is the code:
int main(){ /*...*/ /*user_id, password retrieving*/ USRPSW* p = malloc(sizeof(USRPSW)); if(p == NULL){ fprintf(stderr, "Dynamic alloc error\n"); exit(EXIT_FAILURE); } memset((void*)p, 0, sizeof(USRPSW)); if(usr_psw_read(acc_sock_ds, p->user_id, USR_SIZE) <= 0){ printf("Failed read: connection with %s aborted.\n", inet_ntoa(client_addr.sin_addr)); close(acc_sock_ds); continue; } if(usr_psw_read(acc_sock_ds, p->password, PSW_SIZE) <= 0){ printf("Failed read: connection with %s aborted.\n", inet_ntoa(client_addr.sin_addr)); close(acc_sock_ds); continue; } /*Authentication through user_id, password*/ FILE *fd; fd = fopen(USERSFILE, "r"); if(fd == NULL){ fprintf(stderr, "Users file opening error\n"); exit(EXIT_FAILURE); } char *usr_psw_line = malloc(USR_SIZE+PSW_SIZE+3+1); if(usr_psw_line == NULL){ fprintf(stderr, "Dynamic alloc error\n"); exit(EXIT_FAILURE); } while(1){ memset((void*)usr_psw_line, 0, sizeof(USR_SIZE+PSW_SIZE+3+1)); fgets(usr_psw_line, USR_SIZE+PSW_SIZE+3+1, fd); printf("%s\n", usr_psw_line); fseek(fd, 1, SEEK_CUR); /*EOF management*/ /*usr_id - password matching checking */ } /*...*/ }
How can I manage the EOF reaching? I saw that when EOF is reached fgets
doesn’t edits anymore the usr_psw_line but neither returns a NULL pointer. If EOF is reached it mean that no match are found in the users file and the loop breaks.
Can someone give me some tips or suggests?