diff --git a/sources/config_reader.c b/sources/config_reader.c index 148a1616d..2cd49dc46 100644 --- a/sources/config_reader.c +++ b/sources/config_reader.c @@ -1744,12 +1744,13 @@ static int od_config_reader_route(od_config_reader_t *reader, char *db_name, return NOT_OK_RESPONSE; /* unreach */ - return od_config_reader_rule_settings(reader, rule, extentions, NULL, NULL); + return od_config_reader_rule_settings(reader, rule, extentions, NULL, + NULL); } static int od_config_reader_group(od_config_reader_t *reader, char *db_name, int db_name_len, int db_is_default, - od_extention_t *extentions) + od_extention_t *extentions) { /* group name */ char *group_name = NULL; @@ -1757,7 +1758,7 @@ static int od_config_reader_group(od_config_reader_t *reader, char *db_name, return NOT_OK_RESPONSE; if (!od_config_reader_string(reader, &group_name)) return NOT_OK_RESPONSE; - + char route_usr[strlen("group_") + strlen(group_name) + 1]; char route_db[strlen("group_") + strlen(group_name) + 1]; snprintf(route_usr, sizeof route_usr, "%s%s", "group_", group_name); @@ -1769,7 +1770,7 @@ static int od_config_reader_group(od_config_reader_t *reader, char *db_name, od_errorf(reader->error, "route '%s.%s': is redefined", route_usr, route_usr); return NOT_OK_RESPONSE; - } + } rule = od_rules_add(reader->rules); if (rule == NULL) { return NOT_OK_RESPONSE; @@ -1799,10 +1800,10 @@ static int od_config_reader_group(od_config_reader_t *reader, char *db_name, return NOT_OK_RESPONSE; /* unreach */ - if (od_config_reader_rule_settings(reader, rule, extentions, - NULL, group) == NOT_OK_RESPONSE) { + if (od_config_reader_rule_settings(reader, rule, extentions, NULL, + group) == NOT_OK_RESPONSE) { goto error; - } + } free(group_name); @@ -1857,8 +1858,8 @@ static inline int od_config_reader_watchdog(od_config_reader_t *reader, return NOT_OK_RESPONSE; /* unreach */ - if (od_config_reader_rule_settings(reader, rule, extentions, - watchdog, NULL) == NOT_OK_RESPONSE) { + if (od_config_reader_rule_settings(reader, rule, extentions, watchdog, + NULL) == NOT_OK_RESPONSE) { return NOT_OK_RESPONSE; } @@ -2140,8 +2141,9 @@ static int od_config_reader_database(od_config_reader_t *reader, goto error; continue; case OD_LGROUP: - rc = od_config_reader_group(reader, db_name, - db_name_len, db_is_default, extentions); + rc = od_config_reader_group(reader, db_name, + db_name_len, db_is_default, + extentions); if (rc == -1) goto error; continue; diff --git a/sources/group.c b/sources/group.c index f1ee2f4c8..e256a8ae8 100644 --- a/sources/group.c +++ b/sources/group.c @@ -30,7 +30,8 @@ int od_group_free(od_group_t *group) return OK_RESPONSE; } -void od_group_qry_format(char *qry, char *fmt, ...) { +void od_group_qry_format(char *qry, char *fmt, ...) +{ va_list args; va_start(args, fmt); int len = od_vsnprintf(qry, OD_QRY_MAX_SZ, fmt, args); diff --git a/sources/group.h b/sources/group.h index e03238d7f..ed270fb59 100644 --- a/sources/group.h +++ b/sources/group.h @@ -24,7 +24,7 @@ struct od_group { od_global_t *global; - od_list_t link; + od_list_t link; }; int od_group_free(od_group_t *); diff --git a/sources/list.h b/sources/list.h index 5ebfaad6d..6257137f4 100644 --- a/sources/list.h +++ b/sources/list.h @@ -68,8 +68,7 @@ static inline int od_list_empty(od_list_t *list) for (iterator = (list)->next; \ iterator != list && (safe = iterator->next); iterator = safe) -#define od_list_foreach_with_start(list, iterator) \ - for (; iterator != list; \ - iterator = (iterator)->next) +#define od_list_foreach_with_start(list, iterator) \ + for (; iterator != list; iterator = (iterator)->next) #endif /* ODYSSEY_LIST_H */ diff --git a/sources/rules.c b/sources/rules.c index 9724fa515..1460f5705 100644 --- a/sources/rules.c +++ b/sources/rules.c @@ -168,7 +168,8 @@ static inline int od_rule_update_auth(od_route_t *route, void **argv) rule->ldap_pool_size = group_rule->ldap_pool_size; rule->ldap_pool_ttl = group_rule->ldap_pool_ttl; rule->ldap_storage_creds_list = group_rule->ldap_storage_creds_list; - rule->ldap_storage_credentials_attr = group_rule->ldap_storage_credentials_attr; + rule->ldap_storage_credentials_attr = + group_rule->ldap_storage_credentials_attr; #endif rule->auth_module = group_rule->auth_module; @@ -182,8 +183,8 @@ static inline int od_rule_update_auth(od_route_t *route, void **argv) return 0; } -void od_rules_group_checker_run(void *arg) -{ +void od_rules_group_checker_run(void *arg) +{ od_group_checker_run_args *args = (od_group_checker_run_args *)arg; od_rule_t *group_rule = args->rule; od_group_t *group = group_rule->group; @@ -195,7 +196,7 @@ void od_rules_group_checker_run(void *arg) od_debug(&instance->logger, "group_checker", NULL, NULL, "start group checking"); - + /* create internal auth client */ od_client_t *group_checker_client; group_checker_client = @@ -229,7 +230,8 @@ void od_rules_group_checker_run(void *arg) od_router_status_to_str(status)); if (status != OD_ROUTER_OK) { - od_error(&instance->logger, "group_checker", group_checker_client, NULL, + od_error(&instance->logger, "group_checker", + group_checker_client, NULL, "route rule group_checker failed: %s", od_router_status_to_str(status)); return; @@ -248,12 +250,16 @@ void od_rules_group_checker_run(void *arg) continue; if (rule->pool->routing != OD_RULE_POOL_CLIENT_VISIBLE) continue; - if (rule->db_is_default == 1 || rule->user_is_default == 1) + if (rule->db_is_default == 1 || + rule->user_is_default == 1) continue; /* attach client to some route */ - status = od_router_attach(router, group_checker_client, false); - od_debug(&instance->logger, "group_checker", group_checker_client, NULL, + status = od_router_attach(router, group_checker_client, + false); + od_debug( + &instance->logger, "group_checker", + group_checker_client, NULL, "attaching group_checker client to backend connection status: %s", od_router_status_to_str(status)); @@ -264,59 +270,75 @@ void od_rules_group_checker_run(void *arg) } od_server_t *server; server = group_checker_client->server; - od_debug(&instance->logger, "group_checker", group_checker_client, server, - "attached to server %s%.*s", server->id.id_prefix, - (int)sizeof(server->id.id), server->id.id); - + od_debug(&instance->logger, "group_checker", + group_checker_client, server, + "attached to server %s%.*s", + server->id.id_prefix, + (int)sizeof(server->id.id), server->id.id); + /* connect to server, if necessary */ if (server->io.io == NULL) { - rc = od_backend_connect(server, "group_checker", NULL, + rc = od_backend_connect(server, "group_checker", + NULL, group_checker_client); if (rc == NOT_OK_RESPONSE) { od_debug( - &instance->logger, "group_checker", + &instance->logger, + "group_checker", group_checker_client, server, "backend connect failed, retry after 1 sec"); - od_router_close(router, group_checker_client); + od_router_close(router, + group_checker_client); /* 1 second soft interval */ machine_sleep(1000); continue; } } - for (int retry = 0; retry < group->check_retry; ++retry) { - char* qry = (char*)malloc(OD_QRY_MAX_SZ * sizeof(char)); - od_group_qry_format(qry, group->group_query, rule->user_name); - - msg = od_query_do(server, "group_checker", qry, NULL); + for (int retry = 0; retry < group->check_retry; + ++retry) { + char *qry = (char *)malloc(OD_QRY_MAX_SZ * + sizeof(char)); + od_group_qry_format(qry, group->group_query, + rule->user_name); + + msg = od_query_do(server, "group_checker", qry, + NULL); free(qry); if (msg != NULL) { - rc = od_group_parse_val_datarow(msg, &is_group_member); + rc = od_group_parse_val_datarow( + msg, &is_group_member); machine_msg_free(msg); - od_router_close(router, group_checker_client); + od_router_close(router, + group_checker_client); } else { od_debug( - &instance->logger, "group_checker", + &instance->logger, + "group_checker", group_checker_client, server, "receive msg failed, closing backend connection"); rc = NOT_OK_RESPONSE; - od_router_close(router, group_checker_client); + od_router_close(router, + group_checker_client); break; } if (rc == OK_RESPONSE) { - od_debug( - &instance->logger, "group_checker", - group_checker_client, server, - "group check result is %d", - is_group_member); - - if (is_group_member && rule->is_group_member == 0) { - void *argv[] = { rule, group_rule }; - od_router_foreach(router, - od_rule_update_auth, - argv); + od_debug(&instance->logger, + "group_checker", + group_checker_client, server, + "group check result is %d", + is_group_member); + + if (is_group_member && + rule->is_group_member == 0) { + void *argv[] = { rule, + group_rule }; + od_router_foreach( + router, + od_rule_update_auth, + argv); } break; @@ -331,8 +353,8 @@ void od_rules_group_checker_run(void *arg) } if (group->online == 0) { - od_debug(&instance->logger, "group_checker", group_checker_client, - NULL, + od_debug(&instance->logger, "group_checker", + group_checker_client, NULL, "deallocating obsolete group_checker"); od_client_free(group_checker_client); od_group_free(group); @@ -345,7 +367,7 @@ void od_rules_group_checker_run(void *arg) } od_retcode_t od_rules_groups_checkers_run(od_logger_t *logger, - od_rules_t *rules) + od_rules_t *rules) { od_list_t *i; od_list_foreach(&rules->rules, i) @@ -353,7 +375,8 @@ od_retcode_t od_rules_groups_checkers_run(od_logger_t *logger, od_rule_t *rule; rule = od_container_of(i, od_rule_t, link); if (rule->group) { - od_group_checker_run_args *args = malloc(sizeof(od_group_checker_run_args)); + od_group_checker_run_args *args = + malloc(sizeof(od_group_checker_run_args)); args->rules = rules; args->rule = rule; args->i_copy = i->next; @@ -362,8 +385,9 @@ od_retcode_t od_rules_groups_checkers_run(od_logger_t *logger, coroutine_id = machine_coroutine_create( od_rules_group_checker_run, args); if (coroutine_id == INVALID_COROUTINE_ID) { - od_error(logger, "system", NULL, NULL, - "failed to start group_checker coroutine"); + od_error( + logger, "system", NULL, NULL, + "failed to start group_checker coroutine"); return NOT_OK_RESPONSE; } diff --git a/sources/rules.h b/sources/rules.h index cc548b8e4..33680f559 100644 --- a/sources/rules.h +++ b/sources/rules.h @@ -214,6 +214,6 @@ od_rule_auth_t *od_rules_auth_add(od_rule_t *); void od_rules_auth_free(od_rule_auth_t *); od_retcode_t od_rules_groups_checkers_run(od_logger_t *logger, - od_rules_t *rules); + od_rules_t *rules); #endif /* ODYSSEY_RULES_H */ \ No newline at end of file