다음과 같이 프로그램을 만들었습니다...
#include
#include
#include
#include
#include
#include
#include
struct passwd *pwd;
struct spwd *spwd;
main() {
const char id[40],passwd[40];
int i;
unsigned idf;
printf("Login : ");
scanf("%s",id);
printf("Password :");
scanf("%s",passwd);
pwd =getpwnam(id);
idf=pwd->pw_uid;
i=verify_password(idf,passwd);
printf("%d",i);
}
int verify_password(unsigned id, unsigned char *password)
{
char *salt = NULL;
pwd = getpwuid(id);
salt = pwd->pw_passwd;
if ( !strcmp(salt,"x")){
spwd = getspnam(pwd->pw_name);
salt = spwd->sp_pwdp;
}
if ( !strcmp(crypt(password,salt),salt)) return 0;
else return -1;
}
루트 계정에서는 입력값을 가지고 세도우 파일을 비교해서 잘 처리 됩니다...
그런데 일반 계정으로 실행하면 세도우 파일에 접근을 못합니다....
그래서 일반 계정으로 접근해서 위 파일을 실행했을 경우 세도우를 읽어서
암호를 비교 할 수 있는 방법을 알고 싶습니다..
꼭 부탁드립니다...
참 chmod 4000 이렇게 사용하는 방법 말고 프로그램에서 코딩을 해서 사용할
수 있는 방법을 알고 싶습니다...
위 코딩에 어디에 무엇을 추가 해야 되는지 ....
꼭 부탁 드립니다.