This file is indexed.

/usr/include/saml/saml2/metadata/AbstractMetadataProvider.h is in libsaml2-dev 2.6.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/**
 * Licensed to the University Corporation for Advanced Internet
 * Development, Inc. (UCAID) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for
 * additional information regarding copyright ownership.
 *
 * UCAID licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the
 * License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */

/**
 * @file saml/saml2/metadata/AbstractMetadataProvider.h
 * 
 * Base class for caching metadata providers.
 */

#ifndef __saml2_absmetadataprov_h__
#define __saml2_absmetadataprov_h__

#include <saml/saml2/metadata/ObservableMetadataProvider.h>

#include <ctime>
#include <map>
#include <vector>
#include <string>

namespace xmltooling {
    class XMLTOOL_API Credential;
    class XMLTOOL_API CredentialCriteria;
    class XMLTOOL_API KeyInfoResolver;
    class XMLTOOL_API Mutex;
};

namespace opensaml {
    namespace saml2md {
        
        class SAML_API MetadataFilter;

#if defined (_MSC_VER)
        #pragma warning( push )
        #pragma warning( disable : 4251 )
#endif

        /**
         * Base class for caching metadata providers.
         */
        class SAML_API AbstractMetadataProvider : public ObservableMetadataProvider
        {
        protected:
            /**
             * Constructor.
             * 
             * If a DOM is supplied, a set of default logic will be used to identify
             * and build a KeyInfoResolver plugin and install it into the provider.
             * 
             * The following XML content is supported:
             * 
             * <ul>
             *  <li>&lt;KeyInfoResolver&gt; elements with a type attribute
             * </ul>
             * 
             * XML namespaces are ignored in the processing of these elements.
             * 
             * @param e DOM to supply configuration for provider
             */
            AbstractMetadataProvider(const xercesc::DOMElement* e=nullptr);
            
        public:
            virtual ~AbstractMetadataProvider();
            
            using MetadataProvider::getEntityDescriptor;
            using MetadataProvider::getEntitiesDescriptor;

            void outputStatus(std::ostream& os) const;
            void emitChangeEvent() const;
            void emitChangeEvent(const EntityDescriptor&) const;
            std::pair<const EntityDescriptor*,const RoleDescriptor*> getEntityDescriptor(const Criteria& criteria) const;
            const EntitiesDescriptor* getEntitiesDescriptor(const char* name, bool requireValidMetadata=true) const;
            const xmltooling::Credential* resolve(const xmltooling::CredentialCriteria* criteria=nullptr) const;
            std::vector<const xmltooling::Credential*>::size_type resolve(
                std::vector<const xmltooling::Credential*>& results, const xmltooling::CredentialCriteria* criteria=nullptr
                ) const;

        protected:
            /** Time of last update for reporting. */
            mutable time_t m_lastUpdate;

            /** Embedded KeyInfoResolver instance. */
            xmltooling::KeyInfoResolver* m_resolver;

            /**
             * Loads an entity into the cache for faster lookup.
             * <p>This includes processing known reverse lookup strategies for artifacts.
             * The validUntil parameter will contain the smallest value found on output.
             * This method will *not* free any objects removed from the cache.</p>
             * 
             * @param site          entity definition
             * @param validUntil    maximum expiration time of the entity definition
             * @param replace       true iff existing entries for the same entity should be cleared/replaced
             */
            virtual void indexEntity(EntityDescriptor* site, time_t& validUntil, bool replace=false) const;

            /**
             * Loads a group of entities into the cache for faster lookup.
             * <p>The validUntil parameter will contain the smallest value found on output.
             * 
             * @param group         group definition
             * @param validUntil    maximum expiration time of the group definition
             */
            virtual void indexGroup(EntitiesDescriptor* group, time_t& validUntil) const;

            /**
             * @deprecated
             * Loads an entity into the cache for faster lookup.
             * <p>This includes processing known reverse lookup strategies for artifacts.
             * This method will *not* free any objects removed from the cache.</p>
             * 
             * @param site          entity definition
             * @param validUntil    maximum expiration time of the entity definition
             * @param replace       true iff existing entries for the same entity should be cleared/replaced
             */
            virtual void index(EntityDescriptor* site, time_t validUntil, bool replace=false) const;

            /**
             * @deprecated
             * Loads a group of entities into the cache for faster lookup.
             * 
             * @param group         group definition
             * @param validUntil    maximum expiration time of the group definition
             */
            virtual void index(EntitiesDescriptor* group, time_t validUntil) const;

            /**
            * Clear a specific entity from the cache.
            *
            * @param entityID the ID of the entity to remove
            * @param freeSites true iff the objects cached in the site map should be freed.
            */
            virtual void unindex(const XMLCh* entityID, bool freeSites=false) const;

            /**
             * Clear the cache of known entities and groups.
             *
             * @param freeSites true iff the objects cached in the site map should be freed.
             */
            virtual void clearDescriptorIndex(bool freeSites=false);

        private:
            typedef std::multimap<std::string,const EntityDescriptor*> sitemap_t;
            typedef std::multimap<std::string,const EntitiesDescriptor*> groupmap_t;
            mutable sitemap_t m_sites;
            mutable sitemap_t m_sources;
            mutable groupmap_t m_groups;

            std::auto_ptr<xmltooling::KeyInfoResolver> m_resolverWrapper;
            mutable std::auto_ptr<xmltooling::Mutex> m_credentialLock;
            typedef std::map< const RoleDescriptor*, std::vector<xmltooling::Credential*> > credmap_t;
            mutable credmap_t m_credentialMap;
            const credmap_t::mapped_type& resolveCredentials(const RoleDescriptor& role) const;
        };

#if defined (_MSC_VER)
        #pragma warning( pop )
        #pragma warning( disable : 4251 )
#endif
        
    };
};

#endif /* __saml2_absmetadataprov_h__ */