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