C 프로그래밍

C프로그래밍 23.12.10

Nohsw 2023. 12. 10. 11:56
#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