public XPathNodeIterator ExecuteDbQueryToXml(object[] args) { CallerInformation caller = this.AuditEnvironment.Here(); XmlDocument queryXml = new XmlDocument(); string mysql_query; string mysql_db; if (args.Count() == 1) { mysql_query = (string)args[0]; } else { mysql_db = (string)args[0]; mysql_query = (string)args[1]; } AuditEnvironment.ProcessExecuteStatus status = AuditEnvironment.ProcessExecuteStatus.Unknown; string output = string.Empty, error = string.Empty, mysql_args; if (this.AuditEnvironment.IsUnix) { mysql_query = mysql_query.Replace("'", "\\'"); if (string.IsNullOrEmpty(this.AppUser)) { mysql_args = string.Format("-X --execute=$\'{0}\'", mysql_query); } else if (AppPass == null) { mysql_args = string.Format("--user={0} -X --execute=$\'{1}\'", this.AppUser, mysql_query); } else { mysql_args = string.Format("--user={0} --password={1} -X --execute=$\'{2}\'", this.AppUser, this.AuditEnvironment.ToInsecureString(this.AppPass), mysql_query); } } else if (this.AuditEnvironment is WinRmAuditEnvironment) { if (string.IsNullOrEmpty(this.AppUser)) { mysql_args = string.Format("-X\t--execute={0}", mysql_query); } else if (AppPass == null) { mysql_args = string.Format("-X\t--user={0}\t--execute={1}", this.AppUser, mysql_query); } else { mysql_args = string.Format("--user={0}\t--password={1}\t-X\t--execute={1}", this.AppUser, this.AuditEnvironment.ToInsecureString(this.AppPass), mysql_query); } } else { if (string.IsNullOrEmpty(this.AppUser)) { mysql_args = string.Format("-X\t--execute=\"{0}\"", mysql_query); } else if (AppPass == null) { mysql_args = string.Format("--user={0}\t-X\t--execute=\"{1}\"", this.AppUser, mysql_query); } else { mysql_args = string.Format("--user={0}\t--password={1}\t-X\t--execute=\"{1}\"", this.AppUser, this.AuditEnvironment.ToInsecureString(this.AppPass), mysql_query); } } bool r; if (string.IsNullOrEmpty(this.OSUser)) { r = this.AuditEnvironment.Execute("mysql", mysql_args, out status, out output, out error); } else { r = this.AuditEnvironment.ExecuteAsUser("mysql", mysql_args, out status, out output, out error, this.OSUser, this.OSPass); } if (r) { if (!output.StartsWith("ERROR")) { this.AuditEnvironment.Debug(caller, "MySQL query \"{0}\" returned: {1}", mysql_query, output); queryXml.LoadXml(output); return(queryXml.CreateNavigator().Select("/")); } else { this.AuditEnvironment.Error(caller, "Could not execute database query \"{0}\" on MySQL server. Server returned: {1}", mysql_query, output); queryXml.LoadXml(string.Format("<error><![CDATA[{0}]]></error>", output)); return(queryXml.CreateNavigator().Select("/")); } } else { this.AuditEnvironment.Error(caller, "Could not execute database query \"{0}\" on MySQL server. Error: {1} {2}", mysql_query, error, output); queryXml.LoadXml(string.Format("<error><![CDATA[{0}\n{1}]]></error>", error, output)); return(queryXml.CreateNavigator().Select("/")); } }
public XPathNodeIterator ExecuteDbQueryToXml(object[] args) { CallerInformation caller = this.AuditEnvironment.Here(); XmlDocument queryXml = new XmlDocument(); bool execute_as_os_user = !string.IsNullOrEmpty(this.OSUser); bool execute_as_app_user = !string.IsNullOrEmpty(this.AppUser); string pgsql_query; string pgsql_db = string.Empty; if (args.Count() == 1) { pgsql_query = (string)args[0]; } else { pgsql_db = (string)args[0]; pgsql_query = (string)args[1]; } AuditEnvironment.ProcessExecuteStatus status = AuditEnvironment.ProcessExecuteStatus.Unknown; string output = string.Empty, error = string.Empty; string pgsql_cmd, pgsql_args; if (this.AuditEnvironment.IsWindows) { pgsql_cmd = CombinePath("@", "bin", "psql.exe"); if (!execute_as_app_user) { if (string.IsNullOrEmpty(pgsql_db)) { pgsql_args = string.Format("-w\t-H\t-c\t\'{0}\'", pgsql_query); } else { pgsql_args = string.Format("-w\t-H\t-d\t{0}\t-c\t\'{1}\'", pgsql_db, pgsql_query); } } else { if (string.IsNullOrEmpty(pgsql_db)) { pgsql_args = string.Format("-U\t{0}\t-w\t-H\t-c\t\'{1}\'", this.AppUser, pgsql_query); } else { pgsql_args = string.Format("-U\t{0}\t-w\t-H\t-d\t{1}\t-c\'{2}\'", this.AppUser, pgsql_db, pgsql_query); } } } else { pgsql_cmd = "psql"; if (!execute_as_app_user) { if (string.IsNullOrEmpty(pgsql_db)) { pgsql_args = string.Format("-w -H -c \'{0}\'", pgsql_query); } else { pgsql_args = string.Format("-w -H -d {0} -c \'{1}\'", pgsql_db, pgsql_query); } } else { if (string.IsNullOrEmpty(pgsql_db)) { pgsql_args = string.Format("-U {0} -w -H -c \'{1}\'", this.AppUser, pgsql_query); } else { pgsql_args = string.Format("-U {0} -w -H -d {1} -c \'{2}\'", this.AppUser, pgsql_db, pgsql_query); } } } bool result = execute_as_os_user ? this.AuditEnvironment.ExecuteAsUser(pgsql_cmd, pgsql_args, out status, out output, out error, this.OSUser, this.OSPass) : this.AuditEnvironment.Execute(pgsql_cmd, pgsql_args, out status, out output, out error, this.AppPass != null ? new Dictionary <string, string> { { "PGPASSWORD", this.AuditEnvironment.ToInsecureString(this.AppPass) } } : null); if (result) { if (!output.StartsWith("ERROR")) { this.AuditEnvironment.Debug(caller, "PGSQL query \"{0}\" returned: {1}", pgsql_query, output); return(ConvertPGSQLHtml("<root>" + output + "</root>").CreateNavigator().Select("/")); } else { this.AuditEnvironment.Error(caller, "Could not execute database query \"{0}\" on PGSQL server. Server returned: {1}", pgsql_query, output); queryXml.LoadXml(string.Format("<error><![CDATA[{0}]]><error>", output)); return(queryXml.CreateNavigator().Select("/")); } } else { this.AuditEnvironment.Error(caller, "Could not execute command {0} {1}. Error: {2} {3}", pgsql_cmd, pgsql_query, error, output); queryXml.LoadXml(string.Format("<error><![CDATA[{0}\n{1}]]></error>", error, output)); return(queryXml.CreateNavigator().Select("/")); } }