Annotation of mqtt/src/accmqtt.c, revision 1.3.2.1
1.3.2.1 ! misho 1: /*************************************************************************
! 2: * (C) 2011 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
! 3: * by Michael Pounov <misho@openbsd-bg.org>
! 4: *
! 5: * $Author: misho $
! 6: * $Id: global.h,v 1.4 2012/07/03 08:57:04 misho Exp $
! 7: *
! 8: **************************************************************************
! 9: The ELWIX and AITNET software is distributed under the following
! 10: terms:
! 11:
! 12: All of the documentation and software included in the ELWIX and AITNET
! 13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
! 14:
! 15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
! 16: by Michael Pounov <misho@elwix.org>. All rights reserved.
! 17:
! 18: Redistribution and use in source and binary forms, with or without
! 19: modification, are permitted provided that the following conditions
! 20: are met:
! 21: 1. Redistributions of source code must retain the above copyright
! 22: notice, this list of conditions and the following disclaimer.
! 23: 2. Redistributions in binary form must reproduce the above copyright
! 24: notice, this list of conditions and the following disclaimer in the
! 25: documentation and/or other materials provided with the distribution.
! 26: 3. All advertising materials mentioning features or use of this software
! 27: must display the following acknowledgement:
! 28: This product includes software developed by Michael Pounov <misho@elwix.org>
! 29: ELWIX - Embedded LightWeight unIX and its contributors.
! 30: 4. Neither the name of AITNET nor the names of its contributors
! 31: may be used to endorse or promote products derived from this software
! 32: without specific prior written permission.
! 33:
! 34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
! 35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 44: SUCH DAMAGE.
! 45: */
1.2 misho 46: #include "global.h"
47:
48:
49: extern const char sql_schema[];
50:
51:
52: /*
53: * mqtt_rtlm_log() Log database connection message
54: *
55: * @fmt = format string
56: * @... = argument list
57: * return: none
58: */
59: static void
60: mqtt_rtlm_log(const char *fmt, ...)
61: {
62: va_list lst;
63:
64: va_start(lst, fmt);
65: vsyslog(LOG_ERR, fmt, lst);
66: va_end(lst);
67: }
1.3 misho 68: #define MQTT_RTLM_LOG(_sql) (assert((_sql)), mqtt_rtlm_log("Error:: %s(%d) SQL #%d - %s", \
69: __func__, __LINE__, \
1.2 misho 70: sqlite3_errcode((_sql)), sqlite3_errmsg((_sql))))
71:
1.3 misho 72: /* library pre-loaded actions */
73: void
74: _init()
75: {
76: sqlite3_initialize();
77: }
78:
79: void
80: _fini()
81: {
82: sqlite3_shutdown();
83: }
84:
1.2 misho 85:
86: /*
87: * mqtt_rtlm_open() Open database connection
88: *
89: * @cfg = loaded config
90: * return: NULL error or SQL handle
91: */
92: sqlite3 *
1.3 misho 93: mqtt_rtlm_open(cfg_root_t *cfg)
1.2 misho 94: {
95: sqlite3 *sql = NULL;
96: const char *str = NULL;
97:
98: if (!cfg)
99: return NULL;
100:
1.3 misho 101: str = (const char*) cfg_getAttribute(cfg, "mqtt_acc", "name");
1.2 misho 102: if (!str) {
103: mqtt_rtlm_log("Error:: Unknown database name ...\n");
104: return NULL;
105: }
106:
107: if (sqlite3_open_v2(str, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) {
108: MQTT_RTLM_LOG(sql);
109: sqlite3_close(sql);
110: return NULL;
111: }
112:
113: if (sqlite3_exec(sql, sql_schema, NULL, NULL, NULL)) {
114: MQTT_RTLM_LOG(sql);
115: sqlite3_close(sql);
116: return NULL;
117: }
1.3 misho 118:
1.2 misho 119: return sql;
120: }
121:
122: /*
123: * mqtt_rtlm_close() Close database connection
124: *
125: * @sql = SQL handle
126: * return: none
127: */
128: void
129: mqtt_rtlm_close(sqlite3 *sql)
130: {
131: sqlite3_close(sql);
132: }
133:
134: /*
135: * mqtt_rtlm_login() Verify login account
136: *
137: * @cfg = loaded config
138: * @sql = SQL handle
139: * @user = username
140: * @pass = password
141: * return: -1 error, 0 ALLOW and 1 REJECT
142: */
143: int
1.3 misho 144: mqtt_rtlm_login(cfg_root_t *cfg, sqlite3 *sql, const char *user, const char *pass)
1.2 misho 145: {
146: /* insert into Users values (NULL, "", "", 1, strftime('%s','now')); */
147: int ret = 0;
148: sqlite3_stmt *stmt;
1.3 misho 149: char *str, *psStmt;
1.2 misho 150:
151: if (!sql)
152: return -1;
153:
1.3 misho 154: str = (char*) cfg_getAttribute(cfg, "mqtt_acc", "tbl_users");
1.2 misho 155: if (!str) {
156: mqtt_rtlm_log("Error:: not found users table name");
157: return -1;
158: }
1.3 misho 159: psStmt = sqlite3_mprintf("SELECT DISTINCT Username, Password, Access FROM %s "
160: "WHERE Username = '%q' AND Password = '%q' AND Access > 0;", str, user, pass);
1.2 misho 161:
1.3 misho 162: if (sqlite3_prepare_v2(sql, psStmt, strlen(psStmt), &stmt, NULL)) {
1.2 misho 163: MQTT_RTLM_LOG(sql);
1.3 misho 164: sqlite3_free(psStmt);
1.2 misho 165: return -1;
1.3 misho 166: } else
167: sqlite3_free(psStmt);
1.2 misho 168: while (sqlite3_step(stmt) == SQLITE_ROW) {
169: if (sqlite3_data_count(stmt) < 1)
170: ret = 0;
171: else
172: ret = 1;
173: break;
174: }
175: sqlite3_finalize(stmt);
176:
177: return ret;
178: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>