#include #include #include int main(int argc, char *argv[]) { MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; unsigned long *lengths; #ifndef MARIADB_BASE_VERSION unsigned int mode; #endif my_bool verify; const char *host; unsigned int port; const char *user; const char *passwd; const char *db; const char *ca; if (argc != 7) { printf("Usage: %s host port db user passwd ca\n", argv[0]); return 1; } host = argv[1]; port = atoi(argv[2]); db = argv[3]; user = argv[4]; passwd = argv[5]; ca = argv[6]; /* -1 means to not start embedded server, just initialize client library */ mysql_library_init(-1, NULL, NULL); if (!mysql_init(&mysql)) { printf("mysql_init failed"); return 1; } /* Do not use embedded server */ mysql_options(&mysql, MYSQL_OPT_USE_REMOTE_CONNECTION, NULL); mysql_ssl_set(&mysql, NULL, NULL, ca, NULL, NULL); #ifndef MARIADB_BASE_VERSION /* Enforce SSL for MySQL client */ mode = SSL_MODE_REQUIRED; if (mysql_options(&mysql, MYSQL_OPT_SSL_MODE, &mode) != 0) { printf("mysql_options MYSQL_OPT_SSL_MODE failed: %s\n", mysql_error(&mysql)); return 1; } #endif /* Also enforce SSL for MariaDB client */ verify = 1; if (mysql_options(&mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &verify) != 0) { printf("mysql_options MYSQL_OPT_SSL_VERIFY_SERVER_CERT failed: %s\n", mysql_error(&mysql)); return 1; } if (!mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0)) { printf("mysql_real_connect failed: %s\n", mysql_error(&mysql)); return 1; } if (mysql_query(&mysql, "SHOW STATUS LIKE 'Ssl_cipher'") != 0) { printf("mysql_real_query failed: %s\n", mysql_error(&mysql)); return 1; } res = mysql_store_result(&mysql); if (!res) { printf("mysql_store_result failed: %s\n", mysql_error(&mysql)); return 1; } if (mysql_num_rows(res) != 1) { printf("mysql_num_rows returned incorrect number of rows\n"); return 1; } if (mysql_num_fields(res) != 2) { printf("mysql_num_fields returned incorrect number of fields\n"); return 1; } row = mysql_fetch_row(res); if (!row) { printf("mysql_fetch_row failed: %s\n", mysql_error(&mysql)); return 1; } lengths = mysql_fetch_lengths(res); if (!lengths) { printf("mysql_fetch_lengths failed: %s\n", mysql_error(&mysql)); return 1; } printf("Output: %.*s : %.*s\n", row[0] ? (int)lengths[0] : 4, row[0] ? row[0] : "NULL", row[1] ? (int)lengths[1] : 4, row[1] ? row[1] : "NULL"); mysql_close(&mysql); return 0; }