1: #include "global.h"
2:
3:
4: /*
5: * mqtt_rtlm_log() Log database connection message
6: *
7: * @fmt = format string
8: * @... = argument list
9: * return: none
10: */
11: static void
12: mqtt_rtlm_log(const char *fmt, ...)
13: {
14: va_list lst;
15:
16: va_start(lst, fmt);
17: vsyslog(LOG_ERR, fmt, lst);
18: va_end(lst);
19: }
20: #define MQTT_RTLM_LOG(_sql) (assert((_sql)), mqtt_rtlm_log("Error:: SQL #%d - %s", \
21: sqlite3_errcode((_sql)), sqlite3_errmsg((_sql))))
22:
23:
24: /*
25: * mqtt_rtlm_open() Open database connection
26: *
27: * @cfg = loaded config
28: * return: NULL error or SQL handle
29: */
30: sqlite3 *
31: mqtt_rtlm_open(sl_config *cfg)
32: {
33: sqlite3 *sql = NULL;
34: const char *str = NULL;
35:
36: if (!cfg)
37: return NULL;
38:
39: str = (const char*) cfg_GetAttribute(cfg, CFG("mqtt_acc"), CFG("name"));
40: if (!str) {
41: mqtt_rtlm_log("Error:: Unknown database name ...\n");
42: return NULL;
43: }
44:
45: if (sqlite3_open_v2(str, &sql, SQLITE_OPEN_READONLY, NULL)) {
46: MQTT_RTLM_LOG(sql);
47: sqlite3_close(sql);
48: return NULL;
49: }
50:
51: return sql;
52: }
53:
54: /*
55: * mqtt_rtlm_close() Close database connection
56: *
57: * @sql = SQL handle
58: * return: none
59: */
60: void
61: mqtt_rtlm_close(sqlite3 *sql)
62: {
63: sqlite3_close(sql);
64: }
65:
66: /*
67: * mqtt_rtlm_login() Verify login account
68: *
69: * @cfg = loaded config
70: * @sql = SQL handle
71: * @user = username
72: * @pass = password
73: * @... = arguments list
74: * return: -1 error, 0 ALLOW and 1 REJECT
75: */
76: int
77: mqtt_rtlm_login(sl_config *cfg, sqlite3 *sql, const char *user, const char *pass, ...)
78: {
79: /* insert into Users values (NULL, "", "", 1, strftime('%s','now')); */
80: int ret = 0;
81: sqlite3_stmt *stmt;
82: char *str, szStmt[BUFSIZ] = { 0 };
83:
84: if (!sql)
85: return -1;
86:
87: str = (char*) cfg_GetAttribute(cfg, CFG("mqtt_acc"), CFG("tbl_users"));
88: if (!str) {
89: mqtt_rtlm_log("Error:: not found users table name");
90: return -1;
91: }
92: snprintf(szStmt, sizeof szStmt, "SELECT DISTINCT Username, Password, Access FROM %s "
93: "WHERE Username = '%s' AND Password = '%s' AND Access > 0;", str, user, pass);
94:
95: if (sqlite3_prepare_v2(sql, szStmt, strlen(szStmt), &stmt, NULL)) {
96: MQTT_RTLM_LOG(sql);
97: return -1;
98: }
99: while (sqlite3_step(stmt) == SQLITE_ROW) {
100: if (sqlite3_data_count(stmt) < 1)
101: ret = 0;
102: else
103: ret = 1;
104: break;
105: }
106: sqlite3_finalize(stmt);
107:
108: return ret;
109: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>