static void passwd_file_verify_plain(struct auth_request *request, const char *password, verify_plain_callback_t *callback) { struct passdb_module *_module = request->passdb->passdb; struct passwd_file_passdb_module *module = (struct passwd_file_passdb_module *)_module; struct passwd_user *pu; const char *scheme, *crypted_pass; int ret; pu = db_passwd_file_lookup(module->pwf, request, module->username_format); if (pu == NULL) { callback(PASSDB_RESULT_USER_UNKNOWN, request); return; } passwd_file_save_results(request, pu, &crypted_pass, &scheme); ret = auth_request_password_verify(request, password, crypted_pass, scheme, AUTH_SUBSYS_DB); callback(ret > 0 ? PASSDB_RESULT_OK : PASSDB_RESULT_PASSWORD_MISMATCH, request); }
static void passwd_file_lookup(struct auth_request *auth_request, userdb_callback_t *callback) { struct userdb_module *_module = auth_request->userdb->userdb; struct passwd_file_userdb_module *module = (struct passwd_file_userdb_module *)_module; struct passwd_user *pu; const struct var_expand_table *table; string_t *str; const char *key, *value; char **p; pu = db_passwd_file_lookup(module->pwf, auth_request, module->username_format); if (pu == NULL || pu->uid == 0) { callback(USERDB_RESULT_USER_UNKNOWN, auth_request); return; } if (pu->uid != (uid_t)-1) { auth_request_set_userdb_field(auth_request, "uid", dec2str(pu->uid)); } if (pu->gid != (gid_t)-1) { auth_request_set_userdb_field(auth_request, "gid", dec2str(pu->gid)); } if (pu->home != NULL) auth_request_set_userdb_field(auth_request, "home", pu->home); if (pu->extra_fields != NULL) { str = t_str_new(512); table = auth_request_get_var_expand_table(auth_request, NULL); for (p = pu->extra_fields; *p != NULL; p++) { if (strncmp(*p, "userdb_", 7) != 0) continue; key = *p + 7; value = strchr(key, '='); if (value != NULL) { key = t_strdup_until(key, value); str_truncate(str, 0); auth_request_var_expand_with_table(str, value + 1, auth_request, table, NULL); value = str_c(str); } else { value = ""; } auth_request_set_userdb_field(auth_request, key, value); } } callback(USERDB_RESULT_OK, auth_request); }
static void passwd_file_lookup_credentials(struct auth_request *request, lookup_credentials_callback_t *callback) { struct passdb_module *_module = request->passdb->passdb; struct passwd_file_passdb_module *module = (struct passwd_file_passdb_module *)_module; struct passwd_user *pu; const char *crypted_pass, *scheme; pu = db_passwd_file_lookup(module->pwf, request, module->username_format); if (pu == NULL) { callback(PASSDB_RESULT_USER_UNKNOWN, NULL, 0, request); return; } passwd_file_save_results(request, pu, &crypted_pass, &scheme); passdb_handle_credentials(PASSDB_RESULT_OK, crypted_pass, scheme, callback, request); }