void connection_Closed(object sender, EventArgs e)
        {
            if (!GetActiveSockets().Any())
            {
                try
                {
                    _sessionManager.ReportSessionEnded(Session.Id);
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("Error reporting session ended.", ex);
                }
            }
            else
            {
                var capabilities = new SessionCapabilities
                {
                    PlayableMediaTypes   = Session.PlayableMediaTypes,
                    SupportedCommands    = Session.SupportedCommands,
                    SupportsMediaControl = SupportsMediaControl
                };

                _sessionManager.ReportCapabilities(Session.Id, capabilities);
            }
        }
Exemple #2
0
        /// <summary>
        /// Reports the capabilities.
        /// </summary>
        /// <param name="sessionId">The session identifier.</param>
        /// <param name="capabilities">The capabilities.</param>
        public void ReportCapabilities(string sessionId, SessionCapabilities capabilities)
        {
            var session = GetSession(sessionId);

            session.PlayableMediaTypes = capabilities.PlayableMediaTypes;
            session.SupportedCommands  = capabilities.SupportedCommands;
        }
Exemple #3
0
        void connection_Closed(object sender, EventArgs e)
        {
            var capabilities = new SessionCapabilities
            {
                PlayableMediaTypes   = Session.PlayableMediaTypes,
                SupportedCommands    = Session.SupportedCommands,
                SupportsMediaControl = SupportsMediaControl
            };

            _sessionManager.ReportCapabilities(Session.Id, capabilities);
        }
Exemple #4
0
        public static Dictionary <string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities)
        {
            List <CommandMetadata> list = new List <CommandMetadata>();

            if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer))
            {
                list.AddRange(GetRestrictedRemotingCommands());
            }
            if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer))
            {
                list.AddRange(GetRestrictedRemotingCommands());
                list.AddRange(GetRestrictedJobCommands());
            }
            Dictionary <string, CommandMetadata> dictionary = new Dictionary <string, CommandMetadata>(StringComparer.OrdinalIgnoreCase);

            foreach (CommandMetadata metadata in list)
            {
                dictionary.Add(metadata.Name, metadata);
            }
            return(dictionary);
        }
Exemple #5
0
        public static InitialSessionState CreateRestricted(SessionCapabilities sessionCapabilities)
        {
            InitialSessionState initialSessionState = new InitialSessionState();

            return(initialSessionState);
        }
Exemple #6
0
        public static InitialSessionState CreateRestricted(SessionCapabilities sessionCapabilities)
        {
            InitialSessionState initialSessionState = new InitialSessionState();

            return initialSessionState;
        }
Exemple #7
0
        /// <summary>
        /// Returns a dictionary from a command name to <see cref="CommandMetadata"/> describing
        /// how that command can be restricted to limit attack surface while still being usable
        /// by features included in <paramref name="sessionCapabilities"/>. 
        /// 
        /// For example the implicit remoting feature 
        /// (included in <see cref="SessionCapabilities.RemoteServer"/>) 
        /// doesn't use all parameters of Get-Help 
        /// and uses only a limited set of argument values for the parameters it does use.
        /// 
        /// <see cref="CommandMetadata"/> can be passed to <see cref="ProxyCommand.Create(CommandMetadata)"/> method to generate
        /// a body of a proxy function that forwards calls to the actual cmdlet, while exposing only the parameters
        /// listed in <see cref="CommandMetadata"/>.  Exposing only the restricted proxy function while making
        /// the actual cmdlet and its aliases private can help in reducing attack surface of the remoting server.
        /// </summary>
        /// <returns></returns>
        /// <seealso cref="System.Management.Automation.Runspaces.InitialSessionState.CreateRestricted(SessionCapabilities)"/>
        public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities)
        {
            List<CommandMetadata> restrictedCommands = new List<CommandMetadata>();

            // all remoting cmdlets need to be included for workflow scenarios as wel
            if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer))
            {
                restrictedCommands.AddRange(GetRestrictedRemotingCommands());
            }

            if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer))
            {
#if CORECLR     // Workflow Not Supported On PowerShell Core
                throw PSTraceSource.NewNotSupportedException(ParserStrings.WorkflowNotSupportedInPowerShellCore);
#else
                restrictedCommands.AddRange(GetRestrictedRemotingCommands());
                restrictedCommands.AddRange(GetRestrictedJobCommands());
#endif
            }

            Dictionary<string, CommandMetadata> result = new Dictionary<string, CommandMetadata>(StringComparer.OrdinalIgnoreCase);
            foreach (CommandMetadata restrictedCommand in restrictedCommands)
            {
                result.Add(restrictedCommand.Name, restrictedCommand);
            }
            return result;
        }
Exemple #8
0
 public static Dictionary <string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities)
 {
     throw new NotImplementedException();
 }
Exemple #9
0
 public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities)
 {
     throw new NotImplementedException();
 }
Exemple #10
0
 public static Dictionary<string, CommandMetadata> GetRestrictedCommands(SessionCapabilities sessionCapabilities)
 {
     List<CommandMetadata> list = new List<CommandMetadata>();
     if (SessionCapabilities.RemoteServer == (sessionCapabilities & SessionCapabilities.RemoteServer))
     {
         list.AddRange(GetRestrictedRemotingCommands());
     }
     if (SessionCapabilities.WorkflowServer == (sessionCapabilities & SessionCapabilities.WorkflowServer))
     {
         list.AddRange(GetRestrictedRemotingCommands());
         list.AddRange(GetRestrictedJobCommands());
     }
     Dictionary<string, CommandMetadata> dictionary = new Dictionary<string, CommandMetadata>(StringComparer.OrdinalIgnoreCase);
     foreach (CommandMetadata metadata in list)
     {
         dictionary.Add(metadata.Name, metadata);
     }
     return dictionary;
 }