if (var_expand_with_funcs(dest, args[i+1], table, funcs_table,
req, error_r) < 0) {
*result_r = PASSDB_RESULT_INTERNAL_FAILURE;
- req->failed = TRUE;
return FALSE;
}
value = str_c(dest);
}
static void db_oauth2_callback(struct db_oauth2_request *req,
- enum passdb_result result, bool success,
+ enum passdb_result result,
const char *error)
{
db_oauth2_lookup_callback_t *callback = req->callback;
req->callback = NULL;
- i_assert(result == PASSDB_RESULT_OK || (!success && error != NULL));
+ i_assert(result == PASSDB_RESULT_OK || error != NULL);
if (callback != NULL) {
DLLIST_REMOVE(&req->db->head, req);
- callback(req->db, result, success, req, error, req->context);
+ callback(req->db, result, req, error, req->context);
}
}
if (username_value == NULL) {
*result_r = PASSDB_RESULT_INTERNAL_FAILURE;
- req->failed = TRUE;
*error_r = "No username returned";
return FALSE;
}
*error_r = t_strdup_printf("var_expand(%s) failed: %s",
req->db->set.username_format, error);
*result_r = PASSDB_RESULT_INTERNAL_FAILURE;
- req->failed = TRUE;
+ return FALSE;
} else if (!str_equals(username_req, username_val)) {
*error_r = t_strdup_printf("Username '%s' did not match '%s'",
str_c(username_req), str_c(username_val));
*result_r = PASSDB_RESULT_USER_UNKNOWN;
- req->failed = TRUE;
+ return FALSE;
+ } else {
+ return TRUE;
}
-
- return !req->failed;
}
static bool
strcmp(req->db->set.active_value, active_value) != 0)) {
*error_r = "User account is not active";
*result_r = PASSDB_RESULT_USER_DISABLED;
- req->failed = TRUE;
+ return FALSE;
}
}
- return !req->failed;
+ return TRUE;
}
static bool
*error_r = t_strdup_printf("Token is not valid for scope '%s'",
req->db->set.scope);
*result_r = PASSDB_RESULT_USER_DISABLED;
- req->failed = TRUE;
+ return FALSE;
}
}
- return !req->failed;
+ return TRUE;
}
static void db_oauth2_process_fields(struct db_oauth2_request *req)
if (db_oauth2_validate_username(req, &result, &error) &&
db_oauth2_user_is_enabled(req, &result, &error) &&
db_oauth2_token_in_scope(req, &result, &error) &&
- db_oauth2_template_export(req, &result, &error) &&
- !req->failed) {
+ db_oauth2_template_export(req, &result, &error)) {
result = PASSDB_RESULT_OK;
} else {
i_assert(result != PASSDB_RESULT_OK && error != NULL);
}
- db_oauth2_callback(req, result, !req->failed, error);
+ db_oauth2_callback(req, result, error);
}
static void
if (!result->success) {
/* fail here */
- req->failed = TRUE;
- db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE, FALSE, result->error);
+ db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE, result->error);
return;
}
db_oauth2_fields_merge(req, result->fields);
enum passdb_result passdb_result = result->success ?
PASSDB_RESULT_PASSWORD_MISMATCH :
PASSDB_RESULT_INTERNAL_FAILURE;
- req->failed = TRUE;
- db_oauth2_callback(req, passdb_result, FALSE, result->error == NULL ? "Invalid token" : result->error);
+ db_oauth2_callback(req, passdb_result, result->error == NULL ? "Invalid token" : result->error);
return;
}
typedef void db_oauth2_lookup_callback_t(struct db_oauth2 *db,
enum passdb_result result,
- bool success,
struct db_oauth2_request *request,
const char *error,
void *context);
db_oauth2_lookup_callback_t *callback;
void *context;
verify_plain_callback_t *verify_callback;
-
- bool failed:1;
};
void db_oauth2_lookup(struct db_oauth2 *db, struct db_oauth2_request *req, const char *token, struct auth_request *request, db_oauth2_lookup_callback_t *callback, void *context);
#define db_oauth2_lookup(db, req, token, request, callback, context) \
db_oauth2_lookup(db, req, token + \
- CALLBACK_TYPECHECK(callback, void(*)(struct db_oauth2*, enum passdb_result, bool, struct db_oauth2_request *req, const char*, typeof(context))), \
+ CALLBACK_TYPECHECK(callback, void(*)(struct db_oauth2*, enum passdb_result, struct db_oauth2_request *req, const char*, typeof(context))), \
request, (db_oauth2_lookup_callback_t*)callback, (void*)context)
#endif
static void
oauth2_verify_plain_continue(struct db_oauth2 *db ATTR_UNUSED,
- enum passdb_result result, bool success,
+ enum passdb_result result,
struct db_oauth2_request *req, const char *error,
struct auth_request *request)
{
- i_assert(success || result != PASSDB_RESULT_OK);
- if (!success && result == PASSDB_RESULT_INTERNAL_FAILURE)
+ if (result == PASSDB_RESULT_INTERNAL_FAILURE)
auth_request_log_error(request, AUTH_SUBSYS_DB, "oauth2 failed: %s",
error);
- else if (!success)
+ else if (result != PASSDB_RESULT_OK)
auth_request_log_info(request, AUTH_SUBSYS_DB, "oauth2 failed: %s",
error);
req->verify_callback(result, request);