Hi i just whant to update an password entry in /etc/shadow.
But dosen't get it to work. Something is wrong! in this code.
What i try do do is if user kalle exist in shadow.
I whant it to update it's password for just that entry.
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
#include <string.h>
#include <shadow.h>
//#include <userpw.h>
int main()
{
// -------------------------- //
// ------- passwd file ------ //
// -------------------------- //
FILE* fp;
struct passwd *p;
memset(&p, 0, sizeof(p));
if (!(fp = fopen("/etc/passwd", "a"))) {
perror("Problem ");
return(1);
}
// --------------------------- //
// ----- Password Crypt ------ //
// --------------------------- //
char salt[2];
char password[8] = "password";
char t[11];
salt[0] = 'W'; salt[1] = 'M';
strcpy(t,(char *)crypt(password, salt));
// --------------------------- //
// ------ shadow file -------- //
// --------------------------- //
FILE* fps;
struct spwd *sp;
memset(&sp, 0, sizeof(sp));
if (!(fps = fopen("/etc/shadow", "rw"))) {
perror("Problem");
return(1);
}
char user[20] = "kalle";
/* Loop thru passwd file */
while ((p = getpwent()) != NULL) {
printf("%s\n",p->pw_name);
//IF user found
if (strcmp(p->pw_name, user) == 0 ) {
if(!(sp=getspnam(p->pw_name))){
printf("user missing in shadow file");
} else {
strcpy(sp->sp_pwdp,t);
prinf("run the train %s\n",sp->sp_pwdp);
putspent(sp,fps);
}
}
}
fclose(fps);
return( EXIT_SUCCESS );
}