Annotation of mqtt/src/accmqtt.c, revision 1.1.2.4

1.1.2.1   misho       1: #include "global.h"
                      2: 
                      3: 
1.1.2.2   misho       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: }
1.1.2.3   misho      20: #define MQTT_RTLM_LOG(_sql)    (assert((_sql)), mqtt_rtlm_log("Error:: SQL #%d - %s", \
1.1.2.2   misho      21:                                        sqlite3_errcode((_sql)), sqlite3_errmsg((_sql))))
                     22: 
                     23: 
                     24: /*
                     25:  * mqtt_rtlm_open() Open database connection
                     26:  *
1.1.2.3   misho      27:  * @cfg = loaded config
1.1.2.2   misho      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)) {
1.1.2.3   misho      46:                MQTT_RTLM_LOG(sql);
1.1.2.2   misho      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: }
1.1.2.4 ! misho      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>