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>