예제 #1
0
            public void go()
            {
                fixpriv_privpol_t      pi_pol;
                fixpriv_privpol_t      backup_pi_pol;
                fixpriv_result_t       s    = new fixpriv_result_t();
                FixprivPolicies        bpol = new FixprivPolicies();
                fixpriv_backupstatus_t backupStatus;

                if (this.exec_check_only == false)
                {
                    fixpriv_special_modify();
                }

                foreach (FixprivPolicy pol in this.fpol.rules)
                {
                    FixprivPolicy backup_pol = new FixprivPolicy();
                    pi_pol        = new fixpriv_privpol_t();
                    backup_pi_pol = new fixpriv_privpol_t();

                    if (pol.key.keyRoot.Equals("HKCU"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_HKCU;
                    }
                    else if (pol.key.keyRoot.Equals("HKLM"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_HKLM;
                    }
                    else if (pol.key.keyRoot.Equals("GPOU"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_GPOU;
                    }
                    else if (pol.key.keyRoot.Equals("GPOM"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_GPOM;
                    }

                    backup_pol.key.keyRoot    = pol.key.keyRoot;
                    backup_pi_pol.section_key = pi_pol.section_key;

                    pi_pol.pol_key        = pol.key.keyName;
                    pi_pol.pol_value_name = pol.key.keyValue.valueName;

                    backup_pi_pol.pol_key        = pol.key.keyName;
                    backup_pi_pol.pol_value_name = pol.key.keyValue.valueName;
                    backup_pol.key.keyName       = pol.key.keyName;

                    if (pol.key.keyValue.valueType.Equals("REG_DWORD"))
                    {
                        pi_pol.pol_datatype   = value_data_type_t.POL_DWORD;
                        pi_pol.pol_value_data = pol.key.keyValue.valueData;
                        pi_pol.pol_mode       = m0_polregmode_t.POL_ENABLED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_SZ"))
                    {
                        pi_pol.pol_datatype   = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode       = m0_polregmode_t.POL_ENABLED;
                        pi_pol.pol_value_data = pol.key.keyValue.valueData;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_NONE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_DWORD;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_NOTCONFIGURED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_BINARY"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_DWORD;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_ENABLED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_DELETE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_DELETE;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_DISABLE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_DISABLED;
                    }

                    backup_pi_pol.pol_datatype = pi_pol.pol_datatype;
                    backup_pi_pol.pol_mode     = pi_pol.pol_mode;

                    backup_pol.key.keyValue.valueType = pol.key.keyValue.valueType;
                    backup_pol.id = pol.id;
                    backup_pol.key.keyValue.valueDescription = pol.key.keyValue.valueDescription;

                    if (this.exec_check_only == true)
                    {
                        check_result = fixpriv_check_regkey(pi_pol);

                        s        = new fixpriv_result_t();
                        s.state  = check_result;
                        s.policy = pi_pol;

                        returnValueQueue.Enqueue(s);
                        signalQueue.Set();
                        Thread.Sleep(50);
                    }
                    else
                    {
                        try
                        {
                            // backup functions

                            backupStatus = (fixpriv_backupstatus_t)fixpriv_read_regkey(ref backup_pi_pol);

                            backup_pol.key.keyValue.valueName = backup_pi_pol.pol_value_name;
                            backup_pol.key.keyValue.valueData = backup_pi_pol.pol_value_data;

                            if (backupStatus == fixpriv_backupstatus_t.READREG_SUCCESS)
                            {
                                backup_pol.key.keyValue.valueMode = "POL_ENABLED";
                                backup_pol.key.keyValue.valueData = backup_pi_pol.pol_value_data;
                            }
                            else if (backupStatus == fixpriv_backupstatus_t.READREG_NOTFOUND)
                            {
                                backup_pol.key.keyValue.valueMode = "POL_DELETE";
                                backup_pol.key.keyValue.valueType = "REG_DELETE";
                                backup_pol.key.keyValue.valueData = "0";
                            }
                            else // fail
                            {
                                backup_pol.key.keyValue.valueType = "REG_DELETE";
                                backup_pol.key.keyValue.valueMode = "POL_NOTCONFIGURED";
                                backup_pol.key.keyValue.valueData = "0";
                            }

                            bpol.rules.Add(backup_pol);

                            // backup functions

                            fixpriv_modify_policy(pi_pol);

                            if (pi_pol.section_key == ws_key_t.WS_KEY_GPOM)
                            {
                                Thread.Sleep(300); // wait for changes to sync. 500ms works
                            }
                            check_result = fixpriv_check_regkey(pi_pol);

                            s        = new fixpriv_result_t();
                            s.state  = check_result;
                            s.policy = pi_pol;

                            returnValueQueue.Enqueue(s);
                            signalQueue.Set();
                            Thread.Sleep(5);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("[e] error in FixprivWorker.go: " + e.Message);

                            // make sure, backups are written to disk
                            if (false == this.exec_check_only)
                            {
                                this.backup.store(bpol);
                            }
                        }
                    }
                } // foreach

                if (false == this.exec_check_only)
                {
                    this.backup.store(bpol);
                }

                shouldRun = false;
            } // go()
예제 #2
0
            public void go()
            {
                fixpriv_privpol_t pi_pol;
                fixpriv_result_t  s = new fixpriv_result_t();

                if (this.exec_check_only == false)
                {
                    fixpriv_special_modify();
                }

                foreach (FixprivPolicy pol in this.fpol.rules)
                {
                    pi_pol = new fixpriv_privpol_t();

                    if (pol.key.keyRoot.Equals("HKCU"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_HKCU;
                    }
                    else if (pol.key.keyRoot.Equals("HKLM"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_HKLM;
                    }
                    else if (pol.key.keyRoot.Equals("GPOU"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_GPOU;
                    }
                    else if (pol.key.keyRoot.Equals("GPOM"))
                    {
                        pi_pol.section_key = ws_key_t.WS_KEY_GPOM;
                    }

                    pi_pol.pol_key        = pol.key.keyName;
                    pi_pol.pol_value_name = pol.key.keyValue.valueName;

                    if (pol.key.keyValue.valueType.Equals("REG_DWORD"))
                    {
                        pi_pol.pol_datatype   = value_data_type_t.POL_DWORD;
                        pi_pol.pol_value_data = pol.key.keyValue.valueData;
                        pi_pol.pol_mode       = m0_polregmode_t.POL_ENABLED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_SZ"))
                    {
                        pi_pol.pol_datatype   = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode       = m0_polregmode_t.POL_ENABLED;
                        pi_pol.pol_value_data = pol.key.keyValue.valueData;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_NONE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_DWORD;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_NOTCONFIGURED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_BINARY"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_DWORD;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_ENABLED;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_DELETE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_DELETE;
                    }
                    else if (pol.key.keyValue.valueType.Equals("REG_DISABLE"))
                    {
                        pi_pol.pol_datatype = value_data_type_t.POL_WSTRING;
                        pi_pol.pol_mode     = m0_polregmode_t.POL_DISABLED;
                    }

                    if (this.exec_check_only == true)
                    {
                        check_result = fixpriv_check_regkey(pi_pol);

                        s        = new fixpriv_result_t();
                        s.state  = check_result;
                        s.policy = pi_pol;

                        returnValueQueue.Enqueue(s);
                        signalQueue.Set();
                        Thread.Sleep(50);
                    }
                    else
                    {
                        fixpriv_modify_policy(pi_pol);

                        if (pi_pol.section_key == ws_key_t.WS_KEY_GPOM)
                        {
                            Thread.Sleep(300); // wait for changes to sync. 500ms works
                        }
                        check_result = fixpriv_check_regkey(pi_pol);

                        s        = new fixpriv_result_t();
                        s.state  = check_result;
                        s.policy = pi_pol;

                        returnValueQueue.Enqueue(s);
                        signalQueue.Set();
                        Thread.Sleep(5);
                    }
                } // foreach
                shouldRun = false;
            }     // go()