diff --git a/src/apps/relay/dbdrivers/dbd_mongo.c b/src/apps/relay/dbdrivers/dbd_mongo.c index da28fe6..e3d50fb 100644 --- a/src/apps/relay/dbdrivers/dbd_mongo.c +++ b/src/apps/relay/dbdrivers/dbd_mongo.c @@ -1318,7 +1318,7 @@ static int mongo_del_admin_user(const u08bits *usname) return ret; } -static int mongo_list_admin_users(void) +static int mongo_list_admin_users(int no_print) { const char * collection_name = "admin_user"; mongoc_collection_t * collection = mongo_get_collection(collection_name); @@ -1352,6 +1352,7 @@ static int mongo_list_admin_users(void) bson_iter_t iter; bson_iter_t iter_realm; const char * value; + ret = 0; while (mongoc_cursor_next(cursor, &item)) { if (bson_iter_init(&iter, item) && bson_iter_find(&iter, "name") && BSON_ITER_HOLDS_UTF8(&iter)) { value = bson_iter_utf8(&iter, &length); @@ -1360,16 +1361,18 @@ static int mongo_list_admin_users(void) if (bson_iter_init(&iter_realm, item) && bson_iter_find(&iter_realm, "realm") && BSON_ITER_HOLDS_UTF8(&iter_realm)) { realm = bson_iter_utf8(&iter_realm, &length); } - if(realm && *realm) { - printf("%s[%s]\n", value, realm); - } else { - printf("%s\n", value); + ++ret; + if(!no_print) { + if(realm && *realm) { + printf("%s[%s]\n", value, realm); + } else { + printf("%s\n", value); + } } } } } mongoc_cursor_destroy(cursor); - ret = 0; } mongoc_collection_destroy(collection); bson_destroy(&query); diff --git a/src/apps/relay/dbdrivers/dbd_mysql.c b/src/apps/relay/dbdrivers/dbd_mysql.c index 068cc04..464d535 100644 --- a/src/apps/relay/dbdrivers/dbd_mysql.c +++ b/src/apps/relay/dbdrivers/dbd_mysql.c @@ -1189,7 +1189,7 @@ static int mysql_del_admin_user(const u08bits *usname) return ret; } -static int mysql_list_admin_users(void) +static int mysql_list_admin_users(int no_print) { int ret = -1; char statement[TURN_LONG_STRING_SIZE]; @@ -1207,12 +1207,14 @@ static int mysql_list_admin_users(void) } else if(mysql_field_count(myc)!=2) { TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Unknown error retrieving MySQL DB information: %s\n",statement); } else { + ret = 0; for(;;) { MYSQL_ROW row = mysql_fetch_row(mres); if(!row) { break; } else { - if(row[0]) { + ++ret; + if(row[0] && !no_print) { if(row[1] && row[1][0]) { printf("%s[%s]\n",row[0],row[1]); } else { @@ -1221,7 +1223,6 @@ static int mysql_list_admin_users(void) } } } - ret = 0; } if(mres) diff --git a/src/apps/relay/dbdrivers/dbd_pgsql.c b/src/apps/relay/dbdrivers/dbd_pgsql.c index c94ab1d..d107af9 100644 --- a/src/apps/relay/dbdrivers/dbd_pgsql.c +++ b/src/apps/relay/dbdrivers/dbd_pgsql.c @@ -920,7 +920,7 @@ static int pgsql_del_admin_user(const u08bits *usname) return ret; } -static int pgsql_list_admin_users(void) +static int pgsql_list_admin_users(int no_print) { int ret = -1; char statement[TURN_LONG_STRING_SIZE]; @@ -934,9 +934,11 @@ static int pgsql_list_admin_users(void) TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Error retrieving PostgreSQL DB information: %s\n",PQerrorMessage(pqc)); } else { int i = 0; + ret = 0; for(i=0;i\r\n"); } -static void https_finish_page(struct str_buffer *sb, ioa_socket_handle s) +static void https_finish_page(struct str_buffer *sb, ioa_socket_handle s, int cclose) { str_buffer_append(sb,"\r\n\r\n"); @@ -1544,6 +1544,9 @@ static void https_finish_page(struct str_buffer *sb, ioa_socket_handle s) send_str_from_ioa_socket_tcp(s,TURN_SOFTWARE); send_str_from_ioa_socket_tcp(s,"\r\n"); send_str_from_ioa_socket_tcp(s,get_http_date_header()); + if(cclose) { + send_str_from_ioa_socket_tcp(s,"Connection: close"); + } send_str_from_ioa_socket_tcp(s,"Content-Type: text/html; charset=UTF-8\r\nContent-Length: "); send_ulong_from_ioa_socket_tcp(s,str_buffer_get_str_len(sb)); @@ -1574,18 +1577,31 @@ static void write_https_logon_page(ioa_socket_handle s) https_print_top_page_header(sb); - str_buffer_append(sb,"

\r\n"); - str_buffer_append(sb,"
\r\n"); - str_buffer_append(sb,"
Admin user information: user name:

password:


\r\n"); - str_buffer_append(sb,"
\r\n"); + int we_have_admin_users = 0; + const turn_dbdriver_t * dbd = get_dbdriver(); + if (dbd && dbd->list_admin_users) { + int ausers = dbd->list_admin_users(1); + if(ausers>0) { + we_have_admin_users = 1; + } + } - https_finish_page(sb,s); + if(!we_have_admin_users) { + str_buffer_append(sb,"
To use the HTTPS admin connection, you have to set the database table admin_user with the admin user accounts.
\r\n"); + } else { + str_buffer_append(sb,"

\r\n"); + str_buffer_append(sb,"
\r\n"); + str_buffer_append(sb,"
Admin user information: user name:

password:


\r\n"); + str_buffer_append(sb,"
\r\n"); + } + + https_finish_page(sb,s,!we_have_admin_users); } } @@ -1676,7 +1692,7 @@ static void write_https_home_page(ioa_socket_handle s) str_buffer_append(sb,"\r\n"); str_buffer_append(sb,"\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2132,7 +2148,7 @@ static void write_pc_page(ioa_socket_handle s) str_buffer_append(sb,"\r\n\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2364,7 +2380,7 @@ static void write_ps_page(ioa_socket_handle s, const char* client_protocol, cons str_buffer_append_sz(sb,total_sz); str_buffer_append(sb,"
\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2517,7 +2533,7 @@ static void write_users_page(ioa_socket_handle s, const u08bits *add_user, const str_buffer_append_sz(sb,total_sz); str_buffer_append(sb,"
\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2651,7 +2667,7 @@ static void write_shared_secrets_page(ioa_socket_handle s, const char* add_secre str_buffer_append_sz(sb,total_sz); str_buffer_append(sb,"
\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2784,7 +2800,7 @@ static void write_origins_page(ioa_socket_handle s, const char* add_origin, cons str_buffer_append_sz(sb,total_sz); str_buffer_append(sb,"
\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -2937,7 +2953,7 @@ static void write_https_oauth_show_keys(ioa_socket_handle s, const char* kid) } } - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } @@ -3173,7 +3189,7 @@ static void write_https_oauth_page(ioa_socket_handle s, const char* add_kid, con str_buffer_append_sz(sb,total_sz); str_buffer_append(sb,"
\r\n"); - https_finish_page(sb,s); + https_finish_page(sb,s,0); } } } diff --git a/src/apps/relay/userdb.c b/src/apps/relay/userdb.c index 0fdda26..044bf74 100644 --- a/src/apps/relay/userdb.c +++ b/src/apps/relay/userdb.c @@ -775,7 +775,7 @@ static int list_users(u08bits *realm, int is_admin) if (dbd) { if(is_admin) { if(dbd->list_admin_users) { - (*dbd->list_admin_users)(); + (*dbd->list_admin_users)(0); } } else { if(dbd->list_users) {