Simplified the code.
This commit is contained in:
parent
7cf30917aa
commit
c83d2864fb
2 changed files with 15 additions and 19 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# checkpw
|
||||
# checkpw - 1.0
|
||||
|
||||
checkpw is a program that checks the validity of a users password on a Linux/PAM-based system.
|
||||
|
||||
|
|
@ -29,3 +29,4 @@ Returns 0 on success, 1 otherwise.
|
|||
```
|
||||
echo $?
|
||||
```
|
||||
|
||||
|
|
|
|||
31
checkpw.c
31
checkpw.c
|
|
@ -73,35 +73,31 @@ int authenticate(const char *username, const char *password, int verbose) {
|
|||
struct pam_credentials credentials = { password };
|
||||
struct pam_conv conv = { pam_conversation, &credentials };
|
||||
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("Starting PAM authentication for user '%s'.\n", username);
|
||||
}
|
||||
|
||||
retval = pam_start("login", username, &conv, &pamh);
|
||||
|
||||
if (retval == PAM_SUCCESS) {
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("PAM authentication initialized.\n");
|
||||
}
|
||||
retval = pam_authenticate(pamh, 0); // Attempt to authenticate
|
||||
} else {
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("pam_start failed: %s\n", pam_strerror(pamh, retval));
|
||||
}
|
||||
}
|
||||
|
||||
if (retval == PAM_SUCCESS) {
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("User '%s' authenticated successfully.\n", username);
|
||||
}
|
||||
|
||||
retval = pam_acct_mgmt(pamh, 0); // Check account validity
|
||||
if (retval != PAM_SUCCESS && verbose) {
|
||||
if (retval != PAM_SUCCESS && verbose)
|
||||
printf("pam_acct_mgmt failed: %s\n", pam_strerror(pamh, retval));
|
||||
}
|
||||
|
||||
} else {
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("pam_authenticate failed: %s\n", pam_strerror(pamh, retval));
|
||||
}
|
||||
}
|
||||
|
||||
if (pam_end(pamh, retval) != PAM_SUCCESS) {
|
||||
|
|
@ -174,8 +170,8 @@ void print_usage(const char *prog_name) {
|
|||
int main(int argc, char *argv[]) {
|
||||
char username[MAX_USERNAME_LEN] = {0};
|
||||
char password[MAX_PASSWORD_LEN] = {0};
|
||||
int verbose = 0; // Verbose mode flag
|
||||
int interactive = 0; // Interactive mode flag
|
||||
int verbose = 0;
|
||||
int interactive = 0;
|
||||
int opt;
|
||||
|
||||
// Parse command-line arguments
|
||||
|
|
@ -199,10 +195,10 @@ int main(int argc, char *argv[]) {
|
|||
print_usage(argv[0]);
|
||||
exit(1);
|
||||
case 'i':
|
||||
interactive = 1; // Enable interactive mode
|
||||
interactive = 1;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1; // Enable verbose mode
|
||||
verbose = 1;
|
||||
break;
|
||||
default:
|
||||
print_usage(argv[0]);
|
||||
|
|
@ -249,9 +245,8 @@ int main(int argc, char *argv[]) {
|
|||
exit(1);
|
||||
}
|
||||
|
||||
if (verbose) {
|
||||
if (verbose)
|
||||
printf("User '%s' passed UID check (UID: %d).\n", username, pwd->pw_uid);
|
||||
}
|
||||
|
||||
// Authenticate the user
|
||||
if (authenticate(username, password, verbose) == 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue