void write_pw(int entry, int value, struct pwdb_passwd *p) { if (entry == PW_FAILED) { p->pw_failed = value; } else if (entry == PW_AGE) { p->pw_age = value; } else { printf("Faulty entry passed"); return; } switch (entry) { case PW_FAILED: p->pw_failed = value; break; case PW_AGE: p->pw_age = value; break; default: printf("Erroneous entry passed to write_pw."); return; } if (pwdb_update_user(p) != 0) { printf("pwdb_update_user returned error %s\n", pwdb_err2str(pwdb_errno)); } }
int main(int argc,char **argv){ struct pwdb_passwd *p; if (argc<2) { printf("Usage: pwdb_showuser username\n"); return(0); } p=pwdb_getpwnam(argv[1]); if (p==NULL) { printf("pwdb_getpwnam returned error: %s\n",pwdb_err2str(pwdb_errno)); return(0); } printf("User info:\n"); print_info(p); return(0); }
int main(int argc,char **argv) { char *username; char *buf; size_t buflen, chread; struct pwdb_passwd *p, *oldp; int updt; if (argc<2) { printf("Usage: update_user username\n"); return(0); } username=argv[1]; oldp=pwdb_getpwnam(username); if (oldp!=NULL) updt=1; else if ((oldp==NULL) && (pwdb_errno==PWDB_NOUSER)) updt=0; else { printf("pwdb_getpwnam return error: %s\n",pwdb_err2str(pwdb_errno)); return(0); } p=(struct pwdb_passwd *)malloc(sizeof(struct pwdb_passwd)); buf=NULL; buflen=0; p->pw_name=username; chread=0; while (1) { printf("Password:"******"New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_passwd=oldp->pw_passwd; break; } if (chread>0) { p->pw_passwd=(char *)malloc(sizeof(char)*(chread+1)); strncpy(p->pw_passwd,buf,chread); p->pw_passwd[chread]='\0'; break; } } chread=0; while (1) { printf("Uid:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_uid=oldp->pw_uid; break; } if (chread>0) { p->pw_uid=atoi(buf); break; } } chread=0; while (1) { printf("Gid:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_gid=oldp->pw_gid; break; } if (chread>0) { p->pw_gid=atoi(buf); break; } } chread=0; while (1) { printf("Real name:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_gecos=oldp->pw_gecos; break; } if (chread>0) { p->pw_gecos=(char *)malloc(sizeof(char)*(chread+1)); strncpy(p->pw_gecos,buf,chread); p->pw_gecos[chread]='\0'; break; } } chread=0; while (1) { printf("Home directory:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_dir=oldp->pw_dir; break; } if (chread>0) { p->pw_dir=(char *)malloc(sizeof(char)*(chread+1)); strncpy(p->pw_dir,buf,chread); p->pw_dir[chread]='\0'; break; } } chread=0; while (1) { printf("Shell:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_shell=oldp->pw_shell; break; } if (chread>0) { p->pw_shell=(char *)malloc(sizeof(char)*(chread+1)); strncpy(p->pw_shell,buf,chread); p->pw_shell[chread]='\0'; break; } } chread=0; while (1) { printf("Failed:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_failed=oldp->pw_failed; break; } if (chread>0) { p->pw_failed=atoi(buf); break; } } chread=0; while (1) { printf("Age:"); chread=getline(&buf,&buflen,stdin); buf[chread]='\0'; chread--; /* remove '\n' included by getline */ if ((!updt) && (chread<1)) printf("New user, so you must enter data\n"); if ((updt) && (chread<1)) { p->pw_age=oldp->pw_age; break; } if (chread>0) { p->pw_age=atoi(buf); break; } } if (pwdb_update_user(p)!=0) { printf("pwdb_update_user returned error %s\n",pwdb_err2str(pwdb_errno)); } return(0); }