/[LeafOK_CVS]/lbbs/src/database.c
ViewVC logotype

Contents of /lbbs/src/database.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (show annotations)
Wed Nov 26 14:38:27 2025 UTC (3 months, 2 weeks ago) by sysadm
Branch: MAIN
Changes since 1.25: +23 -3 lines
Content type: text/x-csrc
Skip verifying CA cert if conf/ca_cert.pem does not exist

1 /* SPDX-License-Identifier: GPL-3.0-or-later */
2 /*
3 * database
4 * - configuration and function of DB connection
5 *
6 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 */
8
9 #ifdef HAVE_CONFIG_H
10 #include "config.h"
11 #endif
12
13 #include "common.h"
14 #include "database.h"
15 #include "log.h"
16 #include <errno.h>
17 #include <fcntl.h>
18 #include <mysql.h>
19 #include <stdio.h>
20 #include <string.h>
21 #include <sys/stat.h>
22
23 // Global declaration for database
24 char DB_ca_cert[FILE_PATH_LEN] = "conf/ca_cert.pem";
25 char DB_host[DB_host_max_len + 1];
26 char DB_username[DB_username_max_len + 1];
27 char DB_password[DB_password_max_len + 1];
28 char DB_database[DB_database_max_len + 1];
29 char DB_timezone[DB_timezone_max_len + 1];
30
31 MYSQL *db_open()
32 {
33 MYSQL *db = NULL;
34 #ifdef HAVE_MARIADB_CLIENT
35 my_bool verify_server_cert = 0;
36 #else
37 unsigned int ssl_mode = SSL_MODE_PREFERRED;
38 #endif
39 char sql[SQL_BUFFER_LEN];
40 int fd;
41
42 db = mysql_init(NULL);
43 if (db == NULL)
44 {
45 log_error("mysql_init() failed\n");
46 return NULL;
47 }
48
49 fd = open(DB_ca_cert, O_RDONLY);
50 if (fd == -1)
51 {
52 if (errno != ENOENT)
53 {
54 log_error("open(%s) error: %d\n", DB_ca_cert, errno);
55 }
56 }
57 else
58 {
59 close(fd);
60 #ifndef HAVE_MARIADB_CLIENT
61 ssl_mode = SSL_MODE_VERIFY_CA;
62 #endif
63 }
64
65 if (mysql_ssl_set(db, NULL, NULL, DB_ca_cert, NULL, NULL) != 0)
66 {
67 log_error("mysql_ssl_set() error\n");
68 return NULL;
69 }
70
71 #ifdef HAVE_MARIADB_CLIENT
72 if (mysql_optionsv(db, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &verify_server_cert) != 0)
73 {
74 log_error("mysql_optionsv() error\n");
75 return NULL;
76 }
77 #else
78 if (mysql_options(db, MYSQL_OPT_SSL_MODE, &ssl_mode) != 0)
79 {
80 log_error("mysql_options() error\n");
81 return NULL;
82 }
83 #endif
84
85 if (mysql_real_connect(db, DB_host, DB_username, DB_password, DB_database,
86 0, NULL, 0) == NULL)
87 {
88 log_error("mysql_real_connect() error: %s\n", mysql_error(db));
89 mysql_close(db);
90 return NULL;
91 }
92
93 if (mysql_set_character_set(db, "utf8") != 0)
94 {
95 log_error("Set character set error: %s\n", mysql_error(db));
96 mysql_close(db);
97 return NULL;
98 }
99
100 snprintf(sql, sizeof(sql),
101 "SET time_zone = '%s'",
102 DB_timezone);
103
104 if (mysql_query(db, sql) != 0)
105 {
106 log_error("Set timezone error: %s\n", mysql_error(db));
107 mysql_close(db);
108 return NULL;
109 }
110
111 return db;
112 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1