Example #1
0
        private static void SetupNLog(RegistryProvider registryProvider)
        {
            var configuration = new NLog.Config.LoggingConfiguration();

            var jitWorkerLog = new NLog.Targets.FileTarget("access-manager-jitworker")
            {
                FileName         = Path.Combine(registryProvider.LogPath, "access-manager-jit-worker.log"),
                ArchiveEvery     = NLog.Targets.FileArchivePeriod.Day,
                ArchiveNumbering = NLog.Targets.ArchiveNumberingMode.Date,
                MaxArchiveFiles  = registryProvider.RetentionDays,
                Layout           = "${longdate}|${level:uppercase=true:padding=5}|${logger}|${message}${onexception:inner=${newline}${exception:format=ToString}}"
            };

            var serviceLog = new NLog.Targets.FileTarget("access-manager-service")
            {
                FileName         = Path.Combine(registryProvider.LogPath, "access-manager-service.log"),
                ArchiveEvery     = NLog.Targets.FileArchivePeriod.Day,
                ArchiveNumbering = NLog.Targets.ArchiveNumberingMode.Date,
                MaxArchiveFiles  = registryProvider.RetentionDays,
                Layout           = "${longdate}|${level:uppercase=true:padding=5}|${logger}|${message}${onexception:inner=${newline}${exception:format=ToString}}"
            };

            configuration.AddRule(NLog.LogLevel.Trace, NLog.LogLevel.Fatal, jitWorkerLog, "Lithnet.AccessManager.Server.Workers.JitGroupWorker", true);
            configuration.AddRule(NLog.LogLevel.Trace, NLog.LogLevel.Fatal, serviceLog);

            NLog.LogManager.Configuration = configuration;
        }
Example #2
0
        public static IHostBuilder CreateHostBuilder(string[] args, RegistryProvider registryProvider)
        {
            bool safeStart = args.Any(t => string.Equals(t, "/safeStart", StringComparison.OrdinalIgnoreCase));

            if (safeStart || !registryProvider.IsConfigured)
            {
                return(Host.CreateDefaultBuilder().ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService <UnconfiguredHost>();
                })
                       .UseWindowsService()
                       .ConfigureAccessManagerLogging());
            }

            var host = new HostBuilder();

            host.UseContentRoot(Directory.GetCurrentDirectory());

            host.ConfigureHostConfiguration(config =>
            {
                config.AddEnvironmentVariables(prefix: "DOTNET_");
                if (args != null)
                {
                    config.AddCommandLine(args);
                }
            });

            host.UseNLog();

            host.ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.ConfigureAppSettings();

                if (args != null)
                {
                    config.AddCommandLine(args);
                }
            });

            host.ConfigureAccessManagerLogging();

            host.UseDefaultServiceProvider((context, options) =>
            {
                var isDevelopment       = context.HostingEnvironment.IsDevelopment();
                options.ValidateScopes  = isDevelopment;
                options.ValidateOnBuild = isDevelopment;
            });

            host.ConfigureWebHostDefaults(webBuilder =>
            {
                var httpsysConfig = new ConfigurationBuilder().ConfigureAppSettings().Build();

                webBuilder.UseHttpSys(httpsysConfig);
                webBuilder.UseStartup <Startup>();
            });

            host.UseWindowsService();

            return(host);
        }
Example #3
0
        private void RegisterDependencies()
        {
            DependencyManager.LogWriter = _logWriter;

            // Providers
            var configurationReader           = new ConfigurationReader();
            var credentialsProvider           = new CredentialsProvider();
            var fileIoProvider                = new FileIoProvider();
            var registryProvider              = new RegistryProvider();
            var userProvider                  = new UserProvider();
            var windowsApiProvider            = new WindowsApiProvider();
            var windowsServiceProviderFactory = new WindowsServiceProviderFactory();
            var powerShellProvider            = new PowerShellProvider();

            // Services
            var fileManager = new FileManager(fileIoProvider, windowsApiProvider, credentialsProvider);

            DependencyManager.FileManager     = fileManager;
            DependencyManager.HostsFileEditor = new HostsFileEditor(fileIoProvider, configurationReader);
            var registryEditor = new RegistryEditor(windowsApiProvider, registryProvider, userProvider);

            DependencyManager.RegistryEditor        = registryEditor;
            DependencyManager.WindowsServiceManager = new WindowsServiceManager(windowsServiceProviderFactory, registryEditor, fileManager, configurationReader);
            DependencyManager.WindowsPackageManager = new WindowsPackageManager(powerShellProvider, configurationReader);
        }
Example #4
0
        public DeskBandUI(CSDeskBand.CSDeskBandWin w)
        {
            InitializeComponent();
            RegistryProvider.Init();

            SerilogProvider.Initialize();

            // var logPath = Settings.AppDirectory + @"\Storage\Logs\activity-.log";
            //
            // Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.File(logPath,
            // rollingInterval: RollingInterval.Day,
            // flushToDiskInterval: TimeSpan.FromSeconds(1),
            // shared: true) .CreateLogger();

            Log.Information("Starting NetMeter shell..");

            SqliteProvider.DbPath = Settings.AppDirectory + @"\Storage\Common\LocalStorage.db";

            DownloadLabel = this.LblDownload;
            UploadLabel   = this.LblUpload;
            UploadIcon    = this.pictUpload;
            DownloadIcon  = this.pictDownload;
            deskUI        = this;

            Log.Information("NetMeter started successfully..");
        }
Example #5
0
        private static void GetMappingsFromRegistry(MapLocation location)
        {
            var mappings = new Collection <KeyMapping>();

            byte[] map = RegistryProvider.GetScancodeMapFromRegistry(location);

            if (map != null)
            {
                mappings = GetMappingsFromScancodeMap(map);
            }

            switch (location)
            {
            case MapLocation.LocalMachineKeyboardLayout:
                MappingsManager.mappings = mappings;
                break;

            case MapLocation.KeyMapperLocalMachineKeyboardLayout:
                savedBootMappings = mappings;
                break;

            default:
                throw new InvalidOperationException("Unknown value for MapLocation: " + location);
            }
        }
Example #6
0
        public static bool VistaMappingsNeedSaving()
        {
            // Check whether the current boot mappings and the proposed boot mappings
            // are the same: if not, they need saving

            byte[] map = RegistryProvider.GetScancodeMapFromRegistry(MapLocation.KeyMapperVistaMappingsCache);

            if (map == null)
            {
                return(false);
            }

            Collection <KeyMapping> maps = GetMappingsFromScancodeMap(map);

            if (maps.Count != mappings.Count)
            {
                return(true);
            }

            foreach (KeyMapping km in maps)
            {
                if (mappings.Contains(km) == false)
                {
                    return(true);
                }
            }

            return(false);
        }
Example #7
0
        private void RegisterDependencies()
        {
            DependencyManager.LogWriter = _logWriter;
            var appSettings = GetAppSettings();

            // Providers
            var credentialsProvider           = new CredentialsProvider();
            var fileIoProvider                = new FileIoProvider();
            var registryProvider              = new RegistryProvider();
            var userProvider                  = new UserProvider();
            var windowsApiProvider            = new WindowsApiProvider();
            var windowsServiceProviderFactory = new WindowsServiceProviderFactory();
            var powerShellProvider            = new PowerShellProvider();
            var windowsTaskProvider           = new WindowsTaskProvider();

            // Services
            var fileManager = new FileManager(fileIoProvider, windowsApiProvider, credentialsProvider);

            DependencyManager.FileManager     = fileManager;
            DependencyManager.HostsFileEditor = new HostsFileEditor(fileIoProvider, appSettings.WindowsUpdateUrls);
            var registryEditor = new RegistryEditor(windowsApiProvider, registryProvider, userProvider);

            DependencyManager.RegistryEditor        = registryEditor;
            DependencyManager.WindowsServiceManager = new WindowsServiceManager(windowsServiceProviderFactory, registryEditor, fileManager, appSettings.WindowsServices);
            DependencyManager.WindowsPackageManager = new WindowsPackageManager(powerShellProvider, appSettings.Declutter);
            DependencyManager.WindowsTaskManager    = new WindowsTaskManager(windowsTaskProvider, appSettings.WindowsTasks);
        }
Example #8
0
        private IAccessControlEditorDialogProvider ProviderFromResourceType(System.Security.AccessControl.ResourceType resType)
        {
            IAccessControlEditorDialogProvider prov = null;

            switch (resType)
            {
            case System.Security.AccessControl.ResourceType.FileObject:
                prov = new FileProvider();
                break;

            case System.Security.AccessControl.ResourceType.KernelObject:
                prov = new KernelProvider();
                break;

            case System.Security.AccessControl.ResourceType.RegistryKey:
                prov = new RegistryProvider();
                break;

            case TaskResourceType:
                prov = new TaskProvider();
                break;

            default:
                prov = new GenericProvider();
                break;
            }
            return(prov);
        }
        public void DeleteRegistrySection(string name)
        {
            if (name.Equals(_settingsRegistryKey) || name.Contains(_settingsRegistryKey))
            {
                return;
            }

            RegistryProvider.DeleteRegistryUnderCurrentKey(name);
            _currentSettingsKey = _rootSettingsKey;
        }
Example #10
0
        public void GetSystemRootWorks()
        {
            // Arrange
            var rp = new RegistryProvider(null, _output.WriteLine);

            // Act
            var result = rp.GetSystemRoot();

            // Assert
            Assert.Equal(result, Environment.ExpandEnvironmentVariables("%SystemRoot%"));
        }
Example #11
0
        public void GetMessageFilesForLegacyProviderWorks()
        {
            // Arrange
            var rp = new RegistryProvider(null, _output.WriteLine);

            // Act
            var result = rp.GetMessageFilesForLegacyProvider("Application Error").ToList();

            // Assert
            Assert.Single(result);
            Assert.Equal("C:\\windows\\system32\\wer.dll", result.First(), StringComparer.OrdinalIgnoreCase);
        }
Example #12
0
 public static void Main(string[] args)
 {
     if (args != null && args.Length > 0 && args[0] == "setup")
     {
         Setup.Process(args);
     }
     else
     {
         RegistryProvider registryProvider = new RegistryProvider(false);
         SetupNLog(registryProvider);
         CreateHostBuilder(args, registryProvider).Build().Run();
     }
 }
Example #13
0
        private static void GetMappingsFromRegistry(MapLocation location)
        {
            var mappings = new Collection <KeyMapping>();

            MappingType type = MappingType.Null;

            switch (location)
            {
            case MapLocation.LocalMachineKeyboardLayout:
            case MapLocation.KeyMapperLocalMachineKeyboardLayout:
                type = MappingType.Boot;
                break;

            case MapLocation.CurrentUserKeyboardLayout:
            case MapLocation.KeyMapperCurrentUserKeyboardLayout:
                type = MappingType.User;
                break;
            }


            byte[] map = RegistryProvider.GetScancodeMapFromRegistry(location);

            if (map != null)
            {
                mappings = GetMappingsFromScancodeMap(map, type);
            }

            switch (location)
            {
            case MapLocation.LocalMachineKeyboardLayout:
                _bootMappings = mappings;
                break;

            case MapLocation.CurrentUserKeyboardLayout:
                _userMappings = mappings;
                break;

            case MapLocation.KeyMapperLocalMachineKeyboardLayout:
                _savedBootMappings = mappings;
                break;

            case MapLocation.KeyMapperCurrentUserKeyboardLayout:
                _savedUserMappings = mappings;
                break;

            default:
                break;
            }
        }
Example #14
0
        public App()
        {
            RegistryProvider.Init();

            Settings.AppDirectory = Environment.CurrentDirectory;
            Settings.AppExePath   = Assembly.GetExecutingAssembly().Location;

            SerilogProvider.Initialize();

            Log.Information("Starting App..");

            SqliteProvider.DbPath = Settings.AppDirectory + @"\Storage\Common\LocalStorage.db";

            EvolveProvider.Initialize();
        }
Example #15
0
        /// <summary>
        /// Initializes a new instance of <see cref="VirtualizationEngine"/>.
        /// </summary>
        /// <param name="configurationProvider">
        /// The <see cref="IConfigurationProvider"/> to use for loading the required resources.
        /// </param>
        /// <returns></returns>
        public static VirtualizationEngine InitializeEngine(IConfigurationProvider configurationProvider)
        {
            var syncBus = new SynchronizationBus(configurationProvider);
            var engine  = new VirtualizationEngine(syncBus);

            if (!configurationProvider.ConnectionStrings.ContainsKey(ConfigurationDataType.FileSystemRoot))
            {
                throw new ConfigurationDataException(ConfigurationDataType.FileSystemRoot);
            }
            var fsProvider = new FileSystemProvider(configurationProvider.ConnectionStrings[ConfigurationDataType.FileSystemRoot],
                                                    configurationProvider.GetFileSystemEngineRules());
            var regProvider = new RegistryProvider(syncBus);

            engine._hookManager.RegisterHookProvider(new FileSystemHookProvider(fsProvider));
            engine._hookManager.RegisterHookProvider(new RegistryHookProvider(regProvider));
            return(engine);
        }
Example #16
0
        public static void SaveMappings(Mappings whichMappings = Mappings.CurrentBootMappings, MapLocation whereToSave = MapLocation.LocalMachineKeyboardLayout)
        {
            Collection <KeyMapping> maps;

            switch (whichMappings)
            {
            case Mappings.CurrentBootMappings:
                maps = mappings;
                break;

            case Mappings.SavedBootMappings:
                maps = savedBootMappings;
                break;

            default:
                return;
            }

            RegistryHive hive = 0;
            string       keyname = "", valuename = "";

            RegistryProvider.GetRegistryLocation(whereToSave, ref hive, ref keyname, ref valuename);

            RegistryKey registry = null;

            // Need write access so prepare to fail
            try
            {
                if (hive == RegistryHive.LocalMachine)
                {
                    registry = Registry.LocalMachine.OpenSubKey(keyname, true);
                }
                else if (hive == RegistryHive.CurrentUser)
                {
                    registry = Registry.CurrentUser.OpenSubKey(keyname, true);
                }
            }
            catch (SecurityException ex)
            {
                if (hive == RegistryHive.CurrentUser)
                {
                    // Would expect to be able to write to HKCU
                    Console.WriteLine("Unexpected failure {2} opening {0} on {1} for write access", keyname, Enum.GetNames(typeof(Mappings))[(int)whichMappings], ex.Message);
                }

                return;
            }

            if (registry == null)
            {
                // Key doesn't exist. TODO Shouldn't this be logged?
                return;
            }

            if (maps.Count == 0)
            {
                registry.SetValue(valuename, new byte[0]);
            }
            else
            {
                registry.SetValue(valuename, GetMappingsAsByteArray(maps));
            }
        }
Example #17
0
        /// <summary>
        /// Begins running the main Emitter Engine loop on the current thread.
        /// </summary>
        /// <param name="bindings">Network binding configuration to use</param>
        public static void Listen(params IBinding[] bindings)
        {
            if (bindings == null || bindings.Length == 0)
            {
                throw new ArgumentNullException("bindings");
            }

            // Set the mesh binding
            Mesh.Binding = bindings
                           .Where(b => b is MeshBinding)
                           .FirstOrDefault();

            // Set the registry and set our own identifier
            fRegistry = new ReplicatedRegistryProvider(Mesh.Identifier);

            // Register the the mesh handler
            Service.Mesh.Register(new MessageHandler());

            // Tell that we're running
            fRunning = true;

#if !DOTNET
            // Set the priority
            Thread.CurrentThread.Priority = ThreadPriority.Highest;

            // Hook the exceptions and exit
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
            AppDomain.CurrentDomain.ProcessExit        += CurrentDomain_ProcessExit;
#endif

            // Initialize Thread, Process and Assemblies
            fThread          = Thread.CurrentThread;
            fProcess         = Process.GetCurrentProcess();
            fRuntimeAssembly = typeof(Service).GetTypeInfo().Assembly;

            // Add Primary assemblies
            MetadataProvider.RegisterAssembly(fRuntimeAssembly);

            // Name the thread
            if (fThread != null)
            {
                // To avoid an exception in case of relisten, check if the thread is not already named
                if (fThread.Name != "Emitter Service")
                {
                    fThread.Name = "Emitter Service";
                }
            }

            if (BaseDirectory.Length > 0)
            {
                Directory.SetCurrentDirectory(BaseDirectory);
            }

            // Create a timer thread scheduler if necessary
            if (fTimerExecutor == null)
            {
                fTimerExecutor = new Thread(Timer.Executor.Run);
                if (fTimerExecutor.Name != "Timer Executor")
                {
                    fTimerExecutor.Name = "Timer Executor";
                }
            }

            // Check whether we are running on a multiprocessor hardware
            fProcessorCount = Environment.ProcessorCount;
            if (fProcessorCount > 1)
            {
                fMultiProcessor = true;
            }

            // Registers default providers (if they are not already there)
            DefaultProviders.RegisterAllDefault();

            // Register a new mesh provider if none is available yet
            if (Mesh.Cluster == null)
            {
                Mesh.Cluster = Providers.Resolve <SecurityProvider>().CreateSessionToken();
            }

            var configures  = new List <MethodInfo>();
            var initializes = new List <MethodInfo>();
            MetadataProvider.Types.ForEach((type) =>
            {
                // Perform InvokeAt
                configures.AddRange(type.GetInvokeAt(InvokeAtType.Configure));
                initializes.AddRange(type.GetInvokeAt(InvokeAtType.Initialize));
                fTerminators.AddRange(type.GetInvokeAt(InvokeAtType.Terminate));
            });

            // Sorts the Configure() by priority and invokes them
            configures.Sort(new InvokePriorityComparer());
            foreach (var configure in configures)
            {
                try
                {
                    configure.Invoke(null, null);
                }
                catch (Exception ex) { Logger.Log(ex); }
            }
            configures.Clear();

            // Create sockeds and bind the socket pump
            GC.Collect();

            // Invoke server startup event
            InvokeServerStartup();

            // Start the timer executor now
            fTimerExecutor.Start();

            // Start listening
            Transport.Listen(bindings);

            // Check X509
            if (bindings.Where(b => b is TlsBinding).Any() && Tls.Certificate == null)
            {
                Logger.Log(LogLevel.Warning, "Unable to detect TLS/SSL certificate.");
            }

            // Sorts the Initialize() by priority and invokes them
            initializes.Sort(new InvokePriorityComparer());
            foreach (var initialize in initializes)
            {
                try
                {
                    initialize.Invoke(null, null);
                }
                catch (Exception ex) { Logger.Log(ex); }
            }
            initializes.Clear();

            // Join the cluster through the seed
            Mesh.ConnectTo(EmitterConfig.Default.Cluster.SeedEndpoint);

            // Register http handlers
            Http.Register(new HttpHealthHandler());
            Http.Register(new HandleKeyGen());
            Http.Register(new DebugHttp());

            // Send analytics about this server launch. This is to gather global statistics about the number
            // of unique machines that use emitter.
            Providers.Resolve <AnalyticsProvider>().Track("emitter", "launch");

            // Timer scheduler slice loop
            while (IsRunning)
            {
                Timer.Scheduler.Slice();
                Thread.Sleep(20);
            }

            // We're done
            fRunning = false;
        }
Example #18
0
 /// <summary>
 /// Gets the registry value for the gossip membership.
 /// </summary>
 /// <param name="registry">The registry to extend.</param>
 /// <returns></returns>
 public static GossipMembership GetMembership(this RegistryProvider registry)
 {
     return(registry.Get <GossipMembership>("gossip"));
 }
 public RegistryKey AddRegistrySettingSection(string name)
 {
     _currentSettingsKey = RegistryProvider.CreateRegistryUnderCurrentKey(name);
     return(_currentSettingsKey);
 }