Not to beat a dead horse, but since many people may actually want to do passwd file auth under Linux specifically - crypt() will handle the special case of salted MD5 as well as traditional crypt. Strangely my system's shadow file has both traditional and SMD5. Here's a code sample from I ended up using:
+++snip+++
char *userlogin; // From function call
char *userpassword; // From function call
char shadowpass[1024] = "";
char buffer[1024] = "";
char usrSalt[100] = "";
char *saltmine = NULL;
int saltlen = 0;
// ... Getting password from shadow removed ...
if (0 == strncmp(shadowpass, "$1$", 3))
{
saltmine = strchr(&shadowpass[3], '$');
saltlen = 1 + (saltmine - shadowpass);
strncpy(usrSalt, shadowpass, saltlen);
usrSalt[saltlen] = 0;
}
else
{
strncpy(usrSalt, shadowpass, 2);
usrSalt[2] = 0;
}
strncpy( buffer, crypt(usrpasswd, usrSalt), BUFSIZ);
// Zero if match: - strcmp(buffer, shadowpass)
+++snip+++
I hope this makes someone's life easier!