X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fcommon%2Fpostfixadmin_plugin.rb;h=92b7a5b3036cdc8be3bba7df549d9d026cf8e87f;hp=8bf03f96f5a95d8bf8279cff6721035dc13f835f;hb=fa7782720ff15fce29b6f875678e9fd0c197485a;hpb=df4e02ebf6a4e28a58abcb298a4442a245ad0b15 diff --git a/lib/common/postfixadmin_plugin.rb b/lib/common/postfixadmin_plugin.rb index 8bf03f9..92b7a5b 100644 --- a/lib/common/postfixadmin_plugin.rb +++ b/lib/common/postfixadmin_plugin.rb @@ -16,13 +16,14 @@ module PostfixadminPlugin # @param cfg [Configuration] the configuration for this plugin. # def initialize(cfg) - @db_host = cfg.postfixadmin_dbhost - @db_port = cfg.postfixadmin_dbport - @db_opts = cfg.postfixadmin_dbopts - @db_tty = cfg.postfixadmin_dbtty - @db_name = cfg.postfixadmin_dbname - @db_user = cfg.postfixadmin_dbuser - @db_pass = cfg.postfixadmin_dbpass + @db_hash = { + :host => cfg.postfixadmin_dbhost, + :port => cfg.postfixadmin_dbport, + :options => cfg.postfixadmin_dbopts, + :tty => cfg.postfixadmin_dbtty, + :dbname => cfg.postfixadmin_dbname, + :user => cfg.postfixadmin_dbuser, + :password => cfg.postfixadmin_dbpass } end @@ -36,16 +37,19 @@ module PostfixadminPlugin def list_domains() domains = [] - connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, - @db_name, @db_user, @db_pass) + connection = PG::Connection.new(@db_hash) # 'ALL' is a magic domain, and we don't want it. sql_query = "SELECT domain FROM domain WHERE domain <> 'ALL';" - connection.query(sql_query) do |result| - domains = result.field_values('domain') - end - connection.close() + begin + connection.sync_exec(sql_query) do |result| + domains = result.field_values('domain') + end + ensure + # Make sure the connection gets closed even if the query explodes. + connection.close() + end return domains.map{ |d| Domain.new(d) } end @@ -59,15 +63,18 @@ module PostfixadminPlugin def list_users() users = [] - connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, - @db_name, @db_user, @db_pass) + connection = PG::Connection.new(@db_hash) sql_query = 'SELECT username FROM mailbox;' - connection.query(sql_query) do |result| - users = result.field_values('username') - end - connection.close() + begin + connection.sync_exec(sql_query) do |result| + users = result.field_values('username') + end + ensure + # Make sure the connection gets closed even if the query explodes. + connection.close() + end return users.map{ |u| User.new(u) } end @@ -86,8 +93,7 @@ module PostfixadminPlugin usernames = [] return usernames if domains.length() == 0 - connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, - @db_name, @db_user, @db_pass) + connection = PG::Connection.new(@db_hash) # The number of parameters that we'll pass into our prepared query # is the number of domains that we're given. It's important that @@ -95,14 +101,17 @@ module PostfixadminPlugin params = 1.upto(domains.length()).map{ |i| '$' + i.to_s() }.join(',') sql_query = "SELECT username FROM mailbox WHERE domain IN (#{params});" - # Now replace each Domain with its string representation and pass - # those in as our individual parameters. - connection.query(sql_query, domains.map{ |d| d.to_s() }) do |result| - usernames = result.field_values('username') + begin + # Now replace each Domain with its string representation and pass + # those in as our individual parameters. + connection.sync_exec_params(sql_query, domains.map{ |d| d.to_s() }) do |result| + usernames = result.field_values('username') + end + ensure + # Make sure the connection gets closed even if the query explodes. + connection.close() end - connection.close() - return usernames.map{ |u| User.new(u) } end @@ -117,17 +126,20 @@ module PostfixadminPlugin def list_aliases() aliases = [] - connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, - @db_name, @db_user, @db_pass) + connection = PG::Connection.new(@db_hash) sql_query = 'SELECT address,goto FROM alias;' - results = connection.query(sql_query) - results.each do |row| - # row should be a hash - aliases << row - end - connection.close() + begin + results = connection.sync_exec(sql_query) + results.each do |row| + # row should be a hash + aliases << row + end + ensure + # Make sure the connection gets closed even if the query explodes. + connection.close() + end return aliases end @@ -146,18 +158,21 @@ module PostfixadminPlugin def domain_exists(domain) count = 0 - connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, - @db_name, @db_user, @db_pass) + connection = PG::Connection.new(@db_hash) sql_query = 'SELECT COUNT(domain) as count FROM domain WHERE domain = $1;' - connection.query(sql_query, [domain.to_s()]) do |result| - return false if result.ntuples() < 1 - count = result.getvalue(0,0).to_i() - return false if count.nil? - end + begin + connection.sync_exec_params(sql_query, [domain.to_s()]) do |result| + return false if result.ntuples() < 1 + count = result.getvalue(0,0).to_i() - connection.close() + return false if count.nil? + end + ensure + # Make sure the connection gets closed even if the query explodes. + connection.close() + end return (count > 0) end