#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
enum inputType {
userMembership = 1,
userLogin = 2
};
struct userInfo {
char *userId;
char *userPassword;
char *userCheckPassword;
};
void initId(struct userInfo *UserInfoId, const char *UserId) {
UserInfoId->userId = strdup(UserId);
if (UserInfoId->userId == NULL) {
perror("USER ID ERROR\n");
exit(EXIT_FAILURE);
}
}
void initPassword(struct userInfo *UserInfoPass, const char *UserPassword) {
UserInfoPass->userPassword = strdup(UserPassword);
if (UserInfoPass->userPassword == NULL) {
perror("USER PASSWORD ERROR\n");
exit(EXIT_FAILURE);
}
}
void initCheckPassword(struct userInfo *UserInfoCheckPass, const char *UserCheckPassword) {
UserInfoCheckPass->userCheckPassword = strdup(UserCheckPassword);
if (UserInfoCheckPass->userCheckPassword == NULL) {
perror("USER CHECKPASSWORD ERROR\n");
exit(EXIT_FAILURE);
}
}
void printStruct(struct userInfo *UserInfo) {
printf("UserId:%s\n", UserInfo->userId);
printf("UserPassword:%s\n", UserInfo->userPassword);
printf("UserCheckPassword:%s\n", UserInfo->userCheckPassword);
}
void cleanupStruct(struct userInfo *UserInfo) {
free(UserInfo->userId);
free(UserInfo->userPassword);
free(UserInfo->userCheckPassword);
}
int main() {
struct userInfo example;
char userInputId[20];
int userInputType;
char userCheckId[20];
char *password;
char *checkPassword;
char *inputCheckPassword;
do {
puts("[1. membership]\n[2. login]\n");
scanf("%d", &userInputType);
enum inputType InputType = userInputType;
switch(InputType) {
case userMembership:
puts("Input ID: ");
scanf("%s", userInputId);
// puts("Input Password: ");
// scanf("%s", userInputPass);
password = getpass("Input Password: ");
// puts("Input Check Password: ");
// scanf("%s", userInputCheckPass);
checkPassword = getpass("Input Check Password: ");
printf("\n\n\n");
initId(&example, userInputId); //아이디 저장
initPassword(&example, password); //비밀번호 1차저장
initCheckPassword(&example, checkPassword); //비밀번호 2차저장
printStruct(&example); //출력 테스트
cleanupStruct(&example);
if (strcmp(password, checkPassword) == 0) { //비번 체크
puts("\nresult: sucesses\n");
} else {
puts("\nresult: fail\n");
}
break;
case userLogin:
puts("Input ID: ");
scanf("%s", userCheckId);
inputCheckPassword = getpass("Input Password: ");
if (strcmp(userCheckId, userInputId) == 0 && strcmp(inputCheckPassword, password) == 0) {
puts("login sucesses\n");
} else {
puts("login fail\n");
}
break;
}
} while(1);
return 0;
}
리눅스에서 복사 후 블로그에 붙여넣기 하기가 너무 힘든 것 같다.
일일히 작성하는 느낌인 것 같기도 하고.. 일단은 지금 상황으로써는 프로그램이 작동은 되지만 버그가 있다.
회원가입 시 1차 비밀번호와 2차 비밀번호가 일치해야 가입이 완료되어야 하는데 기존에는 잘 되었으나 비밀번호가 그대로 노출된다는 이유로 setpass함수를 이용하여 작성을 하였다.
하지만 setpass함수를 사용한 이 후에는 비밀번호가 일치하지 않아도 가입이 되는 버그가 발생되었다.
1차 비밀번호와 2차 비밀번호가 다를 경우 2차 비밀번호로 가입이 진행된다.
또한 로그인 기능에서는 기존의 비밀번호가 맞는지 확인 후 로그인이 완료되어야 하는데 이 부분도 아이디만 맞으면 로그인이 진행된다. 그래서 오늘은 이러한 버그를 수정하는 하루를 보내려고 한다.
C언어를 제대로 이해하지 못해 발생한 부분인 것 같아 블로그 운영 전에 공부했던 "모두의 C언어" 책을 다시 복습하면서 이해를 한 후에 코드를 다시 점검해봐야겠다.
'C 프로그래밍' 카테고리의 다른 글
리눅스 C프로그래밍 23.12.11 (0) | 2023.12.11 |
---|---|
C프로그래밍 23.12.10 (0) | 2023.12.11 |
C프로그래밍 23.12.09 (0) | 2023.12.09 |
C프로그래밍 23.12.08 (0) | 2023.12.08 |
[리눅스] 23.12.07 (0) | 2023.12.07 |