diff options
author | Ted Trask <ttrask01@yahoo.com> | 2013-09-26 13:27:21 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2013-09-26 13:27:21 +0000 |
commit | d44b92b01f42e62573ff952215b102552159beb0 (patch) | |
tree | 47f237723dfc632d17abc1e9dcfcb7dd54c9d2d5 | |
parent | fb00ff8f05dae3c110beceb929ea036e4cd14ae1 (diff) | |
download | acf-provisioning-d44b92b01f42e62573ff952215b102552159beb0.tar.bz2 acf-provisioning-d44b92b01f42e62573ff952215b102552159beb0.tar.xz |
Use acf.db library from acf-lib-0.6.0
-rw-r--r-- | provisioning-model.lua | 370 |
1 files changed, 150 insertions, 220 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index fd20d7e..c9fe6d3 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -6,6 +6,7 @@ require("posix") fs = require("acf.fs") format = require("acf.format") validator = require("acf.validator") +db = require("acf.db") require("luasql.postgres") require("session") @@ -21,8 +22,9 @@ local deletedevicescriptfile = "/etc/provisioning/delete_device.lua" local determineclassscriptfile = "/etc/provisioning/determine_class.lua" local processputscriptfile = "/etc/provisioning/process_put.lua" local scriptfiles = {updatedevicescriptfile, updatedeviceparamsscriptfile, deletedevicescriptfile, determineclassscriptfile, processputscriptfile} -local env -local con + +local provdb = db.create(db.engine.postgresql, DatabaseName, DatabaseUser, DatabasePassword) +provdb.table_creation_scripts = require("provisioning/provisioning-scripts") local saved_devices = {} local saved_device_params = {} @@ -32,8 +34,6 @@ local get_device local get_device_params local set_device_params -local table_creation_scripts = require("provisioning/provisioning-scripts") - -- ################################################################################ -- LOCAL FUNCTIONS local function assert (v, m) @@ -44,12 +44,6 @@ local function assert (v, m) return v, m end --- Escape special characters in sql statements -local escape = function(sql) - sql = sql or "" - return con:escape(sql) -end - local createdatabase = function() local result = {} local cmdresult, errtxt @@ -101,101 +95,37 @@ local deletedatabase = function() end local databaseconnect = function() - if not con then - -- create environment object - env = assert (luasql.postgres()) - -- connect to data source - local err - con, err = env:connect(DatabaseName, DatabaseUser, DatabasePassword) - if err and (string.match(err, 'Error connecting to database.') or string.match(string.lower(err), 'database "provisioning" does not exist')) then + local result = false + local res, err = pcall(function() + result = provdb.databaseconnect() + end) + if not res and err then + if string.match(err, 'Error connecting to database.') or string.match(string.lower(err), 'database "provisioning" does not exist') then createdatabase() - con, err = env:connect(DatabaseName, DatabaseUser, DatabasePassword) - if con then - -- Let's create all the tables from the start - for n,v in pairs(table_creation_scripts) do - if not string.match(n, "^_") then - runsqlcommand("SELECT * FROM "..escape(n).." LIMIT 1") - end + result = provdb.databaseconnect() + -- Let's create all the tables from the start + for n,v in pairs(provdb.table_creation_scripts) do + if not string.match(n, "^_") then + runsqlcommand("SELECT * FROM "..provdb.escape(n).." LIMIT 1") end end + else + assert(res, err) end - assert(con, err) - return true - end - return false -end - -local databasedisconnect = function() - if env then - env:close() - env = nil - end - if con then - con:close() - con = nil - end -end - -local runscript = function(script, in_transaction) - for i,scr in ipairs(script) do - runsqlcommand(scr, in_transaction) end + return result end -- This function is used by scripts, do not change prototype -runsqlcommand = function(sql, in_transaction) +runsqlcommand = function(sql, transaction) logevent(sql) - if in_transaction then assert(con:execute("SAVEPOINT before_command")) end - local res, err = con:execute(sql) - if not res and err then - -- Catch the error to see if it's caused by lack of table -logevent(err) - local table = string.match(err, "relation \"(%S+)\" does not exist") - if table and table_creation_scripts[table] then - if in_transaction then assert(con:execute("ROLLBACK TO before_command")) end - runscript(table_creation_scripts[table]) - runsqlcommand(sql) - else - assert(res, err) - end - else - if in_transaction then assert(con:execute("RELEASE SAVEPOINT before_command")) end - end + return provdb.runsqlcommand(sql, transaction) end -- This function is used by scripts, do not change prototype getselectresponse = function(sql, in_transaction) - local retval = {} - if in_transaction then assert(con:execute("SAVEPOINT before_select")) end - local res, err = pcall(function() logevent(sql) - local cur = assert (con:execute(sql)) - local row = cur:fetch ({}, "a") - while row do - local tmp = {} - for name,val in pairs(row) do - tmp[name] = val - end - retval[#retval + 1] = tmp - row = cur:fetch (row, "a") - end - cur:close() - end) - if not res and err then -logevent(err) - -- Catch the error to see if it's caused by lack of table - local table = string.match(err, "relation \"(%S+)\" does not exist") - if table and table_creation_scripts[table] then - if in_transaction then assert(con:execute("ROLLBACK TO before_select")) end - runscript(table_creation_scripts[table]) - return getselectresponse(sql) - else - assert(res, err) - end - else - if in_transaction then assert(con:execute("RELEASE SAVEPOINT before_select")) end - end - return retval + return provdb.getselectresponse(sql, transaction) end local validateparam @@ -333,7 +263,7 @@ list_templates = function() local connected = databaseconnect() local sql = "SELECT value AS filename, label, seq FROM provisioning_options WHERE param_id = (SELECT param_id FROM provisioning_params WHERE name = 'template') ORDER BY seq ASC, label ASC, value ASC" retval = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -375,7 +305,7 @@ get_template = function(self, clientdata) if filename and filename ~= "" then local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(filename).."' ORDER BY seq ASC, label ASC, value ASC" + local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."' ORDER BY seq ASC, label ASC, value ASC" local tmp = getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do @@ -386,7 +316,7 @@ get_template = function(self, clientdata) end end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -426,7 +356,7 @@ update_template = function(self, template, action, create) if success then local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(template.value.filename.value).."'" + local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(template.value.filename.value).."'" local tmp = getselectresponse(sql) if not create and (not tmp or #tmp == 0) then success = false @@ -437,15 +367,15 @@ update_template = function(self, template, action, create) end if success then if create then - sql = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='template'), '"..escape(template.value.label.value).."', '"..escape(template.value.filename.value).."', '"..escape(template.value.seq.value).."')" + sql = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='template'), '"..provdb.escape(template.value.label.value).."', '"..provdb.escape(template.value.filename.value).."', '"..provdb.escape(template.value.seq.value).."')" else - sql = "UPDATE provisioning_options SET (label, seq) = ('"..escape(template.value.label.value).."', '"..escape(template.value.seq.value).."') WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(template.value.filename.value).."'" + sql = "UPDATE provisioning_options SET (label, seq) = ('"..provdb.escape(template.value.label.value).."', '"..provdb.escape(template.value.seq.value).."') WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(template.value.filename.value).."'" end runsqlcommand(sql) fs.write_file(template.value.filename.value, string.gsub(format.dostounix(template.value.filecontent.value), "\n+$", "")) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then success = false @@ -474,19 +404,19 @@ delete_template = function(self, delreq) delreq.errtxt = "Failed to delete template" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(filename).."'" + local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.filename.errtxt = "Template does not exist" else -- Remove the template - sql = "DELETE FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(filename).."'" + sql = "DELETE FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."'" runsqlcommand(sql) -- Delete the template file os.remove(filename) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then delreq.errtxt = err @@ -503,7 +433,7 @@ list_class_groups = function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_class_groups ORDER BY seq ASC, label ASC" retval = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -524,7 +454,7 @@ get_class_group = function(self, clientdata) local res, err = pcall(function() local connected = databaseconnect() if class_group_id and class_group_id ~= "" then - sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'" + sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" tmp = getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do @@ -536,7 +466,7 @@ get_class_group = function(self, clientdata) else retval.class_group_id = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -572,7 +502,7 @@ update_class_group = function(self, group, action, create) local res, err = pcall(function() local connected = databaseconnect() if not create then - local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..escape(group.value.class_group_id.value).."'" + local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(group.value.class_group_id.value).."'" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -583,9 +513,9 @@ update_class_group = function(self, group, action, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_class_groups VALUES(DEFAULT, '"..escape(group.value.name.value).."', '"..escape(group.value.label.value).."', '"..escape(group.value.seq.value).."')" + sql = "INSERT INTO provisioning_class_groups VALUES(DEFAULT, '"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."')" runsqlcommand(sql, true) - sql = "SELECT class_group_id FROM provisioning_class_groups WHERE label='"..escape(group.value.label.value).."'" + sql = "SELECT class_group_id FROM provisioning_class_groups WHERE label='"..provdb.escape(group.value.label.value).."'" local tmp = getselectresponse(sql, true) if tmp and #tmp>0 then group.value.class_group_id = cfe({value=tmp[1].class_group_id, label="Class Group ID", readonly=true, seq=1}) @@ -593,14 +523,14 @@ update_class_group = function(self, group, action, create) error("Failed to insert class group", 0) end else - sql = "UPDATE provisioning_class_groups SET (name, label, seq) = ('"..escape(group.value.name.value).."', '"..escape(group.value.label.value).."', '"..escape(group.value.seq.value).."') WHERE class_group_id='"..escape(group.value.class_group_id.value).."'" + sql = "UPDATE provisioning_class_groups SET (name, label, seq) = ('"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."') WHERE class_group_id='"..provdb.escape(group.value.class_group_id.value).."'" runsqlcommand(sql, true) end sql = "COMMIT" runsqlcommand(sql) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -630,16 +560,16 @@ delete_class_group = function(self, delreq) delreq.errtxt = "Failed to delete class group" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'" + local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.class_group_id.errtxt = "Group does not exist" else - sql = "DELETE FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'" + sql = "DELETE FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" runsqlcommand(sql) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then delreq.errtxt = err @@ -656,7 +586,7 @@ list_classes = function() local connected = databaseconnect() local sql = "SELECT class_id, g.label AS group, g.name, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.seq ASC, g.label ASC, c.seq ASC, c.label ASC" retval = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -679,7 +609,7 @@ get_class = function(self, clientdata) local groups = {} local connected = databaseconnect() if class_id and class_id ~= "" then - local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" + local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" local tmp = getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do @@ -689,7 +619,7 @@ get_class = function(self, clientdata) end end -- Now, get the class-to-paramgroup mappings - sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id='"..escape(class_id).."'" + sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'" tmp = getselectresponse(sql) for i,g in ipairs(tmp) do groups[g.group_id] = true @@ -716,7 +646,7 @@ get_class = function(self, clientdata) group.value = g.group_id end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -749,7 +679,7 @@ update_class = function(self, class, action, create) local res, err = pcall(function() local connected = databaseconnect() if not create then - local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(class.value.class_id.value).."'" + local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -760,9 +690,9 @@ update_class = function(self, class, action, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_classes VALUES(DEFAULT, '"..escape(class.value.class_group_id.value).."', '"..escape(class.value.label.value).."', '"..escape(class.value.seq.value).."')" + sql = "INSERT INTO provisioning_classes VALUES(DEFAULT, '"..provdb.escape(class.value.class_group_id.value).."', '"..provdb.escape(class.value.label.value).."', '"..provdb.escape(class.value.seq.value).."')" runsqlcommand(sql, true) - sql = "SELECT class_id FROM provisioning_classes WHERE class_group_id='"..escape(class.value.class_group_id.value).."' AND label='"..escape(class.value.label.value).."'" + sql = "SELECT class_id FROM provisioning_classes WHERE class_group_id='"..provdb.escape(class.value.class_group_id.value).."' AND label='"..provdb.escape(class.value.label.value).."'" local tmp = getselectresponse(sql, true) if tmp and #tmp>0 then class.value.class_id = cfe({value=tmp[1].class_id, label="Class ID", readonly=true, seq=1}) @@ -770,15 +700,15 @@ update_class = function(self, class, action, create) error("Failed to insert class", 0) end else - sql = "UPDATE provisioning_classes SET (class_group_id, label, seq) = ('"..escape(class.value.class_group_id.value).."', '"..escape(class.value.label.value).."', '"..escape(class.value.seq.value).."') WHERE class_id='"..escape(class.value.class_id.value).."'" + sql = "UPDATE provisioning_classes SET (class_group_id, label, seq) = ('"..provdb.escape(class.value.class_group_id.value).."', '"..provdb.escape(class.value.label.value).."', '"..provdb.escape(class.value.seq.value).."') WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" runsqlcommand(sql, true) - sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..escape(class.value.class_id.value).."'" + sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" runsqlcommand(sql, true) end -- Insert the class to group entries for n,g in pairs(class.value.groups.value) do if g.value ~= "" then - sql = "INSERT INTO classes_to_param_groups VALUES('"..escape(class.value.class_id.value).."', '"..escape(g.value).."')" + sql = "INSERT INTO classes_to_param_groups VALUES('"..provdb.escape(class.value.class_id.value).."', '"..provdb.escape(g.value).."')" runsqlcommand(sql, true) end end @@ -786,7 +716,7 @@ update_class = function(self, class, action, create) sql = "COMMIT" runsqlcommand(sql) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -816,22 +746,22 @@ delete_class = function(self, delreq) delreq.errtxt = "Failed to delete class" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" + local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.class_id.errtxt = "Class does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) - sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..escape(class_id).."'" + sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'" runsqlcommand(sql, true) - sql = "DELETE FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" + sql = "DELETE FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" runsqlcommand(sql, true) sql = "COMMIT" runsqlcommand(sql) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -849,7 +779,7 @@ list_groups = function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_groups ORDER BY seq ASC, name ASC, label ASC" retval = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -880,7 +810,7 @@ get_group = function(self, clientdata) retval.editable.option[#retval.editable.option + 1] = {value=p.param_id, label=p.label} p.seq = i if p.type == "select" then - sql = "SELECT * FROM provisioning_options WHERE param_id='"..escape(p.param_id).."' ORDER BY seq ASC" + sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(p.param_id).."' ORDER BY seq ASC" p.option = getselectresponse(sql) or {} end if p.type == "boolean" then @@ -890,7 +820,7 @@ get_group = function(self, clientdata) retval.defaults.value[p.param_id] = p end if group_id and group_id ~= "" then - sql = "SELECT * FROM provisioning_groups WHERE group_id='"..escape(group_id).."'" + sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" tmp = getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do @@ -900,7 +830,7 @@ get_group = function(self, clientdata) end end -- Now, get the paramgroup-to-param mappings - sql = "SELECT * FROM param_groups_to_params WHERE group_id='"..escape(group_id).."'" + sql = "SELECT * FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'" tmp = getselectresponse(sql) for i,p in ipairs(tmp) do retval.params.value[#retval.params.value + 1] = p.param_id @@ -918,7 +848,7 @@ get_group = function(self, clientdata) else retval.group_id = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -964,7 +894,7 @@ update_group = function(self, group, action, create) local res, err = pcall(function() local connected = databaseconnect() if not create then - local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..escape(group.value.group_id.value).."'" + local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -975,9 +905,9 @@ update_group = function(self, group, action, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_groups VALUES(DEFAULT, '"..escape(group.value.name.value).."', '"..escape(group.value.label.value).."', '"..escape(group.value.seq.value).."')" + sql = "INSERT INTO provisioning_groups VALUES(DEFAULT, '"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."')" runsqlcommand(sql, true) - sql = "SELECT group_id FROM provisioning_groups WHERE name='"..escape(group.value.name.value).."' AND label='"..escape(group.value.label.value).."'" + sql = "SELECT group_id FROM provisioning_groups WHERE name='"..provdb.escape(group.value.name.value).."' AND label='"..provdb.escape(group.value.label.value).."'" local tmp = getselectresponse(sql, true) if tmp and #tmp>0 then group.value.group_id = cfe({value=tmp[1].group_id, label="Group ID", readonly=true, seq=1}) @@ -985,9 +915,9 @@ update_group = function(self, group, action, create) error("Failed to insert parameter group", 0) end else - sql = "UPDATE provisioning_groups SET (name, label, seq) = ('"..escape(group.value.name.value).."', '"..escape(group.value.label.value).."', '"..escape(group.value.seq.value).."') WHERE group_id='"..escape(group.value.group_id.value).."'" + sql = "UPDATE provisioning_groups SET (name, label, seq) = ('"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."') WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" runsqlcommand(sql, true) - sql = "DELETE FROM param_groups_to_params WHERE group_id='"..escape(group.value.group_id.value).."'" + sql = "DELETE FROM param_groups_to_params WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" runsqlcommand(sql, true) end -- Reverse the editable table for ease of use below @@ -997,20 +927,20 @@ update_group = function(self, group, action, create) end -- Insert the group to param entries for i,p in ipairs(group.value.params.value) do - sql = "INSERT INTO param_groups_to_params VALUES('"..escape(group.value.group_id.value).."', '"..escape(p).."', " + sql = "INSERT INTO param_groups_to_params VALUES('"..provdb.escape(group.value.group_id.value).."', '"..provdb.escape(p).."', " if group.value.defaults.value[p].value ~= group.value.defaults.value[p].default then - sql = sql.."'"..escape(tostring(group.value.defaults.value[p].value)).."'" + sql = sql.."'"..provdb.escape(tostring(group.value.defaults.value[p].value)).."'" else sql = sql.."null" end - sql = sql..", '"..escape(tostring(reverseeditable[p] ~= nil)).."')" + sql = sql..", '"..provdb.escape(tostring(reverseeditable[p] ~= nil)).."')" runsqlcommand(sql, true) end sql = "COMMIT" runsqlcommand(sql) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1040,22 +970,22 @@ delete_group = function(self, delreq) delreq.errtxt = "Failed to delete parameter group" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..escape(group_id).."'" + local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.group_id.errtxt = "Group does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) - sql = "DELETE FROM param_groups_to_params WHERE group_id='"..escape(group_id).."'" + sql = "DELETE FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'" runsqlcommand(sql, true) - sql = "DELETE FROM provisioning_groups WHERE group_id='"..escape(group_id).."'" + sql = "DELETE FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" runsqlcommand(sql, true) sql = "COMMIT" runsqlcommand(sql) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1073,7 +1003,7 @@ list_params = function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_params ORDER BY seq ASC, name ASC, label ASC" retval = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1099,7 +1029,7 @@ get_param = function(self, clientdata) local res, err = pcall(function() local connected = databaseconnect() if param_id and param_id ~= "" then - sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(param_id).."'" + sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" tmp = getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do @@ -1111,7 +1041,7 @@ get_param = function(self, clientdata) else retval.param_id = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1153,7 +1083,7 @@ update_param = function(self, param, action, create) local res, err = pcall(function() local connected = databaseconnect() if not create then - local sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(param.value.param_id.value).."'" + local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param.value.param_id.value).."'" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -1164,9 +1094,9 @@ update_param = function(self, param, action, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_params VALUES(DEFAULT, '"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."', '"..escape(param.value.regexp.value).."', '"..escape(format.dostounix(param.value.validate.value)).."')" + sql = "INSERT INTO provisioning_params VALUES(DEFAULT, '"..provdb.escape(param.value.name.value).."', '"..provdb.escape(param.value.type.value).."', '"..provdb.escape(param.value.label.value).."', '"..provdb.escape(param.value.descr.value).."', '"..provdb.escape(param.value.value.value).."', '"..provdb.escape(param.value.seq.value).."', '"..provdb.escape(param.value.regexp.value).."', '"..provdb.escape(format.dostounix(param.value.validate.value)).."')" runsqlcommand(sql, true) - sql = "SELECT param_id FROM provisioning_params WHERE name='"..escape(param.value.name.value).."' AND label='"..escape(param.value.label.value).."'" + sql = "SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(param.value.name.value).."' AND label='"..provdb.escape(param.value.label.value).."'" local tmp = getselectresponse(sql, true) if tmp and #tmp>0 then param.value.param_id = cfe({value=tmp[1].param_id, label="Param ID", readonly=true, seq=1}) @@ -1174,14 +1104,14 @@ update_param = function(self, param, action, create) error("Failed to insert parameter", 0); end else - sql = "UPDATE provisioning_params SET (name, type, label, descr, value, seq, regexp, validate) = ('"..escape(param.value.name.value).."', '"..escape(param.value.type.value).."', '"..escape(param.value.label.value).."', '"..escape(param.value.descr.value).."', '"..escape(param.value.value.value).."', '"..escape(param.value.seq.value).."', '"..escape(param.value.regexp.value).."', '"..escape(format.dostounix(param.value.validate.value)).."') WHERE param_id='"..escape(param.value.param_id.value).."'" + sql = "UPDATE provisioning_params SET (name, type, label, descr, value, seq, regexp, validate) = ('"..provdb.escape(param.value.name.value).."', '"..provdb.escape(param.value.type.value).."', '"..provdb.escape(param.value.label.value).."', '"..provdb.escape(param.value.descr.value).."', '"..provdb.escape(param.value.value.value).."', '"..provdb.escape(param.value.seq.value).."', '"..provdb.escape(param.value.regexp.value).."', '"..provdb.escape(format.dostounix(param.value.validate.value)).."') WHERE param_id='"..provdb.escape(param.value.param_id.value).."'" runsqlcommand(sql, true) end sql = "COMMIT" runsqlcommand(sql) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1211,22 +1141,22 @@ delete_param = function(self, delreq) delreq.errtxt = "Failed to delete parameter" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(param_id).."'" + local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.param_id.errtxt = "Parameter does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) - sql = "DELETE FROM provisioning_options WHERE param_id='"..escape(param_id).."'" + sql = "DELETE FROM provisioning_options WHERE param_id='"..provdb.escape(param_id).."'" runsqlcommand(sql, true) - sql = "DELETE FROM provisioning_params WHERE param_id='"..escape(param_id).."'" + sql = "DELETE FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" runsqlcommand(sql, true) sql = "COMMIT" runsqlcommand(sql) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1252,7 +1182,7 @@ list_devices = function() end retval[reverse_device_id[d.device_id]][d.group] = d.class end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1282,7 +1212,7 @@ get_device = function(self, device_id, create) local connected = databaseconnect() if not create and device_id and device_id ~= "" then -- Get the device-to-class mappings - local sql = "SELECT class_id FROM devices_to_classes WHERE device_id='"..escape(device_id).."'" + local sql = "SELECT class_id FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."'" local tmp = getselectresponse(sql) for i,g in ipairs(tmp) do classes[g.class_id] = true @@ -1301,7 +1231,7 @@ get_device = function(self, device_id, create) class.value = c.class_id end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1333,7 +1263,7 @@ update_device = function(self, device, action, create) local res, err = pcall(function() local connected = databaseconnect() if not create then - local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..escape(device.value.device_id.value).."' LIMIT 1" + local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device.value.device_id.value).."' LIMIT 1" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -1353,12 +1283,12 @@ update_device = function(self, device, action, create) device.value.device_id.value = tmp[1].nextval end end - sql = "DELETE FROM devices_to_classes WHERE device_id='"..escape(device.value.device_id.value).."'" + sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device.value.device_id.value).."'" runsqlcommand(sql, true) -- Insert the device to class entries for n,c in pairs(device.value.classes.value) do if c.value ~= "" then - sql = "INSERT INTO devices_to_classes VALUES('"..escape(device.value.device_id.value).."', '"..escape(c.value).."')" + sql = "INSERT INTO devices_to_classes VALUES('"..provdb.escape(device.value.device_id.value).."', '"..provdb.escape(c.value).."')" runsqlcommand(sql, true) end end @@ -1370,7 +1300,7 @@ update_device = function(self, device, action, create) callscript(self, updatedevicescriptfile, device, saved_devices[device.value.device_id.value], get_device_params(self, device.value.device_id.value), s) saved_devices[device.value.device_id.value] = device end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1400,7 +1330,7 @@ delete_device = function(self, delreq) delreq.errtxt = "Failed to delete device" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..escape(device_id).."' LIMIT 1" + local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."' LIMIT 1" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.device_id.errtxt = "Device does not exist" @@ -1410,9 +1340,9 @@ delete_device = function(self, delreq) sql = "BEGIN TRANSACTION" runsqlcommand(sql) - sql = "DELETE FROM provisioning_values WHERE device_id='"..escape(device_id).."'" + sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(device_id).."'" runsqlcommand(sql, true) - sql = "DELETE FROM devices_to_classes WHERE device_id='"..escape(device_id).."'" + sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."'" runsqlcommand(sql, true) sql = "COMMIT" runsqlcommand(sql) @@ -1422,7 +1352,7 @@ delete_device = function(self, delreq) saved_devices[device_id] = nil saved_device_params[device_id] = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1451,7 +1381,7 @@ get_device_params = function(self, device_id, editable) local res, err = pcall(function() local connected = databaseconnect() -- First, just check to see if device_id exists - local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..escape(device_id).."' LIMIT 1" + local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."' LIMIT 1" local tmp = getselectresponse(sql) if tmp and #tmp > 0 then errtxt = nil @@ -1468,7 +1398,7 @@ get_device_params = function(self, device_id, editable) sql = "SELECT g.name AS group, g.label AS grouplabel, p.param_id, p.name, p.type, p.label, p.descr, p.seq, p.regexp, p.validate, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, CASE WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS default ".. "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) ".. - "WHERE d2t.device_id='"..escape(device_id).."'" + "WHERE d2t.device_id='"..provdb.escape(device_id).."'" if editable then sql = sql.." AND g2p.editable='t'" end @@ -1477,7 +1407,7 @@ get_device_params = function(self, device_id, editable) for i,p in ipairs(tmp) do -- Options if (p.type == "select") then - sql = "SELECT * FROM provisioning_options WHERE param_id='"..escape(p.param_id).."' ORDER BY seq ASC" + sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(p.param_id).."' ORDER BY seq ASC" p.option = getselectresponse(sql) or {} end -- Groups @@ -1499,7 +1429,7 @@ get_device_params = function(self, device_id, editable) end end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1528,7 +1458,7 @@ get_class_values = function(self, retval) local res, err = pcall(function() local connected = databaseconnect() -- First, just check to see if class_id exists - local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(retval.value.class_id.value).."'" + local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(retval.value.class_id.value).."'" local tmp = getselectresponse(sql) if tmp and #tmp > 0 then retval.errtxt = nil @@ -1538,7 +1468,7 @@ get_class_values = function(self, retval) local sql = "SELECT g.name AS group, p.name, p.type, CASE WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value ".. "FROM (provisioning_classes t JOIN classes_to_param_groups t2g USING(class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) ".. - "WHERE t.class_id='"..escape(retval.value.class_id.value).."'" + "WHERE t.class_id='"..provdb.escape(retval.value.class_id.value).."'" local tmp = getselectresponse(sql) -- Loop through the params and put them into the groups for i,p in ipairs(tmp) do @@ -1553,7 +1483,7 @@ get_class_values = function(self, retval) else retval.value.class_id.errtxt = "Failed to find Class ID" end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then retval.errtxt = err @@ -1580,7 +1510,7 @@ set_device_params = function(self, params, editable) local res, err = pcall(function() local connected = databaseconnect() success = validateparamcoded(self, params) - local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..escape(params.value.device_id.value).."' LIMIT 1" + local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(params.value.device_id.value).."' LIMIT 1" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -1593,7 +1523,7 @@ set_device_params = function(self, params, editable) runsqlcommand(sql) if not editable then -- Delete all values for this device (can't do this if only updating editable) - sql = "DELETE FROM provisioning_values WHERE device_id='"..escape(params.value.device_id.value).."'" + sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(params.value.device_id.value).."'" runsqlcommand(sql, true) end -- Loop through the groups and params @@ -1601,11 +1531,11 @@ set_device_params = function(self, params, editable) if v.type == "group" then for name,param in pairs(v.value) do if editable then - sql = "DELETE FROM provisioning_values WHERE device_id='"..escape(params.value.device_id.value).."' AND group_name='"..escape(group).."' AND param_id='"..escape(param.param_id).."'" + sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(params.value.device_id.value).."' AND group_name='"..provdb.escape(group).."' AND param_id='"..provdb.escape(param.param_id).."'" runsqlcommand(sql, true) end if param.value ~= param.default then - sql = "INSERT INTO provisioning_values VALUES('"..escape(params.value.device_id.value).."', '"..escape(group).."', '"..escape(param.param_id).."', '"..escape(tostring(param.value)).."')" + sql = "INSERT INTO provisioning_values VALUES('"..provdb.escape(params.value.device_id.value).."', '"..provdb.escape(group).."', '"..provdb.escape(param.param_id).."', '"..provdb.escape(tostring(param.value)).."')" runsqlcommand(sql, true) end end @@ -1624,7 +1554,7 @@ set_device_params = function(self, params, editable) end callscript(self, updatedeviceparamsscriptfile, p, tmp) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1652,7 +1582,7 @@ fetch_device_values = function(self, search) search.value.values = get_device_values(self, search.value.result.value[1].device_id) search.value.values.seq = 5 end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then search.errtxt = err @@ -1671,7 +1601,7 @@ get_device_values = function(self, device_id) local sql = "SELECT g.name AS group, p.name, p.type, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value ".. "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) ".. - "WHERE d2t.device_id='"..escape(device_id).."'" + "WHERE d2t.device_id='"..provdb.escape(device_id).."'" local tmp = getselectresponse(sql) -- Loop through the params and put them into the groups for i,p in ipairs(tmp) do @@ -1683,7 +1613,7 @@ get_device_values = function(self, device_id) end retval[p.group][p.name] = p.value end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1719,7 +1649,7 @@ get_search_options = function() for i,o in ipairs(blankopt) do retval.id.option[#retval.id.option + 1] = o end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1749,23 +1679,23 @@ search_device_values = function(self, search) sql = "SELECT d2t.device_id, " local group, param = string.match(search.value.id.value, "([^%.]*)%.(.*)") if not group then - sql = sql.."'"..escape(search.value.id.value).."' AS param, d2t."..escape(search.value.id.value).." AS value FROM devices_to_classes d2t WHERE d2t."..escape(search.value.id.value).. - escape(search.value.comparison.value).."'"..escape(search.value.value.value).."' GROUP BY device_id" + sql = sql.."'"..provdb.escape(search.value.id.value).."' AS param, d2t."..provdb.escape(search.value.id.value).." AS value FROM devices_to_classes d2t WHERE d2t."..provdb.escape(search.value.id.value).. + provdb.escape(search.value.comparison.value).."'"..provdb.escape(search.value.value.value).."' GROUP BY device_id" else sql = sql.."g.name as group, p.name as param, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END as value FROM ".. "devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id) ".. "LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) " if group and group ~= "" then - sql = sql.."WHERE g.name='"..escape(group).."' AND" + sql = sql.."WHERE g.name='"..provdb.escape(group).."' AND" else sql = sql.."WHERE" end - sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..escape(search.value.comparison.value).."'"..escape(search.value.value.value).."'" + sql = sql.." p.name='"..provdb.escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..provdb.escape(search.value.comparison.value).."'"..provdb.escape(search.value.value.value).."'" end sql = sql.." ORDER BY d2t.device_id ASC" search.value.result.value = getselectresponse(sql) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then search.errtxt = err @@ -1789,20 +1719,20 @@ get_param_options = function(self, clientdata) local res, err = pcall(function() local connected = databaseconnect() -- First, just check to see if param_id exists - local sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(param_id).."'" + local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" local tmp = getselectresponse(sql) if tmp and #tmp > 0 then errtxt = nil retval.name.value = tmp[1].name retval.label.value = tmp[1].label -- Next, get all of the param options - sql = "SELECT * FROM provisioning_options WHERE param_id='"..escape(param_id).."' ORDER BY seq ASC" + sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(param_id).."' ORDER BY seq ASC" local tmp = getselectresponse(sql) or {} for i,t in ipairs(tmp) do retval.options.value[#retval.options.value + 1] = t.value..","..t.label end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -1819,7 +1749,7 @@ set_param_options = function(self, options) if success then local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(options.value.param_id.value).."'" + local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(options.value.param_id.value).."'" local tmp = getselectresponse(sql) if not tmp or #tmp == 0 then success = false @@ -1829,7 +1759,7 @@ set_param_options = function(self, options) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) -- Delete all options for this device - sql = "DELETE FROM provisioning_options WHERE param_id='"..escape(options.value.param_id.value).."'" + sql = "DELETE FROM provisioning_options WHERE param_id='"..provdb.escape(options.value.param_id.value).."'" runsqlcommand(sql, true) -- Loop through the options for i,o in ipairs(options.value.options.value) do @@ -1840,13 +1770,13 @@ set_param_options = function(self, options) v = string.match(o, "^%s*(.*%S)%s*$") l = v end - sql = "INSERT INTO provisioning_options VALUES('"..escape(options.value.param_id.value).."', '"..escape(l).."', '"..escape(v).."', '"..i.."')" + sql = "INSERT INTO provisioning_options VALUES('"..provdb.escape(options.value.param_id.value).."', '"..provdb.escape(l).."', '"..provdb.escape(v).."', '"..i.."')" runsqlcommand(sql, true) end sql = "COMMIT" runsqlcommand(sql) end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) @@ -1892,57 +1822,57 @@ function dump_database(self, db) local sql = "SELECT name, label, seq FROM provisioning_class_groups ORDER BY name, label" local tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_class_groups VALUES(default, '"..escape(t.name).."', '"..escape(t.label).."', '"..escape(t.seq).."');" + lines[#lines+1] = "INSERT INTO provisioning_class_groups VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT g.name AS group, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.name, c.label" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_classes VALUES(default, (SELECT class_group_id FROM provisioning_class_groups WHERE name='"..escape(t.group).."'), '"..escape(t.label).."', '"..escape(t.seq).."');" + lines[#lines+1] = "INSERT INTO provisioning_classes VALUES(default, (SELECT class_group_id FROM provisioning_class_groups WHERE name='"..provdb.escape(t.group).."'), '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT name, label, seq FROM provisioning_groups ORDER BY name, label" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_groups VALUES(default, '"..escape(t.name).."', '"..escape(t.label).."', '"..escape(t.seq).."');" + lines[#lines+1] = "INSERT INTO provisioning_groups VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT name, type, label, descr, value, seq, regexp, validate FROM provisioning_params ORDER BY name" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_params VALUES(default, '"..escape(t.name).."', '"..escape(t.type).."', '"..escape(t.label).."', '"..escape(t.descr).."', '"..escape(t.value).."', '"..escape(t.seq).."', '"..escape(t.regexp).."', '"..escape(t.validate).."');" + lines[#lines+1] = "INSERT INTO provisioning_params VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.type).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.descr).."', '"..provdb.escape(t.value).."', '"..provdb.escape(t.seq).."', '"..provdb.escape(t.regexp).."', '"..provdb.escape(t.validate).."');" end sql = "SELECT p.name AS param, o.label, o.value, o.seq FROM provisioning_options o JOIN provisioning_params p USING(param_id) ORDER BY p.name, o.seq, o.label" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..escape(t.label).."', '"..escape(t.value).."', '"..escape(t.seq).."');" + lines[#lines+1] = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.label).."', '"..provdb.escape(t.value).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT c.label AS class, g.label AS group FROM provisioning_classes c JOIN classes_to_param_groups USING(class_id) JOIN provisioning_groups g USING(group_id) ORDER BY c.label, g.label" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO classes_to_param_groups VALUES((SELECT class_id FROM provisioning_classes WHERE label='"..escape(t.class).."'), (SELECT group_id FROM provisioning_groups WHERE label='"..escape(t.group).."'));" + lines[#lines+1] = "INSERT INTO classes_to_param_groups VALUES((SELECT class_id FROM provisioning_classes WHERE label='"..provdb.escape(t.class).."'), (SELECT group_id FROM provisioning_groups WHERE label='"..provdb.escape(t.group).."'));" end sql = "SELECT p.name AS param, g.label AS group, t.value, t.editable FROM provisioning_params p JOIN param_groups_to_params t USING(param_id) JOIN provisioning_groups g USING(group_id) ORDER BY p.name, g.label" tmp = getselectresponse(sql) for i,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO param_groups_to_params VALUES((SELECT group_id FROM provisioning_groups WHERE label='"..escape(t.group).."'), (SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..escape(t.value).."', '"..escape(t.editable).."');" + lines[#lines+1] = "INSERT INTO param_groups_to_params VALUES((SELECT group_id FROM provisioning_groups WHERE label='"..provdb.escape(t.group).."'), (SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.value).."', '"..provdb.escape(t.editable).."');" end if db.value.devices and db.value.devices.value then sql = "SELECT device_id FROM devices_to_classes GROUP BY device_id ORDER BY device_id ASC" devices = getselectresponse(sql) for i,d in ipairs(devices) do - sql = "SELECT label FROM devices_to_classes JOIN provisioning_classes USING(class_id) WHERE device_id='"..escape(d.device_id).."'" + sql = "SELECT label FROM devices_to_classes JOIN provisioning_classes USING(class_id) WHERE device_id='"..provdb.escape(d.device_id).."'" tmp = getselectresponse(sql) for j,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO devices_to_classes VALUES("..escape(i)..", (SELECT class_id FROM provisioning_classes WHERE label='"..escape(t.label).."'));" + lines[#lines+1] = "INSERT INTO devices_to_classes VALUES("..provdb.escape(i)..", (SELECT class_id FROM provisioning_classes WHERE label='"..provdb.escape(t.label).."'));" end - sql = "SELECT group_name, p.name AS param, v.value FROM provisioning_values v JOIN provisioning_params p USING(param_id) WHERE device_id='"..escape(d.device_id).."'" + sql = "SELECT group_name, p.name AS param, v.value FROM provisioning_values v JOIN provisioning_params p USING(param_id) WHERE device_id='"..provdb.escape(d.device_id).."'" tmp = getselectresponse(sql) for j,t in ipairs(tmp) do - lines[#lines+1] = "INSERT INTO provisioning_values VALUES("..escape(i)..", '"..escape(t.group_name).."', (SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..escape(t.value).."');" + lines[#lines+1] = "INSERT INTO provisioning_values VALUES("..provdb.escape(i)..", '"..provdb.escape(t.group_name).."', (SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.value).."');" end end - lines[#lines+1] = "SELECT pg_catalog.setval('provisioning_device_seq', "..escape(#devices)..", true);" + lines[#lines+1] = "SELECT pg_catalog.setval('provisioning_device_seq', "..provdb.escape(#devices)..", true);" end db.value.data = cfe({ type="longtext", value=table.concat(lines, "\n") or "", label="Database Values" }) - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then db.errtxt = err @@ -1967,12 +1897,12 @@ function get_file(self, clientdata) local connected = databaseconnect() -- Add the device to the table of requests - local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'" + local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" local requests = getselectresponse(sql) if requests and #requests > 0 then - sql = "UPDATE provisioning_requests SET ip='"..escape(ip).."', agent='"..escape(agent).."', date=now() WHERE mac='"..escape(string.upper(mac)).."'" + sql = "UPDATE provisioning_requests SET ip='"..provdb.escape(ip).."', agent='"..provdb.escape(agent).."', date=now() WHERE mac='"..provdb.escape(string.upper(mac)).."'" else - sql = "INSERT INTO provisioning_requests VALUES('"..escape(string.upper(mac)).."', '"..escape(ip).."', '"..escape(agent).."', now())" + sql = "INSERT INTO provisioning_requests VALUES('"..provdb.escape(string.upper(mac)).."', '"..provdb.escape(ip).."', '"..provdb.escape(agent).."', now())" end runsqlcommand(sql) @@ -1997,7 +1927,7 @@ function get_file(self, clientdata) end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then result.errtxt = err @@ -2037,7 +1967,7 @@ function put_file(self, clientdata) -- If the script doesn't exist, allow the write retval.value = retval.value or data end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then retval.errtxt = err @@ -2063,7 +1993,7 @@ list_requests = function() for i,v in ipairs(retval) do v.device_id = reverseids[v.mac] end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then errtxt = err @@ -2084,17 +2014,17 @@ delete_request = function(self, delreq) delreq.errtxt = "Failed to delete request" local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'" + local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" local tmp = getselectresponse(sql) if #tmp == 0 then delreq.value.mac.errtxt = "Request does not exist" else -- Remove the request - sql = "DELETE FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'" + sql = "DELETE FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" runsqlcommand(sql) delreq.errtxt = nil end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then delreq.errtxt = err @@ -2115,7 +2045,7 @@ create_from_request = function(self, request) success = false local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(request.value.mac.value)).."'" + local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(request.value.mac.value)).."'" local tmp = getselectresponse(sql) if #tmp == 0 then request.value.mac.errtxt = "Request does not exist" @@ -2157,7 +2087,7 @@ create_from_request = function(self, request) request.errtxt = "Failed to create device - could not determine class" end end - if connected then databasedisconnect() end + if connected then provdb.databasedisconnect() end end) if not res and err then request.errtxt = err |