[완료]getpass 함수에 대해서 질문을 드리겠습니다.
안녕하세요
정말 특이한 현상을 접해서 질문을 드립니다.; 아직 이유를 모르겠네요
char *getpass( const char * prompt );
를 사용하려구 합니다.
이유는 패스워드르르 받을때 scanf로 한다면 숫자가 그대로 보이기때문에 바꾸려구 하고 있습니다. getpass함수를 사용하고 실행을시켰을때 아래와 같습니다.
/*결과*/ Input: /*123456 입력*/ PC[6] passcode[123456] IO[6] IO[123456] Authentication failure [1003] Input: /*123 입력 <-3회입력(백스페이스) 456입력 PC[9] passcode[456] IO[9] IO[456] Authentication failure [1003] Input: /*123 입력 <-6회입력(백스페이스) 456입력 PC[12] passco456]23 IO[12] 456]23 User lock up(Error number of times excess) [1004] /*소스*/ int MRCheck(char *pUserID, char *pShell) { MRCONF mrconf; int out=0; int round=0; int sincValue=0; char replyMSG[259+1]="\0"; char Passcode[47+1]="\0"; char PrePC[16+1]="\0"; char *IO = NULL; memset(&mrconf, 0x00, sizeof(mrconf)); /*char sh[] = "/bin/ksh";나중에 리플라이 메세지로 쉘을 파싱을 하면 사용을 안할부분*/ out = MRConfRead(&mrconf); if(out == FAIL) { printf("File read failure [/etc/MRserver.txt, MRConf.rec]\n"); return FAIL; } for(;round < mrconf.Retry; round++) { /*printf(" Input: "); memset(Passcode, 0x00, sizeof(Passcode)); scanf("%s",Passcode); 수정11월20일 passcode input을 getpass로 수정*/ IO = getpass(" Input: "); memset(Passcode, 0x00, sizeof(Passcode)); strcpy(Passcode, IO); printf("PC[%d] passcode[%s]\n",strlen(Passcode), Passcode); printf("IO[%d] IO[%s]\n",strlen(IO), IO);
문제가 되는 함수의 소스부분과 결과 부분입니다.
이상하게 비밀번호를 잘못 입력을했을때 지우는 백스페이스가 지워지는게 아니라 그대로 문자열로 남아서 pritnf에서 출력이 되는거 같습니다
소스 마지막에서 보듯이 printf()에서는 입력된 문자열과 길이를 출력시키고 있는데 출력화면에서 2번째와 3번째 길이를 보면 백스페이스 길이까지 사이즈로 출력이 되고 있습니다. 또한 3번째를 보면 printf에서 %s 이전의 문자열까지 백스페이스 입력한 길이만큼 지워지는 기이한 현상을 보이고 있습니다.
getpass의 문제인가 해서 다른 테스트 페이지에서 위의 소스중 getpass에 관련된 부분만 편집해서 실행해봤습니다.
/*출력*/ OTP Input: /*123456 입력*/ PC[6] passcode[123456] OTP Input: /*123 입력 <-3회입력(백스페이스) 456입력 PC[3] passcode[456] OTP Input: /*123 입력 <-6회입력(백스페이스) 456입력 PC[3] passcode[456] /*소스*/ #include <unistd.h> #include <stdio.h> int main(void) { int i=0; char Passcode[47+1]="\0"; char *IO = NULL; for(i=0;i<3;i++) { IO = getpass(" Input: "); memset(Passcode, 0x00, sizeof(Passcode)); strcpy(Passcode, IO); printf("PC[%d] passcode[%s]\n",strlen(Passcode), Passcode); } }
이해가 안되는 결정적인 부분이 이부분입니다. 문제가 되는 소스에서 getpass에 관련된 부분만 따로 편집해서 출력을 시켰을때는 멀쩡하게 돌아가는데 왜 위의 소스는 문제가 생길까요
또한 char * getpass는 포인터를 리턴해서 char []로는 받을수 없던데 방법이 있을까요 strcpy로 카피하는것 때문에 위와 같은 문제가 발생될까해서요..
도저히 알수가 없어서 질문을 드립니다.
man 페이지에는 이
man 페이지에는 이 함수를 더이상 사용하지 말라고 나옵니다.
stty erase 값에 따라 달라질겁니다.
컴맨드 상에서 stty -a 을 실행하고 erase 로 셋팅된 값과 백스페이스 값이
같은지 확인 해 보세요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
^H 로 나옵니다.
인터넷을 보니까 ^H 는 백스페이스라고 나와있던데...정상적으로 설정 되어 있는것 아닌가요?
댓글 달기