Hjälp - C-program för kontroll av lösenord i Linux

Permalänk
Medlem

Hjälp - C-program för kontroll av lösenord i Linux

Hej!

Jag håller på med ett program i C som ska kontrollera om ett användarnamn + ett lösenord som man matar in överensstämmer med det som finns lagrat i /etc/passwd.

Har fått hela biten med att skriva ut "användarnamn:" och "lösenord:" i terminalen samt spara undan de inmatade värdena. Dock har jag problem med hur själva jämförelsen ska se ut då lösenorden ligger lagrade krypterat.

Här är metoden för krypteringen men jag vet inte hur man ska göra med Saltvärdet.

Citat:

/* encrypt the password with the crypt-function*/
int password_crypt(char *password){
password=crypt(password,"");
return(0);
}

Här är själva jämförelsen men jag vet inte om det fungerar att göra så här?

Citat:

/* Check user info against /etc/passwd */
int check_userinfo(const char *username, const char *password){
struct passwd *pw_entry;

pw_entry=getpwnam(username);
if (pw_entry!=NULL)
if(strcmp(password, pw_entry->pw_passwd)==0)
return(ACCESS_GRANTED);

else
return(ACCESS_DENIED);

return(0);
}

Jag vore tacksam om någon hade något tips på hur man kan lösa det här problemet?

MVH Splish

Visa signatur

Sugen på en tråkig ordvits?
Fråga mig!

Permalänk
Avstängd

Har du nån tråkig ordvits då?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av saddam
Har du nån tråkig ordvits då?

Har du något vettigt att säga?

Permalänk
Medlem

Re: Hjälp - C-program för kontroll av lösenord i Linux

Citat:

Ursprungligen inskrivet av Splish
Jag håller på med ett program i C som ska kontrollera om ett användarnamn + ett lösenord som man matar in överensstämmer med det som finns lagrat i /etc/passwd.

...

Här är metoden för krypteringen men jag vet inte hur man ska göra med Saltvärdet.

Till att börja med så hittar du inget lösenord i /etc/passwd på en Linuxdistribution idag (och skulle du göra det så byt distro). Lösenorden sparas idag i /etc/shadow och nås via getsp* istället för getpw*. De fungerar dock likadant med undantaget att getsp* kräver root-privilegier för att läsa data.

För att jämföra måste du kryptera det inmatade lösenordet med samma salt som det som användes när lösenordet skapades. Det värdet sparas tillsammans med typen av kryptering och den resulterande strängen i shadow-filens lösenordsfält (se crypt(3) för mer info). Efter att det inmatade lösenordet och det sparade saltvärdet körts genom crypt(), med rätt typ givetvis, så kan du jämföra med den sparade strängen och se om det stämde eller ej, precis som du gjort i ditt exempel.

Att hitta bekvämlighetsfunktioner för att splitta ut saltvärdet eller skriva en egen rutin för att få ut det lämnar jag som en övning till läsaren.

EDIT: bättre meningsbyggnad efter ett par koppar kaffe

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av saddam
Har du nån tråkig ordvits då?

Har du inget vettigt att skriva, skriv inte alls då.

Visa signatur

|| SWECLOCKERS.COM || oskar@sweclockers.com || OSkar000.se || Fototråden ||
|| Gundeman || Bartonofix || GundemanX2 || Obelinux || Nexofix || Filofix || Ircofix ||
|| Tillse att hjärnan är inkopplad innan fingrarna vidrör tangentbordet ||
|| D300 | D700 | 24/2,8 | 28/2,8 | 35/2 | 50/1,8 | 55/2,8 | 85/1,8 | 105/2,5 | 200/4 | 300/4,5 | 10-20 | 24-70/2,8 | 75-150/3,5 | 80-200/2,8 ||

Permalänk

Varför hetsar folk upp sig, får man inte göra det som folks signaturer föreslår?

Visa signatur

www.uu.se - some kind of university | www.hirr.org.uk - ain't no mountain high enough | www.bajenfans.se