passdb-lua.c revision 9698cd24356147d8a5471260062ea7e10e692fdf
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *file;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenypassdb_lua_verify_password(struct dlua_passdb_module *module,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct auth_request *request, const char *password)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny auth_lua_call_password_verify(module->script, request,
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce auth_request_log_password_mismatch(request, AUTH_SUBSYS_DB);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny } else if (result == PASSDB_RESULT_INTERNAL_FAILURE && error != NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny auth_request_log_error(request, AUTH_SUBSYS_DB, "passdb-lua: %s",
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose (struct dlua_passdb_module *)request->passdb->passdb;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny result = auth_lua_call_passdb_lookup(module->script, request, scheme_r,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (result == PASSDB_RESULT_INTERNAL_FAILURE && error != NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny auth_request_log_error(request, AUTH_SUBSYS_DB, "db-lua: %s", error);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny /* skip next bit */
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce } else if (!auth_fields_exists(request->extra_fields, "nopassword")) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (*password_r == NULL || **password_r == '\0') {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny "No password returned (and no nopassword)");
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny } else if (*password_r == NULL || **password_r != '\0') {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny "nopassword given and password is not empty");
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorcepassdb_lua_lookup_credentials(struct auth_request *request,
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce passdb_lua_lookup(request, &lua_scheme, &lua_password);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny passdb_handle_credentials(result, lua_password, lua_scheme, callback, request);
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorcepassdb_lua_verify_plain(struct auth_request *request, const char *password,
7fe69bb6ec70bce439c6b975a9a0044c98ff502bSimo Sorce (struct dlua_passdb_module *)request->passdb->passdb;
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce result = passdb_lua_verify_password(module, request, password);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny result = passdb_lua_lookup(request, &lua_scheme, &lua_password);
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce if ((auth_request_password_verify(request, password, lua_password,
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorcestatic struct passdb_module *
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce module = p_new(pool, struct dlua_passdb_module, 1);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce const char *const *fields = t_strsplit_spaces(args, " ");
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce } else if (strncmp(*fields, "blocking=", 9) == 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce "Field blocking must be yes or no",
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce i_fatal("passdb-lua: Missing mandatory file= parameter");
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorcestatic void passdb_lua_init(struct passdb_module *_module)
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose const char *error;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose if (dlua_script_create_file(module->file, &module->script, &error) < 0 ||
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose auth_lua_script_init(module->script, &error) < 0)
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose i_fatal("passdb-lua: initialization failed: %s", error);
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose dlua_script_has_function(module->script, AUTH_LUA_PASSWORD_VERIFY);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorcestatic void passdb_lua_deinit(struct passdb_module *_module)