Пример #1
0
        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("/"));
            }
        }
Пример #2
0
        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("/"));
            }
        }